Name: series-workflowhxnfd Phase: Succeeded StartedAt: 2026-08-01 23:59:42 +0000 UTC FinishedAt: 2026-08-02 04:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[0] Phase: Succeeded StartedAt: 2026-08-01 23:59:42 +0000 UTC FinishedAt: 2026-08-02 00:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 23:59:42 +0000 UTC FinishedAt: 2026-08-02 00:23:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_TABLES_IPV4", "NF_TABLES_IPV6", "NF_TABLES_INET", "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "NFT_REJECT_IPV4", "NFT_REJECT_IPV6", "NFT_REJECT_INET", "NFT_XFRM", "NFT_CONNLIMIT", "NF_CONNTRACK", "NET_IPIP", "IPV6_TUNNEL", "NET_DSA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_TABLES_IPV4", "NF_TABLES_IPV6", "NF_TABLES_INET", "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "NFT_REJECT_IPV4", "NFT_REJECT_IPV6", "NFT_REJECT_INET", "NFT_XFRM", "NFT_CONNLIMIT", "NF_CONNTRACK", "NET_IPIP", "IPV6_TUNNEL", "NET_DSA" ], "series_id": "95906114-7fde-4ead-925f-0aa9bae6ff0e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_flow_route", "dev_fill_forward_path", "dev_fill_forward_path_release", "nf_send_reset", "nf_send_reset6", "nf_send_unreach", "nf_send_unreach6", "nft_meta_get_eval", "nft_rt_get_eval", "nf_conncount_add_skb", "nf_conncount_count_skb", "nf_conntrack_tcp_packet" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSVBWNCYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSVBWNiYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSU5FVCYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkZUX1JFSkVDVF9JUFY0JiMzNDssCiAgICAmIzM0O05GVF9SRUpFQ1RfSVBWNiYjMzQ7LAogICAgJiMzNDtORlRfUkVKRUNUX0lORVQmIzM0OywKICAgICYjMzQ7TkZUX1hGUk0mIzM0OywKICAgICYjMzQ7TkZUX0NPTk5MSU1JVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkVUX0lQSVAmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OywKICAgICYjMzQ7TkVUX0RTQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9mbG93X3JvdXRlJiMzNDssCiAgICAmIzM0O2Rldl9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDtkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtuZl9zZW5kX3Jlc2V0JiMzNDssCiAgICAmIzM0O25mX3NlbmRfcmVzZXQ2JiMzNDssCiAgICAmIzM0O25mX3NlbmRfdW5yZWFjaCYjMzQ7LAogICAgJiMzNDtuZl9zZW5kX3VucmVhY2g2JiMzNDssCiAgICAmIzM0O25mdF9tZXRhX2dldF9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9ydF9nZXRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZl9jb25uY291bnRfYWRkX3NrYiYjMzQ7LAogICAgJiMzNDtuZl9jb25uY291bnRfY291bnRfc2tiJiMzNDssCiAgICAmIzM0O25mX2Nvbm50cmFja190Y3BfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0byBmaXggbWVtb3J5IGxlYWtzIGFuZCBpbXByb3ZlIGhhbmRsaW5nIG9mIGBkc3RfZW50cnlgIGluIGBza19idWZmYCBhbmQgYG5ldF9kZXZpY2VfcGF0aGAuIEl0IGludHJvZHVjZXMgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCB0byBwcm9wZXJseSByZWxlYXNlIGBkc3RgIGVudHJpZXMsIHVwZGF0ZXMgYHNrYl92YWxpZF9kc3RgIGNoZWNrcyBpbiBuZXRmaWx0ZXIgcmVqZWN0LCBtZXRhLCBydCwgYW5kIHhmcm0gbW9kdWxlcywgYW5kIG1vZGlmaWVzIGNvbm50cmFjayBUQ1Agc3RhdGUgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjVhMDJkNzMyYjU0ZTE1Y2EzZDU2M2U4MDE1NTczNDdiYjdlN2FlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMDA6MTQ6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbmluZGV4IDMzZGRmMGQwNzg1NTMuLmEwM2FmOTc1MDU3MzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5AQCAtMjk2LDE0ICYjNDM7Mjk2LDE4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0cGF0aCA9IFx1MDAyNnN0YWNrLnBhdGhbc3RhY2subnVtX3BhdGhzIC0gMV07XG4tXHRpZiAocGF0aC1cdTAwM2V0eXBlICE9IERFVl9QQVRIX01US19XRE1BKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAocGF0aC1cdTAwM2V0eXBlICE9IERFVl9QQVRIX01US19XRE1BKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiBcbiBcdGluZm8tXHUwMDNlaWR4ID0gcGF0aC1cdTAwM2VtdGtfd2RtYS53ZG1hX2lkeDtcbiBcdGluZm8tXHUwMDNlYnNzID0gcGF0aC1cdTAwM2VtdGtfd2RtYS5ic3M7XG4gXHRpbmZvLVx1MDAzZXdjaWQgPSBwYXRoLVx1MDAzZW10a193ZG1hLndjaWQ7XG4mIzQzO2Vycl9vdXQ6XG4mIzQzO1x0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UoXHUwMDI2c3RhY2spO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCBhaXJvaGFfZ2V0X2RzYV9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICoqZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbmluZGV4IGNjOGM0ZWY4MDM4ZjMuLjc3MWQ5MTE4Zjk0YWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbkBAIC0xMDgsMTYgJiM0MzsxMDgsMjAgQEAgbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2lcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdHBhdGggPSBcdTAwMjZzdGFjay5wYXRoW3N0YWNrLm51bV9wYXRocyAtIDFdO1xuLVx0aWYgKHBhdGgtXHUwMDNldHlwZSAhPSBERVZfUEFUSF9NVEtfV0RNQSlcbi1cdFx0cmV0dXJuIC0xO1xuJiM0MztcdGlmIChwYXRoLVx1MDAzZXR5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpIHtcbiYjNDM7XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuIFxuIFx0aW5mby1cdTAwM2V3ZG1hX2lkeCA9IHBhdGgtXHUwMDNlbXRrX3dkbWEud2RtYV9pZHg7XG4gXHRpbmZvLVx1MDAzZXF1ZXVlID0gcGF0aC1cdTAwM2VtdGtfd2RtYS5xdWV1ZTtcbiBcdGluZm8tXHUwMDNlYnNzID0gcGF0aC1cdTAwM2VtdGtfd2RtYS5ic3M7XG4gXHRpbmZvLVx1MDAzZXdjaWQgPSBwYXRoLVx1MDAzZW10a193ZG1hLndjaWQ7XG4gXHRpbmZvLVx1MDAzZWFtc2R1ID0gcGF0aC1cdTAwM2VtdGtfd2RtYS5hbXNkdTtcbiYjNDM7ZXJyX291dDpcbiYjNDM7XHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShcdTAwMjZzdGFjayk7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOGRiMjViNzk1NzNlMy4uNjJjZmFkN2U2Yjc5YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC04OTIsNiAmIzQzOzg5Miw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgge1xuIFx0XHRcdHU4XHRcdGhfZGVzdFtFVEhfQUxFTl07XG4gXHRcdH0gZW5jYXA7XG4gXHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcbiBcdFx0XHR1bmlvbiB7XG4gXHRcdFx0XHRzdHJ1Y3QgaW5fYWRkclx0c3JjX3Y0O1xuIFx0XHRcdFx0c3RydWN0IGluNl9hZGRyXHRzcmNfdjY7XG5AQCAtMzQyNyw2ICYjNDM7MzQyOCw3IEBAIGludCBkZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuJiM0Mzt2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZV9yY3Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqX19kZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBjMWMxYmUxYTY5NjJmLi5lNTBlZDY3N2RlNzI1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNzQyLDE0ICYjNDM7NzQyLDMzIEBAIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX21ldGFkYXRhX2RzdCk7XG4gXG4gc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKmRldl9md2RfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiB7XG4tXHRpbnQgayA9IHN0YWNrLVx1MDAzZW51bV9wYXRocyYjNDM7JiM0Mzs7XG4tXG4tXHRpZiAoayBcdTAwM2U9IE5FVF9ERVZJQ0VfUEFUSF9TVEFDS19NQVgpXG4mIzQzO1x0aWYgKHN0YWNrLVx1MDAzZW51bV9wYXRocyAmIzQzOyAxIFx1MDAzZSBORVRfREVWSUNFX1BBVEhfU1RBQ0tfTUFYKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdHJldHVybiBcdTAwMjZzdGFjay1cdTAwM2VwYXRoW2tdO1xuJiM0MztcdHJldHVybiBcdTAwMjZzdGFjay1cdTAwM2VwYXRoW3N0YWNrLVx1MDAzZW51bV9wYXRoc107XG4gfVxuIFxuJiM0Mzt2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcbiYjNDM7XHRpbnQgaztcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YWNrLVx1MDAzZW51bV9wYXRocyA9PSAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGsgPSBzdGFjay1cdTAwM2VudW1fcGF0aHMgLSAxOyBrIFx1MDAzZT0gMDsgay0tKSB7XG4mIzQzO1x0XHRwYXRoID0gXHUwMDI2c3RhY2stXHUwMDNlcGF0aFtrXTtcbiYjNDM7XHRcdHN3aXRjaCAocGF0aC1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0XHRjYXNlIERFVl9QQVRIX1RVTjpcbiYjNDM7XHRcdFx0ZHN0X3JlbGVhc2UocGF0aC1cdTAwM2V0dW4uZHN0KTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UpO1xuJiM0MztcbiBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbiBcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuIHtcbkBAIC03NjYsMTUgJiM0Mzs3ODUsMTYgQEAgaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXG4gXHRcdGxhc3RfZGV2ID0gY3R4LmRldjtcbiBcdFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4gXHRcdGlmICghcGF0aClcbi1cdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0bWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7XG4gXHRcdHJldCA9IGN0eC5kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBwYXRoKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiBcbiYjNDM7XHRcdHN0YWNrLVx1MDAzZW51bV9wYXRocyYjNDM7JiM0Mzs7XG4gXHRcdGlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpXG4tXHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXHR9XG4gXG4gXHRpZiAoIWN0eC5kZXYpXG5AQCAtNzgyLDExICYjNDM7ODAyLDE3IEBAIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFxuIFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4gXHRpZiAoIXBhdGgpXG4tXHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XG4gXHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDtcbiBcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LmRldjtcbiYjNDM7XHRzdGFjay1cdTAwM2VudW1fcGF0aHMmIzQzOyYjNDM7O1xuIFxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7ZXJyX291dDpcbiYjNDM7XHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAtMTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3VzZXIuYyBiL25ldC9kc2EvdXNlci5jXG5pbmRleCAwM2M3YWY2YWJlMThhLi40MDY1YzZlZTZmYzY4IDEwMDY0NFxuLS0tIGEvbmV0L2RzYS91c2VyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdXNlci5jXG5AQCAtMjU0NywxNCAmIzQzOzI1NDcsMTMgQEAgc3RhdGljIGludCBkc2FfdXNlcl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbiB7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChjdHgtXHUwMDNlZGV2KTtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0ID0gZHNhX3BvcnRfdG9fY29uZHVpdChkcCk7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCA9IGRwLVx1MDAzZWNwdV9kcDtcbiBcbiBcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcdHBhdGgtXHUwMDNldHlwZSA9IERFVl9QQVRIX0RTQTtcbiBcdHBhdGgtXHUwMDNlZHNhLnByb3RvID0gY3B1X2RwLVx1MDAzZXRhZ19vcHMtXHUwMDNlcHJvdG87XG4gXHRwYXRoLVx1MDAzZWRzYS5wb3J0ID0gZHAtXHUwMDNlaW5kZXg7XG4tXHRjdHgtXHUwMDNlZGV2ID0gY29uZHVpdDtcbiYjNDM7XHRjdHgtXHUwMDNlZGV2ID0gTlVMTDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmNcbmluZGV4IDA4MzFmNmI4MTcxN2MuLmZiN2Q5NmY5OWIwNmIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcGlwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwaXAuY1xuQEAgLTM3NiwxMCAmIzQzOzM3NiwxMCBAQCBzdGF0aWMgaW50IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdHBhdGgtXHUwMDNldHVuLnNyY192NC5zX2FkZHIgPSB0aXBoLVx1MDAzZXNhZGRyO1xuIFx0cGF0aC1cdTAwM2V0dW4uZHN0X3Y0LnNfYWRkciA9IHRpcGgtXHUwMDNlZGFkZHI7XG4gXHRwYXRoLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcbiYjNDM7XHRwYXRoLVx1MDAzZXR1bi5kc3QgPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4gXHRwYXRoLVx1MDAzZWRldiA9IGN0eC1cdTAwM2VkZXY7XG4gXG4gXHRjdHgtXHUwMDNlZGV2ID0gcnQtXHUwMDNlZHN0LmRldjtcbi1cdGlwX3J0X3B1dChydCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuY1xuaW5kZXggNDYyNmRjNDY4MDhmMy4uNTllYzQ2NWE5ZGY5OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuY1xuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9yZWplY3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfYnJpZGdlLmhcdTAwM2VcbkBAIC0yNjMsNiAmIzQzOzI2NCw3IEBAIHN0YXRpYyBpbnQgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxuIFx0aWYgKCFkc3QpXG4gXHRcdHJldHVybiAtMTtcbiBcbiYjNDM7XHRza2JfZHN0X2Ryb3Aoc2tiX2luKTtcbiBcdHNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0yNzksNyAmIzQzOzI4MSw3IEBAIHZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbiBcdGlmICghb3RoKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIXNrYl9kc3Qob2xkc2tiKSBcdTAwMjZcdTAwMjYgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChvbGRza2IpIFx1MDAzYyAwKVxuJiM0MztcdGlmICghc2tiX3ZhbGlkX2RzdChvbGRza2IpIFx1MDAyNlx1MDAyNiBuZl9yZWplY3RfZmlsbF9za2JfZHN0KG9sZHNrYikgXHUwMDNjIDApXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChza2JfcnRhYmxlKG9sZHNrYiktXHUwMDNlcnRfZmxhZ3MgXHUwMDI2IChSVENGX0JST0FEQ0FTVCB8IFJUQ0ZfTVVMVElDQVNUKSlcbkBAIC0zNTIsNyAmIzQzOzM1NCw3IEBAIHZvaWQgbmZfc2VuZF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCBjb2RlLCBpbnQgaG9vaylcbiBcdGlmIChpcGgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghc2tiX2RzdChza2JfaW4pIFx1MDAyNlx1MDAyNiBuZl9yZWplY3RfZmlsbF9za2JfZHN0KHNrYl9pbikgXHUwMDNjIDApXG4mIzQzO1x0aWYgKCFza2JfdmFsaWRfZHN0KHNrYl9pbikgXHUwMDI2XHUwMDI2IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc2tiX2luKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYl9pbikgfHxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbmluZGV4IDk3YzNmNjFkNjI3YmIuLmQ4MDAyMGJjMjYyMGUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuQEAgLTE4NzAsMTIgJiM0MzsxODcwLDE0IEBAIHN0YXRpYyBpbnQgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRwYXRoLVx1MDAzZXR1bi5zcmNfdjYgPSBmbDYuc2FkZHI7XG4gXHRcdHBhdGgtXHUwMDNldHVuLmRzdF92NiA9IGZsNi5kYWRkcjtcbiBcdFx0cGF0aC1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7XG4mIzQzO1x0XHRwYXRoLVx1MDAzZXR1bi5kc3QgPSBkc3Q7XG4gXHRcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcdFx0Y3R4LVx1MDAzZWRldiA9IGRzdC1cdTAwM2VkZXY7XG4gXHR9XG4gXG4gXHRlcnIgPSBkc3QtXHUwMDNlZXJyb3I7XG4tXHRkc3RfcmVsZWFzZShkc3QpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRkc3RfcmVsZWFzZShkc3QpO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuY1xuaW5kZXggZWY1YjdlODVjZmZhOC4uMDdjZGFhMTBkYTBkMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuY1xuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2NoZWNrc3VtLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9pcHY2L25mX3JlamVjdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaFx1MDAzZVxuQEAgLTMwNCw2ICYjNDM7MzA1LDcgQEAgc3RhdGljIGludCBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxuIFx0aWYgKCFkc3QpXG4gXHRcdHJldHVybiAtMTtcbiBcbiYjNDM7XHRza2JfZHN0X2Ryb3Aoc2tiX2luKTtcbiBcdHNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzYsMTAgJiM0MzszMzgsMTIgQEAgdm9pZCBuZl9zZW5kX3Jlc2V0NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbiBcdGZsNi5mbDZfc3BvcnQgPSBvdGNwaC1cdTAwM2VkZXN0O1xuIFx0Zmw2LmZsNl9kcG9ydCA9IG90Y3BoLVx1MDAzZXNvdXJjZTtcbiBcbi1cdGlmICghc2tiX2RzdChvbGRza2IpKSB7XG4mIzQzO1x0aWYgKCFza2JfdmFsaWRfZHN0KG9sZHNrYikpIHtcbiBcdFx0bmZfaXA2X3JvdXRlKG5ldCwgXHUwMDI2ZHN0LCBmbG93aTZfdG9fZmxvd2koXHUwMDI2Zmw2KSwgZmFsc2UpO1xuIFx0XHRpZiAoIWRzdClcbiBcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFx0c2tiX2RzdF9kcm9wKG9sZHNrYik7XG4gXHRcdHNrYl9kc3Rfc2V0KG9sZHNrYiwgZHN0KTtcbiBcdH1cbiBcbkBAIC00NDAsNyAmIzQzOzQ0NCw3IEBAIHZvaWQgbmZfc2VuZF91bnJlYWNoNihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2JfaW4sXG4gXHRpZiAoaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX09VVCBcdTAwMjZcdTAwMjYgc2tiX2luLVx1MDAzZWRldiA9PSBOVUxMKVxuIFx0XHRza2JfaW4tXHUwMDNlZGV2ID0gbmV0LVx1MDAzZWxvb3BiYWNrX2RldjtcbiBcbi1cdGlmICghc2tiX2RzdChza2JfaW4pIFx1MDAyNlx1MDAyNiBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChza2JfaW4pIFx1MDAzYyAwKVxuJiM0MztcdGlmICghc2tiX3ZhbGlkX2RzdChza2JfaW4pIFx1MDAyNlx1MDAyNiBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChza2JfaW4pIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpY21wdjZfc2VuZChza2JfaW4sIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXG5pbmRleCBlOWVhNmQ5NDY2ZTc0Li44NTQ4N2Y5MmFmNTA2IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xuQEAgLTE1OCw2ICYjNDM7MTU4LDggQEAgc3RhdGljIGJvb2wgZ2V0X2N0X29yX3R1cGxlX2Zyb21fc2tiKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRmb3VuZF9jdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCk7XG4mIzQzO1x0KnR1cGxlID0gZm91bmRfY3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XG4mIzQzO1x0KnpvbmUgPSBuZl9jdF96b25lKGZvdW5kX2N0KTtcbiBcdCpyZWZjb3VudGVkID0gdHJ1ZTtcbiBcdCpjdCA9IGZvdW5kX2N0O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbmluZGV4IGNlZWVkM2Q3ZmU1MjAuLjcyM2U5NDZhNzhmNDAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbkBAIC0xMjgxLDggJiM0MzsxMjgxLDkgQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdGlmIChjdC1cdTAwM2Vwcm90by50Y3AucmV0cmFucyBcdTAwM2U9IHRuLVx1MDAzZXRjcF9tYXhfcmV0cmFucyBcdTAwMjZcdTAwMjZcbiBcdCAgICB0aW1lb3V0c1tuZXdfc3RhdGVdIFx1MDAzZSB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1JFVFJBTlNdKVxuIFx0XHR0aW1lb3V0ID0gdGltZW91dHNbVENQX0NPTk5UUkFDS19SRVRSQU5TXTtcbi1cdGVsc2UgaWYgKHVubGlrZWx5KGluZGV4ID09IFRDUF9SU1RfU0VUKSlcbi1cdFx0dGltZW91dCA9IHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfQ0xPU0VdO1xuJiM0MztcdGVsc2UgaWYgKHVubGlrZWx5KGluZGV4ID09IFRDUF9SU1RfU0VUIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgIG5ld19zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEKSlcbiYjNDM7XHRcdHRpbWVvdXQgPSB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXTtcbiBcdGVsc2UgaWYgKChjdC1cdTAwM2Vwcm90by50Y3Auc2VlblswXS5mbGFncyB8IGN0LVx1MDAzZXByb3RvLnRjcC5zZWVuWzFdLmZsYWdzKSBcdTAwMjZcbiBcdFx0IElQX0NUX1RDUF9GTEFHX0RBVEFfVU5BQ0tOT1dMRURHRUQgXHUwMDI2XHUwMDI2XG4gXHRcdCB0aW1lb3V0c1tuZXdfc3RhdGVdIFx1MDAzZSB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXSlcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuaW5kZXggOThjMDNiNDg3ZjUyMS4uNTYyMTliMDJlMTIyNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbkBAIC00Miw4ICYjNDM7NDIsNyBAQCBzdGF0aWMgYm9vbCBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxuJiM0MztzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdFx0XHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG5AQCAtNzYsMTQgJiM0Mzs3NSwxNCBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuIH1cbiBcbiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XG4tXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXY7XG4tXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0ZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3QgaWQge1xuIFx0XHRfX3UxNlx0aWQ7XG4gXHRcdF9fYmUxNlx0cHJvdG87XG4gXHR9IGVuY2FwW05GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYXTtcbiBcdHU4IG51bV9lbmNhcHM7XG4gXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB0dW47XG4mIzQzO1x0c3RydWN0IGRzdF9lbnRyeSAqdHVuX2RzdDtcbiBcdHU4IG51bV90dW5zO1xuIFx0dTggaW5ncmVzc192bGFucztcbiBcdHU4IGhfc291cmNlW0VUSF9BTEVOXTtcbkBAIC05Miw5ICYjNDM7OTEsMTIgQEAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8ge1xuIFx0ZW51bSBmbG93X29mZmxvYWRfeG1pdF90eXBlIHhtaXRfdHlwZTtcbiB9O1xuIFxuLXN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4mIzQzO3N0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHQgICAgIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvICppbmZvLFxuLVx0XHRcdCAgICAgdW5zaWduZWQgY2hhciAqaGEsIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4gXHRpbnQgaTtcbkBAIC0xMDksMjkgJiM0MzsxMTEsMjcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0Y2FzZSBERVZfUEFUSF9WTEFOOlxuIFx0XHRjYXNlIERFVl9QQVRIX1BQUE9FOlxuIFx0XHRjYXNlIERFVl9QQVRIX1RVTjpcbi1cdFx0XHRpbmZvLVx1MDAzZWluZGV2ID0gcGF0aC1cdTAwM2VkZXY7XG4mIzQzO1x0XHRcdGluZm8tXHUwMDNlZGV2ID0gcGF0aC1cdTAwM2VkZXY7XG4gXHRcdFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihpbmZvLVx1MDAzZWhfc291cmNlKSlcbiBcdFx0XHRcdG1lbWNweShpbmZvLVx1MDAzZWhfc291cmNlLCBwYXRoLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuIFxuLVx0XHRcdGlmIChwYXRoLVx1MDAzZXR5cGUgPT0gREVWX1BBVEhfRVRIRVJORVQpXG4mIzQzO1x0XHRcdGlmIChwYXRoLVx1MDAzZXR5cGUgPT0gREVWX1BBVEhfRVRIRVJORVQgfHxcbiYjNDM7XHRcdFx0ICAgIHBhdGgtXHUwMDNldHlwZSA9PSBERVZfUEFUSF9EU0EpXG4gXHRcdFx0XHRicmVhaztcbi1cdFx0XHRpZiAocGF0aC1cdTAwM2V0eXBlID09IERFVl9QQVRIX0RTQSkge1xuLVx0XHRcdFx0aSA9IHN0YWNrLVx1MDAzZW51bV9wYXRocztcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbiBcbiBcdFx0XHQvKiBERVZfUEFUSF9WTEFOLCBERVZfUEFUSF9QUFBPRSBhbmQgREVWX1BBVEhfVFVOICovXG4gXHRcdFx0aWYgKHBhdGgtXHUwMDNldHlwZSA9PSBERVZfUEFUSF9UVU4pIHtcbiBcdFx0XHRcdGlmIChpbmZvLVx1MDAzZW51bV90dW5zKVxuLVx0XHRcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5zcmNfdjYgPSBwYXRoLVx1MDAzZXR1bi5zcmNfdjY7XG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5kc3RfdjYgPSBwYXRoLVx1MDAzZXR1bi5kc3RfdjY7XG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5sM19wcm90byA9IHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvO1xuJiM0MztcdFx0XHRcdGluZm8tXHUwMDNldHVuX2RzdCA9IHBhdGgtXHUwMDNldHVuLmRzdDtcbiBcdFx0XHRcdGluZm8tXHUwMDNlbnVtX3R1bnMmIzQzOyYjNDM7O1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzIFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpXG4tXHRcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNlZW5jYXBbaW5mby1cdTAwM2VudW1fZW5jYXBzXS5pZCA9XG4gXHRcdFx0XHRcdHBhdGgtXHUwMDNlZW5jYXAuaWQ7XG5AQCAtMTUyLDEzICYjNDM7MTUyLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0c3dpdGNoIChwYXRoLVx1MDAzZWJyaWRnZS52bGFuX21vZGUpIHtcbiBcdFx0XHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVU5UQUdfSFc6XG4gXHRcdFx0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzID09IDApXG4tXHRcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNlaW5ncmVzc192bGFucyB8PSBCSVQoaW5mby1cdTAwM2VudW1fZW5jYXBzIC0gMSk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVEFHOlxuIFx0XHRcdFx0aWYgKGluZm8tXHUwMDNlbnVtX2VuY2FwcyBcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxuLVx0XHRcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZWVuY2FwW2luZm8tXHUwMDNlbnVtX2VuY2Fwc10uaWQgPSBwYXRoLVx1MDAzZWJyaWRnZS52bGFuX2lkO1xuIFx0XHRcdFx0aW5mby1cdTAwM2VlbmNhcFtpbmZvLVx1MDAzZW51bV9lbmNhcHNdLnByb3RvID0gcGF0aC1cdTAwM2VicmlkZ2Uudmxhbl9wcm90bztcbkBAIC0xNjYsNyAmIzQzOzE2Niw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVU5UQUc6XG4gXHRcdFx0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzID09IDApXG4tXHRcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNlbnVtX2VuY2Fwcy0tO1xuIFx0XHRcdFx0YnJlYWs7XG5AQCAtMTc2LDE2ICYjNDM7MTc2LDIyIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0aW5mby1cdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXHRcdH1cbiBcdH1cbi1cdGluZm8tXHUwMDNlb3V0ZGV2ID0gaW5mby1cdTAwM2VpbmRldjtcbiBcbi1cdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoaW5mby1cdTAwM2VpbmRldikpXG4mIzQzO1x0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKFx1MDAyNmZ0LVx1MDAzZWRhdGEpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGluZm8tXHUwMDNlZGV2KSlcbiBcdFx0aW5mby1cdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XG4gXG4mIzQzO1x0aWYgKCFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGluZm8tXHUwMDNlZGV2LCBmdCkpXG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4mIzQzO2Vycl9vdXQ6XG4mIzQzO1x0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RhY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLTE7XG4gfVxuIFxuIHN0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbkBAIC0yMDUsNDQgJiM0MzsyMTEsNiBAQCBzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gZm91bmQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi1cdFx0XHRcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWwgKnR1bixcbi1cdFx0XHRcdFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuLVx0XHRcdFx0XHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyKVxuLXtcbi1cdHN0cnVjdCBkc3RfZW50cnkgKmN1cl9kc3QgPSByb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdDtcbi1cdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMO1xuLVx0c3RydWN0IGZsb3dpIGZsID0ge307XG4tXG4tXHRzd2l0Y2ggKG5mdF9wZihwa3QpKSB7XG4tXHRjYXNlIE5GUFJPVE9fSVBWNDpcbi1cdFx0ZmwudS5pcDQuZGFkZHIgPSB0dW4tXHUwMDNlZHN0X3Y0LnNfYWRkcjtcbi1cdFx0ZmwudS5pcDQuc2FkZHIgPSB0dW4tXHUwMDNlc3JjX3Y0LnNfYWRkcjtcbi1cdFx0ZmwudS5pcDQuZmxvd2k0X2lpZiA9IG5mdF9pbihwa3QpLVx1MDAzZWlmaW5kZXg7XG4tXHRcdGZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtXHUwMDNlc2tiKSk7XG4tXHRcdGZsLnUuaXA0LmZsb3dpNF9tYXJrID0gcGt0LVx1MDAzZXNrYi1cdTAwM2VtYXJrO1xuLVx0XHRmbC51LmlwNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQztcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIE5GUFJPVE9fSVBWNjpcbi1cdFx0ZmwudS5pcDYuZGFkZHIgPSB0dW4tXHUwMDNlZHN0X3Y2O1xuLVx0XHRmbC51LmlwNi5zYWRkciA9IHR1bi1cdTAwM2VzcmNfdjY7XG4tXHRcdGZsLnUuaXA2LmZsb3dpNl9paWYgPSBuZnRfaW4ocGt0KS1cdTAwM2VpZmluZGV4O1xuLVx0XHRmbC51LmlwNi5mbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaXB2Nl9oZHIocGt0LVx1MDAzZXNrYikpO1xuLVx0XHRmbC51LmlwNi5mbG93aTZfbWFyayA9IHBrdC1cdTAwM2Vza2ItXHUwMDNlbWFyaztcbi1cdFx0ZmwudS5pcDYuZmxvd2k2X2ZsYWdzID0gRkxPV0lfRkxBR19BTllTUkM7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0bmZfcm91dGUobmZ0X25ldChwa3QpLCBcdTAwMjZ0dW5fZHN0LCBcdTAwMjZmbCwgZmFsc2UsIG5mdF9wZihwa3QpKTtcbi1cdGlmICghdHVuX2RzdClcbi1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXG4tXHRyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdCA9IHR1bl9kc3Q7XG4tXHRkc3RfcmVsZWFzZShjdXJfZHN0KTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0XHRcdFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuQEAgLTI1NSwyOCAmIzQzOzIyMywyNSBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0dW5zaWduZWQgY2hhciBoYVtFVEhfQUxFTl07XG4gXHRpbnQgaTtcbiBcbi1cdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHJvdXRlLCBkc3QsIGN0LCBkaXIsIGhhLCBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbi1cdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIFx1MDAyNmZ0LVx1MDAzZWRhdGEpIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gLUVOT0VOVDtcbi1cbi1cdGlmICghbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihpbmZvLmluZGV2LCBmdCkpXG4mIzQzO1x0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwIHx8XG4mIzQzO1x0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFx1MDAyNnN0YWNrLCBcdTAwMjZpbmZvLCBoYSwgZnQpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbi1cdGlmIChpbmZvLm91dGRldilcbi1cdFx0cm91dGUtXHUwMDNldHVwbGVbZGlyXS5vdXQuaWZpbmRleCA9IGluZm8ub3V0ZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4uaWZpbmRleCA9IGluZm8uZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0cm91dGUtXHUwMDNldHVwbGVbZGlyXS5vdXQuaWZpbmRleCA9IGluZm8uZGV2LVx1MDAzZWlmaW5kZXg7XG4gXG4tXHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5pZmluZGV4ID0gaW5mby5pbmRldi1cdTAwM2VpZmluZGV4O1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby5udW1fZW5jYXBzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5lbmNhcFtpXS5pZCA9IGluZm8uZW5jYXBbaV0uaWQ7XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLmVuY2FwW2ldLnByb3RvID0gaW5mby5lbmNhcFtpXS5wcm90bztcbiBcdH1cbiBcbi1cdGlmIChpbmZvLm51bV90dW5zIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKHBrdCwgXHUwMDI2aW5mby50dW4sIHJvdXRlLCBkaXIpKSB7XG4mIzQzO1x0aWYgKGluZm8ubnVtX3R1bnMpIHtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLnNyY192NiA9IGluZm8udHVuLmRzdF92NjtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmRzdF92NiA9IGluZm8udHVuLnNyY192NjtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmwzX3Byb3RvID0gaW5mby50dW4ubDNfcHJvdG87XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLm51bV90dW5zID0gaW5mby5udW1fdHVucztcbiYjNDM7XHRcdGRzdF9yZWxlYXNlKHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0uZHN0KTtcbiYjNDM7XHRcdHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0uZHN0ID0gaW5mby50dW5fZHN0O1xuIFx0fVxuIFxuIFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4ubnVtX2VuY2FwcyA9IGluZm8ubnVtX2VuY2FwcztcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmNcbmluZGV4IDBhNDNlMDc4N2E2ODguLjAxY2ZiYWEzNjUyNTAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuY1xuQEAgLTIwLDYgJiM0MzsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3Bfc3RhdGVzLmhcdTAwM2UgLyogZm9yIFRDUF9USU1FX1dBSVQgKi9cbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oXHUwMDNlXG5AQCAtMjc5LDExICYjNDM7MjgwLDEyIEBAIHN0YXRpYyBib29sIG5mdF9tZXRhX2dldF9ldmFsX2lmbmFtZShlbnVtIG5mdF9tZXRhX2tleXMga2V5LCB1MzIgKmRlc3QsXG4gc3RhdGljIG5vaW5saW5lIGJvb2xcbiBuZnRfbWV0YV9nZXRfZXZhbF9ydGNsYXNzaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpkZXN0KVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3Qoc2tiKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XG4gXG4tXHRpZiAoIWRzdClcbiYjNDM7XHRpZiAoIXNrYl92YWxpZF9kc3Qoc2tiKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuJiM0MztcdGRzdCA9IHNrYl9kc3Qoc2tiKTtcbiBcdCpkZXN0ID0gZHN0LVx1MDAzZXRjbGFzc2lkO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3J0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9ydC5jXG5pbmRleCBhZWIwMDk0ZWFmZDgwLi44NDFjODYzYTA4ZGI1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfcnQuY1xuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxuQEAgLTU5LDEwICYjNDM7NjAsMTEgQEAgdm9pZCBuZnRfcnRfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0dTMyICpkZXN0ID0gXHUwMDI2cmVncy1cdTAwM2VkYXRhW3ByaXYtXHUwMDNlZHJlZ107XG4gXHRjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XG4gXG4tXHRkc3QgPSBza2JfZHN0KHNrYik7XG4tXHRpZiAoIWRzdClcbiYjNDM7XHRpZiAoIXNrYl92YWxpZF9kc3Qoc2tiKSlcbiBcdFx0Z290byBlcnI7XG4gXG4mIzQzO1x0ZHN0ID0gc2tiX2RzdChza2IpO1xuJiM0MztcbiBcdHN3aXRjaCAocHJpdi1cdTAwM2VrZXkpIHtcbiAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX0NMQVNTSURcbiBcdGNhc2UgTkZUX1JUX0NMQVNTSUQ6XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jIGIvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jXG5pbmRleCA4Y2VjNDMwNjQzMTkyLi5jOGJiYTY5N2Y5OTNhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmNcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiBcbkBAIC0xNzcsOSAmIzQzOzE3OCwxNSBAQCBzdGF0aWMgdm9pZCBuZnRfeGZybV9nZXRfZXZhbF9vdXQoY29uc3Qgc3RydWN0IG5mdF94ZnJtICpwcml2LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3QocGt0LVx1MDAzZXNrYik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0O1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0aWYgKCFza2JfdmFsaWRfZHN0KHBrdC1cdTAwM2Vza2IpKSB7XG4mIzQzO1x0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRzdCA9IHNrYl9kc3QocGt0LVx1MDAzZXNrYik7XG4gXHRmb3IgKGkgPSAwOyBkc3QgXHUwMDI2XHUwMDI2IGRzdC1cdTAwM2V4ZnJtO1xuIFx0ICAgICBkc3QgPSAoKGNvbnN0IHN0cnVjdCB4ZnJtX2RzdCAqKWRzdCktXHUwMDNlY2hpbGQsIGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChpIFx1MDAzYyBwcml2LVx1MDAzZXNwbnVtKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjhtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX0lQVjQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX0lQVjYmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX0lORVQmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgICAmIzM0O05GVF9SRUpFQ1RfSVBWNCYjMzQ7LAogICAgJiMzNDtORlRfUkVKRUNUX0lQVjYmIzM0OywKICAgICYjMzQ7TkZUX1JFSkVDVF9JTkVUJiMzNDssCiAgICAmIzM0O05GVF9YRlJNJiMzNDssCiAgICAmIzM0O05GVF9DT05OTElNSVQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDssCiAgICAmIzM0O05FVF9EU0EmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfZmxvd19yb3V0ZSYjMzQ7LAogICAgJiMzNDtkZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bmZfc2VuZF9yZXNldCYjMzQ7LAogICAgJiMzNDtuZl9zZW5kX3Jlc2V0NiYjMzQ7LAogICAgJiMzNDtuZl9zZW5kX3VucmVhY2gmIzM0OywKICAgICYjMzQ7bmZfc2VuZF91bnJlYWNoNiYjMzQ7LAogICAgJiMzNDtuZnRfbWV0YV9nZXRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfcnRfZ2V0X2V2YWwmIzM0OywKICAgICYjMzQ7bmZfY29ubmNvdW50X2FkZF9za2ImIzM0OywKICAgICYjMzQ7bmZfY29ubmNvdW50X2NvdW50X3NrYiYjMzQ7LAogICAgJiMzNDtuZl9jb25udHJhY2tfdGNwX3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMgdG8gZml4IG1lbW9yeSBsZWFrcyBhbmQgaW1wcm92ZSBoYW5kbGluZyBvZiBgZHN0X2VudHJ5YCBpbiBgc2tfYnVmZmAgYW5kIGBuZXRfZGV2aWNlX3BhdGhgLiBJdCBpbnRyb2R1Y2VzIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAgdG8gcHJvcGVybHkgcmVsZWFzZSBgZHN0YCBlbnRyaWVzLCB1cGRhdGVzIGBza2JfdmFsaWRfZHN0YCBjaGVja3MgaW4gbmV0ZmlsdGVyIHJlamVjdCwgbWV0YSwgcnQsIGFuZCB4ZnJtIG1vZHVsZXMsIGFuZCBtb2RpZmllcyBjb25udHJhY2sgVENQIHN0YXRlIGhhbmRsaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI1YTAyZDczMmI1NGUxNWNhM2Q1NjNlODAxNTU3MzQ3YmI3ZTdhZTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyIDAwOjE0OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKaW5kZXggMzNkZGYwZDA3ODU1My4uYTAzYWY5NzUwNTczMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCkBAIC0yOTYsMTQgJiM0MzsyOTYsMTggQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsCiAJCXJldHVybiBlcnI7CiAKIAlwYXRoID0gJmFtcDtzdGFjay5wYXRoW3N0YWNrLm51bV9wYXRocyAtIDFdOwotCWlmIChwYXRoLSZndDt0eXBlICE9IERFVl9QQVRIX01US19XRE1BKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHBhdGgtJmd0O3R5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpIHsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KIAogCWluZm8tJmd0O2lkeCA9IHBhdGgtJmd0O210a193ZG1hLndkbWFfaWR4OwogCWluZm8tJmd0O2JzcyA9IHBhdGgtJmd0O210a193ZG1hLmJzczsKIAlpbmZvLSZndDt3Y2lkID0gcGF0aC0mZ3Q7bXRrX3dkbWEud2NpZDsKJiM0MztlcnJfb3V0OgomIzQzOwlkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSgmYW1wO3N0YWNrKTsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGFpcm9oYV9nZXRfZHNhX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKipkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCmluZGV4IGNjOGM0ZWY4MDM4ZjMuLjc3MWQ5MTE4Zjk0YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCkBAIC0xMDgsMTYgJiM0MzsxMDgsMjAgQEAgbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2kKIAkJcmV0dXJuIGVycjsKIAogCXBhdGggPSAmYW1wO3N0YWNrLnBhdGhbc3RhY2subnVtX3BhdGhzIC0gMV07Ci0JaWYgKHBhdGgtJmd0O3R5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpCi0JCXJldHVybiAtMTsKJiM0MzsJaWYgKHBhdGgtJmd0O3R5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpIHsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KIAogCWluZm8tJmd0O3dkbWFfaWR4ID0gcGF0aC0mZ3Q7bXRrX3dkbWEud2RtYV9pZHg7CiAJaW5mby0mZ3Q7cXVldWUgPSBwYXRoLSZndDttdGtfd2RtYS5xdWV1ZTsKIAlpbmZvLSZndDtic3MgPSBwYXRoLSZndDttdGtfd2RtYS5ic3M7CiAJaW5mby0mZ3Q7d2NpZCA9IHBhdGgtJmd0O210a193ZG1hLndjaWQ7CiAJaW5mby0mZ3Q7YW1zZHUgPSBwYXRoLSZndDttdGtfd2RtYS5hbXNkdTsKJiM0MztlcnJfb3V0OgomIzQzOwlkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSgmYW1wO3N0YWNrKTsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDhkYjI1Yjc5NTczZTMuLjYyY2ZhZDdlNmI3OWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtODkyLDYgJiM0Mzs4OTIsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoIHsKIAkJCXU4CQloX2Rlc3RbRVRIX0FMRU5dOwogCQl9IGVuY2FwOwogCQlzdHJ1Y3QgewomIzQzOwkJCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKIAkJCXVuaW9uIHsKIAkJCQlzdHJ1Y3QgaW5fYWRkcglzcmNfdjQ7CiAJCQkJc3RydWN0IGluNl9hZGRyCXNyY192NjsKQEAgLTM0MjcsNiAmIzQzOzM0MjgsNyBAQCBpbnQgZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTsKJiM0Mzt2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTsKIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTsKIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWVfcmN1KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7CiBzdHJ1Y3QgbmV0X2RldmljZSAqX19kZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggYzFjMWJlMWE2OTYyZi4uZTUwZWQ2NzdkZTcyNSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTc0MiwxNCAmIzQzOzc0MiwzMyBAQCBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9tZXRhZGF0YV9kc3QpOwogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKQogewotCWludCBrID0gc3RhY2stJmd0O251bV9wYXRocyYjNDM7JiM0Mzs7Ci0KLQlpZiAoayAmZ3Q7PSBORVRfREVWSUNFX1BBVEhfU1RBQ0tfTUFYKQomIzQzOwlpZiAoc3RhY2stJmd0O251bV9wYXRocyAmIzQzOyAxICZndDsgTkVUX0RFVklDRV9QQVRIX1NUQUNLX01BWCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gJmFtcDtzdGFjay0mZ3Q7cGF0aFtrXTsKJiM0MzsJcmV0dXJuICZhbXA7c3RhY2stJmd0O3BhdGhbc3RhY2stJmd0O251bV9wYXRoc107CiB9CiAKJiM0Mzt2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDsKJiM0MzsJaW50IGs7CiYjNDM7CiYjNDM7CWlmIChzdGFjay0mZ3Q7bnVtX3BhdGhzID09IDApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoayA9IHN0YWNrLSZndDtudW1fcGF0aHMgLSAxOyBrICZndDs9IDA7IGstLSkgewomIzQzOwkJcGF0aCA9ICZhbXA7c3RhY2stJmd0O3BhdGhba107CiYjNDM7CQlzd2l0Y2ggKHBhdGgtJmd0O3R5cGUpIHsKJiM0MzsJCWNhc2UgREVWX1BBVEhfVFVOOgomIzQzOwkJCWRzdF9yZWxlYXNlKHBhdGgtJmd0O3R1bi5kc3QpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSk7CiYjNDM7CiBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkciwKIAkJCSAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCiB7CkBAIC03NjYsMTUgJiM0Mzs3ODUsMTYgQEAgaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsCiAJCWxhc3RfZGV2ID0gY3R4LmRldjsKIAkJcGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7CiAJCWlmICghcGF0aCkKLQkJCXJldHVybiAtMTsKJiM0MzsJCQlnb3RvIGVycl9vdXQ7CiAKIAkJbWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7CiAJCXJldCA9IGN0eC5kZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19maWxsX2ZvcndhcmRfcGF0aCgmYW1wO2N0eCwgcGF0aCk7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJcmV0dXJuIC0xOwomIzQzOwkJCWdvdG8gZXJyX291dDsKIAomIzQzOwkJc3RhY2stJmd0O251bV9wYXRocyYjNDM7JiM0Mzs7CiAJCWlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQkJZ290byBlcnJfb3V0OwogCX0KIAogCWlmICghY3R4LmRldikKQEAgLTc4MiwxMSAmIzQzOzgwMiwxNyBAQCBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkciwKIAogCXBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spOwogCWlmICghcGF0aCkKLQkJcmV0dXJuIC0xOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwogCXBhdGgtJmd0O3R5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDsKIAlwYXRoLSZndDtkZXYgPSBjdHguZGV2OwomIzQzOwlzdGFjay0mZ3Q7bnVtX3BhdGhzJiM0MzsmIzQzOzsKIAotCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiAwOwomIzQzO2Vycl9vdXQ6CiYjNDM7CWRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0YWNrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIC0xOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2RzYS91c2VyLmMgYi9uZXQvZHNhL3VzZXIuYwppbmRleCAwM2M3YWY2YWJlMThhLi40MDY1YzZlZTZmYzY4IDEwMDY0NAotLS0gYS9uZXQvZHNhL3VzZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL3VzZXIuYwpAQCAtMjU0NywxNCAmIzQzOzI1NDcsMTMgQEAgc3RhdGljIGludCBkc2FfdXNlcl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAogCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpCiB7CiAJc3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQoY3R4LSZndDtkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0ID0gZHNhX3BvcnRfdG9fY29uZHVpdChkcCk7CiAJc3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBkcC0mZ3Q7Y3B1X2RwOwogCiAJcGF0aC0mZ3Q7ZGV2ID0gY3R4LSZndDtkZXY7CiAJcGF0aC0mZ3Q7dHlwZSA9IERFVl9QQVRIX0RTQTsKIAlwYXRoLSZndDtkc2EucHJvdG8gPSBjcHVfZHAtJmd0O3RhZ19vcHMtJmd0O3Byb3RvOwogCXBhdGgtJmd0O2RzYS5wb3J0ID0gZHAtJmd0O2luZGV4OwotCWN0eC0mZ3Q7ZGV2ID0gY29uZHVpdDsKJiM0MzsJY3R4LSZndDtkZXYgPSBOVUxMOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmMKaW5kZXggMDgzMWY2YjgxNzE3Yy4uZmI3ZDk2Zjk5YjA2YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBpcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwaXAuYwpAQCAtMzc2LDEwICYjNDM7Mzc2LDEwIEBAIHN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAogCXBhdGgtJmd0O3R1bi5zcmNfdjQuc19hZGRyID0gdGlwaC0mZ3Q7c2FkZHI7CiAJcGF0aC0mZ3Q7dHVuLmRzdF92NC5zX2FkZHIgPSB0aXBoLSZndDtkYWRkcjsKIAlwYXRoLSZndDt0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7CiYjNDM7CXBhdGgtJmd0O3R1bi5kc3QgPSAmYW1wO3J0LSZndDtkc3Q7CiAJcGF0aC0mZ3Q7ZGV2ID0gY3R4LSZndDtkZXY7CiAKIAljdHgtJmd0O2RldiA9IHJ0LSZndDtkc3QuZGV2OwotCWlwX3J0X3B1dChydCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMKaW5kZXggNDYyNmRjNDY4MDhmMy4uNTllYzQ2NWE5ZGY5OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O25ldC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcm91dGUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZHN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfcmVqZWN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyX2lwdjQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgmZ3Q7CkBAIC0yNjMsNiAmIzQzOzI2NCw3IEBAIHN0YXRpYyBpbnQgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKQogCWlmICghZHN0KQogCQlyZXR1cm4gLTE7CiAKJiM0MzsJc2tiX2RzdF9kcm9wKHNrYl9pbik7CiAJc2tiX2RzdF9zZXQoc2tiX2luLCBkc3QpOwogCXJldHVybiAwOwogfQpAQCAtMjc5LDcgJiM0MzsyODEsNyBAQCB2b2lkIG5mX3NlbmRfcmVzZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvbGRza2IsCiAJaWYgKCFvdGgpCiAJCXJldHVybjsKIAotCWlmICghc2tiX2RzdChvbGRza2IpICZhbXA7JmFtcDsgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChvbGRza2IpICZsdDsgMCkKJiM0MzsJaWYgKCFza2JfdmFsaWRfZHN0KG9sZHNrYikgJmFtcDsmYW1wOyBuZl9yZWplY3RfZmlsbF9za2JfZHN0KG9sZHNrYikgJmx0OyAwKQogCQlyZXR1cm47CiAKIAlpZiAoc2tiX3J0YWJsZShvbGRza2IpLSZndDtydF9mbGFncyAmYW1wOyAoUlRDRl9CUk9BRENBU1QgfCBSVENGX01VTFRJQ0FTVCkpCkBAIC0zNTIsNyAmIzQzOzM1NCw3IEBAIHZvaWQgbmZfc2VuZF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCBjb2RlLCBpbnQgaG9vaykKIAlpZiAoaXBoLSZndDtmcmFnX29mZiAmYW1wOyBodG9ucyhJUF9PRkZTRVQpKQogCQlyZXR1cm47CiAKLQlpZiAoIXNrYl9kc3Qoc2tiX2luKSAmYW1wOyZhbXA7IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc2tiX2luKSAmbHQ7IDApCiYjNDM7CWlmICghc2tiX3ZhbGlkX2RzdChza2JfaW4pICZhbXA7JmFtcDsgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChza2JfaW4pICZsdDsgMCkKIAkJcmV0dXJuOwogCiAJaWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYl9pbikgfHwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwppbmRleCA5N2MzZjYxZDYyN2JiLi5kODAwMjBiYzI2MjBlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCkBAIC0xODcwLDEyICYjNDM7MTg3MCwxNCBAQCBzdGF0aWMgaW50IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKIAkJcGF0aC0mZ3Q7dHVuLnNyY192NiA9IGZsNi5zYWRkcjsKIAkJcGF0aC0mZ3Q7dHVuLmRzdF92NiA9IGZsNi5kYWRkcjsKIAkJcGF0aC0mZ3Q7dHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2OwomIzQzOwkJcGF0aC0mZ3Q7dHVuLmRzdCA9IGRzdDsKIAkJcGF0aC0mZ3Q7ZGV2ID0gY3R4LSZndDtkZXY7CiAJCWN0eC0mZ3Q7ZGV2ID0gZHN0LSZndDtkZXY7CiAJfQogCiAJZXJyID0gZHN0LSZndDtlcnJvcjsKLQlkc3RfcmVsZWFzZShkc3QpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZHN0X3JlbGVhc2UoZHN0KTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jCmluZGV4IGVmNWI3ZTg1Y2ZmYTguLjA3Y2RhYTEwZGEwZDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jCkBAIC04LDYgJiM0Mzs4LDcgQEAKICNpbmNsdWRlICZsdDtuZXQvaXA2X3JvdXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwNl9maWIuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXA2X2NoZWNrc3VtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfcmVqZWN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyX2lwdjYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgmZ3Q7CkBAIC0zMDQsNiAmIzQzOzMwNSw3IEBAIHN0YXRpYyBpbnQgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbikKIAlpZiAoIWRzdCkKIAkJcmV0dXJuIC0xOwogCiYjNDM7CXNrYl9kc3RfZHJvcChza2JfaW4pOwogCXNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTMzNiwxMCAmIzQzOzMzOCwxMiBAQCB2b2lkIG5mX3NlbmRfcmVzZXQ2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLAogCWZsNi5mbDZfc3BvcnQgPSBvdGNwaC0mZ3Q7ZGVzdDsKIAlmbDYuZmw2X2Rwb3J0ID0gb3RjcGgtJmd0O3NvdXJjZTsKIAotCWlmICghc2tiX2RzdChvbGRza2IpKSB7CiYjNDM7CWlmICghc2tiX3ZhbGlkX2RzdChvbGRza2IpKSB7CiAJCW5mX2lwNl9yb3V0ZShuZXQsICZhbXA7ZHN0LCBmbG93aTZfdG9fZmxvd2koJmFtcDtmbDYpLCBmYWxzZSk7CiAJCWlmICghZHN0KQogCQkJcmV0dXJuOwomIzQzOwomIzQzOwkJc2tiX2RzdF9kcm9wKG9sZHNrYik7CiAJCXNrYl9kc3Rfc2V0KG9sZHNrYiwgZHN0KTsKIAl9CiAKQEAgLTQ0MCw3ICYjNDM7NDQ0LDcgQEAgdm9pZCBuZl9zZW5kX3VucmVhY2g2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwKIAlpZiAoaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX09VVCAmYW1wOyZhbXA7IHNrYl9pbi0mZ3Q7ZGV2ID09IE5VTEwpCiAJCXNrYl9pbi0mZ3Q7ZGV2ID0gbmV0LSZndDtsb29wYmFja19kZXY7CiAKLQlpZiAoIXNrYl9kc3Qoc2tiX2luKSAmYW1wOyZhbXA7IG5mX3JlamVjdDZfZmlsbF9za2JfZHN0KHNrYl9pbikgJmx0OyAwKQomIzQzOwlpZiAoIXNrYl92YWxpZF9kc3Qoc2tiX2luKSAmYW1wOyZhbXA7IG5mX3JlamVjdDZfZmlsbF9za2JfZHN0KHNrYl9pbikgJmx0OyAwKQogCQlyZXR1cm47CiAKIAlpY21wdjZfc2VuZChza2JfaW4sIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMKaW5kZXggZTllYTZkOTQ2NmU3NC4uODU0ODdmOTJhZjUwNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jCkBAIC0xNTgsNiAmIzQzOzE1OCw4IEBAIHN0YXRpYyBib29sIGdldF9jdF9vcl90dXBsZV9mcm9tX3NrYihzdHJ1Y3QgbmV0ICpuZXQsCiAJCXJldHVybiB0cnVlOwogCiAJZm91bmRfY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOwomIzQzOwkqdHVwbGUgPSBmb3VuZF9jdC0mZ3Q7dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7CiYjNDM7CSp6b25lID0gbmZfY3Rfem9uZShmb3VuZF9jdCk7CiAJKnJlZmNvdW50ZWQgPSB0cnVlOwogCSpjdCA9IGZvdW5kX2N0OwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCmluZGV4IGNlZWVkM2Q3ZmU1MjAuLjcyM2U5NDZhNzhmNDAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC0xMjgxLDggJiM0MzsxMjgxLDkgQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCwKIAlpZiAoY3QtJmd0O3Byb3RvLnRjcC5yZXRyYW5zICZndDs9IHRuLSZndDt0Y3BfbWF4X3JldHJhbnMgJmFtcDsmYW1wOwogCSAgICB0aW1lb3V0c1tuZXdfc3RhdGVdICZndDsgdGltZW91dHNbVENQX0NPTk5UUkFDS19SRVRSQU5TXSkKIAkJdGltZW91dCA9IHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfUkVUUkFOU107Ci0JZWxzZSBpZiAodW5saWtlbHkoaW5kZXggPT0gVENQX1JTVF9TRVQpKQotCQl0aW1lb3V0ID0gdGltZW91dHNbVENQX0NPTk5UUkFDS19DTE9TRV07CiYjNDM7CWVsc2UgaWYgKHVubGlrZWx5KGluZGV4ID09IFRDUF9SU1RfU0VUICZhbXA7JmFtcDsKJiM0MzsJCQkgIG5ld19zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEKSkKJiM0MzsJCXRpbWVvdXQgPSB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXTsKIAllbHNlIGlmICgoY3QtJmd0O3Byb3RvLnRjcC5zZWVuWzBdLmZsYWdzIHwgY3QtJmd0O3Byb3RvLnRjcC5zZWVuWzFdLmZsYWdzKSAmYW1wOwogCQkgSVBfQ1RfVENQX0ZMQUdfREFUQV9VTkFDS05PV0xFREdFRCAmYW1wOyZhbXA7CiAJCSB0aW1lb3V0c1tuZXdfc3RhdGVdICZndDsgdGltZW91dHNbVENQX0NPTk5UUkFDS19VTkFDS10pCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYwppbmRleCA5OGMwM2I0ODdmNTIxLi41NjIxOWIwMmUxMjI3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMKQEAgLTQyLDggJiM0Mzs0Miw3IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSwKJiM0MztzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAogCQkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwgdTggKmhhLAogCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCkBAIC03NiwxNCAmIzQzOzc1LDE0IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsCiB9CiAKIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHsKLQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXY7Ci0JY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dGRldjsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgaWQgewogCQlfX3UxNglpZDsKIAkJX19iZTE2CXByb3RvOwogCX0gZW5jYXBbTkZfRkxPV19UQUJMRV9FTkNBUF9NQVhdOwogCXU4IG51bV9lbmNhcHM7CiAJc3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWwgdHVuOwomIzQzOwlzdHJ1Y3QgZHN0X2VudHJ5ICp0dW5fZHN0OwogCXU4IG51bV90dW5zOwogCXU4IGluZ3Jlc3NfdmxhbnM7CiAJdTggaF9zb3VyY2VbRVRIX0FMRU5dOwpAQCAtOTIsOSAmIzQzOzkxLDEyIEBAIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHsKIAllbnVtIGZsb3dfb2ZmbG9hZF94bWl0X3R5cGUgeG1pdF90eXBlOwogfTsKIAotc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaywKJiM0MztzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCk7CiYjNDM7CiYjNDM7c3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaywKIAkJCSAgICAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gKmluZm8sCi0JCQkgICAgIHVuc2lnbmVkIGNoYXIgKmhhLCBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpCiYjNDM7CQkJICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KQogewogCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7CiAJaW50IGk7CkBAIC0xMDksMjkgJiM0MzsxMTEsMjcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaywKIAkJY2FzZSBERVZfUEFUSF9WTEFOOgogCQljYXNlIERFVl9QQVRIX1BQUE9FOgogCQljYXNlIERFVl9QQVRIX1RVTjoKLQkJCWluZm8tJmd0O2luZGV2ID0gcGF0aC0mZ3Q7ZGV2OwomIzQzOwkJCWluZm8tJmd0O2RldiA9IHBhdGgtJmd0O2RldjsKIAkJCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby0mZ3Q7aF9zb3VyY2UpKQogCQkJCW1lbWNweShpbmZvLSZndDtoX3NvdXJjZSwgcGF0aC0mZ3Q7ZGV2LSZndDtkZXZfYWRkciwgRVRIX0FMRU4pOwogCi0JCQlpZiAocGF0aC0mZ3Q7dHlwZSA9PSBERVZfUEFUSF9FVEhFUk5FVCkKJiM0MzsJCQlpZiAocGF0aC0mZ3Q7dHlwZSA9PSBERVZfUEFUSF9FVEhFUk5FVCB8fAomIzQzOwkJCSAgICBwYXRoLSZndDt0eXBlID09IERFVl9QQVRIX0RTQSkKIAkJCQlicmVhazsKLQkJCWlmIChwYXRoLSZndDt0eXBlID09IERFVl9QQVRIX0RTQSkgewotCQkJCWkgPSBzdGFjay0mZ3Q7bnVtX3BhdGhzOwotCQkJCWJyZWFrOwotCQkJfQogCiAJCQkvKiBERVZfUEFUSF9WTEFOLCBERVZfUEFUSF9QUFBPRSBhbmQgREVWX1BBVEhfVFVOICovCiAJCQlpZiAocGF0aC0mZ3Q7dHlwZSA9PSBERVZfUEFUSF9UVU4pIHsKIAkJCQlpZiAoaW5mby0mZ3Q7bnVtX3R1bnMpCi0JCQkJCXJldHVybiAtMTsKJiM0MzsJCQkJCWdvdG8gZXJyX291dDsKIAogCQkJCWluZm8tJmd0O3R1bi5zcmNfdjYgPSBwYXRoLSZndDt0dW4uc3JjX3Y2OwogCQkJCWluZm8tJmd0O3R1bi5kc3RfdjYgPSBwYXRoLSZndDt0dW4uZHN0X3Y2OwogCQkJCWluZm8tJmd0O3R1bi5sM19wcm90byA9IHBhdGgtJmd0O3R1bi5sM19wcm90bzsKJiM0MzsJCQkJaW5mby0mZ3Q7dHVuX2RzdCA9IHBhdGgtJmd0O3R1bi5kc3Q7CiAJCQkJaW5mby0mZ3Q7bnVtX3R1bnMmIzQzOyYjNDM7OwogCQkJfSBlbHNlIHsKIAkJCQlpZiAoaW5mby0mZ3Q7bnVtX2VuY2FwcyAmZ3Q7PSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWCkKLQkJCQkJcmV0dXJuIC0xOwomIzQzOwkJCQkJZ290byBlcnJfb3V0OwogCiAJCQkJaW5mby0mZ3Q7ZW5jYXBbaW5mby0mZ3Q7bnVtX2VuY2Fwc10uaWQgPQogCQkJCQlwYXRoLSZndDtlbmNhcC5pZDsKQEAgLTE1MiwxMyAmIzQzOzE1MiwxMyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLAogCQkJc3dpdGNoIChwYXRoLSZndDticmlkZ2Uudmxhbl9tb2RlKSB7CiAJCQljYXNlIERFVl9QQVRIX0JSX1ZMQU5fVU5UQUdfSFc6CiAJCQkJaWYgKGluZm8tJmd0O251bV9lbmNhcHMgPT0gMCkKLQkJCQkJcmV0dXJuIC0xOwomIzQzOwkJCQkJZ290byBlcnJfb3V0OwogCiAJCQkJaW5mby0mZ3Q7aW5ncmVzc192bGFucyB8PSBCSVQoaW5mby0mZ3Q7bnVtX2VuY2FwcyAtIDEpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBERVZfUEFUSF9CUl9WTEFOX1RBRzoKIAkJCQlpZiAoaW5mby0mZ3Q7bnVtX2VuY2FwcyAmZ3Q7PSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWCkKLQkJCQkJcmV0dXJuIC0xOwomIzQzOwkJCQkJZ290byBlcnJfb3V0OwogCiAJCQkJaW5mby0mZ3Q7ZW5jYXBbaW5mby0mZ3Q7bnVtX2VuY2Fwc10uaWQgPSBwYXRoLSZndDticmlkZ2Uudmxhbl9pZDsKIAkJCQlpbmZvLSZndDtlbmNhcFtpbmZvLSZndDtudW1fZW5jYXBzXS5wcm90byA9IHBhdGgtJmd0O2JyaWRnZS52bGFuX3Byb3RvOwpAQCAtMTY2LDcgJiM0MzsxNjYsNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLAogCQkJCWJyZWFrOwogCQkJY2FzZSBERVZfUEFUSF9CUl9WTEFOX1VOVEFHOgogCQkJCWlmIChpbmZvLSZndDtudW1fZW5jYXBzID09IDApCi0JCQkJCXJldHVybiAtMTsKJiM0MzsJCQkJCWdvdG8gZXJyX291dDsKIAogCQkJCWluZm8tJmd0O251bV9lbmNhcHMtLTsKIAkJCQlicmVhazsKQEAgLTE3NiwxNiAmIzQzOzE3NiwyMiBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLAogCQkJaW5mby0mZ3Q7eG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLTE7CiYjNDM7CQkJZ290byBlcnJfb3V0OwogCQl9CiAJfQotCWluZm8tJmd0O291dGRldiA9IGluZm8tJmd0O2luZGV2OwogCi0JaWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkgJmFtcDsmYW1wOwotCSAgICBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGluZm8tJmd0O2luZGV2KSkKJiM0MzsJaWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKCZhbXA7ZnQtJmd0O2RhdGEpICZhbXA7JmFtcDsKJiM0MzsJICAgIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoaW5mby0mZ3Q7ZGV2KSkKIAkJaW5mby0mZ3Q7eG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOwogCiYjNDM7CWlmICghbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihpbmZvLSZndDtkZXYsIGZ0KSkKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsKIAlyZXR1cm4gMDsKJiM0MztlcnJfb3V0OgomIzQzOwlkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7CiYjNDM7CiYjNDM7CXJldHVybiAtMTsKIH0KIAogc3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMjA1LDQ0ICYjNDM7MjExLDYgQEAgc3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCXJldHVybiBmb3VuZDsKIH0KIAotc3RhdGljIGludCBuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAotCQkJCQlzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCAqdHVuLAotCQkJCQlzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsCi0JCQkJCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIpCi17Ci0Jc3RydWN0IGRzdF9lbnRyeSAqY3VyX2RzdCA9IHJvdXRlLSZndDt0dXBsZVtkaXJdLmRzdDsKLQlzdHJ1Y3QgZHN0X2VudHJ5ICp0dW5fZHN0ID0gTlVMTDsKLQlzdHJ1Y3QgZmxvd2kgZmwgPSB7fTsKLQotCXN3aXRjaCAobmZ0X3BmKHBrdCkpIHsKLQljYXNlIE5GUFJPVE9fSVBWNDoKLQkJZmwudS5pcDQuZGFkZHIgPSB0dW4tJmd0O2RzdF92NC5zX2FkZHI7Ci0JCWZsLnUuaXA0LnNhZGRyID0gdHVuLSZndDtzcmNfdjQuc19hZGRyOwotCQlmbC51LmlwNC5mbG93aTRfaWlmID0gbmZ0X2luKHBrdCktJmd0O2lmaW5kZXg7Ci0JCWZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtJmd0O3NrYikpOwotCQlmbC51LmlwNC5mbG93aTRfbWFyayA9IHBrdC0mZ3Q7c2tiLSZndDttYXJrOwotCQlmbC51LmlwNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQzsKLQkJYnJlYWs7Ci0JY2FzZSBORlBST1RPX0lQVjY6Ci0JCWZsLnUuaXA2LmRhZGRyID0gdHVuLSZndDtkc3RfdjY7Ci0JCWZsLnUuaXA2LnNhZGRyID0gdHVuLSZndDtzcmNfdjY7Ci0JCWZsLnUuaXA2LmZsb3dpNl9paWYgPSBuZnRfaW4ocGt0KS0mZ3Q7aWZpbmRleDsKLQkJZmwudS5pcDYuZmxvd2xhYmVsID0gaXA2X2Zsb3dpbmZvKGlwdjZfaGRyKHBrdC0mZ3Q7c2tiKSk7Ci0JCWZsLnUuaXA2LmZsb3dpNl9tYXJrID0gcGt0LSZndDtza2ItJmd0O21hcms7Ci0JCWZsLnUuaXA2LmZsb3dpNl9mbGFncyA9IEZMT1dJX0ZMQUdfQU5ZU1JDOwotCQlicmVhazsKLQl9Ci0KLQluZl9yb3V0ZShuZnRfbmV0KHBrdCksICZhbXA7dHVuX2RzdCwgJmFtcDtmbCwgZmFsc2UsIG5mdF9wZihwa3QpKTsKLQlpZiAoIXR1bl9kc3QpCi0JCXJldHVybiAtRU5PRU5UOwotCi0Jcm91dGUtJmd0O3R1cGxlW2Rpcl0uZHN0ID0gdHVuX2RzdDsKLQlkc3RfcmVsZWFzZShjdXJfZHN0KTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogCQkJCXN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwKIAkJCQljb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCkBAIC0yNTUsMjggJiM0MzsyMjMsMjUgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKIAl1bnNpZ25lZCBjaGFyIGhhW0VUSF9BTEVOXTsKIAlpbnQgaTsKIAotCWlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHJvdXRlLCBkc3QsIGN0LCBkaXIsIGhhLCAmYW1wO3N0YWNrKSAmbHQ7IDAgfHwKLQkgICAgbmZ0X2Rldl9wYXRoX2luZm8oJmFtcDtzdGFjaywgJmFtcDtpbmZvLCBoYSwgJmFtcDtmdC0mZ3Q7ZGF0YSkgJmx0OyAwKQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCWlmICghbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihpbmZvLmluZGV2LCBmdCkpCiYjNDM7CWlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRzdCwgY3QsIGRpciwgaGEsICZhbXA7c3RhY2spICZsdDsgMCB8fAomIzQzOwkgICAgbmZ0X2Rldl9wYXRoX2luZm8oJmFtcDtzdGFjaywgJmFtcDtpbmZvLCBoYSwgZnQpICZsdDsgMCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlpZiAoaW5mby5vdXRkZXYpCi0JCXJvdXRlLSZndDt0dXBsZVtkaXJdLm91dC5pZmluZGV4ID0gaW5mby5vdXRkZXYtJmd0O2lmaW5kZXg7CiYjNDM7CXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi5pZmluZGV4ID0gaW5mby5kZXYtJmd0O2lmaW5kZXg7CiYjNDM7CXJvdXRlLSZndDt0dXBsZVtkaXJdLm91dC5pZmluZGV4ID0gaW5mby5kZXYtJmd0O2lmaW5kZXg7CiAKLQlyb3V0ZS0mZ3Q7dHVwbGVbIWRpcl0uaW4uaWZpbmRleCA9IGluZm8uaW5kZXYtJmd0O2lmaW5kZXg7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGluZm8ubnVtX2VuY2FwczsgaSYjNDM7JiM0MzspIHsKIAkJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLmVuY2FwW2ldLmlkID0gaW5mby5lbmNhcFtpXS5pZDsKIAkJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLmVuY2FwW2ldLnByb3RvID0gaW5mby5lbmNhcFtpXS5wcm90bzsKIAl9CiAKLQlpZiAoaW5mby5udW1fdHVucyAmYW1wOyZhbXA7Ci0JICAgICFuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKHBrdCwgJmFtcDtpbmZvLnR1biwgcm91dGUsIGRpcikpIHsKJiM0MzsJaWYgKGluZm8ubnVtX3R1bnMpIHsKIAkJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLnR1bi5zcmNfdjYgPSBpbmZvLnR1bi5kc3RfdjY7CiAJCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi50dW4uZHN0X3Y2ID0gaW5mby50dW4uc3JjX3Y2OwogCQlyb3V0ZS0mZ3Q7dHVwbGVbIWRpcl0uaW4udHVuLmwzX3Byb3RvID0gaW5mby50dW4ubDNfcHJvdG87CiAJCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi5udW1fdHVucyA9IGluZm8ubnVtX3R1bnM7CiYjNDM7CQlkc3RfcmVsZWFzZShyb3V0ZS0mZ3Q7dHVwbGVbZGlyXS5kc3QpOwomIzQzOwkJcm91dGUtJmd0O3R1cGxlW2Rpcl0uZHN0ID0gaW5mby50dW5fZHN0OwogCX0KIAogCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi5udW1fZW5jYXBzID0gaW5mby5udW1fZW5jYXBzOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfbWV0YS5jIGIvbmV0L25ldGZpbHRlci9uZnRfbWV0YS5jCmluZGV4IDBhNDNlMDc4N2E2ODguLjAxY2ZiYWEzNjUyNTAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMKQEAgLTIwLDYgJiM0MzsyMCw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L2RzdC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwX3N0YXRlcy5oJmd0OyAvKiBmb3IgVENQX1RJTUVfV0FJVCAqLwogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oJmd0OwpAQCAtMjc5LDExICYjNDM7MjgwLDEyIEBAIHN0YXRpYyBib29sIG5mdF9tZXRhX2dldF9ldmFsX2lmbmFtZShlbnVtIG5mdF9tZXRhX2tleXMga2V5LCB1MzIgKmRlc3QsCiBzdGF0aWMgbm9pbmxpbmUgYm9vbAogbmZ0X21ldGFfZ2V0X2V2YWxfcnRjbGFzc2lkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqZGVzdCkKIHsKLQljb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBza2JfZHN0KHNrYik7CiYjNDM7CWNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdDsKIAotCWlmICghZHN0KQomIzQzOwlpZiAoIXNrYl92YWxpZF9kc3Qoc2tiKSkKIAkJcmV0dXJuIGZhbHNlOwogCiYjNDM7CWRzdCA9IHNrYl9kc3Qoc2tiKTsKIAkqZGVzdCA9IGRzdC0mZ3Q7dGNsYXNzaWQ7CiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9ydC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcnQuYwppbmRleCBhZWIwMDk0ZWFmZDgwLi44NDFjODYzYTA4ZGI1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3J0LmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZHN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXA2X3JvdXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3JvdXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCZndDsKQEAgLTU5LDEwICYjNDM7NjAsMTEgQEAgdm9pZCBuZnRfcnRfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAogCXUzMiAqZGVzdCA9ICZhbXA7cmVncy0mZ3Q7ZGF0YVtwcml2LSZndDtkcmVnXTsKIAljb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiAKLQlkc3QgPSBza2JfZHN0KHNrYik7Ci0JaWYgKCFkc3QpCiYjNDM7CWlmICghc2tiX3ZhbGlkX2RzdChza2IpKQogCQlnb3RvIGVycjsKIAomIzQzOwlkc3QgPSBza2JfZHN0KHNrYik7CiYjNDM7CiAJc3dpdGNoIChwcml2LSZndDtrZXkpIHsKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfQ0xBU1NJRAogCWNhc2UgTkZUX1JUX0NMQVNTSUQ6CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMKaW5kZXggOGNlYzQzMDY0MzE5Mi4uYzhiYmE2OTdmOTkzYSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYwpAQCAtMTIsNiAmIzQzOzEyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZnJtLmgmZ3Q7CiAKQEAgLTE3Nyw5ICYjNDM7MTc4LDE1IEBAIHN0YXRpYyB2b2lkIG5mdF94ZnJtX2dldF9ldmFsX291dChjb25zdCBzdHJ1Y3QgbmZ0X3hmcm0gKnByaXYsCiAJCQkJICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsCiAJCQkJICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCkKIHsKLQljb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBza2JfZHN0KHBrdC0mZ3Q7c2tiKTsKJiM0MzsJY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCWludCBpOwogCiYjNDM7CWlmICghc2tiX3ZhbGlkX2RzdChwa3QtJmd0O3NrYikpIHsKJiM0MzsJCXJlZ3MtJmd0O3ZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSzsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlkc3QgPSBza2JfZHN0KHBrdC0mZ3Q7c2tiKTsKIAlmb3IgKGkgPSAwOyBkc3QgJmFtcDsmYW1wOyBkc3QtJmd0O3hmcm07CiAJICAgICBkc3QgPSAoKGNvbnN0IHN0cnVjdCB4ZnJtX2RzdCAqKWRzdCktJmd0O2NoaWxkLCBpJiM0MzsmIzQzOykgewogCQlpZiAoaSAmbHQ7IHByaXYtJmd0O3NwbnVtKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY4NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDExODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmtpbmcgU3Vic3lzdGVtIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBhIHdob2xlIGJ1bmNoIG9mIGZpbGVzIHJlbGF0ZWQgdG8gbmV0d29ya2luZyDigJMgc3BlY2lmaWNhbGx5IGFyb3VuZCBgbmV0X2RldmljZV9wYXRoX3N0YWNrYCwgdGhlIGZvcndhcmQgcGF0aCBmaWxsaW5nLCBjb25udHJhY2ssIGZsb3cgdGFibGUgaW50ZXJhY3Rpb25zLCBhbmQgc2tiIGRlc3RpbmF0aW9uIHZhbGlkaXR5IGNoZWNrcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgYXJlIG1vc3RseSBmdW5jdGlvbmFsIGNoYW5nZXMgYWltZWQgYXQgYWRkcmVzc2luZyBtZW1vcnkgbGVha3MgcmVsYXRlZCB0byB0aGUgYGRzdF9yZWxlYXNlYCBhbmQgdHdlYWtpbmcgdGhlIGNvbm50cmFjayBhbmQgZmxvd3RhYmxlIGJlaGF2aW9ycy4gVGhhdCYjMzk7cyBnb29kLCBpbXBvcnRhbnQgc3R1ZmYuCgpGaXJzdCwgSSBzZWUgc29tZSBjb25zaXN0ZW50IGNoYW5nZXM6CiogICBBZGRlZCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VgIGNhbGxzIGluIGVycm9yIHBhdGhzIGluIHNldmVyYWwgZHJpdmVycywgbGlrZSBhaXJvaGEgYW5kIG1lZGlhdGVrLgoqICAgVGhlIGBuZXRfZGV2aWNlX3BhdGhgIHN0cnVjdCBpbiBgbmV0ZGV2aWNlLmhgIGhhcyBhIG5ldyBgZHN0YCBmaWVsZCB3aXRoaW4gdGhlIGB0dW5gIHVuaW9uLCBhbmQgdGhlIG5ldyBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VgIGZ1bmN0aW9uIGlzIGRlY2xhcmVkLgoqICAgSSBzZWUgYSBuZXcgaW1wbGVtZW50YXRpb24gZm9yIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAgaW4gYGRldi5jYCwgd2hpY2ggc3BlY2lmaWNhbGx5IHJlbGVhc2VzIHRoZSBgZHN0YCBlbnRyeSBmb3IgdGhlIHR1bm5lbGluZyBjYXNlIGFuZCBtb2RpZmljYXRpb25zIHRvIHRoZSBtYWluIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGZ1bmN0aW9uIHRvIGNhbGwgdGhlIHJlbGVhc2UgZnVuY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KCkl0IGxvb2tzIGxpa2Ugd2UgYXJlIGNvcnJlY3RseSByZWxlYXNpbmcgYGRzdGAgb24gZXJyb3IsIHdoaWNoIHNob3VsZCByZWR1Y2UgcG90ZW50aWFsIG1lbW9yeSBsZWFrcy4KCkFsc28sIGl0IGxvb2tzIGxpa2UgYGRzYV91c2VyX2ZpbGxfZm9yd2FyZF9wYXRoYCBoYXMgYmVlbiB1cGRhdGVkIHRvIHNldCB0aGUgY29udGV4dCBgZGV2YCBtZW1iZXIgdG8gTlVMTCwgYW5kIHRoZSB0dW5uZWxpbmcgcGF0aHMgaW4gSVB2NCBhbmQgSVB2NiBhcmUgbm93IHN0b3JpbmcgdGhlIGRlc3RpbmF0aW9uIGluIGBwYXRoLSZndDt0dW4uZHN0YCwgcmF0aGVyIHRoYW4gaW1tZWRpYXRlbHkgcmVsZWFzaW5nIGl0LCB3aGljaCBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZS4KClJlcGxhY2luZyBgIXNrYl9kc3Qoc2tiKWAgd2l0aCBgIXNrYl92YWxpZF9kc3Qoc2tiKWAgaXMgZ29vZC4gQWxzbywgaW4gdGhlIHJlamVjdCBjb2RlLCBzZXR0aW5nIGBza2JfZHN0X2Ryb3Aoc2tiKWAgcHJpb3IgdG8gYHNrYl9kc3Rfc2V0KHNrYiwgZHN0KWAgaXMgYWxzbyBpbXBvcnRhbnQuIFRoaXMgaW1wcm92ZXMgcm9idXN0bmVzcy4KClRoZSBDb25udHJhY2sgY2hhbmdlcyBzZWVtIGludGVyZXN0aW5nLiBJIHNlZSBhIGNoYW5nZSB0byBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLCB3aGljaCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBvbiBwZXJmb3JtYW5jZS4gVGhlcmUgaXMgYSBjaGFuZ2UgdG8gaG93IGNvbm50cmFjayB0dXBsZXMgYXJlIGFjY2Vzc2VkLCBhbmQgYSB0aW1lb3V0IGNoYW5nZSBhcyB3ZWxsLgoKTm93LCB0aGUgZmxvdyB0YWJsZSBzdHVmZiBsb29rcyB0byBoYXZlIGJlZW4gbW9kaWZpZWQgdG8gc3VwcG9ydCB0aGUgY2hhbmdlcy4gVGhlIHJvdXRlIGFyZ3VtZW50IHdhcyByZW1vdmVkLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGVudHJ5IHBvaW50cyBhcmUgdGhlIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAgYW5kIGBuZnRfZGV2X3BhdGhfaW5mb2AsIGFuZCBub3cgdGhlIHR1biBkZXN0aW5hdGlvbiBgaW5mby50dW5fZHN0YCBpcyB1c2VkLgoKR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMsIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhlc2UgY29yZSBmdW5jdGlvbnMuIEkgd2lsbCBuZWVkIHRvIHJlYWxseSBmb2N1cyBvbiB0aGUgY2hhbmdlcyByZWxhdGluZyB0byBlcnJvciBoYW5kbGluZywgbmV3IGZ1bmN0aW9uIGNhbGxzLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGNvbm50cmFjay4KCiogICBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBhbmQgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCwgd2hpY2ggYXJlIGNsZWFybHkgY2VudHJhbC4KKiAgIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAgYW5kIGBuZnRfZGV2X3BhdGhfaW5mb2AsIGJlY2F1c2Ugb2YgdGhlaXIgcm9sZSBpbiB0aGUgZmxvdyB0YWJsZSBwYXRoLgoqICAgVGhlIHJlamVjdGlvbiBmdW5jdGlvbiBjYWxscyBzdWNoIGFzIGBuZl9yZWplY3RfZmlsbF9za2JfZHN0YCBhbmQgYG5mX3NlbmRfcmVzZXRgLCBgbmZfc2VuZF91bnJlYWNoYC4KKiAgIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAsIGFuZCBgZ2V0X2N0X29yX3R1cGxlX2Zyb21fc2tiYCwgYmVjYXVzZSB0aGlzIGlzIHRoZSBjb25udHJhY2sgZnVuY3Rpb24uCgpJIHdhbnQgdG8gc2VlIHdoYXQgaXMgY2FsbGluZyBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLiBJJiMzOTtsbCB1c2UgZ3JlcCBmb3IgdGhhdCEgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IHR1bm5lbCByb3V0ZXMgYXJlIGJlaW5nIGNob3Nlbi4gTGV0IG1lIGNoZWNrIHRoZSBjYWxsIHNpdGVzIGZvciB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9kZXZfZm9yd2FyZF9wYXRoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MTk3PXN0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIxMy1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MjE0OnN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIxNS1cdFx0XHRcdHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTI2MD1pbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMwMi1cdGlmIChyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLnhtaXRfdHlwZVx0PT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjMwMzpcdCAgICBuZnRfZGV2X2ZvcndhcmRfcGF0aChwa3QsIHJvdXRlLCBjdCwgZGlyLCBmdCkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMwNC1cdFx0Z290byBlcnJfZHN0X3JlbGVhc2U7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMDYtXHRpZiAocm91dGUtXHUwMDNldHVwbGVbIWRpcl0ueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzozMDc6XHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsICFkaXIsIGZ0KSBcdTAwM2MgMClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzA4LVx0XHRnb3RvIGVycl9kc3RfcmVsZWFzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA4NgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBORlQgRmxvdyBSb3V0ZSoqCgpPa2F5LCBzbyB0aGUgYG5mdF9mbG93X3JvdXRlYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBvdXIgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHN5c3RlbSBhY3R1YWxseSB3b3JrcywgYW5kIHRoYXQgbWVhbnMgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGguIFRoZXJlZm9yZSwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBsb2NhdGUgKmV2ZXJ5IHNpbmdsZSogaW5zdGFuY2Ugd2hlcmUgYG5mdF9mbG93X3JvdXRlYCBpcyBjYWxsZWQuIEZpbmRpbmcgdGhvc2UgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgY29udGV4dCBJIG5lZWQgdG8gZ3Jhc3AgdGhlIGxvZ2ljIGZsb3cuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGtleSB0byB1bnBhY2tpbmcgdGhlIGJlaGF2aW9yIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9mbG93X3JvdXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MjQ3PXN0cnVjdCBuZnRfcGt0aW5mbztcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MjQ4OmludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0yNDktXHRcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTIxND1zdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMjU5LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoyNjA6aW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTI2MS1cdFx0ICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzE2LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MzE3OkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9mbG93X3JvdXRlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz01MD1zdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTEwOC1cdGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjEwOTpcdGlmIChuZnRfZmxvd19yb3V0ZShwa3QsIGN0LCBcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVx1MDAzZWZsb3d0YWJsZSkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMTAtXHRcdGdvdG8gZXJyX2Zsb3dfcm91dGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3MzIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIEtleSBGdW5jdGlvbnMgaW4gdGhlIE5ldGZpbHRlciBGbG93IGFuZCBDb25uZWN0aW9uIFRyYWNraW5nIFBhdGgqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIGZsb3cgdGFibGUgY2hhbmdlcywgYW5kIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIGlzIGNsZWFybHkgdGhlIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50IGhlcmUsIHRoZSBtYWluIGVudHJ5IGludG8gdGhlIG5ldyBmbG93IHRhYmxlIHBhdGguIEJ1dCBJIGNhbiYjMzk7dCBqdXN0IHN0b3AgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUsIHRvIGNvbnNpZGVyIHBvdGVudGlhbCByaXBwbGUgZWZmZWN0cy4gTXkgbWluZCBpcyBqdW1waW5nIGFyb3VuZCBmdW5jdGlvbnMsIHNlYXJjaGluZyBmb3IgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLgoKTm93LCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLi4uIHRoYXQmIzM5O3MgYSAqY29yZSogZnVuY3Rpb24gd2l0aGluIGNvbm50cmFjaywgcmlnaHQ/IEFueSBjaGFuZ2UgaGVyZSBjb3VsZCBiZS4uLiBzaWduaWZpY2FudC4gSXQmIzM5O3MgYSBmb3VuZGF0aW9uYWwgZWxlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBhdGhzIGludGVyYWN0LgoKQW5kIHRoZW4gdGhlcmUmIzM5O3MgYG5mX3JlamVjdF9maWxsX3NrYl9kc3RgLiBUaGF04oCZcyBjYWxsZWQgZnJvbSBgbmZfc2VuZF9yZXNldGAgYW5kIGBuZl9zZW5kX3VucmVhY2hgLiBUaGVzZSBmdW5jdGlvbnMgaGFuZGxlIElDTVAgcmVzcG9uc2VzIHRvIGRyb3BwZWQgcGFja2V0cy4gSXMgdGhlcmUgYSBkZXBlbmRlbmN5IHRoZXJlPyBUaGlzIGxpa2VseSBoYXMgdG8gYmUgY2hlY2tlZCwgYXMgdGhpcyBjb3VsZCBoYXZlIHRoZSBwb3RlbnRpYWwgZm9yIGEgbG90IG9mIGNvbXBsZXhpdHkuIFRoZSBwYXRoIGZvcndhcmQgaGFzIHRvIGJlIGNsZWFyLgoKU28sIEkmIzM5O20gYWxyZWFkeSBhc2tpbmcgbXlzZWxmIGhvdyB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGZ1bmN0aW9ucyB3b3JrLiBJIG5lZWQgdG8ga2VlcCB0cmFjaW5nIHRoZXNlIHJlbGF0aW9uc2hpcHMsIHRoaW5raW5nIGFib3V0IGhvdyBjaGFuZ2VzIGluIG9uZSBwbGFjZSBtaWdodCBpbmZsdWVuY2Ugb3RoZXJzLCBob3cgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIGBuZl9zZW5kX3Jlc2V0YCBpdHNlbGYuLi4gd2hhdCYjMzk7cyBpdHMgcm9sZT8gVGhpcyBpcyB3aGVyZSBJIGFtIHJpZ2h0IG5vdywgZGlnZ2luZyBpbiBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX3NlbmRfcmVzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjQvbmZfcmVqZWN0Lmg9MTA9dm9pZCBuZl9zZW5kX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IGNvZGUsIGludCBob29rKTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX3JlamVjdC5oOjExOnZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICosIHN0cnVjdCBza19idWZmICpvbGRza2IsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9yZWplY3QuaC0xMi1cdFx0ICAgaW50IGhvb2spO1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY2L25mX3JlamVjdC5oPTg9dm9pZCBuZl9zZW5kX3VucmVhY2g2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgdW5zaWduZWQgY2hhciBjb2RlLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjYvbmZfcmVqZWN0LmgtOS1cdFx0ICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjYvbmZfcmVqZWN0Lmg6MTA6dm9pZCBuZl9zZW5kX3Jlc2V0NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY2L25mX3JlamVjdC5oLTExLVx0XHQgICAgaW50IGhvb2spO1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmM9MzE9cmVqZWN0X3RnKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jLTU4LVx0Y2FzZSBJUFRfVENQX1JFU0VUOlxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYzo1OTpcdFx0bmZfc2VuZF9yZXNldCh4dF9uZXQocGFyKSwgcGFyLVx1MDAzZXN0YXRlLVx1MDAzZXNrLCBza2IsIGhvb2spO1xubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYy02MC1cdFx0YnJlYWs7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MjU2PXN0YXRpYyBpbnQgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTI3Mi0vKiBTZW5kIFJTVCByZXBseSAqL1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM6MjczOnZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTI3NC1cdFx0ICAgaW50IGhvb2spXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzQ1LX1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jOjM0NjpFWFBPUlRfU1lNQk9MX0dQTChuZl9zZW5kX3Jlc2V0KTtcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTM0Ny1cbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY0LmM9MTk9c3RhdGljIHZvaWQgbmZ0X3JlamVjdF9pcHY0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjQuYy0yOS1cdGNhc2UgTkZUX1JFSkVDVF9UQ1BfUlNUOlxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jOjMwOlx0XHRuZl9zZW5kX3Jlc2V0KG5mdF9uZXQocGt0KSwgbmZ0X3NrKHBrdCksIHBrdC1cdTAwM2Vza2IsXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY0LmMtMzEtXHRcdFx0ICAgICAgbmZ0X2hvb2socGt0KSk7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmM9MzU9cmVqZWN0X3RnNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMtNjMtXHRjYXNlIElQNlRfVENQX1JFU0VUOlxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmM6NjQ6XHRcdG5mX3NlbmRfcmVzZXQ2KG5ldCwgcGFyLVx1MDAzZXN0YXRlLVx1MDAzZXNrLCBza2IsIHh0X2hvb2tudW0ocGFyKSk7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9SRUpFQ1QuYy02NS1cdFx0YnJlYWs7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmM9Mjk3PXN0YXRpYyBpbnQgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbilcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy0zMTItXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYzozMTM6dm9pZCBuZl9zZW5kX3Jlc2V0NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jLTMxNC1cdFx0ICAgIGludCBob29rKVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jLTQxMy19XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYzo0MTQ6RVhQT1JUX1NZTUJPTF9HUEwobmZfc2VuZF9yZXNldDYpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtNDE1LVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjYuYz0xOT1zdGF0aWMgdm9pZCBuZnRfcmVqZWN0X2lwdjZfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2Ni5jLTMwLVx0Y2FzZSBORlRfUkVKRUNUX1RDUF9SU1Q6XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY2LmM6MzE6XHRcdG5mX3NlbmRfcmVzZXQ2KG5mdF9uZXQocGt0KSwgbmZ0X3NrKHBrdCksIHBrdC1cdTAwM2Vza2IsXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY2LmMtMzItXHRcdFx0ICAgICAgIG5mdF9ob29rKHBrdCkpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pbmV0LmM9MTc9c3RhdGljIHZvaWQgbmZ0X3JlamVjdF9pbmV0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pbmV0LmMtMzAtXHRcdGNhc2UgTkZUX1JFSkVDVF9UQ1BfUlNUOlxubmV0L25ldGZpbHRlci9uZnRfcmVqZWN0X2luZXQuYzozMTpcdFx0XHRuZl9zZW5kX3Jlc2V0KG5mdF9uZXQocGt0KSwgbmZ0X3NrKHBrdCksXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaW5ldC5jLTMyLVx0XHRcdFx0ICAgICAgcGt0LVx1MDAzZXNrYiwgbmZ0X2hvb2socGt0KSk7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcmVqZWN0X2luZXQuYy00Ny1cdFx0Y2FzZSBORlRfUkVKRUNUX1RDUF9SU1Q6XG5uZXQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaW5ldC5jOjQ4Olx0XHRcdG5mX3NlbmRfcmVzZXQ2KG5mdF9uZXQocGt0KSwgbmZ0X3NrKHBrdCksXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaW5ldC5jLTQ5LVx0XHRcdFx0ICAgICAgIHBrdC1cdTAwM2Vza2IsIG5mdF9ob29rKHBrdCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzE4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTmV0ZmlsdGVyIEV4cHJlc3Npb24gRXZhbHVhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgTmV0ZmlsdGVyIGVudHJ5IHBvaW50cyBhbmQgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIHJvbGVzLiBJIHNlZSBgbmZ0X3JlamVjdF9pcHY0X2V2YWxgLCBgbmZ0X3JlamVjdF9pcHY2X2V2YWxgLCBgbmZ0X3JlamVjdF9pbmV0X2V2YWxgLCBgcmVqZWN0X3RnYCwgYW5kIGByZWplY3RfdGc2YC4gVGhvc2UgbG9vayBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBjbGVhcmx5IHRoZSByZWplY3Rpb24gbWVjaGFuaXNtcyBmb3IgZGlmZmVyZW50IElQIHZlcnNpb25zIGFuZCBwb3RlbnRpYWxseSB0cmFmZmljIGdyb3Vwcy4KCkJ1dCB3aGF0IGFib3V0IHRoZXNlIG90aGVycz8gYG5mdF9tZXRhX2dldF9ldmFsX3J0Y2xhc3NpZGAsIGBuZnRfcnRfZ2V0X2V2YWxgLCBhbmQgYG5mdF94ZnJtX2dldF9ldmFsX291dGA/IEhtbSwgdGhvc2UgbmFtZXMgc3VnZ2VzdCB0aGV5JiMzOTtyZSBhbHNvIGV2YWx1YXRpb24gZnVuY3Rpb25zLCBidXQgbGlrZWx5IGZvciBtb3JlIHNwZWNpYWxpemVkIHB1cnBvc2VzLiBUaGV5IHNlZW0gdG8gYmUgZGVhbGluZyB3aXRoIHRoaW5ncyBsaWtlIG1ldGFkYXRhLCByb3V0aW5nLCBhbmQgeGZybSAoSVBzZWMsIEkmIzM5O20gZ3Vlc3NpbmcpLgoKTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24gZnVydGhlciwgYW5kIEkgcmVtZW1iZXIgYG5mdF9tZXRhX2dldF9ldmFsYCBpcyB0aGUga2V5IGVudHJ5IGZvciAqbWV0YSosIGFuZCBgbmZ0X3J0X2dldF9ldmFsYCBmb3IgKnJ0Ki4gQWxzbywgSSBub3cgc2VlIGBuZnRfeGZybV9nZXRfZXZhbF9vdXRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBYRlJNIGV2YWx1YXRpb25zLiBTbyB0aGV5IGhhdmUgYSBjbGVhciBoaWVyYXJjaHkuCgpMZXQmIzM5O3MgZGlnIGludG8gYG5mdF9tZXRhX2dldF9ldmFsYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9tZXRhX2dldF9ldmFsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oPTEzMT1zdHJ1Y3QgbmZ0X3BrdGluZm87XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaDoxMzI6dm9pZCBuZnRfbWV0YV9nZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaC0xMzMtXHRcdCAgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KTtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuaD0yOT1pbnQgbmZ0X21ldGFfc2V0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuaC0zMS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZnRfbWV0YS5oOjMyOnZvaWQgbmZ0X21ldGFfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmgtMzMtXHRcdCAgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvbmZ0X21ldGFfYnJpZGdlLmM9MjQ9c3RhdGljIHZvaWQgbmZ0X21ldGFfYnJpZGdlX2dldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZnRfbWV0YV9icmlkZ2UuYy03My1cdGRlZmF1bHQ6XG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZnRfbWV0YV9icmlkZ2UuYzo3NDpcdFx0cmV0dXJuIG5mdF9tZXRhX2dldF9ldmFsKGV4cHIsIHJlZ3MsIHBrdCk7XG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZnRfbWV0YV9icmlkZ2UuYy03NS1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MjAzPXN0YXRpYyB2b2lkIGV4cHJfY2FsbF9vcHNfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIyMC1cdFgoZSwgbmZ0X2NvdW50ZXJfZXZhbCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MjIxOlx0WChlLCBuZnRfbWV0YV9nZXRfZXZhbCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjIyLVx0WChlLCBuZnRfbG9va3VwX2V2YWwpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz02Mz1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWRcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzo2NDpuZnRfbWV0YV9nZXRfZXZhbF90aW1lKGVudW0gbmZ0X21ldGFfa2V5cyBrZXksXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNjUtXHRcdCAgICAgICB1MzIgKmRlc3QpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jPTgyPXN0YXRpYyBub2lubGluZSBib29sXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6ODM6bmZ0X21ldGFfZ2V0X2V2YWxfcGt0dHlwZV9sbyhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy04NC1cdFx0XHQgICAgIHUzMiAqZGVzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM9MTMyPXN0YXRpYyBub2lubGluZSBib29sXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6MTMzOm5mdF9tZXRhX2dldF9ldmFsX3NrdWdpZChlbnVtIG5mdF9tZXRhX2tleXMga2V5LFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTEzNC1cdFx0XHQgdTMyICpkZXN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz0xNzE9c3RhdGljIG5vaW5saW5lIGJvb2xcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzoxNzI6bmZ0X21ldGFfZ2V0X2V2YWxfY2dyb3VwKHUzMiAqZGVzdCwgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMTczLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMTgzLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjE4NDpzdGF0aWMgbm9pbmxpbmUgYm9vbCBuZnRfbWV0YV9nZXRfZXZhbF9raW5kKGVudW0gbmZ0X21ldGFfa2V5cyBrZXksXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMTg1LVx0XHRcdFx0XHQgICAgdTMyICpkZXN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz0yMjc9c3RhdGljIGJvb2wgbmZ0X21ldGFfc3RvcmVfaWZncm91cCh1MzIgKmRlc3QsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTIzNS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzoyMzY6c3RhdGljIGJvb2wgbmZ0X21ldGFfZ2V0X2V2YWxfaWZuYW1lKGVudW0gbmZ0X21ldGFfa2V5cyBrZXksIHUzMiAqZGVzdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy0yMzctXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz0yODA9c3RhdGljIG5vaW5saW5lIGJvb2xcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzoyODE6bmZ0X21ldGFfZ2V0X2V2YWxfcnRjbGFzc2lkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqZGVzdClcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy0yODIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy0yOTMtXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6Mjk0OnN0YXRpYyBub2lubGluZSB1MzIgbmZ0X21ldGFfZ2V0X2V2YWxfc2RpZihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy0yOTUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz0zMDY9c3RhdGljIG5vaW5saW5lIHZvaWRcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzozMDc6bmZ0X21ldGFfZ2V0X2V2YWxfc2RpZm5hbWUodTMyICpkZXN0LCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy0zMDgte1xubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjMwOTpcdHUzMiBzZGlmID0gbmZ0X21ldGFfZ2V0X2V2YWxfc2RpZihwa3QpO1xubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTMxMC1cdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jPTMxNj1zdGF0aWMgdm9pZCBuZnRfbWV0YV9wa3RpbmZvX21heV91cGRhdGUoc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTM2My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzozNjQ6dm9pZCBuZnRfbWV0YV9nZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMzY1LVx0XHQgICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00MDItXHRjYXNlIE5GVF9NRVRBX09JRkdST1VQOlxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjQwMzpcdFx0aWYgKCFuZnRfbWV0YV9nZXRfZXZhbF9pZm5hbWUocHJpdi1cdTAwM2VrZXksIGRlc3QsIHBrdCkpXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDA0LVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00MDctXHRjYXNlIE5GVF9NRVRBX1NLR0lEOlxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjQwODpcdFx0aWYgKCFuZnRfbWV0YV9nZXRfZXZhbF9za3VnaWQocHJpdi1cdTAwM2VrZXksIGRlc3QsIHBrdCkpXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDA5LVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00MTItXHRjYXNlIE5GVF9NRVRBX1JUQ0xBU1NJRDpcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzo0MTM6XHRcdGlmICghbmZ0X21ldGFfZ2V0X2V2YWxfcnRjbGFzc2lkKHNrYiwgZGVzdCkpXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDE0LVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00MjctXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDI4Olx0XHRpZiAoIW5mdF9tZXRhX2dldF9ldmFsX3BrdHR5cGVfbG8ocGt0LCBkZXN0KSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00MjktXHRcdFx0Z290byBlcnI7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQzNS1cdGNhc2UgTkZUX01FVEFfQ0dST1VQOlxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjQzNjpcdFx0aWYgKCFuZnRfbWV0YV9nZXRfZXZhbF9jZ3JvdXAoZGVzdCwgcGt0KSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00MzctXHRcdFx0Z290byBlcnI7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQ0OS1cdGNhc2UgTkZUX01FVEFfT0lGS0lORDpcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzo0NTA6XHRcdGlmICghbmZ0X21ldGFfZ2V0X2V2YWxfa2luZChwcml2LVx1MDAzZWtleSwgZGVzdCwgcGt0KSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00NTEtXHRcdFx0Z290byBlcnI7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQ1NS1cdGNhc2UgTkZUX01FVEFfVElNRV9IT1VSOlxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjQ1NjpcdFx0bmZ0X21ldGFfZ2V0X2V2YWxfdGltZShwcml2LVx1MDAzZWtleSwgZGVzdCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDU3LVx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00NTgtXHRjYXNlIE5GVF9NRVRBX1NESUY6XG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDU5Olx0XHQqZGVzdCA9IG5mdF9tZXRhX2dldF9ldmFsX3NkaWYocGt0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00NjAtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQ2MS1cdGNhc2UgTkZUX01FVEFfU0RJRk5BTUU6XG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDYyOlx0XHRuZnRfbWV0YV9nZXRfZXZhbF9zZGlmbmFtZShkZXN0LCBwa3QpO1xubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQ2My1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQ3Mi19XG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDczOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9tZXRhX2dldF9ldmFsKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00NzQtXG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jPTgwMz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfbWV0YV9nZXRfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy04MDUtXHQuc2l6ZVx0XHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfbWV0YSkpLFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjgwNjpcdC5ldmFsXHRcdD0gbmZ0X21ldGFfZ2V0X2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtODA3LVx0LmluaXRcdFx0PSBuZnRfbWV0YV9nZXRfaW5pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NDcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipDb25zaWRlcmluZyBFdmFsdWF0aW9uIEZ1bmN0aW9ucyBmb3IgRm9jdXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gc3RhcnQgcmVhbGx5IGRpZ2dpbmcgaW4uIGBuZnRfbWV0YV9nZXRfZXZhbGAgc2VlbXMgbGlrZSBhIHNvbGlkLCBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBmb2N1c2luZyBvbiBldmFsdWF0aW9uIGZ1bmN0aW9ucy4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24sIGJ1dCBpcyBpdCB0aGUgKmJlc3QqPyBNeSBleHBlcmllbmNlIGlzIHRoYXQgb25lIGZ1bmN0aW9uIGlzIHJhcmVseSB0aGUgd2hvbGUgc3RvcnkuCgpMZXQmIzM5O3Mgc2Vl4oCmIFdoYXQgYWJvdXQgYG5mdF9ydF9nZXRfZXZhbGA/IEkgbmVlZCB0byBjb25zaWRlciBpdCwgdG9vLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBjb3VsZCBsZWFkIHRvIHNvbWUgaW50ZXJlc3RpbmcgaW5zaWdodHMuIEl0JiMzOTtzIHByb2JhYmx5IHdvcnRoIGludmVzdGlnYXRpbmcgaXRzIHJvbGUgYW5kIGhvdyBpdCByZWxhdGVzIHRvIGBuZnRfbWV0YV9nZXRfZXZhbGAuIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoZXNlIHR3bywgYW5kIGxpa2VseSBvdGhlcnMsIGludGVyYWN0IHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgZXZhbHVhdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfcnRfZ2V0X2V2YWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmg9MTQ4PXZvaWQgbmZ0X2R5bnNldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oLTE0OS1cdFx0ICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oOjE1MDp2b2lkIG5mdF9ydF9nZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaC0xNTEtXHRcdCAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTIwMz1zdGF0aWMgdm9pZCBleHByX2NhbGxfb3BzX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0yMjktXHRYKGUsIG5mdF9keW5zZXRfZXZhbCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MjMwOlx0WChlLCBuZnRfcnRfZ2V0X2V2YWwpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIzMS1cdFgoZSwgbmZ0X2JpdHdpc2VfZXZhbCk7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcnQuYz0yMj1zdGF0aWMgdTE2IGdldF90Y3Btc3MoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKnNrYmRzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9ydC5jLTUzLVxubmV0L25ldGZpbHRlci9uZnRfcnQuYzo1NDp2b2lkIG5mdF9ydF9nZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mdF9ydC5jLTU1LVx0XHQgICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9ydC5jPTE5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcnRfZ2V0X29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9ydC5jLTE5NS1cdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9ydCkpLFxubmV0L25ldGZpbHRlci9uZnRfcnQuYzoxOTY6XHQuZXZhbFx0XHQ9IG5mdF9ydF9nZXRfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmMtMTk3LVx0LmluaXRcdFx0PSBuZnRfcnRfZ2V0X2luaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzExCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRXZhbHVhdGluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyBmb3IgTmV0d29yayBGaWx0ZXIgUnVsZXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBnb29kIHN5bWJvbHMgdG8gcmVhbGx5IGhvbWUgaW4gb24gd2hlbiBkaWdnaW5nIGludG8gdGhlIG5ldHdvcmsgZmlsdGVyIGV2YWx1YXRpb24gcHJvY2Vzcy4gV2UmIzM5O3JlIGFscmVhZHkgdXNpbmcgYG5mdF9ydF9nZXRfZXZhbGAsIGFuZCB0aGF0JiMzOTtzIHNvbGlkIOKAkyBpdCYjMzk7cyBkZWZpbml0ZWx5IGEga2V5IHBvaW50IHRvIGV4YW1pbmUuIEJ1dCBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbC4gVGhlIGBuZnRfeGZybV9nZXRfZXZhbF9vdXRgIGZ1bmN0aW9uIGp1c3QgcG9wcGVkIGludG8gbXkgaGVhZC4gSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXQmIzM5O3MgYW5vdGhlciBnb29kIGNhbmRpZGF0ZSBmb3IgY2xvc2VyIGluc3BlY3Rpb24sIGFuZCBpZiBpdCBpcywgSSBjYW4gZGV0ZXJtaW5lIHdoeSBhbmQgd2hlcmUgaXQgbWF5IGJlIGJlbmVmaWNpYWwgdG8gYW5hbHl6ZS4gSSBuZWVkIHRvIG1hcCB0aGUgZXZhbHVhdGlvbiBmdW5jdGlvbiBtb3JlIGNvbXByZWhlbnNpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3hmcm1fZ2V0X2V2YWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfeGZybS5jPTEyMD1zdGF0aWMgdm9pZCBuZnRfeGZybV9zdGF0ZV9nZXRfa2V5KGNvbnN0IHN0cnVjdCBuZnRfeGZybSAqcHJpdixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTYwLVxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjE2MTpzdGF0aWMgdm9pZCBuZnRfeGZybV9nZXRfZXZhbF9pbihjb25zdCBzdHJ1Y3QgbmZ0X3hmcm0gKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTYyLVx0XHRcdFx0ICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTc2LVxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjE3NzpzdGF0aWMgdm9pZCBuZnRfeGZybV9nZXRfZXZhbF9vdXQoY29uc3Qgc3RydWN0IG5mdF94ZnJtICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTE3OC1cdFx0XHRcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMDEtXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MjAyOnN0YXRpYyB2b2lkIG5mdF94ZnJtX2dldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMDMtXHRcdFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMDktXHRjYXNlIFhGUk1fUE9MSUNZX0lOOlxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjIxMDpcdFx0bmZ0X3hmcm1fZ2V0X2V2YWxfaW4ocHJpdiwgcmVncywgcGt0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMTEtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTIxMi1cdGNhc2UgWEZSTV9QT0xJQ1lfT1VUOlxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjIxMzpcdFx0bmZ0X3hmcm1fZ2V0X2V2YWxfb3V0KHByaXYsIHJlZ3MsIHBrdCk7XG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMjE0LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM9MjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF94ZnJtX2dldF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTI3Mi1cdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF94ZnJtKSksXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MjczOlx0LmV2YWxcdFx0PSBuZnRfeGZybV9nZXRfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yNzQtXHQuaW5pdFx0XHQ9IG5mdF94ZnJtX2dldF9pbml0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDEyMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgTkZUIFRyYW5zZm9ybWF0aW9uIExvZ2ljKioKCk9rYXksIGBuZnRfeGZybV9nZXRfZXZhbGAgc2VlbXMgbGlrZSBhIGtleSBmdW5jdGlvbiB0byB6ZXJvIGluIG9uIHJpZ2h0IG5vdy4gSXQmIzM5O3MgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIE5ldHdvcmsgRmlsdGVyIFRhYmxlIChORlQpIGZyYW1ld29yayBoYW5kbGVzIHRyYW5zZm9ybWF0aW9ucy4gSSBzdXNwZWN0IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIGFuZCBldmFsdWF0aW5nIHRoZSBzcGVjaWZpYyB0cmFuc2Zvcm1hdGlvbiB0byBiZSBhcHBsaWVkLCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwYWNrZXQgZGF0YS4gTXkgZ3V0IHNheXMgdGhpcyBpcyB3aGVyZSB0aGUgcG9saWN5IHNlbGVjdGlvbiBhbmQgdHJhbnNmb3JtYXRpb24gc2V0dXAgaW50ZXJ0d2luZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGUgWEZSTS1yZWxhdGVkIGRldGFpbHMgYXJlIHJlc29sdmVkLgoKTmV4dCwgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAuIFRoaXMgc291bmRzIHByb21pc2luZywgcG9zc2libHkgcmVsYXRlZCB0byBwYXRoIHNlbGVjdGlvbiBvciByb3V0aW5nIHdpdGhpbiB0aGUgZGV2aWNlIGNvbnRleHQsIHdoaWNoIGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlLiBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHBsYXlzIGEga2V5IHBhcnQgaW4gaG93IHRoZSB0cmFuc2Zvcm1lZCBwYWNrZXRzIGFyZSBmb3J3YXJkZWQgd2l0aGluIHRoZSBzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBlc3NlbnRpYWwgdG8gc2VlaW5nIGhvdyB0aGUgcGFja2V0IGZsb3dzIGFyZSBoYW5kbGVkIHdpdGggdHJhbnNmb3JtYXRpb25zIGFwcGxpZWQuIExldCYjMzk7cyBzZWUgaG93IHRoZSBwYWNrZXQgaXMgYWN0dWFsbHkgcm91dGVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0yODI9c3RhdGljIGludCBhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0yOTItXHRyY3VfcmVhZF9sb2NrKCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjI5MzpcdGVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGFkZHIsIFx1MDAyNnN0YWNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMjk0LVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMDctZXJyX291dDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MzA4Olx0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UoXHUwMDI2c3RhY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMDktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmM9OTI9bXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMTA0LVx0cmN1X3JlYWRfbG9jaygpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmM6MTA1Olx0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgXHUwMDI2c3RhY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMTA2LVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMTIxLWVycl9vdXQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYzoxMjI6XHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShcdTAwMjZzdGFjayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMjMtXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0zNDI4PWludCBkZXZfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjM0Mjk6aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM0MzAtXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjM0MzE6dm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM0MzItc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jPTc1Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYy03NjItXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3NjM6c3RhdGljIGludCB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzY0LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jLTExMDktXHQubmRvX2dldF9pZmxpbmtcdFx0PSB2bGFuX2Rldl9nZXRfaWZsaW5rLFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTExMDpcdC5uZG9fZmlsbF9mb3J3YXJkX3BhdGhcdD0gdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgsXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMTExLVx0Lm5kb19od3RzdGFtcF9nZXRcdD0gdmxhbl9od3RzdGFtcF9nZXQsXG4tLVxubmV0L2NvcmUvZGV2LmM9NzQzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4tLVxubmV0L2NvcmUvZGV2LmMtNzUwLVxubmV0L2NvcmUvZGV2LmM6NzUxOnZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG5uZXQvY29yZS9kZXYuYy03NTIte1xuLS1cbm5ldC9jb3JlL2Rldi5jLTc2OS19XG5uZXQvY29yZS9kZXYuYzo3NzA6RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UpO1xubmV0L2NvcmUvZGV2LmMtNzcxLVxubmV0L2NvcmUvZGV2LmM6NzcyOmludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxubmV0L2NvcmUvZGV2LmMtNzczLVx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4tLVxubmV0L2NvcmUvZGV2LmMtODEyLWVycl9vdXQ6XG5uZXQvY29yZS9kZXYuYzo4MTM6XHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7XG5uZXQvY29yZS9kZXYuYy04MTQtXG4tLVxubmV0L2NvcmUvZGV2LmMtODE2LX1cbm5ldC9jb3JlL2Rldi5jOjgxNzpFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xubmV0L2NvcmUvZGV2LmMtODE4LVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTk3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tb25pdG9yaWZfb3BzID0ge1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk4OC1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjk4OTpzdGF0aWMgaW50IGllZWU4MDIxMV9uZXRkZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk5MC1cdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMDQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX2RhdGFpZl84MDIzX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDUzLVx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gaWVlZTgwMjExX2NoYW5nZV9tYWMsXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoxMDU0Olx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aFx0PSBpZWVlODAyMTFfbmV0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoLFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTA1NS1cdC5uZG9fc2V0dXBfdGNcdFx0PSBpZWVlODAyMTFfbmV0ZGV2X3NldHVwX3RjLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MzY9c3RhdGljIGJvb2wgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDQtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjQ1OnN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTQ2LVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy03My1vdXQ6XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjc0Olx0cmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGhhLCBzdGFjayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTc1LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTk3PXN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xOTEtZXJyX291dDpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MTkyOlx0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RhY2spO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xOTMtXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yMTQ9c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIyNS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MjI2Olx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwIHx8XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIyNy1cdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIGZ0KSBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NDkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgRmxvdyBPZmZsb2FkIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUsIHNwZWNpZmljYWxseSBob3cgdHJhZmZpYyBnZXRzIG9mZmxvYWRlZCBpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3QgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIHRoYXQmIzM5O3MgdGhlIGNvcmUgZnVuY3Rpb24uIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLiBOb3csIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAgaXMgY2FsbGVkIGJ5IGBuZnRfZmxvd19yb3V0ZWAsIGFuZCBmaW5hbGx5IHRoYXQmIzM5O3MgYWxsIGhvb2tlZCBpbnRvIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLiBUaGF0IG1ha2VzIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIHRoZSBrZXkgZW50cnkgcG9pbnQgdG8gbG9vayBhdCwgcmlnaHQ/IFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhIG1vcmUgZm9jdXNlZCBhbmFseXNpcy4gCgpOb3csIHNpbmNlIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG9mZmxvYWRpbmcsIGxldCBtZSBhbHNvIGNoZWNrIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jb25udHJhY2tfdGNwX3BhY2tldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD0xMDU9aW50IG5mX2Nvbm50cmFja191ZHBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaC0xMDktXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaDoxMTA6aW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oLTExMS1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MTk2OT1zdGF0aWMgaW50IG5mX2Nvbm50cmFja19oYW5kbGVfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk3Ni1cdGNhc2UgSVBQUk9UT19UQ1A6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MTk3NzpcdFx0cmV0dXJuIG5mX2Nvbm50cmFja190Y3BfcGFja2V0KGN0LCBza2IsIGRhdGFvZmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk3OC1cdFx0XHRcdFx0ICAgICAgIGN0aW5mbywgc3RhdGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTk1Mj1zdGF0aWMgdm9pZCBuZl9jdF90Y3Bfc3RhdGVfcmVzZXQoc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtOTYyLS8qIFJldHVybnMgdmVyZGljdCBmb3IgcGFja2V0LCBvciAtMSBmb3IgaW52YWxpZC4gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjk2MzppbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtOTY0LVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzM1MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgQ29ubnRyYWNrIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgVENQIHBhY2tldCBoYW5kbGluZyB3aXRoaW4gdGhlIE5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN5c3RlbS4gUmlnaHQsIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcCBkaXZlLiBJIGtub3cgaXQgZ2V0cyBjYWxsZWQgZnJvbSBgbmZfY29ubnRyYWNrX2hhbmRsZV9wYWNrZXRgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBieSBgbmZfY29ubnRyYWNrX2luYC4gQW5kIGBuZl9jb25udHJhY2tfaW5gIGlzLCBlc3NlbnRpYWxseSwgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBlbnRpcmUgY29ubnRyYWNrIHByb2Nlc3MuIFNvLCB3b3JraW5nIGJhY2t3YXJkcywgSSYjMzk7dmUgZ290IHRoZSBjYWxsIGNoYWluIG1hcHBlZCBpbiBteSBoZWFkLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGluZ3MgYXJlIHN0cnVjdHVyZWQuIExldCYjMzk7cyBzaGlmdCBvdXIgZm9jdXMgdG8gYGdldF9jdF9vcl90dXBsZV9mcm9tX3NrYmAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGluZm9ybWF0aW9uIGdldHMgZmV0Y2hlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X2N0X29yX3R1cGxlX2Zyb21fc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM9MTAyPWZpbmRfb3JfZXZpY3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubmNvdW50X2xpc3QgKmxpc3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0xMjktXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jOjEzMDpzdGF0aWMgYm9vbCBnZXRfY3Rfb3JfdHVwbGVfZnJvbV9za2Ioc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0xMzEtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz0xNjk9c3RhdGljIGludCBfX25mX2Nvbm5jb3VudF9hZGQoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMTgzLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYzoxODQ6XHRpZiAoIWdldF9jdF9vcl90dXBsZV9mcm9tX3NrYihuZXQsIHNrYiwgbDNudW0sIFx1MDAyNmN0LCBcdTAwMjZ0dXBsZSwgXHUwMDI2em9uZSwgXHUwMDI2cmVmY291bnRlZCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTE4NS1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz00MDM9aW5zZXJ0X3RyZWUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNDYxLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYzo0NjI6XHRpZiAoZ2V0X2N0X29yX3R1cGxlX2Zyb21fc2tiKG5ldCwgc2tiLCBsM251bSwgXHUwMDI2Y3QsIFx1MDAyNnR1cGxlLCBcdTAwMjZ6b25lLCBcdTAwMjZyZWZjb3VudGVkKSkge1xubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy00NjMtXHRcdC8qIGV4cGVjdGVkIGNhc2U6IG1hdGNoLCBpbnNlcnQgbmV3IG5vZGUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwNzgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvbm5lY3Rpb24gTGltaXQgRXZhbHVhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcgaW4gdGhlIGNhbGwgZ3JhcGhzLCBgX19uZl9jb25uY291bnRfYWRkYCBhbmQgYGluc2VydF90cmVlYCBhcmUgdGhlIGVudHJ5IHBvaW50cy4gYGluc2VydF90cmVlYCBpcyB1bHRpbWF0ZWx5IGNhbGxlZCBieSBgbmZfY29ubmNvdW50X2NvdW50YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFNpbWlsYXJseSwgYF9fbmZfY29ubmNvdW50X2FkZGAgaGFzIGl0cyBvcmlnaW5zIGluIGBuZl9jb25uY291bnRfYWRkYC4gVGhlbiwgYG5mX2Nvbm5jb3VudF9jb3VudGAgaXRzZWxmIGZlZWRzIGludG8gYm90aCBgeHRfY29ubmxpbWl0X2V2YWxgIGFuZCBgbmZ0X2Nvbm5saW1pdF9ldmFsYC4KCkdpdmVuIHRoYXQsIGBuZnRfY29ubmxpbWl0X2V2YWxgIGxvb2tzIGxpa2UgdGhlIG1vc3Qgc3RyYXRlZ2ljYWxseSBpbXBvcnRhbnQgcG9pbnQgdG8gZm9jdXMgb24gaGVyZS4gSXQmIzM5O3MgdGhlIGNsZWFuZXN0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgYXQgaG93IGNvbm5lY3Rpb24gbGltaXRzIGFyZSBhY3R1YWxseSAqZXZhbHVhdGVkKiB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEkmIzM5O2xsIGJlZ2luIG15IGRlZXBlciBkaXZlIHRoZXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY291bnRpbmcgbWVjaGFuaXNtIGludGVyYWN0cyB3aXRoIHRoZSBOZXRmaWx0ZXIgdGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9jb25ubGltaXRfZXZhbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYz0xNzY9c3RhdGljIHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgbmZ0X2Nvbm5saW1pdF9vYmpfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jLTE4My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jOjE4NDpzdGF0aWMgdm9pZCBuZnRfY29ubmxpbWl0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmMtMTg1LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmM9MjUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9jb25ubGltaXRfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jLTI1My1cdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9jb25ubGltaXQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jOjI1NDpcdC5ldmFsXHRcdD0gbmZ0X2Nvbm5saW1pdF9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmMtMjU1LVx0LmluaXRcdFx0PSBuZnRfY29ubmxpbWl0X2luaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjcyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBORl9UQUJMRVMgU3ltYm9sIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLCBgbmZ0X3JlamVjdF9pcHY0X2V2YWxgLCBgbmZ0X3JlamVjdF9pcHY2X2V2YWxgLCBgbmZ0X3JlamVjdF9pbmV0X2V2YWxgLCBgbmZ0X21ldGFfZ2V0X2V2YWxgLCBgbmZ0X3J0X2dldF9ldmFsYCwgYG5mdF94ZnJtX2dldF9ldmFsYCwgYG5mdF9jb25ubGltaXRfZXZhbGAsIGFuZCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBUaGUgZ29hbCwgYXMgYWx3YXlzLCBpcyB0byBtYXAgdGhlc2Uga2VybmVsIHN5bWJvbHMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBLY29uZmlnIG9wdGlvbnMuCgpGaXJzdCBwYXNzOiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBzZWVtcyB0byBiZSBsaW5rZWQgdG8gYE5GX0ZMT1dfVEFCTEVgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiBgbmZ0X3JlamVjdF9pcHY0X2V2YWxgIGFuZCBgbmZ0X3JlamVjdF9pcHY2X2V2YWxgIG1hcCBkaXJlY3RseSB0byBgTkZUX1JFSkVDVF9JUFY0YCBhbmQgYE5GVF9SRUpFQ1RfSVBWNmAgcmVzcGVjdGl2ZWx5LCBhbmQgYG5mdF9yZWplY3RfaW5ldF9ldmFsYCBjb3JyZXNwb25kcyB0byBgTkZUX1JFSkVDVF9JTkVUYCAtIHN0YW5kYXJkLgoKTm93LCB0aGluZ3MgZ2V0IGEgbGl0dGxlIGludGVyZXN0aW5nIHdpdGggYG5mdF9tZXRhX2dldF9ldmFsYC4gV2FpdCwgaXNuJiMzOTt0IHRoYXQgZnVuY3Rpb25hbGl0eSBwcmV0dHkgZnVuZGFtZW50YWw/IEkmIzM5O20gYWxtb3N0IGNlcnRhaW4gYE5GVF9NRVRBYCBpcyBidWlsdC1pbi4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIG5mX3RhYmxlcyBjb2RlIGFuZCBLY29uZmlnIHRvIGJlIGFic29sdXRlbHkgc3VyZSwganVzdCB0byBiZSB0aG9yb3VnaC4KClNpbWlsYXJseSwgSSBuZWVkIHRvIHZlcmlmeSBgbmZ0X3J0X2dldF9ldmFsYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGVudHJ5IGZvciBgTkZUX1JUYCB0byBjb25maXJtIHRoYXQuIEdvdHRhIGJlIHByZWNpc2UuCgpgbmZ0X3hmcm1fZ2V0X2V2YWxgIG1hcHMgdG8gYE5GVF9YRlJNYCBhbmQgYG5mdF9jb25ubGltaXRfZXZhbGAgdG8gYE5GVF9DT05OTElNSVRgIHdoaWNoIHNlZW0gc3RyYWlnaHRmb3J3YXJkLiBGaW5hbGx5LCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgIGFwcGVhcnMgdG8gZGVwZW5kIG9uIGBORl9DT05OVFJBQ0tgLiBBbGwgb2YgdGhlc2UgbG9vayBzb2xpZCBidXQgYSBxdWljayBkb3VibGUgY2hlY2sgaXMgYWx3YXlzIHNtYXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZUXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDgwPWNvbmZpZyBORl9UQUJMRVNfTkVUREVWXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODU6Y29uZmlnIE5GVF9OVU1HRU5cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODYtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0OTE6Y29uZmlnIE5GVF9DVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5Mi1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0OTg6Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5OS1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBleHRoZHIgRENDUCBzdXBwb3J0IChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjUxMTpjb25maWcgTkZUX0NPTk5MSU1JVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgY29ubmxpbWl0IG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MTktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTIwOmNvbmZpZyBORlRfTE9HXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTIxLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBsb2cgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUyNS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MjY6Y29uZmlnIE5GVF9MSU1JVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUyNy1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbGltaXQgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUzMS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MzI6Y29uZmlnIE5GVF9NQVNRXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMzLVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTQwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjU0MTpjb25maWcgTkZUX1JFRElSXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTQyLVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTQ5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjU1MDpjb25maWcgTkZUX05BVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1MS1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1OC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NTk6Y29uZmlnIE5GVF9UVU5ORUxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NjAtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIHR1bm5lbCBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTY0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjU2NTpjb25maWcgTkZUX1FVRVVFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTY2LVx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19RVUVVRVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NzEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTcyOmNvbmZpZyBORlRfUVVPVEFcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NzMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIHF1b3RhIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NzctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTc4OmNvbmZpZyBORlRfUkVKRUNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTc5LVx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTU4NS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1ODY6Y29uZmlnIE5GVF9SRUpFQ1RfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU4Ny1cdGRlcGVuZHMgb24gTkZfVEFCTEVTX0lORVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTkwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjU5MTpjb25maWcgTkZUX0NPTVBBVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU5Mi1cdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTk4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjU5OTpjb25maWcgTkZUX0hBU0hcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDAtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGhhc2ggbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTYwNC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2MDU6Y29uZmlnIE5GVF9GSUJcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDYtXHR0cmlzdGF0ZVxubmV0L25ldGZpbHRlci9LY29uZmlnLTYwNy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2MDg6Y29uZmlnIE5GVF9GSUJfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYwOS1cdGRlcGVuZHMgb24gTkZfVEFCTEVTX0lORVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjE3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjYxODpjb25maWcgTkZUX1hGUk1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MTktXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIHhmcm0vSVBTZWMgc2VjdXJpdHkgYXNzb2NpYXRpb24gbWF0Y2hpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjYyNTpjb25maWcgTkZUX1NPQ0tFVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYyNi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgc29ja2V0IG1hdGNoIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjMyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjYzMzpjb25maWcgTkZUX09TRlxubmV0L25ldGZpbHRlci9LY29uZmlnLTYzNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgcGFzc2l2ZSBPUyBmaW5nZXJwcmludCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTYzOS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDA6Y29uZmlnIE5GVF9UUFJPWFlcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDEtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIHRwcm94eSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0OC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDk6Y29uZmlnIE5GVF9TWU5QUk9YWVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY1MC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgU1lOUFJPWFkgZXhwcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY2Mj1jb25maWcgTkZfRFVQX05FVERFVlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjY4OmNvbmZpZyBORlRfRFVQX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2OS1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY3My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NzQ6Y29uZmlnIE5GVF9GV0RfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjc1LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgcGFja2V0IGZvcndhcmRpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NzktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjgwOmNvbmZpZyBORlRfRklCX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTY4MS1cdGRlcGVuZHMgb24gTkZUX0ZJQl9JUFY0XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY4OC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2ODk6Y29uZmlnIE5GVF9SRUpFQ1RfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjkwLVx0ZGVwZW5kcyBvbiBORlRfUkVKRUNUX0lQVjRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBMYW5kc2NhcGUqKgoKSG1tLCBzb21ldGhpbmcgZG9lc24mIzM5O3QgZmVlbCBxdWl0ZSByaWdodC4gSSB3YXMgZXhwZWN0aW5nIGBORlRfTUVUQWAgYW5kIGBORlRfUlRgIHRvIGJlIHByZXNlbnQgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIGJ1dCBJJiMzOTttIGRyYXdpbmcgYSBibGFuay4gVGhhdCBzZWVtcyBvZGQsIGdpdmVuIHRoZWlyIHJvbGVzLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiBUaGUgS2NvbmZpZyBmaWxlcyB1c3VhbGx5IGRpY3RhdGUgdGhlIG9wdGlvbnMgd2UgaGF2ZSBhdmFpbGFibGUuIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIHNoaWZ0IG15IGZvY3VzLiBMZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgTWFrZWZpbGUgd2l0aGluIHRoZSBgbmV0L25ldGZpbHRlcmAgZGlyZWN0b3J5IHRvIHNlZSBob3cgdGhvc2Ugc3ltYm9scyBhcmUgYWN0dWFsbHkgaW5jbHVkZWQuIFRoZSBNYWtlZmlsZSBpcyB3aGVyZSB0aGUgYnVpbGQgcHJvY2VzcyBpcyBkZWZpbmVkLiBJdCBzaG91bGQgb2ZmZXIgY2x1ZXMgYXMgdG8gaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIGNvbmZpZ3VyZWQsIHdoaWNoIG1heSBleHBsYWluIHRoZWlyIGFic2VuY2UgaW4gS2NvbmZpZy4gSXQmIzM5O3MgdGltZSB0byBmb2xsb3cgdGhlIGJ1aWxkIHJlY2lwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X21ldGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OS1cdFx0ICBuZnRfYml0d2lzZS5vIG5mdF9ieXRlb3JkZXIubyBuZnRfcGF5bG9hZC5vIG5mdF9sb29rdXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo5MDpcdFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MS1cdFx0ICBuZnRfY291bnRlci5vIG5mdF9vYmpyZWYubyBuZnRfaW5uZXIubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzU0MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipRdWljayBORl9UQUJMRVMgUmVmcmVzaGVyKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgbmZfdGFibGVzYCBzdWJzeXN0ZW0sIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgd2hpY2ggbW9kdWxlcyBhcmUgcmVxdWlyZWQuIEkgc2VlIHRoYXQgYG5mdF9tZXRhYCBhbmQgYG5mdF9ydGAgYXJlIGZ1bmRhbWVudGFsIGNvbXBvbmVudHMsIGNvcmUgdG8gYG5mX3RhYmxlc2AuIFRoYXQgbWVhbnMsIGFuZCB0aGlzIHNlZW1zIGxvZ2ljYWwsIGBORl9UQUJMRVNgIGl0c2VsZiBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEkgc2hvdWxkIGNoZWNrLCB0aG91Z2gsIGFib3V0IHRoZXNlIHNwZWNpZmljIG1vZHVsZXM6IGBORlRfUkVKRUNUX0lQVjRgIGFuZCBgTkZUX1JFSkVDVF9JUFY2YC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcywgdGhleSBzZWVtIGxlc3MgY29yZSBidXQgc3RpbGwgcXVpdGUgaW1wb3J0YW50IGluIG1hbnkgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfUkVKRUNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9NDA9aWYgTkZfVEFCTEVTX0lQVjRcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTQxLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NDI6Y29uZmlnIE5GVF9SRUpFQ1RfSVBWNFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNDMtXHRzZWxlY3QgTkZfUkVKRUNUX0lQVjRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4OTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHNlZW1pbmdseSBzaW1wbGUgc3RhdGVtZW50LCBjcmFmdGVkIGFzIHRob3VnaCBpdCYjMzk7cyBhIGRpcmVjdCByZWZsZWN0aW9uIG9mIG15IG93biBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIGRldmVsb3BtZW50OgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IEEgS2NvbmZpZyBSZXZlbGF0aW9uKioKCkFscmlnaHQsICYjMzQ7QW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AmIzM0Oy4uLiB0aGF0JiMzOTtzIGludHJpZ3VpbmcuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgcG9pbnRlciwgYSBicmVhZGNydW1iIHRyYWlsLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBpbXBsaWNhdGlvbjogd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgSVB2Ni1zcGVjaWZpYyBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbi4gJiMzNDtBbmQmIzM0OyBpbXBsaWVzIGEgY29udGludWF0aW9uLCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgdG9waWMgYXQgaGFuZC4gSXQgc3VnZ2VzdHMgZnVydGhlciBkZXRhaWxzIG9yIHBlcmhhcHMgYSBkaWZmZXJlbnQgcGVyc3BlY3RpdmUgYXJlIGFib3V0IHRvIGJlIGludHJvZHVjZWQuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlbHZpbmcgaW50byB0aGUgcmVhbG0gb2YgbmV0d29yayBwYWNrZXQgZmlsdGVyaW5nIHdpdGhpbiB0aGUgSVB2NiBwcm90b2NvbCBzdGFjay4gVGhlIGZhY3QgaXQgaXMgdGhlIEtjb25maWcgaGludHMgdGhhdCB3ZSBhcmUgZGVhbGluZyB3aXRoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIElQdjYgbmV0ZmlsdGVyLiBJdCByZW1pbmRzIG1lIG9mIHRoZSBpbXBvcnRhbmNlIG9mIG1vZHVsYXJpdHkgaW4gdGhlIGtlcm5lbC4gVGhpcyBwYXJ0aWN1bGFyIEtjb25maWcgZmlsZSBpcyB3aGVyZSB0aGUgc2V0dGluZ3MgdGhhdCBkZXRlcm1pbmUgd2hpY2ggbmV0ZmlsdGVyIG1vZHVsZXMgYXJlIGNvbXBpbGVkIGludG8gdGhlIElQdjYgbmV0d29yayBzdGFjayBhcmUuIFRoaXMgaW5mb3JtYXRpb24gaGFzIGxpa2VseSBjb21lIHVwIGluIGRpc2N1c3Npb25zIGFib3V0IGNvbmZpZ3VyaW5nIG9yIGRlYnVnZ2luZyBJUHY2IGZpcmV3YWxsIGJlaGF2aW9yLCBvciBwZXJoYXBzIGR1cmluZyBhbiBvdmVydmlldyBvZiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc2VjdXJpdHkgZmVhdHVyZXMuIEl0JiMzOTtzIG5vdyB0aW1lIHRvIGV4cGxvcmUgdGhpcyBzcGVjaWZpYyBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZUX1JFSkVDVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTM2PWlmIE5GX1RBQkxFU19JUFY2XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0zNy1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjM4OmNvbmZpZyBORlRfUkVKRUNUX0lQVjZcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTM5LVx0c2VsZWN0IE5GX1JFSkVDVF9JUFY2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzAwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBmb3IgT3B0aW1hbCBQZXJmb3JtYW5jZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMgZmxvdyB0YWJsZSBzZXR1cC4gU2VlbXMgbGlrZSB3ZSBuZWVkIGBORl9UQUJMRVNgLCBgTkZfRkxPV19UQUJMRWAsIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAgYXMgdGhlIGNvcmUgY29tcG9uZW50cywgbmF0dXJhbGx5LiBUaGVuLCBmb3IgdGhlIHJlamVjdCBmdW5jdGlvbmFsaXR5LCB3ZSBoYXZlIGBORlRfUkVKRUNUX0lQVjRgLCBgTkZUX1JFSkVDVF9JUFY2YCwgYW5kIGBORlRfUkVKRUNUX0lORVRgLiBGaW5hbGx5LCBgTkZUX1hGUk1gLCBgTkZUX0NPTk5MSU1JVGAsIGFuZCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBiaXRzIHdpdGggYE5GX0NPTk5UUkFDS2AgYXJlIGluIHRoZSBtaXggYXMgd2VsbC4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gdGhhdCBgTkZUX1JFSkVDVF9JTkVUYCBpcyBhY3R1YWxseSBkZWZpbmVkIGluIHRoZSBLY29uZmlnIOKAkyB5ZXAsIGl0JiMzOTtzIHRoZXJlIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBHb29kLiBOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gU2VlbXMgYE5GX1JFSkVDVF9JUFY0YCBhbmQgYE5GX1JFSkVDVF9JUFY2YCBhcmUgZGlyZWN0bHkgc2VsZWN0ZWQgYnkgYE5GVF9SRUpFQ1RfSVBWNGAgYW5kIGBORlRfUkVKRUNUX0lQVjZgLgoKQWgsIGJ1dCBob2xkIG9uLi4uIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYG5mX3JlamVjdF9pcHY0LmNgIGFuZCBgbmZfcmVqZWN0X2lwdjYuY2AuIFRoZXNlIGFyZSBidWlsdCB3aGVuIGBORl9SRUpFQ1RfSVBWNGAgYW5kIGBORl9SRUpFQ1RfSVBWNmAgYXJlIGV4cGxpY2l0bHkgZW5hYmxlZCwgYW5kIHRoZXNlLCBpbiB0dXJuLCBhcmUgc2VsZWN0ZWQgYnkgdGhlIGBORlRfUkVKRUNUXypgIG9wdGlvbnMgYW5kIGFsc28gYElQX05GX1RBUkdFVF9SRUpFQ1RgIGFuZCBgSVA2X05GX1RBUkdFVF9SRUpFQ1RgIC4gVGhpcyBtZWFucyB0aGF0IGVuYWJsaW5nIGBORlRfUkVKRUNUX0lQVjRgIGFuZCBgTkZUX1JFSkVDVF9JUFY2YCBpcyBzdWZmaWNpZW50IGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoYXQmIzM5O3MgZ29vZCwga2VlcHMgdGhpbmdzIGNsZWFuZXIuCgpOb3csIGZvY3VzaW5nIG9uIGNvbm5lY3Rpb24gdHJhY2tpbmcsIHdlIGhhdmUgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9DT05OQ09VTlRgIHdpdGggdXMuIGBORlRfQ09OTkxJTUlUYCBzZWxlY3RzIGBORl9DT05OQ09VTlRgLCBtYWtpbmcgdGhhdCBhIGxvZ2ljYWwgZGVwZW5kZW5jeS4KCkZpbmFsbHksIGxldCYjMzk7cyBjb25zaWRlciB0aGUgJiMzNDtmb3J3YXJkIHBhdGgmIzM0OyBmdW5jdGlvbnMuIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGluIGBuZXQvY29yZS9kZXYuY2AsIHNvIGl0JiMzOTtzIGFsd2F5cyBpbmNsdWRlZC4gSG93ZXZlciwgYG5mdF9kZXZfZm9yd2FyZF9wYXRoYCBpcyBpbiBgbmZfZmxvd190YWJsZV9wYXRoLmNgLiBOZWVkIHRvIHF1aWNrbHkgcmV2aWV3IHdoZW4gYG5mX2Zsb3dfdGFibGVfcGF0aC5jYCBnZXRzIGJ1aWx0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX3BhdGgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQzPW5mX2Zsb3dfdGFibGUtb2Jqc1x0XHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ0Olx0XHRcdFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ1LVx0XHRcdFx0ICAgbmZfZmxvd190YWJsZV9vZmZsb2FkLm8gbmZfZmxvd190YWJsZV94ZHAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM2MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipEaXZpbmcgaW50byB0aGUgRmxvdyBUYWJsZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZXRoaW5nIHdpdGhpbiBgbmZfZmxvd190YWJsZWAuIEdpdmVuIG15IGJhY2tncm91bmQsIEkgdW5kZXJzdGFuZCB0aGlzIGlzIGJ1aWx0IHVzaW5nIGBORl9GTE9XX1RBQkxFYCwgd2hpY2ggaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgYmFzZSBzdHJ1Y3R1cmUuIE5vdywgSSB3YW50IHRvIHRyYWNlIGEgcGFydGljdWxhciBmdW5jdGlvbiBvciBwYXRoLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgZm9yd2FyZGluZyBwYXRoIGlzIGJ1aWx0LiBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIGBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoYC4gSSByZWNhbGwgdGhhdCBvbmUgYmVpbmcgcmVsYXRlZCB0byBlbmNhcHN1bGF0aW9uLiBJIGtub3cgdGhhdCBsaXZlcyBpbiBgbmV0L2lwdjQvaXBpcC5jYC4gVGhlIG5leHQgcXVlc3Rpb24gaXMgd2hlbiBpcyB0aGF0IGJ1aWx0PyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgb3JkZXIgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBpcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSAmIzQzOz0gaXBtcl9iYXNlLm9cbm5ldC9pcHY0L01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORVRfSVBJUCkgJiM0Mzs9IGlwaXAub1xubmV0L2lwdjQvTWFrZWZpbGUtMjYtZ3JlLXkgOj0gZ3JlX2RlbXV4Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk2OTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ29uc2lkZXJpbmcgSVAgVHVubmVsaW5nIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIHN5c3RlbSBuZWVkcyB0byBzdXBwb3J0IElQLWluLUlQIHR1bm5lbHMsIHNvIGVuYWJsaW5nIGBORVRfSVBJUGAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgbW92ZS4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBJUHY2IHR1bm5lbGluZy4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIEkgbmVlZCB0byBjb25zaWRlciBpcyBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAsIHdoaWNoLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIHJlc2lkZXMgd2l0aGluIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHR1bm5lbCBmb3J3YXJkaW5nIHBhdGggaXMgY29ycmVjdGx5IGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkIGZvciBJUHY2IHR1bm5lbHMuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGNydWNpYWwgZm9yIHNldHRpbmcgdXAgdGhlIGVuY2Fwc3VsYXRpb24gYW5kIGRlY2Fwc3VsYXRpb24gbG9naWMsIGVzcGVjaWFsbHkgYXJvdW5kIGhlYWRlciBtYW5pcHVsYXRpb24gYW5kIHJvdXRlIGxvb2t1cHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpdGggdGhlIHR1bm5lbCBkcml2ZXIgYW5kIHRoZSBJUHY2IHN0YWNrLiBHaXZlbiB0aGF0IGl0IHJlc2lkZXMgaW4gdGhlIElQdjYgdHVubmVsIGNvZGUsIGl0IGNsZWFybHkgcGxheXMgYSBrZXkgcm9sZSBpbiBtYWtpbmcgc3VyZSBJUHY2IHRyYWZmaWMgaXMgY29ycmVjdGx5IHJvdXRlZCB0aHJvdWdoIHRoZXNlIHR1bm5lbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl90dW5uZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT00MT1vYmotJChDT05GSUdfSVBWNl9TSVQpICYjNDM7PSBzaXQub1xubmV0L2lwdjYvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSAmIzQzOz0gaXA2X3R1bm5lbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZS00My1vYmotJChDT05GSUdfSVBWNl9HUkUpICYjNDM7PSBpcDZfZ3JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwODYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZGlzdGlsbGVkIGludG8gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkNvbnNpZGVyaW5nIElQdjYgVHVubmVsaW5nIGFuZCBEYXRhIFN0cnVjdHVyZSBBbGlnbm1lbnQqKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBJUFY2X1RVTk5FTGAgbmVlZHMgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGFjY291bnRlZCBmb3IuIE5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gbG9vayBhdCBob3cgZm9yd2FyZCBwYXRocyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBgZHNhX3VzZXJfZmlsbF9mb3J3YXJkX3BhdGhgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHByb2JhYmx5IHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBmb3IgdGhpcy4gSSBrbm93IGl0JiMzOTtzIGxvY2F0ZWQgaW4gYG5ldC9kc2EvdXNlci5jYC4KClRoZSBuZXh0IHF1ZXN0aW9uIEkgaGF2ZSBpcywgYXQgd2hhdCBwb2ludCBpcyBgbmV0L2RzYS91c2VyLmNgIGV2ZW4gYnVpbHQgaW50byB0aGUga2VybmVsPyBUaGlzIHF1ZXN0aW9uIG5lZWRzIGFuc3dlcmluZyB0byBlbnN1cmUgdGhhdCB3aGF0ZXZlciBpcyByZXF1aXJlZCBpcyBhbHNvIGJlaW5nIGNvbXBpbGVkIHdoZW4gaXQgbmVlZHMgdG8gYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZHNhL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kc2EvTWFrZWZpbGU9MTA9ZHNhX2NvcmUteSAmIzQzOz0gXFxcbi0tXG5uZXQvZHNhL01ha2VmaWxlLTE5LVx0dHJhY2UubyBcXFxubmV0L2RzYS9NYWtlZmlsZToyMDpcdHVzZXIub1xubmV0L2RzYS9NYWtlZmlsZS0yMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0MjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRFNBIENvcmUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmcm9tIGEgYGRzYV9jb3JlYCBwZXJzcGVjdGl2ZSwgd2hpY2ggaXMgYnVpbHQgb24gYE5FVF9EU0FgLiBUaGUgY29yZSBoZXJlIGlzIHdoYXQgbWF0dGVyczsgdGhvc2UgaGFyZHdhcmUtc3BlY2lmaWMgZnVuY3Rpb25zLCBgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvYCBhbmQgYG10a19mbG93X2dldF93ZG1hX2luZm9gLCBmb3VuZCBpbiBgYWlyb2hhX3BwZS5jYCBhbmQgYG10a19wcGVfb2ZmbG9hZC5jYCByZXNwZWN0aXZlbHksIGFyZSBwcm9iYWJseSBpcnJlbGV2YW50IGluIGEgUUVNVSBlbnZpcm9ubWVudCwgYW5kIGl0IGlzIHRoZSBjb3JlIHRoYXQgbWF0dGVycy4gSSBjYW4gaWdub3JlIGVuYWJsaW5nIHRob3NlIHNwZWNpZmljIGRyaXZlcnMgYmVjYXVzZSB0aGUgaGVhcnQgb2YgaXQgaXMgdGhlIGNvcmUgY2hhbmdlcy4KClRoZXJlZm9yZSwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgYXJlOiBgTkZfVEFCTEVTYCwgYE5GX0ZMT1dfVEFCTEVgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORlRfUkVKRUNUX0lQVjRgLCBgTkZUX1JFSkVDVF9JUFY2YCwgYE5GVF9SRUpFQ1RfSU5FVGAsIGBORlRfWEZSTWAsIGBORlRfQ09OTkxJTUlUYCwgYE5GX0NPTk5UUkFDS2AsIGBORVRfSVBJUGAsIGBJUFY2X1RVTk5FTGAsIGFuZCBgTkVUX0RTQWAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIGBORlRfRkxPV19PRkZMT0FEYCByZWxpZXMgb24gYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9GTE9XX1RBQkxFYCwgc28gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQgdG9vLiBBbmQgSSBzZWUgdGhhdCBgTkZUX1JFSkVDVF9JTkVUYCBkZXBlbmRzIG9uIGBORl9UQUJMRVNfSU5FVGAgYXMgd2VsbCwgc28gdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfVEFCTEVTX0lORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVx0ZGVwZW5kcyBvbiBJUFY2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMTY5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQ2hlY2tpbmcgRGVwZW5kZW5jaWVzIGZvciBOZXR3b3JrIEZ1bmN0aW9uYWxpdHkqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgYE5GX1RBQkxFU19JTkVUYCBuZWVkcyB0byBiZSBlbmFibGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgdW5kZXJzdG9vZCwgYW5kIHdlJiMzOTtsbCBrZWVwIHRoYXQgYXMgb3VyIGJhc2UuCgpOb3csIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGF0IGBORlRfWEZSTWAgZG9lc24mIzM5O3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBpbnRlcmRlcGVuZGVuY2llcyB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBGaXJzdCwgaXQgcmVxdWlyZXMgYE5GX1RBQkxFU2AgaXRzZWxmLCB3aGljaCBtYWtlcyBzZW5zZS4gV2Uga25vdyB0aGF0IGBORl9UQUJMRVNgIGhhcyBgTkZfVEFCTEVTX0lORVRgIGFzIGEgY29tcG9uZW50LCBzbyB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4gV2hhdCBhYm91dCBgWEZSTWA/IExldCYjMzk7cyBxdWlja2x5IHZlcmlmeSB0aGF0IGBYRlJNYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cyB0aGF0IHdlIHNob3VsZCBiZSBjb25zaWRlcmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9YRlJNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz02MDg9Y29uZmlnIE5GVF9GSUJfSU5FVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MTctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjE4OmNvbmZpZyBORlRfWEZSTVxubmV0L25ldGZpbHRlci9LY29uZmlnLTYxOS1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgeGZybS9JUFNlYyBzZWN1cml0eSBhc3NvY2lhdGlvbiBtYXRjaGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU0MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZTogTkZUX1JFSkVDVF9JUFY0KioKClJpZ2h0LCBzbyB0aGlzIGNvZGUgc2VjdGlvbiBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGF0IGZpcnN0IGdsYW5jZS4gSXQmIzM5O3MgdHVja2VkIGluc2lkZSBhbiBgaWYgTkZfVEFCTEVTYCBibG9jaywgc28gY2xlYXJseSwgdGhhdCYjMzk7cyB0aGUgcHJpbWFyeSwgYW5kIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGUgKm9ubHkqIGV4cGxpY2l0IGRlcGVuZGVuY3kuIEJ1dCB0aGVuLCBpdCBkYXducyBvbiBtZSwgYFhGUk1gIGlzIHN1Y2ggYSBmdW5kYW1lbnRhbCBuZXR3b3JraW5nIGNvbXBvbmVudDsgaXQmIzM5O3MgcHJhY3RpY2FsbHkgYWx3YXlzIGNvbXBpbGVkIGluLiBJdCB3b3VsZCBiZSBhIHNpbGx5IG92ZXJzaWdodCB0byBtaXNzIGlmIGBORlRfUkVKRUNUX0lQVjRgIHJlbGllcyBvbiBpdC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIGBORlRfUkVKRUNUX0lQVjRgJiMzOTtzIGNvbmZpZyBvcHRpb25zLiBBaCwgdGhlcmUgaXQgaXMuIENvbmZpcm1lZC4gSXQgZGlyZWN0bHkgZGVwZW5kcyBvbiBgTkZfVEFCTEVTX0lQVjRgLiBUaGF0JiMzOTtzIG5vdCBlbnRpcmVseSB1bmV4cGVjdGVkLCBnaXZlbiB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX1RBQkxFU19JUFY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MzM9aWYgTkZfVEFCTEVTXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zNC1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjM1OmNvbmZpZyBORl9UQUJMRVNfSVBWNFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzYtXHRib29sIFwmIzM0O0lQdjQgbmZfdGFibGVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5NjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBrZXJuZWwgbW9kdWxlIGNvbmZpZ3VyYXRpb24sIGZvY3VzaW5nIG9uIHRoZSBlc3NlbnRpYWwgYG5mdGFibGVzYCBjb21wb25lbnRzOgoKKipNeSBLZXJuZWwgTW9kdWxlIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBnZXR0aW5nIHRoaXMgc3lzdGVtIHVwIHRvIHNudWZmIHdpdGggYG5mdGFibGVzYC4gVG8gbWFrZSBzdXJlIGl0JiMzOTtzIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkLCBJICphYnNvbHV0ZWx5KiBuZWVkIHRvIGVuYWJsZSBgTkZfVEFCTEVTX0lQVjRgLiBUaGF0JiMzOTtzIGEgbm8tYnJhaW5lciwgZnVuZGFtZW50YWwgZm9yIGhhbmRsaW5nIElQdjQgdHJhZmZpYyB3aXRoIG5mdGFibGVzLiBBbmQgaWYgSSB3YW50IHRvIGdldCB0aGUgSVB2NiByZWplY3RzIGRvbmUgaW4gYG5mdGFibGVzYCwgSSBhbHNvIG5lZWQgYE5GX1RBQkxFU19JUFY2YC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gIEkgbmVlZCB0byBjb25maWd1cmUgYm90aCB0byBnZXQgZXZlcnl0aGluZyB3b3JraW5nIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfVEFCTEVTX0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0yOT1pZiBORl9UQUJMRVNcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTMwLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MzE6Y29uZmlnIE5GX1RBQkxFU19JUFY2XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NiBuZl90YWJsZXMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjI3NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZXZpZXcgYSBzZXQgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIG5ldHdvcmtpbmcgdGFzay4gRmlyc3QsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGZ1bmRhbWVudGFsIE5ldGZpbHRlciBhbmQgbmZ0YWJsZXMgY29tcG9uZW50cywgc3BlY2lmaWNhbGx5IGBORl9UQUJMRVNgLCBgTkZfVEFCTEVTX0lQVjRgLCBgTkZfVEFCTEVTX0lQVjZgLCBhbmQgdGhlIGNvbWJpbmVkIGBORl9UQUJMRVNfSU5FVGAuIFRoZXNlIGFyZSwgb2YgY291cnNlLCBhYnNvbHV0ZWx5IGNydWNpYWwgdG8gYWxtb3N0IGFueSBtb2Rlcm4gbmV0d29yayBzZXR1cCB1c2luZyBuZnRhYmxlcy4gVGhlbiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZmxvdyBvZmZsb2FkIGNvbmZpZ3VyYXRpb25zOyBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCBhbmQgdGhlIHJlamVjdCBjb25maWd1cmF0aW9uczsgYE5GVF9SRUpFQ1RfSVBWNGAsIGBORlRfUkVKRUNUX0lQVjZgLCBhbmQgYE5GVF9SRUpFQ1RfSU5FVGAuCgpJJiMzOTtsbCBhbHNvIGtlZXAgaW4gbWluZCByZWxhdGVkIG9wdGlvbnMgbGlrZSBgTkZUX1hGUk1gIGZvciB0cmFuc3BvcnQgbGF5ZXIgc2VjdXJpdHkgYW5kIGVuY2Fwc3VsYXRpb24sIGFuZCB0aGUgYE5GVF9DT05OTElNSVRgIG1vZHVsZSBmb3IgY29ubmVjdGlvbiBsaW1pdGluZywgc2hvdWxkIEkgbmVlZCB0aGVtLiBXZSBjYW4mIzM5O3QgZm9yZ2V0IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHBpZWNlLCBgTkZfQ09OTlRSQUNLYC4gVGhlbiwgdGhlcmUmIzM5O3MgdGhlIG1vcmUgZ2VuZXJhbCBuZXR3b3JraW5nIG9wdGlvbnMgbGlrZSBgTkVUX0lQSVBgIGFuZCBgSVBWNl9UVU5ORUxgIHRvIGNvbnNpZGVyLgoKTm93LCBhIGJpdCBvZiBhIHNhbml0eSBjaGVjayBpcyBuZWVkZWQgb24gdGhpcyBsYXN0IG9uZSDigJMgYE5FVF9EU0FgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gcHJldHR5IHN1cmUgaXQgZGVwZW5kcyBvbiBhIGZldyB0aGluZ3MuIEJlc3QgdG8gZW5zdXJlIGFsbCB0aGUgcHJlcmVxdWlzaXRlcyBhcmUgbWV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0RTQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kc2EvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL0tjb25maWctMi1cbm5ldC9kc2EvS2NvbmZpZzozOm1lbnVjb25maWcgTkVUX0RTQVxubmV0L2RzYS9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnPTE3PWlmIE5FVF9EU0Fcbi0tXG5uZXQvZHNhL0tjb25maWctMjAtXG5uZXQvZHNhL0tjb25maWc6MjE6Y29uZmlnIE5FVF9EU0FfVEFHX05PTkVcbm5ldC9kc2EvS2NvbmZpZy0yMi1cdHRyaXN0YXRlIFwmIzM0O05vLW9wIHRhZyBkcml2ZXJcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMjYtXG5uZXQvZHNhL0tjb25maWc6Mjc6Y29uZmlnIE5FVF9EU0FfVEFHX0FSOTMzMVxubmV0L2RzYS9LY29uZmlnLTI4LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgQXRoZXJvcyBBUjkzMzEgU29DIHdpdGggYnVpbHQtaW4gc3dpdGNoXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTMyLVxubmV0L2RzYS9LY29uZmlnOjMzOmNvbmZpZyBORVRfRFNBX1RBR19CUkNNX0NPTU1PTlxubmV0L2RzYS9LY29uZmlnLTM0LVx0dHJpc3RhdGVcbi0tXG5uZXQvZHNhL0tjb25maWctMzYtXG5uZXQvZHNhL0tjb25maWc6Mzc6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01cbm5ldC9kc2EvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIEJyb2FkY29tIHN3aXRjaGVzIHVzaW5nIGluLWZyYW1lIGhlYWRlcnNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctNDMtXG5uZXQvZHNhL0tjb25maWc6NDQ6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fTEVHQUNZXG5uZXQvZHNhL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBCQ002M3h4IGxlZ2FjeSBzd2l0Y2hlcyB1c2luZyBpbi1mcmFtZSBoZWFkZXJzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTUzLVxubmV0L2RzYS9LY29uZmlnOjU0OmNvbmZpZyBORVRfRFNBX1RBR19CUkNNX0xFR0FDWV9GQ1Ncbm5ldC9kc2EvS2NvbmZpZy01NS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIEJDTTUzeHggbGVnYWN5IHN3aXRjaGVzIHVzaW5nIGluLWZyYW1lIGhlYWRlcnNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctNjMtXG5uZXQvZHNhL0tjb25maWc6NjQ6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fUFJFUEVORFxubmV0L2RzYS9LY29uZmlnLTY1LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgQnJvYWRjb20gc3dpdGNoZXMgdXNpbmcgcHJlcGVuZGVkIGhlYWRlcnNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctNzEtXG5uZXQvZHNhL0tjb25maWc6NzI6Y29uZmlnIE5FVF9EU0FfVEFHX0hFTExDUkVFS1xubmV0L2RzYS9LY29uZmlnLTczLVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgSGlyc2NobWFubiBIZWxsY3JlZWsgVFNOIHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTc3LVxubmV0L2RzYS9LY29uZmlnOjc4OmNvbmZpZyBORVRfRFNBX1RBR19HU1dJUFxubmV0L2RzYS9LY29uZmlnLTc5LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTGFudGlxIC8gSW50ZWwgR1NXSVAgc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctODMtXG5uZXQvZHNhL0tjb25maWc6ODQ6Y29uZmlnIE5FVF9EU0FfVEFHX0RTQV9DT01NT05cbm5ldC9kc2EvS2NvbmZpZy04NS1cdHRyaXN0YXRlXG5uZXQvZHNhL0tjb25maWctODYtXG5uZXQvZHNhL0tjb25maWc6ODc6Y29uZmlnIE5FVF9EU0FfVEFHX0RTQVxubmV0L2RzYS9LY29uZmlnLTg4LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWFydmVsbCBzd2l0Y2hlcyB1c2luZyBEU0EgaGVhZGVyc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy05My1cbm5ldC9kc2EvS2NvbmZpZzo5NDpjb25maWcgTkVUX0RTQV9UQUdfRURTQVxubmV0L2RzYS9LY29uZmlnLTk1LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWFydmVsbCBzd2l0Y2hlcyB1c2luZyBFdGhlclR5cGUgRFNBIGhlYWRlcnNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTAwLVxubmV0L2RzYS9LY29uZmlnOjEwMTpjb25maWcgTkVUX0RTQV9UQUdfTVRLXG5uZXQvZHNhL0tjb25maWctMTAyLVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWVkaWF0ZWsgc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTA2LVxubmV0L2RzYS9LY29uZmlnOjEwNzpjb25maWcgTkVUX0RTQV9UQUdfTVhMXzg2MlhYXG5uZXQvZHNhL0tjb25maWctMTA4LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWF4TGluZWFyIE14TDg2Mnh4IHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTExMy1cbm5ldC9kc2EvS2NvbmZpZzoxMTQ6Y29uZmlnIE5FVF9EU0FfVEFHX01YTF9HU1cxWFhcbm5ldC9kc2EvS2NvbmZpZy0xMTUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgR1NXMXh4IHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTEyMS1cbm5ldC9kc2EvS2NvbmZpZzoxMjI6Y29uZmlnIE5FVF9EU0FfVEFHX0tTWlxubmV0L2RzYS9LY29uZmlnLTEyMy1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE1pY3JvY2hpcCA4Nzk1LzkzN3gvOTQ3Ny85ODkzIGZhbWlsaWVzIG9mIHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTEyNy1cbm5ldC9kc2EvS2NvbmZpZzoxMjg6Y29uZmlnIE5FVF9EU0FfVEFHX05FVENcbm5ldC9kc2EvS2NvbmZpZy0xMjktXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBOWFAgTkVUQyBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xMzctXG5uZXQvZHNhL0tjb25maWc6MTM4OmNvbmZpZyBORVRfRFNBX1RBR19PQ0VMT1Rcbm5ldC9kc2EvS2NvbmZpZy0xMzktXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBPY2Vsb3QgZmFtaWx5IG9mIHN3aXRjaGVzLCB1c2luZyBOUEkgcG9ydFwmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xNDgtXG5uZXQvZHNhL0tjb25maWc6MTQ5OmNvbmZpZyBORVRfRFNBX1RBR19PQ0VMT1RfODAyMVFcbm5ldC9kc2EvS2NvbmZpZy0xNTAtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBPY2Vsb3QgZmFtaWx5IG9mIHN3aXRjaGVzLCB1c2luZyBWTEFOXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE1OC1cbm5ldC9kc2EvS2NvbmZpZzoxNTk6Y29uZmlnIE5FVF9EU0FfVEFHX1FDQVxubmV0L2RzYS9LY29uZmlnLTE2MC1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIFF1YWxjb21tIEF0aGVyb3MgUUNBOEsgc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTY0LVxubmV0L2RzYS9LY29uZmlnOjE2NTpjb25maWcgTkVUX0RTQV9UQUdfUlRMNF9BXG5uZXQvZHNhL0tjb25maWctMTY2LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgUmVhbHRlayA0IGJ5dGUgcHJvdG9jb2wgQSB0YWdzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE3MS1cbm5ldC9kc2EvS2NvbmZpZzoxNzI6Y29uZmlnIE5FVF9EU0FfVEFHX1JUTDhfNFxubmV0L2RzYS9LY29uZmlnLTE3My1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIFJlYWx0ZWsgOCBieXRlIHByb3RvY29sIDQgdGFnc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xNzctXG5uZXQvZHNhL0tjb25maWc6MTc4OmNvbmZpZyBORVRfRFNBX1RBR19SWk4xX0E1UFNXXG5uZXQvZHNhL0tjb25maWctMTc5LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgUmVuZXNhcyBSWi9OMSBBNVBTVyBzd2l0Y2hcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTg0LVxubmV0L2RzYS9LY29uZmlnOjE4NTpjb25maWcgTkVUX0RTQV9UQUdfTEFOOTMwM1xubmV0L2RzYS9LY29uZmlnLTE4Ni1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIFNNU0MvTWljcm9jaGlwIExBTjkzMDMgZmFtaWx5IG9mIHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE5MC1cbm5ldC9kc2EvS2NvbmZpZzoxOTE6Y29uZmlnIE5FVF9EU0FfVEFHX1NKQTExMDVcbm5ldC9kc2EvS2NvbmZpZy0xOTItXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBOWFAgU0pBMTEwNSBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xOTktXG5uZXQvZHNhL0tjb25maWc6MjAwOmNvbmZpZyBORVRfRFNBX1RBR19UUkFJTEVSXG5uZXQvZHNhL0tjb25maWctMjAxLVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3Igc3dpdGNoZXMgdXNpbmcgYSB0cmFpbGVyIHRhZ1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0yMDUtXG5uZXQvZHNhL0tjb25maWc6MjA2OmNvbmZpZyBORVRfRFNBX1RBR19WU0M3M1hYXzgwMjFRXG5uZXQvZHNhL0tjb25maWctMjA3LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWljcm9jaGlwL1ZpdGVzc2UgVlNDNzN4eCBmYW1pbHkgb2Ygc3dpdGNoZXMsIHVzaW5nIFZMQU5cJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMjExLVxubmV0L2RzYS9LY29uZmlnOjIxMjpjb25maWcgTkVUX0RTQV9UQUdfWFJTNzAwWFxubmV0L2RzYS9LY29uZmlnLTIxMy1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIFhSUzcwMHggc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMjE3LVxubmV0L2RzYS9LY29uZmlnOjIxODpjb25maWcgTkVUX0RTQV9UQUdfWVQ5MjFYXG5uZXQvZHNhL0tjb25maWctMjE5LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDgyOAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgYW5kIGEgRm9jdXNlZCBSZXZpZXcqKgoKT2theSwgYWZ0ZXIgdGhpbmtpbmcgYWJvdXQgdGhpcywgSSYjMzk7dmUgY29uY2x1ZGVkIHRoYXQgYE5FVF9EU0FgIGlzIHN1ZmZpY2llbnQgZm9yIG5vdy4gSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGUgbmVlZCB0byBnbyBmdXJ0aGVyIGRvd24gdGhhdCBwYXRoLgoKTGV0JiMzOTtzIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgcmVnYXJkaW5nIHRob3NlIGZvY3VzIHN5bWJvbHM6IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLCBgbmZ0X3JlamVjdF9pcHY0X2V2YWxgLCBgbmZ0X3JlamVjdF9pcHY2X2V2YWxgLCBgbmZ0X3JlamVjdF9pbmV0X2V2YWxgLCBgbmZ0X21ldGFfZ2V0X2V2YWxgLCBgbmZ0X3J0X2dldF9ldmFsYCwgYG5mdF94ZnJtX2dldF9ldmFsYCwgYG5mdF9jb25ubGltaXRfZXZhbGAsIGFuZCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBUaGVzZSBhcmUgdGhlIGtleSBhcmVhcyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZC4KCkhvbGQgb24gYSBtaW51dGUsIEkmIzM5O20ganVzdCByZWNhbGxpbmcgdGhhdCBgbmZ0X3JlamVjdF9pcHY0X2V2YWxgIGlzLCBpbiBmYWN0LCBzdGF0aWNhbGx5IGRlZmluZWQuIExldCBtZSBqdXN0IG9wZW4gdXAgYG5mdF9yZWplY3RfaXB2NC5jYCBhbmQgbWFrZSBzdXJlIG15IGluc3RpbmN0cyBhcmUgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3JlamVjdF9pcHY0X2V2YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jLTE4LVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jOjE5OnN0YXRpYyB2b2lkIG5mdF9yZWplY3RfaXB2NF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjQuYy0yMC1cdFx0XHRcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jPTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9yZWplY3RfaXB2NF9vcHMgPSB7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jLTQzLVx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3JlamVjdCkpLFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jOjQ0Olx0LmV2YWxcdFx0PSBuZnRfcmVqZWN0X2lwdjRfZXZhbCxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjQuYy00NS1cdC5pbml0XHRcdD0gbmZ0X3JlamVjdF9pbml0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTQ4OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgbmV0d29yayBmdW5jdGlvbnMuIFRoZSBpbml0aWFsIHRob3VnaHQgd2FzLCBldmVuIGlmIHNvbWV0aGluZyYjMzk7cyBzdGF0aWMsIHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGZpbmQgaXQgaWYgaXQgaXNuJiMzOTt0IGlubGluZWQsIHNvIGl0JiMzOTtzICpwb3RlbnRpYWxseSogdGFyZ2V0YWJsZS4gQnV0IGxldCYjMzk7cyByZWZpbmUgdGhpcyBhbmFseXNpcy4gCgpBaGEhIGBuZl9zZW5kX3Jlc2V0YCBhbmQgYG5mX3NlbmRfcmVzZXQ2YCBhcmUgYm90aCAqZXhwb3J0ZWQqIGFuZCAqbm9uLXN0YXRpYyouIEFuZCBzaW1pbGFybHksIGBuZl9zZW5kX3VucmVhY2hgIGFuZCBgbmZfc2VuZF91bnJlYWNoNmAgYXJlIGFsc28gZXhwb3J0ZWQuIFNvIHRoYXQmIzM5O3MgZ29vZCEgVGhhdCBtYWtlcyB0aGVtIGJldHRlciBjYW5kaWRhdGVzLCBhbmQgd29ydGggZm9jdXNpbmcgb24uIExldCYjMzk7cyBtYWtlIGEgbm90ZSBvZiB0aG9zZSBmb3VyIGFzIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciBmdXp6aW5nLgoKTm93LCB3aGF0IGFib3V0IHRoZSBgbmZ0YCBzdWJzeXN0ZW0/IExldCYjMzk7cyBjaGVjayBgbmZ0X21ldGFfZ2V0X2V2YWxgLi4uIHllcCwgZXhwb3J0ZWQuIFRoYXQgbG9va3MgcHJvbWlzaW5nLiBBbmQgYG5mdF9ydF9nZXRfZXZhbGAgaXMgYWxzbyBleHBvcnRlZC4gT2theS4gV2hhdCBhYm91dCBgbmZ0X3hmcm1fZ2V0X2V2YWxgPyBBaCwgaXQmIzM5O3Mgc3RhdGljLCBkYW1uLiBCdXQsIGhvbGQgb24uLi4gYG5mdF94ZnJtX2dldF9ldmFsX291dGAgaXMgYWxzbyBzdGF0aWMuIExldCYjMzk7cyBiYWNrdHJhY2ssIGl0JiMzOTtzICpzdGF0aWMqIGJ1dCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQ/IEkgc2VlIGBuZnRfeGZybV9nZXRfb3BzYCBpcyByZWdpc3RlcmVkLCBzbyBtYXliZSB0aGF0JiMzOTtzIGEgYmV0dGVyIHN0YXJ0aW5nIHBvaW50LgoKQW5kIGZpbmFsbHksIGxldCYjMzk7cyBsb29rIGF0IGBuZnRfY29ubmxpbWl0X2V2YWxgLCB0aGF0IG9uZSBpcyBzdGF0aWMuIEJ1dCwgd2FpdCwgYG5mX2Nvbm5jb3VudF9hZGRgIGlzIGV4cG9ydGVkLiBPa2F5LCBnb29kLiBTbyB0aGUgcGljdHVyZSYjMzk7cyBiZWNvbWluZyBjbGVhcmVyLiAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubmNvdW50X2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz0xMzA9c3RhdGljIGJvb2wgZ2V0X2N0X29yX3R1cGxlX2Zyb21fc2tiKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTE2OC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6MTY5OnN0YXRpYyBpbnQgX19uZl9jb25uY291bnRfYWRkKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMTcwLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0yNzctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jOjI3ODppbnQgbmZfY29ubmNvdW50X2FkZF9za2Ioc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0yNzktXHRcdFx0IGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0yODYtXHRzcGluX2xvY2tfYmgoXHUwMDI2bGlzdC1cdTAwM2VsaXN0X2xvY2spO1xubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYzoyODc6XHRyZXQgPSBfX25mX2Nvbm5jb3VudF9hZGQobmV0LCBza2IsIGwzbnVtLCBsaXN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMjg4LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bGlzdC1cdTAwM2VsaXN0X2xvY2spO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMjkxLX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6MjkyOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm5jb3VudF9hZGRfc2tiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMjkzLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM9NDAzPWluc2VydF90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTQzNy1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6NDM4Olx0XHRcdHJldCA9IG5mX2Nvbm5jb3VudF9hZGRfc2tiKG5ldCwgc2tiLCBsM251bSwgXHUwMDI2cmJjb25uLVx1MDAzZWxpc3QpO1xubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy00MzktXHRcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FRVhJU1QpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz01MzM9Y291bnRfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy01ODItXHQvKiBzYW1lIHNvdXJjZSBuZXR3b3JrIC1cdTAwM2UgYmUgY291bnRlZCEgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6NTgzOlx0cmV0ID0gX19uZl9jb25uY291bnRfYWRkKG5ldCwgc2tiLCBsM251bSwgXHUwMDI2cmJjb25uLVx1MDAzZWxpc3QpO1xubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy01ODQtXHRzcGluX3VubG9ja19iaChcdTAwMjZyYmNvbm4tXHUwMDNlbGlzdC5saXN0X2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjc5NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgZm9jdXNpbmcgb24gdGhlIGV4cG9ydGVkIHN5bWJvbHM6CgoqKlJlZmxlY3Rpbmcgb24gS2VybmVsIE1vZHVsZSBFeHBvcnRzKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYG5mX2Nvbm5jb3VudF9hZGRfc2tiYCBhbmQgYG5mX2Nvbm5jb3VudF9jb3VudGAgYXJlIGJvdGggYmVpbmcgZXhwb3J0ZWQuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYSBmZXcgdGhpbmdzLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGtlcm5lbCBtb2R1bGUgZGVzaWduIGFuZCBuZXRmaWx0ZXIuCgpGaXJzdCwgdGhlc2Ugc3ltYm9scyBhcmUgY2xlYXJseSBpbnRlbmRlZCB0byBiZSAqdXNlZCogYnkgb3RoZXIgbW9kdWxlcy4gVGhleSYjMzk7cmUgbm90IGludGVybmFsIGZ1bmN0aW9uczsgdGhleSYjMzk7cmUgbWVhbnQgZm9yIGludGVyYWN0aW9uLiBUaGUgbmFtaW5nIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZyBvciBjb25uZWN0aW9uIGNvdW50aW5nIOKAkyBsaWtlbHkgcGFydCBvZiBzb21lIHNvcnQgb2YgbmV0d29yayBmaXJld2FsbCBvciBtb25pdG9yaW5nIGZ1bmN0aW9uYWxpdHkuIFRoZSAmIzM0O25mJiMzNDsgcHJlZml4IGlzIGEgZGVhZCBnaXZlYXdheSBmb3IgbmV0ZmlsdGVyLgoKSSYjMzk7bSBhc3N1bWluZyBgbmZfY29ubmNvdW50X2FkZF9za2JgIGxpa2VseSBoYW5kbGVzIGFkZGluZyBvciB1cGRhdGluZyBpbmZvcm1hdGlvbiBhYm91dCBhIG5ldHdvcmsgcGFja2V0IChTS0IpIHJlbGF0ZWQgdG8gYSBwYXJ0aWN1bGFyIGNvbm5lY3Rpb24uIE1heWJlIHRoaXMgaW52b2x2ZXMgaW5jcmVtZW50aW5nIGNvdW50ZXJzIG9yIHN0b3JpbmcgY29ubmVjdGlvbiBkZXRhaWxzLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggbmV0ZmlsdGVyIGhvb2tzLCBpdCBjb3VsZCBiZSBjYWxsZWQgd2l0aGluIGFuIE5GIGhvb2sgZnVuY3Rpb24uCgpgbmZfY29ubmNvdW50X2NvdW50YCwgb24gdGhlIG90aGVyIGhhbmQsIGxpa2VseSBwcm92aWRlcyBhIHdheSB0byByZXRyaWV2ZSBvciBleHBvc2UgY29ubmVjdGlvbiBjb3VudCBkYXRhLiBDb3VsZCBiZSBmb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9yIHRvIGR5bmFtaWNhbGx5IGFkanVzdCBiZWhhdmlvciBiYXNlZCBvbiBjb25uZWN0aW9uIGxvYWQuIEl0IGNvdWxkIGJlIHVzZWQgdG8gZ2F0aGVyIHN0YXRpc3RpY3Mgb24gYSBjb25uZWN0aW9uLCBwZXJoYXBzIHRvIHRyYWNrIG51bWJlciBvZiBwYWNrZXRzIGFuZCBieXRlcy4KClRoZSBmYWN0IHRoYXQgdGhlc2UgYXJlIGV4cG9ydGVkIGltcGxpZXMgdGhhdCB0aGVyZSBpcyBhIHdlbGwtZGVmaW5lZCBpbnRlcmZhY2UgZm9yIGludGVyYWN0aW5nIHdpdGggdGhpcyAmIzM0O2Nvbm5jb3VudCYjMzQ7IGZ1bmN0aW9uYWxpdHkuIE5vdywgbXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIHJldmlldyB0aGUgYXNzb2NpYXRlZCBoZWFkZXIgZmlsZXMgYW5kIHNvdXJjZSBjb2RlIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlaXIgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQsIGNyaXRpY2FsbHksIHRoZWlyIGludGVuZGVkIHVzYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgb3BlcmF0ZSBvbiBhbmQgdGhlIHBvc3NpYmxlIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBjb25jZXJucyBpbnZvbHZlZC4gQXJlIHRoZXNlIGZ1bmN0aW9ucyB0aHJlYWQtc2FmZT8gRG8gdGhleSB1dGlsaXplIGFueSBpbnRlcm5hbCBtdXRleGVzPwoKVGhpcyBleHBvcnQgc3VnZ2VzdHMgdGhhdCB3aG9ldmVyIGRldmVsb3BlZCB0aGlzIG1vZHVsZSB3YXMgdGhpbmtpbmcgYWJvdXQgbW9kdWxhcml0eS4gVGhleSByZWNvZ25pemVkIHRoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBvciBldmVuIG90aGVyIG1vZHVsZXMgbWlnaHQgbmVlZCB0byBhY2Nlc3MgYW5kIHV0aWxpemUgdGhpcyBjb25uZWN0aW9uIGNvdW50aW5nIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBnb29kIHRoaW5nIOKAkyBnb29kIGNvZGUgZGVzaWduIHByb21vdGVzIHJldXNlIGFuZCBjb2xsYWJvcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGV5JiMzOTtyZSBkZXNpZ25lZCBmb3IgbW9kdWxhcml0eS4KClNvLCBpbiBzdW1tYXJ5OiBJJiMzOTttIHNlZWluZyBhIGNvbm5lY3Rpb24gY291bnQgbW9kdWxlIG9yIGZlYXR1cmUuIEkgbmVlZCB0byByZXNlYXJjaCBleGFjdGx5IGhvdyB0aG9zZSBtb2R1bGVzIGFyZSBkZXNpZ25lZCB0byBpbnRlZ3JhdGUgd2l0aCB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubmNvdW50X2NvdW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jPTU5NT1zdGF0aWMgdm9pZCB0cmVlX2djX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy02NjUtICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jOjY2Njp1bnNpZ25lZCBpbnQgbmZfY29ubmNvdW50X2NvdW50X3NrYihzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTY2Ny1cdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNjc0LX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6Njc1OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm5jb3VudF9jb3VudF9za2IpO1xubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy02NzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NTIyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQXNzZXNzbWVudCBvZiBLZXkgTmV0ZmlsdGVyIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0aGlua2luZyBhYm91dCB0aGUgY3JpdGljYWwgc3ltYm9scyB0byBmb2N1cyBvbiB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEkgc3RhcnRlZCBieSB6ZXJvaW5nIGluIG9uIGBuZl9jb25uY291bnRfYWRkX3NrYmAgYW5kIGBuZl9jb25uY291bnRfY291bnRfc2tiYCBhcyBnb29kIGluaXRpYWwgY2FuZGlkYXRlcy4gTm93LCBJJiMzOTt2ZSBleHBhbmRlZCB0aGUgc2NvcGUgYSBiaXQuCgpJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgYG5mdF9mbG93X3JvdXRlYCBiZWNhdXNlIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCBsb29rcyBpbXBvcnRhbnQuIEFuZCwgc2ltaWxhcmx5LCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBhbmQgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCBoYXZlIGNhdWdodCBteSBhdHRlbnRpb24gZm9yIGJlaW5nIGV4cG9ydGVkLgoKVGhlcmVmb3JlLCBteSBjdXJyZW50IHdvcmtpbmcgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGluY2x1ZGVzOgoKKiAgIGBuZnRfZmxvd19yb3V0ZWAKKiAgIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgCiogICBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VgCiogICBgbmZfc2VuZF9yZXNldGAKKiAgIGBuZl9zZW5kX3Jlc2V0NmAKKiAgIGBuZl9zZW5kX3VucmVhY2hgCiogICBgbmZfc2VuZF91bnJlYWNoNmAKKiAgIGBuZnRfbWV0YV9nZXRfZXZhbGAKKiAgIGBuZnRfcnRfZ2V0X2V2YWxgCiogICBgbmZfY29ubmNvdW50X2FkZF9za2JgCiogICBgbmZfY29ubmNvdW50X2NvdW50X3NrYmAKKiAgIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAKCkkgZG91YmxlLWNoZWNrZWQgZWFjaCBvbmUgdG8gYmUgc3VyZSB0aGV5IHdlcmUgZXhwb3J0ZWQsIGp1c3QgdG8gY29uZmlybSBteSBjdXJyZW50IHVuZGVyc3RhbmRpbmcuIFNvLCBgbmZ0X2Zsb3dfcm91dGVgIGFuZCB0aGUgYGRldl9maWxsX2ZvcndhcmRfcGF0aCpgIGZ1bmN0aW9ucyBhcmUgYWxsIGV4cG9ydGVkLiBBbHNvIHRoZSBgbmZfc2VuZF8qYCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLCBhbG9uZyB3aXRoIHRoZSBgbmZ0XypfZ2V0X2V2YWxgIGZ1bmN0aW9ucywgYW5kIG9mIGNvdXJzZSB0aGUgYG5mX2Nvbm5jb3VudF8qYCBmdW5jdGlvbnMuCgpJIGRpZCBydW4gaW50byBhIHNtYWxsIGFub21hbHkgd2l0aCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBXaGlsZSBpdCAqaXNuJiMzOTt0KiBleHBvcnRlZCwgaXQmIzM5O3Mgbm9uLXN0YXRpYyBhbmQgZGVmaW5lZCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYCwgd2hpY2ggbWFrZXMgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24sIGRlc3BpdGUgYmVpbmcgbm9uLWV4cG9ydGVkLgoKV2FpdC4uLiBzb21ldGhpbmcgc3RpbGwgc2VlbXMgYSBsaXR0bGUgb2ZmLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGBuZl9zZW5kX3VucmVhY2hgIGlzIGV4cG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTFxcKG5mX3NlbmRfdW5yZWFjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYz0zNDg9dm9pZCBuZl9zZW5kX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IGNvZGUsIGludCBob29rKVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTM2OC19XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzozNjk6RVhQT1JUX1NZTUJPTF9HUEwobmZfc2VuZF91bnJlYWNoKTtcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTM3MC1cbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYz00Mzg9dm9pZCBuZl9zZW5kX3VucmVhY2g2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYl9pbixcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy00NTEtfVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmM6NDUyOkVYUE9SVF9TWU1CT0xfR1BMKG5mX3NlbmRfdW5yZWFjaDYpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtNDUzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODgzNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIEkmIzM5O20gdGhpbmtpbmcgdGhlc2UgdGhpbmdzIG15c2VsZjoKCioqRXhwb3J0aW5nIE5GVHMgYW5kIEV2YWx1YXRpb24gUmV0cmlldmFsKioKCkFscmlnaHQsIHNvIHRoZSB0b3BpYyBhdCBoYW5kIGlzIHRoZSBleHBvcnQgcHJvY2VzcywgYW5kLCB5ZXMsIEkmIzM5O20gY29uZmlybWluZyB0aGF0IHRoZSByZWxldmFudCBpdGVtcyBhcmUgaW5kZWVkIGJlaW5nIGV4cG9ydGVkLiBOb3csIG15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBgbmZ0X3J0X2dldF9ldmFsYCBmdW5jdGlvbi4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIHJldHJpZXZpbmcgdGhlIGV2YWx1YXRpb24gcmVzdWx0cyByZXNpZGVzLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyB3b3JrcyBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhlIGV4cG9ydCBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHZhbHVlcyBhcmUgYWNxdWlyZWQgYW5kIGhvdyB0aGF0IGFjcXVpc2l0aW9uIHdvcmtzIGluIHJlbGF0aW9uIHRvIGhvdyBpdCBpcyBleHBvcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTFxcKG5mdF9ydF9nZXRfZXZhbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MDYxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSG1tLCBgbmZ0X3J0X2dldF9ldmFsYCBJcyBNaXNzaW5nPyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyBqdXN0IGRpZ2dpbmcgaW50byB0aGUga2VybmVsJiMzOTtzIG5ldGZpbHRlciBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBydW50aW1lIGV2YWx1YXRpb24gZnJhbWV3b3JrLiBJIHdhcyBleHBlY3RpbmcgYG5mdF9ydF9nZXRfZXZhbGAgdG8gYmUgYXZhaWxhYmxlLiBJIG5lZWQgaXQgZm9yIFgsIGFuZCBJIHRob3VnaHQgdGhhdCB3YXMgYSBjb3JlIHBhcnQgb2YgdGhlIGluZnJhc3RydWN0dXJlLiBCdXQuLi4gaXQmIzM5O3Mgbm90IGV4cG9ydGVkLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IHByb2JsZW1hdGljLiBOb3cgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgd2h5LiBJcyBpdCBhIGNvbXBpbGUtdGltZSBvcHRpb24gSSBtaXNzZWQ/IElzIGl0IGhpZGRlbiBiZWhpbmQgc29tZSBtYWNybyB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQ/IE9yIHBlcmhhcHMgaXQmIzM5O3MgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBmdW5jdGlvbiB3aXRoIGEgc2ltaWxhciBuYW1lLCBzb21ldGhpbmcgaW50ZXJuYWw/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIFRoaXMgd2FzbiYjMzk7dCBhbnRpY2lwYXRlZCwgYW5kIGl0IHRocm93cyBhIGJpdCBvZiBhIHdyZW5jaCBpbnRvIG15IGN1cnJlbnQgcGxhbi4gVGltZSB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIGhlYWRlcnMgYWdhaW4sIGFuZCBtYXliZSBjcm9zcy1yZWZlcmVuY2UgdGhlIGNvbW1pdCBsb2dzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfcnRfZ2V0X2V2YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9ydC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3J0LmM9MjI9c3RhdGljIHUxNiBnZXRfdGNwbXNzKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpza2Jkc3QpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcnQuYy01My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmM6NTQ6dm9pZCBuZnRfcnRfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZnRfcnQuYy01NS1cdFx0ICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcnQuYz0xOTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3J0X2dldF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcnQuYy0xOTUtXHQuc2l6ZVx0XHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcnQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmM6MTk2Olx0LmV2YWxcdFx0PSBuZnRfcnRfZ2V0X2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9ydC5jLTE5Ny1cdC5pbml0XHRcdD0gbmZ0X3J0X2dldF9pbml0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTU4MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbmZ0X21ldGFfZ2V0X2V2YWxgJiMzOTtzIFZpc2liaWxpdHkgZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSB0YXJnZXQgZnVuY3Rpb24gaXNuJiMzOTt0IHN0YXRpYywgYnV0IGl0IGFsc28gaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYWN0dWFsbHkgYSByZWxpZWYuIFdoaWxlIHN0YXRpYyBmdW5jdGlvbnMgY2FuIHNvbWV0aW1lcyBwcmVzZW50IGEgY2hhbGxlbmdlIGluIGZ1enppbmcgc2NlbmFyaW9zLCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub3QqIHN0YXRpYyBtZWFucyBpdCYjMzk7cyBhY2Nlc3NpYmxlLiBTeXprYWxsZXIsIGluIGl0cyBjdXJyZW50IHN0YXRlLCBjYW4gYWJzb2x1dGVseSBoYW5kbGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHNvIG5vIG5lZWQgZm9yIHdvcmthcm91bmRzIHRoZXJlLiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBzeW1ib2wgdGFibGUgY29udGFpbnMgdGhlIGZ1bmN0aW9uLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBmb2N1cyBzcGVjaWZpY2FsbHkgb24gYG5mdF9tZXRhX2dldF9ldmFsYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgZm9yIGV4cGxvaXRhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgaW52ZXN0aWdhdGlvbiByZWFsbHkgYmVnaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTFxcKG5mdF9tZXRhX2dldF9ldmFsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz0zNjQ9dm9pZCBuZnRfbWV0YV9nZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQ3Mi19XG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDczOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9tZXRhX2dldF9ldmFsKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00NzQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTM0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKlZlcmlmeWluZyB0aGUgRXhwb3J0IE9wZXJhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3ZlIGVzdGFibGlzaGVkIHRoYXQgdGhlIGRhdGEgaXMgKmV4cG9ydGVkKi4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBhc3N1bXB0aW9uIHdlJiMzOTtyZSBzdGFydGluZyBmcm9tLiBOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBzZWUgaG93IGV4YWN0bHkgdGhhdCYjMzk7cyB3b3JraW5nLCB3aGF0JiMzOTtzIGJlaGluZCB0aGUgc2NlbmVzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24gY2FsbDogYG5mdF94ZnJtX2dldF9ldmFsYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrIGhhbmRsZXMgdGhlIHRyYW5zZm9ybWF0aW9uIHJldHJpZXZhbCBhbmQgZXZhbHVhdGlvbiBpbiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dC4gSSBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIGludGVyYWN0aW9ucyBoYXBwZW5pbmcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3hmcm1fZ2V0X2V2YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfeGZybS5jPTEyMD1zdGF0aWMgdm9pZCBuZnRfeGZybV9zdGF0ZV9nZXRfa2V5KGNvbnN0IHN0cnVjdCBuZnRfeGZybSAqcHJpdixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTYwLVxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjE2MTpzdGF0aWMgdm9pZCBuZnRfeGZybV9nZXRfZXZhbF9pbihjb25zdCBzdHJ1Y3QgbmZ0X3hmcm0gKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTYyLVx0XHRcdFx0ICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTc2LVxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjE3NzpzdGF0aWMgdm9pZCBuZnRfeGZybV9nZXRfZXZhbF9vdXQoY29uc3Qgc3RydWN0IG5mdF94ZnJtICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTE3OC1cdFx0XHRcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMDEtXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MjAyOnN0YXRpYyB2b2lkIG5mdF94ZnJtX2dldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMDMtXHRcdFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMDktXHRjYXNlIFhGUk1fUE9MSUNZX0lOOlxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjIxMDpcdFx0bmZ0X3hmcm1fZ2V0X2V2YWxfaW4ocHJpdiwgcmVncywgcGt0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMTEtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTIxMi1cdGNhc2UgWEZSTV9QT0xJQ1lfT1VUOlxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjIxMzpcdFx0bmZ0X3hmcm1fZ2V0X2V2YWxfb3V0KHByaXYsIHJlZ3MsIHBrdCk7XG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMjE0LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM9MjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF94ZnJtX2dldF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTI3Mi1cdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF94ZnJtKSksXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MjczOlx0LmV2YWxcdFx0PSBuZnRfeGZybV9nZXRfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yNzQtXHQuaW5pdFx0XHQ9IG5mdF94ZnJtX2dldF9pbml0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDczMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgYSBQb3RlbnRpYWwgU3l6a2FsbGVyIFRhcmdldCoqCgpSaWdodCwgdGhpcyBsb29rcyBwcmV0dHkgc3RhdGljLiBJIHNlZSBpdCwgcmVnaXN0ZXJlZCBpbiBgbmZ0X3hmcm1fZ2V0X29wc2AsIGFuZCB0aGF0IHBpcXVlcyBteSBpbnRlcmVzdC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm90KiBkeW5hbWljYWxseSBnZW5lcmF0ZWQgaW5jcmVhc2VzIHRoZSBjaGFuY2UgdGhhdCBzeXprYWxsZXIsIHRoZSBmdXp6ZXIsIGNvdWxkIHBvdGVudGlhbGx5IHRhcmdldCBpdCBkaXJlY3RseS4gSWYgaXQmIzM5O3Mgbm90IGlubGluZWQsIHRoZW4gaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSB0byBpbmNsdWRlIGFuZCBzZWUgd2hhdCBoYXBwZW5zLiBJJiMzOTttIHRoaW5raW5nIHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGZpbmQgYSB3YXkgaW4uCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIGludmVzdGlnYXRlIGBuZnRfY29ubmxpbWl0X2V2YWxgLiBJJiMzOTtsbCBjcm9zcy1yZWZlcmVuY2UgdGhlIGBuZnRfeGZybV9nZXRfb3BzYCB0byBkZXRlcm1pbmUgdGhlIHJlbGF0aW9uc2hpcCwgaWYgYW55LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfY29ubmxpbWl0X2V2YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYz0xNzY9c3RhdGljIHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgbmZ0X2Nvbm5saW1pdF9vYmpfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jLTE4My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jOjE4NDpzdGF0aWMgdm9pZCBuZnRfY29ubmxpbWl0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmMtMTg1LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmM9MjUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9jb25ubGltaXRfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jLTI1My1cdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9jb25ubGltaXQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jOjI1NDpcdC5ldmFsXHRcdD0gbmZ0X2Nvbm5saW1pdF9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmMtMjU1LVx0LmluaXRcdFx0PSBuZnRfY29ubmxpbWl0X2luaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMjYzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBTdGF0aWMgUmVhbGl0eTogUmVnaXN0ZXJlZCBhbmQgUmVhZHkqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHNvbWV0aGluZyYjMzk7cyAqc3RhdGljKi4gTm90IGR5bmFtaWMsIG5vdCBjaGFuZ2luZyDigJMgd2hpY2ggY291bGQgYmUgYSBnb29kIG9yIGJhZCB0aGluZywgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBCdXQgYWxzbywgaXQmIzM5O3MgKnJlZ2lzdGVyZWQqLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBiaXQuIFJlZ2lzdGVyZWQgaW1wbGllcyBpdCYjMzk7cyBrbm93biwgYWNjb3VudGVkIGZvciwgd2l0aGluIHRoZSBzeXN0ZW0uIFdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIGFuIHVua25vd24gdmFyaWFibGUgaGVyZSwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCByZWxpZWYuIE5vdywgd2hhdCYjMzk7cyByZWdpc3RlcmVkLCBhbmQgd2hhdCBkb2VzIHRoaXMgbWVhbiBmb3Igb3VyIGZsb3c/IFRpbWUgdG8gZGlnIGludG8gYG5mdF9mbG93X3JvdXRlYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCByZWdpc3RlcmVkIHN0YXR1cyBpbnRlcmFjdHMgd2l0aCB0aGUgcm91dGluZyBsb2dpYy4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoaXMgc3RhdGljIGJ1dCByZWdpc3RlcmVkIGFzcGVjdCBpbmZsdWVuY2VzIHRoZSBmbG93IHBhdGgsIG9yIGlzIHNpbXBseSBhIGRhdGEgcG9pbnQuIExldCYjMzk7cyBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwobmZ0X2Zsb3dfcm91dGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yNjA9aW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMTYtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzozMTc6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X2Zsb3dfcm91dGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTYxNgoJCQkJCQkJb3V0cHV0OiAzODUKCQkJCQkJCXRob3VnaHRzOiA1NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFByb3Bvc2VkIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlcmllcyBoYXMgYmVlbiBleHBvcnRlZCwgZ29vZC4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgZml4ZXMg4oCTIHNwZWNpZmljYWxseSwgbWVtb3J5IGxlYWsgcmVzb2x1dGlvbiBhbmQgcmVmaW5lZCBoYW5kbGluZyBvZiBgZHN0X2VudHJ5YCB3aXRoaW4gYHNrX2J1ZmZgIGFuZCBgbmV0X2RldmljZV9wYXRoYC4gSSYjMzk7dmUgbm90ZWQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIHN5bWJvbHMgdGFyZ2V0ZWQgZm9yIHJldmlldzogYG5mdF9mbG93X3JvdXRlYCwgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAsIGBuZl9zZW5kX3Jlc2V0YCwgYW5kIHNvIG9uLCBjb3ZlcmluZyB0aGUgdXN1YWwgc3VzcGVjdHMgaW4gTmV0ZmlsdGVyJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIHBhY2tldCBwYXRoLCBpbmNsdWRpbmcgZmxvdyBvZmZsb2FkLCBUQ1Agc3RhdGUgbWFuYWdlbWVudCwgYW5kIHJlamVjdC91bnJlYWNoYWJsZSBoYW5kbGluZy4KClRoZSBwYXRjaCYjMzk7cyBpbnRyb2R1Y3Rpb24gb2YgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCBmb3IgY29ycmVjdCBgZHN0YCByZWxlYXNlIGlzIGEgZGVmaW5pdGUgc2lnbiB0aGF0IHRoaXMgaXMgaW1wb3J0YW50LCBhcyBhcmUgdGhlIHVwZGF0ZXMgdG8gYHNrYl92YWxpZF9kc3RgIGNoZWNrcyBhY3Jvc3MgdGhlIG1vZHVsZXMuIFRoZXNlIGFyZSBjaGFuZ2VzIHRoYXQgdG91Y2ggcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHBhdGhzLiBUaGlzIGRlbWFuZHMgcmlnb3JvdXMgZnV6emluZyBhcyBwYXJ0IG9mIG91ciBhbmFseXNpcyBwbGFuLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IG15IGNvbmZpZ3VyYXRpb24gYXNzdW1wdGlvbnMuIEkgc2VlIHRoYXQgd2UgaGF2ZSBgTkZfVEFCTEVTYCwgYE5GX1RBQkxFU19JUFY0YCwgYE5GX1RBQkxFU19JUFY2YCwgYE5GX1RBQkxFU19JTkVUYCwgYE5GX0ZMT1dfVEFCTEVgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORlRfUkVKRUNUX0lQVjRgLCBgTkZUX1JFSkVDVF9JUFY2YCwgYE5GVF9SRUpFQ1RfSU5FVGAsIGBORlRfWEZSTWAsIGBORlRfQ09OTkxJTUlUYCwgYE5GX0NPTk5UUkFDS2AsIGBORVRfSVBJUGAsIGBJUFY2X1RVTk5FTGAsIGFuZCBgTkVUX0RTQWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGNvcnJlY3QuCgpGaXJzdCwgaXMgYE5GX0NPTk5DT1VOVGAgYWN0dWFsbHkgbmVlZGVkLCBvciBpcyBpdCBwdWxsZWQgaW4gdmlhIGEgZGVwZW5kZW5jeT8gQWgsIGl0IHNlZW1zIGBORlRfQ09OTkxJTUlUYCBzZWxlY3RzIGBORl9DT05OQ09VTlRgLCBzbyBqdXN0IGhhdmluZyBgTkZUX0NPTk5MSU1JVGAgaXMgc3VmZmljaWVudC4gVGhhdCBzaW1wbGlmaWVzIHRoZSBjb25maWd1cmF0aW9uLgoKTmV4dCwgSSYjMzk7bGwgY29uZmlybSB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgc2VlLiBgTkVUX0lQSVBgIGJ1aWxkcyBgbmV0L2lwdjQvaXBpcC5jYCwgc28gdGhhdCYjMzk7cyBjb3JyZWN0LiBTaW1pbGFybHksIGBJUFY2X1RVTk5FTGAgYnVpbGRzIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgLCBhbmQgYE5FVF9EU0FgIGJ1aWxkcyBgbmV0L2RzYS91c2VyLmNgLiBFeGNlbGxlbnQsIG15IGFzc3VtcHRpb25zIGFyZSB2YWxpZGF0ZWQuCgpJJiMzOTttIHNhdGlzZmllZCB3aXRoIHRoaXMgYW5hbHlzaXMuIEkgd2lsbCBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JUFY0JiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JUFY2JiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JTkVUJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORlRfUkVKRUNUX0lQVjQmIzM0OywKICAgICYjMzQ7TkZUX1JFSkVDVF9JUFY2JiMzNDssCiAgICAmIzM0O05GVF9SRUpFQ1RfSU5FVCYjMzQ7LAogICAgJiMzNDtORlRfWEZSTSYjMzQ7LAogICAgJiMzNDtORlRfQ09OTkxJTUlUJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtJUFY2X1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORVRfRFNBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGUmIzM0OywKICAgICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O2Rldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O25mX3NlbmRfcmVzZXQmIzM0OywKICAgICYjMzQ7bmZfc2VuZF9yZXNldDYmIzM0OywKICAgICYjMzQ7bmZfc2VuZF91bnJlYWNoJiMzNDssCiAgICAmIzM0O25mX3NlbmRfdW5yZWFjaDYmIzM0OywKICAgICYjMzQ7bmZ0X21ldGFfZ2V0X2V2YWwmIzM0OywKICAgICYjMzQ7bmZ0X3J0X2dldF9ldmFsJiMzNDssCiAgICAmIzM0O25mX2Nvbm5jb3VudF9hZGRfc2tiJiMzNDssCiAgICAmIzM0O25mX2Nvbm5jb3VudF9jb3VudF9za2ImIzM0OywKICAgICYjMzQ7bmZfY29ubnRyYWNrX3RjcF9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRvIGZpeCBtZW1vcnkgbGVha3MgYW5kIGltcHJvdmUgaGFuZGxpbmcgb2YgYGRzdF9lbnRyeWAgaW4gYHNrX2J1ZmZgIGFuZCBgbmV0X2RldmljZV9wYXRoYC4gSXQgaW50cm9kdWNlcyBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VgIHRvIHByb3Blcmx5IHJlbGVhc2UgYGRzdGAgZW50cmllcywgdXBkYXRlcyBgc2tiX3ZhbGlkX2RzdGAgY2hlY2tzIGluIG5ldGZpbHRlciByZWplY3QsIG1ldGEsIHJ0LCBhbmQgeGZybSBtb2R1bGVzLCBhbmQgbW9kaWZpZXMgY29ubnRyYWNrIFRDUCBzdGF0ZSBoYW5kbGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSVBWNCYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSVBWNiYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSU5FVCYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkZUX1JFSkVDVF9JUFY0JiMzNDssCiAgICAmIzM0O05GVF9SRUpFQ1RfSVBWNiYjMzQ7LAogICAgJiMzNDtORlRfUkVKRUNUX0lORVQmIzM0OywKICAgICYjMzQ7TkZUX1hGUk0mIzM0OywKICAgICYjMzQ7TkZUX0NPTk5MSU1JVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkVUX0lQSVAmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OywKICAgICYjMzQ7TkVUX0RTQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9mbG93X3JvdXRlJiMzNDssCiAgICAmIzM0O2Rldl9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDtkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtuZl9zZW5kX3Jlc2V0JiMzNDssCiAgICAmIzM0O25mX3NlbmRfcmVzZXQ2JiMzNDssCiAgICAmIzM0O25mX3NlbmRfdW5yZWFjaCYjMzQ7LAogICAgJiMzNDtuZl9zZW5kX3VucmVhY2g2JiMzNDssCiAgICAmIzM0O25mdF9tZXRhX2dldF9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9ydF9nZXRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZl9jb25uY291bnRfYWRkX3NrYiYjMzQ7LAogICAgJiMzNDtuZl9jb25uY291bnRfY291bnRfc2tiJiMzNDssCiAgICAmIzM0O25mX2Nvbm50cmFja190Y3BfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0byBmaXggbWVtb3J5IGxlYWtzIGFuZCBpbXByb3ZlIGhhbmRsaW5nIG9mIGBkc3RfZW50cnlgIGluIGBza19idWZmYCBhbmQgYG5ldF9kZXZpY2VfcGF0aGAuIEl0IGludHJvZHVjZXMgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCB0byBwcm9wZXJseSByZWxlYXNlIGBkc3RgIGVudHJpZXMsIHVwZGF0ZXMgYHNrYl92YWxpZF9kc3RgIGNoZWNrcyBpbiBuZXRmaWx0ZXIgcmVqZWN0LCBtZXRhLCBydCwgYW5kIHhmcm0gbW9kdWxlcywgYW5kIG1vZGlmaWVzIGNvbm50cmFjayBUQ1Agc3RhdGUgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTQ6NDAuNTQ3NTg3MDU3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4NDA4MzMyMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX0lQVjRcIixcbiAgICBcIk5GX1RBQkxFU19JUFY2XCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZUX1JFSkVDVF9JUFY0XCIsXG4gICAgXCJORlRfUkVKRUNUX0lQVjZcIixcbiAgICBcIk5GVF9SRUpFQ1RfSU5FVFwiLFxuICAgIFwiTkZUX1hGUk1cIixcbiAgICBcIk5GVF9DT05OTElNSVRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVUX0lQSVBcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJORVRfRFNBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X2Zsb3dfcm91dGVcIixcbiAgICBcImRldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwiZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VcIixcbiAgICBcIm5mX3NlbmRfcmVzZXRcIixcbiAgICBcIm5mX3NlbmRfcmVzZXQ2XCIsXG4gICAgXCJuZl9zZW5kX3VucmVhY2hcIixcbiAgICBcIm5mX3NlbmRfdW5yZWFjaDZcIixcbiAgICBcIm5mdF9tZXRhX2dldF9ldmFsXCIsXG4gICAgXCJuZnRfcnRfZ2V0X2V2YWxcIixcbiAgICBcIm5mX2Nvbm5jb3VudF9hZGRfc2tiXCIsXG4gICAgXCJuZl9jb25uY291bnRfY291bnRfc2tiXCIsXG4gICAgXCJuZl9jb25udHJhY2tfdGNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0byBmaXggbWVtb3J5IGxlYWtzIGFuZCBpbXByb3ZlIGhhbmRsaW5nIG9mIGBkc3RfZW50cnlgIGluIGBza19idWZmYCBhbmQgYG5ldF9kZXZpY2VfcGF0aGAuIEl0IGludHJvZHVjZXMgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCB0byBwcm9wZXJseSByZWxlYXNlIGBkc3RgIGVudHJpZXMsIHVwZGF0ZXMgYHNrYl92YWxpZF9kc3RgIGNoZWNrcyBpbiBuZXRmaWx0ZXIgcmVqZWN0LCBtZXRhLCBydCwgYW5kIHhmcm0gbW9kdWxlcywgYW5kIG1vZGlmaWVzIGNvbm50cmFjayBUQ1Agc3RhdGUgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNDo0MC41NDc1OTE5NDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMjM5MjI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI1YTAyZDczMmI1NGUxNWNhM2Q1NjNlODAxNTU3MzQ3YmI3ZTdhZTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAwMDoxNDozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbmluZGV4IDMzZGRmMGQwNzg1NTMuLmEwM2FmOTc1MDU3MzEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcXG5AQCAtMjk2LDE0ICsyOTYsMTggQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbiBcXHRwYXRoID0gXFx1MDAyNnN0YWNrLnBhdGhbc3RhY2subnVtX3BhdGhzIC0gMV07XFxuLVxcdGlmIChwYXRoLVxcdTAwM2V0eXBlICE9IERFVl9QQVRIX01US19XRE1BKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHBhdGgtXFx1MDAzZXR5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpIHtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuIFxcbiBcXHRpbmZvLVxcdTAwM2VpZHggPSBwYXRoLVxcdTAwM2VtdGtfd2RtYS53ZG1hX2lkeDtcXG4gXFx0aW5mby1cXHUwMDNlYnNzID0gcGF0aC1cXHUwMDNlbXRrX3dkbWEuYnNzO1xcbiBcXHRpbmZvLVxcdTAwM2V3Y2lkID0gcGF0aC1cXHUwMDNlbXRrX3dkbWEud2NpZDtcXG4rZXJyX291dDpcXG4rXFx0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UoXFx1MDAyNnN0YWNrKTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGFpcm9oYV9nZXRfZHNhX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKipkZXYpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcXG5pbmRleCBjYzhjNGVmODAzOGYzLi43NzFkOTExOGY5NGFkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcXG5AQCAtMTA4LDE2ICsxMDgsMjAgQEAgbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2lcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdHBhdGggPSBcXHUwMDI2c3RhY2sucGF0aFtzdGFjay5udW1fcGF0aHMgLSAxXTtcXG4tXFx0aWYgKHBhdGgtXFx1MDAzZXR5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpXFxuLVxcdFxcdHJldHVybiAtMTtcXG4rXFx0aWYgKHBhdGgtXFx1MDAzZXR5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpIHtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuIFxcbiBcXHRpbmZvLVxcdTAwM2V3ZG1hX2lkeCA9IHBhdGgtXFx1MDAzZW10a193ZG1hLndkbWFfaWR4O1xcbiBcXHRpbmZvLVxcdTAwM2VxdWV1ZSA9IHBhdGgtXFx1MDAzZW10a193ZG1hLnF1ZXVlO1xcbiBcXHRpbmZvLVxcdTAwM2Vic3MgPSBwYXRoLVxcdTAwM2VtdGtfd2RtYS5ic3M7XFxuIFxcdGluZm8tXFx1MDAzZXdjaWQgPSBwYXRoLVxcdTAwM2VtdGtfd2RtYS53Y2lkO1xcbiBcXHRpbmZvLVxcdTAwM2VhbXNkdSA9IHBhdGgtXFx1MDAzZW10a193ZG1hLmFtc2R1O1xcbitlcnJfb3V0OlxcbitcXHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShcXHUwMDI2c3RhY2spO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDhkYjI1Yjc5NTczZTMuLjYyY2ZhZDdlNmI3OWEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5AQCAtODkyLDYgKzg5Miw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgge1xcbiBcXHRcXHRcXHR1OFxcdFxcdGhfZGVzdFtFVEhfQUxFTl07XFxuIFxcdFxcdH0gZW5jYXA7XFxuIFxcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcXG4gXFx0XFx0XFx0dW5pb24ge1xcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5fYWRkclxcdHNyY192NDtcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGluNl9hZGRyXFx0c3JjX3Y2O1xcbkBAIC0zNDI3LDYgKzM0MjgsNyBAQCBpbnQgZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIGludCBkZXZfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcXG4rdm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7XFxuIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcXG4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZV9yY3Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcXG4gc3RydWN0IG5ldF9kZXZpY2UgKl9fZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcXG5pbmRleCBjMWMxYmUxYTY5NjJmLi5lNTBlZDY3N2RlNzI1IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtNzQyLDE0ICs3NDIsMzMgQEAgRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuIHtcXG4tXFx0aW50IGsgPSBzdGFjay1cXHUwMDNlbnVtX3BhdGhzKys7XFxuLVxcbi1cXHRpZiAoayBcXHUwMDNlPSBORVRfREVWSUNFX1BBVEhfU1RBQ0tfTUFYKVxcbitcXHRpZiAoc3RhY2stXFx1MDAzZW51bV9wYXRocyArIDEgXFx1MDAzZSBORVRfREVWSUNFX1BBVEhfU1RBQ0tfTUFYKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdHJldHVybiBcXHUwMDI2c3RhY2stXFx1MDAzZXBhdGhba107XFxuK1xcdHJldHVybiBcXHUwMDI2c3RhY2stXFx1MDAzZXBhdGhbc3RhY2stXFx1MDAzZW51bV9wYXRoc107XFxuIH1cXG4gXFxuK3ZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcXG4rXFx0aW50IGs7XFxuK1xcbitcXHRpZiAoc3RhY2stXFx1MDAzZW51bV9wYXRocyA9PSAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKGsgPSBzdGFjay1cXHUwMDNlbnVtX3BhdGhzIC0gMTsgayBcXHUwMDNlPSAwOyBrLS0pIHtcXG4rXFx0XFx0cGF0aCA9IFxcdTAwMjZzdGFjay1cXHUwMDNlcGF0aFtrXTtcXG4rXFx0XFx0c3dpdGNoIChwYXRoLVxcdTAwM2V0eXBlKSB7XFxuK1xcdFxcdGNhc2UgREVWX1BBVEhfVFVOOlxcbitcXHRcXHRcXHRkc3RfcmVsZWFzZShwYXRoLVxcdTAwM2V0dW4uZHN0KTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSk7XFxuK1xcbiBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4ge1xcbkBAIC03NjYsMTUgKzc4NSwxNiBAQCBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4gXFx0XFx0bGFzdF9kZXYgPSBjdHguZGV2O1xcbiBcXHRcXHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcXG4gXFx0XFx0aWYgKCFwYXRoKVxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFxuIFxcdFxcdG1lbXNldChwYXRoLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2VfcGF0aCkpO1xcbiBcXHRcXHRyZXQgPSBjdHguZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoXFx1MDAyNmN0eCwgcGF0aCk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFxuK1xcdFxcdHN0YWNrLVxcdTAwM2VudW1fcGF0aHMrKztcXG4gXFx0XFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHguZGV2KSlcXG4tXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghY3R4LmRldilcXG5AQCAtNzgyLDExICs4MDIsMTcgQEAgaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXFxuIFxcbiBcXHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcXG4gXFx0aWYgKCFwYXRoKVxcbi1cXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFxuIFxcdHBhdGgtXFx1MDAzZXR5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDtcXG4gXFx0cGF0aC1cXHUwMDNlZGV2ID0gY3R4LmRldjtcXG4rXFx0c3RhY2stXFx1MDAzZW51bV9wYXRocysrO1xcbiBcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIDA7XFxuK2Vycl9vdXQ6XFxuK1xcdGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0YWNrKTtcXG4rXFxuK1xcdHJldHVybiAtMTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS91c2VyLmMgYi9uZXQvZHNhL3VzZXIuY1xcbmluZGV4IDAzYzdhZjZhYmUxOGEuLjQwNjVjNmVlNmZjNjggMTAwNjQ0XFxuLS0tIGEvbmV0L2RzYS91c2VyLmNcXG4rKysgYi9uZXQvZHNhL3VzZXIuY1xcbkBAIC0yNTQ3LDE0ICsyNTQ3LDEzIEBAIHN0YXRpYyBpbnQgZHNhX3VzZXJfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcXG4ge1xcbiBcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChjdHgtXFx1MDAzZWRldik7XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0ID0gZHNhX3BvcnRfdG9fY29uZHVpdChkcCk7XFxuIFxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZHAtXFx1MDAzZWNwdV9kcDtcXG4gXFxuIFxcdHBhdGgtXFx1MDAzZWRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbiBcXHRwYXRoLVxcdTAwM2V0eXBlID0gREVWX1BBVEhfRFNBO1xcbiBcXHRwYXRoLVxcdTAwM2Vkc2EucHJvdG8gPSBjcHVfZHAtXFx1MDAzZXRhZ19vcHMtXFx1MDAzZXByb3RvO1xcbiBcXHRwYXRoLVxcdTAwM2Vkc2EucG9ydCA9IGRwLVxcdTAwM2VpbmRleDtcXG4tXFx0Y3R4LVxcdTAwM2VkZXYgPSBjb25kdWl0O1xcbitcXHRjdHgtXFx1MDAzZWRldiA9IE5VTEw7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmNcXG5pbmRleCAwODMxZjZiODE3MTdjLi5mYjdkOTZmOTliMDZiIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2lwaXAuY1xcbisrKyBiL25ldC9pcHY0L2lwaXAuY1xcbkBAIC0zNzYsMTAgKzM3NiwxMCBAQCBzdGF0aWMgaW50IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG4gXFx0cGF0aC1cXHUwMDNldHVuLnNyY192NC5zX2FkZHIgPSB0aXBoLVxcdTAwM2VzYWRkcjtcXG4gXFx0cGF0aC1cXHUwMDNldHVuLmRzdF92NC5zX2FkZHIgPSB0aXBoLVxcdTAwM2VkYWRkcjtcXG4gXFx0cGF0aC1cXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQO1xcbitcXHRwYXRoLVxcdTAwM2V0dW4uZHN0ID0gXFx1MDAyNnJ0LVxcdTAwM2Vkc3Q7XFxuIFxcdHBhdGgtXFx1MDAzZWRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbiBcXG4gXFx0Y3R4LVxcdTAwM2VkZXYgPSBydC1cXHUwMDNlZHN0LmRldjtcXG4tXFx0aXBfcnRfcHV0KHJ0KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmNcXG5pbmRleCA0NjI2ZGM0NjgwOGYzLi41OWVjNDY1YTlkZjk4IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jXFxuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC90Y3AuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9yb3V0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9pcHY0L25mX3JlamVjdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaFxcdTAwM2VcXG5AQCAtMjYzLDYgKzI2NCw3IEBAIHN0YXRpYyBpbnQgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxcbiBcXHRpZiAoIWRzdClcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4rXFx0c2tiX2RzdF9kcm9wKHNrYl9pbik7XFxuIFxcdHNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjc5LDcgKzI4MSw3IEBAIHZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcXG4gXFx0aWYgKCFvdGgpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghc2tiX2RzdChvbGRza2IpIFxcdTAwMjZcXHUwMDI2IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qob2xkc2tiKSBcXHUwMDNjIDApXFxuK1xcdGlmICghc2tiX3ZhbGlkX2RzdChvbGRza2IpIFxcdTAwMjZcXHUwMDI2IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qob2xkc2tiKSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmIChza2JfcnRhYmxlKG9sZHNrYiktXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgKFJUQ0ZfQlJPQURDQVNUIHwgUlRDRl9NVUxUSUNBU1QpKVxcbkBAIC0zNTIsNyArMzU0LDcgQEAgdm9pZCBuZl9zZW5kX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IGNvZGUsIGludCBob29rKVxcbiBcXHRpZiAoaXBoLVxcdTAwM2VmcmFnX29mZiBcXHUwMDI2IGh0b25zKElQX09GRlNFVCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghc2tiX2RzdChza2JfaW4pIFxcdTAwMjZcXHUwMDI2IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc2tiX2luKSBcXHUwMDNjIDApXFxuK1xcdGlmICghc2tiX3ZhbGlkX2RzdChza2JfaW4pIFxcdTAwMjZcXHUwMDI2IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc2tiX2luKSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2JfaW4pIHx8XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbmluZGV4IDk3YzNmNjFkNjI3YmIuLmQ4MDAyMGJjMjYyMGUgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXFxuKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXFxuQEAgLTE4NzAsMTIgKzE4NzAsMTQgQEAgc3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdFxcdHBhdGgtXFx1MDAzZXR1bi5zcmNfdjYgPSBmbDYuc2FkZHI7XFxuIFxcdFxcdHBhdGgtXFx1MDAzZXR1bi5kc3RfdjYgPSBmbDYuZGFkZHI7XFxuIFxcdFxcdHBhdGgtXFx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjtcXG4rXFx0XFx0cGF0aC1cXHUwMDNldHVuLmRzdCA9IGRzdDtcXG4gXFx0XFx0cGF0aC1cXHUwMDNlZGV2ID0gY3R4LVxcdTAwM2VkZXY7XFxuIFxcdFxcdGN0eC1cXHUwMDNlZGV2ID0gZHN0LVxcdTAwM2VkZXY7XFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IGRzdC1cXHUwMDNlZXJyb3I7XFxuLVxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmNcXG5pbmRleCBlZjViN2U4NWNmZmE4Li4wN2NkYWExMGRhMGQwIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jXFxuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfcm91dGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfZmliLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2NoZWNrc3VtLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfcmVqZWN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oXFx1MDAzZVxcbkBAIC0zMDQsNiArMzA1LDcgQEAgc3RhdGljIGludCBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxcbiBcXHRpZiAoIWRzdClcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4rXFx0c2tiX2RzdF9kcm9wKHNrYl9pbik7XFxuIFxcdHNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMzM2LDEwICszMzgsMTIgQEAgdm9pZCBuZl9zZW5kX3Jlc2V0NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcXG4gXFx0Zmw2LmZsNl9zcG9ydCA9IG90Y3BoLVxcdTAwM2VkZXN0O1xcbiBcXHRmbDYuZmw2X2Rwb3J0ID0gb3RjcGgtXFx1MDAzZXNvdXJjZTtcXG4gXFxuLVxcdGlmICghc2tiX2RzdChvbGRza2IpKSB7XFxuK1xcdGlmICghc2tiX3ZhbGlkX2RzdChvbGRza2IpKSB7XFxuIFxcdFxcdG5mX2lwNl9yb3V0ZShuZXQsIFxcdTAwMjZkc3QsIGZsb3dpNl90b19mbG93aShcXHUwMDI2Zmw2KSwgZmFsc2UpO1xcbiBcXHRcXHRpZiAoIWRzdClcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0c2tiX2RzdF9kcm9wKG9sZHNrYik7XFxuIFxcdFxcdHNrYl9kc3Rfc2V0KG9sZHNrYiwgZHN0KTtcXG4gXFx0fVxcbiBcXG5AQCAtNDQwLDcgKzQ0NCw3IEBAIHZvaWQgbmZfc2VuZF91bnJlYWNoNihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2JfaW4sXFxuIFxcdGlmIChob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUIFxcdTAwMjZcXHUwMDI2IHNrYl9pbi1cXHUwMDNlZGV2ID09IE5VTEwpXFxuIFxcdFxcdHNrYl9pbi1cXHUwMDNlZGV2ID0gbmV0LVxcdTAwM2Vsb29wYmFja19kZXY7XFxuIFxcbi1cXHRpZiAoIXNrYl9kc3Qoc2tiX2luKSBcXHUwMDI2XFx1MDAyNiBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChza2JfaW4pIFxcdTAwM2MgMClcXG4rXFx0aWYgKCFza2JfdmFsaWRfZHN0KHNrYl9pbikgXFx1MDAyNlxcdTAwMjYgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc2tiX2luKSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGljbXB2Nl9zZW5kKHNrYl9pbiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwgY29kZSwgMCk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXFxuaW5kZXggZTllYTZkOTQ2NmU3NC4uODU0ODdmOTJhZjUwNiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xcbkBAIC0xNTgsNiArMTU4LDggQEAgc3RhdGljIGJvb2wgZ2V0X2N0X29yX3R1cGxlX2Zyb21fc2tiKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRmb3VuZF9jdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCk7XFxuK1xcdCp0dXBsZSA9IGZvdW5kX2N0LVxcdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZTtcXG4rXFx0KnpvbmUgPSBuZl9jdF96b25lKGZvdW5kX2N0KTtcXG4gXFx0KnJlZmNvdW50ZWQgPSB0cnVlO1xcbiBcXHQqY3QgPSBmb3VuZF9jdDtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcXG5pbmRleCBjZWVlZDNkN2ZlNTIwLi43MjNlOTQ2YTc4ZjQwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcXG5AQCAtMTI4MSw4ICsxMjgxLDkgQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0aWYgKGN0LVxcdTAwM2Vwcm90by50Y3AucmV0cmFucyBcXHUwMDNlPSB0bi1cXHUwMDNldGNwX21heF9yZXRyYW5zIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICB0aW1lb3V0c1tuZXdfc3RhdGVdIFxcdTAwM2UgdGltZW91dHNbVENQX0NPTk5UUkFDS19SRVRSQU5TXSlcXG4gXFx0XFx0dGltZW91dCA9IHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfUkVUUkFOU107XFxuLVxcdGVsc2UgaWYgKHVubGlrZWx5KGluZGV4ID09IFRDUF9SU1RfU0VUKSlcXG4tXFx0XFx0dGltZW91dCA9IHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfQ0xPU0VdO1xcbitcXHRlbHNlIGlmICh1bmxpa2VseShpbmRleCA9PSBUQ1BfUlNUX1NFVCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgIG5ld19zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEKSlcXG4rXFx0XFx0dGltZW91dCA9IHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfVU5BQ0tdO1xcbiBcXHRlbHNlIGlmICgoY3QtXFx1MDAzZXByb3RvLnRjcC5zZWVuWzBdLmZsYWdzIHwgY3QtXFx1MDAzZXByb3RvLnRjcC5zZWVuWzFdLmZsYWdzKSBcXHUwMDI2XFxuIFxcdFxcdCBJUF9DVF9UQ1BfRkxBR19EQVRBX1VOQUNLTk9XTEVER0VEIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCB0aW1lb3V0c1tuZXdfc3RhdGVdIFxcdTAwM2UgdGltZW91dHNbVENQX0NPTk5UUkFDS19VTkFDS10pXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXFxuaW5kZXggOThjMDNiNDg3ZjUyMS4uNTYyMTliMDJlMTIyNyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xcbkBAIC00Miw4ICs0Miw3IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxcbitzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxcbiBcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0XFx0XFx0XFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCB1OCAqaGEsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuQEAgLTc2LDE0ICs3NSwxNCBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxcbiB9XFxuIFxcbiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XFxuLVxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbmRldjtcXG4tXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dGRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0c3RydWN0IGlkIHtcXG4gXFx0XFx0X191MTZcXHRpZDtcXG4gXFx0XFx0X19iZTE2XFx0cHJvdG87XFxuIFxcdH0gZW5jYXBbTkZfRkxPV19UQUJMRV9FTkNBUF9NQVhdO1xcbiBcXHR1OCBudW1fZW5jYXBzO1xcbiBcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB0dW47XFxuK1xcdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3Q7XFxuIFxcdHU4IG51bV90dW5zO1xcbiBcXHR1OCBpbmdyZXNzX3ZsYW5zO1xcbiBcXHR1OCBoX3NvdXJjZVtFVEhfQUxFTl07XFxuQEAgLTkyLDkgKzkxLDEyIEBAIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcXG4gXFx0ZW51bSBmbG93X29mZmxvYWRfeG1pdF90eXBlIHhtaXRfdHlwZTtcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXFxuK3N0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KTtcXG4rXFxuK3N0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gKmluZm8sXFxuLVxcdFxcdFxcdCAgICAgdW5zaWduZWQgY2hhciAqaGEsIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcXG4rXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XFxuIFxcdGludCBpO1xcbkBAIC0xMDksMjkgKzExMSwyNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxcbiBcXHRcXHRjYXNlIERFVl9QQVRIX1ZMQU46XFxuIFxcdFxcdGNhc2UgREVWX1BBVEhfUFBQT0U6XFxuIFxcdFxcdGNhc2UgREVWX1BBVEhfVFVOOlxcbi1cXHRcXHRcXHRpbmZvLVxcdTAwM2VpbmRldiA9IHBhdGgtXFx1MDAzZWRldjtcXG4rXFx0XFx0XFx0aW5mby1cXHUwMDNlZGV2ID0gcGF0aC1cXHUwMDNlZGV2O1xcbiBcXHRcXHRcXHRpZiAoaXNfemVyb19ldGhlcl9hZGRyKGluZm8tXFx1MDAzZWhfc291cmNlKSlcXG4gXFx0XFx0XFx0XFx0bWVtY3B5KGluZm8tXFx1MDAzZWhfc291cmNlLCBwYXRoLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XFxuIFxcbi1cXHRcXHRcXHRpZiAocGF0aC1cXHUwMDNldHlwZSA9PSBERVZfUEFUSF9FVEhFUk5FVClcXG4rXFx0XFx0XFx0aWYgKHBhdGgtXFx1MDAzZXR5cGUgPT0gREVWX1BBVEhfRVRIRVJORVQgfHxcXG4rXFx0XFx0XFx0ICAgIHBhdGgtXFx1MDAzZXR5cGUgPT0gREVWX1BBVEhfRFNBKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0aWYgKHBhdGgtXFx1MDAzZXR5cGUgPT0gREVWX1BBVEhfRFNBKSB7XFxuLVxcdFxcdFxcdFxcdGkgPSBzdGFjay1cXHUwMDNlbnVtX3BhdGhzO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0LyogREVWX1BBVEhfVkxBTiwgREVWX1BBVEhfUFBQT0UgYW5kIERFVl9QQVRIX1RVTiAqL1xcbiBcXHRcXHRcXHRpZiAocGF0aC1cXHUwMDNldHlwZSA9PSBERVZfUEFUSF9UVU4pIHtcXG4gXFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV90dW5zKVxcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFxuIFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZXR1bi5zcmNfdjYgPSBwYXRoLVxcdTAwM2V0dW4uc3JjX3Y2O1xcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2V0dW4uZHN0X3Y2ID0gcGF0aC1cXHUwMDNldHVuLmRzdF92NjtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNldHVuLmwzX3Byb3RvID0gcGF0aC1cXHUwMDNldHVuLmwzX3Byb3RvO1xcbitcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2V0dW5fZHN0ID0gcGF0aC1cXHUwMDNldHVuLmRzdDtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlbnVtX3R1bnMrKztcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV9lbmNhcHMgXFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpXFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiBcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlZW5jYXBbaW5mby1cXHUwMDNlbnVtX2VuY2Fwc10uaWQgPVxcbiBcXHRcXHRcXHRcXHRcXHRwYXRoLVxcdTAwM2VlbmNhcC5pZDtcXG5AQCAtMTUyLDEzICsxNTIsMTMgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcXG4gXFx0XFx0XFx0c3dpdGNoIChwYXRoLVxcdTAwM2VicmlkZ2Uudmxhbl9tb2RlKSB7XFxuIFxcdFxcdFxcdGNhc2UgREVWX1BBVEhfQlJfVkxBTl9VTlRBR19IVzpcXG4gXFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV9lbmNhcHMgPT0gMClcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VpbmdyZXNzX3ZsYW5zIHw9IEJJVChpbmZvLVxcdTAwM2VudW1fZW5jYXBzIC0gMSk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVEFHOlxcbiBcXHRcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlbnVtX2VuY2FwcyBcXHUwMDNlPSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWClcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VlbmNhcFtpbmZvLVxcdTAwM2VudW1fZW5jYXBzXS5pZCA9IHBhdGgtXFx1MDAzZWJyaWRnZS52bGFuX2lkO1xcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VlbmNhcFtpbmZvLVxcdTAwM2VudW1fZW5jYXBzXS5wcm90byA9IHBhdGgtXFx1MDAzZWJyaWRnZS52bGFuX3Byb3RvO1xcbkBAIC0xNjYsNyArMTY2LDcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdGNhc2UgREVWX1BBVEhfQlJfVkxBTl9VTlRBRzpcXG4gXFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV9lbmNhcHMgPT0gMClcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VudW1fZW5jYXBzLS07XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xNzYsMTYgKzE3NiwyMiBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcdGluZm8tXFx1MDAzZW91dGRldiA9IGluZm8tXFx1MDAzZWluZGV2O1xcbiBcXG4tXFx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoaW5mby1cXHUwMDNlaW5kZXYpKVxcbitcXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoXFx1MDAyNmZ0LVxcdTAwM2VkYXRhKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShpbmZvLVxcdTAwM2VkZXYpKVxcbiBcXHRcXHRpbmZvLVxcdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XFxuIFxcbitcXHRpZiAoIW5mdF9mbG93dGFibGVfZmluZF9kZXYoaW5mby1cXHUwMDNlZGV2LCBmdCkpXFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFxuIFxcdHJldHVybiAwO1xcbitlcnJfb3V0OlxcbitcXHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7XFxuK1xcbitcXHRyZXR1cm4gLTE7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5AQCAtMjA1LDQ0ICsyMTEsNiBAQCBzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdHJldHVybiBmb3VuZDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCAqdHVuLFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuLVxcdFxcdFxcdFxcdFxcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIpXFxuLXtcXG4tXFx0c3RydWN0IGRzdF9lbnRyeSAqY3VyX2RzdCA9IHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLmRzdDtcXG4tXFx0c3RydWN0IGRzdF9lbnRyeSAqdHVuX2RzdCA9IE5VTEw7XFxuLVxcdHN0cnVjdCBmbG93aSBmbCA9IHt9O1xcbi1cXG4tXFx0c3dpdGNoIChuZnRfcGYocGt0KSkge1xcbi1cXHRjYXNlIE5GUFJPVE9fSVBWNDpcXG4tXFx0XFx0ZmwudS5pcDQuZGFkZHIgPSB0dW4tXFx1MDAzZWRzdF92NC5zX2FkZHI7XFxuLVxcdFxcdGZsLnUuaXA0LnNhZGRyID0gdHVuLVxcdTAwM2VzcmNfdjQuc19hZGRyO1xcbi1cXHRcXHRmbC51LmlwNC5mbG93aTRfaWlmID0gbmZ0X2luKHBrdCktXFx1MDAzZWlmaW5kZXg7XFxuLVxcdFxcdGZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtXFx1MDAzZXNrYikpO1xcbi1cXHRcXHRmbC51LmlwNC5mbG93aTRfbWFyayA9IHBrdC1cXHUwMDNlc2tiLVxcdTAwM2VtYXJrO1xcbi1cXHRcXHRmbC51LmlwNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQztcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgTkZQUk9UT19JUFY2Olxcbi1cXHRcXHRmbC51LmlwNi5kYWRkciA9IHR1bi1cXHUwMDNlZHN0X3Y2O1xcbi1cXHRcXHRmbC51LmlwNi5zYWRkciA9IHR1bi1cXHUwMDNlc3JjX3Y2O1xcbi1cXHRcXHRmbC51LmlwNi5mbG93aTZfaWlmID0gbmZ0X2luKHBrdCktXFx1MDAzZWlmaW5kZXg7XFxuLVxcdFxcdGZsLnUuaXA2LmZsb3dsYWJlbCA9IGlwNl9mbG93aW5mbyhpcHY2X2hkcihwa3QtXFx1MDAzZXNrYikpO1xcbi1cXHRcXHRmbC51LmlwNi5mbG93aTZfbWFyayA9IHBrdC1cXHUwMDNlc2tiLVxcdTAwM2VtYXJrO1xcbi1cXHRcXHRmbC51LmlwNi5mbG93aTZfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQztcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFxuLVxcdG5mX3JvdXRlKG5mdF9uZXQocGt0KSwgXFx1MDAyNnR1bl9kc3QsIFxcdTAwMjZmbCwgZmFsc2UsIG5mdF9wZihwa3QpKTtcXG4tXFx0aWYgKCF0dW5fZHN0KVxcbi1cXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4tXFxuLVxcdHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLmRzdCA9IHR1bl9kc3Q7XFxuLVxcdGRzdF9yZWxlYXNlKGN1cl9kc3QpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbkBAIC0yNTUsMjggKzIyMywyNSBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiBcXHR1bnNpZ25lZCBjaGFyIGhhW0VUSF9BTEVOXTtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgXFx1MDAyNnN0YWNrKSBcXHUwMDNjIDAgfHxcXG4tXFx0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFxcdTAwMjZzdGFjaywgXFx1MDAyNmluZm8sIGhhLCBcXHUwMDI2ZnQtXFx1MDAzZWRhdGEpIFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuLVxcbi1cXHRpZiAoIW5mdF9mbG93dGFibGVfZmluZF9kZXYoaW5mby5pbmRldiwgZnQpKVxcbitcXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChkc3QsIGN0LCBkaXIsIGhhLCBcXHUwMDI2c3RhY2spIFxcdTAwM2MgMCB8fFxcbitcXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXFx1MDAyNnN0YWNrLCBcXHUwMDI2aW5mbywgaGEsIGZ0KSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4tXFx0aWYgKGluZm8ub3V0ZGV2KVxcbi1cXHRcXHRyb3V0ZS1cXHUwMDNldHVwbGVbZGlyXS5vdXQuaWZpbmRleCA9IGluZm8ub3V0ZGV2LVxcdTAwM2VpZmluZGV4O1xcbitcXHRyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uaW4uaWZpbmRleCA9IGluZm8uZGV2LVxcdTAwM2VpZmluZGV4O1xcbitcXHRyb3V0ZS1cXHUwMDNldHVwbGVbZGlyXS5vdXQuaWZpbmRleCA9IGluZm8uZGV2LVxcdTAwM2VpZmluZGV4O1xcbiBcXG4tXFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLmlmaW5kZXggPSBpbmZvLmluZGV2LVxcdTAwM2VpZmluZGV4O1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5mby5udW1fZW5jYXBzOyBpKyspIHtcXG4gXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLmVuY2FwW2ldLmlkID0gaW5mby5lbmNhcFtpXS5pZDtcXG4gXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLmVuY2FwW2ldLnByb3RvID0gaW5mby5lbmNhcFtpXS5wcm90bztcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGluZm8ubnVtX3R1bnMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICFuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKHBrdCwgXFx1MDAyNmluZm8udHVuLCByb3V0ZSwgZGlyKSkge1xcbitcXHRpZiAoaW5mby5udW1fdHVucykge1xcbiBcXHRcXHRyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLnNyY192NiA9IGluZm8udHVuLmRzdF92NjtcXG4gXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5kc3RfdjYgPSBpbmZvLnR1bi5zcmNfdjY7XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi50dW4ubDNfcHJvdG8gPSBpbmZvLnR1bi5sM19wcm90bztcXG4gXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLm51bV90dW5zID0gaW5mby5udW1fdHVucztcXG4rXFx0XFx0ZHN0X3JlbGVhc2Uocm91dGUtXFx1MDAzZXR1cGxlW2Rpcl0uZHN0KTtcXG4rXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlW2Rpcl0uZHN0ID0gaW5mby50dW5fZHN0O1xcbiBcXHR9XFxuIFxcbiBcXHRyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uaW4ubnVtX2VuY2FwcyA9IGluZm8ubnVtX2VuY2FwcztcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfbWV0YS5jIGIvbmV0L25ldGZpbHRlci9uZnRfbWV0YS5jXFxuaW5kZXggMGE0M2UwNzg3YTY4OC4uMDFjZmJhYTM2NTI1MCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmNcXG5AQCAtMjAsNiArMjAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcF9zdGF0ZXMuaFxcdTAwM2UgLyogZm9yIFRDUF9USU1FX1dBSVQgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmhcXHUwMDNlXFxuQEAgLTI3OSwxMSArMjgwLDEyIEBAIHN0YXRpYyBib29sIG5mdF9tZXRhX2dldF9ldmFsX2lmbmFtZShlbnVtIG5mdF9tZXRhX2tleXMga2V5LCB1MzIgKmRlc3QsXFxuIHN0YXRpYyBub2lubGluZSBib29sXFxuIG5mdF9tZXRhX2dldF9ldmFsX3J0Y2xhc3NpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgKmRlc3QpXFxuIHtcXG4tXFx0Y29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpO1xcbitcXHRjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XFxuIFxcbi1cXHRpZiAoIWRzdClcXG4rXFx0aWYgKCFza2JfdmFsaWRfZHN0KHNrYikpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuK1xcdGRzdCA9IHNrYl9kc3Qoc2tiKTtcXG4gXFx0KmRlc3QgPSBkc3QtXFx1MDAzZXRjbGFzc2lkO1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9ydC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcnQuY1xcbmluZGV4IGFlYjAwOTRlYWZkODAuLjg0MWM4NjNhMDhkYjUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcnQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3J0LmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXFx1MDAzZVxcbkBAIC01OSwxMCArNjAsMTEgQEAgdm9pZCBuZnRfcnRfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbiBcXHR1MzIgKmRlc3QgPSBcXHUwMDI2cmVncy1cXHUwMDNlZGF0YVtwcml2LVxcdTAwM2VkcmVnXTtcXG4gXFx0Y29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0O1xcbiBcXG4tXFx0ZHN0ID0gc2tiX2RzdChza2IpO1xcbi1cXHRpZiAoIWRzdClcXG4rXFx0aWYgKCFza2JfdmFsaWRfZHN0KHNrYikpXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4rXFx0ZHN0ID0gc2tiX2RzdChza2IpO1xcbitcXG4gXFx0c3dpdGNoIChwcml2LVxcdTAwM2VrZXkpIHtcXG4gI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lEXFxuIFxcdGNhc2UgTkZUX1JUX0NMQVNTSUQ6XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uY1xcbmluZGV4IDhjZWM0MzA2NDMxOTIuLmM4YmJhNjk3Zjk5M2EgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3hmcm0uaFxcdTAwM2VcXG4gXFxuQEAgLTE3Nyw5ICsxNzgsMTUgQEAgc3RhdGljIHZvaWQgbmZ0X3hmcm1fZ2V0X2V2YWxfb3V0KGNvbnN0IHN0cnVjdCBuZnRfeGZybSAqcHJpdixcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuIFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuIHtcXG4tXFx0Y29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChwa3QtXFx1MDAzZXNrYik7XFxuK1xcdGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRpZiAoIXNrYl92YWxpZF9kc3QocGt0LVxcdTAwM2Vza2IpKSB7XFxuK1xcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRkc3QgPSBza2JfZHN0KHBrdC1cXHUwMDNlc2tiKTtcXG4gXFx0Zm9yIChpID0gMDsgZHN0IFxcdTAwMjZcXHUwMDI2IGRzdC1cXHUwMDNleGZybTtcXG4gXFx0ICAgICBkc3QgPSAoKGNvbnN0IHN0cnVjdCB4ZnJtX2RzdCAqKWRzdCktXFx1MDAzZWNoaWxkLCBpKyspIHtcXG4gXFx0XFx0aWYgKGkgXFx1MDAzYyBwcml2LVxcdTAwM2VzcG51bSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTQ6NDAuOTYwOTA0MzkyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDk3OTk1MDAyMDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX0lQVjRcIixcbiAgICBcIk5GX1RBQkxFU19JUFY2XCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZUX1JFSkVDVF9JUFY0XCIsXG4gICAgXCJORlRfUkVKRUNUX0lQVjZcIixcbiAgICBcIk5GVF9SRUpFQ1RfSU5FVFwiLFxuICAgIFwiTkZUX1hGUk1cIixcbiAgICBcIk5GVF9DT05OTElNSVRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVUX0lQSVBcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJORVRfRFNBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X2Zsb3dfcm91dGVcIixcbiAgICBcImRldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwiZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VcIixcbiAgICBcIm5mX3NlbmRfcmVzZXRcIixcbiAgICBcIm5mX3NlbmRfcmVzZXQ2XCIsXG4gICAgXCJuZl9zZW5kX3VucmVhY2hcIixcbiAgICBcIm5mX3NlbmRfdW5yZWFjaDZcIixcbiAgICBcIm5mdF9tZXRhX2dldF9ldmFsXCIsXG4gICAgXCJuZnRfcnRfZ2V0X2V2YWxcIixcbiAgICBcIm5mX2Nvbm5jb3VudF9hZGRfc2tiXCIsXG4gICAgXCJuZl9jb25uY291bnRfY291bnRfc2tiXCIsXG4gICAgXCJuZl9jb25udHJhY2tfdGNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0byBmaXggbWVtb3J5IGxlYWtzIGFuZCBpbXByb3ZlIGhhbmRsaW5nIG9mIGBkc3RfZW50cnlgIGluIGBza19idWZmYCBhbmQgYG5ldF9kZXZpY2VfcGF0aGAuIEl0IGludHJvZHVjZXMgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCB0byBwcm9wZXJseSByZWxlYXNlIGBkc3RgIGVudHJpZXMsIHVwZGF0ZXMgYHNrYl92YWxpZF9kc3RgIGNoZWNrcyBpbiBuZXRmaWx0ZXIgcmVqZWN0LCBtZXRhLCBydCwgYW5kIHhmcm0gbW9kdWxlcywgYW5kIG1vZGlmaWVzIGNvbm50cmFjayBUQ1Agc3RhdGUgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNWEwMmQ3MzJiNTRlMTVjYTNkNTYzZTgwMTU1NzM0N2JiN2U3YWU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAwMDoxNDozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5pbmRleCAzM2RkZjBkMDc4NTUzLi5hMDNhZjk3NTA1NzMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuQEAgLTI5NiwxNCArMjk2LDE4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0cGF0aCA9IFx1MDAyNnN0YWNrLnBhdGhbc3RhY2subnVtX3BhdGhzIC0gMV07XG4tXHRpZiAocGF0aC1cdTAwM2V0eXBlICE9IERFVl9QQVRIX01US19XRE1BKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChwYXRoLVx1MDAzZXR5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpIHtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuIFxuIFx0aW5mby1cdTAwM2VpZHggPSBwYXRoLVx1MDAzZW10a193ZG1hLndkbWFfaWR4O1xuIFx0aW5mby1cdTAwM2Vic3MgPSBwYXRoLVx1MDAzZW10a193ZG1hLmJzcztcbiBcdGluZm8tXHUwMDNld2NpZCA9IHBhdGgtXHUwMDNlbXRrX3dkbWEud2NpZDtcbitlcnJfb3V0OlxuK1x0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UoXHUwMDI2c3RhY2spO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IGFpcm9oYV9nZXRfZHNhX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKipkZXYpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuaW5kZXggY2M4YzRlZjgwMzhmMy4uNzcxZDkxMThmOTRhZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuQEAgLTEwOCwxNiArMTA4LDIwIEBAIG10a19mbG93X2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsIHN0cnVjdCBtdGtfd2RtYV9pXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRwYXRoID0gXHUwMDI2c3RhY2sucGF0aFtzdGFjay5udW1fcGF0aHMgLSAxXTtcbi1cdGlmIChwYXRoLVx1MDAzZXR5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpXG4tXHRcdHJldHVybiAtMTtcbitcdGlmIChwYXRoLVx1MDAzZXR5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpIHtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuIFxuIFx0aW5mby1cdTAwM2V3ZG1hX2lkeCA9IHBhdGgtXHUwMDNlbXRrX3dkbWEud2RtYV9pZHg7XG4gXHRpbmZvLVx1MDAzZXF1ZXVlID0gcGF0aC1cdTAwM2VtdGtfd2RtYS5xdWV1ZTtcbiBcdGluZm8tXHUwMDNlYnNzID0gcGF0aC1cdTAwM2VtdGtfd2RtYS5ic3M7XG4gXHRpbmZvLVx1MDAzZXdjaWQgPSBwYXRoLVx1MDAzZW10a193ZG1hLndjaWQ7XG4gXHRpbmZvLVx1MDAzZWFtc2R1ID0gcGF0aC1cdTAwM2VtdGtfd2RtYS5hbXNkdTtcbitlcnJfb3V0OlxuK1x0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UoXHUwMDI2c3RhY2spO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOGRiMjViNzk1NzNlMy4uNjJjZmFkN2U2Yjc5YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC04OTIsNiArODkyLDcgQEAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCB7XG4gXHRcdFx0dThcdFx0aF9kZXN0W0VUSF9BTEVOXTtcbiBcdFx0fSBlbmNhcDtcbiBcdFx0c3RydWN0IHtcbitcdFx0XHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XG4gXHRcdFx0dW5pb24ge1xuIFx0XHRcdFx0c3RydWN0IGluX2FkZHJcdHNyY192NDtcbiBcdFx0XHRcdHN0cnVjdCBpbjZfYWRkclx0c3JjX3Y2O1xuQEAgLTM0MjcsNiArMzQyOCw3IEBAIGludCBkZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuK3ZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xuIHN0cnVjdCBuZXRfZGV2aWNlICpfX2Rldl9nZXRfYnlfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IGMxYzFiZTFhNjk2MmYuLmU1MGVkNjc3ZGU3MjUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC03NDIsMTQgKzc0MiwzMyBAQCBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9tZXRhZGF0YV9kc3QpO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4ge1xuLVx0aW50IGsgPSBzdGFjay1cdTAwM2VudW1fcGF0aHMrKztcbi1cbi1cdGlmIChrIFx1MDAzZT0gTkVUX0RFVklDRV9QQVRIX1NUQUNLX01BWClcbitcdGlmIChzdGFjay1cdTAwM2VudW1fcGF0aHMgKyAxIFx1MDAzZSBORVRfREVWSUNFX1BBVEhfU1RBQ0tfTUFYKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdHJldHVybiBcdTAwMjZzdGFjay1cdTAwM2VwYXRoW2tdO1xuK1x0cmV0dXJuIFx1MDAyNnN0YWNrLVx1MDAzZXBhdGhbc3RhY2stXHUwMDNlbnVtX3BhdGhzXTtcbiB9XG4gXG4rdm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoO1xuK1x0aW50IGs7XG4rXG4rXHRpZiAoc3RhY2stXHUwMDNlbnVtX3BhdGhzID09IDApXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoayA9IHN0YWNrLVx1MDAzZW51bV9wYXRocyAtIDE7IGsgXHUwMDNlPSAwOyBrLS0pIHtcbitcdFx0cGF0aCA9IFx1MDAyNnN0YWNrLVx1MDAzZXBhdGhba107XG4rXHRcdHN3aXRjaCAocGF0aC1cdTAwM2V0eXBlKSB7XG4rXHRcdGNhc2UgREVWX1BBVEhfVFVOOlxuK1x0XHRcdGRzdF9yZWxlYXNlKHBhdGgtXHUwMDNldHVuLmRzdCk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UpO1xuK1xuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4ge1xuQEAgLTc2NiwxNSArNzg1LDE2IEBAIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRsYXN0X2RldiA9IGN0eC5kZXY7XG4gXHRcdHBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spO1xuIFx0XHRpZiAoIXBhdGgpXG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0bWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7XG4gXHRcdHJldCA9IGN0eC5kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBwYXRoKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuIFxuK1x0XHRzdGFjay1cdTAwM2VudW1fcGF0aHMrKztcbiBcdFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHguZGV2KSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuIFx0fVxuIFxuIFx0aWYgKCFjdHguZGV2KVxuQEAgLTc4MiwxMSArODAyLDE3IEBAIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFxuIFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4gXHRpZiAoIXBhdGgpXG4tXHRcdHJldHVybiAtMTtcbitcdFx0Z290byBlcnJfb3V0O1xuK1xuIFx0cGF0aC1cdTAwM2V0eXBlID0gREVWX1BBVEhfRVRIRVJORVQ7XG4gXHRwYXRoLVx1MDAzZWRldiA9IGN0eC5kZXY7XG4rXHRzdGFjay1cdTAwM2VudW1fcGF0aHMrKztcbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbitlcnJfb3V0OlxuK1x0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RhY2spO1xuK1xuK1x0cmV0dXJuIC0xO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9kc2EvdXNlci5jIGIvbmV0L2RzYS91c2VyLmNcbmluZGV4IDAzYzdhZjZhYmUxOGEuLjQwNjVjNmVlNmZjNjggMTAwNjQ0XG4tLS0gYS9uZXQvZHNhL3VzZXIuY1xuKysrIGIvbmV0L2RzYS91c2VyLmNcbkBAIC0yNTQ3LDE0ICsyNTQ3LDEzIEBAIHN0YXRpYyBpbnQgZHNhX3VzZXJfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4ge1xuIFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQoY3R4LVx1MDAzZWRldik7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCA9IGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApO1xuIFx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBkcC1cdTAwM2VjcHVfZHA7XG4gXG4gXHRwYXRoLVx1MDAzZWRldiA9IGN0eC1cdTAwM2VkZXY7XG4gXHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9EU0E7XG4gXHRwYXRoLVx1MDAzZWRzYS5wcm90byA9IGNwdV9kcC1cdTAwM2V0YWdfb3BzLVx1MDAzZXByb3RvO1xuIFx0cGF0aC1cdTAwM2Vkc2EucG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuLVx0Y3R4LVx1MDAzZWRldiA9IGNvbmR1aXQ7XG4rXHRjdHgtXHUwMDNlZGV2ID0gTlVMTDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmNcbmluZGV4IDA4MzFmNmI4MTcxN2MuLmZiN2Q5NmY5OWIwNmIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcGlwLmNcbisrKyBiL25ldC9pcHY0L2lwaXAuY1xuQEAgLTM3NiwxMCArMzc2LDEwIEBAIHN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0cGF0aC1cdTAwM2V0dW4uc3JjX3Y0LnNfYWRkciA9IHRpcGgtXHUwMDNlc2FkZHI7XG4gXHRwYXRoLVx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gdGlwaC1cdTAwM2VkYWRkcjtcbiBcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQO1xuK1x0cGF0aC1cdTAwM2V0dW4uZHN0ID0gXHUwMDI2cnQtXHUwMDNlZHN0O1xuIFx0cGF0aC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFxuIFx0Y3R4LVx1MDAzZWRldiA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4tXHRpcF9ydF9wdXQocnQpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmNcbmluZGV4IDQ2MjZkYzQ2ODA4ZjMuLjU5ZWM0NjVhOWRmOTggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuY1xuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9pcHY0L25mX3JlamVjdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaFx1MDAzZVxuQEAgLTI2Myw2ICsyNjQsNyBAQCBzdGF0aWMgaW50IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbilcbiBcdGlmICghZHN0KVxuIFx0XHRyZXR1cm4gLTE7XG4gXG4rXHRza2JfZHN0X2Ryb3Aoc2tiX2luKTtcbiBcdHNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0yNzksNyArMjgxLDcgQEAgdm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxuIFx0aWYgKCFvdGgpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghc2tiX2RzdChvbGRza2IpIFx1MDAyNlx1MDAyNiBuZl9yZWplY3RfZmlsbF9za2JfZHN0KG9sZHNrYikgXHUwMDNjIDApXG4rXHRpZiAoIXNrYl92YWxpZF9kc3Qob2xkc2tiKSBcdTAwMjZcdTAwMjYgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChvbGRza2IpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAoc2tiX3J0YWJsZShvbGRza2IpLVx1MDAzZXJ0X2ZsYWdzIFx1MDAyNiAoUlRDRl9CUk9BRENBU1QgfCBSVENGX01VTFRJQ0FTVCkpXG5AQCAtMzUyLDcgKzM1NCw3IEBAIHZvaWQgbmZfc2VuZF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCBjb2RlLCBpbnQgaG9vaylcbiBcdGlmIChpcGgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghc2tiX2RzdChza2JfaW4pIFx1MDAyNlx1MDAyNiBuZl9yZWplY3RfZmlsbF9za2JfZHN0KHNrYl9pbikgXHUwMDNjIDApXG4rXHRpZiAoIXNrYl92YWxpZF9kc3Qoc2tiX2luKSBcdTAwMjZcdTAwMjYgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChza2JfaW4pIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiX2luKSB8fFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggOTdjM2Y2MWQ2MjdiYi4uZDgwMDIwYmMyNjIwZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5AQCAtMTg3MCwxMiArMTg3MCwxNCBAQCBzdGF0aWMgaW50IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0cGF0aC1cdTAwM2V0dW4uc3JjX3Y2ID0gZmw2LnNhZGRyO1xuIFx0XHRwYXRoLVx1MDAzZXR1bi5kc3RfdjYgPSBmbDYuZGFkZHI7XG4gXHRcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2O1xuK1x0XHRwYXRoLVx1MDAzZXR1bi5kc3QgPSBkc3Q7XG4gXHRcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcdFx0Y3R4LVx1MDAzZWRldiA9IGRzdC1cdTAwM2VkZXY7XG4gXHR9XG4gXG4gXHRlcnIgPSBkc3QtXHUwMDNlZXJyb3I7XG4tXHRkc3RfcmVsZWFzZShkc3QpO1xuK1x0aWYgKGVycilcbitcdFx0ZHN0X3JlbGVhc2UoZHN0KTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmNcbmluZGV4IGVmNWI3ZTg1Y2ZmYTguLjA3Y2RhYTEwZGEwZDAgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuY1xuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2NoZWNrc3VtLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfcmVqZWN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oXHUwMDNlXG5AQCAtMzA0LDYgKzMwNSw3IEBAIHN0YXRpYyBpbnQgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbilcbiBcdGlmICghZHN0KVxuIFx0XHRyZXR1cm4gLTE7XG4gXG4rXHRza2JfZHN0X2Ryb3Aoc2tiX2luKTtcbiBcdHNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzYsMTAgKzMzOCwxMiBAQCB2b2lkIG5mX3NlbmRfcmVzZXQ2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxuIFx0Zmw2LmZsNl9zcG9ydCA9IG90Y3BoLVx1MDAzZWRlc3Q7XG4gXHRmbDYuZmw2X2Rwb3J0ID0gb3RjcGgtXHUwMDNlc291cmNlO1xuIFxuLVx0aWYgKCFza2JfZHN0KG9sZHNrYikpIHtcbitcdGlmICghc2tiX3ZhbGlkX2RzdChvbGRza2IpKSB7XG4gXHRcdG5mX2lwNl9yb3V0ZShuZXQsIFx1MDAyNmRzdCwgZmxvd2k2X3RvX2Zsb3dpKFx1MDAyNmZsNiksIGZhbHNlKTtcbiBcdFx0aWYgKCFkc3QpXG4gXHRcdFx0cmV0dXJuO1xuK1xuK1x0XHRza2JfZHN0X2Ryb3Aob2xkc2tiKTtcbiBcdFx0c2tiX2RzdF9zZXQob2xkc2tiLCBkc3QpO1xuIFx0fVxuIFxuQEAgLTQ0MCw3ICs0NDQsNyBAQCB2b2lkIG5mX3NlbmRfdW5yZWFjaDYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLFxuIFx0aWYgKGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9PVVQgXHUwMDI2XHUwMDI2IHNrYl9pbi1cdTAwM2VkZXYgPT0gTlVMTClcbiBcdFx0c2tiX2luLVx1MDAzZWRldiA9IG5ldC1cdTAwM2Vsb29wYmFja19kZXY7XG4gXG4tXHRpZiAoIXNrYl9kc3Qoc2tiX2luKSBcdTAwMjZcdTAwMjYgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc2tiX2luKSBcdTAwM2MgMClcbitcdGlmICghc2tiX3ZhbGlkX2RzdChza2JfaW4pIFx1MDAyNlx1MDAyNiBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChza2JfaW4pIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpY21wdjZfc2VuZChza2JfaW4sIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXG5pbmRleCBlOWVhNmQ5NDY2ZTc0Li44NTQ4N2Y5MmFmNTA2IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xuQEAgLTE1OCw2ICsxNTgsOCBAQCBzdGF0aWMgYm9vbCBnZXRfY3Rfb3JfdHVwbGVfZnJvbV9za2Ioc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGZvdW5kX2N0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTtcbitcdCp0dXBsZSA9IGZvdW5kX2N0LVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlO1xuK1x0KnpvbmUgPSBuZl9jdF96b25lKGZvdW5kX2N0KTtcbiBcdCpyZWZjb3VudGVkID0gdHJ1ZTtcbiBcdCpjdCA9IGZvdW5kX2N0O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbmluZGV4IGNlZWVkM2Q3ZmU1MjAuLjcyM2U5NDZhNzhmNDAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbkBAIC0xMjgxLDggKzEyODEsOSBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0aWYgKGN0LVx1MDAzZXByb3RvLnRjcC5yZXRyYW5zIFx1MDAzZT0gdG4tXHUwMDNldGNwX21heF9yZXRyYW5zIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHRpbWVvdXRzW25ld19zdGF0ZV0gXHUwMDNlIHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfUkVUUkFOU10pXG4gXHRcdHRpbWVvdXQgPSB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1JFVFJBTlNdO1xuLVx0ZWxzZSBpZiAodW5saWtlbHkoaW5kZXggPT0gVENQX1JTVF9TRVQpKVxuLVx0XHR0aW1lb3V0ID0gdGltZW91dHNbVENQX0NPTk5UUkFDS19DTE9TRV07XG4rXHRlbHNlIGlmICh1bmxpa2VseShpbmRleCA9PSBUQ1BfUlNUX1NFVCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgIG5ld19zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEKSlcbitcdFx0dGltZW91dCA9IHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfVU5BQ0tdO1xuIFx0ZWxzZSBpZiAoKGN0LVx1MDAzZXByb3RvLnRjcC5zZWVuWzBdLmZsYWdzIHwgY3QtXHUwMDNlcHJvdG8udGNwLnNlZW5bMV0uZmxhZ3MpIFx1MDAyNlxuIFx0XHQgSVBfQ1RfVENQX0ZMQUdfREFUQV9VTkFDS05PV0xFREdFRCBcdTAwMjZcdTAwMjZcbiBcdFx0IHRpbWVvdXRzW25ld19zdGF0ZV0gXHUwMDNlIHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfVU5BQ0tdKVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXG5pbmRleCA5OGMwM2I0ODdmNTIxLi41NjIxOWIwMmUxMjI3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuQEAgLTQyLDggKzQyLDcgQEAgc3RhdGljIGJvb2wgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4tXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSxcbitzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdFx0XHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG5AQCAtNzYsMTQgKzc1LDE0IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4gfVxuIFxuIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcbi1cdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbmRldjtcbi1cdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXRkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0c3RydWN0IGlkIHtcbiBcdFx0X191MTZcdGlkO1xuIFx0XHRfX2JlMTZcdHByb3RvO1xuIFx0fSBlbmNhcFtORl9GTE9XX1RBQkxFX0VOQ0FQX01BWF07XG4gXHR1OCBudW1fZW5jYXBzO1xuIFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWwgdHVuO1xuK1x0c3RydWN0IGRzdF9lbnRyeSAqdHVuX2RzdDtcbiBcdHU4IG51bV90dW5zO1xuIFx0dTggaW5ncmVzc192bGFucztcbiBcdHU4IGhfc291cmNlW0VUSF9BTEVOXTtcbkBAIC05Miw5ICs5MSwxMiBAQCBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XG4gXHRlbnVtIGZsb3dfb2ZmbG9hZF94bWl0X3R5cGUgeG1pdF90eXBlO1xuIH07XG4gXG4tc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbitzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQpO1xuK1xuK3N0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyAqaW5mbyxcbi1cdFx0XHQgICAgIHVuc2lnbmVkIGNoYXIgKmhhLCBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG4rXHRcdFx0ICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4gXHRpbnQgaTtcbkBAIC0xMDksMjkgKzExMSwyNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxuIFx0XHRjYXNlIERFVl9QQVRIX1ZMQU46XG4gXHRcdGNhc2UgREVWX1BBVEhfUFBQT0U6XG4gXHRcdGNhc2UgREVWX1BBVEhfVFVOOlxuLVx0XHRcdGluZm8tXHUwMDNlaW5kZXYgPSBwYXRoLVx1MDAzZWRldjtcbitcdFx0XHRpbmZvLVx1MDAzZWRldiA9IHBhdGgtXHUwMDNlZGV2O1xuIFx0XHRcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cdTAwM2VoX3NvdXJjZSkpXG4gXHRcdFx0XHRtZW1jcHkoaW5mby1cdTAwM2VoX3NvdXJjZSwgcGF0aC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbiBcbi1cdFx0XHRpZiAocGF0aC1cdTAwM2V0eXBlID09IERFVl9QQVRIX0VUSEVSTkVUKVxuK1x0XHRcdGlmIChwYXRoLVx1MDAzZXR5cGUgPT0gREVWX1BBVEhfRVRIRVJORVQgfHxcbitcdFx0XHQgICAgcGF0aC1cdTAwM2V0eXBlID09IERFVl9QQVRIX0RTQSlcbiBcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdGlmIChwYXRoLVx1MDAzZXR5cGUgPT0gREVWX1BBVEhfRFNBKSB7XG4tXHRcdFx0XHRpID0gc3RhY2stXHUwMDNlbnVtX3BhdGhzO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuIFxuIFx0XHRcdC8qIERFVl9QQVRIX1ZMQU4sIERFVl9QQVRIX1BQUE9FIGFuZCBERVZfUEFUSF9UVU4gKi9cbiBcdFx0XHRpZiAocGF0aC1cdTAwM2V0eXBlID09IERFVl9QQVRIX1RVTikge1xuIFx0XHRcdFx0aWYgKGluZm8tXHUwMDNlbnVtX3R1bnMpXG4tXHRcdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHRcdFx0Z290byBlcnJfb3V0O1xuIFxuIFx0XHRcdFx0aW5mby1cdTAwM2V0dW4uc3JjX3Y2ID0gcGF0aC1cdTAwM2V0dW4uc3JjX3Y2O1xuIFx0XHRcdFx0aW5mby1cdTAwM2V0dW4uZHN0X3Y2ID0gcGF0aC1cdTAwM2V0dW4uZHN0X3Y2O1xuIFx0XHRcdFx0aW5mby1cdTAwM2V0dW4ubDNfcHJvdG8gPSBwYXRoLVx1MDAzZXR1bi5sM19wcm90bztcbitcdFx0XHRcdGluZm8tXHUwMDNldHVuX2RzdCA9IHBhdGgtXHUwMDNldHVuLmRzdDtcbiBcdFx0XHRcdGluZm8tXHUwMDNlbnVtX3R1bnMrKztcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0aWYgKGluZm8tXHUwMDNlbnVtX2VuY2FwcyBcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxuLVx0XHRcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNlZW5jYXBbaW5mby1cdTAwM2VudW1fZW5jYXBzXS5pZCA9XG4gXHRcdFx0XHRcdHBhdGgtXHUwMDNlZW5jYXAuaWQ7XG5AQCAtMTUyLDEzICsxNTIsMTMgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHRzd2l0Y2ggKHBhdGgtXHUwMDNlYnJpZGdlLnZsYW5fbW9kZSkge1xuIFx0XHRcdGNhc2UgREVWX1BBVEhfQlJfVkxBTl9VTlRBR19IVzpcbiBcdFx0XHRcdGlmIChpbmZvLVx1MDAzZW51bV9lbmNhcHMgPT0gMClcbi1cdFx0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZWluZ3Jlc3NfdmxhbnMgfD0gQklUKGluZm8tXHUwMDNlbnVtX2VuY2FwcyAtIDEpO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0Y2FzZSBERVZfUEFUSF9CUl9WTEFOX1RBRzpcbiBcdFx0XHRcdGlmIChpbmZvLVx1MDAzZW51bV9lbmNhcHMgXHUwMDNlPSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWClcbi1cdFx0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZWVuY2FwW2luZm8tXHUwMDNlbnVtX2VuY2Fwc10uaWQgPSBwYXRoLVx1MDAzZWJyaWRnZS52bGFuX2lkO1xuIFx0XHRcdFx0aW5mby1cdTAwM2VlbmNhcFtpbmZvLVx1MDAzZW51bV9lbmNhcHNdLnByb3RvID0gcGF0aC1cdTAwM2VicmlkZ2Uudmxhbl9wcm90bztcbkBAIC0xNjYsNyArMTY2LDcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgREVWX1BBVEhfQlJfVkxBTl9VTlRBRzpcbiBcdFx0XHRcdGlmIChpbmZvLVx1MDAzZW51bV9lbmNhcHMgPT0gMClcbi1cdFx0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZW51bV9lbmNhcHMtLTtcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTE3NiwxNiArMTc2LDIyIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0aW5mby1cdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbiBcdFx0fVxuIFx0fVxuLVx0aW5mby1cdTAwM2VvdXRkZXYgPSBpbmZvLVx1MDAzZWluZGV2O1xuIFxuLVx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShpbmZvLVx1MDAzZWluZGV2KSlcbitcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChcdTAwMjZmdC1cdTAwM2VkYXRhKSBcdTAwMjZcdTAwMjZcbitcdCAgICBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGluZm8tXHUwMDNlZGV2KSlcbiBcdFx0aW5mby1cdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XG4gXG4rXHRpZiAoIW5mdF9mbG93dGFibGVfZmluZF9kZXYoaW5mby1cdTAwM2VkZXYsIGZ0KSlcbitcdFx0Z290byBlcnJfb3V0O1xuK1xuIFx0cmV0dXJuIDA7XG4rZXJyX291dDpcbitcdGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0YWNrKTtcbitcbitcdHJldHVybiAtMTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTIwNSw0NCArMjExLDYgQEAgc3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIGZvdW5kO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4tXHRcdFx0XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVubmVsICp0dW4sXG4tXHRcdFx0XHRcdHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbi1cdFx0XHRcdFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcilcbi17XG4tXHRzdHJ1Y3QgZHN0X2VudHJ5ICpjdXJfZHN0ID0gcm91dGUtXHUwMDNldHVwbGVbZGlyXS5kc3Q7XG4tXHRzdHJ1Y3QgZHN0X2VudHJ5ICp0dW5fZHN0ID0gTlVMTDtcbi1cdHN0cnVjdCBmbG93aSBmbCA9IHt9O1xuLVxuLVx0c3dpdGNoIChuZnRfcGYocGt0KSkge1xuLVx0Y2FzZSBORlBST1RPX0lQVjQ6XG4tXHRcdGZsLnUuaXA0LmRhZGRyID0gdHVuLVx1MDAzZWRzdF92NC5zX2FkZHI7XG4tXHRcdGZsLnUuaXA0LnNhZGRyID0gdHVuLVx1MDAzZXNyY192NC5zX2FkZHI7XG4tXHRcdGZsLnUuaXA0LmZsb3dpNF9paWYgPSBuZnRfaW4ocGt0KS1cdTAwM2VpZmluZGV4O1xuLVx0XHRmbC51LmlwNC5mbG93aTRfZHNjcCA9IGlwNGhfZHNjcChpcF9oZHIocGt0LVx1MDAzZXNrYikpO1xuLVx0XHRmbC51LmlwNC5mbG93aTRfbWFyayA9IHBrdC1cdTAwM2Vza2ItXHUwMDNlbWFyaztcbi1cdFx0ZmwudS5pcDQuZmxvd2k0X2ZsYWdzID0gRkxPV0lfRkxBR19BTllTUkM7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBORlBST1RPX0lQVjY6XG4tXHRcdGZsLnUuaXA2LmRhZGRyID0gdHVuLVx1MDAzZWRzdF92Njtcbi1cdFx0ZmwudS5pcDYuc2FkZHIgPSB0dW4tXHUwMDNlc3JjX3Y2O1xuLVx0XHRmbC51LmlwNi5mbG93aTZfaWlmID0gbmZ0X2luKHBrdCktXHUwMDNlaWZpbmRleDtcbi1cdFx0ZmwudS5pcDYuZmxvd2xhYmVsID0gaXA2X2Zsb3dpbmZvKGlwdjZfaGRyKHBrdC1cdTAwM2Vza2IpKTtcbi1cdFx0ZmwudS5pcDYuZmxvd2k2X21hcmsgPSBwa3QtXHUwMDNlc2tiLVx1MDAzZW1hcms7XG4tXHRcdGZsLnUuaXA2LmZsb3dpNl9mbGFncyA9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdG5mX3JvdXRlKG5mdF9uZXQocGt0KSwgXHUwMDI2dHVuX2RzdCwgXHUwMDI2ZmwsIGZhbHNlLCBuZnRfcGYocGt0KSk7XG4tXHRpZiAoIXR1bl9kc3QpXG4tXHRcdHJldHVybiAtRU5PRU5UO1xuLVxuLVx0cm91dGUtXHUwMDNldHVwbGVbZGlyXS5kc3QgPSB0dW5fZHN0O1xuLVx0ZHN0X3JlbGVhc2UoY3VyX2RzdCk7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdFx0XHRcdHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbkBAIC0yNTUsMjggKzIyMywyNSBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0dW5zaWduZWQgY2hhciBoYVtFVEhfQUxFTl07XG4gXHRpbnQgaTtcbiBcbi1cdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHJvdXRlLCBkc3QsIGN0LCBkaXIsIGhhLCBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbi1cdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIFx1MDAyNmZ0LVx1MDAzZWRhdGEpIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gLUVOT0VOVDtcbi1cbi1cdGlmICghbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihpbmZvLmluZGV2LCBmdCkpXG4rXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChkc3QsIGN0LCBkaXIsIGhhLCBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbitcdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIGZ0KSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4tXHRpZiAoaW5mby5vdXRkZXYpXG4tXHRcdHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0ub3V0LmlmaW5kZXggPSBpbmZvLm91dGRldi1cdTAwM2VpZmluZGV4O1xuK1x0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4uaWZpbmRleCA9IGluZm8uZGV2LVx1MDAzZWlmaW5kZXg7XG4rXHRyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLm91dC5pZmluZGV4ID0gaW5mby5kZXYtXHUwMDNlaWZpbmRleDtcbiBcbi1cdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLmlmaW5kZXggPSBpbmZvLmluZGV2LVx1MDAzZWlmaW5kZXg7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbmZvLm51bV9lbmNhcHM7IGkrKykge1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5lbmNhcFtpXS5pZCA9IGluZm8uZW5jYXBbaV0uaWQ7XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLmVuY2FwW2ldLnByb3RvID0gaW5mby5lbmNhcFtpXS5wcm90bztcbiBcdH1cbiBcbi1cdGlmIChpbmZvLm51bV90dW5zIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKHBrdCwgXHUwMDI2aW5mby50dW4sIHJvdXRlLCBkaXIpKSB7XG4rXHRpZiAoaW5mby5udW1fdHVucykge1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uc3JjX3Y2ID0gaW5mby50dW4uZHN0X3Y2O1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uZHN0X3Y2ID0gaW5mby50dW4uc3JjX3Y2O1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4ubDNfcHJvdG8gPSBpbmZvLnR1bi5sM19wcm90bztcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4ubnVtX3R1bnMgPSBpbmZvLm51bV90dW5zO1xuK1x0XHRkc3RfcmVsZWFzZShyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdCk7XG4rXHRcdHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0uZHN0ID0gaW5mby50dW5fZHN0O1xuIFx0fVxuIFxuIFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4ubnVtX2VuY2FwcyA9IGluZm8ubnVtX2VuY2FwcztcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmNcbmluZGV4IDBhNDNlMDc4N2E2ODguLjAxY2ZiYWEzNjUyNTAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuY1xuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwX3N0YXRlcy5oXHUwMDNlIC8qIGZvciBUQ1BfVElNRV9XQUlUICovXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaFx1MDAzZVxuQEAgLTI3OSwxMSArMjgwLDEyIEBAIHN0YXRpYyBib29sIG5mdF9tZXRhX2dldF9ldmFsX2lmbmFtZShlbnVtIG5mdF9tZXRhX2tleXMga2V5LCB1MzIgKmRlc3QsXG4gc3RhdGljIG5vaW5saW5lIGJvb2xcbiBuZnRfbWV0YV9nZXRfZXZhbF9ydGNsYXNzaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpkZXN0KVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3Qoc2tiKTtcbitcdGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcbiBcbi1cdGlmICghZHN0KVxuK1x0aWYgKCFza2JfdmFsaWRfZHN0KHNrYikpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdGRzdCA9IHNrYl9kc3Qoc2tiKTtcbiBcdCpkZXN0ID0gZHN0LVx1MDAzZXRjbGFzc2lkO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3J0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9ydC5jXG5pbmRleCBhZWIwMDk0ZWFmZDgwLi44NDFjODYzYTA4ZGI1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcnQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfcnQuY1xuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcm91dGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcdTAwM2VcbkBAIC01OSwxMCArNjAsMTEgQEAgdm9pZCBuZnRfcnRfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0dTMyICpkZXN0ID0gXHUwMDI2cmVncy1cdTAwM2VkYXRhW3ByaXYtXHUwMDNlZHJlZ107XG4gXHRjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XG4gXG4tXHRkc3QgPSBza2JfZHN0KHNrYik7XG4tXHRpZiAoIWRzdClcbitcdGlmICghc2tiX3ZhbGlkX2RzdChza2IpKVxuIFx0XHRnb3RvIGVycjtcbiBcbitcdGRzdCA9IHNrYl9kc3Qoc2tiKTtcbitcbiBcdHN3aXRjaCAocHJpdi1cdTAwM2VrZXkpIHtcbiAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX0NMQVNTSURcbiBcdGNhc2UgTkZUX1JUX0NMQVNTSUQ6XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jIGIvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jXG5pbmRleCA4Y2VjNDMwNjQzMTkyLi5jOGJiYTY5N2Y5OTNhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmNcbkBAIC0xMiw2ICsxMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4gXG5AQCAtMTc3LDkgKzE3OCwxNSBAQCBzdGF0aWMgdm9pZCBuZnRfeGZybV9nZXRfZXZhbF9vdXQoY29uc3Qgc3RydWN0IG5mdF94ZnJtICpwcml2LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3QocGt0LVx1MDAzZXNrYik7XG4rXHRjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XG4gXHRpbnQgaTtcbiBcbitcdGlmICghc2tiX3ZhbGlkX2RzdChwa3QtXHUwMDNlc2tiKSkge1xuK1x0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0ZHN0ID0gc2tiX2RzdChwa3QtXHUwMDNlc2tiKTtcbiBcdGZvciAoaSA9IDA7IGRzdCBcdTAwMjZcdTAwMjYgZHN0LVx1MDAzZXhmcm07XG4gXHQgICAgIGRzdCA9ICgoY29uc3Qgc3RydWN0IHhmcm1fZHN0ICopZHN0KS1cdTAwM2VjaGlsZCwgaSsrKSB7XG4gXHRcdGlmIChpIFx1MDAzYyBwcml2LVx1MDAzZXNwbnVtKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTQ6NDAuOTYwOTA2NTcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0Mjc4NTY1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmtpbmcgU3Vic3lzdGVtIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyBhbmQgaXQncyB0b3VjaGluZyBhIHdob2xlIGJ1bmNoIG9mIGZpbGVzIHJlbGF0ZWQgdG8gbmV0d29ya2luZyDigJMgc3BlY2lmaWNhbGx5IGFyb3VuZCBgbmV0X2RldmljZV9wYXRoX3N0YWNrYCwgdGhlIGZvcndhcmQgcGF0aCBmaWxsaW5nLCBjb25udHJhY2ssIGZsb3cgdGFibGUgaW50ZXJhY3Rpb25zLCBhbmQgc2tiIGRlc3RpbmF0aW9uIHZhbGlkaXR5IGNoZWNrcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgYXJlIG1vc3RseSBmdW5jdGlvbmFsIGNoYW5nZXMgYWltZWQgYXQgYWRkcmVzc2luZyBtZW1vcnkgbGVha3MgcmVsYXRlZCB0byB0aGUgYGRzdF9yZWxlYXNlYCBhbmQgdHdlYWtpbmcgdGhlIGNvbm50cmFjayBhbmQgZmxvd3RhYmxlIGJlaGF2aW9ycy4gVGhhdCdzIGdvb2QsIGltcG9ydGFudCBzdHVmZi5cblxuRmlyc3QsIEkgc2VlIHNvbWUgY29uc2lzdGVudCBjaGFuZ2VzOlxuKiAgIEFkZGVkIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAgY2FsbHMgaW4gZXJyb3IgcGF0aHMgaW4gc2V2ZXJhbCBkcml2ZXJzLCBsaWtlIGFpcm9oYSBhbmQgbWVkaWF0ZWsuXG4qICAgVGhlIGBuZXRfZGV2aWNlX3BhdGhgIHN0cnVjdCBpbiBgbmV0ZGV2aWNlLmhgIGhhcyBhIG5ldyBgZHN0YCBmaWVsZCB3aXRoaW4gdGhlIGB0dW5gIHVuaW9uLCBhbmQgdGhlIG5ldyBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VgIGZ1bmN0aW9uIGlzIGRlY2xhcmVkLlxuKiAgIEkgc2VlIGEgbmV3IGltcGxlbWVudGF0aW9uIGZvciBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VgIGluIGBkZXYuY2AsIHdoaWNoIHNwZWNpZmljYWxseSByZWxlYXNlcyB0aGUgYGRzdGAgZW50cnkgZm9yIHRoZSB0dW5uZWxpbmcgY2FzZSBhbmQgbW9kaWZpY2F0aW9ucyB0byB0aGUgbWFpbiBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBmdW5jdGlvbiB0byBjYWxsIHRoZSByZWxlYXNlIGZ1bmN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuXG5cbkl0IGxvb2tzIGxpa2Ugd2UgYXJlIGNvcnJlY3RseSByZWxlYXNpbmcgYGRzdGAgb24gZXJyb3IsIHdoaWNoIHNob3VsZCByZWR1Y2UgcG90ZW50aWFsIG1lbW9yeSBsZWFrcy5cblxuQWxzbywgaXQgbG9va3MgbGlrZSBgZHNhX3VzZXJfZmlsbF9mb3J3YXJkX3BhdGhgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gc2V0IHRoZSBjb250ZXh0IGBkZXZgIG1lbWJlciB0byBOVUxMLCBhbmQgdGhlIHR1bm5lbGluZyBwYXRocyBpbiBJUHY0IGFuZCBJUHY2IGFyZSBub3cgc3RvcmluZyB0aGUgZGVzdGluYXRpb24gaW4gYHBhdGgtXHUwMDNldHVuLmRzdGAsIHJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IHJlbGVhc2luZyBpdCwgd2hpY2ggc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2UuXG5cblJlcGxhY2luZyBgIXNrYl9kc3Qoc2tiKWAgd2l0aCBgIXNrYl92YWxpZF9kc3Qoc2tiKWAgaXMgZ29vZC4gQWxzbywgaW4gdGhlIHJlamVjdCBjb2RlLCBzZXR0aW5nIGBza2JfZHN0X2Ryb3Aoc2tiKWAgcHJpb3IgdG8gYHNrYl9kc3Rfc2V0KHNrYiwgZHN0KWAgaXMgYWxzbyBpbXBvcnRhbnQuIFRoaXMgaW1wcm92ZXMgcm9idXN0bmVzcy5cblxuVGhlIENvbm50cmFjayBjaGFuZ2VzIHNlZW0gaW50ZXJlc3RpbmcuIEkgc2VlIGEgY2hhbmdlIHRvIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAsIHdoaWNoIGNvdWxkIGhhdmUgaW1wbGljYXRpb25zIG9uIHBlcmZvcm1hbmNlLiBUaGVyZSBpcyBhIGNoYW5nZSB0byBob3cgY29ubnRyYWNrIHR1cGxlcyBhcmUgYWNjZXNzZWQsIGFuZCBhIHRpbWVvdXQgY2hhbmdlIGFzIHdlbGwuXG5cbk5vdywgdGhlIGZsb3cgdGFibGUgc3R1ZmYgbG9va3MgdG8gaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIHN1cHBvcnQgdGhlIGNoYW5nZXMuIFRoZSByb3V0ZSBhcmd1bWVudCB3YXMgcmVtb3ZlZC4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYXJlIHRoZSBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIGFuZCBgbmZ0X2Rldl9wYXRoX2luZm9gLCBhbmQgbm93IHRoZSB0dW4gZGVzdGluYXRpb24gYGluZm8udHVuX2RzdGAgaXMgdXNlZC5cblxuR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMsIEknbSBnb2luZyB0byB3YW50IHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGVzZSBjb3JlIGZ1bmN0aW9ucy4gSSB3aWxsIG5lZWQgdG8gcmVhbGx5IGZvY3VzIG9uIHRoZSBjaGFuZ2VzIHJlbGF0aW5nIHRvIGVycm9yIGhhbmRsaW5nLCBuZXcgZnVuY3Rpb24gY2FsbHMsIGFuZCB0aGUgYWRkaXRpb24gb2YgY29ubnRyYWNrLlxuXG4qICAgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAsIHdoaWNoIGFyZSBjbGVhcmx5IGNlbnRyYWwuXG4qICAgYG5mdF9kZXZfZm9yd2FyZF9wYXRoYCBhbmQgYG5mdF9kZXZfcGF0aF9pbmZvYCwgYmVjYXVzZSBvZiB0aGVpciByb2xlIGluIHRoZSBmbG93IHRhYmxlIHBhdGguXG4qICAgVGhlIHJlamVjdGlvbiBmdW5jdGlvbiBjYWxscyBzdWNoIGFzIGBuZl9yZWplY3RfZmlsbF9za2JfZHN0YCBhbmQgYG5mX3NlbmRfcmVzZXRgLCBgbmZfc2VuZF91bnJlYWNoYC5cbiogICBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLCBhbmQgYGdldF9jdF9vcl90dXBsZV9mcm9tX3NrYmAsIGJlY2F1c2UgdGhpcyBpcyB0aGUgY29ubnRyYWNrIGZ1bmN0aW9uLlxuXG5JIHdhbnQgdG8gc2VlIHdoYXQgaXMgY2FsbGluZyBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLiBJJ2xsIHVzZSBncmVwIGZvciB0aGF0ISBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgdHVubmVsIHJvdXRlcyBhcmUgYmVpbmcgY2hvc2VuLiBMZXQgbWUgY2hlY2sgdGhlIGNhbGwgc2l0ZXMgZm9yIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjg1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE0OjUzLjM4ODc2NTIxOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI1MjMyMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9kZXZfZm9yd2FyZF9wYXRoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MTk3PXN0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMjEzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MjE0OnN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMTUtXFx0XFx0XFx0XFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yNjA9aW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMwMi1cXHRpZiAocm91dGUtXFx1MDAzZXR1cGxlW2Rpcl0ueG1pdF90eXBlXFx0PT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjMwMzpcXHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsIGRpciwgZnQpIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMwNC1cXHRcXHRnb3RvIGVycl9kc3RfcmVsZWFzZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzA2LVxcdGlmIChyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0ueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzozMDc6XFx0ICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgcm91dGUsIGN0LCAhZGlyLCBmdCkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzA4LVxcdFxcdGdvdG8gZXJyX2RzdF9yZWxlYXNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNDo1NS41MTQwMDQ5MDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzQ4ODExNTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTkZUIEZsb3cgUm91dGUqKlxuXG5Pa2F5LCBzbyB0aGUgYG5mdF9mbG93X3JvdXRlYCBmdW5jdGlvbi4gVGhhdCdzIG91ciBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgc3lzdGVtIGFjdHVhbGx5IHdvcmtzLCBhbmQgdGhhdCBtZWFucyB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aC4gVGhlcmVmb3JlLCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSAqZXZlcnkgc2luZ2xlKiBpbnN0YW5jZSB3aGVyZSBgbmZ0X2Zsb3dfcm91dGVgIGlzIGNhbGxlZC4gRmluZGluZyB0aG9zZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBjb250ZXh0IEkgbmVlZCB0byBncmFzcCB0aGUgbG9naWMgZmxvdy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hlcmUgaXQncyBiZWluZyB1c2VkLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGtleSB0byB1bnBhY2tpbmcgdGhlIGJlaGF2aW9yIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA4NiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE0OjU4LjI2MjgxODY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mzc0OTQ1MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Zsb3dfcm91dGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0yNDc9c3RydWN0IG5mdF9wa3RpbmZvO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MjQ4OmludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQ5LVxcdFxcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MjE0PXN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTI1OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjI2MDppbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTI2MS1cXHRcXHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMxNi19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzozMTc6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X2Zsb3dfcm91dGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NTA9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTEwOC1cXHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MTA5OlxcdGlmIChuZnRfZmxvd19yb3V0ZShwa3QsIGN0LCBcXHUwMDI2cm91dGUsIGRpciwgcHJpdi1cXHUwMDNlZmxvd3RhYmxlKSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTEwLVxcdFxcdGdvdG8gZXJyX2Zsb3dfcm91dGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjAwLjAwMDMxODEwNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MjcxNTcwNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqQW5hbHl6aW5nIEtleSBGdW5jdGlvbnMgaW4gdGhlIE5ldGZpbHRlciBGbG93IGFuZCBDb25uZWN0aW9uIFRyYWNraW5nIFBhdGgqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gaG93IHdlJ3JlIGhhbmRsaW5nIGZsb3cgdGFibGUgY2hhbmdlcywgYW5kIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIGlzIGNsZWFybHkgdGhlIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50IGhlcmUsIHRoZSBtYWluIGVudHJ5IGludG8gdGhlIG5ldyBmbG93IHRhYmxlIHBhdGguIEJ1dCBJIGNhbid0IGp1c3Qgc3RvcCB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSwgdG8gY29uc2lkZXIgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzLiBNeSBtaW5kIGlzIGp1bXBpbmcgYXJvdW5kIGZ1bmN0aW9ucywgc2VhcmNoaW5nIGZvciBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuXG5cbk5vdywgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YC4uLiB0aGF0J3MgYSAqY29yZSogZnVuY3Rpb24gd2l0aGluIGNvbm50cmFjaywgcmlnaHQ/IEFueSBjaGFuZ2UgaGVyZSBjb3VsZCBiZS4uLiBzaWduaWZpY2FudC4gSXQncyBhIGZvdW5kYXRpb25hbCBlbGVtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGF0aHMgaW50ZXJhY3QuXG5cbkFuZCB0aGVuIHRoZXJlJ3MgYG5mX3JlamVjdF9maWxsX3NrYl9kc3RgLiBUaGF04oCZcyBjYWxsZWQgZnJvbSBgbmZfc2VuZF9yZXNldGAgYW5kIGBuZl9zZW5kX3VucmVhY2hgLiBUaGVzZSBmdW5jdGlvbnMgaGFuZGxlIElDTVAgcmVzcG9uc2VzIHRvIGRyb3BwZWQgcGFja2V0cy4gSXMgdGhlcmUgYSBkZXBlbmRlbmN5IHRoZXJlPyBUaGlzIGxpa2VseSBoYXMgdG8gYmUgY2hlY2tlZCwgYXMgdGhpcyBjb3VsZCBoYXZlIHRoZSBwb3RlbnRpYWwgZm9yIGEgbG90IG9mIGNvbXBsZXhpdHkuIFRoZSBwYXRoIGZvcndhcmQgaGFzIHRvIGJlIGNsZWFyLlxuXG5TbywgSSdtIGFscmVhZHkgYXNraW5nIG15c2VsZiBob3cgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBmdW5jdGlvbnMgd29yay4gSSBuZWVkIHRvIGtlZXAgdHJhY2luZyB0aGVzZSByZWxhdGlvbnNoaXBzLCB0aGlua2luZyBhYm91dCBob3cgY2hhbmdlcyBpbiBvbmUgcGxhY2UgbWlnaHQgaW5mbHVlbmNlIG90aGVycywgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBgbmZfc2VuZF9yZXNldGAgaXRzZWxmLi4uIHdoYXQncyBpdHMgcm9sZT8gVGhpcyBpcyB3aGVyZSBJIGFtIHJpZ2h0IG5vdywgZGlnZ2luZyBpbiBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzczMiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjA0LjcyNzQ3ODY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDQ5NTUwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfc2VuZF9yZXNldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9yZWplY3QuaD0xMD12b2lkIG5mX3NlbmRfdW5yZWFjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgY29kZSwgaW50IGhvb2spO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX3JlamVjdC5oOjExOnZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICosIHN0cnVjdCBza19idWZmICpvbGRza2IsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjQvbmZfcmVqZWN0LmgtMTItXFx0XFx0ICAgaW50IGhvb2spO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjYvbmZfcmVqZWN0Lmg9OD12b2lkIG5mX3NlbmRfdW5yZWFjaDYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCB1bnNpZ25lZCBjaGFyIGNvZGUsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjYvbmZfcmVqZWN0LmgtOS1cXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjYvbmZfcmVqZWN0Lmg6MTA6dm9pZCBuZl9zZW5kX3Jlc2V0NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9yZWplY3QuaC0xMS1cXHRcXHQgICAgaW50IGhvb2spO1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYz0zMT1yZWplY3RfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYy01OC1cXHRjYXNlIElQVF9UQ1BfUkVTRVQ6XFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYzo1OTpcXHRcXHRuZl9zZW5kX3Jlc2V0KHh0X25ldChwYXIpLCBwYXItXFx1MDAzZXN0YXRlLVxcdTAwM2Vzaywgc2tiLCBob29rKTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jLTYwLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MjU2PXN0YXRpYyBpbnQgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMjcyLS8qIFNlbmQgUlNUIHJlcGx5ICovXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM6MjczOnZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0yNzQtXFx0XFx0ICAgaW50IGhvb2spXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zNDUtfVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jOjM0NjpFWFBPUlRfU1lNQk9MX0dQTChuZl9zZW5kX3Jlc2V0KTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zNDctXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY0LmM9MTk9c3RhdGljIHZvaWQgbmZ0X3JlamVjdF9pcHY0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jLTI5LVxcdGNhc2UgTkZUX1JFSkVDVF9UQ1BfUlNUOlxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjQuYzozMDpcXHRcXHRuZl9zZW5kX3Jlc2V0KG5mdF9uZXQocGt0KSwgbmZ0X3NrKHBrdCksIHBrdC1cXHUwMDNlc2tiLFxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjQuYy0zMS1cXHRcXHRcXHQgICAgICBuZnRfaG9vayhwa3QpKTtcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jPTM1PXJlamVjdF90ZzYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMtNjMtXFx0Y2FzZSBJUDZUX1RDUF9SRVNFVDpcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9SRUpFQ1QuYzo2NDpcXHRcXHRuZl9zZW5kX3Jlc2V0NihuZXQsIHBhci1cXHUwMDNlc3RhdGUtXFx1MDAzZXNrLCBza2IsIHh0X2hvb2tudW0ocGFyKSk7XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMtNjUtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYz0yOTc9c3RhdGljIGludCBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtMzEyLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jOjMxMzp2b2lkIG5mX3NlbmRfcmVzZXQ2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jLTMxNC1cXHRcXHQgICAgaW50IGhvb2spXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy00MTMtfVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jOjQxNDpFWFBPUlRfU1lNQk9MX0dQTChuZl9zZW5kX3Jlc2V0Nik7XFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtNDE1LVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2Ni5jPTE5PXN0YXRpYyB2b2lkIG5mdF9yZWplY3RfaXB2Nl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjYuYy0zMC1cXHRjYXNlIE5GVF9SRUpFQ1RfVENQX1JTVDpcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY2LmM6MzE6XFx0XFx0bmZfc2VuZF9yZXNldDYobmZ0X25ldChwa3QpLCBuZnRfc2socGt0KSwgcGt0LVxcdTAwM2Vza2IsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2Ni5jLTMyLVxcdFxcdFxcdCAgICAgICBuZnRfaG9vayhwa3QpKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pbmV0LmM9MTc9c3RhdGljIHZvaWQgbmZ0X3JlamVjdF9pbmV0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcmVqZWN0X2luZXQuYy0zMC1cXHRcXHRjYXNlIE5GVF9SRUpFQ1RfVENQX1JTVDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaW5ldC5jOjMxOlxcdFxcdFxcdG5mX3NlbmRfcmVzZXQobmZ0X25ldChwa3QpLCBuZnRfc2socGt0KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaW5ldC5jLTMyLVxcdFxcdFxcdFxcdCAgICAgIHBrdC1cXHUwMDNlc2tiLCBuZnRfaG9vayhwa3QpKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pbmV0LmMtNDctXFx0XFx0Y2FzZSBORlRfUkVKRUNUX1RDUF9SU1Q6XFxubmV0L25ldGZpbHRlci9uZnRfcmVqZWN0X2luZXQuYzo0ODpcXHRcXHRcXHRuZl9zZW5kX3Jlc2V0NihuZnRfbmV0KHBrdCksIG5mdF9zayhwa3QpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pbmV0LmMtNDktXFx0XFx0XFx0XFx0ICAgICAgIHBrdC1cXHUwMDNlc2tiLCBuZnRfaG9vayhwa3QpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTU6MDYuMTcyNDM4NjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk1NDkyMTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTmV0ZmlsdGVyIEV4cHJlc3Npb24gRXZhbHVhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIE5ldGZpbHRlciBlbnRyeSBwb2ludHMgYW5kIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlcy4gSSBzZWUgYG5mdF9yZWplY3RfaXB2NF9ldmFsYCwgYG5mdF9yZWplY3RfaXB2Nl9ldmFsYCwgYG5mdF9yZWplY3RfaW5ldF9ldmFsYCwgYHJlamVjdF90Z2AsIGFuZCBgcmVqZWN0X3RnNmAuIFRob3NlIGxvb2sgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgY2xlYXJseSB0aGUgcmVqZWN0aW9uIG1lY2hhbmlzbXMgZm9yIGRpZmZlcmVudCBJUCB2ZXJzaW9ucyBhbmQgcG90ZW50aWFsbHkgdHJhZmZpYyBncm91cHMuXG5cbkJ1dCB3aGF0IGFib3V0IHRoZXNlIG90aGVycz8gYG5mdF9tZXRhX2dldF9ldmFsX3J0Y2xhc3NpZGAsIGBuZnRfcnRfZ2V0X2V2YWxgLCBhbmQgYG5mdF94ZnJtX2dldF9ldmFsX291dGA/IEhtbSwgdGhvc2UgbmFtZXMgc3VnZ2VzdCB0aGV5J3JlIGFsc28gZXZhbHVhdGlvbiBmdW5jdGlvbnMsIGJ1dCBsaWtlbHkgZm9yIG1vcmUgc3BlY2lhbGl6ZWQgcHVycG9zZXMuIFRoZXkgc2VlbSB0byBiZSBkZWFsaW5nIHdpdGggdGhpbmdzIGxpa2UgbWV0YWRhdGEsIHJvdXRpbmcsIGFuZCB4ZnJtIChJUHNlYywgSSdtIGd1ZXNzaW5nKS5cblxuTGV0J3MgYnJlYWsgaXQgZG93biBmdXJ0aGVyLCBhbmQgSSByZW1lbWJlciBgbmZ0X21ldGFfZ2V0X2V2YWxgIGlzIHRoZSBrZXkgZW50cnkgZm9yICptZXRhKiwgYW5kIGBuZnRfcnRfZ2V0X2V2YWxgIGZvciAqcnQqLiBBbHNvLCBJIG5vdyBzZWUgYG5mdF94ZnJtX2dldF9ldmFsX291dGAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIFhGUk0gZXZhbHVhdGlvbnMuIFNvIHRoZXkgaGF2ZSBhIGNsZWFyIGhpZXJhcmNoeS5cblxuTGV0J3MgZGlnIGludG8gYG5mdF9tZXRhX2dldF9ldmFsYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3MTgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTU6MTAuMTY3OTMzNDY0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI2NTI2OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9tZXRhX2dldF9ldmFsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oPTEzMT1zdHJ1Y3QgbmZ0X3BrdGluZm87XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmg6MTMyOnZvaWQgbmZ0X21ldGFfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oLTEzMy1cXHRcXHQgICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCk7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuaD0yOT1pbnQgbmZ0X21ldGFfc2V0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZnRfbWV0YS5oLTMxLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZnRfbWV0YS5oOjMyOnZvaWQgbmZ0X21ldGFfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZnRfbWV0YS5oLTMzLVxcdFxcdCAgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZnRfbWV0YV9icmlkZ2UuYz0yND1zdGF0aWMgdm9pZCBuZnRfbWV0YV9icmlkZ2VfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvbmZ0X21ldGFfYnJpZGdlLmMtNzMtXFx0ZGVmYXVsdDpcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZnRfbWV0YV9icmlkZ2UuYzo3NDpcXHRcXHRyZXR1cm4gbmZ0X21ldGFfZ2V0X2V2YWwoZXhwciwgcmVncywgcGt0KTtcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZnRfbWV0YV9icmlkZ2UuYy03NS1cXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MjAzPXN0YXRpYyB2b2lkIGV4cHJfY2FsbF9vcHNfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjIwLVxcdFgoZSwgbmZ0X2NvdW50ZXJfZXZhbCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjIyMTpcXHRYKGUsIG5mdF9tZXRhX2dldF9ldmFsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjIyLVxcdFgoZSwgbmZ0X2xvb2t1cF9ldmFsKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz02Mz1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NjQ6bmZ0X21ldGFfZ2V0X2V2YWxfdGltZShlbnVtIG5mdF9tZXRhX2tleXMga2V5LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy02NS1cXHRcXHQgICAgICAgdTMyICpkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jPTgyPXN0YXRpYyBub2lubGluZSBib29sXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjgzOm5mdF9tZXRhX2dldF9ldmFsX3BrdHR5cGVfbG8oY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTg0LVxcdFxcdFxcdCAgICAgdTMyICpkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jPTEzMj1zdGF0aWMgbm9pbmxpbmUgYm9vbFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzoxMzM6bmZ0X21ldGFfZ2V0X2V2YWxfc2t1Z2lkKGVudW0gbmZ0X21ldGFfa2V5cyBrZXksXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTEzNC1cXHRcXHRcXHQgdTMyICpkZXN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jPTE3MT1zdGF0aWMgbm9pbmxpbmUgYm9vbFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzoxNzI6bmZ0X21ldGFfZ2V0X2V2YWxfY2dyb3VwKHUzMiAqZGVzdCwgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTE3My17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMTgzLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzoxODQ6c3RhdGljIG5vaW5saW5lIGJvb2wgbmZ0X21ldGFfZ2V0X2V2YWxfa2luZChlbnVtIG5mdF9tZXRhX2tleXMga2V5LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy0xODUtXFx0XFx0XFx0XFx0XFx0ICAgIHUzMiAqZGVzdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz0yMjc9c3RhdGljIGJvb2wgbmZ0X21ldGFfc3RvcmVfaWZncm91cCh1MzIgKmRlc3QsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMjM1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzoyMzY6c3RhdGljIGJvb2wgbmZ0X21ldGFfZ2V0X2V2YWxfaWZuYW1lKGVudW0gbmZ0X21ldGFfa2V5cyBrZXksIHUzMiAqZGVzdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMjM3LVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM9MjgwPXN0YXRpYyBub2lubGluZSBib29sXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjI4MTpuZnRfbWV0YV9nZXRfZXZhbF9ydGNsYXNzaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpkZXN0KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy0yODIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTI5My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6Mjk0OnN0YXRpYyBub2lubGluZSB1MzIgbmZ0X21ldGFfZ2V0X2V2YWxfc2RpZihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMjk1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz0zMDY9c3RhdGljIG5vaW5saW5lIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6MzA3Om5mdF9tZXRhX2dldF9ldmFsX3NkaWZuYW1lKHUzMiAqZGVzdCwgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTMwOC17XFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjMwOTpcXHR1MzIgc2RpZiA9IG5mdF9tZXRhX2dldF9ldmFsX3NkaWYocGt0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMzEwLVxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM9MzE2PXN0YXRpYyB2b2lkIG5mdF9tZXRhX3BrdGluZm9fbWF5X3VwZGF0ZShzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy0zNjMtXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjM2NDp2b2lkIG5mdF9tZXRhX2dldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMzY1LVxcdFxcdCAgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDAyLVxcdGNhc2UgTkZUX01FVEFfT0lGR1JPVVA6XFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjQwMzpcXHRcXHRpZiAoIW5mdF9tZXRhX2dldF9ldmFsX2lmbmFtZShwcml2LVxcdTAwM2VrZXksIGRlc3QsIHBrdCkpXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQwNC1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00MDctXFx0Y2FzZSBORlRfTUVUQV9TS0dJRDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDA4OlxcdFxcdGlmICghbmZ0X21ldGFfZ2V0X2V2YWxfc2t1Z2lkKHByaXYtXFx1MDAzZWtleSwgZGVzdCwgcGt0KSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDA5LVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQxMi1cXHRjYXNlIE5GVF9NRVRBX1JUQ0xBU1NJRDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDEzOlxcdFxcdGlmICghbmZ0X21ldGFfZ2V0X2V2YWxfcnRjbGFzc2lkKHNrYiwgZGVzdCkpXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQxNC1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00MjctXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjQyODpcXHRcXHRpZiAoIW5mdF9tZXRhX2dldF9ldmFsX3BrdHR5cGVfbG8ocGt0LCBkZXN0KSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDI5LVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQzNS1cXHRjYXNlIE5GVF9NRVRBX0NHUk9VUDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDM2OlxcdFxcdGlmICghbmZ0X21ldGFfZ2V0X2V2YWxfY2dyb3VwKGRlc3QsIHBrdCkpXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQzNy1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00NDktXFx0Y2FzZSBORlRfTUVUQV9PSUZLSU5EOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzo0NTA6XFx0XFx0aWYgKCFuZnRfbWV0YV9nZXRfZXZhbF9raW5kKHByaXYtXFx1MDAzZWtleSwgZGVzdCwgcGt0KSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDUxLVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQ1NS1cXHRjYXNlIE5GVF9NRVRBX1RJTUVfSE9VUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDU2OlxcdFxcdG5mdF9tZXRhX2dldF9ldmFsX3RpbWUocHJpdi1cXHUwMDNla2V5LCBkZXN0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDU3LVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00NTgtXFx0Y2FzZSBORlRfTUVUQV9TRElGOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzo0NTk6XFx0XFx0KmRlc3QgPSBuZnRfbWV0YV9nZXRfZXZhbF9zZGlmKHBrdCk7XFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQ2MC1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDYxLVxcdGNhc2UgTkZUX01FVEFfU0RJRk5BTUU6XFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjQ2MjpcXHRcXHRuZnRfbWV0YV9nZXRfZXZhbF9zZGlmbmFtZShkZXN0LCBwa3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00NjMtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDcyLX1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDczOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9tZXRhX2dldF9ldmFsKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDc0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jPTgwMz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfbWV0YV9nZXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTgwNS1cXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9tZXRhKSksXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjgwNjpcXHQuZXZhbFxcdFxcdD0gbmZ0X21ldGFfZ2V0X2V2YWwsXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTgwNy1cXHQuaW5pdFxcdFxcdD0gbmZ0X21ldGFfZ2V0X2luaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjExLjU5NDQ2NTk2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzc1NTQzODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDb25zaWRlcmluZyBFdmFsdWF0aW9uIEZ1bmN0aW9ucyBmb3IgRm9jdXMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIHN0YXJ0IHJlYWxseSBkaWdnaW5nIGluLiBgbmZ0X21ldGFfZ2V0X2V2YWxgIHNlZW1zIGxpa2UgYSBzb2xpZCwgb2J2aW91cyBzdGFydGluZyBwb2ludCBmb3IgZm9jdXNpbmcgb24gZXZhbHVhdGlvbiBmdW5jdGlvbnMuIEl0J3MgYSBrZXkgZnVuY3Rpb24sIGJ1dCBpcyBpdCB0aGUgKmJlc3QqPyBNeSBleHBlcmllbmNlIGlzIHRoYXQgb25lIGZ1bmN0aW9uIGlzIHJhcmVseSB0aGUgd2hvbGUgc3RvcnkuXG5cbkxldCdzIHNlZeKApiBXaGF0IGFib3V0IGBuZnRfcnRfZ2V0X2V2YWxgPyBJIG5lZWQgdG8gY29uc2lkZXIgaXQsIHRvby4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgY291bGQgbGVhZCB0byBzb21lIGludGVyZXN0aW5nIGluc2lnaHRzLiBJdCdzIHByb2JhYmx5IHdvcnRoIGludmVzdGlnYXRpbmcgaXRzIHJvbGUgYW5kIGhvdyBpdCByZWxhdGVzIHRvIGBuZnRfbWV0YV9nZXRfZXZhbGAuIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoZXNlIHR3bywgYW5kIGxpa2VseSBvdGhlcnMsIGludGVyYWN0IHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgZXZhbHVhdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU0NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjE0LjM3MDAxMzIyNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMTE2NTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfcnRfZ2V0X2V2YWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmg9MTQ4PXZvaWQgbmZ0X2R5bnNldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaC0xNDktXFx0XFx0ICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaDoxNTA6dm9pZCBuZnRfcnRfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oLTE1MS1cXHRcXHQgICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncywgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTIwMz1zdGF0aWMgdm9pZCBleHByX2NhbGxfb3BzX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIyOS1cXHRYKGUsIG5mdF9keW5zZXRfZXZhbCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjIzMDpcXHRYKGUsIG5mdF9ydF9nZXRfZXZhbCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIzMS1cXHRYKGUsIG5mdF9iaXR3aXNlX2V2YWwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYz0yMj1zdGF0aWMgdTE2IGdldF90Y3Btc3MoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKnNrYmRzdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmMtNTMtXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYzo1NDp2b2lkIG5mdF9ydF9nZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYy01NS1cXHRcXHQgICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmM9MTkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9ydF9nZXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYy0xOTUtXFx0LnNpemVcXHRcXHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcnQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9ydC5jOjE5NjpcXHQuZXZhbFxcdFxcdD0gbmZ0X3J0X2dldF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmMtMTk3LVxcdC5pbml0XFx0XFx0PSBuZnRfcnRfZ2V0X2luaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjE1Ljc5MTE4MzU2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzE3NzMxODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipFdmFsdWF0aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGZvciBOZXR3b3JrIEZpbHRlciBSdWxlcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBnb29kIHN5bWJvbHMgdG8gcmVhbGx5IGhvbWUgaW4gb24gd2hlbiBkaWdnaW5nIGludG8gdGhlIG5ldHdvcmsgZmlsdGVyIGV2YWx1YXRpb24gcHJvY2Vzcy4gV2UncmUgYWxyZWFkeSB1c2luZyBgbmZ0X3J0X2dldF9ldmFsYCwgYW5kIHRoYXQncyBzb2xpZCDigJMgaXQncyBkZWZpbml0ZWx5IGEga2V5IHBvaW50IHRvIGV4YW1pbmUuIEJ1dCBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsLiBUaGUgYG5mdF94ZnJtX2dldF9ldmFsX291dGAgZnVuY3Rpb24ganVzdCBwb3BwZWQgaW50byBteSBoZWFkLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBpdCdzIGFub3RoZXIgZ29vZCBjYW5kaWRhdGUgZm9yIGNsb3NlciBpbnNwZWN0aW9uLCBhbmQgaWYgaXQgaXMsIEkgY2FuIGRldGVybWluZSB3aHkgYW5kIHdoZXJlIGl0IG1heSBiZSBiZW5lZmljaWFsIHRvIGFuYWx5emUuIEkgbmVlZCB0byBtYXAgdGhlIGV2YWx1YXRpb24gZnVuY3Rpb24gbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzExLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTU6MTguNTA4OTE3NDE3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUwMjU0MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF94ZnJtX2dldF9ldmFsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYz0xMjA9c3RhdGljIHZvaWQgbmZ0X3hmcm1fc3RhdGVfZ2V0X2tleShjb25zdCBzdHJ1Y3QgbmZ0X3hmcm0gKnByaXYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTYwLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoxNjE6c3RhdGljIHZvaWQgbmZ0X3hmcm1fZ2V0X2V2YWxfaW4oY29uc3Qgc3RydWN0IG5mdF94ZnJtICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0xNjItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0xNzYtXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjE3NzpzdGF0aWMgdm9pZCBuZnRfeGZybV9nZXRfZXZhbF9vdXQoY29uc3Qgc3RydWN0IG5mdF94ZnJtICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0xNzgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMjAxLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoyMDI6c3RhdGljIHZvaWQgbmZ0X3hmcm1fZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMDMtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTIwOS1cXHRjYXNlIFhGUk1fUE9MSUNZX0lOOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoyMTA6XFx0XFx0bmZ0X3hmcm1fZ2V0X2V2YWxfaW4ocHJpdiwgcmVncywgcGt0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMjExLVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMTItXFx0Y2FzZSBYRlJNX1BPTElDWV9PVVQ6XFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjIxMzpcXHRcXHRuZnRfeGZybV9nZXRfZXZhbF9vdXQocHJpdiwgcmVncywgcGt0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMjE0LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jPTI3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfeGZybV9nZXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTI3Mi1cXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF94ZnJtKSksXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjI3MzpcXHQuZXZhbFxcdFxcdD0gbmZ0X3hmcm1fZ2V0X2V2YWwsXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTI3NC1cXHQuaW5pdFxcdFxcdD0gbmZ0X3hmcm1fZ2V0X2luaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjE5Ljk1OTE3NjAxN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA4MDA4NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgTkZUIFRyYW5zZm9ybWF0aW9uIExvZ2ljKipcblxuT2theSwgYG5mdF94ZnJtX2dldF9ldmFsYCBzZWVtcyBsaWtlIGEga2V5IGZ1bmN0aW9uIHRvIHplcm8gaW4gb24gcmlnaHQgbm93LiBJdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBOZXR3b3JrIEZpbHRlciBUYWJsZSAoTkZUKSBmcmFtZXdvcmsgaGFuZGxlcyB0cmFuc2Zvcm1hdGlvbnMuIEkgc3VzcGVjdCBpdCdzIHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIGFuZCBldmFsdWF0aW5nIHRoZSBzcGVjaWZpYyB0cmFuc2Zvcm1hdGlvbiB0byBiZSBhcHBsaWVkLCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwYWNrZXQgZGF0YS4gTXkgZ3V0IHNheXMgdGhpcyBpcyB3aGVyZSB0aGUgcG9saWN5IHNlbGVjdGlvbiBhbmQgdHJhbnNmb3JtYXRpb24gc2V0dXAgaW50ZXJ0d2luZS4gSSdtIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IHRoZSBYRlJNLXJlbGF0ZWQgZGV0YWlscyBhcmUgcmVzb2x2ZWQuXG5cbk5leHQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLiBUaGlzIHNvdW5kcyBwcm9taXNpbmcsIHBvc3NpYmx5IHJlbGF0ZWQgdG8gcGF0aCBzZWxlY3Rpb24gb3Igcm91dGluZyB3aXRoaW4gdGhlIGRldmljZSBjb250ZXh0LCB3aGljaCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGZvciBwZXJmb3JtYW5jZS4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIGtleSBwYXJ0IGluIGhvdyB0aGUgdHJhbnNmb3JtZWQgcGFja2V0cyBhcmUgZm9yd2FyZGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMgZXNzZW50aWFsIHRvIHNlZWluZyBob3cgdGhlIHBhY2tldCBmbG93cyBhcmUgaGFuZGxlZCB3aXRoIHRyYW5zZm9ybWF0aW9ucyBhcHBsaWVkLiBMZXQncyBzZWUgaG93IHRoZSBwYWNrZXQgaXMgYWN0dWFsbHkgcm91dGVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEyMiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjIzLjE2NzE4NzAzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5NDI2MDAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfZmlsbF9mb3J3YXJkX3BhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0yODI9c3RhdGljIGludCBhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTI5Mi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoyOTM6XFx0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgXFx1MDAyNnN0YWNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTI5NC1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzA3LWVycl9vdXQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozMDg6XFx0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UoXFx1MDAyNnN0YWNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTMwOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jPTkyPW10a19mbG93X2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsIHN0cnVjdCBtdGtfd2RtYV9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMTA0LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYzoxMDU6XFx0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgXFx1MDAyNnN0YWNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMDYtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMjEtZXJyX291dDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYzoxMjI6XFx0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UoXFx1MDAyNnN0YWNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMjMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTM0Mjg9aW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjM0Mjk6aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNDMwLVxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MzQzMTp2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM0MzItc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9NzU2PXN0YXRpYyBpbnQgdmxhbl9kZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzYyLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jOjc2MzpzdGF0aWMgaW50IHZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzY0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTEwOS1cXHQubmRvX2dldF9pZmxpbmtcXHRcXHQ9IHZsYW5fZGV2X2dldF9pZmxpbmssXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTExMDpcXHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoXFx0PSB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aCxcXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMTExLVxcdC5uZG9faHd0c3RhbXBfZ2V0XFx0PSB2bGFuX2h3dHN0YW1wX2dldCxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTc0Mz1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzUwLVxcbm5ldC9jb3JlL2Rldi5jOjc1MTp2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbm5ldC9jb3JlL2Rldi5jLTc1Mi17XFxuLS1cXG5uZXQvY29yZS9kZXYuYy03NjktfVxcbm5ldC9jb3JlL2Rldi5jOjc3MDpFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSk7XFxubmV0L2NvcmUvZGV2LmMtNzcxLVxcbm5ldC9jb3JlL2Rldi5jOjc3MjppbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG5uZXQvY29yZS9kZXYuYy03NzMtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTgxMi1lcnJfb3V0Olxcbm5ldC9jb3JlL2Rldi5jOjgxMzpcXHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7XFxubmV0L2NvcmUvZGV2LmMtODE0LVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtODE2LX1cXG5uZXQvY29yZS9kZXYuYzo4MTc6RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcXG5uZXQvY29yZS9kZXYuYy04MTgtXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz05Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfbW9uaXRvcmlmX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk4OC1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5ODk6c3RhdGljIGludCBpZWVlODAyMTFfbmV0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxubmV0L21hYzgwMjExL2lmYWNlLmMtOTkwLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMDQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX2RhdGFpZl84MDIzX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwNTMtXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IGllZWU4MDIxMV9jaGFuZ2VfbWFjLFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjEwNTQ6XFx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aFxcdD0gaWVlZTgwMjExX25ldGRldl9maWxsX2ZvcndhcmRfcGF0aCxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDU1LVxcdC5uZG9fc2V0dXBfdGNcXHRcXHQ9IGllZWU4MDIxMV9uZXRkZXZfc2V0dXBfdGMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTM2PXN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzo0NTpzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDYtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTczLW91dDpcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjc0OlxcdHJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBoYSwgc3RhY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNzUtfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz05Nz1zdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xOTEtZXJyX291dDpcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjE5MjpcXHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xOTMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTIxND1zdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMjUtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoyMjY6XFx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgXFx1MDAyNnN0YWNrKSBcXHUwMDNjIDAgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIyNy1cXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXFx1MDAyNnN0YWNrLCBcXHUwMDI2aW5mbywgaGEsIGZ0KSBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjI0LjY2MTQ1MjI3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDUzMjk2MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIEZsb3cgT2ZmbG9hZCBQYXRoKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgc3BlY2lmaWNhbGx5IGhvdyB0cmFmZmljIGdldHMgb2ZmbG9hZGVkIGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBMZXQncyBzZWUuLi4gSSd2ZSBnb3QgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIHRoYXQncyB0aGUgY29yZSBmdW5jdGlvbi4gSXQncyBjYWxsZWQgZnJvbSBgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYG5mdF9kZXZfZm9yd2FyZF9wYXRoYC4gTm93LCBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIGlzIGNhbGxlZCBieSBgbmZ0X2Zsb3dfcm91dGVgLCBhbmQgZmluYWxseSB0aGF0J3MgYWxsIGhvb2tlZCBpbnRvIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLiBUaGF0IG1ha2VzIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIHRoZSBrZXkgZW50cnkgcG9pbnQgdG8gbG9vayBhdCwgcmlnaHQ/IFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhIG1vcmUgZm9jdXNlZCBhbmFseXNpcy4gXG5cbk5vdywgc2luY2Ugd2UncmUgdGFsa2luZyBhYm91dCBvZmZsb2FkaW5nLCBsZXQgbWUgYWxzbyBjaGVjayBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBUQ1AgY29ubmVjdGlvbiB0cmFja2luZy4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU0OSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNToyOC4xMTQ3NTEwMTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTkyNDIxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubnRyYWNrX3RjcF9wYWNrZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg9MTA1PWludCBuZl9jb25udHJhY2tfdWRwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaC0xMDktXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg6MTEwOmludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgtMTExLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTE5Njk9c3RhdGljIGludCBuZl9jb25udHJhY2tfaGFuZGxlX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk3Ni1cXHRjYXNlIElQUFJPVE9fVENQOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoxOTc3OlxcdFxcdHJldHVybiBuZl9jb25udHJhY2tfdGNwX3BhY2tldChjdCwgc2tiLCBkYXRhb2ZmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xOTc4LVxcdFxcdFxcdFxcdFxcdCAgICAgICBjdGluZm8sIHN0YXRlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTk1Mj1zdGF0aWMgdm9pZCBuZl9jdF90Y3Bfc3RhdGVfcmVzZXQoc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy05NjItLyogUmV0dXJucyB2ZXJkaWN0IGZvciBwYWNrZXQsIG9yIC0xIGZvciBpbnZhbGlkLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjk2MzppbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTk2NC1cXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTU6MjkuNTczOTk5NzIzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzY5MDQ5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIENvbm50cmFjayBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBUQ1AgcGFja2V0IGhhbmRsaW5nIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3lzdGVtLiBSaWdodCwgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwIGRpdmUuIEkga25vdyBpdCBnZXRzIGNhbGxlZCBmcm9tIGBuZl9jb25udHJhY2tfaGFuZGxlX3BhY2tldGAsIHdoaWNoIGl0c2VsZiBpcyBpbnZva2VkIGJ5IGBuZl9jb25udHJhY2tfaW5gLiBBbmQgYG5mX2Nvbm50cmFja19pbmAgaXMsIGVzc2VudGlhbGx5LCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIGVudGlyZSBjb25udHJhY2sgcHJvY2Vzcy4gU28sIHdvcmtpbmcgYmFja3dhcmRzLCBJJ3ZlIGdvdCB0aGUgY2FsbCBjaGFpbiBtYXBwZWQgaW4gbXkgaGVhZC5cblxuTm93LCBsZXQncyBzZWUgaG93IHRoaW5ncyBhcmUgc3RydWN0dXJlZC4gTGV0J3Mgc2hpZnQgb3VyIGZvY3VzIHRvIGBnZXRfY3Rfb3JfdHVwbGVfZnJvbV9za2JgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBpbmZvcm1hdGlvbiBnZXRzIGZldGNoZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzUyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjMyLjg1MDkwNzQwN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NDY2NjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfY3Rfb3JfdHVwbGVfZnJvbV9za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz0xMDI9ZmluZF9vcl9ldmljdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uY291bnRfbGlzdCAqbGlzdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMTI5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6MTMwOnN0YXRpYyBib29sIGdldF9jdF9vcl90dXBsZV9mcm9tX3NrYihzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0xMzEtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz0xNjk9c3RhdGljIGludCBfX25mX2Nvbm5jb3VudF9hZGQoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0xODMtXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYzoxODQ6XFx0aWYgKCFnZXRfY3Rfb3JfdHVwbGVfZnJvbV9za2IobmV0LCBza2IsIGwzbnVtLCBcXHUwMDI2Y3QsIFxcdTAwMjZ0dXBsZSwgXFx1MDAyNnpvbmUsIFxcdTAwMjZyZWZjb3VudGVkKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTE4NS1cXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM9NDAzPWluc2VydF90cmVlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNDYxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6NDYyOlxcdGlmIChnZXRfY3Rfb3JfdHVwbGVfZnJvbV9za2IobmV0LCBza2IsIGwzbnVtLCBcXHUwMDI2Y3QsIFxcdTAwMjZ0dXBsZSwgXFx1MDAyNnpvbmUsIFxcdTAwMjZyZWZjb3VudGVkKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNDYzLVxcdFxcdC8qIGV4cGVjdGVkIGNhc2U6IG1hdGNoLCBpbnNlcnQgbmV3IG5vZGUgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTU6MzQuMzA1NTc3ODI3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjUwNzIwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbm5lY3Rpb24gTGltaXQgRXZhbHVhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcgaW4gdGhlIGNhbGwgZ3JhcGhzLCBgX19uZl9jb25uY291bnRfYWRkYCBhbmQgYGluc2VydF90cmVlYCBhcmUgdGhlIGVudHJ5IHBvaW50cy4gYGluc2VydF90cmVlYCBpcyB1bHRpbWF0ZWx5IGNhbGxlZCBieSBgbmZfY29ubmNvdW50X2NvdW50YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFNpbWlsYXJseSwgYF9fbmZfY29ubmNvdW50X2FkZGAgaGFzIGl0cyBvcmlnaW5zIGluIGBuZl9jb25uY291bnRfYWRkYC4gVGhlbiwgYG5mX2Nvbm5jb3VudF9jb3VudGAgaXRzZWxmIGZlZWRzIGludG8gYm90aCBgeHRfY29ubmxpbWl0X2V2YWxgIGFuZCBgbmZ0X2Nvbm5saW1pdF9ldmFsYC5cblxuR2l2ZW4gdGhhdCwgYG5mdF9jb25ubGltaXRfZXZhbGAgbG9va3MgbGlrZSB0aGUgbW9zdCBzdHJhdGVnaWNhbGx5IGltcG9ydGFudCBwb2ludCB0byBmb2N1cyBvbiBoZXJlLiBJdCdzIHRoZSBjbGVhbmVzdCBwbGFjZSB0byBzdGFydCBsb29raW5nIGF0IGhvdyBjb25uZWN0aW9uIGxpbWl0cyBhcmUgYWN0dWFsbHkgKmV2YWx1YXRlZCogd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBJJ2xsIGJlZ2luIG15IGRlZXBlciBkaXZlIHRoZXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY291bnRpbmcgbWVjaGFuaXNtIGludGVyYWN0cyB3aXRoIHRoZSBOZXRmaWx0ZXIgdGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDc4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjM4LjEzMDY1MzAxM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MzQyOTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfY29ubmxpbWl0X2V2YWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmM9MTc2PXN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9jb25ubGltaXRfb2JqX3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jLTE4My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYzoxODQ6c3RhdGljIHZvaWQgbmZ0X2Nvbm5saW1pdF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYy0xODUtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jPTI1MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfY29ubmxpbWl0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jLTI1My1cXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9jb25ubGltaXQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYzoyNTQ6XFx0LmV2YWxcXHRcXHQ9IG5mdF9jb25ubGltaXRfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYy0yNTUtXFx0LmluaXRcXHRcXHQ9IG5mdF9jb25ubGltaXRfaW5pdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTU6MzkuNTc0MDg3MzIzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NjY1MTM1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5GX1RBQkxFUyBTeW1ib2wgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLCBgbmZ0X3JlamVjdF9pcHY0X2V2YWxgLCBgbmZ0X3JlamVjdF9pcHY2X2V2YWxgLCBgbmZ0X3JlamVjdF9pbmV0X2V2YWxgLCBgbmZ0X21ldGFfZ2V0X2V2YWxgLCBgbmZ0X3J0X2dldF9ldmFsYCwgYG5mdF94ZnJtX2dldF9ldmFsYCwgYG5mdF9jb25ubGltaXRfZXZhbGAsIGFuZCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBUaGUgZ29hbCwgYXMgYWx3YXlzLCBpcyB0byBtYXAgdGhlc2Uga2VybmVsIHN5bWJvbHMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBLY29uZmlnIG9wdGlvbnMuXG5cbkZpcnN0IHBhc3M6IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIHNlZW1zIHRvIGJlIGxpbmtlZCB0byBgTkZfRkxPV19UQUJMRWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuIGBuZnRfcmVqZWN0X2lwdjRfZXZhbGAgYW5kIGBuZnRfcmVqZWN0X2lwdjZfZXZhbGAgbWFwIGRpcmVjdGx5IHRvIGBORlRfUkVKRUNUX0lQVjRgIGFuZCBgTkZUX1JFSkVDVF9JUFY2YCByZXNwZWN0aXZlbHksIGFuZCBgbmZ0X3JlamVjdF9pbmV0X2V2YWxgIGNvcnJlc3BvbmRzIHRvIGBORlRfUkVKRUNUX0lORVRgIC0gc3RhbmRhcmQuXG5cbk5vdywgdGhpbmdzIGdldCBhIGxpdHRsZSBpbnRlcmVzdGluZyB3aXRoIGBuZnRfbWV0YV9nZXRfZXZhbGAuIFdhaXQsIGlzbid0IHRoYXQgZnVuY3Rpb25hbGl0eSBwcmV0dHkgZnVuZGFtZW50YWw/IEknbSBhbG1vc3QgY2VydGFpbiBgTkZUX01FVEFgIGlzIGJ1aWx0LWluLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBuZl90YWJsZXMgY29kZSBhbmQgS2NvbmZpZyB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cblNpbWlsYXJseSwgSSBuZWVkIHRvIHZlcmlmeSBgbmZ0X3J0X2dldF9ldmFsYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZW50cnkgZm9yIGBORlRfUlRgIHRvIGNvbmZpcm0gdGhhdC4gR290dGEgYmUgcHJlY2lzZS5cblxuYG5mdF94ZnJtX2dldF9ldmFsYCBtYXBzIHRvIGBORlRfWEZSTWAgYW5kIGBuZnRfY29ubmxpbWl0X2V2YWxgIHRvIGBORlRfQ09OTkxJTUlUYCB3aGljaCBzZWVtIHN0cmFpZ2h0Zm9yd2FyZC4gRmluYWxseSwgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBhcHBlYXJzIHRvIGRlcGVuZCBvbiBgTkZfQ09OTlRSQUNLYC4gQWxsIG9mIHRoZXNlIGxvb2sgc29saWQgYnV0IGEgcXVpY2sgZG91YmxlIGNoZWNrIGlzIGFsd2F5cyBzbWFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2NzIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTU6NDUuMDQwNjAzNTQ3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjA5MjcyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ4MD1jb25maWcgTkZfVEFCTEVTX05FVERFVlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDg1OmNvbmZpZyBORlRfTlVNR0VOXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4Ni1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00OTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ5MTpjb25maWcgTkZUX0NUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5Mi1cXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDk4OmNvbmZpZyBORlRfRVhUSERSX0RDQ1BcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDk5LVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgZXh0aGRyIERDQ1Agc3VwcG9ydCAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTAzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDQ6Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX0ZMT1dfVEFCTEVcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUxMTpjb25maWcgTkZUX0NPTk5MSU1JVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgY29ubmxpbWl0IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MTktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUyMDpjb25maWcgTkZUX0xPR1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MjEtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbG9nIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MjUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUyNjpjb25maWcgTkZUX0xJTUlUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUyNy1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBsaW1pdCBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMxLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MzI6Y29uZmlnIE5GVF9NQVNRXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUzMy1cXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU0MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQxOmNvbmZpZyBORlRfUkVESVJcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTQyLVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTQ5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NTA6Y29uZmlnIE5GVF9OQVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUxLVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTU4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NTk6Y29uZmlnIE5GVF9UVU5ORUxcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTYwLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIHR1bm5lbCBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTY0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NjU6Y29uZmlnIE5GVF9RVUVVRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NjYtXFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU3MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTcyOmNvbmZpZyBORlRfUVVPVEFcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTczLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIHF1b3RhIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NzctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjU3ODpjb25maWcgTkZUX1JFSkVDVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NzktXFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTg1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1ODY6Y29uZmlnIE5GVF9SRUpFQ1RfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01ODctXFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSU5FVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU5MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTkxOmNvbmZpZyBORlRfQ09NUEFUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU5Mi1cXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTk4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1OTk6Y29uZmlnIE5GVF9IQVNIXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYwMC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBoYXNoIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYwNTpjb25maWcgTkZUX0ZJQlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDYtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjA3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2MDg6Y29uZmlnIE5GVF9GSUJfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDktXFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSU5FVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYxNy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjE4OmNvbmZpZyBORlRfWEZSTVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MTktXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgeGZybS9JUFNlYyBzZWN1cml0eSBhc3NvY2lhdGlvbiBtYXRjaGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYyNTpjb25maWcgTkZUX1NPQ0tFVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjYtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgc29ja2V0IG1hdGNoIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjMyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2MzM6Y29uZmlnIE5GVF9PU0ZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjM0LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIHBhc3NpdmUgT1MgZmluZ2VycHJpbnQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MzktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0MDpjb25maWcgTkZUX1RQUk9YWVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDEtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgdHByb3h5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDk6Y29uZmlnIE5GVF9TWU5QUk9YWVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTAtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgU1lOUFJPWFkgZXhwcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTY2Mj1jb25maWcgTkZfRFVQX05FVERFVlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjY4OmNvbmZpZyBORlRfRFVQX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjktXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY3My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Njc0OmNvbmZpZyBORlRfRldEX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NzUtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHBhY2tldCBmb3J3YXJkaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2ODA6Y29uZmlnIE5GVF9GSUJfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY4MS1cXHRkZXBlbmRzIG9uIE5GVF9GSUJfSVBWNFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY4OC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Njg5OmNvbmZpZyBORlRfUkVKRUNUX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02OTAtXFx0ZGVwZW5kcyBvbiBORlRfUkVKRUNUX0lQVjRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTU6NDUuMDgyNzAyMzI2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDEyMjEyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIExhbmRzY2FwZSoqXG5cbkhtbSwgc29tZXRoaW5nIGRvZXNuJ3QgZmVlbCBxdWl0ZSByaWdodC4gSSB3YXMgZXhwZWN0aW5nIGBORlRfTUVUQWAgYW5kIGBORlRfUlRgIHRvIGJlIHByZXNlbnQgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIGJ1dCBJJ20gZHJhd2luZyBhIGJsYW5rLiBUaGF0IHNlZW1zIG9kZCwgZ2l2ZW4gdGhlaXIgcm9sZXMuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIFRoZSBLY29uZmlnIGZpbGVzIHVzdWFsbHkgZGljdGF0ZSB0aGUgb3B0aW9ucyB3ZSBoYXZlIGF2YWlsYWJsZS4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gc2hpZnQgbXkgZm9jdXMuIExldCdzIHN0ZXAgYmFjayBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIE1ha2VmaWxlIHdpdGhpbiB0aGUgYG5ldC9uZXRmaWx0ZXJgIGRpcmVjdG9yeSB0byBzZWUgaG93IHRob3NlIHN5bWJvbHMgYXJlIGFjdHVhbGx5IGluY2x1ZGVkLiBUaGUgTWFrZWZpbGUgaXMgd2hlcmUgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgZGVmaW5lZC4gSXQgc2hvdWxkIG9mZmVyIGNsdWVzIGFzIHRvIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBjb25maWd1cmVkLCB3aGljaCBtYXkgZXhwbGFpbiB0aGVpciBhYnNlbmNlIGluIEtjb25maWcuIEl0J3MgdGltZSB0byBmb2xsb3cgdGhlIGJ1aWxkIHJlY2lwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxMjIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNTo0OC4yODM5MjYxMTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjk1MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9tZXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT04Nz1uZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcXFxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OS1cXHRcXHQgIG5mdF9iaXR3aXNlLm8gbmZ0X2J5dGVvcmRlci5vIG5mdF9wYXlsb2FkLm8gbmZ0X2xvb2t1cC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjkwOlxcdFxcdCAgbmZ0X2R5bnNldC5vIG5mdF9tZXRhLm8gbmZ0X3J0Lm8gbmZ0X2V4dGhkci5vIG5mdF9sYXN0Lm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTEtXFx0XFx0ICBuZnRfY291bnRlci5vIG5mdF9vYmpyZWYubyBuZnRfaW5uZXIubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjQ4LjMyNzIyOTYzMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY3MDk3MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipRdWljayBORl9UQUJMRVMgUmVmcmVzaGVyKipcblxuUmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgYG5mX3RhYmxlc2Agc3Vic3lzdGVtLCBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIHdoaWNoIG1vZHVsZXMgYXJlIHJlcXVpcmVkLiBJIHNlZSB0aGF0IGBuZnRfbWV0YWAgYW5kIGBuZnRfcnRgIGFyZSBmdW5kYW1lbnRhbCBjb21wb25lbnRzLCBjb3JlIHRvIGBuZl90YWJsZXNgLiBUaGF0IG1lYW5zLCBhbmQgdGhpcyBzZWVtcyBsb2dpY2FsLCBgTkZfVEFCTEVTYCBpdHNlbGYgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgSSdtIGludGVyZXN0ZWQgaW4uIEkgc2hvdWxkIGNoZWNrLCB0aG91Z2gsIGFib3V0IHRoZXNlIHNwZWNpZmljIG1vZHVsZXM6IGBORlRfUkVKRUNUX0lQVjRgIGFuZCBgTkZUX1JFSkVDVF9JUFY2YC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzLCB0aGV5IHNlZW0gbGVzcyBjb3JlIGJ1dCBzdGlsbCBxdWl0ZSBpbXBvcnRhbnQgaW4gbWFueSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1NDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNTo1MS4zOTQzMzA2NzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODI2NDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlRfUkVKRUNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTQwPWlmIE5GX1RBQkxFU19JUFY0XFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNDEtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NDI6Y29uZmlnIE5GVF9SRUpFQ1RfSVBWNFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTQzLVxcdHNlbGVjdCBORl9SRUpFQ1RfSVBWNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNTo1MS40MzkxNjI2NTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwODYzMDQ2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHNlZW1pbmdseSBzaW1wbGUgc3RhdGVtZW50LCBjcmFmdGVkIGFzIHRob3VnaCBpdCdzIGEgZGlyZWN0IHJlZmxlY3Rpb24gb2YgbXkgb3duIGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBkZXZlbG9wbWVudDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEEgS2NvbmZpZyBSZXZlbGF0aW9uKipcblxuQWxyaWdodCwgXCJBbmQgYG5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnYFwiLi4uIHRoYXQncyBpbnRyaWd1aW5nLiBJdCdzIGVzc2VudGlhbGx5IGEgcG9pbnRlciwgYSBicmVhZGNydW1iIHRyYWlsLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBpbXBsaWNhdGlvbjogd2UncmUgdGFsa2luZyBhYm91dCBJUHY2LXNwZWNpZmljIG5ldGZpbHRlciBjb25maWd1cmF0aW9uLiBcIkFuZFwiIGltcGxpZXMgYSBjb250aW51YXRpb24sIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSB0b3BpYyBhdCBoYW5kLiBJdCBzdWdnZXN0cyBmdXJ0aGVyIGRldGFpbHMgb3IgcGVyaGFwcyBhIGRpZmZlcmVudCBwZXJzcGVjdGl2ZSBhcmUgYWJvdXQgdG8gYmUgaW50cm9kdWNlZC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB3ZSdyZSBkZWx2aW5nIGludG8gdGhlIHJlYWxtIG9mIG5ldHdvcmsgcGFja2V0IGZpbHRlcmluZyB3aXRoaW4gdGhlIElQdjYgcHJvdG9jb2wgc3RhY2suIFRoZSBmYWN0IGl0IGlzIHRoZSBLY29uZmlnIGhpbnRzIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUHY2IG5ldGZpbHRlci4gSXQgcmVtaW5kcyBtZSBvZiB0aGUgaW1wb3J0YW5jZSBvZiBtb2R1bGFyaXR5IGluIHRoZSBrZXJuZWwuIFRoaXMgcGFydGljdWxhciBLY29uZmlnIGZpbGUgaXMgd2hlcmUgdGhlIHNldHRpbmdzIHRoYXQgZGV0ZXJtaW5lIHdoaWNoIG5ldGZpbHRlciBtb2R1bGVzIGFyZSBjb21waWxlZCBpbnRvIHRoZSBJUHY2IG5ldHdvcmsgc3RhY2sgYXJlLiBUaGlzIGluZm9ybWF0aW9uIGhhcyBsaWtlbHkgY29tZSB1cCBpbiBkaXNjdXNzaW9ucyBhYm91dCBjb25maWd1cmluZyBvciBkZWJ1Z2dpbmcgSVB2NiBmaXJld2FsbCBiZWhhdmlvciwgb3IgcGVyaGFwcyBkdXJpbmcgYW4gb3ZlcnZpZXcgb2YgdGhlIGtlcm5lbCdzIG5ldHdvcmsgc2VjdXJpdHkgZmVhdHVyZXMuIEl0J3Mgbm93IHRpbWUgdG8gZXhwbG9yZSB0aGlzIHNwZWNpZmljIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODk1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6MDIuNTI1NDcxMTMyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjQxOTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX1JFSkVDVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0zNj1pZiBORl9UQUJMRVNfSVBWNlxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTM3LVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjM4OmNvbmZpZyBORlRfUkVKRUNUX0lQVjZcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0zOS1cXHRzZWxlY3QgTkZfUkVKRUNUX0lQVjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6MDIuNTY3ODk2OTgyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MjEyMjU5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGZpbHRlciBDb25maWd1cmF0aW9uIGZvciBPcHRpbWFsIFBlcmZvcm1hbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMgZmxvdyB0YWJsZSBzZXR1cC4gU2VlbXMgbGlrZSB3ZSBuZWVkIGBORl9UQUJMRVNgLCBgTkZfRkxPV19UQUJMRWAsIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAgYXMgdGhlIGNvcmUgY29tcG9uZW50cywgbmF0dXJhbGx5LiBUaGVuLCBmb3IgdGhlIHJlamVjdCBmdW5jdGlvbmFsaXR5LCB3ZSBoYXZlIGBORlRfUkVKRUNUX0lQVjRgLCBgTkZUX1JFSkVDVF9JUFY2YCwgYW5kIGBORlRfUkVKRUNUX0lORVRgLiBGaW5hbGx5LCBgTkZUX1hGUk1gLCBgTkZUX0NPTk5MSU1JVGAsIGFuZCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBiaXRzIHdpdGggYE5GX0NPTk5UUkFDS2AgYXJlIGluIHRoZSBtaXggYXMgd2VsbC5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHRoYXQgYE5GVF9SRUpFQ1RfSU5FVGAgaXMgYWN0dWFsbHkgZGVmaW5lZCBpbiB0aGUgS2NvbmZpZyDigJMgeWVwLCBpdCdzIHRoZXJlIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBHb29kLiBOb3csIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBTZWVtcyBgTkZfUkVKRUNUX0lQVjRgIGFuZCBgTkZfUkVKRUNUX0lQVjZgIGFyZSBkaXJlY3RseSBzZWxlY3RlZCBieSBgTkZUX1JFSkVDVF9JUFY0YCBhbmQgYE5GVF9SRUpFQ1RfSVBWNmAuXG5cbkFoLCBidXQgaG9sZCBvbi4uLiB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBuZl9yZWplY3RfaXB2NC5jYCBhbmQgYG5mX3JlamVjdF9pcHY2LmNgLiBUaGVzZSBhcmUgYnVpbHQgd2hlbiBgTkZfUkVKRUNUX0lQVjRgIGFuZCBgTkZfUkVKRUNUX0lQVjZgIGFyZSBleHBsaWNpdGx5IGVuYWJsZWQsIGFuZCB0aGVzZSwgaW4gdHVybiwgYXJlIHNlbGVjdGVkIGJ5IHRoZSBgTkZUX1JFSkVDVF8qYCBvcHRpb25zIGFuZCBhbHNvIGBJUF9ORl9UQVJHRVRfUkVKRUNUYCBhbmQgYElQNl9ORl9UQVJHRVRfUkVKRUNUYCAuIFRoaXMgbWVhbnMgdGhhdCBlbmFibGluZyBgTkZUX1JFSkVDVF9JUFY0YCBhbmQgYE5GVF9SRUpFQ1RfSVBWNmAgaXMgc3VmZmljaWVudCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LiBUaGF0J3MgZ29vZCwga2VlcHMgdGhpbmdzIGNsZWFuZXIuXG5cbk5vdywgZm9jdXNpbmcgb24gY29ubmVjdGlvbiB0cmFja2luZywgd2UgaGF2ZSBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0NPTk5DT1VOVGAgd2l0aCB1cy4gYE5GVF9DT05OTElNSVRgIHNlbGVjdHMgYE5GX0NPTk5DT1VOVGAsIG1ha2luZyB0aGF0IGEgbG9naWNhbCBkZXBlbmRlbmN5LlxuXG5GaW5hbGx5LCBsZXQncyBjb25zaWRlciB0aGUgXCJmb3J3YXJkIHBhdGhcIiBmdW5jdGlvbnMuIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGluIGBuZXQvY29yZS9kZXYuY2AsIHNvIGl0J3MgYWx3YXlzIGluY2x1ZGVkLiBIb3dldmVyLCBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIGlzIGluIGBuZl9mbG93X3RhYmxlX3BhdGguY2AuIE5lZWQgdG8gcXVpY2tseSByZXZpZXcgd2hlbiBgbmZfZmxvd190YWJsZV9wYXRoLmNgIGdldHMgYnVpbHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzAwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE2OjA5LjI4OTEyNjAxOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEzMDgzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9wYXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDM9bmZfZmxvd190YWJsZS1vYmpzXFx0XFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NDpcXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDUtXFx0XFx0XFx0XFx0ICAgbmZfZmxvd190YWJsZV9vZmZsb2FkLm8gbmZfZmxvd190YWJsZV94ZHAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjowOS4zMzA0NDAyNDhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwMTQ5NDM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGbG93IFRhYmxlIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIHdpdGhpbiBgbmZfZmxvd190YWJsZWAuIEdpdmVuIG15IGJhY2tncm91bmQsIEkgdW5kZXJzdGFuZCB0aGlzIGlzIGJ1aWx0IHVzaW5nIGBORl9GTE9XX1RBQkxFYCwgd2hpY2ggaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgYmFzZSBzdHJ1Y3R1cmUuIE5vdywgSSB3YW50IHRvIHRyYWNlIGEgcGFydGljdWxhciBmdW5jdGlvbiBvciBwYXRoLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBmb3J3YXJkaW5nIHBhdGggaXMgYnVpbHQuIEknbGwgd2FudCB0byBjaGVjayBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAuIEkgcmVjYWxsIHRoYXQgb25lIGJlaW5nIHJlbGF0ZWQgdG8gZW5jYXBzdWxhdGlvbi4gSSBrbm93IHRoYXQgbGl2ZXMgaW4gYG5ldC9pcHY0L2lwaXAuY2AuIFRoZSBuZXh0IHF1ZXN0aW9uIGlzIHdoZW4gaXMgdGhhdCBidWlsdD8gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIG9yZGVyIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzYxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6MTIuNTMxOTM3MjEzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg3MTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGlwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSArPSBpcG1yX2Jhc2Uub1xcbm5ldC9pcHY0L01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORVRfSVBJUCkgKz0gaXBpcC5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMjYtZ3JlLXkgOj0gZ3JlX2RlbXV4Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6MTIuNTc0ODE1MTMyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTEzNTcxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbnNpZGVyaW5nIElQIFR1bm5lbGluZyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUgc3lzdGVtIG5lZWRzIHRvIHN1cHBvcnQgSVAtaW4tSVAgdHVubmVscywgc28gZW5hYmxpbmcgYE5FVF9JUElQYCBpcyBkZWZpbml0ZWx5IHRoZSByaWdodCBtb3ZlLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIEknbSB0aGlua2luZyBhYm91dCBJUHY2IHR1bm5lbGluZy4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIEkgbmVlZCB0byBjb25zaWRlciBpcyBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAsIHdoaWNoLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIHJlc2lkZXMgd2l0aGluIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHR1bm5lbCBmb3J3YXJkaW5nIHBhdGggaXMgY29ycmVjdGx5IGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkIGZvciBJUHY2IHR1bm5lbHMuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGNydWNpYWwgZm9yIHNldHRpbmcgdXAgdGhlIGVuY2Fwc3VsYXRpb24gYW5kIGRlY2Fwc3VsYXRpb24gbG9naWMsIGVzcGVjaWFsbHkgYXJvdW5kIGhlYWRlciBtYW5pcHVsYXRpb24gYW5kIHJvdXRlIGxvb2t1cHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpdGggdGhlIHR1bm5lbCBkcml2ZXIgYW5kIHRoZSBJUHY2IHN0YWNrLiBHaXZlbiB0aGF0IGl0IHJlc2lkZXMgaW4gdGhlIElQdjYgdHVubmVsIGNvZGUsIGl0IGNsZWFybHkgcGxheXMgYSBrZXkgcm9sZSBpbiBtYWtpbmcgc3VyZSBJUHY2IHRyYWZmaWMgaXMgY29ycmVjdGx5IHJvdXRlZCB0aHJvdWdoIHRoZXNlIHR1bm5lbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5Njk3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6MTUuNzI2MTc1MDM4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTA3MTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfdHVubmVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTQxPW9iai0kKENPTkZJR19JUFY2X1NJVCkgKz0gc2l0Lm9cXG5uZXQvaXB2Ni9NYWtlZmlsZTo0MjpvYmotJChDT05GSUdfSVBWNl9UVU5ORUwpICs9IGlwNl90dW5uZWwub1xcbm5ldC9pcHY2L01ha2VmaWxlLTQzLW9iai0kKENPTkZJR19JUFY2X0dSRSkgKz0gaXA2X2dyZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE2OjE1Ljc2NzI0OTgxOFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgxNjA5OTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGRpc3RpbGxlZCBpbnRvIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkNvbnNpZGVyaW5nIElQdjYgVHVubmVsaW5nIGFuZCBEYXRhIFN0cnVjdHVyZSBBbGlnbm1lbnQqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYElQVjZfVFVOTkVMYCBuZWVkcyB0byBiZSBlbmFibGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBhY2NvdW50ZWQgZm9yLiBOb3csIGxldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gbG9vayBhdCBob3cgZm9yd2FyZCBwYXRocyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBgZHNhX3VzZXJfZmlsbF9mb3J3YXJkX3BhdGhgIGZ1bmN0aW9uLiBUaGF0J3MgcHJvYmFibHkgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGZvciB0aGlzLiBJIGtub3cgaXQncyBsb2NhdGVkIGluIGBuZXQvZHNhL3VzZXIuY2AuXG5cblRoZSBuZXh0IHF1ZXN0aW9uIEkgaGF2ZSBpcywgYXQgd2hhdCBwb2ludCBpcyBgbmV0L2RzYS91c2VyLmNgIGV2ZW4gYnVpbHQgaW50byB0aGUga2VybmVsPyBUaGlzIHF1ZXN0aW9uIG5lZWRzIGFuc3dlcmluZyB0byBlbnN1cmUgdGhhdCB3aGF0ZXZlciBpcyByZXF1aXJlZCBpcyBhbHNvIGJlaW5nIGNvbXBpbGVkIHdoZW4gaXQgbmVlZHMgdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDg2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6MTguODQ4ODYxNzc1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQ5NDAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9kc2EvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RzYS9NYWtlZmlsZT0xMD1kc2FfY29yZS15ICs9IFxcXFxcXG4tLVxcbm5ldC9kc2EvTWFrZWZpbGUtMTktXFx0dHJhY2UubyBcXFxcXFxubmV0L2RzYS9NYWtlZmlsZToyMDpcXHR1c2VyLm9cXG5uZXQvZHNhL01ha2VmaWxlLTIxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjoxOC45MDAzNjA2MzRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE1MzM3MzIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEU0EgQ29yZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmcm9tIGEgYGRzYV9jb3JlYCBwZXJzcGVjdGl2ZSwgd2hpY2ggaXMgYnVpbHQgb24gYE5FVF9EU0FgLiBUaGUgY29yZSBoZXJlIGlzIHdoYXQgbWF0dGVyczsgdGhvc2UgaGFyZHdhcmUtc3BlY2lmaWMgZnVuY3Rpb25zLCBgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvYCBhbmQgYG10a19mbG93X2dldF93ZG1hX2luZm9gLCBmb3VuZCBpbiBgYWlyb2hhX3BwZS5jYCBhbmQgYG10a19wcGVfb2ZmbG9hZC5jYCByZXNwZWN0aXZlbHksIGFyZSBwcm9iYWJseSBpcnJlbGV2YW50IGluIGEgUUVNVSBlbnZpcm9ubWVudCwgYW5kIGl0IGlzIHRoZSBjb3JlIHRoYXQgbWF0dGVycy4gSSBjYW4gaWdub3JlIGVuYWJsaW5nIHRob3NlIHNwZWNpZmljIGRyaXZlcnMgYmVjYXVzZSB0aGUgaGVhcnQgb2YgaXQgaXMgdGhlIGNvcmUgY2hhbmdlcy5cblxuVGhlcmVmb3JlLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byBjb25zaWRlciBhcmU6IGBORl9UQUJMRVNgLCBgTkZfRkxPV19UQUJMRWAsIGBORlRfRkxPV19PRkZMT0FEYCwgYE5GVF9SRUpFQ1RfSVBWNGAsIGBORlRfUkVKRUNUX0lQVjZgLCBgTkZUX1JFSkVDVF9JTkVUYCwgYE5GVF9YRlJNYCwgYE5GVF9DT05OTElNSVRgLCBgTkZfQ09OTlRSQUNLYCwgYE5FVF9JUElQYCwgYElQVjZfVFVOTkVMYCwgYW5kIGBORVRfRFNBYC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBgTkZUX0ZMT1dfT0ZGTE9BRGAgcmVsaWVzIG9uIGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfRkxPV19UQUJMRWAsIHNvIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQgdG9vLiBBbmQgSSBzZWUgdGhhdCBgTkZUX1JFSkVDVF9JTkVUYCBkZXBlbmRzIG9uIGBORl9UQUJMRVNfSU5FVGAgYXMgd2VsbCwgc28gdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQyNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjoyNC4wNTM3MzYzMjJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDA4NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9UQUJMRVNfSU5FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE2OjI0LjA5NDc1NTc4MVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI5MTU0NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipDaGVja2luZyBEZXBlbmRlbmNpZXMgZm9yIE5ldHdvcmsgRnVuY3Rpb25hbGl0eSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBzdGFydGluZyB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgYE5GX1RBQkxFU19JTkVUYCBuZWVkcyB0byBiZSBlbmFibGVkLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIHVuZGVyc3Rvb2QsIGFuZCB3ZSdsbCBrZWVwIHRoYXQgYXMgb3VyIGJhc2UuXG5cbk5vdywgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBlbnN1cmUgdGhhdCBgTkZUX1hGUk1gIGRvZXNuJ3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBpbnRlcmRlcGVuZGVuY2llcyB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBGaXJzdCwgaXQgcmVxdWlyZXMgYE5GX1RBQkxFU2AgaXRzZWxmLCB3aGljaCBtYWtlcyBzZW5zZS4gV2Uga25vdyB0aGF0IGBORl9UQUJMRVNgIGhhcyBgTkZfVEFCTEVTX0lORVRgIGFzIGEgY29tcG9uZW50LCBzbyB3ZSdyZSBnb29kIHRoZXJlLiBXaGF0IGFib3V0IGBYRlJNYD8gTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBgWEZSTWAgZG9lc24ndCBoYXZlIGFueSBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cyB0aGF0IHdlIHNob3VsZCBiZSBjb25zaWRlcmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjoyNy41MjM5MTM3NzRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTI2MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlRfWEZSTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTYwOD1jb25maWcgTkZUX0ZJQl9JTkVUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjE3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2MTg6Y29uZmlnIE5GVF9YRlJNXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYxOS1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyB4ZnJtL0lQU2VjIHNlY3VyaXR5IGFzc29jaWF0aW9uIG1hdGNoaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjoyNy41NjYwNDQ1NzNaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5MTYyNjg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlOiBORlRfUkVKRUNUX0lQVjQqKlxuXG5SaWdodCwgc28gdGhpcyBjb2RlIHNlY3Rpb24gc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhdCBmaXJzdCBnbGFuY2UuIEl0J3MgdHVja2VkIGluc2lkZSBhbiBgaWYgTkZfVEFCTEVTYCBibG9jaywgc28gY2xlYXJseSwgdGhhdCdzIHRoZSBwcmltYXJ5LCBhbmQgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIHRoZSAqb25seSogZXhwbGljaXQgZGVwZW5kZW5jeS4gQnV0IHRoZW4sIGl0IGRhd25zIG9uIG1lLCBgWEZSTWAgaXMgc3VjaCBhIGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgY29tcG9uZW50OyBpdCdzIHByYWN0aWNhbGx5IGFsd2F5cyBjb21waWxlZCBpbi4gSXQgd291bGQgYmUgYSBzaWxseSBvdmVyc2lnaHQgdG8gbWlzcyBpZiBgTkZUX1JFSkVDVF9JUFY0YCByZWxpZXMgb24gaXQuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIGBORlRfUkVKRUNUX0lQVjRgJ3MgY29uZmlnIG9wdGlvbnMuIEFoLCB0aGVyZSBpdCBpcy4gQ29uZmlybWVkLiBJdCBkaXJlY3RseSBkZXBlbmRzIG9uIGBORl9UQUJMRVNfSVBWNGAuIFRoYXQncyBub3QgZW50aXJlbHkgdW5leHBlY3RlZCwgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTQzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6MzAuODU3Njc0MTk3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE1MjY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTX0lQVjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MzM9aWYgTkZfVEFCTEVTXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzQtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzU6Y29uZmlnIE5GX1RBQkxFU19JUFY0XFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiSVB2NCBuZl90YWJsZXMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6MzAuODk5ODMwNzE2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2OTgyNjM4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBrZXJuZWwgbW9kdWxlIGNvbmZpZ3VyYXRpb24sIGZvY3VzaW5nIG9uIHRoZSBlc3NlbnRpYWwgYG5mdGFibGVzYCBjb21wb25lbnRzOlxuXG4qKk15IEtlcm5lbCBNb2R1bGUgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBnZXR0aW5nIHRoaXMgc3lzdGVtIHVwIHRvIHNudWZmIHdpdGggYG5mdGFibGVzYC4gVG8gbWFrZSBzdXJlIGl0J3MgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQsIEkgKmFic29sdXRlbHkqIG5lZWQgdG8gZW5hYmxlIGBORl9UQUJMRVNfSVBWNGAuIFRoYXQncyBhIG5vLWJyYWluZXIsIGZ1bmRhbWVudGFsIGZvciBoYW5kbGluZyBJUHY0IHRyYWZmaWMgd2l0aCBuZnRhYmxlcy4gQW5kIGlmIEkgd2FudCB0byBnZXQgdGhlIElQdjYgcmVqZWN0cyBkb25lIGluIGBuZnRhYmxlc2AsIEkgYWxzbyBuZWVkIGBORl9UQUJMRVNfSVBWNmAuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuICBJIG5lZWQgdG8gY29uZmlndXJlIGJvdGggdG8gZ2V0IGV2ZXJ5dGhpbmcgd29ya2luZyBhcyBleHBlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5NjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjozMy41OTgwOTczMjlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwOTM2MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9UQUJMRVNfSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0yOT1pZiBORl9UQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0zMC1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzozMTpjb25maWcgTkZfVEFCTEVTX0lQVjZcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJJUHY2IG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjozMy42MzkwMzYxOThaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2NzQ5NzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmV2aWV3IGEgc2V0IG9mIGtlcm5lbCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBuZXR3b3JraW5nIHRhc2suIEZpcnN0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGZ1bmRhbWVudGFsIE5ldGZpbHRlciBhbmQgbmZ0YWJsZXMgY29tcG9uZW50cywgc3BlY2lmaWNhbGx5IGBORl9UQUJMRVNgLCBgTkZfVEFCTEVTX0lQVjRgLCBgTkZfVEFCTEVTX0lQVjZgLCBhbmQgdGhlIGNvbWJpbmVkIGBORl9UQUJMRVNfSU5FVGAuIFRoZXNlIGFyZSwgb2YgY291cnNlLCBhYnNvbHV0ZWx5IGNydWNpYWwgdG8gYWxtb3N0IGFueSBtb2Rlcm4gbmV0d29yayBzZXR1cCB1c2luZyBuZnRhYmxlcy4gVGhlbiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZmxvdyBvZmZsb2FkIGNvbmZpZ3VyYXRpb25zOyBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCBhbmQgdGhlIHJlamVjdCBjb25maWd1cmF0aW9uczsgYE5GVF9SRUpFQ1RfSVBWNGAsIGBORlRfUkVKRUNUX0lQVjZgLCBhbmQgYE5GVF9SRUpFQ1RfSU5FVGAuXG5cbkknbGwgYWxzbyBrZWVwIGluIG1pbmQgcmVsYXRlZCBvcHRpb25zIGxpa2UgYE5GVF9YRlJNYCBmb3IgdHJhbnNwb3J0IGxheWVyIHNlY3VyaXR5IGFuZCBlbmNhcHN1bGF0aW9uLCBhbmQgdGhlIGBORlRfQ09OTkxJTUlUYCBtb2R1bGUgZm9yIGNvbm5lY3Rpb24gbGltaXRpbmcsIHNob3VsZCBJIG5lZWQgdGhlbS4gV2UgY2FuJ3QgZm9yZ2V0IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHBpZWNlLCBgTkZfQ09OTlRSQUNLYC4gVGhlbiwgdGhlcmUncyB0aGUgbW9yZSBnZW5lcmFsIG5ldHdvcmtpbmcgb3B0aW9ucyBsaWtlIGBORVRfSVBJUGAgYW5kIGBJUFY2X1RVTk5FTGAgdG8gY29uc2lkZXIuXG5cbk5vdywgYSBiaXQgb2YgYSBzYW5pdHkgY2hlY2sgaXMgbmVlZGVkIG9uIHRoaXMgbGFzdCBvbmUg4oCTIGBORVRfRFNBYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24uIEknbSBwcmV0dHkgc3VyZSBpdCBkZXBlbmRzIG9uIGEgZmV3IHRoaW5ncy4gQmVzdCB0byBlbnN1cmUgYWxsIHRoZSBwcmVyZXF1aXNpdGVzIGFyZSBtZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjc0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE2OjM4LjAwNjUzNTc1N1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE5MTI1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9EU0FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RzYS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kc2EvS2NvbmZpZy0yLVxcbm5ldC9kc2EvS2NvbmZpZzozOm1lbnVjb25maWcgTkVUX0RTQVxcbm5ldC9kc2EvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnPTE3PWlmIE5FVF9EU0FcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0yMC1cXG5uZXQvZHNhL0tjb25maWc6MjE6Y29uZmlnIE5FVF9EU0FfVEFHX05PTkVcXG5uZXQvZHNhL0tjb25maWctMjItXFx0dHJpc3RhdGUgXFxcIk5vLW9wIHRhZyBkcml2ZXJcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMjYtXFxubmV0L2RzYS9LY29uZmlnOjI3OmNvbmZpZyBORVRfRFNBX1RBR19BUjkzMzFcXG5uZXQvZHNhL0tjb25maWctMjgtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIEF0aGVyb3MgQVI5MzMxIFNvQyB3aXRoIGJ1aWx0LWluIHN3aXRjaFxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0zMi1cXG5uZXQvZHNhL0tjb25maWc6MzM6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fQ09NTU9OXFxubmV0L2RzYS9LY29uZmlnLTM0LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMzYtXFxubmV0L2RzYS9LY29uZmlnOjM3OmNvbmZpZyBORVRfRFNBX1RBR19CUkNNXFxubmV0L2RzYS9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBCcm9hZGNvbSBzd2l0Y2hlcyB1c2luZyBpbi1mcmFtZSBoZWFkZXJzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTQzLVxcbm5ldC9kc2EvS2NvbmZpZzo0NDpjb25maWcgTkVUX0RTQV9UQUdfQlJDTV9MRUdBQ1lcXG5uZXQvZHNhL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIEJDTTYzeHggbGVnYWN5IHN3aXRjaGVzIHVzaW5nIGluLWZyYW1lIGhlYWRlcnNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctNTMtXFxubmV0L2RzYS9LY29uZmlnOjU0OmNvbmZpZyBORVRfRFNBX1RBR19CUkNNX0xFR0FDWV9GQ1NcXG5uZXQvZHNhL0tjb25maWctNTUtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIEJDTTUzeHggbGVnYWN5IHN3aXRjaGVzIHVzaW5nIGluLWZyYW1lIGhlYWRlcnNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctNjMtXFxubmV0L2RzYS9LY29uZmlnOjY0OmNvbmZpZyBORVRfRFNBX1RBR19CUkNNX1BSRVBFTkRcXG5uZXQvZHNhL0tjb25maWctNjUtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIEJyb2FkY29tIHN3aXRjaGVzIHVzaW5nIHByZXBlbmRlZCBoZWFkZXJzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTcxLVxcbm5ldC9kc2EvS2NvbmZpZzo3Mjpjb25maWcgTkVUX0RTQV9UQUdfSEVMTENSRUVLXFxubmV0L2RzYS9LY29uZmlnLTczLVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBIaXJzY2htYW5uIEhlbGxjcmVlayBUU04gc3dpdGNoZXNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctNzctXFxubmV0L2RzYS9LY29uZmlnOjc4OmNvbmZpZyBORVRfRFNBX1RBR19HU1dJUFxcbm5ldC9kc2EvS2NvbmZpZy03OS1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTGFudGlxIC8gSW50ZWwgR1NXSVAgc3dpdGNoZXNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctODMtXFxubmV0L2RzYS9LY29uZmlnOjg0OmNvbmZpZyBORVRfRFNBX1RBR19EU0FfQ09NTU9OXFxubmV0L2RzYS9LY29uZmlnLTg1LVxcdHRyaXN0YXRlXFxubmV0L2RzYS9LY29uZmlnLTg2LVxcbm5ldC9kc2EvS2NvbmZpZzo4Nzpjb25maWcgTkVUX0RTQV9UQUdfRFNBXFxubmV0L2RzYS9LY29uZmlnLTg4LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNYXJ2ZWxsIHN3aXRjaGVzIHVzaW5nIERTQSBoZWFkZXJzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTkzLVxcbm5ldC9kc2EvS2NvbmZpZzo5NDpjb25maWcgTkVUX0RTQV9UQUdfRURTQVxcbm5ldC9kc2EvS2NvbmZpZy05NS1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTWFydmVsbCBzd2l0Y2hlcyB1c2luZyBFdGhlclR5cGUgRFNBIGhlYWRlcnNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTAwLVxcbm5ldC9kc2EvS2NvbmZpZzoxMDE6Y29uZmlnIE5FVF9EU0FfVEFHX01US1xcbm5ldC9kc2EvS2NvbmZpZy0xMDItXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIE1lZGlhdGVrIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTEwNi1cXG5uZXQvZHNhL0tjb25maWc6MTA3OmNvbmZpZyBORVRfRFNBX1RBR19NWExfODYyWFhcXG5uZXQvZHNhL0tjb25maWctMTA4LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgTXhMODYyeHggc3dpdGNoZXNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTEzLVxcbm5ldC9kc2EvS2NvbmZpZzoxMTQ6Y29uZmlnIE5FVF9EU0FfVEFHX01YTF9HU1cxWFhcXG5uZXQvZHNhL0tjb25maWctMTE1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgR1NXMXh4IHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTEyMS1cXG5uZXQvZHNhL0tjb25maWc6MTIyOmNvbmZpZyBORVRfRFNBX1RBR19LU1pcXG5uZXQvZHNhL0tjb25maWctMTIzLVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNaWNyb2NoaXAgODc5NS85Mzd4Lzk0NzcvOTg5MyBmYW1pbGllcyBvZiBzd2l0Y2hlc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xMjctXFxubmV0L2RzYS9LY29uZmlnOjEyODpjb25maWcgTkVUX0RTQV9UQUdfTkVUQ1xcbm5ldC9kc2EvS2NvbmZpZy0xMjktXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIE5YUCBORVRDIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTEzNy1cXG5uZXQvZHNhL0tjb25maWc6MTM4OmNvbmZpZyBORVRfRFNBX1RBR19PQ0VMT1RcXG5uZXQvZHNhL0tjb25maWctMTM5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBPY2Vsb3QgZmFtaWx5IG9mIHN3aXRjaGVzLCB1c2luZyBOUEkgcG9ydFxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNDgtXFxubmV0L2RzYS9LY29uZmlnOjE0OTpjb25maWcgTkVUX0RTQV9UQUdfT0NFTE9UXzgwMjFRXFxubmV0L2RzYS9LY29uZmlnLTE1MC1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgT2NlbG90IGZhbWlseSBvZiBzd2l0Y2hlcywgdXNpbmcgVkxBTlxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNTgtXFxubmV0L2RzYS9LY29uZmlnOjE1OTpjb25maWcgTkVUX0RTQV9UQUdfUUNBXFxubmV0L2RzYS9LY29uZmlnLTE2MC1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgUXVhbGNvbW0gQXRoZXJvcyBRQ0E4SyBzd2l0Y2hlc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNjQtXFxubmV0L2RzYS9LY29uZmlnOjE2NTpjb25maWcgTkVUX0RTQV9UQUdfUlRMNF9BXFxubmV0L2RzYS9LY29uZmlnLTE2Ni1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgUmVhbHRlayA0IGJ5dGUgcHJvdG9jb2wgQSB0YWdzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTE3MS1cXG5uZXQvZHNhL0tjb25maWc6MTcyOmNvbmZpZyBORVRfRFNBX1RBR19SVEw4XzRcXG5uZXQvZHNhL0tjb25maWctMTczLVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBSZWFsdGVrIDggYnl0ZSBwcm90b2NvbCA0IHRhZ3NcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTc3LVxcbm5ldC9kc2EvS2NvbmZpZzoxNzg6Y29uZmlnIE5FVF9EU0FfVEFHX1JaTjFfQTVQU1dcXG5uZXQvZHNhL0tjb25maWctMTc5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBSZW5lc2FzIFJaL04xIEE1UFNXIHN3aXRjaFxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xODQtXFxubmV0L2RzYS9LY29uZmlnOjE4NTpjb25maWcgTkVUX0RTQV9UQUdfTEFOOTMwM1xcbm5ldC9kc2EvS2NvbmZpZy0xODYtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIFNNU0MvTWljcm9jaGlwIExBTjkzMDMgZmFtaWx5IG9mIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTE5MC1cXG5uZXQvZHNhL0tjb25maWc6MTkxOmNvbmZpZyBORVRfRFNBX1RBR19TSkExMTA1XFxubmV0L2RzYS9LY29uZmlnLTE5Mi1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTlhQIFNKQTExMDUgc3dpdGNoZXNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTk5LVxcbm5ldC9kc2EvS2NvbmZpZzoyMDA6Y29uZmlnIE5FVF9EU0FfVEFHX1RSQUlMRVJcXG5uZXQvZHNhL0tjb25maWctMjAxLVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBzd2l0Y2hlcyB1c2luZyBhIHRyYWlsZXIgdGFnXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTIwNS1cXG5uZXQvZHNhL0tjb25maWc6MjA2OmNvbmZpZyBORVRfRFNBX1RBR19WU0M3M1hYXzgwMjFRXFxubmV0L2RzYS9LY29uZmlnLTIwNy1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTWljcm9jaGlwL1ZpdGVzc2UgVlNDNzN4eCBmYW1pbHkgb2Ygc3dpdGNoZXMsIHVzaW5nIFZMQU5cXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMjExLVxcbm5ldC9kc2EvS2NvbmZpZzoyMTI6Y29uZmlnIE5FVF9EU0FfVEFHX1hSUzcwMFhcXG5uZXQvZHNhL0tjb25maWctMjEzLVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBYUlM3MDB4IHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTIxNy1cXG5uZXQvZHNhL0tjb25maWc6MjE4OmNvbmZpZyBORVRfRFNBX1RBR19ZVDkyMVhcXG5uZXQvZHNhL0tjb25maWctMjE5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IHN3aXRjaGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjozOC4wNDg0NTM2NDdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1NDY4ODkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgYW5kIGEgRm9jdXNlZCBSZXZpZXcqKlxuXG5Pa2F5LCBhZnRlciB0aGlua2luZyBhYm91dCB0aGlzLCBJJ3ZlIGNvbmNsdWRlZCB0aGF0IGBORVRfRFNBYCBpcyBzdWZmaWNpZW50IGZvciBub3cuIEkgZG9uJ3Qgc2VlIGFueSBpbW1lZGlhdGUgbmVlZCB0byBnbyBmdXJ0aGVyIGRvd24gdGhhdCBwYXRoLlxuXG5MZXQncyBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IHJlZ2FyZGluZyB0aG9zZSBmb2N1cyBzeW1ib2xzOiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgYG5mdF9yZWplY3RfaXB2NF9ldmFsYCwgYG5mdF9yZWplY3RfaXB2Nl9ldmFsYCwgYG5mdF9yZWplY3RfaW5ldF9ldmFsYCwgYG5mdF9tZXRhX2dldF9ldmFsYCwgYG5mdF9ydF9nZXRfZXZhbGAsIGBuZnRfeGZybV9nZXRfZXZhbGAsIGBuZnRfY29ubmxpbWl0X2V2YWxgLCBhbmQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YC4gVGhlc2UgYXJlIHRoZSBrZXkgYXJlYXMgdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuXG5cbkhvbGQgb24gYSBtaW51dGUsIEknbSBqdXN0IHJlY2FsbGluZyB0aGF0IGBuZnRfcmVqZWN0X2lwdjRfZXZhbGAgaXMsIGluIGZhY3QsIHN0YXRpY2FsbHkgZGVmaW5lZC4gTGV0IG1lIGp1c3Qgb3BlbiB1cCBgbmZ0X3JlamVjdF9pcHY0LmNgIGFuZCBtYWtlIHN1cmUgbXkgaW5zdGluY3RzIGFyZSBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDgyOCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjo0Mi4wMDMxNDUxNzFaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNTEyMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9yZWplY3RfaXB2NF9ldmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY0LmMtMTgtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jOjE5OnN0YXRpYyB2b2lkIG5mdF9yZWplY3RfaXB2NF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY0LmMtMjAtXFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjQuYz00MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcmVqZWN0X2lwdjRfb3BzID0ge1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jLTQzLVxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3JlamVjdCkpLFxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjQuYzo0NDpcXHQuZXZhbFxcdFxcdD0gbmZ0X3JlamVjdF9pcHY0X2V2YWwsXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jLTQ1LVxcdC5pbml0XFx0XFx0PSBuZnRfcmVqZWN0X2luaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE2OjQyLjA0NDY2MjM4MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzA5NDU0MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgbmV0d29yayBmdW5jdGlvbnMuIFRoZSBpbml0aWFsIHRob3VnaHQgd2FzLCBldmVuIGlmIHNvbWV0aGluZydzIHN0YXRpYywgc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gZmluZCBpdCBpZiBpdCBpc24ndCBpbmxpbmVkLCBzbyBpdCdzICpwb3RlbnRpYWxseSogdGFyZ2V0YWJsZS4gQnV0IGxldCdzIHJlZmluZSB0aGlzIGFuYWx5c2lzLiBcblxuQWhhISBgbmZfc2VuZF9yZXNldGAgYW5kIGBuZl9zZW5kX3Jlc2V0NmAgYXJlIGJvdGggKmV4cG9ydGVkKiBhbmQgKm5vbi1zdGF0aWMqLiBBbmQgc2ltaWxhcmx5LCBgbmZfc2VuZF91bnJlYWNoYCBhbmQgYG5mX3NlbmRfdW5yZWFjaDZgIGFyZSBhbHNvIGV4cG9ydGVkLiBTbyB0aGF0J3MgZ29vZCEgVGhhdCBtYWtlcyB0aGVtIGJldHRlciBjYW5kaWRhdGVzLCBhbmQgd29ydGggZm9jdXNpbmcgb24uIExldCdzIG1ha2UgYSBub3RlIG9mIHRob3NlIGZvdXIgYXMgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIGZ1enppbmcuXG5cbk5vdywgd2hhdCBhYm91dCB0aGUgYG5mdGAgc3Vic3lzdGVtPyBMZXQncyBjaGVjayBgbmZ0X21ldGFfZ2V0X2V2YWxgLi4uIHllcCwgZXhwb3J0ZWQuIFRoYXQgbG9va3MgcHJvbWlzaW5nLiBBbmQgYG5mdF9ydF9nZXRfZXZhbGAgaXMgYWxzbyBleHBvcnRlZC4gT2theS4gV2hhdCBhYm91dCBgbmZ0X3hmcm1fZ2V0X2V2YWxgPyBBaCwgaXQncyBzdGF0aWMsIGRhbW4uIEJ1dCwgaG9sZCBvbi4uLiBgbmZ0X3hmcm1fZ2V0X2V2YWxfb3V0YCBpcyBhbHNvIHN0YXRpYy4gTGV0J3MgYmFja3RyYWNrLCBpdCdzICpzdGF0aWMqIGJ1dCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQ/IEkgc2VlIGBuZnRfeGZybV9nZXRfb3BzYCBpcyByZWdpc3RlcmVkLCBzbyBtYXliZSB0aGF0J3MgYSBiZXR0ZXIgc3RhcnRpbmcgcG9pbnQuXG5cbkFuZCBmaW5hbGx5LCBsZXQncyBsb29rIGF0IGBuZnRfY29ubmxpbWl0X2V2YWxgLCB0aGF0IG9uZSBpcyBzdGF0aWMuIEJ1dCwgd2FpdCwgYG5mX2Nvbm5jb3VudF9hZGRgIGlzIGV4cG9ydGVkLiBPa2F5LCBnb29kLiBTbyB0aGUgcGljdHVyZSdzIGJlY29taW5nIGNsZWFyZXIuIFxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQ4OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjo0Ny4zNTQxMTk4NzdaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzI4ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm5jb3VudF9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jPTEzMD1zdGF0aWMgYm9vbCBnZXRfY3Rfb3JfdHVwbGVfZnJvbV9za2Ioc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0xNjgtXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYzoxNjk6c3RhdGljIGludCBfX25mX2Nvbm5jb3VudF9hZGQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMTcwLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTI3Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jOjI3ODppbnQgbmZfY29ubmNvdW50X2FkZF9za2Ioc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMjc5LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0yODYtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsaXN0LVxcdTAwM2VsaXN0X2xvY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6Mjg3OlxcdHJldCA9IF9fbmZfY29ubmNvdW50X2FkZChuZXQsIHNrYiwgbDNudW0sIGxpc3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMjg4LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsaXN0LVxcdTAwM2VsaXN0X2xvY2spO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0yOTEtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6MjkyOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm5jb3VudF9hZGRfc2tiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTI5My1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM9NDAzPWluc2VydF90cmVlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNDM3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6NDM4OlxcdFxcdFxcdHJldCA9IG5mX2Nvbm5jb3VudF9hZGRfc2tiKG5ldCwgc2tiLCBsM251bSwgXFx1MDAyNnJiY29ubi1cXHUwMDNlbGlzdCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy00MzktXFx0XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVFWElTVClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM9NTMzPWNvdW50X3RyZWUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy01ODItXFx0Lyogc2FtZSBzb3VyY2UgbmV0d29yayAtXFx1MDAzZSBiZSBjb3VudGVkISAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6NTgzOlxcdHJldCA9IF9fbmZfY29ubmNvdW50X2FkZChuZXQsIHNrYiwgbDNudW0sIFxcdTAwMjZyYmNvbm4tXFx1MDAzZWxpc3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNTg0LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZyYmNvbm4tXFx1MDAzZWxpc3QubGlzdF9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6NDcuMzk2NDU0NTI2WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMTkxNTQ5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodHMsIGZvY3VzaW5nIG9uIHRoZSBleHBvcnRlZCBzeW1ib2xzOlxuXG4qKlJlZmxlY3Rpbmcgb24gS2VybmVsIE1vZHVsZSBFeHBvcnRzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgbmZfY29ubmNvdW50X2FkZF9za2JgIGFuZCBgbmZfY29ubmNvdW50X2NvdW50YCBhcmUgYm90aCBiZWluZyBleHBvcnRlZC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGZldyB0aGluZ3MsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2Yga2VybmVsIG1vZHVsZSBkZXNpZ24gYW5kIG5ldGZpbHRlci5cblxuRmlyc3QsIHRoZXNlIHN5bWJvbHMgYXJlIGNsZWFybHkgaW50ZW5kZWQgdG8gYmUgKnVzZWQqIGJ5IG90aGVyIG1vZHVsZXMuIFRoZXkncmUgbm90IGludGVybmFsIGZ1bmN0aW9uczsgdGhleSdyZSBtZWFudCBmb3IgaW50ZXJhY3Rpb24uIFRoZSBuYW1pbmcgc3VnZ2VzdHMgdGhleSdyZSByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcgb3IgY29ubmVjdGlvbiBjb3VudGluZyDigJMgbGlrZWx5IHBhcnQgb2Ygc29tZSBzb3J0IG9mIG5ldHdvcmsgZmlyZXdhbGwgb3IgbW9uaXRvcmluZyBmdW5jdGlvbmFsaXR5LiBUaGUgXCJuZlwiIHByZWZpeCBpcyBhIGRlYWQgZ2l2ZWF3YXkgZm9yIG5ldGZpbHRlci5cblxuSSdtIGFzc3VtaW5nIGBuZl9jb25uY291bnRfYWRkX3NrYmAgbGlrZWx5IGhhbmRsZXMgYWRkaW5nIG9yIHVwZGF0aW5nIGluZm9ybWF0aW9uIGFib3V0IGEgbmV0d29yayBwYWNrZXQgKFNLQikgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgY29ubmVjdGlvbi4gTWF5YmUgdGhpcyBpbnZvbHZlcyBpbmNyZW1lbnRpbmcgY291bnRlcnMgb3Igc3RvcmluZyBjb25uZWN0aW9uIGRldGFpbHMuIEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBuZXRmaWx0ZXIgaG9va3MsIGl0IGNvdWxkIGJlIGNhbGxlZCB3aXRoaW4gYW4gTkYgaG9vayBmdW5jdGlvbi5cblxuYG5mX2Nvbm5jb3VudF9jb3VudGAsIG9uIHRoZSBvdGhlciBoYW5kLCBsaWtlbHkgcHJvdmlkZXMgYSB3YXkgdG8gcmV0cmlldmUgb3IgZXhwb3NlIGNvbm5lY3Rpb24gY291bnQgZGF0YS4gQ291bGQgYmUgZm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvciB0byBkeW5hbWljYWxseSBhZGp1c3QgYmVoYXZpb3IgYmFzZWQgb24gY29ubmVjdGlvbiBsb2FkLiBJdCBjb3VsZCBiZSB1c2VkIHRvIGdhdGhlciBzdGF0aXN0aWNzIG9uIGEgY29ubmVjdGlvbiwgcGVyaGFwcyB0byB0cmFjayBudW1iZXIgb2YgcGFja2V0cyBhbmQgYnl0ZXMuXG5cblRoZSBmYWN0IHRoYXQgdGhlc2UgYXJlIGV4cG9ydGVkIGltcGxpZXMgdGhhdCB0aGVyZSBpcyBhIHdlbGwtZGVmaW5lZCBpbnRlcmZhY2UgZm9yIGludGVyYWN0aW5nIHdpdGggdGhpcyBcImNvbm5jb3VudFwiIGZ1bmN0aW9uYWxpdHkuIE5vdywgbXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIHJldmlldyB0aGUgYXNzb2NpYXRlZCBoZWFkZXIgZmlsZXMgYW5kIHNvdXJjZSBjb2RlIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlaXIgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQsIGNyaXRpY2FsbHksIHRoZWlyIGludGVuZGVkIHVzYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgb3BlcmF0ZSBvbiBhbmQgdGhlIHBvc3NpYmxlIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBjb25jZXJucyBpbnZvbHZlZC4gQXJlIHRoZXNlIGZ1bmN0aW9ucyB0aHJlYWQtc2FmZT8gRG8gdGhleSB1dGlsaXplIGFueSBpbnRlcm5hbCBtdXRleGVzP1xuXG5UaGlzIGV4cG9ydCBzdWdnZXN0cyB0aGF0IHdob2V2ZXIgZGV2ZWxvcGVkIHRoaXMgbW9kdWxlIHdhcyB0aGlua2luZyBhYm91dCBtb2R1bGFyaXR5LiBUaGV5IHJlY29nbml6ZWQgdGhhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIG9yIGV2ZW4gb3RoZXIgbW9kdWxlcyBtaWdodCBuZWVkIHRvIGFjY2VzcyBhbmQgdXRpbGl6ZSB0aGlzIGNvbm5lY3Rpb24gY291bnRpbmcgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBhIGdvb2QgdGhpbmcg4oCTIGdvb2QgY29kZSBkZXNpZ24gcHJvbW90ZXMgcmV1c2UgYW5kIGNvbGxhYm9yYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoZXkncmUgZGVzaWduZWQgZm9yIG1vZHVsYXJpdHkuXG5cblNvLCBpbiBzdW1tYXJ5OiBJJ20gc2VlaW5nIGEgY29ubmVjdGlvbiBjb3VudCBtb2R1bGUgb3IgZmVhdHVyZS4gSSBuZWVkIHRvIHJlc2VhcmNoIGV4YWN0bHkgaG93IHRob3NlIG1vZHVsZXMgYXJlIGRlc2lnbmVkIHRvIGludGVncmF0ZSB3aXRoIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjc5NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE2OjUyLjUxNTYxMzc0NFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE0MDEwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubmNvdW50X2NvdW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz01OTU9c3RhdGljIHZvaWQgdHJlZV9nY193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy02NjUtICovXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYzo2NjY6dW5zaWduZWQgaW50IG5mX2Nvbm5jb3VudF9jb3VudF9za2Ioc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNjY3LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy02NzQtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6Njc1OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm5jb3VudF9jb3VudF9za2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNjc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjo1Mi41NTcwMjA4MTRaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY4NDkxMzM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEFzc2Vzc21lbnQgb2YgS2V5IE5ldGZpbHRlciBTeW1ib2xzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHRoaW5raW5nIGFib3V0IHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gSSBzdGFydGVkIGJ5IHplcm9pbmcgaW4gb24gYG5mX2Nvbm5jb3VudF9hZGRfc2tiYCBhbmQgYG5mX2Nvbm5jb3VudF9jb3VudF9za2JgIGFzIGdvb2QgaW5pdGlhbCBjYW5kaWRhdGVzLiBOb3csIEkndmUgZXhwYW5kZWQgdGhlIHNjb3BlIGEgYml0LlxuXG5JJ20gYWxzbyBjb25zaWRlcmluZyBgbmZ0X2Zsb3dfcm91dGVgIGJlY2F1c2UgaXQncyBleHBvcnRlZCBhbmQgbG9va3MgaW1wb3J0YW50LiBBbmQsIHNpbWlsYXJseSwgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAgaGF2ZSBjYXVnaHQgbXkgYXR0ZW50aW9uIGZvciBiZWluZyBleHBvcnRlZC5cblxuVGhlcmVmb3JlLCBteSBjdXJyZW50IHdvcmtpbmcgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGluY2x1ZGVzOlxuXG4qICAgYG5mdF9mbG93X3JvdXRlYFxuKiAgIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgXG4qICAgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYFxuKiAgIGBuZl9zZW5kX3Jlc2V0YFxuKiAgIGBuZl9zZW5kX3Jlc2V0NmBcbiogICBgbmZfc2VuZF91bnJlYWNoYFxuKiAgIGBuZl9zZW5kX3VucmVhY2g2YFxuKiAgIGBuZnRfbWV0YV9nZXRfZXZhbGBcbiogICBgbmZ0X3J0X2dldF9ldmFsYFxuKiAgIGBuZl9jb25uY291bnRfYWRkX3NrYmBcbiogICBgbmZfY29ubmNvdW50X2NvdW50X3NrYmBcbiogICBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgXG5cbkkgZG91YmxlLWNoZWNrZWQgZWFjaCBvbmUgdG8gYmUgc3VyZSB0aGV5IHdlcmUgZXhwb3J0ZWQsIGp1c3QgdG8gY29uZmlybSBteSBjdXJyZW50IHVuZGVyc3RhbmRpbmcuIFNvLCBgbmZ0X2Zsb3dfcm91dGVgIGFuZCB0aGUgYGRldl9maWxsX2ZvcndhcmRfcGF0aCpgIGZ1bmN0aW9ucyBhcmUgYWxsIGV4cG9ydGVkLiBBbHNvIHRoZSBgbmZfc2VuZF8qYCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLCBhbG9uZyB3aXRoIHRoZSBgbmZ0XypfZ2V0X2V2YWxgIGZ1bmN0aW9ucywgYW5kIG9mIGNvdXJzZSB0aGUgYG5mX2Nvbm5jb3VudF8qYCBmdW5jdGlvbnMuXG5cbkkgZGlkIHJ1biBpbnRvIGEgc21hbGwgYW5vbWFseSB3aXRoIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAuIFdoaWxlIGl0ICppc24ndCogZXhwb3J0ZWQsIGl0J3Mgbm9uLXN0YXRpYyBhbmQgZGVmaW5lZCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYCwgd2hpY2ggbWFrZXMgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24sIGRlc3BpdGUgYmVpbmcgbm9uLWV4cG9ydGVkLlxuXG5XYWl0Li4uIHNvbWV0aGluZyBzdGlsbCBzZWVtcyBhIGxpdHRsZSBvZmYuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgYG5mX3NlbmRfdW5yZWFjaGAgaXMgZXhwb3J0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTIyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE2OjU5LjI0MTkzNjM4WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODYzMDU0Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXChuZl9zZW5kX3VucmVhY2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MzQ4PXZvaWQgbmZfc2VuZF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCBjb2RlLCBpbnQgaG9vaylcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTM2OC19XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM6MzY5OkVYUE9SVF9TWU1CT0xfR1BMKG5mX3NlbmRfdW5yZWFjaCk7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzcwLVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmM9NDM4PXZvaWQgbmZfc2VuZF91bnJlYWNoNihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2JfaW4sXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy00NTEtfVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jOjQ1MjpFWFBPUlRfU1lNQk9MX0dQTChuZl9zZW5kX3VucmVhY2g2KTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy00NTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE3OjAxLjEwNDk5OTMwNVoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODY5NjMzNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSdtIHRoaW5raW5nIHRoZXNlIHRoaW5ncyBteXNlbGY6XG5cbioqRXhwb3J0aW5nIE5GVHMgYW5kIEV2YWx1YXRpb24gUmV0cmlldmFsKipcblxuQWxyaWdodCwgc28gdGhlIHRvcGljIGF0IGhhbmQgaXMgdGhlIGV4cG9ydCBwcm9jZXNzLCBhbmQsIHllcywgSSdtIGNvbmZpcm1pbmcgdGhhdCB0aGUgcmVsZXZhbnQgaXRlbXMgYXJlIGluZGVlZCBiZWluZyBleHBvcnRlZC4gTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBgbmZ0X3J0X2dldF9ldmFsYCBmdW5jdGlvbi4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIHJldHJpZXZpbmcgdGhlIGV2YWx1YXRpb24gcmVzdWx0cyByZXNpZGVzLCBhbmQgdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIHdvcmtzIGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGUgZXhwb3J0IHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdmFsdWVzIGFyZSBhY3F1aXJlZCBhbmQgaG93IHRoYXQgYWNxdWlzaXRpb24gd29ya3MgaW4gcmVsYXRpb24gdG8gaG93IGl0IGlzIGV4cG9ydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODgzNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE3OjAzLjk3NDYzNjEzNFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyOTU0Mzc4NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKG5mdF9ydF9nZXRfZXZhbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTc6MDUuOTA0MTkwNTk4WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDYzNDM0NDAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSG1tLCBgbmZ0X3J0X2dldF9ldmFsYCBJcyBNaXNzaW5nPyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGp1c3QgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwncyBuZXRmaWx0ZXIgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgcnVudGltZSBldmFsdWF0aW9uIGZyYW1ld29yay4gSSB3YXMgZXhwZWN0aW5nIGBuZnRfcnRfZ2V0X2V2YWxgIHRvIGJlIGF2YWlsYWJsZS4gSSBuZWVkIGl0IGZvciBYLCBhbmQgSSB0aG91Z2h0IHRoYXQgd2FzIGEgY29yZSBwYXJ0IG9mIHRoZSBpbmZyYXN0cnVjdHVyZS4gQnV0Li4uIGl0J3Mgbm90IGV4cG9ydGVkLiBUaGF0J3MgaW1tZWRpYXRlbHkgcHJvYmxlbWF0aWMuIE5vdyBJIGhhdmUgdG8gZmlndXJlIG91dCB3aHkuIElzIGl0IGEgY29tcGlsZS10aW1lIG9wdGlvbiBJIG1pc3NlZD8gSXMgaXQgaGlkZGVuIGJlaGluZCBzb21lIG1hY3JvIHRoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZD8gT3IgcGVyaGFwcyBpdCdzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgZnVuY3Rpb24gd2l0aCBhIHNpbWlsYXIgbmFtZSwgc29tZXRoaW5nIGludGVybmFsPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBUaGlzIHdhc24ndCBhbnRpY2lwYXRlZCwgYW5kIGl0IHRocm93cyBhIGJpdCBvZiBhIHdyZW5jaCBpbnRvIG15IGN1cnJlbnQgcGxhbi4gVGltZSB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIGhlYWRlcnMgYWdhaW4sIGFuZCBtYXliZSBjcm9zcy1yZWZlcmVuY2UgdGhlIGNvbW1pdCBsb2dzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTA2MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjIyOjI2LjUzODUzODk1WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI5NDk3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3J0X2dldF9ldmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcnQuYz0yMj1zdGF0aWMgdTE2IGdldF90Y3Btc3MoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKnNrYmRzdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmMtNTMtXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYzo1NDp2b2lkIG5mdF9ydF9nZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYy01NS1cXHRcXHQgICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmM9MTkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9ydF9nZXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYy0xOTUtXFx0LnNpemVcXHRcXHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcnQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9ydC5jOjE5NjpcXHQuZXZhbFxcdFxcdD0gbmZ0X3J0X2dldF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmMtMTk3LVxcdC5pbml0XFx0XFx0PSBuZnRfcnRfZ2V0X2luaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjIyOjI2LjcxMTQ5NzM5OFoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjUwMDY3ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYG5mdF9tZXRhX2dldF9ldmFsYCdzIFZpc2liaWxpdHkgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIHRhcmdldCBmdW5jdGlvbiBpc24ndCBzdGF0aWMsIGJ1dCBpdCBhbHNvIGlzbid0IGV4cGxpY2l0bHkgZXhwb3J0ZWQuIFRoYXQncyBhY3R1YWxseSBhIHJlbGllZi4gV2hpbGUgc3RhdGljIGZ1bmN0aW9ucyBjYW4gc29tZXRpbWVzIHByZXNlbnQgYSBjaGFsbGVuZ2UgaW4gZnV6emluZyBzY2VuYXJpb3MsIHRoZSBmYWN0IHRoYXQgaXQncyAqbm90KiBzdGF0aWMgbWVhbnMgaXQncyBhY2Nlc3NpYmxlLiBTeXprYWxsZXIsIGluIGl0cyBjdXJyZW50IHN0YXRlLCBjYW4gYWJzb2x1dGVseSBoYW5kbGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHNvIG5vIG5lZWQgZm9yIHdvcmthcm91bmRzIHRoZXJlLiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBzeW1ib2wgdGFibGUgY29udGFpbnMgdGhlIGZ1bmN0aW9uLlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhbmQgZm9jdXMgc3BlY2lmaWNhbGx5IG9uIGBuZnRfbWV0YV9nZXRfZXZhbGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGZvciBleHBsb2l0YXRpb24uIFRoaXMgaXMgd2hlcmUgdGhlIGludmVzdGlnYXRpb24gcmVhbGx5IGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1ODAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoyMjoyOS45NjE1Njk3NDJaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDAzNjkyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKG5mdF9tZXRhX2dldF9ldmFsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz0zNjQ9dm9pZCBuZnRfbWV0YV9nZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDcyLX1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDczOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9tZXRhX2dldF9ldmFsKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDc0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoyMjozNC4zNjE5NDY1NzFaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjczMzY4MzkyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlZlcmlmeWluZyB0aGUgRXhwb3J0IE9wZXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSd2ZSBlc3RhYmxpc2hlZCB0aGF0IHRoZSBkYXRhIGlzICpleHBvcnRlZCouIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBhc3N1bXB0aW9uIHdlJ3JlIHN0YXJ0aW5nIGZyb20uIE5vdywgbGV0J3MgZHJpbGwgZG93biBhbmQgc2VlIGhvdyBleGFjdGx5IHRoYXQncyB3b3JraW5nLCB3aGF0J3MgYmVoaW5kIHRoZSBzY2VuZXMuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiBjYWxsOiBgbmZ0X3hmcm1fZ2V0X2V2YWxgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsgaGFuZGxlcyB0aGUgdHJhbnNmb3JtYXRpb24gcmV0cmlldmFsIGFuZCBldmFsdWF0aW9uIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgaW50ZXJhY3Rpb25zIGhhcHBlbmluZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTkzNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjIyOjM3LjA5NTYzNDgwMloiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MTc0NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF94ZnJtX2dldF9ldmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM9MTIwPXN0YXRpYyB2b2lkIG5mdF94ZnJtX3N0YXRlX2dldF9rZXkoY29uc3Qgc3RydWN0IG5mdF94ZnJtICpwcml2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTE2MC1cXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MTYxOnN0YXRpYyB2b2lkIG5mdF94ZnJtX2dldF9ldmFsX2luKGNvbnN0IHN0cnVjdCBuZnRfeGZybSAqcHJpdixcXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTYyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTc2LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoxNzc6c3RhdGljIHZvaWQgbmZ0X3hmcm1fZ2V0X2V2YWxfb3V0KGNvbnN0IHN0cnVjdCBuZnRfeGZybSAqcHJpdixcXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTc4LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTIwMS1cXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MjAyOnN0YXRpYyB2b2lkIG5mdF94ZnJtX2dldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMjAzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMDktXFx0Y2FzZSBYRlJNX1BPTElDWV9JTjpcXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MjEwOlxcdFxcdG5mdF94ZnJtX2dldF9ldmFsX2luKHByaXYsIHJlZ3MsIHBrdCk7XFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTIxMS1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMjEyLVxcdGNhc2UgWEZSTV9QT0xJQ1lfT1VUOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoyMTM6XFx0XFx0bmZ0X3hmcm1fZ2V0X2V2YWxfb3V0KHByaXYsIHJlZ3MsIHBrdCk7XFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTIxNC1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYz0yNzA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3hmcm1fZ2V0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yNzItXFx0LnNpemVcXHRcXHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfeGZybSkpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoyNzM6XFx0LmV2YWxcXHRcXHQ9IG5mdF94ZnJtX2dldF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yNzQtXFx0LmluaXRcXHRcXHQ9IG5mdF94ZnJtX2dldF9pbml0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoyMjozNy4xOTk4MTQ3MzFaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3OTU0ODAwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBTeXprYWxsZXIgVGFyZ2V0KipcblxuUmlnaHQsIHRoaXMgbG9va3MgcHJldHR5IHN0YXRpYy4gSSBzZWUgaXQsIHJlZ2lzdGVyZWQgaW4gYG5mdF94ZnJtX2dldF9vcHNgLCBhbmQgdGhhdCBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoZSBmYWN0IHRoYXQgaXQncyAqbm90KiBkeW5hbWljYWxseSBnZW5lcmF0ZWQgaW5jcmVhc2VzIHRoZSBjaGFuY2UgdGhhdCBzeXprYWxsZXIsIHRoZSBmdXp6ZXIsIGNvdWxkIHBvdGVudGlhbGx5IHRhcmdldCBpdCBkaXJlY3RseS4gSWYgaXQncyBub3QgaW5saW5lZCwgdGhlbiBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgdG8gaW5jbHVkZSBhbmQgc2VlIHdoYXQgaGFwcGVucy4gSSdtIHRoaW5raW5nIHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGZpbmQgYSB3YXkgaW4uXG5cbk5vdywgbGV0J3Mgc3dpdGNoIGdlYXJzIGFuZCBpbnZlc3RpZ2F0ZSBgbmZ0X2Nvbm5saW1pdF9ldmFsYC4gSSdsbCBjcm9zcy1yZWZlcmVuY2UgdGhlIGBuZnRfeGZybV9nZXRfb3BzYCB0byBkZXRlcm1pbmUgdGhlIHJlbGF0aW9uc2hpcCwgaWYgYW55LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDczMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjIyOjQwLjU3OTM2NjA2NFoiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMzQ1NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9jb25ubGltaXRfZXZhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYz0xNzY9c3RhdGljIHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgbmZ0X2Nvbm5saW1pdF9vYmpfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmMtMTgzLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jOjE4NDpzdGF0aWMgdm9pZCBuZnRfY29ubmxpbWl0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jLTE4NS1cXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmM9MjUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9jb25ubGltaXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmMtMjUzLVxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X2Nvbm5saW1pdCkpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jOjI1NDpcXHQuZXZhbFxcdFxcdD0gbmZ0X2Nvbm5saW1pdF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jLTI1NS1cXHQuaW5pdFxcdFxcdD0gbmZ0X2Nvbm5saW1pdF9pbml0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoyMjo0MC43ODA3MjA5MzFaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1MDc3NjIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBTdGF0aWMgUmVhbGl0eTogUmVnaXN0ZXJlZCBhbmQgUmVhZHkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgc29tZXRoaW5nJ3MgKnN0YXRpYyouIE5vdCBkeW5hbWljLCBub3QgY2hhbmdpbmcg4oCTIHdoaWNoIGNvdWxkIGJlIGEgZ29vZCBvciBiYWQgdGhpbmcsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gQnV0IGFsc28sIGl0J3MgKnJlZ2lzdGVyZWQqLiBUaGF0J3MgdGhlIGNyaXRpY2FsIGJpdC4gUmVnaXN0ZXJlZCBpbXBsaWVzIGl0J3Mga25vd24sIGFjY291bnRlZCBmb3IsIHdpdGhpbiB0aGUgc3lzdGVtLiBXZSdyZSBub3QgZGVhbGluZyB3aXRoIGFuIHVua25vd24gdmFyaWFibGUgaGVyZSwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCByZWxpZWYuIE5vdywgd2hhdCdzIHJlZ2lzdGVyZWQsIGFuZCB3aGF0IGRvZXMgdGhpcyBtZWFuIGZvciBvdXIgZmxvdz8gVGltZSB0byBkaWcgaW50byBgbmZ0X2Zsb3dfcm91dGVgLiBMZXQncyBzZWUgaG93IHRoYXQgcmVnaXN0ZXJlZCBzdGF0dXMgaW50ZXJhY3RzIHdpdGggdGhlIHJvdXRpbmcgbG9naWMuIFRoaXMgY291bGQgYmUgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSdtIGtlZW4gdG8gc2VlIGlmIHRoaXMgc3RhdGljIGJ1dCByZWdpc3RlcmVkIGFzcGVjdCBpbmZsdWVuY2VzIHRoZSBmbG93IHBhdGgsIG9yIGlzIHNpbXBseSBhIGRhdGEgcG9pbnQuIExldCdzIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEyNjMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoyMjo0NC41MzE1MDA1NThaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODkyMTE0NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKG5mdF9mbG93X3JvdXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MjYwPWludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMTYtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MzE3OkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9mbG93X3JvdXRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MjI6NDkuNDIwNzIxMDVaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTMyODI3MDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUHJvcG9zZWQgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZXJpZXMgaGFzIGJlZW4gZXhwb3J0ZWQsIGdvb2QuIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgZml4ZXMg4oCTIHNwZWNpZmljYWxseSwgbWVtb3J5IGxlYWsgcmVzb2x1dGlvbiBhbmQgcmVmaW5lZCBoYW5kbGluZyBvZiBgZHN0X2VudHJ5YCB3aXRoaW4gYHNrX2J1ZmZgIGFuZCBgbmV0X2RldmljZV9wYXRoYC4gSSd2ZSBub3RlZCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gc3ltYm9scyB0YXJnZXRlZCBmb3IgcmV2aWV3OiBgbmZ0X2Zsb3dfcm91dGVgLCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCwgYG5mX3NlbmRfcmVzZXRgLCBhbmQgc28gb24sIGNvdmVyaW5nIHRoZSB1c3VhbCBzdXNwZWN0cyBpbiBOZXRmaWx0ZXIncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBwYWNrZXQgcGF0aCwgaW5jbHVkaW5nIGZsb3cgb2ZmbG9hZCwgVENQIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCByZWplY3QvdW5yZWFjaGFibGUgaGFuZGxpbmcuXG5cblRoZSBwYXRjaCdzIGludHJvZHVjdGlvbiBvZiBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VgIGZvciBjb3JyZWN0IGBkc3RgIHJlbGVhc2UgaXMgYSBkZWZpbml0ZSBzaWduIHRoYXQgdGhpcyBpcyBpbXBvcnRhbnQsIGFzIGFyZSB0aGUgdXBkYXRlcyB0byBgc2tiX3ZhbGlkX2RzdGAgY2hlY2tzIGFjcm9zcyB0aGUgbW9kdWxlcy4gVGhlc2UgYXJlIGNoYW5nZXMgdGhhdCB0b3VjaCByZWFjaGFibGUga2VybmVsIGNvZGUgcGF0aHMuIFRoaXMgZGVtYW5kcyByaWdvcm91cyBmdXp6aW5nIGFzIHBhcnQgb2Ygb3VyIGFuYWx5c2lzIHBsYW4uXG5cbk5vdywgbGV0J3MgdmVyaWZ5IG15IGNvbmZpZ3VyYXRpb24gYXNzdW1wdGlvbnMuIEkgc2VlIHRoYXQgd2UgaGF2ZSBgTkZfVEFCTEVTYCwgYE5GX1RBQkxFU19JUFY0YCwgYE5GX1RBQkxFU19JUFY2YCwgYE5GX1RBQkxFU19JTkVUYCwgYE5GX0ZMT1dfVEFCTEVgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORlRfUkVKRUNUX0lQVjRgLCBgTkZUX1JFSkVDVF9JUFY2YCwgYE5GVF9SRUpFQ1RfSU5FVGAsIGBORlRfWEZSTWAsIGBORlRfQ09OTkxJTUlUYCwgYE5GX0NPTk5UUkFDS2AsIGBORVRfSVBJUGAsIGBJUFY2X1RVTk5FTGAsIGFuZCBgTkVUX0RTQWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGNvcnJlY3QuXG5cbkZpcnN0LCBpcyBgTkZfQ09OTkNPVU5UYCBhY3R1YWxseSBuZWVkZWQsIG9yIGlzIGl0IHB1bGxlZCBpbiB2aWEgYSBkZXBlbmRlbmN5PyBBaCwgaXQgc2VlbXMgYE5GVF9DT05OTElNSVRgIHNlbGVjdHMgYE5GX0NPTk5DT1VOVGAsIHNvIGp1c3QgaGF2aW5nIGBORlRfQ09OTkxJTUlUYCBpcyBzdWZmaWNpZW50LiBUaGF0IHNpbXBsaWZpZXMgdGhlIGNvbmZpZ3VyYXRpb24uXG5cbk5leHQsIEknbGwgY29uZmlybSB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgc2VlLiBgTkVUX0lQSVBgIGJ1aWxkcyBgbmV0L2lwdjQvaXBpcC5jYCwgc28gdGhhdCdzIGNvcnJlY3QuIFNpbWlsYXJseSwgYElQVjZfVFVOTkVMYCBidWlsZHMgYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AsIGFuZCBgTkVUX0RTQWAgYnVpbGRzIGBuZXQvZHNhL3VzZXIuY2AuIEV4Y2VsbGVudCwgbXkgYXNzdW1wdGlvbnMgYXJlIHZhbGlkYXRlZC5cblxuSSdtIHNhdGlzZmllZCB3aXRoIHRoaXMgYW5hbHlzaXMuIEkgd2lsbCBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTYxNiwiT3V0cHV0VG9rZW5zIjozODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MjI6NTguNzQ4OTk1OTFaIiwiU2VxIjo3MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY5MDUzNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX0lQVjRcIixcbiAgICBcIk5GX1RBQkxFU19JUFY2XCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZUX1JFSkVDVF9JUFY0XCIsXG4gICAgXCJORlRfUkVKRUNUX0lQVjZcIixcbiAgICBcIk5GVF9SRUpFQ1RfSU5FVFwiLFxuICAgIFwiTkZUX1hGUk1cIixcbiAgICBcIk5GVF9DT05OTElNSVRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVUX0lQSVBcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJORVRfRFNBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X2Zsb3dfcm91dGVcIixcbiAgICBcImRldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwiZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VcIixcbiAgICBcIm5mX3NlbmRfcmVzZXRcIixcbiAgICBcIm5mX3NlbmRfcmVzZXQ2XCIsXG4gICAgXCJuZl9zZW5kX3VucmVhY2hcIixcbiAgICBcIm5mX3NlbmRfdW5yZWFjaDZcIixcbiAgICBcIm5mdF9tZXRhX2dldF9ldmFsXCIsXG4gICAgXCJuZnRfcnRfZ2V0X2V2YWxcIixcbiAgICBcIm5mX2Nvbm5jb3VudF9hZGRfc2tiXCIsXG4gICAgXCJuZl9jb25uY291bnRfY291bnRfc2tiXCIsXG4gICAgXCJuZl9jb25udHJhY2tfdGNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0byBmaXggbWVtb3J5IGxlYWtzIGFuZCBpbXByb3ZlIGhhbmRsaW5nIG9mIGBkc3RfZW50cnlgIGluIGBza19idWZmYCBhbmQgYG5ldF9kZXZpY2VfcGF0aGAuIEl0IGludHJvZHVjZXMgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCB0byBwcm9wZXJseSByZWxlYXNlIGBkc3RgIGVudHJpZXMsIHVwZGF0ZXMgYHNrYl92YWxpZF9kc3RgIGNoZWNrcyBpbiBuZXRmaWx0ZXIgcmVqZWN0LCBtZXRhLCBydCwgYW5kIHhmcm0gbW9kdWxlcywgYW5kIG1vZGlmaWVzIGNvbm50cmFjayBUQ1Agc3RhdGUgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX0lQVjRcIixcbiAgICBcIk5GX1RBQkxFU19JUFY2XCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZUX1JFSkVDVF9JUFY0XCIsXG4gICAgXCJORlRfUkVKRUNUX0lQVjZcIixcbiAgICBcIk5GVF9SRUpFQ1RfSU5FVFwiLFxuICAgIFwiTkZUX1hGUk1cIixcbiAgICBcIk5GVF9DT05OTElNSVRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVUX0lQSVBcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJORVRfRFNBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X2Zsb3dfcm91dGVcIixcbiAgICBcImRldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwiZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VcIixcbiAgICBcIm5mX3NlbmRfcmVzZXRcIixcbiAgICBcIm5mX3NlbmRfcmVzZXQ2XCIsXG4gICAgXCJuZl9zZW5kX3VucmVhY2hcIixcbiAgICBcIm5mX3NlbmRfdW5yZWFjaDZcIixcbiAgICBcIm5mdF9tZXRhX2dldF9ldmFsXCIsXG4gICAgXCJuZnRfcnRfZ2V0X2V2YWxcIixcbiAgICBcIm5mX2Nvbm5jb3VudF9hZGRfc2tiXCIsXG4gICAgXCJuZl9jb25uY291bnRfY291bnRfc2tiXCIsXG4gICAgXCJuZl9jb25udHJhY2tfdGNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0byBmaXggbWVtb3J5IGxlYWtzIGFuZCBpbXByb3ZlIGhhbmRsaW5nIG9mIGBkc3RfZW50cnlgIGluIGBza19idWZmYCBhbmQgYG5ldF9kZXZpY2VfcGF0aGAuIEl0IGludHJvZHVjZXMgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCB0byBwcm9wZXJseSByZWxlYXNlIGBkc3RgIGVudHJpZXMsIHVwZGF0ZXMgYHNrYl92YWxpZF9kc3RgIGNoZWNrcyBpbiBuZXRmaWx0ZXIgcmVqZWN0LCBtZXRhLCBydCwgYW5kIHhmcm0gbW9kdWxlcywgYW5kIG1vZGlmaWVzIGNvbm50cmFjayBUQ1Agc3RhdGUgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhxnfd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 23:59:42 +0000 UTC FinishedAt: 2026-08-02 00:23:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_TABLES_IPV4", "NF_TABLES_IPV6", "NF_TABLES_INET", "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "NFT_REJECT_IPV4", "NFT_REJECT_IPV6", "NFT_REJECT_INET", "NFT_XFRM", "NFT_CONNLIMIT", "NF_CONNTRACK", "NET_IPIP", "IPV6_TUNNEL", "NET_DSA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_TABLES_IPV4", "NF_TABLES_IPV6", "NF_TABLES_INET", "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "NFT_REJECT_IPV4", "NFT_REJECT_IPV6", "NFT_REJECT_INET", "NFT_XFRM", "NFT_CONNLIMIT", "NF_CONNTRACK", "NET_IPIP", "IPV6_TUNNEL", "NET_DSA" ], "series_id": "95906114-7fde-4ead-925f-0aa9bae6ff0e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_flow_route", "dev_fill_forward_path", "dev_fill_forward_path_release", "nf_send_reset", "nf_send_reset6", "nf_send_unreach", "nf_send_unreach6", "nft_meta_get_eval", "nft_rt_get_eval", "nf_conncount_add_skb", "nf_conncount_count_skb", "nf_conntrack_tcp_packet" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSVBWNCYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSVBWNiYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSU5FVCYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkZUX1JFSkVDVF9JUFY0JiMzNDssCiAgICAmIzM0O05GVF9SRUpFQ1RfSVBWNiYjMzQ7LAogICAgJiMzNDtORlRfUkVKRUNUX0lORVQmIzM0OywKICAgICYjMzQ7TkZUX1hGUk0mIzM0OywKICAgICYjMzQ7TkZUX0NPTk5MSU1JVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkVUX0lQSVAmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OywKICAgICYjMzQ7TkVUX0RTQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9mbG93X3JvdXRlJiMzNDssCiAgICAmIzM0O2Rldl9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDtkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtuZl9zZW5kX3Jlc2V0JiMzNDssCiAgICAmIzM0O25mX3NlbmRfcmVzZXQ2JiMzNDssCiAgICAmIzM0O25mX3NlbmRfdW5yZWFjaCYjMzQ7LAogICAgJiMzNDtuZl9zZW5kX3VucmVhY2g2JiMzNDssCiAgICAmIzM0O25mdF9tZXRhX2dldF9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9ydF9nZXRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZl9jb25uY291bnRfYWRkX3NrYiYjMzQ7LAogICAgJiMzNDtuZl9jb25uY291bnRfY291bnRfc2tiJiMzNDssCiAgICAmIzM0O25mX2Nvbm50cmFja190Y3BfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0byBmaXggbWVtb3J5IGxlYWtzIGFuZCBpbXByb3ZlIGhhbmRsaW5nIG9mIGBkc3RfZW50cnlgIGluIGBza19idWZmYCBhbmQgYG5ldF9kZXZpY2VfcGF0aGAuIEl0IGludHJvZHVjZXMgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCB0byBwcm9wZXJseSByZWxlYXNlIGBkc3RgIGVudHJpZXMsIHVwZGF0ZXMgYHNrYl92YWxpZF9kc3RgIGNoZWNrcyBpbiBuZXRmaWx0ZXIgcmVqZWN0LCBtZXRhLCBydCwgYW5kIHhmcm0gbW9kdWxlcywgYW5kIG1vZGlmaWVzIGNvbm50cmFjayBUQ1Agc3RhdGUgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjVhMDJkNzMyYjU0ZTE1Y2EzZDU2M2U4MDE1NTczNDdiYjdlN2FlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMDA6MTQ6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbmluZGV4IDMzZGRmMGQwNzg1NTMuLmEwM2FmOTc1MDU3MzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5AQCAtMjk2LDE0ICYjNDM7Mjk2LDE4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0cGF0aCA9IFx1MDAyNnN0YWNrLnBhdGhbc3RhY2subnVtX3BhdGhzIC0gMV07XG4tXHRpZiAocGF0aC1cdTAwM2V0eXBlICE9IERFVl9QQVRIX01US19XRE1BKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAocGF0aC1cdTAwM2V0eXBlICE9IERFVl9QQVRIX01US19XRE1BKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiBcbiBcdGluZm8tXHUwMDNlaWR4ID0gcGF0aC1cdTAwM2VtdGtfd2RtYS53ZG1hX2lkeDtcbiBcdGluZm8tXHUwMDNlYnNzID0gcGF0aC1cdTAwM2VtdGtfd2RtYS5ic3M7XG4gXHRpbmZvLVx1MDAzZXdjaWQgPSBwYXRoLVx1MDAzZW10a193ZG1hLndjaWQ7XG4mIzQzO2Vycl9vdXQ6XG4mIzQzO1x0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UoXHUwMDI2c3RhY2spO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCBhaXJvaGFfZ2V0X2RzYV9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICoqZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbmluZGV4IGNjOGM0ZWY4MDM4ZjMuLjc3MWQ5MTE4Zjk0YWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbkBAIC0xMDgsMTYgJiM0MzsxMDgsMjAgQEAgbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2lcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdHBhdGggPSBcdTAwMjZzdGFjay5wYXRoW3N0YWNrLm51bV9wYXRocyAtIDFdO1xuLVx0aWYgKHBhdGgtXHUwMDNldHlwZSAhPSBERVZfUEFUSF9NVEtfV0RNQSlcbi1cdFx0cmV0dXJuIC0xO1xuJiM0MztcdGlmIChwYXRoLVx1MDAzZXR5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpIHtcbiYjNDM7XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuIFxuIFx0aW5mby1cdTAwM2V3ZG1hX2lkeCA9IHBhdGgtXHUwMDNlbXRrX3dkbWEud2RtYV9pZHg7XG4gXHRpbmZvLVx1MDAzZXF1ZXVlID0gcGF0aC1cdTAwM2VtdGtfd2RtYS5xdWV1ZTtcbiBcdGluZm8tXHUwMDNlYnNzID0gcGF0aC1cdTAwM2VtdGtfd2RtYS5ic3M7XG4gXHRpbmZvLVx1MDAzZXdjaWQgPSBwYXRoLVx1MDAzZW10a193ZG1hLndjaWQ7XG4gXHRpbmZvLVx1MDAzZWFtc2R1ID0gcGF0aC1cdTAwM2VtdGtfd2RtYS5hbXNkdTtcbiYjNDM7ZXJyX291dDpcbiYjNDM7XHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShcdTAwMjZzdGFjayk7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOGRiMjViNzk1NzNlMy4uNjJjZmFkN2U2Yjc5YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC04OTIsNiAmIzQzOzg5Miw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgge1xuIFx0XHRcdHU4XHRcdGhfZGVzdFtFVEhfQUxFTl07XG4gXHRcdH0gZW5jYXA7XG4gXHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcbiBcdFx0XHR1bmlvbiB7XG4gXHRcdFx0XHRzdHJ1Y3QgaW5fYWRkclx0c3JjX3Y0O1xuIFx0XHRcdFx0c3RydWN0IGluNl9hZGRyXHRzcmNfdjY7XG5AQCAtMzQyNyw2ICYjNDM7MzQyOCw3IEBAIGludCBkZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuJiM0Mzt2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZV9yY3Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqX19kZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBjMWMxYmUxYTY5NjJmLi5lNTBlZDY3N2RlNzI1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNzQyLDE0ICYjNDM7NzQyLDMzIEBAIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX21ldGFkYXRhX2RzdCk7XG4gXG4gc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKmRldl9md2RfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiB7XG4tXHRpbnQgayA9IHN0YWNrLVx1MDAzZW51bV9wYXRocyYjNDM7JiM0Mzs7XG4tXG4tXHRpZiAoayBcdTAwM2U9IE5FVF9ERVZJQ0VfUEFUSF9TVEFDS19NQVgpXG4mIzQzO1x0aWYgKHN0YWNrLVx1MDAzZW51bV9wYXRocyAmIzQzOyAxIFx1MDAzZSBORVRfREVWSUNFX1BBVEhfU1RBQ0tfTUFYKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdHJldHVybiBcdTAwMjZzdGFjay1cdTAwM2VwYXRoW2tdO1xuJiM0MztcdHJldHVybiBcdTAwMjZzdGFjay1cdTAwM2VwYXRoW3N0YWNrLVx1MDAzZW51bV9wYXRoc107XG4gfVxuIFxuJiM0Mzt2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcbiYjNDM7XHRpbnQgaztcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YWNrLVx1MDAzZW51bV9wYXRocyA9PSAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGsgPSBzdGFjay1cdTAwM2VudW1fcGF0aHMgLSAxOyBrIFx1MDAzZT0gMDsgay0tKSB7XG4mIzQzO1x0XHRwYXRoID0gXHUwMDI2c3RhY2stXHUwMDNlcGF0aFtrXTtcbiYjNDM7XHRcdHN3aXRjaCAocGF0aC1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0XHRjYXNlIERFVl9QQVRIX1RVTjpcbiYjNDM7XHRcdFx0ZHN0X3JlbGVhc2UocGF0aC1cdTAwM2V0dW4uZHN0KTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UpO1xuJiM0MztcbiBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbiBcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuIHtcbkBAIC03NjYsMTUgJiM0Mzs3ODUsMTYgQEAgaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXG4gXHRcdGxhc3RfZGV2ID0gY3R4LmRldjtcbiBcdFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4gXHRcdGlmICghcGF0aClcbi1cdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0bWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7XG4gXHRcdHJldCA9IGN0eC5kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBwYXRoKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiBcbiYjNDM7XHRcdHN0YWNrLVx1MDAzZW51bV9wYXRocyYjNDM7JiM0Mzs7XG4gXHRcdGlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpXG4tXHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXHR9XG4gXG4gXHRpZiAoIWN0eC5kZXYpXG5AQCAtNzgyLDExICYjNDM7ODAyLDE3IEBAIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFxuIFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4gXHRpZiAoIXBhdGgpXG4tXHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XG4gXHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDtcbiBcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LmRldjtcbiYjNDM7XHRzdGFjay1cdTAwM2VudW1fcGF0aHMmIzQzOyYjNDM7O1xuIFxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7ZXJyX291dDpcbiYjNDM7XHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAtMTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3VzZXIuYyBiL25ldC9kc2EvdXNlci5jXG5pbmRleCAwM2M3YWY2YWJlMThhLi40MDY1YzZlZTZmYzY4IDEwMDY0NFxuLS0tIGEvbmV0L2RzYS91c2VyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdXNlci5jXG5AQCAtMjU0NywxNCAmIzQzOzI1NDcsMTMgQEAgc3RhdGljIGludCBkc2FfdXNlcl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbiB7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChjdHgtXHUwMDNlZGV2KTtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0ID0gZHNhX3BvcnRfdG9fY29uZHVpdChkcCk7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCA9IGRwLVx1MDAzZWNwdV9kcDtcbiBcbiBcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcdHBhdGgtXHUwMDNldHlwZSA9IERFVl9QQVRIX0RTQTtcbiBcdHBhdGgtXHUwMDNlZHNhLnByb3RvID0gY3B1X2RwLVx1MDAzZXRhZ19vcHMtXHUwMDNlcHJvdG87XG4gXHRwYXRoLVx1MDAzZWRzYS5wb3J0ID0gZHAtXHUwMDNlaW5kZXg7XG4tXHRjdHgtXHUwMDNlZGV2ID0gY29uZHVpdDtcbiYjNDM7XHRjdHgtXHUwMDNlZGV2ID0gTlVMTDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmNcbmluZGV4IDA4MzFmNmI4MTcxN2MuLmZiN2Q5NmY5OWIwNmIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcGlwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwaXAuY1xuQEAgLTM3NiwxMCAmIzQzOzM3NiwxMCBAQCBzdGF0aWMgaW50IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdHBhdGgtXHUwMDNldHVuLnNyY192NC5zX2FkZHIgPSB0aXBoLVx1MDAzZXNhZGRyO1xuIFx0cGF0aC1cdTAwM2V0dW4uZHN0X3Y0LnNfYWRkciA9IHRpcGgtXHUwMDNlZGFkZHI7XG4gXHRwYXRoLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcbiYjNDM7XHRwYXRoLVx1MDAzZXR1bi5kc3QgPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4gXHRwYXRoLVx1MDAzZWRldiA9IGN0eC1cdTAwM2VkZXY7XG4gXG4gXHRjdHgtXHUwMDNlZGV2ID0gcnQtXHUwMDNlZHN0LmRldjtcbi1cdGlwX3J0X3B1dChydCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuY1xuaW5kZXggNDYyNmRjNDY4MDhmMy4uNTllYzQ2NWE5ZGY5OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuY1xuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9yZWplY3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfYnJpZGdlLmhcdTAwM2VcbkBAIC0yNjMsNiAmIzQzOzI2NCw3IEBAIHN0YXRpYyBpbnQgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxuIFx0aWYgKCFkc3QpXG4gXHRcdHJldHVybiAtMTtcbiBcbiYjNDM7XHRza2JfZHN0X2Ryb3Aoc2tiX2luKTtcbiBcdHNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0yNzksNyAmIzQzOzI4MSw3IEBAIHZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbiBcdGlmICghb3RoKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIXNrYl9kc3Qob2xkc2tiKSBcdTAwMjZcdTAwMjYgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChvbGRza2IpIFx1MDAzYyAwKVxuJiM0MztcdGlmICghc2tiX3ZhbGlkX2RzdChvbGRza2IpIFx1MDAyNlx1MDAyNiBuZl9yZWplY3RfZmlsbF9za2JfZHN0KG9sZHNrYikgXHUwMDNjIDApXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChza2JfcnRhYmxlKG9sZHNrYiktXHUwMDNlcnRfZmxhZ3MgXHUwMDI2IChSVENGX0JST0FEQ0FTVCB8IFJUQ0ZfTVVMVElDQVNUKSlcbkBAIC0zNTIsNyAmIzQzOzM1NCw3IEBAIHZvaWQgbmZfc2VuZF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCBjb2RlLCBpbnQgaG9vaylcbiBcdGlmIChpcGgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghc2tiX2RzdChza2JfaW4pIFx1MDAyNlx1MDAyNiBuZl9yZWplY3RfZmlsbF9za2JfZHN0KHNrYl9pbikgXHUwMDNjIDApXG4mIzQzO1x0aWYgKCFza2JfdmFsaWRfZHN0KHNrYl9pbikgXHUwMDI2XHUwMDI2IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc2tiX2luKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYl9pbikgfHxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbmluZGV4IDk3YzNmNjFkNjI3YmIuLmQ4MDAyMGJjMjYyMGUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuQEAgLTE4NzAsMTIgJiM0MzsxODcwLDE0IEBAIHN0YXRpYyBpbnQgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRwYXRoLVx1MDAzZXR1bi5zcmNfdjYgPSBmbDYuc2FkZHI7XG4gXHRcdHBhdGgtXHUwMDNldHVuLmRzdF92NiA9IGZsNi5kYWRkcjtcbiBcdFx0cGF0aC1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7XG4mIzQzO1x0XHRwYXRoLVx1MDAzZXR1bi5kc3QgPSBkc3Q7XG4gXHRcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcdFx0Y3R4LVx1MDAzZWRldiA9IGRzdC1cdTAwM2VkZXY7XG4gXHR9XG4gXG4gXHRlcnIgPSBkc3QtXHUwMDNlZXJyb3I7XG4tXHRkc3RfcmVsZWFzZShkc3QpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRkc3RfcmVsZWFzZShkc3QpO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuY1xuaW5kZXggZWY1YjdlODVjZmZhOC4uMDdjZGFhMTBkYTBkMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuY1xuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2NoZWNrc3VtLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9pcHY2L25mX3JlamVjdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaFx1MDAzZVxuQEAgLTMwNCw2ICYjNDM7MzA1LDcgQEAgc3RhdGljIGludCBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxuIFx0aWYgKCFkc3QpXG4gXHRcdHJldHVybiAtMTtcbiBcbiYjNDM7XHRza2JfZHN0X2Ryb3Aoc2tiX2luKTtcbiBcdHNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzYsMTAgJiM0MzszMzgsMTIgQEAgdm9pZCBuZl9zZW5kX3Jlc2V0NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbiBcdGZsNi5mbDZfc3BvcnQgPSBvdGNwaC1cdTAwM2VkZXN0O1xuIFx0Zmw2LmZsNl9kcG9ydCA9IG90Y3BoLVx1MDAzZXNvdXJjZTtcbiBcbi1cdGlmICghc2tiX2RzdChvbGRza2IpKSB7XG4mIzQzO1x0aWYgKCFza2JfdmFsaWRfZHN0KG9sZHNrYikpIHtcbiBcdFx0bmZfaXA2X3JvdXRlKG5ldCwgXHUwMDI2ZHN0LCBmbG93aTZfdG9fZmxvd2koXHUwMDI2Zmw2KSwgZmFsc2UpO1xuIFx0XHRpZiAoIWRzdClcbiBcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFx0c2tiX2RzdF9kcm9wKG9sZHNrYik7XG4gXHRcdHNrYl9kc3Rfc2V0KG9sZHNrYiwgZHN0KTtcbiBcdH1cbiBcbkBAIC00NDAsNyAmIzQzOzQ0NCw3IEBAIHZvaWQgbmZfc2VuZF91bnJlYWNoNihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2JfaW4sXG4gXHRpZiAoaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX09VVCBcdTAwMjZcdTAwMjYgc2tiX2luLVx1MDAzZWRldiA9PSBOVUxMKVxuIFx0XHRza2JfaW4tXHUwMDNlZGV2ID0gbmV0LVx1MDAzZWxvb3BiYWNrX2RldjtcbiBcbi1cdGlmICghc2tiX2RzdChza2JfaW4pIFx1MDAyNlx1MDAyNiBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChza2JfaW4pIFx1MDAzYyAwKVxuJiM0MztcdGlmICghc2tiX3ZhbGlkX2RzdChza2JfaW4pIFx1MDAyNlx1MDAyNiBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChza2JfaW4pIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpY21wdjZfc2VuZChza2JfaW4sIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXG5pbmRleCBlOWVhNmQ5NDY2ZTc0Li44NTQ4N2Y5MmFmNTA2IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xuQEAgLTE1OCw2ICYjNDM7MTU4LDggQEAgc3RhdGljIGJvb2wgZ2V0X2N0X29yX3R1cGxlX2Zyb21fc2tiKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRmb3VuZF9jdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCk7XG4mIzQzO1x0KnR1cGxlID0gZm91bmRfY3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XG4mIzQzO1x0KnpvbmUgPSBuZl9jdF96b25lKGZvdW5kX2N0KTtcbiBcdCpyZWZjb3VudGVkID0gdHJ1ZTtcbiBcdCpjdCA9IGZvdW5kX2N0O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbmluZGV4IGNlZWVkM2Q3ZmU1MjAuLjcyM2U5NDZhNzhmNDAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbkBAIC0xMjgxLDggJiM0MzsxMjgxLDkgQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdGlmIChjdC1cdTAwM2Vwcm90by50Y3AucmV0cmFucyBcdTAwM2U9IHRuLVx1MDAzZXRjcF9tYXhfcmV0cmFucyBcdTAwMjZcdTAwMjZcbiBcdCAgICB0aW1lb3V0c1tuZXdfc3RhdGVdIFx1MDAzZSB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1JFVFJBTlNdKVxuIFx0XHR0aW1lb3V0ID0gdGltZW91dHNbVENQX0NPTk5UUkFDS19SRVRSQU5TXTtcbi1cdGVsc2UgaWYgKHVubGlrZWx5KGluZGV4ID09IFRDUF9SU1RfU0VUKSlcbi1cdFx0dGltZW91dCA9IHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfQ0xPU0VdO1xuJiM0MztcdGVsc2UgaWYgKHVubGlrZWx5KGluZGV4ID09IFRDUF9SU1RfU0VUIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgIG5ld19zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEKSlcbiYjNDM7XHRcdHRpbWVvdXQgPSB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXTtcbiBcdGVsc2UgaWYgKChjdC1cdTAwM2Vwcm90by50Y3Auc2VlblswXS5mbGFncyB8IGN0LVx1MDAzZXByb3RvLnRjcC5zZWVuWzFdLmZsYWdzKSBcdTAwMjZcbiBcdFx0IElQX0NUX1RDUF9GTEFHX0RBVEFfVU5BQ0tOT1dMRURHRUQgXHUwMDI2XHUwMDI2XG4gXHRcdCB0aW1lb3V0c1tuZXdfc3RhdGVdIFx1MDAzZSB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXSlcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuaW5kZXggOThjMDNiNDg3ZjUyMS4uNTYyMTliMDJlMTIyNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbkBAIC00Miw4ICYjNDM7NDIsNyBAQCBzdGF0aWMgYm9vbCBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxuJiM0MztzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdFx0XHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG5AQCAtNzYsMTQgJiM0Mzs3NSwxNCBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuIH1cbiBcbiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XG4tXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXY7XG4tXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0ZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3QgaWQge1xuIFx0XHRfX3UxNlx0aWQ7XG4gXHRcdF9fYmUxNlx0cHJvdG87XG4gXHR9IGVuY2FwW05GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYXTtcbiBcdHU4IG51bV9lbmNhcHM7XG4gXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB0dW47XG4mIzQzO1x0c3RydWN0IGRzdF9lbnRyeSAqdHVuX2RzdDtcbiBcdHU4IG51bV90dW5zO1xuIFx0dTggaW5ncmVzc192bGFucztcbiBcdHU4IGhfc291cmNlW0VUSF9BTEVOXTtcbkBAIC05Miw5ICYjNDM7OTEsMTIgQEAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8ge1xuIFx0ZW51bSBmbG93X29mZmxvYWRfeG1pdF90eXBlIHhtaXRfdHlwZTtcbiB9O1xuIFxuLXN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4mIzQzO3N0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHQgICAgIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvICppbmZvLFxuLVx0XHRcdCAgICAgdW5zaWduZWQgY2hhciAqaGEsIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4gXHRpbnQgaTtcbkBAIC0xMDksMjkgJiM0MzsxMTEsMjcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0Y2FzZSBERVZfUEFUSF9WTEFOOlxuIFx0XHRjYXNlIERFVl9QQVRIX1BQUE9FOlxuIFx0XHRjYXNlIERFVl9QQVRIX1RVTjpcbi1cdFx0XHRpbmZvLVx1MDAzZWluZGV2ID0gcGF0aC1cdTAwM2VkZXY7XG4mIzQzO1x0XHRcdGluZm8tXHUwMDNlZGV2ID0gcGF0aC1cdTAwM2VkZXY7XG4gXHRcdFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihpbmZvLVx1MDAzZWhfc291cmNlKSlcbiBcdFx0XHRcdG1lbWNweShpbmZvLVx1MDAzZWhfc291cmNlLCBwYXRoLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuIFxuLVx0XHRcdGlmIChwYXRoLVx1MDAzZXR5cGUgPT0gREVWX1BBVEhfRVRIRVJORVQpXG4mIzQzO1x0XHRcdGlmIChwYXRoLVx1MDAzZXR5cGUgPT0gREVWX1BBVEhfRVRIRVJORVQgfHxcbiYjNDM7XHRcdFx0ICAgIHBhdGgtXHUwMDNldHlwZSA9PSBERVZfUEFUSF9EU0EpXG4gXHRcdFx0XHRicmVhaztcbi1cdFx0XHRpZiAocGF0aC1cdTAwM2V0eXBlID09IERFVl9QQVRIX0RTQSkge1xuLVx0XHRcdFx0aSA9IHN0YWNrLVx1MDAzZW51bV9wYXRocztcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbiBcbiBcdFx0XHQvKiBERVZfUEFUSF9WTEFOLCBERVZfUEFUSF9QUFBPRSBhbmQgREVWX1BBVEhfVFVOICovXG4gXHRcdFx0aWYgKHBhdGgtXHUwMDNldHlwZSA9PSBERVZfUEFUSF9UVU4pIHtcbiBcdFx0XHRcdGlmIChpbmZvLVx1MDAzZW51bV90dW5zKVxuLVx0XHRcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5zcmNfdjYgPSBwYXRoLVx1MDAzZXR1bi5zcmNfdjY7XG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5kc3RfdjYgPSBwYXRoLVx1MDAzZXR1bi5kc3RfdjY7XG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5sM19wcm90byA9IHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvO1xuJiM0MztcdFx0XHRcdGluZm8tXHUwMDNldHVuX2RzdCA9IHBhdGgtXHUwMDNldHVuLmRzdDtcbiBcdFx0XHRcdGluZm8tXHUwMDNlbnVtX3R1bnMmIzQzOyYjNDM7O1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzIFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpXG4tXHRcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNlZW5jYXBbaW5mby1cdTAwM2VudW1fZW5jYXBzXS5pZCA9XG4gXHRcdFx0XHRcdHBhdGgtXHUwMDNlZW5jYXAuaWQ7XG5AQCAtMTUyLDEzICYjNDM7MTUyLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0c3dpdGNoIChwYXRoLVx1MDAzZWJyaWRnZS52bGFuX21vZGUpIHtcbiBcdFx0XHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVU5UQUdfSFc6XG4gXHRcdFx0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzID09IDApXG4tXHRcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNlaW5ncmVzc192bGFucyB8PSBCSVQoaW5mby1cdTAwM2VudW1fZW5jYXBzIC0gMSk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVEFHOlxuIFx0XHRcdFx0aWYgKGluZm8tXHUwMDNlbnVtX2VuY2FwcyBcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxuLVx0XHRcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZWVuY2FwW2luZm8tXHUwMDNlbnVtX2VuY2Fwc10uaWQgPSBwYXRoLVx1MDAzZWJyaWRnZS52bGFuX2lkO1xuIFx0XHRcdFx0aW5mby1cdTAwM2VlbmNhcFtpbmZvLVx1MDAzZW51bV9lbmNhcHNdLnByb3RvID0gcGF0aC1cdTAwM2VicmlkZ2Uudmxhbl9wcm90bztcbkBAIC0xNjYsNyAmIzQzOzE2Niw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVU5UQUc6XG4gXHRcdFx0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzID09IDApXG4tXHRcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNlbnVtX2VuY2Fwcy0tO1xuIFx0XHRcdFx0YnJlYWs7XG5AQCAtMTc2LDE2ICYjNDM7MTc2LDIyIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0aW5mby1cdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXHRcdH1cbiBcdH1cbi1cdGluZm8tXHUwMDNlb3V0ZGV2ID0gaW5mby1cdTAwM2VpbmRldjtcbiBcbi1cdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoaW5mby1cdTAwM2VpbmRldikpXG4mIzQzO1x0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKFx1MDAyNmZ0LVx1MDAzZWRhdGEpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGluZm8tXHUwMDNlZGV2KSlcbiBcdFx0aW5mby1cdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XG4gXG4mIzQzO1x0aWYgKCFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGluZm8tXHUwMDNlZGV2LCBmdCkpXG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4mIzQzO2Vycl9vdXQ6XG4mIzQzO1x0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RhY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLTE7XG4gfVxuIFxuIHN0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbkBAIC0yMDUsNDQgJiM0MzsyMTEsNiBAQCBzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gZm91bmQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi1cdFx0XHRcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWwgKnR1bixcbi1cdFx0XHRcdFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuLVx0XHRcdFx0XHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyKVxuLXtcbi1cdHN0cnVjdCBkc3RfZW50cnkgKmN1cl9kc3QgPSByb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdDtcbi1cdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMO1xuLVx0c3RydWN0IGZsb3dpIGZsID0ge307XG4tXG4tXHRzd2l0Y2ggKG5mdF9wZihwa3QpKSB7XG4tXHRjYXNlIE5GUFJPVE9fSVBWNDpcbi1cdFx0ZmwudS5pcDQuZGFkZHIgPSB0dW4tXHUwMDNlZHN0X3Y0LnNfYWRkcjtcbi1cdFx0ZmwudS5pcDQuc2FkZHIgPSB0dW4tXHUwMDNlc3JjX3Y0LnNfYWRkcjtcbi1cdFx0ZmwudS5pcDQuZmxvd2k0X2lpZiA9IG5mdF9pbihwa3QpLVx1MDAzZWlmaW5kZXg7XG4tXHRcdGZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtXHUwMDNlc2tiKSk7XG4tXHRcdGZsLnUuaXA0LmZsb3dpNF9tYXJrID0gcGt0LVx1MDAzZXNrYi1cdTAwM2VtYXJrO1xuLVx0XHRmbC51LmlwNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQztcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIE5GUFJPVE9fSVBWNjpcbi1cdFx0ZmwudS5pcDYuZGFkZHIgPSB0dW4tXHUwMDNlZHN0X3Y2O1xuLVx0XHRmbC51LmlwNi5zYWRkciA9IHR1bi1cdTAwM2VzcmNfdjY7XG4tXHRcdGZsLnUuaXA2LmZsb3dpNl9paWYgPSBuZnRfaW4ocGt0KS1cdTAwM2VpZmluZGV4O1xuLVx0XHRmbC51LmlwNi5mbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaXB2Nl9oZHIocGt0LVx1MDAzZXNrYikpO1xuLVx0XHRmbC51LmlwNi5mbG93aTZfbWFyayA9IHBrdC1cdTAwM2Vza2ItXHUwMDNlbWFyaztcbi1cdFx0ZmwudS5pcDYuZmxvd2k2X2ZsYWdzID0gRkxPV0lfRkxBR19BTllTUkM7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0bmZfcm91dGUobmZ0X25ldChwa3QpLCBcdTAwMjZ0dW5fZHN0LCBcdTAwMjZmbCwgZmFsc2UsIG5mdF9wZihwa3QpKTtcbi1cdGlmICghdHVuX2RzdClcbi1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXG4tXHRyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdCA9IHR1bl9kc3Q7XG4tXHRkc3RfcmVsZWFzZShjdXJfZHN0KTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0XHRcdFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuQEAgLTI1NSwyOCAmIzQzOzIyMywyNSBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0dW5zaWduZWQgY2hhciBoYVtFVEhfQUxFTl07XG4gXHRpbnQgaTtcbiBcbi1cdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHJvdXRlLCBkc3QsIGN0LCBkaXIsIGhhLCBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbi1cdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIFx1MDAyNmZ0LVx1MDAzZWRhdGEpIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gLUVOT0VOVDtcbi1cbi1cdGlmICghbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihpbmZvLmluZGV2LCBmdCkpXG4mIzQzO1x0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwIHx8XG4mIzQzO1x0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFx1MDAyNnN0YWNrLCBcdTAwMjZpbmZvLCBoYSwgZnQpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbi1cdGlmIChpbmZvLm91dGRldilcbi1cdFx0cm91dGUtXHUwMDNldHVwbGVbZGlyXS5vdXQuaWZpbmRleCA9IGluZm8ub3V0ZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4uaWZpbmRleCA9IGluZm8uZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0cm91dGUtXHUwMDNldHVwbGVbZGlyXS5vdXQuaWZpbmRleCA9IGluZm8uZGV2LVx1MDAzZWlmaW5kZXg7XG4gXG4tXHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5pZmluZGV4ID0gaW5mby5pbmRldi1cdTAwM2VpZmluZGV4O1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby5udW1fZW5jYXBzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5lbmNhcFtpXS5pZCA9IGluZm8uZW5jYXBbaV0uaWQ7XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLmVuY2FwW2ldLnByb3RvID0gaW5mby5lbmNhcFtpXS5wcm90bztcbiBcdH1cbiBcbi1cdGlmIChpbmZvLm51bV90dW5zIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKHBrdCwgXHUwMDI2aW5mby50dW4sIHJvdXRlLCBkaXIpKSB7XG4mIzQzO1x0aWYgKGluZm8ubnVtX3R1bnMpIHtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLnNyY192NiA9IGluZm8udHVuLmRzdF92NjtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmRzdF92NiA9IGluZm8udHVuLnNyY192NjtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmwzX3Byb3RvID0gaW5mby50dW4ubDNfcHJvdG87XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLm51bV90dW5zID0gaW5mby5udW1fdHVucztcbiYjNDM7XHRcdGRzdF9yZWxlYXNlKHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0uZHN0KTtcbiYjNDM7XHRcdHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0uZHN0ID0gaW5mby50dW5fZHN0O1xuIFx0fVxuIFxuIFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4ubnVtX2VuY2FwcyA9IGluZm8ubnVtX2VuY2FwcztcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmNcbmluZGV4IDBhNDNlMDc4N2E2ODguLjAxY2ZiYWEzNjUyNTAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuY1xuQEAgLTIwLDYgJiM0MzsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3Bfc3RhdGVzLmhcdTAwM2UgLyogZm9yIFRDUF9USU1FX1dBSVQgKi9cbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oXHUwMDNlXG5AQCAtMjc5LDExICYjNDM7MjgwLDEyIEBAIHN0YXRpYyBib29sIG5mdF9tZXRhX2dldF9ldmFsX2lmbmFtZShlbnVtIG5mdF9tZXRhX2tleXMga2V5LCB1MzIgKmRlc3QsXG4gc3RhdGljIG5vaW5saW5lIGJvb2xcbiBuZnRfbWV0YV9nZXRfZXZhbF9ydGNsYXNzaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpkZXN0KVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3Qoc2tiKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XG4gXG4tXHRpZiAoIWRzdClcbiYjNDM7XHRpZiAoIXNrYl92YWxpZF9kc3Qoc2tiKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuJiM0MztcdGRzdCA9IHNrYl9kc3Qoc2tiKTtcbiBcdCpkZXN0ID0gZHN0LVx1MDAzZXRjbGFzc2lkO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3J0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9ydC5jXG5pbmRleCBhZWIwMDk0ZWFmZDgwLi44NDFjODYzYTA4ZGI1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfcnQuY1xuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxuQEAgLTU5LDEwICYjNDM7NjAsMTEgQEAgdm9pZCBuZnRfcnRfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0dTMyICpkZXN0ID0gXHUwMDI2cmVncy1cdTAwM2VkYXRhW3ByaXYtXHUwMDNlZHJlZ107XG4gXHRjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XG4gXG4tXHRkc3QgPSBza2JfZHN0KHNrYik7XG4tXHRpZiAoIWRzdClcbiYjNDM7XHRpZiAoIXNrYl92YWxpZF9kc3Qoc2tiKSlcbiBcdFx0Z290byBlcnI7XG4gXG4mIzQzO1x0ZHN0ID0gc2tiX2RzdChza2IpO1xuJiM0MztcbiBcdHN3aXRjaCAocHJpdi1cdTAwM2VrZXkpIHtcbiAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX0NMQVNTSURcbiBcdGNhc2UgTkZUX1JUX0NMQVNTSUQ6XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jIGIvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jXG5pbmRleCA4Y2VjNDMwNjQzMTkyLi5jOGJiYTY5N2Y5OTNhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmNcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiBcbkBAIC0xNzcsOSAmIzQzOzE3OCwxNSBAQCBzdGF0aWMgdm9pZCBuZnRfeGZybV9nZXRfZXZhbF9vdXQoY29uc3Qgc3RydWN0IG5mdF94ZnJtICpwcml2LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3QocGt0LVx1MDAzZXNrYik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0O1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0aWYgKCFza2JfdmFsaWRfZHN0KHBrdC1cdTAwM2Vza2IpKSB7XG4mIzQzO1x0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRzdCA9IHNrYl9kc3QocGt0LVx1MDAzZXNrYik7XG4gXHRmb3IgKGkgPSAwOyBkc3QgXHUwMDI2XHUwMDI2IGRzdC1cdTAwM2V4ZnJtO1xuIFx0ICAgICBkc3QgPSAoKGNvbnN0IHN0cnVjdCB4ZnJtX2RzdCAqKWRzdCktXHUwMDNlY2hpbGQsIGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChpIFx1MDAzYyBwcml2LVx1MDAzZXNwbnVtKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjhtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX0lQVjQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX0lQVjYmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX0lORVQmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgICAmIzM0O05GVF9SRUpFQ1RfSVBWNCYjMzQ7LAogICAgJiMzNDtORlRfUkVKRUNUX0lQVjYmIzM0OywKICAgICYjMzQ7TkZUX1JFSkVDVF9JTkVUJiMzNDssCiAgICAmIzM0O05GVF9YRlJNJiMzNDssCiAgICAmIzM0O05GVF9DT05OTElNSVQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDssCiAgICAmIzM0O05FVF9EU0EmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfZmxvd19yb3V0ZSYjMzQ7LAogICAgJiMzNDtkZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bmZfc2VuZF9yZXNldCYjMzQ7LAogICAgJiMzNDtuZl9zZW5kX3Jlc2V0NiYjMzQ7LAogICAgJiMzNDtuZl9zZW5kX3VucmVhY2gmIzM0OywKICAgICYjMzQ7bmZfc2VuZF91bnJlYWNoNiYjMzQ7LAogICAgJiMzNDtuZnRfbWV0YV9nZXRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfcnRfZ2V0X2V2YWwmIzM0OywKICAgICYjMzQ7bmZfY29ubmNvdW50X2FkZF9za2ImIzM0OywKICAgICYjMzQ7bmZfY29ubmNvdW50X2NvdW50X3NrYiYjMzQ7LAogICAgJiMzNDtuZl9jb25udHJhY2tfdGNwX3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMgdG8gZml4IG1lbW9yeSBsZWFrcyBhbmQgaW1wcm92ZSBoYW5kbGluZyBvZiBgZHN0X2VudHJ5YCBpbiBgc2tfYnVmZmAgYW5kIGBuZXRfZGV2aWNlX3BhdGhgLiBJdCBpbnRyb2R1Y2VzIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAgdG8gcHJvcGVybHkgcmVsZWFzZSBgZHN0YCBlbnRyaWVzLCB1cGRhdGVzIGBza2JfdmFsaWRfZHN0YCBjaGVja3MgaW4gbmV0ZmlsdGVyIHJlamVjdCwgbWV0YSwgcnQsIGFuZCB4ZnJtIG1vZHVsZXMsIGFuZCBtb2RpZmllcyBjb25udHJhY2sgVENQIHN0YXRlIGhhbmRsaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI1YTAyZDczMmI1NGUxNWNhM2Q1NjNlODAxNTU3MzQ3YmI3ZTdhZTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyIDAwOjE0OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKaW5kZXggMzNkZGYwZDA3ODU1My4uYTAzYWY5NzUwNTczMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCkBAIC0yOTYsMTQgJiM0MzsyOTYsMTggQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsCiAJCXJldHVybiBlcnI7CiAKIAlwYXRoID0gJmFtcDtzdGFjay5wYXRoW3N0YWNrLm51bV9wYXRocyAtIDFdOwotCWlmIChwYXRoLSZndDt0eXBlICE9IERFVl9QQVRIX01US19XRE1BKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHBhdGgtJmd0O3R5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpIHsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KIAogCWluZm8tJmd0O2lkeCA9IHBhdGgtJmd0O210a193ZG1hLndkbWFfaWR4OwogCWluZm8tJmd0O2JzcyA9IHBhdGgtJmd0O210a193ZG1hLmJzczsKIAlpbmZvLSZndDt3Y2lkID0gcGF0aC0mZ3Q7bXRrX3dkbWEud2NpZDsKJiM0MztlcnJfb3V0OgomIzQzOwlkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSgmYW1wO3N0YWNrKTsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGFpcm9oYV9nZXRfZHNhX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKipkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCmluZGV4IGNjOGM0ZWY4MDM4ZjMuLjc3MWQ5MTE4Zjk0YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCkBAIC0xMDgsMTYgJiM0MzsxMDgsMjAgQEAgbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2kKIAkJcmV0dXJuIGVycjsKIAogCXBhdGggPSAmYW1wO3N0YWNrLnBhdGhbc3RhY2subnVtX3BhdGhzIC0gMV07Ci0JaWYgKHBhdGgtJmd0O3R5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpCi0JCXJldHVybiAtMTsKJiM0MzsJaWYgKHBhdGgtJmd0O3R5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpIHsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KIAogCWluZm8tJmd0O3dkbWFfaWR4ID0gcGF0aC0mZ3Q7bXRrX3dkbWEud2RtYV9pZHg7CiAJaW5mby0mZ3Q7cXVldWUgPSBwYXRoLSZndDttdGtfd2RtYS5xdWV1ZTsKIAlpbmZvLSZndDtic3MgPSBwYXRoLSZndDttdGtfd2RtYS5ic3M7CiAJaW5mby0mZ3Q7d2NpZCA9IHBhdGgtJmd0O210a193ZG1hLndjaWQ7CiAJaW5mby0mZ3Q7YW1zZHUgPSBwYXRoLSZndDttdGtfd2RtYS5hbXNkdTsKJiM0MztlcnJfb3V0OgomIzQzOwlkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSgmYW1wO3N0YWNrKTsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDhkYjI1Yjc5NTczZTMuLjYyY2ZhZDdlNmI3OWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtODkyLDYgJiM0Mzs4OTIsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoIHsKIAkJCXU4CQloX2Rlc3RbRVRIX0FMRU5dOwogCQl9IGVuY2FwOwogCQlzdHJ1Y3QgewomIzQzOwkJCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKIAkJCXVuaW9uIHsKIAkJCQlzdHJ1Y3QgaW5fYWRkcglzcmNfdjQ7CiAJCQkJc3RydWN0IGluNl9hZGRyCXNyY192NjsKQEAgLTM0MjcsNiAmIzQzOzM0MjgsNyBAQCBpbnQgZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTsKJiM0Mzt2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTsKIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTsKIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWVfcmN1KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7CiBzdHJ1Y3QgbmV0X2RldmljZSAqX19kZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggYzFjMWJlMWE2OTYyZi4uZTUwZWQ2NzdkZTcyNSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTc0MiwxNCAmIzQzOzc0MiwzMyBAQCBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9tZXRhZGF0YV9kc3QpOwogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKQogewotCWludCBrID0gc3RhY2stJmd0O251bV9wYXRocyYjNDM7JiM0Mzs7Ci0KLQlpZiAoayAmZ3Q7PSBORVRfREVWSUNFX1BBVEhfU1RBQ0tfTUFYKQomIzQzOwlpZiAoc3RhY2stJmd0O251bV9wYXRocyAmIzQzOyAxICZndDsgTkVUX0RFVklDRV9QQVRIX1NUQUNLX01BWCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gJmFtcDtzdGFjay0mZ3Q7cGF0aFtrXTsKJiM0MzsJcmV0dXJuICZhbXA7c3RhY2stJmd0O3BhdGhbc3RhY2stJmd0O251bV9wYXRoc107CiB9CiAKJiM0Mzt2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDsKJiM0MzsJaW50IGs7CiYjNDM7CiYjNDM7CWlmIChzdGFjay0mZ3Q7bnVtX3BhdGhzID09IDApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoayA9IHN0YWNrLSZndDtudW1fcGF0aHMgLSAxOyBrICZndDs9IDA7IGstLSkgewomIzQzOwkJcGF0aCA9ICZhbXA7c3RhY2stJmd0O3BhdGhba107CiYjNDM7CQlzd2l0Y2ggKHBhdGgtJmd0O3R5cGUpIHsKJiM0MzsJCWNhc2UgREVWX1BBVEhfVFVOOgomIzQzOwkJCWRzdF9yZWxlYXNlKHBhdGgtJmd0O3R1bi5kc3QpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSk7CiYjNDM7CiBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkciwKIAkJCSAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCiB7CkBAIC03NjYsMTUgJiM0Mzs3ODUsMTYgQEAgaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsCiAJCWxhc3RfZGV2ID0gY3R4LmRldjsKIAkJcGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7CiAJCWlmICghcGF0aCkKLQkJCXJldHVybiAtMTsKJiM0MzsJCQlnb3RvIGVycl9vdXQ7CiAKIAkJbWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7CiAJCXJldCA9IGN0eC5kZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19maWxsX2ZvcndhcmRfcGF0aCgmYW1wO2N0eCwgcGF0aCk7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJcmV0dXJuIC0xOwomIzQzOwkJCWdvdG8gZXJyX291dDsKIAomIzQzOwkJc3RhY2stJmd0O251bV9wYXRocyYjNDM7JiM0Mzs7CiAJCWlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQkJZ290byBlcnJfb3V0OwogCX0KIAogCWlmICghY3R4LmRldikKQEAgLTc4MiwxMSAmIzQzOzgwMiwxNyBAQCBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkciwKIAogCXBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spOwogCWlmICghcGF0aCkKLQkJcmV0dXJuIC0xOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwogCXBhdGgtJmd0O3R5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDsKIAlwYXRoLSZndDtkZXYgPSBjdHguZGV2OwomIzQzOwlzdGFjay0mZ3Q7bnVtX3BhdGhzJiM0MzsmIzQzOzsKIAotCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiAwOwomIzQzO2Vycl9vdXQ6CiYjNDM7CWRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0YWNrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIC0xOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2RzYS91c2VyLmMgYi9uZXQvZHNhL3VzZXIuYwppbmRleCAwM2M3YWY2YWJlMThhLi40MDY1YzZlZTZmYzY4IDEwMDY0NAotLS0gYS9uZXQvZHNhL3VzZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL3VzZXIuYwpAQCAtMjU0NywxNCAmIzQzOzI1NDcsMTMgQEAgc3RhdGljIGludCBkc2FfdXNlcl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAogCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpCiB7CiAJc3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQoY3R4LSZndDtkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0ID0gZHNhX3BvcnRfdG9fY29uZHVpdChkcCk7CiAJc3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBkcC0mZ3Q7Y3B1X2RwOwogCiAJcGF0aC0mZ3Q7ZGV2ID0gY3R4LSZndDtkZXY7CiAJcGF0aC0mZ3Q7dHlwZSA9IERFVl9QQVRIX0RTQTsKIAlwYXRoLSZndDtkc2EucHJvdG8gPSBjcHVfZHAtJmd0O3RhZ19vcHMtJmd0O3Byb3RvOwogCXBhdGgtJmd0O2RzYS5wb3J0ID0gZHAtJmd0O2luZGV4OwotCWN0eC0mZ3Q7ZGV2ID0gY29uZHVpdDsKJiM0MzsJY3R4LSZndDtkZXYgPSBOVUxMOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmMKaW5kZXggMDgzMWY2YjgxNzE3Yy4uZmI3ZDk2Zjk5YjA2YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBpcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwaXAuYwpAQCAtMzc2LDEwICYjNDM7Mzc2LDEwIEBAIHN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAogCXBhdGgtJmd0O3R1bi5zcmNfdjQuc19hZGRyID0gdGlwaC0mZ3Q7c2FkZHI7CiAJcGF0aC0mZ3Q7dHVuLmRzdF92NC5zX2FkZHIgPSB0aXBoLSZndDtkYWRkcjsKIAlwYXRoLSZndDt0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7CiYjNDM7CXBhdGgtJmd0O3R1bi5kc3QgPSAmYW1wO3J0LSZndDtkc3Q7CiAJcGF0aC0mZ3Q7ZGV2ID0gY3R4LSZndDtkZXY7CiAKIAljdHgtJmd0O2RldiA9IHJ0LSZndDtkc3QuZGV2OwotCWlwX3J0X3B1dChydCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMKaW5kZXggNDYyNmRjNDY4MDhmMy4uNTllYzQ2NWE5ZGY5OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O25ldC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcm91dGUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZHN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfcmVqZWN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyX2lwdjQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgmZ3Q7CkBAIC0yNjMsNiAmIzQzOzI2NCw3IEBAIHN0YXRpYyBpbnQgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKQogCWlmICghZHN0KQogCQlyZXR1cm4gLTE7CiAKJiM0MzsJc2tiX2RzdF9kcm9wKHNrYl9pbik7CiAJc2tiX2RzdF9zZXQoc2tiX2luLCBkc3QpOwogCXJldHVybiAwOwogfQpAQCAtMjc5LDcgJiM0MzsyODEsNyBAQCB2b2lkIG5mX3NlbmRfcmVzZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvbGRza2IsCiAJaWYgKCFvdGgpCiAJCXJldHVybjsKIAotCWlmICghc2tiX2RzdChvbGRza2IpICZhbXA7JmFtcDsgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChvbGRza2IpICZsdDsgMCkKJiM0MzsJaWYgKCFza2JfdmFsaWRfZHN0KG9sZHNrYikgJmFtcDsmYW1wOyBuZl9yZWplY3RfZmlsbF9za2JfZHN0KG9sZHNrYikgJmx0OyAwKQogCQlyZXR1cm47CiAKIAlpZiAoc2tiX3J0YWJsZShvbGRza2IpLSZndDtydF9mbGFncyAmYW1wOyAoUlRDRl9CUk9BRENBU1QgfCBSVENGX01VTFRJQ0FTVCkpCkBAIC0zNTIsNyAmIzQzOzM1NCw3IEBAIHZvaWQgbmZfc2VuZF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCBjb2RlLCBpbnQgaG9vaykKIAlpZiAoaXBoLSZndDtmcmFnX29mZiAmYW1wOyBodG9ucyhJUF9PRkZTRVQpKQogCQlyZXR1cm47CiAKLQlpZiAoIXNrYl9kc3Qoc2tiX2luKSAmYW1wOyZhbXA7IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc2tiX2luKSAmbHQ7IDApCiYjNDM7CWlmICghc2tiX3ZhbGlkX2RzdChza2JfaW4pICZhbXA7JmFtcDsgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChza2JfaW4pICZsdDsgMCkKIAkJcmV0dXJuOwogCiAJaWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYl9pbikgfHwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwppbmRleCA5N2MzZjYxZDYyN2JiLi5kODAwMjBiYzI2MjBlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCkBAIC0xODcwLDEyICYjNDM7MTg3MCwxNCBAQCBzdGF0aWMgaW50IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKIAkJcGF0aC0mZ3Q7dHVuLnNyY192NiA9IGZsNi5zYWRkcjsKIAkJcGF0aC0mZ3Q7dHVuLmRzdF92NiA9IGZsNi5kYWRkcjsKIAkJcGF0aC0mZ3Q7dHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2OwomIzQzOwkJcGF0aC0mZ3Q7dHVuLmRzdCA9IGRzdDsKIAkJcGF0aC0mZ3Q7ZGV2ID0gY3R4LSZndDtkZXY7CiAJCWN0eC0mZ3Q7ZGV2ID0gZHN0LSZndDtkZXY7CiAJfQogCiAJZXJyID0gZHN0LSZndDtlcnJvcjsKLQlkc3RfcmVsZWFzZShkc3QpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZHN0X3JlbGVhc2UoZHN0KTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jCmluZGV4IGVmNWI3ZTg1Y2ZmYTguLjA3Y2RhYTEwZGEwZDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jCkBAIC04LDYgJiM0Mzs4LDcgQEAKICNpbmNsdWRlICZsdDtuZXQvaXA2X3JvdXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwNl9maWIuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXA2X2NoZWNrc3VtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfcmVqZWN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyX2lwdjYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgmZ3Q7CkBAIC0zMDQsNiAmIzQzOzMwNSw3IEBAIHN0YXRpYyBpbnQgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbikKIAlpZiAoIWRzdCkKIAkJcmV0dXJuIC0xOwogCiYjNDM7CXNrYl9kc3RfZHJvcChza2JfaW4pOwogCXNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTMzNiwxMCAmIzQzOzMzOCwxMiBAQCB2b2lkIG5mX3NlbmRfcmVzZXQ2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLAogCWZsNi5mbDZfc3BvcnQgPSBvdGNwaC0mZ3Q7ZGVzdDsKIAlmbDYuZmw2X2Rwb3J0ID0gb3RjcGgtJmd0O3NvdXJjZTsKIAotCWlmICghc2tiX2RzdChvbGRza2IpKSB7CiYjNDM7CWlmICghc2tiX3ZhbGlkX2RzdChvbGRza2IpKSB7CiAJCW5mX2lwNl9yb3V0ZShuZXQsICZhbXA7ZHN0LCBmbG93aTZfdG9fZmxvd2koJmFtcDtmbDYpLCBmYWxzZSk7CiAJCWlmICghZHN0KQogCQkJcmV0dXJuOwomIzQzOwomIzQzOwkJc2tiX2RzdF9kcm9wKG9sZHNrYik7CiAJCXNrYl9kc3Rfc2V0KG9sZHNrYiwgZHN0KTsKIAl9CiAKQEAgLTQ0MCw3ICYjNDM7NDQ0LDcgQEAgdm9pZCBuZl9zZW5kX3VucmVhY2g2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwKIAlpZiAoaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX09VVCAmYW1wOyZhbXA7IHNrYl9pbi0mZ3Q7ZGV2ID09IE5VTEwpCiAJCXNrYl9pbi0mZ3Q7ZGV2ID0gbmV0LSZndDtsb29wYmFja19kZXY7CiAKLQlpZiAoIXNrYl9kc3Qoc2tiX2luKSAmYW1wOyZhbXA7IG5mX3JlamVjdDZfZmlsbF9za2JfZHN0KHNrYl9pbikgJmx0OyAwKQomIzQzOwlpZiAoIXNrYl92YWxpZF9kc3Qoc2tiX2luKSAmYW1wOyZhbXA7IG5mX3JlamVjdDZfZmlsbF9za2JfZHN0KHNrYl9pbikgJmx0OyAwKQogCQlyZXR1cm47CiAKIAlpY21wdjZfc2VuZChza2JfaW4sIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMKaW5kZXggZTllYTZkOTQ2NmU3NC4uODU0ODdmOTJhZjUwNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jCkBAIC0xNTgsNiAmIzQzOzE1OCw4IEBAIHN0YXRpYyBib29sIGdldF9jdF9vcl90dXBsZV9mcm9tX3NrYihzdHJ1Y3QgbmV0ICpuZXQsCiAJCXJldHVybiB0cnVlOwogCiAJZm91bmRfY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOwomIzQzOwkqdHVwbGUgPSBmb3VuZF9jdC0mZ3Q7dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7CiYjNDM7CSp6b25lID0gbmZfY3Rfem9uZShmb3VuZF9jdCk7CiAJKnJlZmNvdW50ZWQgPSB0cnVlOwogCSpjdCA9IGZvdW5kX2N0OwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCmluZGV4IGNlZWVkM2Q3ZmU1MjAuLjcyM2U5NDZhNzhmNDAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC0xMjgxLDggJiM0MzsxMjgxLDkgQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCwKIAlpZiAoY3QtJmd0O3Byb3RvLnRjcC5yZXRyYW5zICZndDs9IHRuLSZndDt0Y3BfbWF4X3JldHJhbnMgJmFtcDsmYW1wOwogCSAgICB0aW1lb3V0c1tuZXdfc3RhdGVdICZndDsgdGltZW91dHNbVENQX0NPTk5UUkFDS19SRVRSQU5TXSkKIAkJdGltZW91dCA9IHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfUkVUUkFOU107Ci0JZWxzZSBpZiAodW5saWtlbHkoaW5kZXggPT0gVENQX1JTVF9TRVQpKQotCQl0aW1lb3V0ID0gdGltZW91dHNbVENQX0NPTk5UUkFDS19DTE9TRV07CiYjNDM7CWVsc2UgaWYgKHVubGlrZWx5KGluZGV4ID09IFRDUF9SU1RfU0VUICZhbXA7JmFtcDsKJiM0MzsJCQkgIG5ld19zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEKSkKJiM0MzsJCXRpbWVvdXQgPSB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXTsKIAllbHNlIGlmICgoY3QtJmd0O3Byb3RvLnRjcC5zZWVuWzBdLmZsYWdzIHwgY3QtJmd0O3Byb3RvLnRjcC5zZWVuWzFdLmZsYWdzKSAmYW1wOwogCQkgSVBfQ1RfVENQX0ZMQUdfREFUQV9VTkFDS05PV0xFREdFRCAmYW1wOyZhbXA7CiAJCSB0aW1lb3V0c1tuZXdfc3RhdGVdICZndDsgdGltZW91dHNbVENQX0NPTk5UUkFDS19VTkFDS10pCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYwppbmRleCA5OGMwM2I0ODdmNTIxLi41NjIxOWIwMmUxMjI3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMKQEAgLTQyLDggJiM0Mzs0Miw3IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSwKJiM0MztzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAogCQkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwgdTggKmhhLAogCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCkBAIC03NiwxNCAmIzQzOzc1LDE0IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsCiB9CiAKIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHsKLQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXY7Ci0JY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dGRldjsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgaWQgewogCQlfX3UxNglpZDsKIAkJX19iZTE2CXByb3RvOwogCX0gZW5jYXBbTkZfRkxPV19UQUJMRV9FTkNBUF9NQVhdOwogCXU4IG51bV9lbmNhcHM7CiAJc3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWwgdHVuOwomIzQzOwlzdHJ1Y3QgZHN0X2VudHJ5ICp0dW5fZHN0OwogCXU4IG51bV90dW5zOwogCXU4IGluZ3Jlc3NfdmxhbnM7CiAJdTggaF9zb3VyY2VbRVRIX0FMRU5dOwpAQCAtOTIsOSAmIzQzOzkxLDEyIEBAIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHsKIAllbnVtIGZsb3dfb2ZmbG9hZF94bWl0X3R5cGUgeG1pdF90eXBlOwogfTsKIAotc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaywKJiM0MztzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCk7CiYjNDM7CiYjNDM7c3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaywKIAkJCSAgICAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gKmluZm8sCi0JCQkgICAgIHVuc2lnbmVkIGNoYXIgKmhhLCBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpCiYjNDM7CQkJICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KQogewogCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7CiAJaW50IGk7CkBAIC0xMDksMjkgJiM0MzsxMTEsMjcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaywKIAkJY2FzZSBERVZfUEFUSF9WTEFOOgogCQljYXNlIERFVl9QQVRIX1BQUE9FOgogCQljYXNlIERFVl9QQVRIX1RVTjoKLQkJCWluZm8tJmd0O2luZGV2ID0gcGF0aC0mZ3Q7ZGV2OwomIzQzOwkJCWluZm8tJmd0O2RldiA9IHBhdGgtJmd0O2RldjsKIAkJCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby0mZ3Q7aF9zb3VyY2UpKQogCQkJCW1lbWNweShpbmZvLSZndDtoX3NvdXJjZSwgcGF0aC0mZ3Q7ZGV2LSZndDtkZXZfYWRkciwgRVRIX0FMRU4pOwogCi0JCQlpZiAocGF0aC0mZ3Q7dHlwZSA9PSBERVZfUEFUSF9FVEhFUk5FVCkKJiM0MzsJCQlpZiAocGF0aC0mZ3Q7dHlwZSA9PSBERVZfUEFUSF9FVEhFUk5FVCB8fAomIzQzOwkJCSAgICBwYXRoLSZndDt0eXBlID09IERFVl9QQVRIX0RTQSkKIAkJCQlicmVhazsKLQkJCWlmIChwYXRoLSZndDt0eXBlID09IERFVl9QQVRIX0RTQSkgewotCQkJCWkgPSBzdGFjay0mZ3Q7bnVtX3BhdGhzOwotCQkJCWJyZWFrOwotCQkJfQogCiAJCQkvKiBERVZfUEFUSF9WTEFOLCBERVZfUEFUSF9QUFBPRSBhbmQgREVWX1BBVEhfVFVOICovCiAJCQlpZiAocGF0aC0mZ3Q7dHlwZSA9PSBERVZfUEFUSF9UVU4pIHsKIAkJCQlpZiAoaW5mby0mZ3Q7bnVtX3R1bnMpCi0JCQkJCXJldHVybiAtMTsKJiM0MzsJCQkJCWdvdG8gZXJyX291dDsKIAogCQkJCWluZm8tJmd0O3R1bi5zcmNfdjYgPSBwYXRoLSZndDt0dW4uc3JjX3Y2OwogCQkJCWluZm8tJmd0O3R1bi5kc3RfdjYgPSBwYXRoLSZndDt0dW4uZHN0X3Y2OwogCQkJCWluZm8tJmd0O3R1bi5sM19wcm90byA9IHBhdGgtJmd0O3R1bi5sM19wcm90bzsKJiM0MzsJCQkJaW5mby0mZ3Q7dHVuX2RzdCA9IHBhdGgtJmd0O3R1bi5kc3Q7CiAJCQkJaW5mby0mZ3Q7bnVtX3R1bnMmIzQzOyYjNDM7OwogCQkJfSBlbHNlIHsKIAkJCQlpZiAoaW5mby0mZ3Q7bnVtX2VuY2FwcyAmZ3Q7PSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWCkKLQkJCQkJcmV0dXJuIC0xOwomIzQzOwkJCQkJZ290byBlcnJfb3V0OwogCiAJCQkJaW5mby0mZ3Q7ZW5jYXBbaW5mby0mZ3Q7bnVtX2VuY2Fwc10uaWQgPQogCQkJCQlwYXRoLSZndDtlbmNhcC5pZDsKQEAgLTE1MiwxMyAmIzQzOzE1MiwxMyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLAogCQkJc3dpdGNoIChwYXRoLSZndDticmlkZ2Uudmxhbl9tb2RlKSB7CiAJCQljYXNlIERFVl9QQVRIX0JSX1ZMQU5fVU5UQUdfSFc6CiAJCQkJaWYgKGluZm8tJmd0O251bV9lbmNhcHMgPT0gMCkKLQkJCQkJcmV0dXJuIC0xOwomIzQzOwkJCQkJZ290byBlcnJfb3V0OwogCiAJCQkJaW5mby0mZ3Q7aW5ncmVzc192bGFucyB8PSBCSVQoaW5mby0mZ3Q7bnVtX2VuY2FwcyAtIDEpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBERVZfUEFUSF9CUl9WTEFOX1RBRzoKIAkJCQlpZiAoaW5mby0mZ3Q7bnVtX2VuY2FwcyAmZ3Q7PSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWCkKLQkJCQkJcmV0dXJuIC0xOwomIzQzOwkJCQkJZ290byBlcnJfb3V0OwogCiAJCQkJaW5mby0mZ3Q7ZW5jYXBbaW5mby0mZ3Q7bnVtX2VuY2Fwc10uaWQgPSBwYXRoLSZndDticmlkZ2Uudmxhbl9pZDsKIAkJCQlpbmZvLSZndDtlbmNhcFtpbmZvLSZndDtudW1fZW5jYXBzXS5wcm90byA9IHBhdGgtJmd0O2JyaWRnZS52bGFuX3Byb3RvOwpAQCAtMTY2LDcgJiM0MzsxNjYsNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLAogCQkJCWJyZWFrOwogCQkJY2FzZSBERVZfUEFUSF9CUl9WTEFOX1VOVEFHOgogCQkJCWlmIChpbmZvLSZndDtudW1fZW5jYXBzID09IDApCi0JCQkJCXJldHVybiAtMTsKJiM0MzsJCQkJCWdvdG8gZXJyX291dDsKIAogCQkJCWluZm8tJmd0O251bV9lbmNhcHMtLTsKIAkJCQlicmVhazsKQEAgLTE3NiwxNiAmIzQzOzE3NiwyMiBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLAogCQkJaW5mby0mZ3Q7eG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLTE7CiYjNDM7CQkJZ290byBlcnJfb3V0OwogCQl9CiAJfQotCWluZm8tJmd0O291dGRldiA9IGluZm8tJmd0O2luZGV2OwogCi0JaWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkgJmFtcDsmYW1wOwotCSAgICBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGluZm8tJmd0O2luZGV2KSkKJiM0MzsJaWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKCZhbXA7ZnQtJmd0O2RhdGEpICZhbXA7JmFtcDsKJiM0MzsJICAgIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoaW5mby0mZ3Q7ZGV2KSkKIAkJaW5mby0mZ3Q7eG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOwogCiYjNDM7CWlmICghbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihpbmZvLSZndDtkZXYsIGZ0KSkKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsKIAlyZXR1cm4gMDsKJiM0MztlcnJfb3V0OgomIzQzOwlkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7CiYjNDM7CiYjNDM7CXJldHVybiAtMTsKIH0KIAogc3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMjA1LDQ0ICYjNDM7MjExLDYgQEAgc3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCXJldHVybiBmb3VuZDsKIH0KIAotc3RhdGljIGludCBuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAotCQkJCQlzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCAqdHVuLAotCQkJCQlzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsCi0JCQkJCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIpCi17Ci0Jc3RydWN0IGRzdF9lbnRyeSAqY3VyX2RzdCA9IHJvdXRlLSZndDt0dXBsZVtkaXJdLmRzdDsKLQlzdHJ1Y3QgZHN0X2VudHJ5ICp0dW5fZHN0ID0gTlVMTDsKLQlzdHJ1Y3QgZmxvd2kgZmwgPSB7fTsKLQotCXN3aXRjaCAobmZ0X3BmKHBrdCkpIHsKLQljYXNlIE5GUFJPVE9fSVBWNDoKLQkJZmwudS5pcDQuZGFkZHIgPSB0dW4tJmd0O2RzdF92NC5zX2FkZHI7Ci0JCWZsLnUuaXA0LnNhZGRyID0gdHVuLSZndDtzcmNfdjQuc19hZGRyOwotCQlmbC51LmlwNC5mbG93aTRfaWlmID0gbmZ0X2luKHBrdCktJmd0O2lmaW5kZXg7Ci0JCWZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtJmd0O3NrYikpOwotCQlmbC51LmlwNC5mbG93aTRfbWFyayA9IHBrdC0mZ3Q7c2tiLSZndDttYXJrOwotCQlmbC51LmlwNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQzsKLQkJYnJlYWs7Ci0JY2FzZSBORlBST1RPX0lQVjY6Ci0JCWZsLnUuaXA2LmRhZGRyID0gdHVuLSZndDtkc3RfdjY7Ci0JCWZsLnUuaXA2LnNhZGRyID0gdHVuLSZndDtzcmNfdjY7Ci0JCWZsLnUuaXA2LmZsb3dpNl9paWYgPSBuZnRfaW4ocGt0KS0mZ3Q7aWZpbmRleDsKLQkJZmwudS5pcDYuZmxvd2xhYmVsID0gaXA2X2Zsb3dpbmZvKGlwdjZfaGRyKHBrdC0mZ3Q7c2tiKSk7Ci0JCWZsLnUuaXA2LmZsb3dpNl9tYXJrID0gcGt0LSZndDtza2ItJmd0O21hcms7Ci0JCWZsLnUuaXA2LmZsb3dpNl9mbGFncyA9IEZMT1dJX0ZMQUdfQU5ZU1JDOwotCQlicmVhazsKLQl9Ci0KLQluZl9yb3V0ZShuZnRfbmV0KHBrdCksICZhbXA7dHVuX2RzdCwgJmFtcDtmbCwgZmFsc2UsIG5mdF9wZihwa3QpKTsKLQlpZiAoIXR1bl9kc3QpCi0JCXJldHVybiAtRU5PRU5UOwotCi0Jcm91dGUtJmd0O3R1cGxlW2Rpcl0uZHN0ID0gdHVuX2RzdDsKLQlkc3RfcmVsZWFzZShjdXJfZHN0KTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogCQkJCXN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwKIAkJCQljb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCkBAIC0yNTUsMjggJiM0MzsyMjMsMjUgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKIAl1bnNpZ25lZCBjaGFyIGhhW0VUSF9BTEVOXTsKIAlpbnQgaTsKIAotCWlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHJvdXRlLCBkc3QsIGN0LCBkaXIsIGhhLCAmYW1wO3N0YWNrKSAmbHQ7IDAgfHwKLQkgICAgbmZ0X2Rldl9wYXRoX2luZm8oJmFtcDtzdGFjaywgJmFtcDtpbmZvLCBoYSwgJmFtcDtmdC0mZ3Q7ZGF0YSkgJmx0OyAwKQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCWlmICghbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihpbmZvLmluZGV2LCBmdCkpCiYjNDM7CWlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRzdCwgY3QsIGRpciwgaGEsICZhbXA7c3RhY2spICZsdDsgMCB8fAomIzQzOwkgICAgbmZ0X2Rldl9wYXRoX2luZm8oJmFtcDtzdGFjaywgJmFtcDtpbmZvLCBoYSwgZnQpICZsdDsgMCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlpZiAoaW5mby5vdXRkZXYpCi0JCXJvdXRlLSZndDt0dXBsZVtkaXJdLm91dC5pZmluZGV4ID0gaW5mby5vdXRkZXYtJmd0O2lmaW5kZXg7CiYjNDM7CXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi5pZmluZGV4ID0gaW5mby5kZXYtJmd0O2lmaW5kZXg7CiYjNDM7CXJvdXRlLSZndDt0dXBsZVtkaXJdLm91dC5pZmluZGV4ID0gaW5mby5kZXYtJmd0O2lmaW5kZXg7CiAKLQlyb3V0ZS0mZ3Q7dHVwbGVbIWRpcl0uaW4uaWZpbmRleCA9IGluZm8uaW5kZXYtJmd0O2lmaW5kZXg7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGluZm8ubnVtX2VuY2FwczsgaSYjNDM7JiM0MzspIHsKIAkJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLmVuY2FwW2ldLmlkID0gaW5mby5lbmNhcFtpXS5pZDsKIAkJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLmVuY2FwW2ldLnByb3RvID0gaW5mby5lbmNhcFtpXS5wcm90bzsKIAl9CiAKLQlpZiAoaW5mby5udW1fdHVucyAmYW1wOyZhbXA7Ci0JICAgICFuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKHBrdCwgJmFtcDtpbmZvLnR1biwgcm91dGUsIGRpcikpIHsKJiM0MzsJaWYgKGluZm8ubnVtX3R1bnMpIHsKIAkJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLnR1bi5zcmNfdjYgPSBpbmZvLnR1bi5kc3RfdjY7CiAJCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi50dW4uZHN0X3Y2ID0gaW5mby50dW4uc3JjX3Y2OwogCQlyb3V0ZS0mZ3Q7dHVwbGVbIWRpcl0uaW4udHVuLmwzX3Byb3RvID0gaW5mby50dW4ubDNfcHJvdG87CiAJCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi5udW1fdHVucyA9IGluZm8ubnVtX3R1bnM7CiYjNDM7CQlkc3RfcmVsZWFzZShyb3V0ZS0mZ3Q7dHVwbGVbZGlyXS5kc3QpOwomIzQzOwkJcm91dGUtJmd0O3R1cGxlW2Rpcl0uZHN0ID0gaW5mby50dW5fZHN0OwogCX0KIAogCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi5udW1fZW5jYXBzID0gaW5mby5udW1fZW5jYXBzOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfbWV0YS5jIGIvbmV0L25ldGZpbHRlci9uZnRfbWV0YS5jCmluZGV4IDBhNDNlMDc4N2E2ODguLjAxY2ZiYWEzNjUyNTAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMKQEAgLTIwLDYgJiM0MzsyMCw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L2RzdC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwX3N0YXRlcy5oJmd0OyAvKiBmb3IgVENQX1RJTUVfV0FJVCAqLwogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oJmd0OwpAQCAtMjc5LDExICYjNDM7MjgwLDEyIEBAIHN0YXRpYyBib29sIG5mdF9tZXRhX2dldF9ldmFsX2lmbmFtZShlbnVtIG5mdF9tZXRhX2tleXMga2V5LCB1MzIgKmRlc3QsCiBzdGF0aWMgbm9pbmxpbmUgYm9vbAogbmZ0X21ldGFfZ2V0X2V2YWxfcnRjbGFzc2lkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqZGVzdCkKIHsKLQljb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBza2JfZHN0KHNrYik7CiYjNDM7CWNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdDsKIAotCWlmICghZHN0KQomIzQzOwlpZiAoIXNrYl92YWxpZF9kc3Qoc2tiKSkKIAkJcmV0dXJuIGZhbHNlOwogCiYjNDM7CWRzdCA9IHNrYl9kc3Qoc2tiKTsKIAkqZGVzdCA9IGRzdC0mZ3Q7dGNsYXNzaWQ7CiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9ydC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcnQuYwppbmRleCBhZWIwMDk0ZWFmZDgwLi44NDFjODYzYTA4ZGI1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3J0LmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZHN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXA2X3JvdXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3JvdXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCZndDsKQEAgLTU5LDEwICYjNDM7NjAsMTEgQEAgdm9pZCBuZnRfcnRfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAogCXUzMiAqZGVzdCA9ICZhbXA7cmVncy0mZ3Q7ZGF0YVtwcml2LSZndDtkcmVnXTsKIAljb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiAKLQlkc3QgPSBza2JfZHN0KHNrYik7Ci0JaWYgKCFkc3QpCiYjNDM7CWlmICghc2tiX3ZhbGlkX2RzdChza2IpKQogCQlnb3RvIGVycjsKIAomIzQzOwlkc3QgPSBza2JfZHN0KHNrYik7CiYjNDM7CiAJc3dpdGNoIChwcml2LSZndDtrZXkpIHsKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfQ0xBU1NJRAogCWNhc2UgTkZUX1JUX0NMQVNTSUQ6CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMKaW5kZXggOGNlYzQzMDY0MzE5Mi4uYzhiYmE2OTdmOTkzYSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYwpAQCAtMTIsNiAmIzQzOzEyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZnJtLmgmZ3Q7CiAKQEAgLTE3Nyw5ICYjNDM7MTc4LDE1IEBAIHN0YXRpYyB2b2lkIG5mdF94ZnJtX2dldF9ldmFsX291dChjb25zdCBzdHJ1Y3QgbmZ0X3hmcm0gKnByaXYsCiAJCQkJICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsCiAJCQkJICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCkKIHsKLQljb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBza2JfZHN0KHBrdC0mZ3Q7c2tiKTsKJiM0MzsJY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCWludCBpOwogCiYjNDM7CWlmICghc2tiX3ZhbGlkX2RzdChwa3QtJmd0O3NrYikpIHsKJiM0MzsJCXJlZ3MtJmd0O3ZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSzsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlkc3QgPSBza2JfZHN0KHBrdC0mZ3Q7c2tiKTsKIAlmb3IgKGkgPSAwOyBkc3QgJmFtcDsmYW1wOyBkc3QtJmd0O3hmcm07CiAJICAgICBkc3QgPSAoKGNvbnN0IHN0cnVjdCB4ZnJtX2RzdCAqKWRzdCktJmd0O2NoaWxkLCBpJiM0MzsmIzQzOykgewogCQlpZiAoaSAmbHQ7IHByaXYtJmd0O3NwbnVtKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY4NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDExODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmtpbmcgU3Vic3lzdGVtIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBhIHdob2xlIGJ1bmNoIG9mIGZpbGVzIHJlbGF0ZWQgdG8gbmV0d29ya2luZyDigJMgc3BlY2lmaWNhbGx5IGFyb3VuZCBgbmV0X2RldmljZV9wYXRoX3N0YWNrYCwgdGhlIGZvcndhcmQgcGF0aCBmaWxsaW5nLCBjb25udHJhY2ssIGZsb3cgdGFibGUgaW50ZXJhY3Rpb25zLCBhbmQgc2tiIGRlc3RpbmF0aW9uIHZhbGlkaXR5IGNoZWNrcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgYXJlIG1vc3RseSBmdW5jdGlvbmFsIGNoYW5nZXMgYWltZWQgYXQgYWRkcmVzc2luZyBtZW1vcnkgbGVha3MgcmVsYXRlZCB0byB0aGUgYGRzdF9yZWxlYXNlYCBhbmQgdHdlYWtpbmcgdGhlIGNvbm50cmFjayBhbmQgZmxvd3RhYmxlIGJlaGF2aW9ycy4gVGhhdCYjMzk7cyBnb29kLCBpbXBvcnRhbnQgc3R1ZmYuCgpGaXJzdCwgSSBzZWUgc29tZSBjb25zaXN0ZW50IGNoYW5nZXM6CiogICBBZGRlZCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VgIGNhbGxzIGluIGVycm9yIHBhdGhzIGluIHNldmVyYWwgZHJpdmVycywgbGlrZSBhaXJvaGEgYW5kIG1lZGlhdGVrLgoqICAgVGhlIGBuZXRfZGV2aWNlX3BhdGhgIHN0cnVjdCBpbiBgbmV0ZGV2aWNlLmhgIGhhcyBhIG5ldyBgZHN0YCBmaWVsZCB3aXRoaW4gdGhlIGB0dW5gIHVuaW9uLCBhbmQgdGhlIG5ldyBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VgIGZ1bmN0aW9uIGlzIGRlY2xhcmVkLgoqICAgSSBzZWUgYSBuZXcgaW1wbGVtZW50YXRpb24gZm9yIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAgaW4gYGRldi5jYCwgd2hpY2ggc3BlY2lmaWNhbGx5IHJlbGVhc2VzIHRoZSBgZHN0YCBlbnRyeSBmb3IgdGhlIHR1bm5lbGluZyBjYXNlIGFuZCBtb2RpZmljYXRpb25zIHRvIHRoZSBtYWluIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGZ1bmN0aW9uIHRvIGNhbGwgdGhlIHJlbGVhc2UgZnVuY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KCkl0IGxvb2tzIGxpa2Ugd2UgYXJlIGNvcnJlY3RseSByZWxlYXNpbmcgYGRzdGAgb24gZXJyb3IsIHdoaWNoIHNob3VsZCByZWR1Y2UgcG90ZW50aWFsIG1lbW9yeSBsZWFrcy4KCkFsc28sIGl0IGxvb2tzIGxpa2UgYGRzYV91c2VyX2ZpbGxfZm9yd2FyZF9wYXRoYCBoYXMgYmVlbiB1cGRhdGVkIHRvIHNldCB0aGUgY29udGV4dCBgZGV2YCBtZW1iZXIgdG8gTlVMTCwgYW5kIHRoZSB0dW5uZWxpbmcgcGF0aHMgaW4gSVB2NCBhbmQgSVB2NiBhcmUgbm93IHN0b3JpbmcgdGhlIGRlc3RpbmF0aW9uIGluIGBwYXRoLSZndDt0dW4uZHN0YCwgcmF0aGVyIHRoYW4gaW1tZWRpYXRlbHkgcmVsZWFzaW5nIGl0LCB3aGljaCBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZS4KClJlcGxhY2luZyBgIXNrYl9kc3Qoc2tiKWAgd2l0aCBgIXNrYl92YWxpZF9kc3Qoc2tiKWAgaXMgZ29vZC4gQWxzbywgaW4gdGhlIHJlamVjdCBjb2RlLCBzZXR0aW5nIGBza2JfZHN0X2Ryb3Aoc2tiKWAgcHJpb3IgdG8gYHNrYl9kc3Rfc2V0KHNrYiwgZHN0KWAgaXMgYWxzbyBpbXBvcnRhbnQuIFRoaXMgaW1wcm92ZXMgcm9idXN0bmVzcy4KClRoZSBDb25udHJhY2sgY2hhbmdlcyBzZWVtIGludGVyZXN0aW5nLiBJIHNlZSBhIGNoYW5nZSB0byBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLCB3aGljaCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBvbiBwZXJmb3JtYW5jZS4gVGhlcmUgaXMgYSBjaGFuZ2UgdG8gaG93IGNvbm50cmFjayB0dXBsZXMgYXJlIGFjY2Vzc2VkLCBhbmQgYSB0aW1lb3V0IGNoYW5nZSBhcyB3ZWxsLgoKTm93LCB0aGUgZmxvdyB0YWJsZSBzdHVmZiBsb29rcyB0byBoYXZlIGJlZW4gbW9kaWZpZWQgdG8gc3VwcG9ydCB0aGUgY2hhbmdlcy4gVGhlIHJvdXRlIGFyZ3VtZW50IHdhcyByZW1vdmVkLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGVudHJ5IHBvaW50cyBhcmUgdGhlIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAgYW5kIGBuZnRfZGV2X3BhdGhfaW5mb2AsIGFuZCBub3cgdGhlIHR1biBkZXN0aW5hdGlvbiBgaW5mby50dW5fZHN0YCBpcyB1c2VkLgoKR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMsIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhlc2UgY29yZSBmdW5jdGlvbnMuIEkgd2lsbCBuZWVkIHRvIHJlYWxseSBmb2N1cyBvbiB0aGUgY2hhbmdlcyByZWxhdGluZyB0byBlcnJvciBoYW5kbGluZywgbmV3IGZ1bmN0aW9uIGNhbGxzLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGNvbm50cmFjay4KCiogICBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBhbmQgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCwgd2hpY2ggYXJlIGNsZWFybHkgY2VudHJhbC4KKiAgIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAgYW5kIGBuZnRfZGV2X3BhdGhfaW5mb2AsIGJlY2F1c2Ugb2YgdGhlaXIgcm9sZSBpbiB0aGUgZmxvdyB0YWJsZSBwYXRoLgoqICAgVGhlIHJlamVjdGlvbiBmdW5jdGlvbiBjYWxscyBzdWNoIGFzIGBuZl9yZWplY3RfZmlsbF9za2JfZHN0YCBhbmQgYG5mX3NlbmRfcmVzZXRgLCBgbmZfc2VuZF91bnJlYWNoYC4KKiAgIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAsIGFuZCBgZ2V0X2N0X29yX3R1cGxlX2Zyb21fc2tiYCwgYmVjYXVzZSB0aGlzIGlzIHRoZSBjb25udHJhY2sgZnVuY3Rpb24uCgpJIHdhbnQgdG8gc2VlIHdoYXQgaXMgY2FsbGluZyBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLiBJJiMzOTtsbCB1c2UgZ3JlcCBmb3IgdGhhdCEgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IHR1bm5lbCByb3V0ZXMgYXJlIGJlaW5nIGNob3Nlbi4gTGV0IG1lIGNoZWNrIHRoZSBjYWxsIHNpdGVzIGZvciB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9kZXZfZm9yd2FyZF9wYXRoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MTk3PXN0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIxMy1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MjE0OnN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIxNS1cdFx0XHRcdHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTI2MD1pbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMwMi1cdGlmIChyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLnhtaXRfdHlwZVx0PT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjMwMzpcdCAgICBuZnRfZGV2X2ZvcndhcmRfcGF0aChwa3QsIHJvdXRlLCBjdCwgZGlyLCBmdCkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMwNC1cdFx0Z290byBlcnJfZHN0X3JlbGVhc2U7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMDYtXHRpZiAocm91dGUtXHUwMDNldHVwbGVbIWRpcl0ueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzozMDc6XHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsICFkaXIsIGZ0KSBcdTAwM2MgMClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzA4LVx0XHRnb3RvIGVycl9kc3RfcmVsZWFzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA4NgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBORlQgRmxvdyBSb3V0ZSoqCgpPa2F5LCBzbyB0aGUgYG5mdF9mbG93X3JvdXRlYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBvdXIgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHN5c3RlbSBhY3R1YWxseSB3b3JrcywgYW5kIHRoYXQgbWVhbnMgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGguIFRoZXJlZm9yZSwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBsb2NhdGUgKmV2ZXJ5IHNpbmdsZSogaW5zdGFuY2Ugd2hlcmUgYG5mdF9mbG93X3JvdXRlYCBpcyBjYWxsZWQuIEZpbmRpbmcgdGhvc2UgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgY29udGV4dCBJIG5lZWQgdG8gZ3Jhc3AgdGhlIGxvZ2ljIGZsb3cuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGtleSB0byB1bnBhY2tpbmcgdGhlIGJlaGF2aW9yIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9mbG93X3JvdXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MjQ3PXN0cnVjdCBuZnRfcGt0aW5mbztcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MjQ4OmludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0yNDktXHRcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTIxND1zdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMjU5LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoyNjA6aW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTI2MS1cdFx0ICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzE2LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MzE3OkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9mbG93X3JvdXRlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz01MD1zdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTEwOC1cdGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjEwOTpcdGlmIChuZnRfZmxvd19yb3V0ZShwa3QsIGN0LCBcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVx1MDAzZWZsb3d0YWJsZSkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMTAtXHRcdGdvdG8gZXJyX2Zsb3dfcm91dGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3MzIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIEtleSBGdW5jdGlvbnMgaW4gdGhlIE5ldGZpbHRlciBGbG93IGFuZCBDb25uZWN0aW9uIFRyYWNraW5nIFBhdGgqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIGZsb3cgdGFibGUgY2hhbmdlcywgYW5kIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIGlzIGNsZWFybHkgdGhlIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50IGhlcmUsIHRoZSBtYWluIGVudHJ5IGludG8gdGhlIG5ldyBmbG93IHRhYmxlIHBhdGguIEJ1dCBJIGNhbiYjMzk7dCBqdXN0IHN0b3AgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUsIHRvIGNvbnNpZGVyIHBvdGVudGlhbCByaXBwbGUgZWZmZWN0cy4gTXkgbWluZCBpcyBqdW1waW5nIGFyb3VuZCBmdW5jdGlvbnMsIHNlYXJjaGluZyBmb3IgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLgoKTm93LCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLi4uIHRoYXQmIzM5O3MgYSAqY29yZSogZnVuY3Rpb24gd2l0aGluIGNvbm50cmFjaywgcmlnaHQ/IEFueSBjaGFuZ2UgaGVyZSBjb3VsZCBiZS4uLiBzaWduaWZpY2FudC4gSXQmIzM5O3MgYSBmb3VuZGF0aW9uYWwgZWxlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBhdGhzIGludGVyYWN0LgoKQW5kIHRoZW4gdGhlcmUmIzM5O3MgYG5mX3JlamVjdF9maWxsX3NrYl9kc3RgLiBUaGF04oCZcyBjYWxsZWQgZnJvbSBgbmZfc2VuZF9yZXNldGAgYW5kIGBuZl9zZW5kX3VucmVhY2hgLiBUaGVzZSBmdW5jdGlvbnMgaGFuZGxlIElDTVAgcmVzcG9uc2VzIHRvIGRyb3BwZWQgcGFja2V0cy4gSXMgdGhlcmUgYSBkZXBlbmRlbmN5IHRoZXJlPyBUaGlzIGxpa2VseSBoYXMgdG8gYmUgY2hlY2tlZCwgYXMgdGhpcyBjb3VsZCBoYXZlIHRoZSBwb3RlbnRpYWwgZm9yIGEgbG90IG9mIGNvbXBsZXhpdHkuIFRoZSBwYXRoIGZvcndhcmQgaGFzIHRvIGJlIGNsZWFyLgoKU28sIEkmIzM5O20gYWxyZWFkeSBhc2tpbmcgbXlzZWxmIGhvdyB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGZ1bmN0aW9ucyB3b3JrLiBJIG5lZWQgdG8ga2VlcCB0cmFjaW5nIHRoZXNlIHJlbGF0aW9uc2hpcHMsIHRoaW5raW5nIGFib3V0IGhvdyBjaGFuZ2VzIGluIG9uZSBwbGFjZSBtaWdodCBpbmZsdWVuY2Ugb3RoZXJzLCBob3cgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIGBuZl9zZW5kX3Jlc2V0YCBpdHNlbGYuLi4gd2hhdCYjMzk7cyBpdHMgcm9sZT8gVGhpcyBpcyB3aGVyZSBJIGFtIHJpZ2h0IG5vdywgZGlnZ2luZyBpbiBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX3NlbmRfcmVzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjQvbmZfcmVqZWN0Lmg9MTA9dm9pZCBuZl9zZW5kX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IGNvZGUsIGludCBob29rKTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX3JlamVjdC5oOjExOnZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICosIHN0cnVjdCBza19idWZmICpvbGRza2IsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9yZWplY3QuaC0xMi1cdFx0ICAgaW50IGhvb2spO1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY2L25mX3JlamVjdC5oPTg9dm9pZCBuZl9zZW5kX3VucmVhY2g2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgdW5zaWduZWQgY2hhciBjb2RlLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjYvbmZfcmVqZWN0LmgtOS1cdFx0ICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjYvbmZfcmVqZWN0Lmg6MTA6dm9pZCBuZl9zZW5kX3Jlc2V0NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY2L25mX3JlamVjdC5oLTExLVx0XHQgICAgaW50IGhvb2spO1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmM9MzE9cmVqZWN0X3RnKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jLTU4LVx0Y2FzZSBJUFRfVENQX1JFU0VUOlxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYzo1OTpcdFx0bmZfc2VuZF9yZXNldCh4dF9uZXQocGFyKSwgcGFyLVx1MDAzZXN0YXRlLVx1MDAzZXNrLCBza2IsIGhvb2spO1xubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYy02MC1cdFx0YnJlYWs7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MjU2PXN0YXRpYyBpbnQgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTI3Mi0vKiBTZW5kIFJTVCByZXBseSAqL1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM6MjczOnZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTI3NC1cdFx0ICAgaW50IGhvb2spXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzQ1LX1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jOjM0NjpFWFBPUlRfU1lNQk9MX0dQTChuZl9zZW5kX3Jlc2V0KTtcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTM0Ny1cbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY0LmM9MTk9c3RhdGljIHZvaWQgbmZ0X3JlamVjdF9pcHY0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjQuYy0yOS1cdGNhc2UgTkZUX1JFSkVDVF9UQ1BfUlNUOlxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jOjMwOlx0XHRuZl9zZW5kX3Jlc2V0KG5mdF9uZXQocGt0KSwgbmZ0X3NrKHBrdCksIHBrdC1cdTAwM2Vza2IsXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY0LmMtMzEtXHRcdFx0ICAgICAgbmZ0X2hvb2socGt0KSk7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmM9MzU9cmVqZWN0X3RnNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMtNjMtXHRjYXNlIElQNlRfVENQX1JFU0VUOlxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmM6NjQ6XHRcdG5mX3NlbmRfcmVzZXQ2KG5ldCwgcGFyLVx1MDAzZXN0YXRlLVx1MDAzZXNrLCBza2IsIHh0X2hvb2tudW0ocGFyKSk7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9SRUpFQ1QuYy02NS1cdFx0YnJlYWs7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmM9Mjk3PXN0YXRpYyBpbnQgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbilcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy0zMTItXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYzozMTM6dm9pZCBuZl9zZW5kX3Jlc2V0NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jLTMxNC1cdFx0ICAgIGludCBob29rKVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jLTQxMy19XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYzo0MTQ6RVhQT1JUX1NZTUJPTF9HUEwobmZfc2VuZF9yZXNldDYpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtNDE1LVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjYuYz0xOT1zdGF0aWMgdm9pZCBuZnRfcmVqZWN0X2lwdjZfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2Ni5jLTMwLVx0Y2FzZSBORlRfUkVKRUNUX1RDUF9SU1Q6XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY2LmM6MzE6XHRcdG5mX3NlbmRfcmVzZXQ2KG5mdF9uZXQocGt0KSwgbmZ0X3NrKHBrdCksIHBrdC1cdTAwM2Vza2IsXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY2LmMtMzItXHRcdFx0ICAgICAgIG5mdF9ob29rKHBrdCkpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pbmV0LmM9MTc9c3RhdGljIHZvaWQgbmZ0X3JlamVjdF9pbmV0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pbmV0LmMtMzAtXHRcdGNhc2UgTkZUX1JFSkVDVF9UQ1BfUlNUOlxubmV0L25ldGZpbHRlci9uZnRfcmVqZWN0X2luZXQuYzozMTpcdFx0XHRuZl9zZW5kX3Jlc2V0KG5mdF9uZXQocGt0KSwgbmZ0X3NrKHBrdCksXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaW5ldC5jLTMyLVx0XHRcdFx0ICAgICAgcGt0LVx1MDAzZXNrYiwgbmZ0X2hvb2socGt0KSk7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcmVqZWN0X2luZXQuYy00Ny1cdFx0Y2FzZSBORlRfUkVKRUNUX1RDUF9SU1Q6XG5uZXQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaW5ldC5jOjQ4Olx0XHRcdG5mX3NlbmRfcmVzZXQ2KG5mdF9uZXQocGt0KSwgbmZ0X3NrKHBrdCksXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaW5ldC5jLTQ5LVx0XHRcdFx0ICAgICAgIHBrdC1cdTAwM2Vza2IsIG5mdF9ob29rKHBrdCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzE4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTmV0ZmlsdGVyIEV4cHJlc3Npb24gRXZhbHVhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgTmV0ZmlsdGVyIGVudHJ5IHBvaW50cyBhbmQgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIHJvbGVzLiBJIHNlZSBgbmZ0X3JlamVjdF9pcHY0X2V2YWxgLCBgbmZ0X3JlamVjdF9pcHY2X2V2YWxgLCBgbmZ0X3JlamVjdF9pbmV0X2V2YWxgLCBgcmVqZWN0X3RnYCwgYW5kIGByZWplY3RfdGc2YC4gVGhvc2UgbG9vayBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBjbGVhcmx5IHRoZSByZWplY3Rpb24gbWVjaGFuaXNtcyBmb3IgZGlmZmVyZW50IElQIHZlcnNpb25zIGFuZCBwb3RlbnRpYWxseSB0cmFmZmljIGdyb3Vwcy4KCkJ1dCB3aGF0IGFib3V0IHRoZXNlIG90aGVycz8gYG5mdF9tZXRhX2dldF9ldmFsX3J0Y2xhc3NpZGAsIGBuZnRfcnRfZ2V0X2V2YWxgLCBhbmQgYG5mdF94ZnJtX2dldF9ldmFsX291dGA/IEhtbSwgdGhvc2UgbmFtZXMgc3VnZ2VzdCB0aGV5JiMzOTtyZSBhbHNvIGV2YWx1YXRpb24gZnVuY3Rpb25zLCBidXQgbGlrZWx5IGZvciBtb3JlIHNwZWNpYWxpemVkIHB1cnBvc2VzLiBUaGV5IHNlZW0gdG8gYmUgZGVhbGluZyB3aXRoIHRoaW5ncyBsaWtlIG1ldGFkYXRhLCByb3V0aW5nLCBhbmQgeGZybSAoSVBzZWMsIEkmIzM5O20gZ3Vlc3NpbmcpLgoKTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24gZnVydGhlciwgYW5kIEkgcmVtZW1iZXIgYG5mdF9tZXRhX2dldF9ldmFsYCBpcyB0aGUga2V5IGVudHJ5IGZvciAqbWV0YSosIGFuZCBgbmZ0X3J0X2dldF9ldmFsYCBmb3IgKnJ0Ki4gQWxzbywgSSBub3cgc2VlIGBuZnRfeGZybV9nZXRfZXZhbF9vdXRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBYRlJNIGV2YWx1YXRpb25zLiBTbyB0aGV5IGhhdmUgYSBjbGVhciBoaWVyYXJjaHkuCgpMZXQmIzM5O3MgZGlnIGludG8gYG5mdF9tZXRhX2dldF9ldmFsYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9tZXRhX2dldF9ldmFsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oPTEzMT1zdHJ1Y3QgbmZ0X3BrdGluZm87XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaDoxMzI6dm9pZCBuZnRfbWV0YV9nZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaC0xMzMtXHRcdCAgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KTtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuaD0yOT1pbnQgbmZ0X21ldGFfc2V0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuaC0zMS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZnRfbWV0YS5oOjMyOnZvaWQgbmZ0X21ldGFfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmgtMzMtXHRcdCAgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvbmZ0X21ldGFfYnJpZGdlLmM9MjQ9c3RhdGljIHZvaWQgbmZ0X21ldGFfYnJpZGdlX2dldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZnRfbWV0YV9icmlkZ2UuYy03My1cdGRlZmF1bHQ6XG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZnRfbWV0YV9icmlkZ2UuYzo3NDpcdFx0cmV0dXJuIG5mdF9tZXRhX2dldF9ldmFsKGV4cHIsIHJlZ3MsIHBrdCk7XG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZnRfbWV0YV9icmlkZ2UuYy03NS1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MjAzPXN0YXRpYyB2b2lkIGV4cHJfY2FsbF9vcHNfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIyMC1cdFgoZSwgbmZ0X2NvdW50ZXJfZXZhbCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MjIxOlx0WChlLCBuZnRfbWV0YV9nZXRfZXZhbCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjIyLVx0WChlLCBuZnRfbG9va3VwX2V2YWwpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz02Mz1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWRcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzo2NDpuZnRfbWV0YV9nZXRfZXZhbF90aW1lKGVudW0gbmZ0X21ldGFfa2V5cyBrZXksXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNjUtXHRcdCAgICAgICB1MzIgKmRlc3QpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jPTgyPXN0YXRpYyBub2lubGluZSBib29sXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6ODM6bmZ0X21ldGFfZ2V0X2V2YWxfcGt0dHlwZV9sbyhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy04NC1cdFx0XHQgICAgIHUzMiAqZGVzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM9MTMyPXN0YXRpYyBub2lubGluZSBib29sXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6MTMzOm5mdF9tZXRhX2dldF9ldmFsX3NrdWdpZChlbnVtIG5mdF9tZXRhX2tleXMga2V5LFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTEzNC1cdFx0XHQgdTMyICpkZXN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz0xNzE9c3RhdGljIG5vaW5saW5lIGJvb2xcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzoxNzI6bmZ0X21ldGFfZ2V0X2V2YWxfY2dyb3VwKHUzMiAqZGVzdCwgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMTczLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMTgzLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjE4NDpzdGF0aWMgbm9pbmxpbmUgYm9vbCBuZnRfbWV0YV9nZXRfZXZhbF9raW5kKGVudW0gbmZ0X21ldGFfa2V5cyBrZXksXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMTg1LVx0XHRcdFx0XHQgICAgdTMyICpkZXN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz0yMjc9c3RhdGljIGJvb2wgbmZ0X21ldGFfc3RvcmVfaWZncm91cCh1MzIgKmRlc3QsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTIzNS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzoyMzY6c3RhdGljIGJvb2wgbmZ0X21ldGFfZ2V0X2V2YWxfaWZuYW1lKGVudW0gbmZ0X21ldGFfa2V5cyBrZXksIHUzMiAqZGVzdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy0yMzctXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz0yODA9c3RhdGljIG5vaW5saW5lIGJvb2xcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzoyODE6bmZ0X21ldGFfZ2V0X2V2YWxfcnRjbGFzc2lkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqZGVzdClcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy0yODIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy0yOTMtXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6Mjk0OnN0YXRpYyBub2lubGluZSB1MzIgbmZ0X21ldGFfZ2V0X2V2YWxfc2RpZihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy0yOTUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz0zMDY9c3RhdGljIG5vaW5saW5lIHZvaWRcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzozMDc6bmZ0X21ldGFfZ2V0X2V2YWxfc2RpZm5hbWUodTMyICpkZXN0LCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy0zMDgte1xubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjMwOTpcdHUzMiBzZGlmID0gbmZ0X21ldGFfZ2V0X2V2YWxfc2RpZihwa3QpO1xubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTMxMC1cdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jPTMxNj1zdGF0aWMgdm9pZCBuZnRfbWV0YV9wa3RpbmZvX21heV91cGRhdGUoc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTM2My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzozNjQ6dm9pZCBuZnRfbWV0YV9nZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMzY1LVx0XHQgICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00MDItXHRjYXNlIE5GVF9NRVRBX09JRkdST1VQOlxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjQwMzpcdFx0aWYgKCFuZnRfbWV0YV9nZXRfZXZhbF9pZm5hbWUocHJpdi1cdTAwM2VrZXksIGRlc3QsIHBrdCkpXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDA0LVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00MDctXHRjYXNlIE5GVF9NRVRBX1NLR0lEOlxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjQwODpcdFx0aWYgKCFuZnRfbWV0YV9nZXRfZXZhbF9za3VnaWQocHJpdi1cdTAwM2VrZXksIGRlc3QsIHBrdCkpXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDA5LVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00MTItXHRjYXNlIE5GVF9NRVRBX1JUQ0xBU1NJRDpcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzo0MTM6XHRcdGlmICghbmZ0X21ldGFfZ2V0X2V2YWxfcnRjbGFzc2lkKHNrYiwgZGVzdCkpXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDE0LVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00MjctXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDI4Olx0XHRpZiAoIW5mdF9tZXRhX2dldF9ldmFsX3BrdHR5cGVfbG8ocGt0LCBkZXN0KSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00MjktXHRcdFx0Z290byBlcnI7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQzNS1cdGNhc2UgTkZUX01FVEFfQ0dST1VQOlxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjQzNjpcdFx0aWYgKCFuZnRfbWV0YV9nZXRfZXZhbF9jZ3JvdXAoZGVzdCwgcGt0KSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00MzctXHRcdFx0Z290byBlcnI7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQ0OS1cdGNhc2UgTkZUX01FVEFfT0lGS0lORDpcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzo0NTA6XHRcdGlmICghbmZ0X21ldGFfZ2V0X2V2YWxfa2luZChwcml2LVx1MDAzZWtleSwgZGVzdCwgcGt0KSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00NTEtXHRcdFx0Z290byBlcnI7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQ1NS1cdGNhc2UgTkZUX01FVEFfVElNRV9IT1VSOlxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjQ1NjpcdFx0bmZ0X21ldGFfZ2V0X2V2YWxfdGltZShwcml2LVx1MDAzZWtleSwgZGVzdCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDU3LVx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00NTgtXHRjYXNlIE5GVF9NRVRBX1NESUY6XG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDU5Olx0XHQqZGVzdCA9IG5mdF9tZXRhX2dldF9ldmFsX3NkaWYocGt0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00NjAtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQ2MS1cdGNhc2UgTkZUX01FVEFfU0RJRk5BTUU6XG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDYyOlx0XHRuZnRfbWV0YV9nZXRfZXZhbF9zZGlmbmFtZShkZXN0LCBwa3QpO1xubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQ2My1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQ3Mi19XG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDczOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9tZXRhX2dldF9ldmFsKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00NzQtXG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jPTgwMz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfbWV0YV9nZXRfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy04MDUtXHQuc2l6ZVx0XHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfbWV0YSkpLFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjgwNjpcdC5ldmFsXHRcdD0gbmZ0X21ldGFfZ2V0X2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtODA3LVx0LmluaXRcdFx0PSBuZnRfbWV0YV9nZXRfaW5pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NDcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipDb25zaWRlcmluZyBFdmFsdWF0aW9uIEZ1bmN0aW9ucyBmb3IgRm9jdXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gc3RhcnQgcmVhbGx5IGRpZ2dpbmcgaW4uIGBuZnRfbWV0YV9nZXRfZXZhbGAgc2VlbXMgbGlrZSBhIHNvbGlkLCBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBmb2N1c2luZyBvbiBldmFsdWF0aW9uIGZ1bmN0aW9ucy4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24sIGJ1dCBpcyBpdCB0aGUgKmJlc3QqPyBNeSBleHBlcmllbmNlIGlzIHRoYXQgb25lIGZ1bmN0aW9uIGlzIHJhcmVseSB0aGUgd2hvbGUgc3RvcnkuCgpMZXQmIzM5O3Mgc2Vl4oCmIFdoYXQgYWJvdXQgYG5mdF9ydF9nZXRfZXZhbGA/IEkgbmVlZCB0byBjb25zaWRlciBpdCwgdG9vLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBjb3VsZCBsZWFkIHRvIHNvbWUgaW50ZXJlc3RpbmcgaW5zaWdodHMuIEl0JiMzOTtzIHByb2JhYmx5IHdvcnRoIGludmVzdGlnYXRpbmcgaXRzIHJvbGUgYW5kIGhvdyBpdCByZWxhdGVzIHRvIGBuZnRfbWV0YV9nZXRfZXZhbGAuIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoZXNlIHR3bywgYW5kIGxpa2VseSBvdGhlcnMsIGludGVyYWN0IHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgZXZhbHVhdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfcnRfZ2V0X2V2YWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmg9MTQ4PXZvaWQgbmZ0X2R5bnNldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oLTE0OS1cdFx0ICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oOjE1MDp2b2lkIG5mdF9ydF9nZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaC0xNTEtXHRcdCAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTIwMz1zdGF0aWMgdm9pZCBleHByX2NhbGxfb3BzX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0yMjktXHRYKGUsIG5mdF9keW5zZXRfZXZhbCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MjMwOlx0WChlLCBuZnRfcnRfZ2V0X2V2YWwpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIzMS1cdFgoZSwgbmZ0X2JpdHdpc2VfZXZhbCk7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcnQuYz0yMj1zdGF0aWMgdTE2IGdldF90Y3Btc3MoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKnNrYmRzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9ydC5jLTUzLVxubmV0L25ldGZpbHRlci9uZnRfcnQuYzo1NDp2b2lkIG5mdF9ydF9nZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mdF9ydC5jLTU1LVx0XHQgICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9ydC5jPTE5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcnRfZ2V0X29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9ydC5jLTE5NS1cdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9ydCkpLFxubmV0L25ldGZpbHRlci9uZnRfcnQuYzoxOTY6XHQuZXZhbFx0XHQ9IG5mdF9ydF9nZXRfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmMtMTk3LVx0LmluaXRcdFx0PSBuZnRfcnRfZ2V0X2luaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzExCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRXZhbHVhdGluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyBmb3IgTmV0d29yayBGaWx0ZXIgUnVsZXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBnb29kIHN5bWJvbHMgdG8gcmVhbGx5IGhvbWUgaW4gb24gd2hlbiBkaWdnaW5nIGludG8gdGhlIG5ldHdvcmsgZmlsdGVyIGV2YWx1YXRpb24gcHJvY2Vzcy4gV2UmIzM5O3JlIGFscmVhZHkgdXNpbmcgYG5mdF9ydF9nZXRfZXZhbGAsIGFuZCB0aGF0JiMzOTtzIHNvbGlkIOKAkyBpdCYjMzk7cyBkZWZpbml0ZWx5IGEga2V5IHBvaW50IHRvIGV4YW1pbmUuIEJ1dCBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbC4gVGhlIGBuZnRfeGZybV9nZXRfZXZhbF9vdXRgIGZ1bmN0aW9uIGp1c3QgcG9wcGVkIGludG8gbXkgaGVhZC4gSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXQmIzM5O3MgYW5vdGhlciBnb29kIGNhbmRpZGF0ZSBmb3IgY2xvc2VyIGluc3BlY3Rpb24sIGFuZCBpZiBpdCBpcywgSSBjYW4gZGV0ZXJtaW5lIHdoeSBhbmQgd2hlcmUgaXQgbWF5IGJlIGJlbmVmaWNpYWwgdG8gYW5hbHl6ZS4gSSBuZWVkIHRvIG1hcCB0aGUgZXZhbHVhdGlvbiBmdW5jdGlvbiBtb3JlIGNvbXByZWhlbnNpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3hmcm1fZ2V0X2V2YWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfeGZybS5jPTEyMD1zdGF0aWMgdm9pZCBuZnRfeGZybV9zdGF0ZV9nZXRfa2V5KGNvbnN0IHN0cnVjdCBuZnRfeGZybSAqcHJpdixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTYwLVxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjE2MTpzdGF0aWMgdm9pZCBuZnRfeGZybV9nZXRfZXZhbF9pbihjb25zdCBzdHJ1Y3QgbmZ0X3hmcm0gKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTYyLVx0XHRcdFx0ICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTc2LVxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjE3NzpzdGF0aWMgdm9pZCBuZnRfeGZybV9nZXRfZXZhbF9vdXQoY29uc3Qgc3RydWN0IG5mdF94ZnJtICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTE3OC1cdFx0XHRcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMDEtXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MjAyOnN0YXRpYyB2b2lkIG5mdF94ZnJtX2dldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMDMtXHRcdFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMDktXHRjYXNlIFhGUk1fUE9MSUNZX0lOOlxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjIxMDpcdFx0bmZ0X3hmcm1fZ2V0X2V2YWxfaW4ocHJpdiwgcmVncywgcGt0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMTEtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTIxMi1cdGNhc2UgWEZSTV9QT0xJQ1lfT1VUOlxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjIxMzpcdFx0bmZ0X3hmcm1fZ2V0X2V2YWxfb3V0KHByaXYsIHJlZ3MsIHBrdCk7XG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMjE0LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM9MjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF94ZnJtX2dldF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTI3Mi1cdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF94ZnJtKSksXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MjczOlx0LmV2YWxcdFx0PSBuZnRfeGZybV9nZXRfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yNzQtXHQuaW5pdFx0XHQ9IG5mdF94ZnJtX2dldF9pbml0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDEyMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgTkZUIFRyYW5zZm9ybWF0aW9uIExvZ2ljKioKCk9rYXksIGBuZnRfeGZybV9nZXRfZXZhbGAgc2VlbXMgbGlrZSBhIGtleSBmdW5jdGlvbiB0byB6ZXJvIGluIG9uIHJpZ2h0IG5vdy4gSXQmIzM5O3MgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIE5ldHdvcmsgRmlsdGVyIFRhYmxlIChORlQpIGZyYW1ld29yayBoYW5kbGVzIHRyYW5zZm9ybWF0aW9ucy4gSSBzdXNwZWN0IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIGFuZCBldmFsdWF0aW5nIHRoZSBzcGVjaWZpYyB0cmFuc2Zvcm1hdGlvbiB0byBiZSBhcHBsaWVkLCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwYWNrZXQgZGF0YS4gTXkgZ3V0IHNheXMgdGhpcyBpcyB3aGVyZSB0aGUgcG9saWN5IHNlbGVjdGlvbiBhbmQgdHJhbnNmb3JtYXRpb24gc2V0dXAgaW50ZXJ0d2luZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGUgWEZSTS1yZWxhdGVkIGRldGFpbHMgYXJlIHJlc29sdmVkLgoKTmV4dCwgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAuIFRoaXMgc291bmRzIHByb21pc2luZywgcG9zc2libHkgcmVsYXRlZCB0byBwYXRoIHNlbGVjdGlvbiBvciByb3V0aW5nIHdpdGhpbiB0aGUgZGV2aWNlIGNvbnRleHQsIHdoaWNoIGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlLiBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHBsYXlzIGEga2V5IHBhcnQgaW4gaG93IHRoZSB0cmFuc2Zvcm1lZCBwYWNrZXRzIGFyZSBmb3J3YXJkZWQgd2l0aGluIHRoZSBzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBlc3NlbnRpYWwgdG8gc2VlaW5nIGhvdyB0aGUgcGFja2V0IGZsb3dzIGFyZSBoYW5kbGVkIHdpdGggdHJhbnNmb3JtYXRpb25zIGFwcGxpZWQuIExldCYjMzk7cyBzZWUgaG93IHRoZSBwYWNrZXQgaXMgYWN0dWFsbHkgcm91dGVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0yODI9c3RhdGljIGludCBhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0yOTItXHRyY3VfcmVhZF9sb2NrKCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjI5MzpcdGVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGFkZHIsIFx1MDAyNnN0YWNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMjk0LVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMDctZXJyX291dDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MzA4Olx0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UoXHUwMDI2c3RhY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMDktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmM9OTI9bXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMTA0LVx0cmN1X3JlYWRfbG9jaygpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmM6MTA1Olx0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgXHUwMDI2c3RhY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMTA2LVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMTIxLWVycl9vdXQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYzoxMjI6XHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShcdTAwMjZzdGFjayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMjMtXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0zNDI4PWludCBkZXZfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjM0Mjk6aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM0MzAtXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjM0MzE6dm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM0MzItc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jPTc1Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYy03NjItXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3NjM6c3RhdGljIGludCB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzY0LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jLTExMDktXHQubmRvX2dldF9pZmxpbmtcdFx0PSB2bGFuX2Rldl9nZXRfaWZsaW5rLFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTExMDpcdC5uZG9fZmlsbF9mb3J3YXJkX3BhdGhcdD0gdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgsXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMTExLVx0Lm5kb19od3RzdGFtcF9nZXRcdD0gdmxhbl9od3RzdGFtcF9nZXQsXG4tLVxubmV0L2NvcmUvZGV2LmM9NzQzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4tLVxubmV0L2NvcmUvZGV2LmMtNzUwLVxubmV0L2NvcmUvZGV2LmM6NzUxOnZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG5uZXQvY29yZS9kZXYuYy03NTIte1xuLS1cbm5ldC9jb3JlL2Rldi5jLTc2OS19XG5uZXQvY29yZS9kZXYuYzo3NzA6RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UpO1xubmV0L2NvcmUvZGV2LmMtNzcxLVxubmV0L2NvcmUvZGV2LmM6NzcyOmludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxubmV0L2NvcmUvZGV2LmMtNzczLVx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4tLVxubmV0L2NvcmUvZGV2LmMtODEyLWVycl9vdXQ6XG5uZXQvY29yZS9kZXYuYzo4MTM6XHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7XG5uZXQvY29yZS9kZXYuYy04MTQtXG4tLVxubmV0L2NvcmUvZGV2LmMtODE2LX1cbm5ldC9jb3JlL2Rldi5jOjgxNzpFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xubmV0L2NvcmUvZGV2LmMtODE4LVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTk3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tb25pdG9yaWZfb3BzID0ge1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk4OC1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjk4OTpzdGF0aWMgaW50IGllZWU4MDIxMV9uZXRkZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk5MC1cdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMDQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX2RhdGFpZl84MDIzX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDUzLVx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gaWVlZTgwMjExX2NoYW5nZV9tYWMsXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoxMDU0Olx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aFx0PSBpZWVlODAyMTFfbmV0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoLFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTA1NS1cdC5uZG9fc2V0dXBfdGNcdFx0PSBpZWVlODAyMTFfbmV0ZGV2X3NldHVwX3RjLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MzY9c3RhdGljIGJvb2wgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDQtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjQ1OnN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTQ2LVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy03My1vdXQ6XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjc0Olx0cmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGhhLCBzdGFjayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTc1LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTk3PXN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xOTEtZXJyX291dDpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MTkyOlx0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RhY2spO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xOTMtXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yMTQ9c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIyNS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MjI2Olx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwIHx8XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIyNy1cdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIGZ0KSBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NDkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgRmxvdyBPZmZsb2FkIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUsIHNwZWNpZmljYWxseSBob3cgdHJhZmZpYyBnZXRzIG9mZmxvYWRlZCBpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3QgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIHRoYXQmIzM5O3MgdGhlIGNvcmUgZnVuY3Rpb24uIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLiBOb3csIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAgaXMgY2FsbGVkIGJ5IGBuZnRfZmxvd19yb3V0ZWAsIGFuZCBmaW5hbGx5IHRoYXQmIzM5O3MgYWxsIGhvb2tlZCBpbnRvIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLiBUaGF0IG1ha2VzIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIHRoZSBrZXkgZW50cnkgcG9pbnQgdG8gbG9vayBhdCwgcmlnaHQ/IFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhIG1vcmUgZm9jdXNlZCBhbmFseXNpcy4gCgpOb3csIHNpbmNlIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG9mZmxvYWRpbmcsIGxldCBtZSBhbHNvIGNoZWNrIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jb25udHJhY2tfdGNwX3BhY2tldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD0xMDU9aW50IG5mX2Nvbm50cmFja191ZHBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaC0xMDktXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaDoxMTA6aW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oLTExMS1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MTk2OT1zdGF0aWMgaW50IG5mX2Nvbm50cmFja19oYW5kbGVfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk3Ni1cdGNhc2UgSVBQUk9UT19UQ1A6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MTk3NzpcdFx0cmV0dXJuIG5mX2Nvbm50cmFja190Y3BfcGFja2V0KGN0LCBza2IsIGRhdGFvZmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk3OC1cdFx0XHRcdFx0ICAgICAgIGN0aW5mbywgc3RhdGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTk1Mj1zdGF0aWMgdm9pZCBuZl9jdF90Y3Bfc3RhdGVfcmVzZXQoc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtOTYyLS8qIFJldHVybnMgdmVyZGljdCBmb3IgcGFja2V0LCBvciAtMSBmb3IgaW52YWxpZC4gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjk2MzppbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtOTY0LVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzM1MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgQ29ubnRyYWNrIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgVENQIHBhY2tldCBoYW5kbGluZyB3aXRoaW4gdGhlIE5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN5c3RlbS4gUmlnaHQsIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcCBkaXZlLiBJIGtub3cgaXQgZ2V0cyBjYWxsZWQgZnJvbSBgbmZfY29ubnRyYWNrX2hhbmRsZV9wYWNrZXRgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBieSBgbmZfY29ubnRyYWNrX2luYC4gQW5kIGBuZl9jb25udHJhY2tfaW5gIGlzLCBlc3NlbnRpYWxseSwgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBlbnRpcmUgY29ubnRyYWNrIHByb2Nlc3MuIFNvLCB3b3JraW5nIGJhY2t3YXJkcywgSSYjMzk7dmUgZ290IHRoZSBjYWxsIGNoYWluIG1hcHBlZCBpbiBteSBoZWFkLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGluZ3MgYXJlIHN0cnVjdHVyZWQuIExldCYjMzk7cyBzaGlmdCBvdXIgZm9jdXMgdG8gYGdldF9jdF9vcl90dXBsZV9mcm9tX3NrYmAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGluZm9ybWF0aW9uIGdldHMgZmV0Y2hlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X2N0X29yX3R1cGxlX2Zyb21fc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM9MTAyPWZpbmRfb3JfZXZpY3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubmNvdW50X2xpc3QgKmxpc3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0xMjktXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jOjEzMDpzdGF0aWMgYm9vbCBnZXRfY3Rfb3JfdHVwbGVfZnJvbV9za2Ioc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0xMzEtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz0xNjk9c3RhdGljIGludCBfX25mX2Nvbm5jb3VudF9hZGQoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMTgzLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYzoxODQ6XHRpZiAoIWdldF9jdF9vcl90dXBsZV9mcm9tX3NrYihuZXQsIHNrYiwgbDNudW0sIFx1MDAyNmN0LCBcdTAwMjZ0dXBsZSwgXHUwMDI2em9uZSwgXHUwMDI2cmVmY291bnRlZCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTE4NS1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz00MDM9aW5zZXJ0X3RyZWUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNDYxLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYzo0NjI6XHRpZiAoZ2V0X2N0X29yX3R1cGxlX2Zyb21fc2tiKG5ldCwgc2tiLCBsM251bSwgXHUwMDI2Y3QsIFx1MDAyNnR1cGxlLCBcdTAwMjZ6b25lLCBcdTAwMjZyZWZjb3VudGVkKSkge1xubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy00NjMtXHRcdC8qIGV4cGVjdGVkIGNhc2U6IG1hdGNoLCBpbnNlcnQgbmV3IG5vZGUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwNzgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvbm5lY3Rpb24gTGltaXQgRXZhbHVhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcgaW4gdGhlIGNhbGwgZ3JhcGhzLCBgX19uZl9jb25uY291bnRfYWRkYCBhbmQgYGluc2VydF90cmVlYCBhcmUgdGhlIGVudHJ5IHBvaW50cy4gYGluc2VydF90cmVlYCBpcyB1bHRpbWF0ZWx5IGNhbGxlZCBieSBgbmZfY29ubmNvdW50X2NvdW50YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFNpbWlsYXJseSwgYF9fbmZfY29ubmNvdW50X2FkZGAgaGFzIGl0cyBvcmlnaW5zIGluIGBuZl9jb25uY291bnRfYWRkYC4gVGhlbiwgYG5mX2Nvbm5jb3VudF9jb3VudGAgaXRzZWxmIGZlZWRzIGludG8gYm90aCBgeHRfY29ubmxpbWl0X2V2YWxgIGFuZCBgbmZ0X2Nvbm5saW1pdF9ldmFsYC4KCkdpdmVuIHRoYXQsIGBuZnRfY29ubmxpbWl0X2V2YWxgIGxvb2tzIGxpa2UgdGhlIG1vc3Qgc3RyYXRlZ2ljYWxseSBpbXBvcnRhbnQgcG9pbnQgdG8gZm9jdXMgb24gaGVyZS4gSXQmIzM5O3MgdGhlIGNsZWFuZXN0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgYXQgaG93IGNvbm5lY3Rpb24gbGltaXRzIGFyZSBhY3R1YWxseSAqZXZhbHVhdGVkKiB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEkmIzM5O2xsIGJlZ2luIG15IGRlZXBlciBkaXZlIHRoZXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY291bnRpbmcgbWVjaGFuaXNtIGludGVyYWN0cyB3aXRoIHRoZSBOZXRmaWx0ZXIgdGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9jb25ubGltaXRfZXZhbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYz0xNzY9c3RhdGljIHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgbmZ0X2Nvbm5saW1pdF9vYmpfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jLTE4My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jOjE4NDpzdGF0aWMgdm9pZCBuZnRfY29ubmxpbWl0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmMtMTg1LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmM9MjUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9jb25ubGltaXRfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jLTI1My1cdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9jb25ubGltaXQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jOjI1NDpcdC5ldmFsXHRcdD0gbmZ0X2Nvbm5saW1pdF9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmMtMjU1LVx0LmluaXRcdFx0PSBuZnRfY29ubmxpbWl0X2luaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjcyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBORl9UQUJMRVMgU3ltYm9sIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLCBgbmZ0X3JlamVjdF9pcHY0X2V2YWxgLCBgbmZ0X3JlamVjdF9pcHY2X2V2YWxgLCBgbmZ0X3JlamVjdF9pbmV0X2V2YWxgLCBgbmZ0X21ldGFfZ2V0X2V2YWxgLCBgbmZ0X3J0X2dldF9ldmFsYCwgYG5mdF94ZnJtX2dldF9ldmFsYCwgYG5mdF9jb25ubGltaXRfZXZhbGAsIGFuZCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBUaGUgZ29hbCwgYXMgYWx3YXlzLCBpcyB0byBtYXAgdGhlc2Uga2VybmVsIHN5bWJvbHMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBLY29uZmlnIG9wdGlvbnMuCgpGaXJzdCBwYXNzOiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBzZWVtcyB0byBiZSBsaW5rZWQgdG8gYE5GX0ZMT1dfVEFCTEVgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiBgbmZ0X3JlamVjdF9pcHY0X2V2YWxgIGFuZCBgbmZ0X3JlamVjdF9pcHY2X2V2YWxgIG1hcCBkaXJlY3RseSB0byBgTkZUX1JFSkVDVF9JUFY0YCBhbmQgYE5GVF9SRUpFQ1RfSVBWNmAgcmVzcGVjdGl2ZWx5LCBhbmQgYG5mdF9yZWplY3RfaW5ldF9ldmFsYCBjb3JyZXNwb25kcyB0byBgTkZUX1JFSkVDVF9JTkVUYCAtIHN0YW5kYXJkLgoKTm93LCB0aGluZ3MgZ2V0IGEgbGl0dGxlIGludGVyZXN0aW5nIHdpdGggYG5mdF9tZXRhX2dldF9ldmFsYC4gV2FpdCwgaXNuJiMzOTt0IHRoYXQgZnVuY3Rpb25hbGl0eSBwcmV0dHkgZnVuZGFtZW50YWw/IEkmIzM5O20gYWxtb3N0IGNlcnRhaW4gYE5GVF9NRVRBYCBpcyBidWlsdC1pbi4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIG5mX3RhYmxlcyBjb2RlIGFuZCBLY29uZmlnIHRvIGJlIGFic29sdXRlbHkgc3VyZSwganVzdCB0byBiZSB0aG9yb3VnaC4KClNpbWlsYXJseSwgSSBuZWVkIHRvIHZlcmlmeSBgbmZ0X3J0X2dldF9ldmFsYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGVudHJ5IGZvciBgTkZUX1JUYCB0byBjb25maXJtIHRoYXQuIEdvdHRhIGJlIHByZWNpc2UuCgpgbmZ0X3hmcm1fZ2V0X2V2YWxgIG1hcHMgdG8gYE5GVF9YRlJNYCBhbmQgYG5mdF9jb25ubGltaXRfZXZhbGAgdG8gYE5GVF9DT05OTElNSVRgIHdoaWNoIHNlZW0gc3RyYWlnaHRmb3J3YXJkLiBGaW5hbGx5LCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgIGFwcGVhcnMgdG8gZGVwZW5kIG9uIGBORl9DT05OVFJBQ0tgLiBBbGwgb2YgdGhlc2UgbG9vayBzb2xpZCBidXQgYSBxdWljayBkb3VibGUgY2hlY2sgaXMgYWx3YXlzIHNtYXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZUXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDgwPWNvbmZpZyBORl9UQUJMRVNfTkVUREVWXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODU6Y29uZmlnIE5GVF9OVU1HRU5cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODYtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0OTE6Y29uZmlnIE5GVF9DVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5Mi1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0OTg6Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5OS1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBleHRoZHIgRENDUCBzdXBwb3J0IChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjUxMTpjb25maWcgTkZUX0NPTk5MSU1JVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgY29ubmxpbWl0IG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MTktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTIwOmNvbmZpZyBORlRfTE9HXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTIxLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBsb2cgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUyNS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MjY6Y29uZmlnIE5GVF9MSU1JVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUyNy1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbGltaXQgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUzMS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MzI6Y29uZmlnIE5GVF9NQVNRXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMzLVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTQwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjU0MTpjb25maWcgTkZUX1JFRElSXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTQyLVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTQ5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjU1MDpjb25maWcgTkZUX05BVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1MS1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1OC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NTk6Y29uZmlnIE5GVF9UVU5ORUxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NjAtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIHR1bm5lbCBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTY0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjU2NTpjb25maWcgTkZUX1FVRVVFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTY2LVx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19RVUVVRVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NzEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTcyOmNvbmZpZyBORlRfUVVPVEFcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NzMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIHF1b3RhIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NzctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTc4OmNvbmZpZyBORlRfUkVKRUNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTc5LVx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTU4NS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1ODY6Y29uZmlnIE5GVF9SRUpFQ1RfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU4Ny1cdGRlcGVuZHMgb24gTkZfVEFCTEVTX0lORVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTkwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjU5MTpjb25maWcgTkZUX0NPTVBBVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU5Mi1cdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTk4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjU5OTpjb25maWcgTkZUX0hBU0hcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDAtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGhhc2ggbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTYwNC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2MDU6Y29uZmlnIE5GVF9GSUJcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDYtXHR0cmlzdGF0ZVxubmV0L25ldGZpbHRlci9LY29uZmlnLTYwNy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2MDg6Y29uZmlnIE5GVF9GSUJfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYwOS1cdGRlcGVuZHMgb24gTkZfVEFCTEVTX0lORVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjE3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjYxODpjb25maWcgTkZUX1hGUk1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MTktXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIHhmcm0vSVBTZWMgc2VjdXJpdHkgYXNzb2NpYXRpb24gbWF0Y2hpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjYyNTpjb25maWcgTkZUX1NPQ0tFVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYyNi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgc29ja2V0IG1hdGNoIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjMyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjYzMzpjb25maWcgTkZUX09TRlxubmV0L25ldGZpbHRlci9LY29uZmlnLTYzNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgcGFzc2l2ZSBPUyBmaW5nZXJwcmludCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTYzOS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDA6Y29uZmlnIE5GVF9UUFJPWFlcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDEtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIHRwcm94eSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0OC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDk6Y29uZmlnIE5GVF9TWU5QUk9YWVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY1MC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgU1lOUFJPWFkgZXhwcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY2Mj1jb25maWcgTkZfRFVQX05FVERFVlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjY4OmNvbmZpZyBORlRfRFVQX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2OS1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY3My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NzQ6Y29uZmlnIE5GVF9GV0RfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjc1LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgcGFja2V0IGZvcndhcmRpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NzktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjgwOmNvbmZpZyBORlRfRklCX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTY4MS1cdGRlcGVuZHMgb24gTkZUX0ZJQl9JUFY0XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY4OC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2ODk6Y29uZmlnIE5GVF9SRUpFQ1RfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjkwLVx0ZGVwZW5kcyBvbiBORlRfUkVKRUNUX0lQVjRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBMYW5kc2NhcGUqKgoKSG1tLCBzb21ldGhpbmcgZG9lc24mIzM5O3QgZmVlbCBxdWl0ZSByaWdodC4gSSB3YXMgZXhwZWN0aW5nIGBORlRfTUVUQWAgYW5kIGBORlRfUlRgIHRvIGJlIHByZXNlbnQgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIGJ1dCBJJiMzOTttIGRyYXdpbmcgYSBibGFuay4gVGhhdCBzZWVtcyBvZGQsIGdpdmVuIHRoZWlyIHJvbGVzLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiBUaGUgS2NvbmZpZyBmaWxlcyB1c3VhbGx5IGRpY3RhdGUgdGhlIG9wdGlvbnMgd2UgaGF2ZSBhdmFpbGFibGUuIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIHNoaWZ0IG15IGZvY3VzLiBMZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgTWFrZWZpbGUgd2l0aGluIHRoZSBgbmV0L25ldGZpbHRlcmAgZGlyZWN0b3J5IHRvIHNlZSBob3cgdGhvc2Ugc3ltYm9scyBhcmUgYWN0dWFsbHkgaW5jbHVkZWQuIFRoZSBNYWtlZmlsZSBpcyB3aGVyZSB0aGUgYnVpbGQgcHJvY2VzcyBpcyBkZWZpbmVkLiBJdCBzaG91bGQgb2ZmZXIgY2x1ZXMgYXMgdG8gaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIGNvbmZpZ3VyZWQsIHdoaWNoIG1heSBleHBsYWluIHRoZWlyIGFic2VuY2UgaW4gS2NvbmZpZy4gSXQmIzM5O3MgdGltZSB0byBmb2xsb3cgdGhlIGJ1aWxkIHJlY2lwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X21ldGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OS1cdFx0ICBuZnRfYml0d2lzZS5vIG5mdF9ieXRlb3JkZXIubyBuZnRfcGF5bG9hZC5vIG5mdF9sb29rdXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo5MDpcdFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MS1cdFx0ICBuZnRfY291bnRlci5vIG5mdF9vYmpyZWYubyBuZnRfaW5uZXIubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzU0MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipRdWljayBORl9UQUJMRVMgUmVmcmVzaGVyKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgbmZfdGFibGVzYCBzdWJzeXN0ZW0sIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgd2hpY2ggbW9kdWxlcyBhcmUgcmVxdWlyZWQuIEkgc2VlIHRoYXQgYG5mdF9tZXRhYCBhbmQgYG5mdF9ydGAgYXJlIGZ1bmRhbWVudGFsIGNvbXBvbmVudHMsIGNvcmUgdG8gYG5mX3RhYmxlc2AuIFRoYXQgbWVhbnMsIGFuZCB0aGlzIHNlZW1zIGxvZ2ljYWwsIGBORl9UQUJMRVNgIGl0c2VsZiBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEkgc2hvdWxkIGNoZWNrLCB0aG91Z2gsIGFib3V0IHRoZXNlIHNwZWNpZmljIG1vZHVsZXM6IGBORlRfUkVKRUNUX0lQVjRgIGFuZCBgTkZUX1JFSkVDVF9JUFY2YC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcywgdGhleSBzZWVtIGxlc3MgY29yZSBidXQgc3RpbGwgcXVpdGUgaW1wb3J0YW50IGluIG1hbnkgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfUkVKRUNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9NDA9aWYgTkZfVEFCTEVTX0lQVjRcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTQxLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NDI6Y29uZmlnIE5GVF9SRUpFQ1RfSVBWNFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNDMtXHRzZWxlY3QgTkZfUkVKRUNUX0lQVjRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4OTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHNlZW1pbmdseSBzaW1wbGUgc3RhdGVtZW50LCBjcmFmdGVkIGFzIHRob3VnaCBpdCYjMzk7cyBhIGRpcmVjdCByZWZsZWN0aW9uIG9mIG15IG93biBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIGRldmVsb3BtZW50OgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IEEgS2NvbmZpZyBSZXZlbGF0aW9uKioKCkFscmlnaHQsICYjMzQ7QW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AmIzM0Oy4uLiB0aGF0JiMzOTtzIGludHJpZ3VpbmcuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgcG9pbnRlciwgYSBicmVhZGNydW1iIHRyYWlsLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBpbXBsaWNhdGlvbjogd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgSVB2Ni1zcGVjaWZpYyBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbi4gJiMzNDtBbmQmIzM0OyBpbXBsaWVzIGEgY29udGludWF0aW9uLCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgdG9waWMgYXQgaGFuZC4gSXQgc3VnZ2VzdHMgZnVydGhlciBkZXRhaWxzIG9yIHBlcmhhcHMgYSBkaWZmZXJlbnQgcGVyc3BlY3RpdmUgYXJlIGFib3V0IHRvIGJlIGludHJvZHVjZWQuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlbHZpbmcgaW50byB0aGUgcmVhbG0gb2YgbmV0d29yayBwYWNrZXQgZmlsdGVyaW5nIHdpdGhpbiB0aGUgSVB2NiBwcm90b2NvbCBzdGFjay4gVGhlIGZhY3QgaXQgaXMgdGhlIEtjb25maWcgaGludHMgdGhhdCB3ZSBhcmUgZGVhbGluZyB3aXRoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIElQdjYgbmV0ZmlsdGVyLiBJdCByZW1pbmRzIG1lIG9mIHRoZSBpbXBvcnRhbmNlIG9mIG1vZHVsYXJpdHkgaW4gdGhlIGtlcm5lbC4gVGhpcyBwYXJ0aWN1bGFyIEtjb25maWcgZmlsZSBpcyB3aGVyZSB0aGUgc2V0dGluZ3MgdGhhdCBkZXRlcm1pbmUgd2hpY2ggbmV0ZmlsdGVyIG1vZHVsZXMgYXJlIGNvbXBpbGVkIGludG8gdGhlIElQdjYgbmV0d29yayBzdGFjayBhcmUuIFRoaXMgaW5mb3JtYXRpb24gaGFzIGxpa2VseSBjb21lIHVwIGluIGRpc2N1c3Npb25zIGFib3V0IGNvbmZpZ3VyaW5nIG9yIGRlYnVnZ2luZyBJUHY2IGZpcmV3YWxsIGJlaGF2aW9yLCBvciBwZXJoYXBzIGR1cmluZyBhbiBvdmVydmlldyBvZiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc2VjdXJpdHkgZmVhdHVyZXMuIEl0JiMzOTtzIG5vdyB0aW1lIHRvIGV4cGxvcmUgdGhpcyBzcGVjaWZpYyBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZUX1JFSkVDVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTM2PWlmIE5GX1RBQkxFU19JUFY2XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0zNy1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjM4OmNvbmZpZyBORlRfUkVKRUNUX0lQVjZcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTM5LVx0c2VsZWN0IE5GX1JFSkVDVF9JUFY2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzAwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBmb3IgT3B0aW1hbCBQZXJmb3JtYW5jZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMgZmxvdyB0YWJsZSBzZXR1cC4gU2VlbXMgbGlrZSB3ZSBuZWVkIGBORl9UQUJMRVNgLCBgTkZfRkxPV19UQUJMRWAsIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAgYXMgdGhlIGNvcmUgY29tcG9uZW50cywgbmF0dXJhbGx5LiBUaGVuLCBmb3IgdGhlIHJlamVjdCBmdW5jdGlvbmFsaXR5LCB3ZSBoYXZlIGBORlRfUkVKRUNUX0lQVjRgLCBgTkZUX1JFSkVDVF9JUFY2YCwgYW5kIGBORlRfUkVKRUNUX0lORVRgLiBGaW5hbGx5LCBgTkZUX1hGUk1gLCBgTkZUX0NPTk5MSU1JVGAsIGFuZCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBiaXRzIHdpdGggYE5GX0NPTk5UUkFDS2AgYXJlIGluIHRoZSBtaXggYXMgd2VsbC4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gdGhhdCBgTkZUX1JFSkVDVF9JTkVUYCBpcyBhY3R1YWxseSBkZWZpbmVkIGluIHRoZSBLY29uZmlnIOKAkyB5ZXAsIGl0JiMzOTtzIHRoZXJlIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBHb29kLiBOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gU2VlbXMgYE5GX1JFSkVDVF9JUFY0YCBhbmQgYE5GX1JFSkVDVF9JUFY2YCBhcmUgZGlyZWN0bHkgc2VsZWN0ZWQgYnkgYE5GVF9SRUpFQ1RfSVBWNGAgYW5kIGBORlRfUkVKRUNUX0lQVjZgLgoKQWgsIGJ1dCBob2xkIG9uLi4uIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYG5mX3JlamVjdF9pcHY0LmNgIGFuZCBgbmZfcmVqZWN0X2lwdjYuY2AuIFRoZXNlIGFyZSBidWlsdCB3aGVuIGBORl9SRUpFQ1RfSVBWNGAgYW5kIGBORl9SRUpFQ1RfSVBWNmAgYXJlIGV4cGxpY2l0bHkgZW5hYmxlZCwgYW5kIHRoZXNlLCBpbiB0dXJuLCBhcmUgc2VsZWN0ZWQgYnkgdGhlIGBORlRfUkVKRUNUXypgIG9wdGlvbnMgYW5kIGFsc28gYElQX05GX1RBUkdFVF9SRUpFQ1RgIGFuZCBgSVA2X05GX1RBUkdFVF9SRUpFQ1RgIC4gVGhpcyBtZWFucyB0aGF0IGVuYWJsaW5nIGBORlRfUkVKRUNUX0lQVjRgIGFuZCBgTkZUX1JFSkVDVF9JUFY2YCBpcyBzdWZmaWNpZW50IGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoYXQmIzM5O3MgZ29vZCwga2VlcHMgdGhpbmdzIGNsZWFuZXIuCgpOb3csIGZvY3VzaW5nIG9uIGNvbm5lY3Rpb24gdHJhY2tpbmcsIHdlIGhhdmUgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9DT05OQ09VTlRgIHdpdGggdXMuIGBORlRfQ09OTkxJTUlUYCBzZWxlY3RzIGBORl9DT05OQ09VTlRgLCBtYWtpbmcgdGhhdCBhIGxvZ2ljYWwgZGVwZW5kZW5jeS4KCkZpbmFsbHksIGxldCYjMzk7cyBjb25zaWRlciB0aGUgJiMzNDtmb3J3YXJkIHBhdGgmIzM0OyBmdW5jdGlvbnMuIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGluIGBuZXQvY29yZS9kZXYuY2AsIHNvIGl0JiMzOTtzIGFsd2F5cyBpbmNsdWRlZC4gSG93ZXZlciwgYG5mdF9kZXZfZm9yd2FyZF9wYXRoYCBpcyBpbiBgbmZfZmxvd190YWJsZV9wYXRoLmNgLiBOZWVkIHRvIHF1aWNrbHkgcmV2aWV3IHdoZW4gYG5mX2Zsb3dfdGFibGVfcGF0aC5jYCBnZXRzIGJ1aWx0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX3BhdGgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQzPW5mX2Zsb3dfdGFibGUtb2Jqc1x0XHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ0Olx0XHRcdFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ1LVx0XHRcdFx0ICAgbmZfZmxvd190YWJsZV9vZmZsb2FkLm8gbmZfZmxvd190YWJsZV94ZHAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM2MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipEaXZpbmcgaW50byB0aGUgRmxvdyBUYWJsZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZXRoaW5nIHdpdGhpbiBgbmZfZmxvd190YWJsZWAuIEdpdmVuIG15IGJhY2tncm91bmQsIEkgdW5kZXJzdGFuZCB0aGlzIGlzIGJ1aWx0IHVzaW5nIGBORl9GTE9XX1RBQkxFYCwgd2hpY2ggaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgYmFzZSBzdHJ1Y3R1cmUuIE5vdywgSSB3YW50IHRvIHRyYWNlIGEgcGFydGljdWxhciBmdW5jdGlvbiBvciBwYXRoLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgZm9yd2FyZGluZyBwYXRoIGlzIGJ1aWx0LiBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIGBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoYC4gSSByZWNhbGwgdGhhdCBvbmUgYmVpbmcgcmVsYXRlZCB0byBlbmNhcHN1bGF0aW9uLiBJIGtub3cgdGhhdCBsaXZlcyBpbiBgbmV0L2lwdjQvaXBpcC5jYC4gVGhlIG5leHQgcXVlc3Rpb24gaXMgd2hlbiBpcyB0aGF0IGJ1aWx0PyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgb3JkZXIgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBpcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSAmIzQzOz0gaXBtcl9iYXNlLm9cbm5ldC9pcHY0L01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORVRfSVBJUCkgJiM0Mzs9IGlwaXAub1xubmV0L2lwdjQvTWFrZWZpbGUtMjYtZ3JlLXkgOj0gZ3JlX2RlbXV4Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk2OTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ29uc2lkZXJpbmcgSVAgVHVubmVsaW5nIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIHN5c3RlbSBuZWVkcyB0byBzdXBwb3J0IElQLWluLUlQIHR1bm5lbHMsIHNvIGVuYWJsaW5nIGBORVRfSVBJUGAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgbW92ZS4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBJUHY2IHR1bm5lbGluZy4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIEkgbmVlZCB0byBjb25zaWRlciBpcyBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAsIHdoaWNoLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIHJlc2lkZXMgd2l0aGluIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHR1bm5lbCBmb3J3YXJkaW5nIHBhdGggaXMgY29ycmVjdGx5IGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkIGZvciBJUHY2IHR1bm5lbHMuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGNydWNpYWwgZm9yIHNldHRpbmcgdXAgdGhlIGVuY2Fwc3VsYXRpb24gYW5kIGRlY2Fwc3VsYXRpb24gbG9naWMsIGVzcGVjaWFsbHkgYXJvdW5kIGhlYWRlciBtYW5pcHVsYXRpb24gYW5kIHJvdXRlIGxvb2t1cHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpdGggdGhlIHR1bm5lbCBkcml2ZXIgYW5kIHRoZSBJUHY2IHN0YWNrLiBHaXZlbiB0aGF0IGl0IHJlc2lkZXMgaW4gdGhlIElQdjYgdHVubmVsIGNvZGUsIGl0IGNsZWFybHkgcGxheXMgYSBrZXkgcm9sZSBpbiBtYWtpbmcgc3VyZSBJUHY2IHRyYWZmaWMgaXMgY29ycmVjdGx5IHJvdXRlZCB0aHJvdWdoIHRoZXNlIHR1bm5lbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl90dW5uZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT00MT1vYmotJChDT05GSUdfSVBWNl9TSVQpICYjNDM7PSBzaXQub1xubmV0L2lwdjYvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSAmIzQzOz0gaXA2X3R1bm5lbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZS00My1vYmotJChDT05GSUdfSVBWNl9HUkUpICYjNDM7PSBpcDZfZ3JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwODYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZGlzdGlsbGVkIGludG8gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkNvbnNpZGVyaW5nIElQdjYgVHVubmVsaW5nIGFuZCBEYXRhIFN0cnVjdHVyZSBBbGlnbm1lbnQqKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBJUFY2X1RVTk5FTGAgbmVlZHMgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGFjY291bnRlZCBmb3IuIE5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gbG9vayBhdCBob3cgZm9yd2FyZCBwYXRocyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBgZHNhX3VzZXJfZmlsbF9mb3J3YXJkX3BhdGhgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHByb2JhYmx5IHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBmb3IgdGhpcy4gSSBrbm93IGl0JiMzOTtzIGxvY2F0ZWQgaW4gYG5ldC9kc2EvdXNlci5jYC4KClRoZSBuZXh0IHF1ZXN0aW9uIEkgaGF2ZSBpcywgYXQgd2hhdCBwb2ludCBpcyBgbmV0L2RzYS91c2VyLmNgIGV2ZW4gYnVpbHQgaW50byB0aGUga2VybmVsPyBUaGlzIHF1ZXN0aW9uIG5lZWRzIGFuc3dlcmluZyB0byBlbnN1cmUgdGhhdCB3aGF0ZXZlciBpcyByZXF1aXJlZCBpcyBhbHNvIGJlaW5nIGNvbXBpbGVkIHdoZW4gaXQgbmVlZHMgdG8gYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZHNhL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kc2EvTWFrZWZpbGU9MTA9ZHNhX2NvcmUteSAmIzQzOz0gXFxcbi0tXG5uZXQvZHNhL01ha2VmaWxlLTE5LVx0dHJhY2UubyBcXFxubmV0L2RzYS9NYWtlZmlsZToyMDpcdHVzZXIub1xubmV0L2RzYS9NYWtlZmlsZS0yMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0MjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRFNBIENvcmUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmcm9tIGEgYGRzYV9jb3JlYCBwZXJzcGVjdGl2ZSwgd2hpY2ggaXMgYnVpbHQgb24gYE5FVF9EU0FgLiBUaGUgY29yZSBoZXJlIGlzIHdoYXQgbWF0dGVyczsgdGhvc2UgaGFyZHdhcmUtc3BlY2lmaWMgZnVuY3Rpb25zLCBgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvYCBhbmQgYG10a19mbG93X2dldF93ZG1hX2luZm9gLCBmb3VuZCBpbiBgYWlyb2hhX3BwZS5jYCBhbmQgYG10a19wcGVfb2ZmbG9hZC5jYCByZXNwZWN0aXZlbHksIGFyZSBwcm9iYWJseSBpcnJlbGV2YW50IGluIGEgUUVNVSBlbnZpcm9ubWVudCwgYW5kIGl0IGlzIHRoZSBjb3JlIHRoYXQgbWF0dGVycy4gSSBjYW4gaWdub3JlIGVuYWJsaW5nIHRob3NlIHNwZWNpZmljIGRyaXZlcnMgYmVjYXVzZSB0aGUgaGVhcnQgb2YgaXQgaXMgdGhlIGNvcmUgY2hhbmdlcy4KClRoZXJlZm9yZSwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgYXJlOiBgTkZfVEFCTEVTYCwgYE5GX0ZMT1dfVEFCTEVgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORlRfUkVKRUNUX0lQVjRgLCBgTkZUX1JFSkVDVF9JUFY2YCwgYE5GVF9SRUpFQ1RfSU5FVGAsIGBORlRfWEZSTWAsIGBORlRfQ09OTkxJTUlUYCwgYE5GX0NPTk5UUkFDS2AsIGBORVRfSVBJUGAsIGBJUFY2X1RVTk5FTGAsIGFuZCBgTkVUX0RTQWAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIGBORlRfRkxPV19PRkZMT0FEYCByZWxpZXMgb24gYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9GTE9XX1RBQkxFYCwgc28gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQgdG9vLiBBbmQgSSBzZWUgdGhhdCBgTkZUX1JFSkVDVF9JTkVUYCBkZXBlbmRzIG9uIGBORl9UQUJMRVNfSU5FVGAgYXMgd2VsbCwgc28gdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfVEFCTEVTX0lORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVx0ZGVwZW5kcyBvbiBJUFY2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMTY5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQ2hlY2tpbmcgRGVwZW5kZW5jaWVzIGZvciBOZXR3b3JrIEZ1bmN0aW9uYWxpdHkqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgYE5GX1RBQkxFU19JTkVUYCBuZWVkcyB0byBiZSBlbmFibGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgdW5kZXJzdG9vZCwgYW5kIHdlJiMzOTtsbCBrZWVwIHRoYXQgYXMgb3VyIGJhc2UuCgpOb3csIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGF0IGBORlRfWEZSTWAgZG9lc24mIzM5O3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBpbnRlcmRlcGVuZGVuY2llcyB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBGaXJzdCwgaXQgcmVxdWlyZXMgYE5GX1RBQkxFU2AgaXRzZWxmLCB3aGljaCBtYWtlcyBzZW5zZS4gV2Uga25vdyB0aGF0IGBORl9UQUJMRVNgIGhhcyBgTkZfVEFCTEVTX0lORVRgIGFzIGEgY29tcG9uZW50LCBzbyB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4gV2hhdCBhYm91dCBgWEZSTWA/IExldCYjMzk7cyBxdWlja2x5IHZlcmlmeSB0aGF0IGBYRlJNYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cyB0aGF0IHdlIHNob3VsZCBiZSBjb25zaWRlcmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9YRlJNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz02MDg9Y29uZmlnIE5GVF9GSUJfSU5FVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MTctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjE4OmNvbmZpZyBORlRfWEZSTVxubmV0L25ldGZpbHRlci9LY29uZmlnLTYxOS1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgeGZybS9JUFNlYyBzZWN1cml0eSBhc3NvY2lhdGlvbiBtYXRjaGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU0MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZTogTkZUX1JFSkVDVF9JUFY0KioKClJpZ2h0LCBzbyB0aGlzIGNvZGUgc2VjdGlvbiBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGF0IGZpcnN0IGdsYW5jZS4gSXQmIzM5O3MgdHVja2VkIGluc2lkZSBhbiBgaWYgTkZfVEFCTEVTYCBibG9jaywgc28gY2xlYXJseSwgdGhhdCYjMzk7cyB0aGUgcHJpbWFyeSwgYW5kIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGUgKm9ubHkqIGV4cGxpY2l0IGRlcGVuZGVuY3kuIEJ1dCB0aGVuLCBpdCBkYXducyBvbiBtZSwgYFhGUk1gIGlzIHN1Y2ggYSBmdW5kYW1lbnRhbCBuZXR3b3JraW5nIGNvbXBvbmVudDsgaXQmIzM5O3MgcHJhY3RpY2FsbHkgYWx3YXlzIGNvbXBpbGVkIGluLiBJdCB3b3VsZCBiZSBhIHNpbGx5IG92ZXJzaWdodCB0byBtaXNzIGlmIGBORlRfUkVKRUNUX0lQVjRgIHJlbGllcyBvbiBpdC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIGBORlRfUkVKRUNUX0lQVjRgJiMzOTtzIGNvbmZpZyBvcHRpb25zLiBBaCwgdGhlcmUgaXQgaXMuIENvbmZpcm1lZC4gSXQgZGlyZWN0bHkgZGVwZW5kcyBvbiBgTkZfVEFCTEVTX0lQVjRgLiBUaGF0JiMzOTtzIG5vdCBlbnRpcmVseSB1bmV4cGVjdGVkLCBnaXZlbiB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX1RBQkxFU19JUFY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MzM9aWYgTkZfVEFCTEVTXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zNC1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjM1OmNvbmZpZyBORl9UQUJMRVNfSVBWNFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzYtXHRib29sIFwmIzM0O0lQdjQgbmZfdGFibGVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5NjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBrZXJuZWwgbW9kdWxlIGNvbmZpZ3VyYXRpb24sIGZvY3VzaW5nIG9uIHRoZSBlc3NlbnRpYWwgYG5mdGFibGVzYCBjb21wb25lbnRzOgoKKipNeSBLZXJuZWwgTW9kdWxlIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBnZXR0aW5nIHRoaXMgc3lzdGVtIHVwIHRvIHNudWZmIHdpdGggYG5mdGFibGVzYC4gVG8gbWFrZSBzdXJlIGl0JiMzOTtzIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkLCBJICphYnNvbHV0ZWx5KiBuZWVkIHRvIGVuYWJsZSBgTkZfVEFCTEVTX0lQVjRgLiBUaGF0JiMzOTtzIGEgbm8tYnJhaW5lciwgZnVuZGFtZW50YWwgZm9yIGhhbmRsaW5nIElQdjQgdHJhZmZpYyB3aXRoIG5mdGFibGVzLiBBbmQgaWYgSSB3YW50IHRvIGdldCB0aGUgSVB2NiByZWplY3RzIGRvbmUgaW4gYG5mdGFibGVzYCwgSSBhbHNvIG5lZWQgYE5GX1RBQkxFU19JUFY2YC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gIEkgbmVlZCB0byBjb25maWd1cmUgYm90aCB0byBnZXQgZXZlcnl0aGluZyB3b3JraW5nIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfVEFCTEVTX0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0yOT1pZiBORl9UQUJMRVNcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTMwLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MzE6Y29uZmlnIE5GX1RBQkxFU19JUFY2XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NiBuZl90YWJsZXMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjI3NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZXZpZXcgYSBzZXQgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIG5ldHdvcmtpbmcgdGFzay4gRmlyc3QsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGZ1bmRhbWVudGFsIE5ldGZpbHRlciBhbmQgbmZ0YWJsZXMgY29tcG9uZW50cywgc3BlY2lmaWNhbGx5IGBORl9UQUJMRVNgLCBgTkZfVEFCTEVTX0lQVjRgLCBgTkZfVEFCTEVTX0lQVjZgLCBhbmQgdGhlIGNvbWJpbmVkIGBORl9UQUJMRVNfSU5FVGAuIFRoZXNlIGFyZSwgb2YgY291cnNlLCBhYnNvbHV0ZWx5IGNydWNpYWwgdG8gYWxtb3N0IGFueSBtb2Rlcm4gbmV0d29yayBzZXR1cCB1c2luZyBuZnRhYmxlcy4gVGhlbiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZmxvdyBvZmZsb2FkIGNvbmZpZ3VyYXRpb25zOyBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCBhbmQgdGhlIHJlamVjdCBjb25maWd1cmF0aW9uczsgYE5GVF9SRUpFQ1RfSVBWNGAsIGBORlRfUkVKRUNUX0lQVjZgLCBhbmQgYE5GVF9SRUpFQ1RfSU5FVGAuCgpJJiMzOTtsbCBhbHNvIGtlZXAgaW4gbWluZCByZWxhdGVkIG9wdGlvbnMgbGlrZSBgTkZUX1hGUk1gIGZvciB0cmFuc3BvcnQgbGF5ZXIgc2VjdXJpdHkgYW5kIGVuY2Fwc3VsYXRpb24sIGFuZCB0aGUgYE5GVF9DT05OTElNSVRgIG1vZHVsZSBmb3IgY29ubmVjdGlvbiBsaW1pdGluZywgc2hvdWxkIEkgbmVlZCB0aGVtLiBXZSBjYW4mIzM5O3QgZm9yZ2V0IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHBpZWNlLCBgTkZfQ09OTlRSQUNLYC4gVGhlbiwgdGhlcmUmIzM5O3MgdGhlIG1vcmUgZ2VuZXJhbCBuZXR3b3JraW5nIG9wdGlvbnMgbGlrZSBgTkVUX0lQSVBgIGFuZCBgSVBWNl9UVU5ORUxgIHRvIGNvbnNpZGVyLgoKTm93LCBhIGJpdCBvZiBhIHNhbml0eSBjaGVjayBpcyBuZWVkZWQgb24gdGhpcyBsYXN0IG9uZSDigJMgYE5FVF9EU0FgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gcHJldHR5IHN1cmUgaXQgZGVwZW5kcyBvbiBhIGZldyB0aGluZ3MuIEJlc3QgdG8gZW5zdXJlIGFsbCB0aGUgcHJlcmVxdWlzaXRlcyBhcmUgbWV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0RTQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kc2EvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL0tjb25maWctMi1cbm5ldC9kc2EvS2NvbmZpZzozOm1lbnVjb25maWcgTkVUX0RTQVxubmV0L2RzYS9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnPTE3PWlmIE5FVF9EU0Fcbi0tXG5uZXQvZHNhL0tjb25maWctMjAtXG5uZXQvZHNhL0tjb25maWc6MjE6Y29uZmlnIE5FVF9EU0FfVEFHX05PTkVcbm5ldC9kc2EvS2NvbmZpZy0yMi1cdHRyaXN0YXRlIFwmIzM0O05vLW9wIHRhZyBkcml2ZXJcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMjYtXG5uZXQvZHNhL0tjb25maWc6Mjc6Y29uZmlnIE5FVF9EU0FfVEFHX0FSOTMzMVxubmV0L2RzYS9LY29uZmlnLTI4LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgQXRoZXJvcyBBUjkzMzEgU29DIHdpdGggYnVpbHQtaW4gc3dpdGNoXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTMyLVxubmV0L2RzYS9LY29uZmlnOjMzOmNvbmZpZyBORVRfRFNBX1RBR19CUkNNX0NPTU1PTlxubmV0L2RzYS9LY29uZmlnLTM0LVx0dHJpc3RhdGVcbi0tXG5uZXQvZHNhL0tjb25maWctMzYtXG5uZXQvZHNhL0tjb25maWc6Mzc6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01cbm5ldC9kc2EvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIEJyb2FkY29tIHN3aXRjaGVzIHVzaW5nIGluLWZyYW1lIGhlYWRlcnNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctNDMtXG5uZXQvZHNhL0tjb25maWc6NDQ6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fTEVHQUNZXG5uZXQvZHNhL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBCQ002M3h4IGxlZ2FjeSBzd2l0Y2hlcyB1c2luZyBpbi1mcmFtZSBoZWFkZXJzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTUzLVxubmV0L2RzYS9LY29uZmlnOjU0OmNvbmZpZyBORVRfRFNBX1RBR19CUkNNX0xFR0FDWV9GQ1Ncbm5ldC9kc2EvS2NvbmZpZy01NS1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIEJDTTUzeHggbGVnYWN5IHN3aXRjaGVzIHVzaW5nIGluLWZyYW1lIGhlYWRlcnNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctNjMtXG5uZXQvZHNhL0tjb25maWc6NjQ6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fUFJFUEVORFxubmV0L2RzYS9LY29uZmlnLTY1LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgQnJvYWRjb20gc3dpdGNoZXMgdXNpbmcgcHJlcGVuZGVkIGhlYWRlcnNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctNzEtXG5uZXQvZHNhL0tjb25maWc6NzI6Y29uZmlnIE5FVF9EU0FfVEFHX0hFTExDUkVFS1xubmV0L2RzYS9LY29uZmlnLTczLVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgSGlyc2NobWFubiBIZWxsY3JlZWsgVFNOIHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTc3LVxubmV0L2RzYS9LY29uZmlnOjc4OmNvbmZpZyBORVRfRFNBX1RBR19HU1dJUFxubmV0L2RzYS9LY29uZmlnLTc5LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTGFudGlxIC8gSW50ZWwgR1NXSVAgc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctODMtXG5uZXQvZHNhL0tjb25maWc6ODQ6Y29uZmlnIE5FVF9EU0FfVEFHX0RTQV9DT01NT05cbm5ldC9kc2EvS2NvbmZpZy04NS1cdHRyaXN0YXRlXG5uZXQvZHNhL0tjb25maWctODYtXG5uZXQvZHNhL0tjb25maWc6ODc6Y29uZmlnIE5FVF9EU0FfVEFHX0RTQVxubmV0L2RzYS9LY29uZmlnLTg4LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWFydmVsbCBzd2l0Y2hlcyB1c2luZyBEU0EgaGVhZGVyc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy05My1cbm5ldC9kc2EvS2NvbmZpZzo5NDpjb25maWcgTkVUX0RTQV9UQUdfRURTQVxubmV0L2RzYS9LY29uZmlnLTk1LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWFydmVsbCBzd2l0Y2hlcyB1c2luZyBFdGhlclR5cGUgRFNBIGhlYWRlcnNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTAwLVxubmV0L2RzYS9LY29uZmlnOjEwMTpjb25maWcgTkVUX0RTQV9UQUdfTVRLXG5uZXQvZHNhL0tjb25maWctMTAyLVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWVkaWF0ZWsgc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTA2LVxubmV0L2RzYS9LY29uZmlnOjEwNzpjb25maWcgTkVUX0RTQV9UQUdfTVhMXzg2MlhYXG5uZXQvZHNhL0tjb25maWctMTA4LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWF4TGluZWFyIE14TDg2Mnh4IHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTExMy1cbm5ldC9kc2EvS2NvbmZpZzoxMTQ6Y29uZmlnIE5FVF9EU0FfVEFHX01YTF9HU1cxWFhcbm5ldC9kc2EvS2NvbmZpZy0xMTUtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgR1NXMXh4IHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTEyMS1cbm5ldC9kc2EvS2NvbmZpZzoxMjI6Y29uZmlnIE5FVF9EU0FfVEFHX0tTWlxubmV0L2RzYS9LY29uZmlnLTEyMy1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE1pY3JvY2hpcCA4Nzk1LzkzN3gvOTQ3Ny85ODkzIGZhbWlsaWVzIG9mIHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTEyNy1cbm5ldC9kc2EvS2NvbmZpZzoxMjg6Y29uZmlnIE5FVF9EU0FfVEFHX05FVENcbm5ldC9kc2EvS2NvbmZpZy0xMjktXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBOWFAgTkVUQyBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xMzctXG5uZXQvZHNhL0tjb25maWc6MTM4OmNvbmZpZyBORVRfRFNBX1RBR19PQ0VMT1Rcbm5ldC9kc2EvS2NvbmZpZy0xMzktXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBPY2Vsb3QgZmFtaWx5IG9mIHN3aXRjaGVzLCB1c2luZyBOUEkgcG9ydFwmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xNDgtXG5uZXQvZHNhL0tjb25maWc6MTQ5OmNvbmZpZyBORVRfRFNBX1RBR19PQ0VMT1RfODAyMVFcbm5ldC9kc2EvS2NvbmZpZy0xNTAtXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBPY2Vsb3QgZmFtaWx5IG9mIHN3aXRjaGVzLCB1c2luZyBWTEFOXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE1OC1cbm5ldC9kc2EvS2NvbmZpZzoxNTk6Y29uZmlnIE5FVF9EU0FfVEFHX1FDQVxubmV0L2RzYS9LY29uZmlnLTE2MC1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIFF1YWxjb21tIEF0aGVyb3MgUUNBOEsgc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTY0LVxubmV0L2RzYS9LY29uZmlnOjE2NTpjb25maWcgTkVUX0RTQV9UQUdfUlRMNF9BXG5uZXQvZHNhL0tjb25maWctMTY2LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgUmVhbHRlayA0IGJ5dGUgcHJvdG9jb2wgQSB0YWdzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE3MS1cbm5ldC9kc2EvS2NvbmZpZzoxNzI6Y29uZmlnIE5FVF9EU0FfVEFHX1JUTDhfNFxubmV0L2RzYS9LY29uZmlnLTE3My1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIFJlYWx0ZWsgOCBieXRlIHByb3RvY29sIDQgdGFnc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xNzctXG5uZXQvZHNhL0tjb25maWc6MTc4OmNvbmZpZyBORVRfRFNBX1RBR19SWk4xX0E1UFNXXG5uZXQvZHNhL0tjb25maWctMTc5LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgUmVuZXNhcyBSWi9OMSBBNVBTVyBzd2l0Y2hcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMTg0LVxubmV0L2RzYS9LY29uZmlnOjE4NTpjb25maWcgTkVUX0RTQV9UQUdfTEFOOTMwM1xubmV0L2RzYS9LY29uZmlnLTE4Ni1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIFNNU0MvTWljcm9jaGlwIExBTjkzMDMgZmFtaWx5IG9mIHN3aXRjaGVzXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTE5MC1cbm5ldC9kc2EvS2NvbmZpZzoxOTE6Y29uZmlnIE5FVF9EU0FfVEFHX1NKQTExMDVcbm5ldC9kc2EvS2NvbmZpZy0xOTItXHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBOWFAgU0pBMTEwNSBzd2l0Y2hlc1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0xOTktXG5uZXQvZHNhL0tjb25maWc6MjAwOmNvbmZpZyBORVRfRFNBX1RBR19UUkFJTEVSXG5uZXQvZHNhL0tjb25maWctMjAxLVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3Igc3dpdGNoZXMgdXNpbmcgYSB0cmFpbGVyIHRhZ1wmIzM0O1xuLS1cbm5ldC9kc2EvS2NvbmZpZy0yMDUtXG5uZXQvZHNhL0tjb25maWc6MjA2OmNvbmZpZyBORVRfRFNBX1RBR19WU0M3M1hYXzgwMjFRXG5uZXQvZHNhL0tjb25maWctMjA3LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWljcm9jaGlwL1ZpdGVzc2UgVlNDNzN4eCBmYW1pbHkgb2Ygc3dpdGNoZXMsIHVzaW5nIFZMQU5cJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMjExLVxubmV0L2RzYS9LY29uZmlnOjIxMjpjb25maWcgTkVUX0RTQV9UQUdfWFJTNzAwWFxubmV0L2RzYS9LY29uZmlnLTIxMy1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIFhSUzcwMHggc3dpdGNoZXNcJiMzNDtcbi0tXG5uZXQvZHNhL0tjb25maWctMjE3LVxubmV0L2RzYS9LY29uZmlnOjIxODpjb25maWcgTkVUX0RTQV9UQUdfWVQ5MjFYXG5uZXQvZHNhL0tjb25maWctMjE5LVx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDgyOAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgYW5kIGEgRm9jdXNlZCBSZXZpZXcqKgoKT2theSwgYWZ0ZXIgdGhpbmtpbmcgYWJvdXQgdGhpcywgSSYjMzk7dmUgY29uY2x1ZGVkIHRoYXQgYE5FVF9EU0FgIGlzIHN1ZmZpY2llbnQgZm9yIG5vdy4gSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGUgbmVlZCB0byBnbyBmdXJ0aGVyIGRvd24gdGhhdCBwYXRoLgoKTGV0JiMzOTtzIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgcmVnYXJkaW5nIHRob3NlIGZvY3VzIHN5bWJvbHM6IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLCBgbmZ0X3JlamVjdF9pcHY0X2V2YWxgLCBgbmZ0X3JlamVjdF9pcHY2X2V2YWxgLCBgbmZ0X3JlamVjdF9pbmV0X2V2YWxgLCBgbmZ0X21ldGFfZ2V0X2V2YWxgLCBgbmZ0X3J0X2dldF9ldmFsYCwgYG5mdF94ZnJtX2dldF9ldmFsYCwgYG5mdF9jb25ubGltaXRfZXZhbGAsIGFuZCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBUaGVzZSBhcmUgdGhlIGtleSBhcmVhcyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZC4KCkhvbGQgb24gYSBtaW51dGUsIEkmIzM5O20ganVzdCByZWNhbGxpbmcgdGhhdCBgbmZ0X3JlamVjdF9pcHY0X2V2YWxgIGlzLCBpbiBmYWN0LCBzdGF0aWNhbGx5IGRlZmluZWQuIExldCBtZSBqdXN0IG9wZW4gdXAgYG5mdF9yZWplY3RfaXB2NC5jYCBhbmQgbWFrZSBzdXJlIG15IGluc3RpbmN0cyBhcmUgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3JlamVjdF9pcHY0X2V2YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jLTE4LVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jOjE5OnN0YXRpYyB2b2lkIG5mdF9yZWplY3RfaXB2NF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjQuYy0yMC1cdFx0XHRcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jPTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9yZWplY3RfaXB2NF9vcHMgPSB7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jLTQzLVx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3JlamVjdCkpLFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jOjQ0Olx0LmV2YWxcdFx0PSBuZnRfcmVqZWN0X2lwdjRfZXZhbCxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjQuYy00NS1cdC5pbml0XHRcdD0gbmZ0X3JlamVjdF9pbml0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTQ4OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgbmV0d29yayBmdW5jdGlvbnMuIFRoZSBpbml0aWFsIHRob3VnaHQgd2FzLCBldmVuIGlmIHNvbWV0aGluZyYjMzk7cyBzdGF0aWMsIHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGZpbmQgaXQgaWYgaXQgaXNuJiMzOTt0IGlubGluZWQsIHNvIGl0JiMzOTtzICpwb3RlbnRpYWxseSogdGFyZ2V0YWJsZS4gQnV0IGxldCYjMzk7cyByZWZpbmUgdGhpcyBhbmFseXNpcy4gCgpBaGEhIGBuZl9zZW5kX3Jlc2V0YCBhbmQgYG5mX3NlbmRfcmVzZXQ2YCBhcmUgYm90aCAqZXhwb3J0ZWQqIGFuZCAqbm9uLXN0YXRpYyouIEFuZCBzaW1pbGFybHksIGBuZl9zZW5kX3VucmVhY2hgIGFuZCBgbmZfc2VuZF91bnJlYWNoNmAgYXJlIGFsc28gZXhwb3J0ZWQuIFNvIHRoYXQmIzM5O3MgZ29vZCEgVGhhdCBtYWtlcyB0aGVtIGJldHRlciBjYW5kaWRhdGVzLCBhbmQgd29ydGggZm9jdXNpbmcgb24uIExldCYjMzk7cyBtYWtlIGEgbm90ZSBvZiB0aG9zZSBmb3VyIGFzIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciBmdXp6aW5nLgoKTm93LCB3aGF0IGFib3V0IHRoZSBgbmZ0YCBzdWJzeXN0ZW0/IExldCYjMzk7cyBjaGVjayBgbmZ0X21ldGFfZ2V0X2V2YWxgLi4uIHllcCwgZXhwb3J0ZWQuIFRoYXQgbG9va3MgcHJvbWlzaW5nLiBBbmQgYG5mdF9ydF9nZXRfZXZhbGAgaXMgYWxzbyBleHBvcnRlZC4gT2theS4gV2hhdCBhYm91dCBgbmZ0X3hmcm1fZ2V0X2V2YWxgPyBBaCwgaXQmIzM5O3Mgc3RhdGljLCBkYW1uLiBCdXQsIGhvbGQgb24uLi4gYG5mdF94ZnJtX2dldF9ldmFsX291dGAgaXMgYWxzbyBzdGF0aWMuIExldCYjMzk7cyBiYWNrdHJhY2ssIGl0JiMzOTtzICpzdGF0aWMqIGJ1dCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQ/IEkgc2VlIGBuZnRfeGZybV9nZXRfb3BzYCBpcyByZWdpc3RlcmVkLCBzbyBtYXliZSB0aGF0JiMzOTtzIGEgYmV0dGVyIHN0YXJ0aW5nIHBvaW50LgoKQW5kIGZpbmFsbHksIGxldCYjMzk7cyBsb29rIGF0IGBuZnRfY29ubmxpbWl0X2V2YWxgLCB0aGF0IG9uZSBpcyBzdGF0aWMuIEJ1dCwgd2FpdCwgYG5mX2Nvbm5jb3VudF9hZGRgIGlzIGV4cG9ydGVkLiBPa2F5LCBnb29kLiBTbyB0aGUgcGljdHVyZSYjMzk7cyBiZWNvbWluZyBjbGVhcmVyLiAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubmNvdW50X2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz0xMzA9c3RhdGljIGJvb2wgZ2V0X2N0X29yX3R1cGxlX2Zyb21fc2tiKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTE2OC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6MTY5OnN0YXRpYyBpbnQgX19uZl9jb25uY291bnRfYWRkKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMTcwLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0yNzctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jOjI3ODppbnQgbmZfY29ubmNvdW50X2FkZF9za2Ioc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0yNzktXHRcdFx0IGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0yODYtXHRzcGluX2xvY2tfYmgoXHUwMDI2bGlzdC1cdTAwM2VsaXN0X2xvY2spO1xubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYzoyODc6XHRyZXQgPSBfX25mX2Nvbm5jb3VudF9hZGQobmV0LCBza2IsIGwzbnVtLCBsaXN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMjg4LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bGlzdC1cdTAwM2VsaXN0X2xvY2spO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMjkxLX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6MjkyOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm5jb3VudF9hZGRfc2tiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMjkzLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM9NDAzPWluc2VydF90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTQzNy1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6NDM4Olx0XHRcdHJldCA9IG5mX2Nvbm5jb3VudF9hZGRfc2tiKG5ldCwgc2tiLCBsM251bSwgXHUwMDI2cmJjb25uLVx1MDAzZWxpc3QpO1xubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy00MzktXHRcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FRVhJU1QpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz01MzM9Y291bnRfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy01ODItXHQvKiBzYW1lIHNvdXJjZSBuZXR3b3JrIC1cdTAwM2UgYmUgY291bnRlZCEgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6NTgzOlx0cmV0ID0gX19uZl9jb25uY291bnRfYWRkKG5ldCwgc2tiLCBsM251bSwgXHUwMDI2cmJjb25uLVx1MDAzZWxpc3QpO1xubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy01ODQtXHRzcGluX3VubG9ja19iaChcdTAwMjZyYmNvbm4tXHUwMDNlbGlzdC5saXN0X2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjc5NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgZm9jdXNpbmcgb24gdGhlIGV4cG9ydGVkIHN5bWJvbHM6CgoqKlJlZmxlY3Rpbmcgb24gS2VybmVsIE1vZHVsZSBFeHBvcnRzKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYG5mX2Nvbm5jb3VudF9hZGRfc2tiYCBhbmQgYG5mX2Nvbm5jb3VudF9jb3VudGAgYXJlIGJvdGggYmVpbmcgZXhwb3J0ZWQuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYSBmZXcgdGhpbmdzLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGtlcm5lbCBtb2R1bGUgZGVzaWduIGFuZCBuZXRmaWx0ZXIuCgpGaXJzdCwgdGhlc2Ugc3ltYm9scyBhcmUgY2xlYXJseSBpbnRlbmRlZCB0byBiZSAqdXNlZCogYnkgb3RoZXIgbW9kdWxlcy4gVGhleSYjMzk7cmUgbm90IGludGVybmFsIGZ1bmN0aW9uczsgdGhleSYjMzk7cmUgbWVhbnQgZm9yIGludGVyYWN0aW9uLiBUaGUgbmFtaW5nIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZyBvciBjb25uZWN0aW9uIGNvdW50aW5nIOKAkyBsaWtlbHkgcGFydCBvZiBzb21lIHNvcnQgb2YgbmV0d29yayBmaXJld2FsbCBvciBtb25pdG9yaW5nIGZ1bmN0aW9uYWxpdHkuIFRoZSAmIzM0O25mJiMzNDsgcHJlZml4IGlzIGEgZGVhZCBnaXZlYXdheSBmb3IgbmV0ZmlsdGVyLgoKSSYjMzk7bSBhc3N1bWluZyBgbmZfY29ubmNvdW50X2FkZF9za2JgIGxpa2VseSBoYW5kbGVzIGFkZGluZyBvciB1cGRhdGluZyBpbmZvcm1hdGlvbiBhYm91dCBhIG5ldHdvcmsgcGFja2V0IChTS0IpIHJlbGF0ZWQgdG8gYSBwYXJ0aWN1bGFyIGNvbm5lY3Rpb24uIE1heWJlIHRoaXMgaW52b2x2ZXMgaW5jcmVtZW50aW5nIGNvdW50ZXJzIG9yIHN0b3JpbmcgY29ubmVjdGlvbiBkZXRhaWxzLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggbmV0ZmlsdGVyIGhvb2tzLCBpdCBjb3VsZCBiZSBjYWxsZWQgd2l0aGluIGFuIE5GIGhvb2sgZnVuY3Rpb24uCgpgbmZfY29ubmNvdW50X2NvdW50YCwgb24gdGhlIG90aGVyIGhhbmQsIGxpa2VseSBwcm92aWRlcyBhIHdheSB0byByZXRyaWV2ZSBvciBleHBvc2UgY29ubmVjdGlvbiBjb3VudCBkYXRhLiBDb3VsZCBiZSBmb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9yIHRvIGR5bmFtaWNhbGx5IGFkanVzdCBiZWhhdmlvciBiYXNlZCBvbiBjb25uZWN0aW9uIGxvYWQuIEl0IGNvdWxkIGJlIHVzZWQgdG8gZ2F0aGVyIHN0YXRpc3RpY3Mgb24gYSBjb25uZWN0aW9uLCBwZXJoYXBzIHRvIHRyYWNrIG51bWJlciBvZiBwYWNrZXRzIGFuZCBieXRlcy4KClRoZSBmYWN0IHRoYXQgdGhlc2UgYXJlIGV4cG9ydGVkIGltcGxpZXMgdGhhdCB0aGVyZSBpcyBhIHdlbGwtZGVmaW5lZCBpbnRlcmZhY2UgZm9yIGludGVyYWN0aW5nIHdpdGggdGhpcyAmIzM0O2Nvbm5jb3VudCYjMzQ7IGZ1bmN0aW9uYWxpdHkuIE5vdywgbXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIHJldmlldyB0aGUgYXNzb2NpYXRlZCBoZWFkZXIgZmlsZXMgYW5kIHNvdXJjZSBjb2RlIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlaXIgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQsIGNyaXRpY2FsbHksIHRoZWlyIGludGVuZGVkIHVzYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgb3BlcmF0ZSBvbiBhbmQgdGhlIHBvc3NpYmxlIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBjb25jZXJucyBpbnZvbHZlZC4gQXJlIHRoZXNlIGZ1bmN0aW9ucyB0aHJlYWQtc2FmZT8gRG8gdGhleSB1dGlsaXplIGFueSBpbnRlcm5hbCBtdXRleGVzPwoKVGhpcyBleHBvcnQgc3VnZ2VzdHMgdGhhdCB3aG9ldmVyIGRldmVsb3BlZCB0aGlzIG1vZHVsZSB3YXMgdGhpbmtpbmcgYWJvdXQgbW9kdWxhcml0eS4gVGhleSByZWNvZ25pemVkIHRoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBvciBldmVuIG90aGVyIG1vZHVsZXMgbWlnaHQgbmVlZCB0byBhY2Nlc3MgYW5kIHV0aWxpemUgdGhpcyBjb25uZWN0aW9uIGNvdW50aW5nIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBnb29kIHRoaW5nIOKAkyBnb29kIGNvZGUgZGVzaWduIHByb21vdGVzIHJldXNlIGFuZCBjb2xsYWJvcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGV5JiMzOTtyZSBkZXNpZ25lZCBmb3IgbW9kdWxhcml0eS4KClNvLCBpbiBzdW1tYXJ5OiBJJiMzOTttIHNlZWluZyBhIGNvbm5lY3Rpb24gY291bnQgbW9kdWxlIG9yIGZlYXR1cmUuIEkgbmVlZCB0byByZXNlYXJjaCBleGFjdGx5IGhvdyB0aG9zZSBtb2R1bGVzIGFyZSBkZXNpZ25lZCB0byBpbnRlZ3JhdGUgd2l0aCB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubmNvdW50X2NvdW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jPTU5NT1zdGF0aWMgdm9pZCB0cmVlX2djX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy02NjUtICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jOjY2Njp1bnNpZ25lZCBpbnQgbmZfY29ubmNvdW50X2NvdW50X3NrYihzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTY2Ny1cdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNjc0LX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6Njc1OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm5jb3VudF9jb3VudF9za2IpO1xubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy02NzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NTIyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQXNzZXNzbWVudCBvZiBLZXkgTmV0ZmlsdGVyIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0aGlua2luZyBhYm91dCB0aGUgY3JpdGljYWwgc3ltYm9scyB0byBmb2N1cyBvbiB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEkgc3RhcnRlZCBieSB6ZXJvaW5nIGluIG9uIGBuZl9jb25uY291bnRfYWRkX3NrYmAgYW5kIGBuZl9jb25uY291bnRfY291bnRfc2tiYCBhcyBnb29kIGluaXRpYWwgY2FuZGlkYXRlcy4gTm93LCBJJiMzOTt2ZSBleHBhbmRlZCB0aGUgc2NvcGUgYSBiaXQuCgpJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgYG5mdF9mbG93X3JvdXRlYCBiZWNhdXNlIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCBsb29rcyBpbXBvcnRhbnQuIEFuZCwgc2ltaWxhcmx5LCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBhbmQgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCBoYXZlIGNhdWdodCBteSBhdHRlbnRpb24gZm9yIGJlaW5nIGV4cG9ydGVkLgoKVGhlcmVmb3JlLCBteSBjdXJyZW50IHdvcmtpbmcgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGluY2x1ZGVzOgoKKiAgIGBuZnRfZmxvd19yb3V0ZWAKKiAgIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgCiogICBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VgCiogICBgbmZfc2VuZF9yZXNldGAKKiAgIGBuZl9zZW5kX3Jlc2V0NmAKKiAgIGBuZl9zZW5kX3VucmVhY2hgCiogICBgbmZfc2VuZF91bnJlYWNoNmAKKiAgIGBuZnRfbWV0YV9nZXRfZXZhbGAKKiAgIGBuZnRfcnRfZ2V0X2V2YWxgCiogICBgbmZfY29ubmNvdW50X2FkZF9za2JgCiogICBgbmZfY29ubmNvdW50X2NvdW50X3NrYmAKKiAgIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAKCkkgZG91YmxlLWNoZWNrZWQgZWFjaCBvbmUgdG8gYmUgc3VyZSB0aGV5IHdlcmUgZXhwb3J0ZWQsIGp1c3QgdG8gY29uZmlybSBteSBjdXJyZW50IHVuZGVyc3RhbmRpbmcuIFNvLCBgbmZ0X2Zsb3dfcm91dGVgIGFuZCB0aGUgYGRldl9maWxsX2ZvcndhcmRfcGF0aCpgIGZ1bmN0aW9ucyBhcmUgYWxsIGV4cG9ydGVkLiBBbHNvIHRoZSBgbmZfc2VuZF8qYCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLCBhbG9uZyB3aXRoIHRoZSBgbmZ0XypfZ2V0X2V2YWxgIGZ1bmN0aW9ucywgYW5kIG9mIGNvdXJzZSB0aGUgYG5mX2Nvbm5jb3VudF8qYCBmdW5jdGlvbnMuCgpJIGRpZCBydW4gaW50byBhIHNtYWxsIGFub21hbHkgd2l0aCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBXaGlsZSBpdCAqaXNuJiMzOTt0KiBleHBvcnRlZCwgaXQmIzM5O3Mgbm9uLXN0YXRpYyBhbmQgZGVmaW5lZCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYCwgd2hpY2ggbWFrZXMgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24sIGRlc3BpdGUgYmVpbmcgbm9uLWV4cG9ydGVkLgoKV2FpdC4uLiBzb21ldGhpbmcgc3RpbGwgc2VlbXMgYSBsaXR0bGUgb2ZmLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGBuZl9zZW5kX3VucmVhY2hgIGlzIGV4cG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTFxcKG5mX3NlbmRfdW5yZWFjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYz0zNDg9dm9pZCBuZl9zZW5kX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IGNvZGUsIGludCBob29rKVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTM2OC19XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzozNjk6RVhQT1JUX1NZTUJPTF9HUEwobmZfc2VuZF91bnJlYWNoKTtcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTM3MC1cbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYz00Mzg9dm9pZCBuZl9zZW5kX3VucmVhY2g2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYl9pbixcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy00NTEtfVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmM6NDUyOkVYUE9SVF9TWU1CT0xfR1BMKG5mX3NlbmRfdW5yZWFjaDYpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtNDUzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODgzNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIEkmIzM5O20gdGhpbmtpbmcgdGhlc2UgdGhpbmdzIG15c2VsZjoKCioqRXhwb3J0aW5nIE5GVHMgYW5kIEV2YWx1YXRpb24gUmV0cmlldmFsKioKCkFscmlnaHQsIHNvIHRoZSB0b3BpYyBhdCBoYW5kIGlzIHRoZSBleHBvcnQgcHJvY2VzcywgYW5kLCB5ZXMsIEkmIzM5O20gY29uZmlybWluZyB0aGF0IHRoZSByZWxldmFudCBpdGVtcyBhcmUgaW5kZWVkIGJlaW5nIGV4cG9ydGVkLiBOb3csIG15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBgbmZ0X3J0X2dldF9ldmFsYCBmdW5jdGlvbi4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIHJldHJpZXZpbmcgdGhlIGV2YWx1YXRpb24gcmVzdWx0cyByZXNpZGVzLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyB3b3JrcyBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhlIGV4cG9ydCBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHZhbHVlcyBhcmUgYWNxdWlyZWQgYW5kIGhvdyB0aGF0IGFjcXVpc2l0aW9uIHdvcmtzIGluIHJlbGF0aW9uIHRvIGhvdyBpdCBpcyBleHBvcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTFxcKG5mdF9ydF9nZXRfZXZhbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MDYxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSG1tLCBgbmZ0X3J0X2dldF9ldmFsYCBJcyBNaXNzaW5nPyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyBqdXN0IGRpZ2dpbmcgaW50byB0aGUga2VybmVsJiMzOTtzIG5ldGZpbHRlciBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBydW50aW1lIGV2YWx1YXRpb24gZnJhbWV3b3JrLiBJIHdhcyBleHBlY3RpbmcgYG5mdF9ydF9nZXRfZXZhbGAgdG8gYmUgYXZhaWxhYmxlLiBJIG5lZWQgaXQgZm9yIFgsIGFuZCBJIHRob3VnaHQgdGhhdCB3YXMgYSBjb3JlIHBhcnQgb2YgdGhlIGluZnJhc3RydWN0dXJlLiBCdXQuLi4gaXQmIzM5O3Mgbm90IGV4cG9ydGVkLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IHByb2JsZW1hdGljLiBOb3cgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgd2h5LiBJcyBpdCBhIGNvbXBpbGUtdGltZSBvcHRpb24gSSBtaXNzZWQ/IElzIGl0IGhpZGRlbiBiZWhpbmQgc29tZSBtYWNybyB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQ/IE9yIHBlcmhhcHMgaXQmIzM5O3MgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBmdW5jdGlvbiB3aXRoIGEgc2ltaWxhciBuYW1lLCBzb21ldGhpbmcgaW50ZXJuYWw/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIFRoaXMgd2FzbiYjMzk7dCBhbnRpY2lwYXRlZCwgYW5kIGl0IHRocm93cyBhIGJpdCBvZiBhIHdyZW5jaCBpbnRvIG15IGN1cnJlbnQgcGxhbi4gVGltZSB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIGhlYWRlcnMgYWdhaW4sIGFuZCBtYXliZSBjcm9zcy1yZWZlcmVuY2UgdGhlIGNvbW1pdCBsb2dzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfcnRfZ2V0X2V2YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9ydC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3J0LmM9MjI9c3RhdGljIHUxNiBnZXRfdGNwbXNzKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpza2Jkc3QpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcnQuYy01My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmM6NTQ6dm9pZCBuZnRfcnRfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZnRfcnQuYy01NS1cdFx0ICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcnQuYz0xOTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3J0X2dldF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcnQuYy0xOTUtXHQuc2l6ZVx0XHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcnQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmM6MTk2Olx0LmV2YWxcdFx0PSBuZnRfcnRfZ2V0X2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9ydC5jLTE5Ny1cdC5pbml0XHRcdD0gbmZ0X3J0X2dldF9pbml0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTU4MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbmZ0X21ldGFfZ2V0X2V2YWxgJiMzOTtzIFZpc2liaWxpdHkgZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSB0YXJnZXQgZnVuY3Rpb24gaXNuJiMzOTt0IHN0YXRpYywgYnV0IGl0IGFsc28gaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYWN0dWFsbHkgYSByZWxpZWYuIFdoaWxlIHN0YXRpYyBmdW5jdGlvbnMgY2FuIHNvbWV0aW1lcyBwcmVzZW50IGEgY2hhbGxlbmdlIGluIGZ1enppbmcgc2NlbmFyaW9zLCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub3QqIHN0YXRpYyBtZWFucyBpdCYjMzk7cyBhY2Nlc3NpYmxlLiBTeXprYWxsZXIsIGluIGl0cyBjdXJyZW50IHN0YXRlLCBjYW4gYWJzb2x1dGVseSBoYW5kbGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHNvIG5vIG5lZWQgZm9yIHdvcmthcm91bmRzIHRoZXJlLiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBzeW1ib2wgdGFibGUgY29udGFpbnMgdGhlIGZ1bmN0aW9uLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBmb2N1cyBzcGVjaWZpY2FsbHkgb24gYG5mdF9tZXRhX2dldF9ldmFsYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgZm9yIGV4cGxvaXRhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgaW52ZXN0aWdhdGlvbiByZWFsbHkgYmVnaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTFxcKG5mdF9tZXRhX2dldF9ldmFsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz0zNjQ9dm9pZCBuZnRfbWV0YV9nZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQ3Mi19XG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDczOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9tZXRhX2dldF9ldmFsKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00NzQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTM0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKlZlcmlmeWluZyB0aGUgRXhwb3J0IE9wZXJhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3ZlIGVzdGFibGlzaGVkIHRoYXQgdGhlIGRhdGEgaXMgKmV4cG9ydGVkKi4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBhc3N1bXB0aW9uIHdlJiMzOTtyZSBzdGFydGluZyBmcm9tLiBOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBzZWUgaG93IGV4YWN0bHkgdGhhdCYjMzk7cyB3b3JraW5nLCB3aGF0JiMzOTtzIGJlaGluZCB0aGUgc2NlbmVzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24gY2FsbDogYG5mdF94ZnJtX2dldF9ldmFsYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrIGhhbmRsZXMgdGhlIHRyYW5zZm9ybWF0aW9uIHJldHJpZXZhbCBhbmQgZXZhbHVhdGlvbiBpbiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dC4gSSBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIGludGVyYWN0aW9ucyBoYXBwZW5pbmcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3hmcm1fZ2V0X2V2YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfeGZybS5jPTEyMD1zdGF0aWMgdm9pZCBuZnRfeGZybV9zdGF0ZV9nZXRfa2V5KGNvbnN0IHN0cnVjdCBuZnRfeGZybSAqcHJpdixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTYwLVxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjE2MTpzdGF0aWMgdm9pZCBuZnRfeGZybV9nZXRfZXZhbF9pbihjb25zdCBzdHJ1Y3QgbmZ0X3hmcm0gKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTYyLVx0XHRcdFx0ICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTc2LVxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjE3NzpzdGF0aWMgdm9pZCBuZnRfeGZybV9nZXRfZXZhbF9vdXQoY29uc3Qgc3RydWN0IG5mdF94ZnJtICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTE3OC1cdFx0XHRcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMDEtXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MjAyOnN0YXRpYyB2b2lkIG5mdF94ZnJtX2dldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMDMtXHRcdFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMDktXHRjYXNlIFhGUk1fUE9MSUNZX0lOOlxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjIxMDpcdFx0bmZ0X3hmcm1fZ2V0X2V2YWxfaW4ocHJpdiwgcmVncywgcGt0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMTEtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTIxMi1cdGNhc2UgWEZSTV9QT0xJQ1lfT1VUOlxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjIxMzpcdFx0bmZ0X3hmcm1fZ2V0X2V2YWxfb3V0KHByaXYsIHJlZ3MsIHBrdCk7XG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMjE0LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM9MjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF94ZnJtX2dldF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTI3Mi1cdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF94ZnJtKSksXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MjczOlx0LmV2YWxcdFx0PSBuZnRfeGZybV9nZXRfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yNzQtXHQuaW5pdFx0XHQ9IG5mdF94ZnJtX2dldF9pbml0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDczMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgYSBQb3RlbnRpYWwgU3l6a2FsbGVyIFRhcmdldCoqCgpSaWdodCwgdGhpcyBsb29rcyBwcmV0dHkgc3RhdGljLiBJIHNlZSBpdCwgcmVnaXN0ZXJlZCBpbiBgbmZ0X3hmcm1fZ2V0X29wc2AsIGFuZCB0aGF0IHBpcXVlcyBteSBpbnRlcmVzdC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm90KiBkeW5hbWljYWxseSBnZW5lcmF0ZWQgaW5jcmVhc2VzIHRoZSBjaGFuY2UgdGhhdCBzeXprYWxsZXIsIHRoZSBmdXp6ZXIsIGNvdWxkIHBvdGVudGlhbGx5IHRhcmdldCBpdCBkaXJlY3RseS4gSWYgaXQmIzM5O3Mgbm90IGlubGluZWQsIHRoZW4gaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSB0byBpbmNsdWRlIGFuZCBzZWUgd2hhdCBoYXBwZW5zLiBJJiMzOTttIHRoaW5raW5nIHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGZpbmQgYSB3YXkgaW4uCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIGludmVzdGlnYXRlIGBuZnRfY29ubmxpbWl0X2V2YWxgLiBJJiMzOTtsbCBjcm9zcy1yZWZlcmVuY2UgdGhlIGBuZnRfeGZybV9nZXRfb3BzYCB0byBkZXRlcm1pbmUgdGhlIHJlbGF0aW9uc2hpcCwgaWYgYW55LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfY29ubmxpbWl0X2V2YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYz0xNzY9c3RhdGljIHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgbmZ0X2Nvbm5saW1pdF9vYmpfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jLTE4My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jOjE4NDpzdGF0aWMgdm9pZCBuZnRfY29ubmxpbWl0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmMtMTg1LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmM9MjUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9jb25ubGltaXRfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jLTI1My1cdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9jb25ubGltaXQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jOjI1NDpcdC5ldmFsXHRcdD0gbmZ0X2Nvbm5saW1pdF9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmMtMjU1LVx0LmluaXRcdFx0PSBuZnRfY29ubmxpbWl0X2luaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMjYzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBTdGF0aWMgUmVhbGl0eTogUmVnaXN0ZXJlZCBhbmQgUmVhZHkqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHNvbWV0aGluZyYjMzk7cyAqc3RhdGljKi4gTm90IGR5bmFtaWMsIG5vdCBjaGFuZ2luZyDigJMgd2hpY2ggY291bGQgYmUgYSBnb29kIG9yIGJhZCB0aGluZywgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBCdXQgYWxzbywgaXQmIzM5O3MgKnJlZ2lzdGVyZWQqLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBiaXQuIFJlZ2lzdGVyZWQgaW1wbGllcyBpdCYjMzk7cyBrbm93biwgYWNjb3VudGVkIGZvciwgd2l0aGluIHRoZSBzeXN0ZW0uIFdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIGFuIHVua25vd24gdmFyaWFibGUgaGVyZSwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCByZWxpZWYuIE5vdywgd2hhdCYjMzk7cyByZWdpc3RlcmVkLCBhbmQgd2hhdCBkb2VzIHRoaXMgbWVhbiBmb3Igb3VyIGZsb3c/IFRpbWUgdG8gZGlnIGludG8gYG5mdF9mbG93X3JvdXRlYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCByZWdpc3RlcmVkIHN0YXR1cyBpbnRlcmFjdHMgd2l0aCB0aGUgcm91dGluZyBsb2dpYy4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoaXMgc3RhdGljIGJ1dCByZWdpc3RlcmVkIGFzcGVjdCBpbmZsdWVuY2VzIHRoZSBmbG93IHBhdGgsIG9yIGlzIHNpbXBseSBhIGRhdGEgcG9pbnQuIExldCYjMzk7cyBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwobmZ0X2Zsb3dfcm91dGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yNjA9aW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMTYtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzozMTc6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X2Zsb3dfcm91dGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTYxNgoJCQkJCQkJb3V0cHV0OiAzODUKCQkJCQkJCXRob3VnaHRzOiA1NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFByb3Bvc2VkIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlcmllcyBoYXMgYmVlbiBleHBvcnRlZCwgZ29vZC4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgZml4ZXMg4oCTIHNwZWNpZmljYWxseSwgbWVtb3J5IGxlYWsgcmVzb2x1dGlvbiBhbmQgcmVmaW5lZCBoYW5kbGluZyBvZiBgZHN0X2VudHJ5YCB3aXRoaW4gYHNrX2J1ZmZgIGFuZCBgbmV0X2RldmljZV9wYXRoYC4gSSYjMzk7dmUgbm90ZWQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIHN5bWJvbHMgdGFyZ2V0ZWQgZm9yIHJldmlldzogYG5mdF9mbG93X3JvdXRlYCwgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAsIGBuZl9zZW5kX3Jlc2V0YCwgYW5kIHNvIG9uLCBjb3ZlcmluZyB0aGUgdXN1YWwgc3VzcGVjdHMgaW4gTmV0ZmlsdGVyJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIHBhY2tldCBwYXRoLCBpbmNsdWRpbmcgZmxvdyBvZmZsb2FkLCBUQ1Agc3RhdGUgbWFuYWdlbWVudCwgYW5kIHJlamVjdC91bnJlYWNoYWJsZSBoYW5kbGluZy4KClRoZSBwYXRjaCYjMzk7cyBpbnRyb2R1Y3Rpb24gb2YgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCBmb3IgY29ycmVjdCBgZHN0YCByZWxlYXNlIGlzIGEgZGVmaW5pdGUgc2lnbiB0aGF0IHRoaXMgaXMgaW1wb3J0YW50LCBhcyBhcmUgdGhlIHVwZGF0ZXMgdG8gYHNrYl92YWxpZF9kc3RgIGNoZWNrcyBhY3Jvc3MgdGhlIG1vZHVsZXMuIFRoZXNlIGFyZSBjaGFuZ2VzIHRoYXQgdG91Y2ggcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHBhdGhzLiBUaGlzIGRlbWFuZHMgcmlnb3JvdXMgZnV6emluZyBhcyBwYXJ0IG9mIG91ciBhbmFseXNpcyBwbGFuLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IG15IGNvbmZpZ3VyYXRpb24gYXNzdW1wdGlvbnMuIEkgc2VlIHRoYXQgd2UgaGF2ZSBgTkZfVEFCTEVTYCwgYE5GX1RBQkxFU19JUFY0YCwgYE5GX1RBQkxFU19JUFY2YCwgYE5GX1RBQkxFU19JTkVUYCwgYE5GX0ZMT1dfVEFCTEVgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORlRfUkVKRUNUX0lQVjRgLCBgTkZUX1JFSkVDVF9JUFY2YCwgYE5GVF9SRUpFQ1RfSU5FVGAsIGBORlRfWEZSTWAsIGBORlRfQ09OTkxJTUlUYCwgYE5GX0NPTk5UUkFDS2AsIGBORVRfSVBJUGAsIGBJUFY2X1RVTk5FTGAsIGFuZCBgTkVUX0RTQWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGNvcnJlY3QuCgpGaXJzdCwgaXMgYE5GX0NPTk5DT1VOVGAgYWN0dWFsbHkgbmVlZGVkLCBvciBpcyBpdCBwdWxsZWQgaW4gdmlhIGEgZGVwZW5kZW5jeT8gQWgsIGl0IHNlZW1zIGBORlRfQ09OTkxJTUlUYCBzZWxlY3RzIGBORl9DT05OQ09VTlRgLCBzbyBqdXN0IGhhdmluZyBgTkZUX0NPTk5MSU1JVGAgaXMgc3VmZmljaWVudC4gVGhhdCBzaW1wbGlmaWVzIHRoZSBjb25maWd1cmF0aW9uLgoKTmV4dCwgSSYjMzk7bGwgY29uZmlybSB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgc2VlLiBgTkVUX0lQSVBgIGJ1aWxkcyBgbmV0L2lwdjQvaXBpcC5jYCwgc28gdGhhdCYjMzk7cyBjb3JyZWN0LiBTaW1pbGFybHksIGBJUFY2X1RVTk5FTGAgYnVpbGRzIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgLCBhbmQgYE5FVF9EU0FgIGJ1aWxkcyBgbmV0L2RzYS91c2VyLmNgLiBFeGNlbGxlbnQsIG15IGFzc3VtcHRpb25zIGFyZSB2YWxpZGF0ZWQuCgpJJiMzOTttIHNhdGlzZmllZCB3aXRoIHRoaXMgYW5hbHlzaXMuIEkgd2lsbCBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JUFY0JiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JUFY2JiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JTkVUJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORlRfUkVKRUNUX0lQVjQmIzM0OywKICAgICYjMzQ7TkZUX1JFSkVDVF9JUFY2JiMzNDssCiAgICAmIzM0O05GVF9SRUpFQ1RfSU5FVCYjMzQ7LAogICAgJiMzNDtORlRfWEZSTSYjMzQ7LAogICAgJiMzNDtORlRfQ09OTkxJTUlUJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtJUFY2X1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORVRfRFNBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGUmIzM0OywKICAgICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O2Rldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O25mX3NlbmRfcmVzZXQmIzM0OywKICAgICYjMzQ7bmZfc2VuZF9yZXNldDYmIzM0OywKICAgICYjMzQ7bmZfc2VuZF91bnJlYWNoJiMzNDssCiAgICAmIzM0O25mX3NlbmRfdW5yZWFjaDYmIzM0OywKICAgICYjMzQ7bmZ0X21ldGFfZ2V0X2V2YWwmIzM0OywKICAgICYjMzQ7bmZ0X3J0X2dldF9ldmFsJiMzNDssCiAgICAmIzM0O25mX2Nvbm5jb3VudF9hZGRfc2tiJiMzNDssCiAgICAmIzM0O25mX2Nvbm5jb3VudF9jb3VudF9za2ImIzM0OywKICAgICYjMzQ7bmZfY29ubnRyYWNrX3RjcF9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRvIGZpeCBtZW1vcnkgbGVha3MgYW5kIGltcHJvdmUgaGFuZGxpbmcgb2YgYGRzdF9lbnRyeWAgaW4gYHNrX2J1ZmZgIGFuZCBgbmV0X2RldmljZV9wYXRoYC4gSXQgaW50cm9kdWNlcyBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VgIHRvIHByb3Blcmx5IHJlbGVhc2UgYGRzdGAgZW50cmllcywgdXBkYXRlcyBgc2tiX3ZhbGlkX2RzdGAgY2hlY2tzIGluIG5ldGZpbHRlciByZWplY3QsIG1ldGEsIHJ0LCBhbmQgeGZybSBtb2R1bGVzLCBhbmQgbW9kaWZpZXMgY29ubnRyYWNrIFRDUCBzdGF0ZSBoYW5kbGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSVBWNCYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSVBWNiYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSU5FVCYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkZUX1JFSkVDVF9JUFY0JiMzNDssCiAgICAmIzM0O05GVF9SRUpFQ1RfSVBWNiYjMzQ7LAogICAgJiMzNDtORlRfUkVKRUNUX0lORVQmIzM0OywKICAgICYjMzQ7TkZUX1hGUk0mIzM0OywKICAgICYjMzQ7TkZUX0NPTk5MSU1JVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkVUX0lQSVAmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OywKICAgICYjMzQ7TkVUX0RTQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9mbG93X3JvdXRlJiMzNDssCiAgICAmIzM0O2Rldl9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDtkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtuZl9zZW5kX3Jlc2V0JiMzNDssCiAgICAmIzM0O25mX3NlbmRfcmVzZXQ2JiMzNDssCiAgICAmIzM0O25mX3NlbmRfdW5yZWFjaCYjMzQ7LAogICAgJiMzNDtuZl9zZW5kX3VucmVhY2g2JiMzNDssCiAgICAmIzM0O25mdF9tZXRhX2dldF9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9ydF9nZXRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZl9jb25uY291bnRfYWRkX3NrYiYjMzQ7LAogICAgJiMzNDtuZl9jb25uY291bnRfY291bnRfc2tiJiMzNDssCiAgICAmIzM0O25mX2Nvbm50cmFja190Y3BfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0byBmaXggbWVtb3J5IGxlYWtzIGFuZCBpbXByb3ZlIGhhbmRsaW5nIG9mIGBkc3RfZW50cnlgIGluIGBza19idWZmYCBhbmQgYG5ldF9kZXZpY2VfcGF0aGAuIEl0IGludHJvZHVjZXMgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCB0byBwcm9wZXJseSByZWxlYXNlIGBkc3RgIGVudHJpZXMsIHVwZGF0ZXMgYHNrYl92YWxpZF9kc3RgIGNoZWNrcyBpbiBuZXRmaWx0ZXIgcmVqZWN0LCBtZXRhLCBydCwgYW5kIHhmcm0gbW9kdWxlcywgYW5kIG1vZGlmaWVzIGNvbm50cmFjayBUQ1Agc3RhdGUgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTQ6NDAuNTQ3NTg3MDU3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4NDA4MzMyMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX0lQVjRcIixcbiAgICBcIk5GX1RBQkxFU19JUFY2XCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZUX1JFSkVDVF9JUFY0XCIsXG4gICAgXCJORlRfUkVKRUNUX0lQVjZcIixcbiAgICBcIk5GVF9SRUpFQ1RfSU5FVFwiLFxuICAgIFwiTkZUX1hGUk1cIixcbiAgICBcIk5GVF9DT05OTElNSVRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVUX0lQSVBcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJORVRfRFNBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X2Zsb3dfcm91dGVcIixcbiAgICBcImRldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwiZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VcIixcbiAgICBcIm5mX3NlbmRfcmVzZXRcIixcbiAgICBcIm5mX3NlbmRfcmVzZXQ2XCIsXG4gICAgXCJuZl9zZW5kX3VucmVhY2hcIixcbiAgICBcIm5mX3NlbmRfdW5yZWFjaDZcIixcbiAgICBcIm5mdF9tZXRhX2dldF9ldmFsXCIsXG4gICAgXCJuZnRfcnRfZ2V0X2V2YWxcIixcbiAgICBcIm5mX2Nvbm5jb3VudF9hZGRfc2tiXCIsXG4gICAgXCJuZl9jb25uY291bnRfY291bnRfc2tiXCIsXG4gICAgXCJuZl9jb25udHJhY2tfdGNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0byBmaXggbWVtb3J5IGxlYWtzIGFuZCBpbXByb3ZlIGhhbmRsaW5nIG9mIGBkc3RfZW50cnlgIGluIGBza19idWZmYCBhbmQgYG5ldF9kZXZpY2VfcGF0aGAuIEl0IGludHJvZHVjZXMgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCB0byBwcm9wZXJseSByZWxlYXNlIGBkc3RgIGVudHJpZXMsIHVwZGF0ZXMgYHNrYl92YWxpZF9kc3RgIGNoZWNrcyBpbiBuZXRmaWx0ZXIgcmVqZWN0LCBtZXRhLCBydCwgYW5kIHhmcm0gbW9kdWxlcywgYW5kIG1vZGlmaWVzIGNvbm50cmFjayBUQ1Agc3RhdGUgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNDo0MC41NDc1OTE5NDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMjM5MjI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI1YTAyZDczMmI1NGUxNWNhM2Q1NjNlODAxNTU3MzQ3YmI3ZTdhZTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAwMDoxNDozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbmluZGV4IDMzZGRmMGQwNzg1NTMuLmEwM2FmOTc1MDU3MzEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcXG5AQCAtMjk2LDE0ICsyOTYsMTggQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbiBcXHRwYXRoID0gXFx1MDAyNnN0YWNrLnBhdGhbc3RhY2subnVtX3BhdGhzIC0gMV07XFxuLVxcdGlmIChwYXRoLVxcdTAwM2V0eXBlICE9IERFVl9QQVRIX01US19XRE1BKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHBhdGgtXFx1MDAzZXR5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpIHtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuIFxcbiBcXHRpbmZvLVxcdTAwM2VpZHggPSBwYXRoLVxcdTAwM2VtdGtfd2RtYS53ZG1hX2lkeDtcXG4gXFx0aW5mby1cXHUwMDNlYnNzID0gcGF0aC1cXHUwMDNlbXRrX3dkbWEuYnNzO1xcbiBcXHRpbmZvLVxcdTAwM2V3Y2lkID0gcGF0aC1cXHUwMDNlbXRrX3dkbWEud2NpZDtcXG4rZXJyX291dDpcXG4rXFx0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UoXFx1MDAyNnN0YWNrKTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGFpcm9oYV9nZXRfZHNhX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKipkZXYpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcXG5pbmRleCBjYzhjNGVmODAzOGYzLi43NzFkOTExOGY5NGFkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcXG5AQCAtMTA4LDE2ICsxMDgsMjAgQEAgbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2lcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdHBhdGggPSBcXHUwMDI2c3RhY2sucGF0aFtzdGFjay5udW1fcGF0aHMgLSAxXTtcXG4tXFx0aWYgKHBhdGgtXFx1MDAzZXR5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpXFxuLVxcdFxcdHJldHVybiAtMTtcXG4rXFx0aWYgKHBhdGgtXFx1MDAzZXR5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpIHtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuIFxcbiBcXHRpbmZvLVxcdTAwM2V3ZG1hX2lkeCA9IHBhdGgtXFx1MDAzZW10a193ZG1hLndkbWFfaWR4O1xcbiBcXHRpbmZvLVxcdTAwM2VxdWV1ZSA9IHBhdGgtXFx1MDAzZW10a193ZG1hLnF1ZXVlO1xcbiBcXHRpbmZvLVxcdTAwM2Vic3MgPSBwYXRoLVxcdTAwM2VtdGtfd2RtYS5ic3M7XFxuIFxcdGluZm8tXFx1MDAzZXdjaWQgPSBwYXRoLVxcdTAwM2VtdGtfd2RtYS53Y2lkO1xcbiBcXHRpbmZvLVxcdTAwM2VhbXNkdSA9IHBhdGgtXFx1MDAzZW10a193ZG1hLmFtc2R1O1xcbitlcnJfb3V0OlxcbitcXHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShcXHUwMDI2c3RhY2spO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDhkYjI1Yjc5NTczZTMuLjYyY2ZhZDdlNmI3OWEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5AQCAtODkyLDYgKzg5Miw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgge1xcbiBcXHRcXHRcXHR1OFxcdFxcdGhfZGVzdFtFVEhfQUxFTl07XFxuIFxcdFxcdH0gZW5jYXA7XFxuIFxcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcXG4gXFx0XFx0XFx0dW5pb24ge1xcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5fYWRkclxcdHNyY192NDtcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGluNl9hZGRyXFx0c3JjX3Y2O1xcbkBAIC0zNDI3LDYgKzM0MjgsNyBAQCBpbnQgZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIGludCBkZXZfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcXG4rdm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7XFxuIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcXG4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZV9yY3Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcXG4gc3RydWN0IG5ldF9kZXZpY2UgKl9fZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcXG5pbmRleCBjMWMxYmUxYTY5NjJmLi5lNTBlZDY3N2RlNzI1IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtNzQyLDE0ICs3NDIsMzMgQEAgRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuIHtcXG4tXFx0aW50IGsgPSBzdGFjay1cXHUwMDNlbnVtX3BhdGhzKys7XFxuLVxcbi1cXHRpZiAoayBcXHUwMDNlPSBORVRfREVWSUNFX1BBVEhfU1RBQ0tfTUFYKVxcbitcXHRpZiAoc3RhY2stXFx1MDAzZW51bV9wYXRocyArIDEgXFx1MDAzZSBORVRfREVWSUNFX1BBVEhfU1RBQ0tfTUFYKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdHJldHVybiBcXHUwMDI2c3RhY2stXFx1MDAzZXBhdGhba107XFxuK1xcdHJldHVybiBcXHUwMDI2c3RhY2stXFx1MDAzZXBhdGhbc3RhY2stXFx1MDAzZW51bV9wYXRoc107XFxuIH1cXG4gXFxuK3ZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcXG4rXFx0aW50IGs7XFxuK1xcbitcXHRpZiAoc3RhY2stXFx1MDAzZW51bV9wYXRocyA9PSAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKGsgPSBzdGFjay1cXHUwMDNlbnVtX3BhdGhzIC0gMTsgayBcXHUwMDNlPSAwOyBrLS0pIHtcXG4rXFx0XFx0cGF0aCA9IFxcdTAwMjZzdGFjay1cXHUwMDNlcGF0aFtrXTtcXG4rXFx0XFx0c3dpdGNoIChwYXRoLVxcdTAwM2V0eXBlKSB7XFxuK1xcdFxcdGNhc2UgREVWX1BBVEhfVFVOOlxcbitcXHRcXHRcXHRkc3RfcmVsZWFzZShwYXRoLVxcdTAwM2V0dW4uZHN0KTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSk7XFxuK1xcbiBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4ge1xcbkBAIC03NjYsMTUgKzc4NSwxNiBAQCBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4gXFx0XFx0bGFzdF9kZXYgPSBjdHguZGV2O1xcbiBcXHRcXHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcXG4gXFx0XFx0aWYgKCFwYXRoKVxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFxuIFxcdFxcdG1lbXNldChwYXRoLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2VfcGF0aCkpO1xcbiBcXHRcXHRyZXQgPSBjdHguZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoXFx1MDAyNmN0eCwgcGF0aCk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFxuK1xcdFxcdHN0YWNrLVxcdTAwM2VudW1fcGF0aHMrKztcXG4gXFx0XFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHguZGV2KSlcXG4tXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghY3R4LmRldilcXG5AQCAtNzgyLDExICs4MDIsMTcgQEAgaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXFxuIFxcbiBcXHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcXG4gXFx0aWYgKCFwYXRoKVxcbi1cXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFxuIFxcdHBhdGgtXFx1MDAzZXR5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDtcXG4gXFx0cGF0aC1cXHUwMDNlZGV2ID0gY3R4LmRldjtcXG4rXFx0c3RhY2stXFx1MDAzZW51bV9wYXRocysrO1xcbiBcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIDA7XFxuK2Vycl9vdXQ6XFxuK1xcdGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0YWNrKTtcXG4rXFxuK1xcdHJldHVybiAtMTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS91c2VyLmMgYi9uZXQvZHNhL3VzZXIuY1xcbmluZGV4IDAzYzdhZjZhYmUxOGEuLjQwNjVjNmVlNmZjNjggMTAwNjQ0XFxuLS0tIGEvbmV0L2RzYS91c2VyLmNcXG4rKysgYi9uZXQvZHNhL3VzZXIuY1xcbkBAIC0yNTQ3LDE0ICsyNTQ3LDEzIEBAIHN0YXRpYyBpbnQgZHNhX3VzZXJfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcXG4ge1xcbiBcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChjdHgtXFx1MDAzZWRldik7XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0ID0gZHNhX3BvcnRfdG9fY29uZHVpdChkcCk7XFxuIFxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZHAtXFx1MDAzZWNwdV9kcDtcXG4gXFxuIFxcdHBhdGgtXFx1MDAzZWRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbiBcXHRwYXRoLVxcdTAwM2V0eXBlID0gREVWX1BBVEhfRFNBO1xcbiBcXHRwYXRoLVxcdTAwM2Vkc2EucHJvdG8gPSBjcHVfZHAtXFx1MDAzZXRhZ19vcHMtXFx1MDAzZXByb3RvO1xcbiBcXHRwYXRoLVxcdTAwM2Vkc2EucG9ydCA9IGRwLVxcdTAwM2VpbmRleDtcXG4tXFx0Y3R4LVxcdTAwM2VkZXYgPSBjb25kdWl0O1xcbitcXHRjdHgtXFx1MDAzZWRldiA9IE5VTEw7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmNcXG5pbmRleCAwODMxZjZiODE3MTdjLi5mYjdkOTZmOTliMDZiIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2lwaXAuY1xcbisrKyBiL25ldC9pcHY0L2lwaXAuY1xcbkBAIC0zNzYsMTAgKzM3NiwxMCBAQCBzdGF0aWMgaW50IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG4gXFx0cGF0aC1cXHUwMDNldHVuLnNyY192NC5zX2FkZHIgPSB0aXBoLVxcdTAwM2VzYWRkcjtcXG4gXFx0cGF0aC1cXHUwMDNldHVuLmRzdF92NC5zX2FkZHIgPSB0aXBoLVxcdTAwM2VkYWRkcjtcXG4gXFx0cGF0aC1cXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQO1xcbitcXHRwYXRoLVxcdTAwM2V0dW4uZHN0ID0gXFx1MDAyNnJ0LVxcdTAwM2Vkc3Q7XFxuIFxcdHBhdGgtXFx1MDAzZWRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbiBcXG4gXFx0Y3R4LVxcdTAwM2VkZXYgPSBydC1cXHUwMDNlZHN0LmRldjtcXG4tXFx0aXBfcnRfcHV0KHJ0KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmNcXG5pbmRleCA0NjI2ZGM0NjgwOGYzLi41OWVjNDY1YTlkZjk4IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jXFxuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC90Y3AuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9yb3V0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9pcHY0L25mX3JlamVjdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaFxcdTAwM2VcXG5AQCAtMjYzLDYgKzI2NCw3IEBAIHN0YXRpYyBpbnQgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxcbiBcXHRpZiAoIWRzdClcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4rXFx0c2tiX2RzdF9kcm9wKHNrYl9pbik7XFxuIFxcdHNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjc5LDcgKzI4MSw3IEBAIHZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcXG4gXFx0aWYgKCFvdGgpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghc2tiX2RzdChvbGRza2IpIFxcdTAwMjZcXHUwMDI2IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qob2xkc2tiKSBcXHUwMDNjIDApXFxuK1xcdGlmICghc2tiX3ZhbGlkX2RzdChvbGRza2IpIFxcdTAwMjZcXHUwMDI2IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qob2xkc2tiKSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmIChza2JfcnRhYmxlKG9sZHNrYiktXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgKFJUQ0ZfQlJPQURDQVNUIHwgUlRDRl9NVUxUSUNBU1QpKVxcbkBAIC0zNTIsNyArMzU0LDcgQEAgdm9pZCBuZl9zZW5kX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IGNvZGUsIGludCBob29rKVxcbiBcXHRpZiAoaXBoLVxcdTAwM2VmcmFnX29mZiBcXHUwMDI2IGh0b25zKElQX09GRlNFVCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghc2tiX2RzdChza2JfaW4pIFxcdTAwMjZcXHUwMDI2IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc2tiX2luKSBcXHUwMDNjIDApXFxuK1xcdGlmICghc2tiX3ZhbGlkX2RzdChza2JfaW4pIFxcdTAwMjZcXHUwMDI2IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc2tiX2luKSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2JfaW4pIHx8XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbmluZGV4IDk3YzNmNjFkNjI3YmIuLmQ4MDAyMGJjMjYyMGUgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXFxuKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXFxuQEAgLTE4NzAsMTIgKzE4NzAsMTQgQEAgc3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdFxcdHBhdGgtXFx1MDAzZXR1bi5zcmNfdjYgPSBmbDYuc2FkZHI7XFxuIFxcdFxcdHBhdGgtXFx1MDAzZXR1bi5kc3RfdjYgPSBmbDYuZGFkZHI7XFxuIFxcdFxcdHBhdGgtXFx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjtcXG4rXFx0XFx0cGF0aC1cXHUwMDNldHVuLmRzdCA9IGRzdDtcXG4gXFx0XFx0cGF0aC1cXHUwMDNlZGV2ID0gY3R4LVxcdTAwM2VkZXY7XFxuIFxcdFxcdGN0eC1cXHUwMDNlZGV2ID0gZHN0LVxcdTAwM2VkZXY7XFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IGRzdC1cXHUwMDNlZXJyb3I7XFxuLVxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmNcXG5pbmRleCBlZjViN2U4NWNmZmE4Li4wN2NkYWExMGRhMGQwIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jXFxuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfcm91dGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfZmliLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2NoZWNrc3VtLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfcmVqZWN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oXFx1MDAzZVxcbkBAIC0zMDQsNiArMzA1LDcgQEAgc3RhdGljIGludCBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxcbiBcXHRpZiAoIWRzdClcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4rXFx0c2tiX2RzdF9kcm9wKHNrYl9pbik7XFxuIFxcdHNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMzM2LDEwICszMzgsMTIgQEAgdm9pZCBuZl9zZW5kX3Jlc2V0NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcXG4gXFx0Zmw2LmZsNl9zcG9ydCA9IG90Y3BoLVxcdTAwM2VkZXN0O1xcbiBcXHRmbDYuZmw2X2Rwb3J0ID0gb3RjcGgtXFx1MDAzZXNvdXJjZTtcXG4gXFxuLVxcdGlmICghc2tiX2RzdChvbGRza2IpKSB7XFxuK1xcdGlmICghc2tiX3ZhbGlkX2RzdChvbGRza2IpKSB7XFxuIFxcdFxcdG5mX2lwNl9yb3V0ZShuZXQsIFxcdTAwMjZkc3QsIGZsb3dpNl90b19mbG93aShcXHUwMDI2Zmw2KSwgZmFsc2UpO1xcbiBcXHRcXHRpZiAoIWRzdClcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0c2tiX2RzdF9kcm9wKG9sZHNrYik7XFxuIFxcdFxcdHNrYl9kc3Rfc2V0KG9sZHNrYiwgZHN0KTtcXG4gXFx0fVxcbiBcXG5AQCAtNDQwLDcgKzQ0NCw3IEBAIHZvaWQgbmZfc2VuZF91bnJlYWNoNihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2JfaW4sXFxuIFxcdGlmIChob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUIFxcdTAwMjZcXHUwMDI2IHNrYl9pbi1cXHUwMDNlZGV2ID09IE5VTEwpXFxuIFxcdFxcdHNrYl9pbi1cXHUwMDNlZGV2ID0gbmV0LVxcdTAwM2Vsb29wYmFja19kZXY7XFxuIFxcbi1cXHRpZiAoIXNrYl9kc3Qoc2tiX2luKSBcXHUwMDI2XFx1MDAyNiBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChza2JfaW4pIFxcdTAwM2MgMClcXG4rXFx0aWYgKCFza2JfdmFsaWRfZHN0KHNrYl9pbikgXFx1MDAyNlxcdTAwMjYgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc2tiX2luKSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGljbXB2Nl9zZW5kKHNrYl9pbiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwgY29kZSwgMCk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXFxuaW5kZXggZTllYTZkOTQ2NmU3NC4uODU0ODdmOTJhZjUwNiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xcbkBAIC0xNTgsNiArMTU4LDggQEAgc3RhdGljIGJvb2wgZ2V0X2N0X29yX3R1cGxlX2Zyb21fc2tiKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRmb3VuZF9jdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCk7XFxuK1xcdCp0dXBsZSA9IGZvdW5kX2N0LVxcdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZTtcXG4rXFx0KnpvbmUgPSBuZl9jdF96b25lKGZvdW5kX2N0KTtcXG4gXFx0KnJlZmNvdW50ZWQgPSB0cnVlO1xcbiBcXHQqY3QgPSBmb3VuZF9jdDtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcXG5pbmRleCBjZWVlZDNkN2ZlNTIwLi43MjNlOTQ2YTc4ZjQwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcXG5AQCAtMTI4MSw4ICsxMjgxLDkgQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0aWYgKGN0LVxcdTAwM2Vwcm90by50Y3AucmV0cmFucyBcXHUwMDNlPSB0bi1cXHUwMDNldGNwX21heF9yZXRyYW5zIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICB0aW1lb3V0c1tuZXdfc3RhdGVdIFxcdTAwM2UgdGltZW91dHNbVENQX0NPTk5UUkFDS19SRVRSQU5TXSlcXG4gXFx0XFx0dGltZW91dCA9IHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfUkVUUkFOU107XFxuLVxcdGVsc2UgaWYgKHVubGlrZWx5KGluZGV4ID09IFRDUF9SU1RfU0VUKSlcXG4tXFx0XFx0dGltZW91dCA9IHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfQ0xPU0VdO1xcbitcXHRlbHNlIGlmICh1bmxpa2VseShpbmRleCA9PSBUQ1BfUlNUX1NFVCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgIG5ld19zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEKSlcXG4rXFx0XFx0dGltZW91dCA9IHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfVU5BQ0tdO1xcbiBcXHRlbHNlIGlmICgoY3QtXFx1MDAzZXByb3RvLnRjcC5zZWVuWzBdLmZsYWdzIHwgY3QtXFx1MDAzZXByb3RvLnRjcC5zZWVuWzFdLmZsYWdzKSBcXHUwMDI2XFxuIFxcdFxcdCBJUF9DVF9UQ1BfRkxBR19EQVRBX1VOQUNLTk9XTEVER0VEIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCB0aW1lb3V0c1tuZXdfc3RhdGVdIFxcdTAwM2UgdGltZW91dHNbVENQX0NPTk5UUkFDS19VTkFDS10pXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXFxuaW5kZXggOThjMDNiNDg3ZjUyMS4uNTYyMTliMDJlMTIyNyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xcbkBAIC00Miw4ICs0Miw3IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxcbitzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxcbiBcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0XFx0XFx0XFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCB1OCAqaGEsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuQEAgLTc2LDE0ICs3NSwxNCBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxcbiB9XFxuIFxcbiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XFxuLVxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbmRldjtcXG4tXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dGRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0c3RydWN0IGlkIHtcXG4gXFx0XFx0X191MTZcXHRpZDtcXG4gXFx0XFx0X19iZTE2XFx0cHJvdG87XFxuIFxcdH0gZW5jYXBbTkZfRkxPV19UQUJMRV9FTkNBUF9NQVhdO1xcbiBcXHR1OCBudW1fZW5jYXBzO1xcbiBcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB0dW47XFxuK1xcdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3Q7XFxuIFxcdHU4IG51bV90dW5zO1xcbiBcXHR1OCBpbmdyZXNzX3ZsYW5zO1xcbiBcXHR1OCBoX3NvdXJjZVtFVEhfQUxFTl07XFxuQEAgLTkyLDkgKzkxLDEyIEBAIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcXG4gXFx0ZW51bSBmbG93X29mZmxvYWRfeG1pdF90eXBlIHhtaXRfdHlwZTtcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXFxuK3N0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KTtcXG4rXFxuK3N0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gKmluZm8sXFxuLVxcdFxcdFxcdCAgICAgdW5zaWduZWQgY2hhciAqaGEsIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcXG4rXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XFxuIFxcdGludCBpO1xcbkBAIC0xMDksMjkgKzExMSwyNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxcbiBcXHRcXHRjYXNlIERFVl9QQVRIX1ZMQU46XFxuIFxcdFxcdGNhc2UgREVWX1BBVEhfUFBQT0U6XFxuIFxcdFxcdGNhc2UgREVWX1BBVEhfVFVOOlxcbi1cXHRcXHRcXHRpbmZvLVxcdTAwM2VpbmRldiA9IHBhdGgtXFx1MDAzZWRldjtcXG4rXFx0XFx0XFx0aW5mby1cXHUwMDNlZGV2ID0gcGF0aC1cXHUwMDNlZGV2O1xcbiBcXHRcXHRcXHRpZiAoaXNfemVyb19ldGhlcl9hZGRyKGluZm8tXFx1MDAzZWhfc291cmNlKSlcXG4gXFx0XFx0XFx0XFx0bWVtY3B5KGluZm8tXFx1MDAzZWhfc291cmNlLCBwYXRoLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XFxuIFxcbi1cXHRcXHRcXHRpZiAocGF0aC1cXHUwMDNldHlwZSA9PSBERVZfUEFUSF9FVEhFUk5FVClcXG4rXFx0XFx0XFx0aWYgKHBhdGgtXFx1MDAzZXR5cGUgPT0gREVWX1BBVEhfRVRIRVJORVQgfHxcXG4rXFx0XFx0XFx0ICAgIHBhdGgtXFx1MDAzZXR5cGUgPT0gREVWX1BBVEhfRFNBKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0aWYgKHBhdGgtXFx1MDAzZXR5cGUgPT0gREVWX1BBVEhfRFNBKSB7XFxuLVxcdFxcdFxcdFxcdGkgPSBzdGFjay1cXHUwMDNlbnVtX3BhdGhzO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0LyogREVWX1BBVEhfVkxBTiwgREVWX1BBVEhfUFBQT0UgYW5kIERFVl9QQVRIX1RVTiAqL1xcbiBcXHRcXHRcXHRpZiAocGF0aC1cXHUwMDNldHlwZSA9PSBERVZfUEFUSF9UVU4pIHtcXG4gXFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV90dW5zKVxcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFxuIFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZXR1bi5zcmNfdjYgPSBwYXRoLVxcdTAwM2V0dW4uc3JjX3Y2O1xcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2V0dW4uZHN0X3Y2ID0gcGF0aC1cXHUwMDNldHVuLmRzdF92NjtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNldHVuLmwzX3Byb3RvID0gcGF0aC1cXHUwMDNldHVuLmwzX3Byb3RvO1xcbitcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2V0dW5fZHN0ID0gcGF0aC1cXHUwMDNldHVuLmRzdDtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlbnVtX3R1bnMrKztcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV9lbmNhcHMgXFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpXFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiBcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlZW5jYXBbaW5mby1cXHUwMDNlbnVtX2VuY2Fwc10uaWQgPVxcbiBcXHRcXHRcXHRcXHRcXHRwYXRoLVxcdTAwM2VlbmNhcC5pZDtcXG5AQCAtMTUyLDEzICsxNTIsMTMgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcXG4gXFx0XFx0XFx0c3dpdGNoIChwYXRoLVxcdTAwM2VicmlkZ2Uudmxhbl9tb2RlKSB7XFxuIFxcdFxcdFxcdGNhc2UgREVWX1BBVEhfQlJfVkxBTl9VTlRBR19IVzpcXG4gXFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV9lbmNhcHMgPT0gMClcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VpbmdyZXNzX3ZsYW5zIHw9IEJJVChpbmZvLVxcdTAwM2VudW1fZW5jYXBzIC0gMSk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVEFHOlxcbiBcXHRcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlbnVtX2VuY2FwcyBcXHUwMDNlPSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWClcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VlbmNhcFtpbmZvLVxcdTAwM2VudW1fZW5jYXBzXS5pZCA9IHBhdGgtXFx1MDAzZWJyaWRnZS52bGFuX2lkO1xcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VlbmNhcFtpbmZvLVxcdTAwM2VudW1fZW5jYXBzXS5wcm90byA9IHBhdGgtXFx1MDAzZWJyaWRnZS52bGFuX3Byb3RvO1xcbkBAIC0xNjYsNyArMTY2LDcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdGNhc2UgREVWX1BBVEhfQlJfVkxBTl9VTlRBRzpcXG4gXFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV9lbmNhcHMgPT0gMClcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VudW1fZW5jYXBzLS07XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xNzYsMTYgKzE3NiwyMiBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcdGluZm8tXFx1MDAzZW91dGRldiA9IGluZm8tXFx1MDAzZWluZGV2O1xcbiBcXG4tXFx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoaW5mby1cXHUwMDNlaW5kZXYpKVxcbitcXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoXFx1MDAyNmZ0LVxcdTAwM2VkYXRhKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShpbmZvLVxcdTAwM2VkZXYpKVxcbiBcXHRcXHRpbmZvLVxcdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XFxuIFxcbitcXHRpZiAoIW5mdF9mbG93dGFibGVfZmluZF9kZXYoaW5mby1cXHUwMDNlZGV2LCBmdCkpXFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFxuIFxcdHJldHVybiAwO1xcbitlcnJfb3V0OlxcbitcXHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7XFxuK1xcbitcXHRyZXR1cm4gLTE7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5AQCAtMjA1LDQ0ICsyMTEsNiBAQCBzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdHJldHVybiBmb3VuZDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCAqdHVuLFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuLVxcdFxcdFxcdFxcdFxcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIpXFxuLXtcXG4tXFx0c3RydWN0IGRzdF9lbnRyeSAqY3VyX2RzdCA9IHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLmRzdDtcXG4tXFx0c3RydWN0IGRzdF9lbnRyeSAqdHVuX2RzdCA9IE5VTEw7XFxuLVxcdHN0cnVjdCBmbG93aSBmbCA9IHt9O1xcbi1cXG4tXFx0c3dpdGNoIChuZnRfcGYocGt0KSkge1xcbi1cXHRjYXNlIE5GUFJPVE9fSVBWNDpcXG4tXFx0XFx0ZmwudS5pcDQuZGFkZHIgPSB0dW4tXFx1MDAzZWRzdF92NC5zX2FkZHI7XFxuLVxcdFxcdGZsLnUuaXA0LnNhZGRyID0gdHVuLVxcdTAwM2VzcmNfdjQuc19hZGRyO1xcbi1cXHRcXHRmbC51LmlwNC5mbG93aTRfaWlmID0gbmZ0X2luKHBrdCktXFx1MDAzZWlmaW5kZXg7XFxuLVxcdFxcdGZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtXFx1MDAzZXNrYikpO1xcbi1cXHRcXHRmbC51LmlwNC5mbG93aTRfbWFyayA9IHBrdC1cXHUwMDNlc2tiLVxcdTAwM2VtYXJrO1xcbi1cXHRcXHRmbC51LmlwNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQztcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgTkZQUk9UT19JUFY2Olxcbi1cXHRcXHRmbC51LmlwNi5kYWRkciA9IHR1bi1cXHUwMDNlZHN0X3Y2O1xcbi1cXHRcXHRmbC51LmlwNi5zYWRkciA9IHR1bi1cXHUwMDNlc3JjX3Y2O1xcbi1cXHRcXHRmbC51LmlwNi5mbG93aTZfaWlmID0gbmZ0X2luKHBrdCktXFx1MDAzZWlmaW5kZXg7XFxuLVxcdFxcdGZsLnUuaXA2LmZsb3dsYWJlbCA9IGlwNl9mbG93aW5mbyhpcHY2X2hkcihwa3QtXFx1MDAzZXNrYikpO1xcbi1cXHRcXHRmbC51LmlwNi5mbG93aTZfbWFyayA9IHBrdC1cXHUwMDNlc2tiLVxcdTAwM2VtYXJrO1xcbi1cXHRcXHRmbC51LmlwNi5mbG93aTZfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQztcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFxuLVxcdG5mX3JvdXRlKG5mdF9uZXQocGt0KSwgXFx1MDAyNnR1bl9kc3QsIFxcdTAwMjZmbCwgZmFsc2UsIG5mdF9wZihwa3QpKTtcXG4tXFx0aWYgKCF0dW5fZHN0KVxcbi1cXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4tXFxuLVxcdHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLmRzdCA9IHR1bl9kc3Q7XFxuLVxcdGRzdF9yZWxlYXNlKGN1cl9kc3QpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbkBAIC0yNTUsMjggKzIyMywyNSBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiBcXHR1bnNpZ25lZCBjaGFyIGhhW0VUSF9BTEVOXTtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgXFx1MDAyNnN0YWNrKSBcXHUwMDNjIDAgfHxcXG4tXFx0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFxcdTAwMjZzdGFjaywgXFx1MDAyNmluZm8sIGhhLCBcXHUwMDI2ZnQtXFx1MDAzZWRhdGEpIFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuLVxcbi1cXHRpZiAoIW5mdF9mbG93dGFibGVfZmluZF9kZXYoaW5mby5pbmRldiwgZnQpKVxcbitcXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChkc3QsIGN0LCBkaXIsIGhhLCBcXHUwMDI2c3RhY2spIFxcdTAwM2MgMCB8fFxcbitcXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXFx1MDAyNnN0YWNrLCBcXHUwMDI2aW5mbywgaGEsIGZ0KSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4tXFx0aWYgKGluZm8ub3V0ZGV2KVxcbi1cXHRcXHRyb3V0ZS1cXHUwMDNldHVwbGVbZGlyXS5vdXQuaWZpbmRleCA9IGluZm8ub3V0ZGV2LVxcdTAwM2VpZmluZGV4O1xcbitcXHRyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uaW4uaWZpbmRleCA9IGluZm8uZGV2LVxcdTAwM2VpZmluZGV4O1xcbitcXHRyb3V0ZS1cXHUwMDNldHVwbGVbZGlyXS5vdXQuaWZpbmRleCA9IGluZm8uZGV2LVxcdTAwM2VpZmluZGV4O1xcbiBcXG4tXFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLmlmaW5kZXggPSBpbmZvLmluZGV2LVxcdTAwM2VpZmluZGV4O1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5mby5udW1fZW5jYXBzOyBpKyspIHtcXG4gXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLmVuY2FwW2ldLmlkID0gaW5mby5lbmNhcFtpXS5pZDtcXG4gXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLmVuY2FwW2ldLnByb3RvID0gaW5mby5lbmNhcFtpXS5wcm90bztcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGluZm8ubnVtX3R1bnMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICFuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKHBrdCwgXFx1MDAyNmluZm8udHVuLCByb3V0ZSwgZGlyKSkge1xcbitcXHRpZiAoaW5mby5udW1fdHVucykge1xcbiBcXHRcXHRyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLnNyY192NiA9IGluZm8udHVuLmRzdF92NjtcXG4gXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5kc3RfdjYgPSBpbmZvLnR1bi5zcmNfdjY7XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi50dW4ubDNfcHJvdG8gPSBpbmZvLnR1bi5sM19wcm90bztcXG4gXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLm51bV90dW5zID0gaW5mby5udW1fdHVucztcXG4rXFx0XFx0ZHN0X3JlbGVhc2Uocm91dGUtXFx1MDAzZXR1cGxlW2Rpcl0uZHN0KTtcXG4rXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlW2Rpcl0uZHN0ID0gaW5mby50dW5fZHN0O1xcbiBcXHR9XFxuIFxcbiBcXHRyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uaW4ubnVtX2VuY2FwcyA9IGluZm8ubnVtX2VuY2FwcztcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfbWV0YS5jIGIvbmV0L25ldGZpbHRlci9uZnRfbWV0YS5jXFxuaW5kZXggMGE0M2UwNzg3YTY4OC4uMDFjZmJhYTM2NTI1MCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmNcXG5AQCAtMjAsNiArMjAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcF9zdGF0ZXMuaFxcdTAwM2UgLyogZm9yIFRDUF9USU1FX1dBSVQgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmhcXHUwMDNlXFxuQEAgLTI3OSwxMSArMjgwLDEyIEBAIHN0YXRpYyBib29sIG5mdF9tZXRhX2dldF9ldmFsX2lmbmFtZShlbnVtIG5mdF9tZXRhX2tleXMga2V5LCB1MzIgKmRlc3QsXFxuIHN0YXRpYyBub2lubGluZSBib29sXFxuIG5mdF9tZXRhX2dldF9ldmFsX3J0Y2xhc3NpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgKmRlc3QpXFxuIHtcXG4tXFx0Y29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpO1xcbitcXHRjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XFxuIFxcbi1cXHRpZiAoIWRzdClcXG4rXFx0aWYgKCFza2JfdmFsaWRfZHN0KHNrYikpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuK1xcdGRzdCA9IHNrYl9kc3Qoc2tiKTtcXG4gXFx0KmRlc3QgPSBkc3QtXFx1MDAzZXRjbGFzc2lkO1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9ydC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcnQuY1xcbmluZGV4IGFlYjAwOTRlYWZkODAuLjg0MWM4NjNhMDhkYjUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcnQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3J0LmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXFx1MDAzZVxcbkBAIC01OSwxMCArNjAsMTEgQEAgdm9pZCBuZnRfcnRfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbiBcXHR1MzIgKmRlc3QgPSBcXHUwMDI2cmVncy1cXHUwMDNlZGF0YVtwcml2LVxcdTAwM2VkcmVnXTtcXG4gXFx0Y29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0O1xcbiBcXG4tXFx0ZHN0ID0gc2tiX2RzdChza2IpO1xcbi1cXHRpZiAoIWRzdClcXG4rXFx0aWYgKCFza2JfdmFsaWRfZHN0KHNrYikpXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4rXFx0ZHN0ID0gc2tiX2RzdChza2IpO1xcbitcXG4gXFx0c3dpdGNoIChwcml2LVxcdTAwM2VrZXkpIHtcXG4gI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lEXFxuIFxcdGNhc2UgTkZUX1JUX0NMQVNTSUQ6XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uY1xcbmluZGV4IDhjZWM0MzA2NDMxOTIuLmM4YmJhNjk3Zjk5M2EgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3hmcm0uaFxcdTAwM2VcXG4gXFxuQEAgLTE3Nyw5ICsxNzgsMTUgQEAgc3RhdGljIHZvaWQgbmZ0X3hmcm1fZ2V0X2V2YWxfb3V0KGNvbnN0IHN0cnVjdCBuZnRfeGZybSAqcHJpdixcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuIFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuIHtcXG4tXFx0Y29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChwa3QtXFx1MDAzZXNrYik7XFxuK1xcdGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRpZiAoIXNrYl92YWxpZF9kc3QocGt0LVxcdTAwM2Vza2IpKSB7XFxuK1xcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRkc3QgPSBza2JfZHN0KHBrdC1cXHUwMDNlc2tiKTtcXG4gXFx0Zm9yIChpID0gMDsgZHN0IFxcdTAwMjZcXHUwMDI2IGRzdC1cXHUwMDNleGZybTtcXG4gXFx0ICAgICBkc3QgPSAoKGNvbnN0IHN0cnVjdCB4ZnJtX2RzdCAqKWRzdCktXFx1MDAzZWNoaWxkLCBpKyspIHtcXG4gXFx0XFx0aWYgKGkgXFx1MDAzYyBwcml2LVxcdTAwM2VzcG51bSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTQ6NDAuOTYwOTA0MzkyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDk3OTk1MDAyMDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX0lQVjRcIixcbiAgICBcIk5GX1RBQkxFU19JUFY2XCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZUX1JFSkVDVF9JUFY0XCIsXG4gICAgXCJORlRfUkVKRUNUX0lQVjZcIixcbiAgICBcIk5GVF9SRUpFQ1RfSU5FVFwiLFxuICAgIFwiTkZUX1hGUk1cIixcbiAgICBcIk5GVF9DT05OTElNSVRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVUX0lQSVBcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJORVRfRFNBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X2Zsb3dfcm91dGVcIixcbiAgICBcImRldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwiZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VcIixcbiAgICBcIm5mX3NlbmRfcmVzZXRcIixcbiAgICBcIm5mX3NlbmRfcmVzZXQ2XCIsXG4gICAgXCJuZl9zZW5kX3VucmVhY2hcIixcbiAgICBcIm5mX3NlbmRfdW5yZWFjaDZcIixcbiAgICBcIm5mdF9tZXRhX2dldF9ldmFsXCIsXG4gICAgXCJuZnRfcnRfZ2V0X2V2YWxcIixcbiAgICBcIm5mX2Nvbm5jb3VudF9hZGRfc2tiXCIsXG4gICAgXCJuZl9jb25uY291bnRfY291bnRfc2tiXCIsXG4gICAgXCJuZl9jb25udHJhY2tfdGNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0byBmaXggbWVtb3J5IGxlYWtzIGFuZCBpbXByb3ZlIGhhbmRsaW5nIG9mIGBkc3RfZW50cnlgIGluIGBza19idWZmYCBhbmQgYG5ldF9kZXZpY2VfcGF0aGAuIEl0IGludHJvZHVjZXMgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCB0byBwcm9wZXJseSByZWxlYXNlIGBkc3RgIGVudHJpZXMsIHVwZGF0ZXMgYHNrYl92YWxpZF9kc3RgIGNoZWNrcyBpbiBuZXRmaWx0ZXIgcmVqZWN0LCBtZXRhLCBydCwgYW5kIHhmcm0gbW9kdWxlcywgYW5kIG1vZGlmaWVzIGNvbm50cmFjayBUQ1Agc3RhdGUgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNWEwMmQ3MzJiNTRlMTVjYTNkNTYzZTgwMTU1NzM0N2JiN2U3YWU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAwMDoxNDozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5pbmRleCAzM2RkZjBkMDc4NTUzLi5hMDNhZjk3NTA1NzMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuQEAgLTI5NiwxNCArMjk2LDE4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0cGF0aCA9IFx1MDAyNnN0YWNrLnBhdGhbc3RhY2subnVtX3BhdGhzIC0gMV07XG4tXHRpZiAocGF0aC1cdTAwM2V0eXBlICE9IERFVl9QQVRIX01US19XRE1BKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChwYXRoLVx1MDAzZXR5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpIHtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuIFxuIFx0aW5mby1cdTAwM2VpZHggPSBwYXRoLVx1MDAzZW10a193ZG1hLndkbWFfaWR4O1xuIFx0aW5mby1cdTAwM2Vic3MgPSBwYXRoLVx1MDAzZW10a193ZG1hLmJzcztcbiBcdGluZm8tXHUwMDNld2NpZCA9IHBhdGgtXHUwMDNlbXRrX3dkbWEud2NpZDtcbitlcnJfb3V0OlxuK1x0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UoXHUwMDI2c3RhY2spO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IGFpcm9oYV9nZXRfZHNhX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKipkZXYpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuaW5kZXggY2M4YzRlZjgwMzhmMy4uNzcxZDkxMThmOTRhZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuQEAgLTEwOCwxNiArMTA4LDIwIEBAIG10a19mbG93X2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsIHN0cnVjdCBtdGtfd2RtYV9pXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRwYXRoID0gXHUwMDI2c3RhY2sucGF0aFtzdGFjay5udW1fcGF0aHMgLSAxXTtcbi1cdGlmIChwYXRoLVx1MDAzZXR5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpXG4tXHRcdHJldHVybiAtMTtcbitcdGlmIChwYXRoLVx1MDAzZXR5cGUgIT0gREVWX1BBVEhfTVRLX1dETUEpIHtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuIFxuIFx0aW5mby1cdTAwM2V3ZG1hX2lkeCA9IHBhdGgtXHUwMDNlbXRrX3dkbWEud2RtYV9pZHg7XG4gXHRpbmZvLVx1MDAzZXF1ZXVlID0gcGF0aC1cdTAwM2VtdGtfd2RtYS5xdWV1ZTtcbiBcdGluZm8tXHUwMDNlYnNzID0gcGF0aC1cdTAwM2VtdGtfd2RtYS5ic3M7XG4gXHRpbmZvLVx1MDAzZXdjaWQgPSBwYXRoLVx1MDAzZW10a193ZG1hLndjaWQ7XG4gXHRpbmZvLVx1MDAzZWFtc2R1ID0gcGF0aC1cdTAwM2VtdGtfd2RtYS5hbXNkdTtcbitlcnJfb3V0OlxuK1x0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UoXHUwMDI2c3RhY2spO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOGRiMjViNzk1NzNlMy4uNjJjZmFkN2U2Yjc5YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC04OTIsNiArODkyLDcgQEAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCB7XG4gXHRcdFx0dThcdFx0aF9kZXN0W0VUSF9BTEVOXTtcbiBcdFx0fSBlbmNhcDtcbiBcdFx0c3RydWN0IHtcbitcdFx0XHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XG4gXHRcdFx0dW5pb24ge1xuIFx0XHRcdFx0c3RydWN0IGluX2FkZHJcdHNyY192NDtcbiBcdFx0XHRcdHN0cnVjdCBpbjZfYWRkclx0c3JjX3Y2O1xuQEAgLTM0MjcsNiArMzQyOCw3IEBAIGludCBkZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuK3ZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xuIHN0cnVjdCBuZXRfZGV2aWNlICpfX2Rldl9nZXRfYnlfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IGMxYzFiZTFhNjk2MmYuLmU1MGVkNjc3ZGU3MjUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC03NDIsMTQgKzc0MiwzMyBAQCBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9tZXRhZGF0YV9kc3QpO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4ge1xuLVx0aW50IGsgPSBzdGFjay1cdTAwM2VudW1fcGF0aHMrKztcbi1cbi1cdGlmIChrIFx1MDAzZT0gTkVUX0RFVklDRV9QQVRIX1NUQUNLX01BWClcbitcdGlmIChzdGFjay1cdTAwM2VudW1fcGF0aHMgKyAxIFx1MDAzZSBORVRfREVWSUNFX1BBVEhfU1RBQ0tfTUFYKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdHJldHVybiBcdTAwMjZzdGFjay1cdTAwM2VwYXRoW2tdO1xuK1x0cmV0dXJuIFx1MDAyNnN0YWNrLVx1MDAzZXBhdGhbc3RhY2stXHUwMDNlbnVtX3BhdGhzXTtcbiB9XG4gXG4rdm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoO1xuK1x0aW50IGs7XG4rXG4rXHRpZiAoc3RhY2stXHUwMDNlbnVtX3BhdGhzID09IDApXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoayA9IHN0YWNrLVx1MDAzZW51bV9wYXRocyAtIDE7IGsgXHUwMDNlPSAwOyBrLS0pIHtcbitcdFx0cGF0aCA9IFx1MDAyNnN0YWNrLVx1MDAzZXBhdGhba107XG4rXHRcdHN3aXRjaCAocGF0aC1cdTAwM2V0eXBlKSB7XG4rXHRcdGNhc2UgREVWX1BBVEhfVFVOOlxuK1x0XHRcdGRzdF9yZWxlYXNlKHBhdGgtXHUwMDNldHVuLmRzdCk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UpO1xuK1xuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4ge1xuQEAgLTc2NiwxNSArNzg1LDE2IEBAIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRsYXN0X2RldiA9IGN0eC5kZXY7XG4gXHRcdHBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spO1xuIFx0XHRpZiAoIXBhdGgpXG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0bWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7XG4gXHRcdHJldCA9IGN0eC5kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBwYXRoKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuIFxuK1x0XHRzdGFjay1cdTAwM2VudW1fcGF0aHMrKztcbiBcdFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHguZGV2KSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuIFx0fVxuIFxuIFx0aWYgKCFjdHguZGV2KVxuQEAgLTc4MiwxMSArODAyLDE3IEBAIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFxuIFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4gXHRpZiAoIXBhdGgpXG4tXHRcdHJldHVybiAtMTtcbitcdFx0Z290byBlcnJfb3V0O1xuK1xuIFx0cGF0aC1cdTAwM2V0eXBlID0gREVWX1BBVEhfRVRIRVJORVQ7XG4gXHRwYXRoLVx1MDAzZWRldiA9IGN0eC5kZXY7XG4rXHRzdGFjay1cdTAwM2VudW1fcGF0aHMrKztcbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbitlcnJfb3V0OlxuK1x0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RhY2spO1xuK1xuK1x0cmV0dXJuIC0xO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9kc2EvdXNlci5jIGIvbmV0L2RzYS91c2VyLmNcbmluZGV4IDAzYzdhZjZhYmUxOGEuLjQwNjVjNmVlNmZjNjggMTAwNjQ0XG4tLS0gYS9uZXQvZHNhL3VzZXIuY1xuKysrIGIvbmV0L2RzYS91c2VyLmNcbkBAIC0yNTQ3LDE0ICsyNTQ3LDEzIEBAIHN0YXRpYyBpbnQgZHNhX3VzZXJfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4ge1xuIFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQoY3R4LVx1MDAzZWRldik7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCA9IGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApO1xuIFx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBkcC1cdTAwM2VjcHVfZHA7XG4gXG4gXHRwYXRoLVx1MDAzZWRldiA9IGN0eC1cdTAwM2VkZXY7XG4gXHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9EU0E7XG4gXHRwYXRoLVx1MDAzZWRzYS5wcm90byA9IGNwdV9kcC1cdTAwM2V0YWdfb3BzLVx1MDAzZXByb3RvO1xuIFx0cGF0aC1cdTAwM2Vkc2EucG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuLVx0Y3R4LVx1MDAzZWRldiA9IGNvbmR1aXQ7XG4rXHRjdHgtXHUwMDNlZGV2ID0gTlVMTDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmNcbmluZGV4IDA4MzFmNmI4MTcxN2MuLmZiN2Q5NmY5OWIwNmIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcGlwLmNcbisrKyBiL25ldC9pcHY0L2lwaXAuY1xuQEAgLTM3NiwxMCArMzc2LDEwIEBAIHN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0cGF0aC1cdTAwM2V0dW4uc3JjX3Y0LnNfYWRkciA9IHRpcGgtXHUwMDNlc2FkZHI7XG4gXHRwYXRoLVx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gdGlwaC1cdTAwM2VkYWRkcjtcbiBcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQO1xuK1x0cGF0aC1cdTAwM2V0dW4uZHN0ID0gXHUwMDI2cnQtXHUwMDNlZHN0O1xuIFx0cGF0aC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFxuIFx0Y3R4LVx1MDAzZWRldiA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4tXHRpcF9ydF9wdXQocnQpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmNcbmluZGV4IDQ2MjZkYzQ2ODA4ZjMuLjU5ZWM0NjVhOWRmOTggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuY1xuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9pcHY0L25mX3JlamVjdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaFx1MDAzZVxuQEAgLTI2Myw2ICsyNjQsNyBAQCBzdGF0aWMgaW50IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbilcbiBcdGlmICghZHN0KVxuIFx0XHRyZXR1cm4gLTE7XG4gXG4rXHRza2JfZHN0X2Ryb3Aoc2tiX2luKTtcbiBcdHNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0yNzksNyArMjgxLDcgQEAgdm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxuIFx0aWYgKCFvdGgpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghc2tiX2RzdChvbGRza2IpIFx1MDAyNlx1MDAyNiBuZl9yZWplY3RfZmlsbF9za2JfZHN0KG9sZHNrYikgXHUwMDNjIDApXG4rXHRpZiAoIXNrYl92YWxpZF9kc3Qob2xkc2tiKSBcdTAwMjZcdTAwMjYgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChvbGRza2IpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAoc2tiX3J0YWJsZShvbGRza2IpLVx1MDAzZXJ0X2ZsYWdzIFx1MDAyNiAoUlRDRl9CUk9BRENBU1QgfCBSVENGX01VTFRJQ0FTVCkpXG5AQCAtMzUyLDcgKzM1NCw3IEBAIHZvaWQgbmZfc2VuZF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCBjb2RlLCBpbnQgaG9vaylcbiBcdGlmIChpcGgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghc2tiX2RzdChza2JfaW4pIFx1MDAyNlx1MDAyNiBuZl9yZWplY3RfZmlsbF9za2JfZHN0KHNrYl9pbikgXHUwMDNjIDApXG4rXHRpZiAoIXNrYl92YWxpZF9kc3Qoc2tiX2luKSBcdTAwMjZcdTAwMjYgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChza2JfaW4pIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiX2luKSB8fFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggOTdjM2Y2MWQ2MjdiYi4uZDgwMDIwYmMyNjIwZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5AQCAtMTg3MCwxMiArMTg3MCwxNCBAQCBzdGF0aWMgaW50IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0cGF0aC1cdTAwM2V0dW4uc3JjX3Y2ID0gZmw2LnNhZGRyO1xuIFx0XHRwYXRoLVx1MDAzZXR1bi5kc3RfdjYgPSBmbDYuZGFkZHI7XG4gXHRcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2O1xuK1x0XHRwYXRoLVx1MDAzZXR1bi5kc3QgPSBkc3Q7XG4gXHRcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcdFx0Y3R4LVx1MDAzZWRldiA9IGRzdC1cdTAwM2VkZXY7XG4gXHR9XG4gXG4gXHRlcnIgPSBkc3QtXHUwMDNlZXJyb3I7XG4tXHRkc3RfcmVsZWFzZShkc3QpO1xuK1x0aWYgKGVycilcbitcdFx0ZHN0X3JlbGVhc2UoZHN0KTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmNcbmluZGV4IGVmNWI3ZTg1Y2ZmYTguLjA3Y2RhYTEwZGEwZDAgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuY1xuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2NoZWNrc3VtLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfcmVqZWN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oXHUwMDNlXG5AQCAtMzA0LDYgKzMwNSw3IEBAIHN0YXRpYyBpbnQgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbilcbiBcdGlmICghZHN0KVxuIFx0XHRyZXR1cm4gLTE7XG4gXG4rXHRza2JfZHN0X2Ryb3Aoc2tiX2luKTtcbiBcdHNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzYsMTAgKzMzOCwxMiBAQCB2b2lkIG5mX3NlbmRfcmVzZXQ2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxuIFx0Zmw2LmZsNl9zcG9ydCA9IG90Y3BoLVx1MDAzZWRlc3Q7XG4gXHRmbDYuZmw2X2Rwb3J0ID0gb3RjcGgtXHUwMDNlc291cmNlO1xuIFxuLVx0aWYgKCFza2JfZHN0KG9sZHNrYikpIHtcbitcdGlmICghc2tiX3ZhbGlkX2RzdChvbGRza2IpKSB7XG4gXHRcdG5mX2lwNl9yb3V0ZShuZXQsIFx1MDAyNmRzdCwgZmxvd2k2X3RvX2Zsb3dpKFx1MDAyNmZsNiksIGZhbHNlKTtcbiBcdFx0aWYgKCFkc3QpXG4gXHRcdFx0cmV0dXJuO1xuK1xuK1x0XHRza2JfZHN0X2Ryb3Aob2xkc2tiKTtcbiBcdFx0c2tiX2RzdF9zZXQob2xkc2tiLCBkc3QpO1xuIFx0fVxuIFxuQEAgLTQ0MCw3ICs0NDQsNyBAQCB2b2lkIG5mX3NlbmRfdW5yZWFjaDYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLFxuIFx0aWYgKGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9PVVQgXHUwMDI2XHUwMDI2IHNrYl9pbi1cdTAwM2VkZXYgPT0gTlVMTClcbiBcdFx0c2tiX2luLVx1MDAzZWRldiA9IG5ldC1cdTAwM2Vsb29wYmFja19kZXY7XG4gXG4tXHRpZiAoIXNrYl9kc3Qoc2tiX2luKSBcdTAwMjZcdTAwMjYgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc2tiX2luKSBcdTAwM2MgMClcbitcdGlmICghc2tiX3ZhbGlkX2RzdChza2JfaW4pIFx1MDAyNlx1MDAyNiBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChza2JfaW4pIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpY21wdjZfc2VuZChza2JfaW4sIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXG5pbmRleCBlOWVhNmQ5NDY2ZTc0Li44NTQ4N2Y5MmFmNTA2IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xuQEAgLTE1OCw2ICsxNTgsOCBAQCBzdGF0aWMgYm9vbCBnZXRfY3Rfb3JfdHVwbGVfZnJvbV9za2Ioc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGZvdW5kX2N0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTtcbitcdCp0dXBsZSA9IGZvdW5kX2N0LVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlO1xuK1x0KnpvbmUgPSBuZl9jdF96b25lKGZvdW5kX2N0KTtcbiBcdCpyZWZjb3VudGVkID0gdHJ1ZTtcbiBcdCpjdCA9IGZvdW5kX2N0O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbmluZGV4IGNlZWVkM2Q3ZmU1MjAuLjcyM2U5NDZhNzhmNDAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbkBAIC0xMjgxLDggKzEyODEsOSBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0aWYgKGN0LVx1MDAzZXByb3RvLnRjcC5yZXRyYW5zIFx1MDAzZT0gdG4tXHUwMDNldGNwX21heF9yZXRyYW5zIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHRpbWVvdXRzW25ld19zdGF0ZV0gXHUwMDNlIHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfUkVUUkFOU10pXG4gXHRcdHRpbWVvdXQgPSB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1JFVFJBTlNdO1xuLVx0ZWxzZSBpZiAodW5saWtlbHkoaW5kZXggPT0gVENQX1JTVF9TRVQpKVxuLVx0XHR0aW1lb3V0ID0gdGltZW91dHNbVENQX0NPTk5UUkFDS19DTE9TRV07XG4rXHRlbHNlIGlmICh1bmxpa2VseShpbmRleCA9PSBUQ1BfUlNUX1NFVCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgIG5ld19zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEKSlcbitcdFx0dGltZW91dCA9IHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfVU5BQ0tdO1xuIFx0ZWxzZSBpZiAoKGN0LVx1MDAzZXByb3RvLnRjcC5zZWVuWzBdLmZsYWdzIHwgY3QtXHUwMDNlcHJvdG8udGNwLnNlZW5bMV0uZmxhZ3MpIFx1MDAyNlxuIFx0XHQgSVBfQ1RfVENQX0ZMQUdfREFUQV9VTkFDS05PV0xFREdFRCBcdTAwMjZcdTAwMjZcbiBcdFx0IHRpbWVvdXRzW25ld19zdGF0ZV0gXHUwMDNlIHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfVU5BQ0tdKVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXG5pbmRleCA5OGMwM2I0ODdmNTIxLi41NjIxOWIwMmUxMjI3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuQEAgLTQyLDggKzQyLDcgQEAgc3RhdGljIGJvb2wgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4tXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSxcbitzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdFx0XHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG5AQCAtNzYsMTQgKzc1LDE0IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4gfVxuIFxuIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcbi1cdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbmRldjtcbi1cdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXRkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0c3RydWN0IGlkIHtcbiBcdFx0X191MTZcdGlkO1xuIFx0XHRfX2JlMTZcdHByb3RvO1xuIFx0fSBlbmNhcFtORl9GTE9XX1RBQkxFX0VOQ0FQX01BWF07XG4gXHR1OCBudW1fZW5jYXBzO1xuIFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWwgdHVuO1xuK1x0c3RydWN0IGRzdF9lbnRyeSAqdHVuX2RzdDtcbiBcdHU4IG51bV90dW5zO1xuIFx0dTggaW5ncmVzc192bGFucztcbiBcdHU4IGhfc291cmNlW0VUSF9BTEVOXTtcbkBAIC05Miw5ICs5MSwxMiBAQCBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XG4gXHRlbnVtIGZsb3dfb2ZmbG9hZF94bWl0X3R5cGUgeG1pdF90eXBlO1xuIH07XG4gXG4tc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbitzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQpO1xuK1xuK3N0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyAqaW5mbyxcbi1cdFx0XHQgICAgIHVuc2lnbmVkIGNoYXIgKmhhLCBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG4rXHRcdFx0ICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4gXHRpbnQgaTtcbkBAIC0xMDksMjkgKzExMSwyNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxuIFx0XHRjYXNlIERFVl9QQVRIX1ZMQU46XG4gXHRcdGNhc2UgREVWX1BBVEhfUFBQT0U6XG4gXHRcdGNhc2UgREVWX1BBVEhfVFVOOlxuLVx0XHRcdGluZm8tXHUwMDNlaW5kZXYgPSBwYXRoLVx1MDAzZWRldjtcbitcdFx0XHRpbmZvLVx1MDAzZWRldiA9IHBhdGgtXHUwMDNlZGV2O1xuIFx0XHRcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cdTAwM2VoX3NvdXJjZSkpXG4gXHRcdFx0XHRtZW1jcHkoaW5mby1cdTAwM2VoX3NvdXJjZSwgcGF0aC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbiBcbi1cdFx0XHRpZiAocGF0aC1cdTAwM2V0eXBlID09IERFVl9QQVRIX0VUSEVSTkVUKVxuK1x0XHRcdGlmIChwYXRoLVx1MDAzZXR5cGUgPT0gREVWX1BBVEhfRVRIRVJORVQgfHxcbitcdFx0XHQgICAgcGF0aC1cdTAwM2V0eXBlID09IERFVl9QQVRIX0RTQSlcbiBcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdGlmIChwYXRoLVx1MDAzZXR5cGUgPT0gREVWX1BBVEhfRFNBKSB7XG4tXHRcdFx0XHRpID0gc3RhY2stXHUwMDNlbnVtX3BhdGhzO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuIFxuIFx0XHRcdC8qIERFVl9QQVRIX1ZMQU4sIERFVl9QQVRIX1BQUE9FIGFuZCBERVZfUEFUSF9UVU4gKi9cbiBcdFx0XHRpZiAocGF0aC1cdTAwM2V0eXBlID09IERFVl9QQVRIX1RVTikge1xuIFx0XHRcdFx0aWYgKGluZm8tXHUwMDNlbnVtX3R1bnMpXG4tXHRcdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHRcdFx0Z290byBlcnJfb3V0O1xuIFxuIFx0XHRcdFx0aW5mby1cdTAwM2V0dW4uc3JjX3Y2ID0gcGF0aC1cdTAwM2V0dW4uc3JjX3Y2O1xuIFx0XHRcdFx0aW5mby1cdTAwM2V0dW4uZHN0X3Y2ID0gcGF0aC1cdTAwM2V0dW4uZHN0X3Y2O1xuIFx0XHRcdFx0aW5mby1cdTAwM2V0dW4ubDNfcHJvdG8gPSBwYXRoLVx1MDAzZXR1bi5sM19wcm90bztcbitcdFx0XHRcdGluZm8tXHUwMDNldHVuX2RzdCA9IHBhdGgtXHUwMDNldHVuLmRzdDtcbiBcdFx0XHRcdGluZm8tXHUwMDNlbnVtX3R1bnMrKztcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0aWYgKGluZm8tXHUwMDNlbnVtX2VuY2FwcyBcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxuLVx0XHRcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNlZW5jYXBbaW5mby1cdTAwM2VudW1fZW5jYXBzXS5pZCA9XG4gXHRcdFx0XHRcdHBhdGgtXHUwMDNlZW5jYXAuaWQ7XG5AQCAtMTUyLDEzICsxNTIsMTMgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHRzd2l0Y2ggKHBhdGgtXHUwMDNlYnJpZGdlLnZsYW5fbW9kZSkge1xuIFx0XHRcdGNhc2UgREVWX1BBVEhfQlJfVkxBTl9VTlRBR19IVzpcbiBcdFx0XHRcdGlmIChpbmZvLVx1MDAzZW51bV9lbmNhcHMgPT0gMClcbi1cdFx0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZWluZ3Jlc3NfdmxhbnMgfD0gQklUKGluZm8tXHUwMDNlbnVtX2VuY2FwcyAtIDEpO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0Y2FzZSBERVZfUEFUSF9CUl9WTEFOX1RBRzpcbiBcdFx0XHRcdGlmIChpbmZvLVx1MDAzZW51bV9lbmNhcHMgXHUwMDNlPSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWClcbi1cdFx0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZWVuY2FwW2luZm8tXHUwMDNlbnVtX2VuY2Fwc10uaWQgPSBwYXRoLVx1MDAzZWJyaWRnZS52bGFuX2lkO1xuIFx0XHRcdFx0aW5mby1cdTAwM2VlbmNhcFtpbmZvLVx1MDAzZW51bV9lbmNhcHNdLnByb3RvID0gcGF0aC1cdTAwM2VicmlkZ2Uudmxhbl9wcm90bztcbkBAIC0xNjYsNyArMTY2LDcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgREVWX1BBVEhfQlJfVkxBTl9VTlRBRzpcbiBcdFx0XHRcdGlmIChpbmZvLVx1MDAzZW51bV9lbmNhcHMgPT0gMClcbi1cdFx0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZW51bV9lbmNhcHMtLTtcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTE3NiwxNiArMTc2LDIyIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0aW5mby1cdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbiBcdFx0fVxuIFx0fVxuLVx0aW5mby1cdTAwM2VvdXRkZXYgPSBpbmZvLVx1MDAzZWluZGV2O1xuIFxuLVx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShpbmZvLVx1MDAzZWluZGV2KSlcbitcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChcdTAwMjZmdC1cdTAwM2VkYXRhKSBcdTAwMjZcdTAwMjZcbitcdCAgICBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGluZm8tXHUwMDNlZGV2KSlcbiBcdFx0aW5mby1cdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XG4gXG4rXHRpZiAoIW5mdF9mbG93dGFibGVfZmluZF9kZXYoaW5mby1cdTAwM2VkZXYsIGZ0KSlcbitcdFx0Z290byBlcnJfb3V0O1xuK1xuIFx0cmV0dXJuIDA7XG4rZXJyX291dDpcbitcdGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0YWNrKTtcbitcbitcdHJldHVybiAtMTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTIwNSw0NCArMjExLDYgQEAgc3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIGZvdW5kO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4tXHRcdFx0XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVubmVsICp0dW4sXG4tXHRcdFx0XHRcdHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbi1cdFx0XHRcdFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcilcbi17XG4tXHRzdHJ1Y3QgZHN0X2VudHJ5ICpjdXJfZHN0ID0gcm91dGUtXHUwMDNldHVwbGVbZGlyXS5kc3Q7XG4tXHRzdHJ1Y3QgZHN0X2VudHJ5ICp0dW5fZHN0ID0gTlVMTDtcbi1cdHN0cnVjdCBmbG93aSBmbCA9IHt9O1xuLVxuLVx0c3dpdGNoIChuZnRfcGYocGt0KSkge1xuLVx0Y2FzZSBORlBST1RPX0lQVjQ6XG4tXHRcdGZsLnUuaXA0LmRhZGRyID0gdHVuLVx1MDAzZWRzdF92NC5zX2FkZHI7XG4tXHRcdGZsLnUuaXA0LnNhZGRyID0gdHVuLVx1MDAzZXNyY192NC5zX2FkZHI7XG4tXHRcdGZsLnUuaXA0LmZsb3dpNF9paWYgPSBuZnRfaW4ocGt0KS1cdTAwM2VpZmluZGV4O1xuLVx0XHRmbC51LmlwNC5mbG93aTRfZHNjcCA9IGlwNGhfZHNjcChpcF9oZHIocGt0LVx1MDAzZXNrYikpO1xuLVx0XHRmbC51LmlwNC5mbG93aTRfbWFyayA9IHBrdC1cdTAwM2Vza2ItXHUwMDNlbWFyaztcbi1cdFx0ZmwudS5pcDQuZmxvd2k0X2ZsYWdzID0gRkxPV0lfRkxBR19BTllTUkM7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBORlBST1RPX0lQVjY6XG4tXHRcdGZsLnUuaXA2LmRhZGRyID0gdHVuLVx1MDAzZWRzdF92Njtcbi1cdFx0ZmwudS5pcDYuc2FkZHIgPSB0dW4tXHUwMDNlc3JjX3Y2O1xuLVx0XHRmbC51LmlwNi5mbG93aTZfaWlmID0gbmZ0X2luKHBrdCktXHUwMDNlaWZpbmRleDtcbi1cdFx0ZmwudS5pcDYuZmxvd2xhYmVsID0gaXA2X2Zsb3dpbmZvKGlwdjZfaGRyKHBrdC1cdTAwM2Vza2IpKTtcbi1cdFx0ZmwudS5pcDYuZmxvd2k2X21hcmsgPSBwa3QtXHUwMDNlc2tiLVx1MDAzZW1hcms7XG4tXHRcdGZsLnUuaXA2LmZsb3dpNl9mbGFncyA9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdG5mX3JvdXRlKG5mdF9uZXQocGt0KSwgXHUwMDI2dHVuX2RzdCwgXHUwMDI2ZmwsIGZhbHNlLCBuZnRfcGYocGt0KSk7XG4tXHRpZiAoIXR1bl9kc3QpXG4tXHRcdHJldHVybiAtRU5PRU5UO1xuLVxuLVx0cm91dGUtXHUwMDNldHVwbGVbZGlyXS5kc3QgPSB0dW5fZHN0O1xuLVx0ZHN0X3JlbGVhc2UoY3VyX2RzdCk7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdFx0XHRcdHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbkBAIC0yNTUsMjggKzIyMywyNSBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0dW5zaWduZWQgY2hhciBoYVtFVEhfQUxFTl07XG4gXHRpbnQgaTtcbiBcbi1cdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHJvdXRlLCBkc3QsIGN0LCBkaXIsIGhhLCBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbi1cdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIFx1MDAyNmZ0LVx1MDAzZWRhdGEpIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gLUVOT0VOVDtcbi1cbi1cdGlmICghbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihpbmZvLmluZGV2LCBmdCkpXG4rXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChkc3QsIGN0LCBkaXIsIGhhLCBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbitcdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIGZ0KSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4tXHRpZiAoaW5mby5vdXRkZXYpXG4tXHRcdHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0ub3V0LmlmaW5kZXggPSBpbmZvLm91dGRldi1cdTAwM2VpZmluZGV4O1xuK1x0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4uaWZpbmRleCA9IGluZm8uZGV2LVx1MDAzZWlmaW5kZXg7XG4rXHRyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLm91dC5pZmluZGV4ID0gaW5mby5kZXYtXHUwMDNlaWZpbmRleDtcbiBcbi1cdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLmlmaW5kZXggPSBpbmZvLmluZGV2LVx1MDAzZWlmaW5kZXg7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbmZvLm51bV9lbmNhcHM7IGkrKykge1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5lbmNhcFtpXS5pZCA9IGluZm8uZW5jYXBbaV0uaWQ7XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLmVuY2FwW2ldLnByb3RvID0gaW5mby5lbmNhcFtpXS5wcm90bztcbiBcdH1cbiBcbi1cdGlmIChpbmZvLm51bV90dW5zIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKHBrdCwgXHUwMDI2aW5mby50dW4sIHJvdXRlLCBkaXIpKSB7XG4rXHRpZiAoaW5mby5udW1fdHVucykge1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uc3JjX3Y2ID0gaW5mby50dW4uZHN0X3Y2O1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uZHN0X3Y2ID0gaW5mby50dW4uc3JjX3Y2O1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4ubDNfcHJvdG8gPSBpbmZvLnR1bi5sM19wcm90bztcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4ubnVtX3R1bnMgPSBpbmZvLm51bV90dW5zO1xuK1x0XHRkc3RfcmVsZWFzZShyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdCk7XG4rXHRcdHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0uZHN0ID0gaW5mby50dW5fZHN0O1xuIFx0fVxuIFxuIFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4ubnVtX2VuY2FwcyA9IGluZm8ubnVtX2VuY2FwcztcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmNcbmluZGV4IDBhNDNlMDc4N2E2ODguLjAxY2ZiYWEzNjUyNTAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuY1xuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwX3N0YXRlcy5oXHUwMDNlIC8qIGZvciBUQ1BfVElNRV9XQUlUICovXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaFx1MDAzZVxuQEAgLTI3OSwxMSArMjgwLDEyIEBAIHN0YXRpYyBib29sIG5mdF9tZXRhX2dldF9ldmFsX2lmbmFtZShlbnVtIG5mdF9tZXRhX2tleXMga2V5LCB1MzIgKmRlc3QsXG4gc3RhdGljIG5vaW5saW5lIGJvb2xcbiBuZnRfbWV0YV9nZXRfZXZhbF9ydGNsYXNzaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpkZXN0KVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3Qoc2tiKTtcbitcdGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcbiBcbi1cdGlmICghZHN0KVxuK1x0aWYgKCFza2JfdmFsaWRfZHN0KHNrYikpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdGRzdCA9IHNrYl9kc3Qoc2tiKTtcbiBcdCpkZXN0ID0gZHN0LVx1MDAzZXRjbGFzc2lkO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3J0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9ydC5jXG5pbmRleCBhZWIwMDk0ZWFmZDgwLi44NDFjODYzYTA4ZGI1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcnQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfcnQuY1xuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcm91dGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcdTAwM2VcbkBAIC01OSwxMCArNjAsMTEgQEAgdm9pZCBuZnRfcnRfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0dTMyICpkZXN0ID0gXHUwMDI2cmVncy1cdTAwM2VkYXRhW3ByaXYtXHUwMDNlZHJlZ107XG4gXHRjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XG4gXG4tXHRkc3QgPSBza2JfZHN0KHNrYik7XG4tXHRpZiAoIWRzdClcbitcdGlmICghc2tiX3ZhbGlkX2RzdChza2IpKVxuIFx0XHRnb3RvIGVycjtcbiBcbitcdGRzdCA9IHNrYl9kc3Qoc2tiKTtcbitcbiBcdHN3aXRjaCAocHJpdi1cdTAwM2VrZXkpIHtcbiAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX0NMQVNTSURcbiBcdGNhc2UgTkZUX1JUX0NMQVNTSUQ6XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jIGIvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jXG5pbmRleCA4Y2VjNDMwNjQzMTkyLi5jOGJiYTY5N2Y5OTNhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfeGZybS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmNcbkBAIC0xMiw2ICsxMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4gXG5AQCAtMTc3LDkgKzE3OCwxNSBAQCBzdGF0aWMgdm9pZCBuZnRfeGZybV9nZXRfZXZhbF9vdXQoY29uc3Qgc3RydWN0IG5mdF94ZnJtICpwcml2LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3QocGt0LVx1MDAzZXNrYik7XG4rXHRjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XG4gXHRpbnQgaTtcbiBcbitcdGlmICghc2tiX3ZhbGlkX2RzdChwa3QtXHUwMDNlc2tiKSkge1xuK1x0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0ZHN0ID0gc2tiX2RzdChwa3QtXHUwMDNlc2tiKTtcbiBcdGZvciAoaSA9IDA7IGRzdCBcdTAwMjZcdTAwMjYgZHN0LVx1MDAzZXhmcm07XG4gXHQgICAgIGRzdCA9ICgoY29uc3Qgc3RydWN0IHhmcm1fZHN0ICopZHN0KS1cdTAwM2VjaGlsZCwgaSsrKSB7XG4gXHRcdGlmIChpIFx1MDAzYyBwcml2LVx1MDAzZXNwbnVtKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTQ6NDAuOTYwOTA2NTcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0Mjc4NTY1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmtpbmcgU3Vic3lzdGVtIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyBhbmQgaXQncyB0b3VjaGluZyBhIHdob2xlIGJ1bmNoIG9mIGZpbGVzIHJlbGF0ZWQgdG8gbmV0d29ya2luZyDigJMgc3BlY2lmaWNhbGx5IGFyb3VuZCBgbmV0X2RldmljZV9wYXRoX3N0YWNrYCwgdGhlIGZvcndhcmQgcGF0aCBmaWxsaW5nLCBjb25udHJhY2ssIGZsb3cgdGFibGUgaW50ZXJhY3Rpb25zLCBhbmQgc2tiIGRlc3RpbmF0aW9uIHZhbGlkaXR5IGNoZWNrcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgYXJlIG1vc3RseSBmdW5jdGlvbmFsIGNoYW5nZXMgYWltZWQgYXQgYWRkcmVzc2luZyBtZW1vcnkgbGVha3MgcmVsYXRlZCB0byB0aGUgYGRzdF9yZWxlYXNlYCBhbmQgdHdlYWtpbmcgdGhlIGNvbm50cmFjayBhbmQgZmxvd3RhYmxlIGJlaGF2aW9ycy4gVGhhdCdzIGdvb2QsIGltcG9ydGFudCBzdHVmZi5cblxuRmlyc3QsIEkgc2VlIHNvbWUgY29uc2lzdGVudCBjaGFuZ2VzOlxuKiAgIEFkZGVkIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAgY2FsbHMgaW4gZXJyb3IgcGF0aHMgaW4gc2V2ZXJhbCBkcml2ZXJzLCBsaWtlIGFpcm9oYSBhbmQgbWVkaWF0ZWsuXG4qICAgVGhlIGBuZXRfZGV2aWNlX3BhdGhgIHN0cnVjdCBpbiBgbmV0ZGV2aWNlLmhgIGhhcyBhIG5ldyBgZHN0YCBmaWVsZCB3aXRoaW4gdGhlIGB0dW5gIHVuaW9uLCBhbmQgdGhlIG5ldyBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VgIGZ1bmN0aW9uIGlzIGRlY2xhcmVkLlxuKiAgIEkgc2VlIGEgbmV3IGltcGxlbWVudGF0aW9uIGZvciBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VgIGluIGBkZXYuY2AsIHdoaWNoIHNwZWNpZmljYWxseSByZWxlYXNlcyB0aGUgYGRzdGAgZW50cnkgZm9yIHRoZSB0dW5uZWxpbmcgY2FzZSBhbmQgbW9kaWZpY2F0aW9ucyB0byB0aGUgbWFpbiBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBmdW5jdGlvbiB0byBjYWxsIHRoZSByZWxlYXNlIGZ1bmN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuXG5cbkl0IGxvb2tzIGxpa2Ugd2UgYXJlIGNvcnJlY3RseSByZWxlYXNpbmcgYGRzdGAgb24gZXJyb3IsIHdoaWNoIHNob3VsZCByZWR1Y2UgcG90ZW50aWFsIG1lbW9yeSBsZWFrcy5cblxuQWxzbywgaXQgbG9va3MgbGlrZSBgZHNhX3VzZXJfZmlsbF9mb3J3YXJkX3BhdGhgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gc2V0IHRoZSBjb250ZXh0IGBkZXZgIG1lbWJlciB0byBOVUxMLCBhbmQgdGhlIHR1bm5lbGluZyBwYXRocyBpbiBJUHY0IGFuZCBJUHY2IGFyZSBub3cgc3RvcmluZyB0aGUgZGVzdGluYXRpb24gaW4gYHBhdGgtXHUwMDNldHVuLmRzdGAsIHJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IHJlbGVhc2luZyBpdCwgd2hpY2ggc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2UuXG5cblJlcGxhY2luZyBgIXNrYl9kc3Qoc2tiKWAgd2l0aCBgIXNrYl92YWxpZF9kc3Qoc2tiKWAgaXMgZ29vZC4gQWxzbywgaW4gdGhlIHJlamVjdCBjb2RlLCBzZXR0aW5nIGBza2JfZHN0X2Ryb3Aoc2tiKWAgcHJpb3IgdG8gYHNrYl9kc3Rfc2V0KHNrYiwgZHN0KWAgaXMgYWxzbyBpbXBvcnRhbnQuIFRoaXMgaW1wcm92ZXMgcm9idXN0bmVzcy5cblxuVGhlIENvbm50cmFjayBjaGFuZ2VzIHNlZW0gaW50ZXJlc3RpbmcuIEkgc2VlIGEgY2hhbmdlIHRvIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAsIHdoaWNoIGNvdWxkIGhhdmUgaW1wbGljYXRpb25zIG9uIHBlcmZvcm1hbmNlLiBUaGVyZSBpcyBhIGNoYW5nZSB0byBob3cgY29ubnRyYWNrIHR1cGxlcyBhcmUgYWNjZXNzZWQsIGFuZCBhIHRpbWVvdXQgY2hhbmdlIGFzIHdlbGwuXG5cbk5vdywgdGhlIGZsb3cgdGFibGUgc3R1ZmYgbG9va3MgdG8gaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIHN1cHBvcnQgdGhlIGNoYW5nZXMuIFRoZSByb3V0ZSBhcmd1bWVudCB3YXMgcmVtb3ZlZC4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYXJlIHRoZSBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIGFuZCBgbmZ0X2Rldl9wYXRoX2luZm9gLCBhbmQgbm93IHRoZSB0dW4gZGVzdGluYXRpb24gYGluZm8udHVuX2RzdGAgaXMgdXNlZC5cblxuR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMsIEknbSBnb2luZyB0byB3YW50IHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGVzZSBjb3JlIGZ1bmN0aW9ucy4gSSB3aWxsIG5lZWQgdG8gcmVhbGx5IGZvY3VzIG9uIHRoZSBjaGFuZ2VzIHJlbGF0aW5nIHRvIGVycm9yIGhhbmRsaW5nLCBuZXcgZnVuY3Rpb24gY2FsbHMsIGFuZCB0aGUgYWRkaXRpb24gb2YgY29ubnRyYWNrLlxuXG4qICAgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAsIHdoaWNoIGFyZSBjbGVhcmx5IGNlbnRyYWwuXG4qICAgYG5mdF9kZXZfZm9yd2FyZF9wYXRoYCBhbmQgYG5mdF9kZXZfcGF0aF9pbmZvYCwgYmVjYXVzZSBvZiB0aGVpciByb2xlIGluIHRoZSBmbG93IHRhYmxlIHBhdGguXG4qICAgVGhlIHJlamVjdGlvbiBmdW5jdGlvbiBjYWxscyBzdWNoIGFzIGBuZl9yZWplY3RfZmlsbF9za2JfZHN0YCBhbmQgYG5mX3NlbmRfcmVzZXRgLCBgbmZfc2VuZF91bnJlYWNoYC5cbiogICBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLCBhbmQgYGdldF9jdF9vcl90dXBsZV9mcm9tX3NrYmAsIGJlY2F1c2UgdGhpcyBpcyB0aGUgY29ubnRyYWNrIGZ1bmN0aW9uLlxuXG5JIHdhbnQgdG8gc2VlIHdoYXQgaXMgY2FsbGluZyBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLiBJJ2xsIHVzZSBncmVwIGZvciB0aGF0ISBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgdHVubmVsIHJvdXRlcyBhcmUgYmVpbmcgY2hvc2VuLiBMZXQgbWUgY2hlY2sgdGhlIGNhbGwgc2l0ZXMgZm9yIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjg1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE0OjUzLjM4ODc2NTIxOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI1MjMyMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9kZXZfZm9yd2FyZF9wYXRoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MTk3PXN0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMjEzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MjE0OnN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMTUtXFx0XFx0XFx0XFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yNjA9aW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMwMi1cXHRpZiAocm91dGUtXFx1MDAzZXR1cGxlW2Rpcl0ueG1pdF90eXBlXFx0PT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjMwMzpcXHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsIGRpciwgZnQpIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMwNC1cXHRcXHRnb3RvIGVycl9kc3RfcmVsZWFzZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzA2LVxcdGlmIChyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0ueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzozMDc6XFx0ICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgcm91dGUsIGN0LCAhZGlyLCBmdCkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzA4LVxcdFxcdGdvdG8gZXJyX2RzdF9yZWxlYXNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNDo1NS41MTQwMDQ5MDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzQ4ODExNTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTkZUIEZsb3cgUm91dGUqKlxuXG5Pa2F5LCBzbyB0aGUgYG5mdF9mbG93X3JvdXRlYCBmdW5jdGlvbi4gVGhhdCdzIG91ciBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgc3lzdGVtIGFjdHVhbGx5IHdvcmtzLCBhbmQgdGhhdCBtZWFucyB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aC4gVGhlcmVmb3JlLCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSAqZXZlcnkgc2luZ2xlKiBpbnN0YW5jZSB3aGVyZSBgbmZ0X2Zsb3dfcm91dGVgIGlzIGNhbGxlZC4gRmluZGluZyB0aG9zZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBjb250ZXh0IEkgbmVlZCB0byBncmFzcCB0aGUgbG9naWMgZmxvdy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hlcmUgaXQncyBiZWluZyB1c2VkLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGtleSB0byB1bnBhY2tpbmcgdGhlIGJlaGF2aW9yIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA4NiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE0OjU4LjI2MjgxODY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mzc0OTQ1MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Zsb3dfcm91dGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0yNDc9c3RydWN0IG5mdF9wa3RpbmZvO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MjQ4OmludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQ5LVxcdFxcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MjE0PXN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTI1OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjI2MDppbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTI2MS1cXHRcXHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMxNi19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzozMTc6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X2Zsb3dfcm91dGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NTA9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTEwOC1cXHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MTA5OlxcdGlmIChuZnRfZmxvd19yb3V0ZShwa3QsIGN0LCBcXHUwMDI2cm91dGUsIGRpciwgcHJpdi1cXHUwMDNlZmxvd3RhYmxlKSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTEwLVxcdFxcdGdvdG8gZXJyX2Zsb3dfcm91dGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjAwLjAwMDMxODEwNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MjcxNTcwNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqQW5hbHl6aW5nIEtleSBGdW5jdGlvbnMgaW4gdGhlIE5ldGZpbHRlciBGbG93IGFuZCBDb25uZWN0aW9uIFRyYWNraW5nIFBhdGgqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gaG93IHdlJ3JlIGhhbmRsaW5nIGZsb3cgdGFibGUgY2hhbmdlcywgYW5kIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIGlzIGNsZWFybHkgdGhlIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50IGhlcmUsIHRoZSBtYWluIGVudHJ5IGludG8gdGhlIG5ldyBmbG93IHRhYmxlIHBhdGguIEJ1dCBJIGNhbid0IGp1c3Qgc3RvcCB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSwgdG8gY29uc2lkZXIgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzLiBNeSBtaW5kIGlzIGp1bXBpbmcgYXJvdW5kIGZ1bmN0aW9ucywgc2VhcmNoaW5nIGZvciBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuXG5cbk5vdywgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YC4uLiB0aGF0J3MgYSAqY29yZSogZnVuY3Rpb24gd2l0aGluIGNvbm50cmFjaywgcmlnaHQ/IEFueSBjaGFuZ2UgaGVyZSBjb3VsZCBiZS4uLiBzaWduaWZpY2FudC4gSXQncyBhIGZvdW5kYXRpb25hbCBlbGVtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGF0aHMgaW50ZXJhY3QuXG5cbkFuZCB0aGVuIHRoZXJlJ3MgYG5mX3JlamVjdF9maWxsX3NrYl9kc3RgLiBUaGF04oCZcyBjYWxsZWQgZnJvbSBgbmZfc2VuZF9yZXNldGAgYW5kIGBuZl9zZW5kX3VucmVhY2hgLiBUaGVzZSBmdW5jdGlvbnMgaGFuZGxlIElDTVAgcmVzcG9uc2VzIHRvIGRyb3BwZWQgcGFja2V0cy4gSXMgdGhlcmUgYSBkZXBlbmRlbmN5IHRoZXJlPyBUaGlzIGxpa2VseSBoYXMgdG8gYmUgY2hlY2tlZCwgYXMgdGhpcyBjb3VsZCBoYXZlIHRoZSBwb3RlbnRpYWwgZm9yIGEgbG90IG9mIGNvbXBsZXhpdHkuIFRoZSBwYXRoIGZvcndhcmQgaGFzIHRvIGJlIGNsZWFyLlxuXG5TbywgSSdtIGFscmVhZHkgYXNraW5nIG15c2VsZiBob3cgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBmdW5jdGlvbnMgd29yay4gSSBuZWVkIHRvIGtlZXAgdHJhY2luZyB0aGVzZSByZWxhdGlvbnNoaXBzLCB0aGlua2luZyBhYm91dCBob3cgY2hhbmdlcyBpbiBvbmUgcGxhY2UgbWlnaHQgaW5mbHVlbmNlIG90aGVycywgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBgbmZfc2VuZF9yZXNldGAgaXRzZWxmLi4uIHdoYXQncyBpdHMgcm9sZT8gVGhpcyBpcyB3aGVyZSBJIGFtIHJpZ2h0IG5vdywgZGlnZ2luZyBpbiBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzczMiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjA0LjcyNzQ3ODY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDQ5NTUwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfc2VuZF9yZXNldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9yZWplY3QuaD0xMD12b2lkIG5mX3NlbmRfdW5yZWFjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgY29kZSwgaW50IGhvb2spO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX3JlamVjdC5oOjExOnZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICosIHN0cnVjdCBza19idWZmICpvbGRza2IsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjQvbmZfcmVqZWN0LmgtMTItXFx0XFx0ICAgaW50IGhvb2spO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjYvbmZfcmVqZWN0Lmg9OD12b2lkIG5mX3NlbmRfdW5yZWFjaDYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCB1bnNpZ25lZCBjaGFyIGNvZGUsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjYvbmZfcmVqZWN0LmgtOS1cXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjYvbmZfcmVqZWN0Lmg6MTA6dm9pZCBuZl9zZW5kX3Jlc2V0NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9yZWplY3QuaC0xMS1cXHRcXHQgICAgaW50IGhvb2spO1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYz0zMT1yZWplY3RfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYy01OC1cXHRjYXNlIElQVF9UQ1BfUkVTRVQ6XFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYzo1OTpcXHRcXHRuZl9zZW5kX3Jlc2V0KHh0X25ldChwYXIpLCBwYXItXFx1MDAzZXN0YXRlLVxcdTAwM2Vzaywgc2tiLCBob29rKTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jLTYwLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MjU2PXN0YXRpYyBpbnQgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMjcyLS8qIFNlbmQgUlNUIHJlcGx5ICovXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM6MjczOnZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0yNzQtXFx0XFx0ICAgaW50IGhvb2spXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zNDUtfVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jOjM0NjpFWFBPUlRfU1lNQk9MX0dQTChuZl9zZW5kX3Jlc2V0KTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zNDctXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY0LmM9MTk9c3RhdGljIHZvaWQgbmZ0X3JlamVjdF9pcHY0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jLTI5LVxcdGNhc2UgTkZUX1JFSkVDVF9UQ1BfUlNUOlxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjQuYzozMDpcXHRcXHRuZl9zZW5kX3Jlc2V0KG5mdF9uZXQocGt0KSwgbmZ0X3NrKHBrdCksIHBrdC1cXHUwMDNlc2tiLFxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjQuYy0zMS1cXHRcXHRcXHQgICAgICBuZnRfaG9vayhwa3QpKTtcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jPTM1PXJlamVjdF90ZzYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMtNjMtXFx0Y2FzZSBJUDZUX1RDUF9SRVNFVDpcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9SRUpFQ1QuYzo2NDpcXHRcXHRuZl9zZW5kX3Jlc2V0NihuZXQsIHBhci1cXHUwMDNlc3RhdGUtXFx1MDAzZXNrLCBza2IsIHh0X2hvb2tudW0ocGFyKSk7XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMtNjUtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYz0yOTc9c3RhdGljIGludCBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtMzEyLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jOjMxMzp2b2lkIG5mX3NlbmRfcmVzZXQ2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jLTMxNC1cXHRcXHQgICAgaW50IGhvb2spXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy00MTMtfVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jOjQxNDpFWFBPUlRfU1lNQk9MX0dQTChuZl9zZW5kX3Jlc2V0Nik7XFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtNDE1LVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2Ni5jPTE5PXN0YXRpYyB2b2lkIG5mdF9yZWplY3RfaXB2Nl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjYuYy0zMC1cXHRjYXNlIE5GVF9SRUpFQ1RfVENQX1JTVDpcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY2LmM6MzE6XFx0XFx0bmZfc2VuZF9yZXNldDYobmZ0X25ldChwa3QpLCBuZnRfc2socGt0KSwgcGt0LVxcdTAwM2Vza2IsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2Ni5jLTMyLVxcdFxcdFxcdCAgICAgICBuZnRfaG9vayhwa3QpKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pbmV0LmM9MTc9c3RhdGljIHZvaWQgbmZ0X3JlamVjdF9pbmV0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcmVqZWN0X2luZXQuYy0zMC1cXHRcXHRjYXNlIE5GVF9SRUpFQ1RfVENQX1JTVDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaW5ldC5jOjMxOlxcdFxcdFxcdG5mX3NlbmRfcmVzZXQobmZ0X25ldChwa3QpLCBuZnRfc2socGt0KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaW5ldC5jLTMyLVxcdFxcdFxcdFxcdCAgICAgIHBrdC1cXHUwMDNlc2tiLCBuZnRfaG9vayhwa3QpKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pbmV0LmMtNDctXFx0XFx0Y2FzZSBORlRfUkVKRUNUX1RDUF9SU1Q6XFxubmV0L25ldGZpbHRlci9uZnRfcmVqZWN0X2luZXQuYzo0ODpcXHRcXHRcXHRuZl9zZW5kX3Jlc2V0NihuZnRfbmV0KHBrdCksIG5mdF9zayhwa3QpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pbmV0LmMtNDktXFx0XFx0XFx0XFx0ICAgICAgIHBrdC1cXHUwMDNlc2tiLCBuZnRfaG9vayhwa3QpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTU6MDYuMTcyNDM4NjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk1NDkyMTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTmV0ZmlsdGVyIEV4cHJlc3Npb24gRXZhbHVhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIE5ldGZpbHRlciBlbnRyeSBwb2ludHMgYW5kIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlcy4gSSBzZWUgYG5mdF9yZWplY3RfaXB2NF9ldmFsYCwgYG5mdF9yZWplY3RfaXB2Nl9ldmFsYCwgYG5mdF9yZWplY3RfaW5ldF9ldmFsYCwgYHJlamVjdF90Z2AsIGFuZCBgcmVqZWN0X3RnNmAuIFRob3NlIGxvb2sgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgY2xlYXJseSB0aGUgcmVqZWN0aW9uIG1lY2hhbmlzbXMgZm9yIGRpZmZlcmVudCBJUCB2ZXJzaW9ucyBhbmQgcG90ZW50aWFsbHkgdHJhZmZpYyBncm91cHMuXG5cbkJ1dCB3aGF0IGFib3V0IHRoZXNlIG90aGVycz8gYG5mdF9tZXRhX2dldF9ldmFsX3J0Y2xhc3NpZGAsIGBuZnRfcnRfZ2V0X2V2YWxgLCBhbmQgYG5mdF94ZnJtX2dldF9ldmFsX291dGA/IEhtbSwgdGhvc2UgbmFtZXMgc3VnZ2VzdCB0aGV5J3JlIGFsc28gZXZhbHVhdGlvbiBmdW5jdGlvbnMsIGJ1dCBsaWtlbHkgZm9yIG1vcmUgc3BlY2lhbGl6ZWQgcHVycG9zZXMuIFRoZXkgc2VlbSB0byBiZSBkZWFsaW5nIHdpdGggdGhpbmdzIGxpa2UgbWV0YWRhdGEsIHJvdXRpbmcsIGFuZCB4ZnJtIChJUHNlYywgSSdtIGd1ZXNzaW5nKS5cblxuTGV0J3MgYnJlYWsgaXQgZG93biBmdXJ0aGVyLCBhbmQgSSByZW1lbWJlciBgbmZ0X21ldGFfZ2V0X2V2YWxgIGlzIHRoZSBrZXkgZW50cnkgZm9yICptZXRhKiwgYW5kIGBuZnRfcnRfZ2V0X2V2YWxgIGZvciAqcnQqLiBBbHNvLCBJIG5vdyBzZWUgYG5mdF94ZnJtX2dldF9ldmFsX291dGAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIFhGUk0gZXZhbHVhdGlvbnMuIFNvIHRoZXkgaGF2ZSBhIGNsZWFyIGhpZXJhcmNoeS5cblxuTGV0J3MgZGlnIGludG8gYG5mdF9tZXRhX2dldF9ldmFsYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3MTgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTU6MTAuMTY3OTMzNDY0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI2NTI2OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9tZXRhX2dldF9ldmFsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oPTEzMT1zdHJ1Y3QgbmZ0X3BrdGluZm87XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmg6MTMyOnZvaWQgbmZ0X21ldGFfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oLTEzMy1cXHRcXHQgICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCk7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuaD0yOT1pbnQgbmZ0X21ldGFfc2V0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZnRfbWV0YS5oLTMxLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZnRfbWV0YS5oOjMyOnZvaWQgbmZ0X21ldGFfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZnRfbWV0YS5oLTMzLVxcdFxcdCAgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZnRfbWV0YV9icmlkZ2UuYz0yND1zdGF0aWMgdm9pZCBuZnRfbWV0YV9icmlkZ2VfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvbmZ0X21ldGFfYnJpZGdlLmMtNzMtXFx0ZGVmYXVsdDpcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZnRfbWV0YV9icmlkZ2UuYzo3NDpcXHRcXHRyZXR1cm4gbmZ0X21ldGFfZ2V0X2V2YWwoZXhwciwgcmVncywgcGt0KTtcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZnRfbWV0YV9icmlkZ2UuYy03NS1cXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MjAzPXN0YXRpYyB2b2lkIGV4cHJfY2FsbF9vcHNfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjIwLVxcdFgoZSwgbmZ0X2NvdW50ZXJfZXZhbCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjIyMTpcXHRYKGUsIG5mdF9tZXRhX2dldF9ldmFsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjIyLVxcdFgoZSwgbmZ0X2xvb2t1cF9ldmFsKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz02Mz1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NjQ6bmZ0X21ldGFfZ2V0X2V2YWxfdGltZShlbnVtIG5mdF9tZXRhX2tleXMga2V5LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy02NS1cXHRcXHQgICAgICAgdTMyICpkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jPTgyPXN0YXRpYyBub2lubGluZSBib29sXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjgzOm5mdF9tZXRhX2dldF9ldmFsX3BrdHR5cGVfbG8oY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTg0LVxcdFxcdFxcdCAgICAgdTMyICpkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jPTEzMj1zdGF0aWMgbm9pbmxpbmUgYm9vbFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzoxMzM6bmZ0X21ldGFfZ2V0X2V2YWxfc2t1Z2lkKGVudW0gbmZ0X21ldGFfa2V5cyBrZXksXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTEzNC1cXHRcXHRcXHQgdTMyICpkZXN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jPTE3MT1zdGF0aWMgbm9pbmxpbmUgYm9vbFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzoxNzI6bmZ0X21ldGFfZ2V0X2V2YWxfY2dyb3VwKHUzMiAqZGVzdCwgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTE3My17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMTgzLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzoxODQ6c3RhdGljIG5vaW5saW5lIGJvb2wgbmZ0X21ldGFfZ2V0X2V2YWxfa2luZChlbnVtIG5mdF9tZXRhX2tleXMga2V5LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy0xODUtXFx0XFx0XFx0XFx0XFx0ICAgIHUzMiAqZGVzdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz0yMjc9c3RhdGljIGJvb2wgbmZ0X21ldGFfc3RvcmVfaWZncm91cCh1MzIgKmRlc3QsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMjM1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzoyMzY6c3RhdGljIGJvb2wgbmZ0X21ldGFfZ2V0X2V2YWxfaWZuYW1lKGVudW0gbmZ0X21ldGFfa2V5cyBrZXksIHUzMiAqZGVzdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMjM3LVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM9MjgwPXN0YXRpYyBub2lubGluZSBib29sXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjI4MTpuZnRfbWV0YV9nZXRfZXZhbF9ydGNsYXNzaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpkZXN0KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy0yODIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTI5My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6Mjk0OnN0YXRpYyBub2lubGluZSB1MzIgbmZ0X21ldGFfZ2V0X2V2YWxfc2RpZihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMjk1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz0zMDY9c3RhdGljIG5vaW5saW5lIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6MzA3Om5mdF9tZXRhX2dldF9ldmFsX3NkaWZuYW1lKHUzMiAqZGVzdCwgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTMwOC17XFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjMwOTpcXHR1MzIgc2RpZiA9IG5mdF9tZXRhX2dldF9ldmFsX3NkaWYocGt0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMzEwLVxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM9MzE2PXN0YXRpYyB2b2lkIG5mdF9tZXRhX3BrdGluZm9fbWF5X3VwZGF0ZShzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy0zNjMtXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjM2NDp2b2lkIG5mdF9tZXRhX2dldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtMzY1LVxcdFxcdCAgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDAyLVxcdGNhc2UgTkZUX01FVEFfT0lGR1JPVVA6XFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjQwMzpcXHRcXHRpZiAoIW5mdF9tZXRhX2dldF9ldmFsX2lmbmFtZShwcml2LVxcdTAwM2VrZXksIGRlc3QsIHBrdCkpXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQwNC1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00MDctXFx0Y2FzZSBORlRfTUVUQV9TS0dJRDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDA4OlxcdFxcdGlmICghbmZ0X21ldGFfZ2V0X2V2YWxfc2t1Z2lkKHByaXYtXFx1MDAzZWtleSwgZGVzdCwgcGt0KSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDA5LVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQxMi1cXHRjYXNlIE5GVF9NRVRBX1JUQ0xBU1NJRDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDEzOlxcdFxcdGlmICghbmZ0X21ldGFfZ2V0X2V2YWxfcnRjbGFzc2lkKHNrYiwgZGVzdCkpXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQxNC1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00MjctXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjQyODpcXHRcXHRpZiAoIW5mdF9tZXRhX2dldF9ldmFsX3BrdHR5cGVfbG8ocGt0LCBkZXN0KSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDI5LVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQzNS1cXHRjYXNlIE5GVF9NRVRBX0NHUk9VUDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDM2OlxcdFxcdGlmICghbmZ0X21ldGFfZ2V0X2V2YWxfY2dyb3VwKGRlc3QsIHBrdCkpXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQzNy1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00NDktXFx0Y2FzZSBORlRfTUVUQV9PSUZLSU5EOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzo0NTA6XFx0XFx0aWYgKCFuZnRfbWV0YV9nZXRfZXZhbF9raW5kKHByaXYtXFx1MDAzZWtleSwgZGVzdCwgcGt0KSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDUxLVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQ1NS1cXHRjYXNlIE5GVF9NRVRBX1RJTUVfSE9VUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDU2OlxcdFxcdG5mdF9tZXRhX2dldF9ldmFsX3RpbWUocHJpdi1cXHUwMDNla2V5LCBkZXN0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDU3LVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00NTgtXFx0Y2FzZSBORlRfTUVUQV9TRElGOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzo0NTk6XFx0XFx0KmRlc3QgPSBuZnRfbWV0YV9nZXRfZXZhbF9zZGlmKHBrdCk7XFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTQ2MC1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDYxLVxcdGNhc2UgTkZUX01FVEFfU0RJRk5BTUU6XFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjQ2MjpcXHRcXHRuZnRfbWV0YV9nZXRfZXZhbF9zZGlmbmFtZShkZXN0LCBwa3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy00NjMtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDcyLX1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDczOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9tZXRhX2dldF9ldmFsKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDc0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jPTgwMz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfbWV0YV9nZXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTgwNS1cXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9tZXRhKSksXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjgwNjpcXHQuZXZhbFxcdFxcdD0gbmZ0X21ldGFfZ2V0X2V2YWwsXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTgwNy1cXHQuaW5pdFxcdFxcdD0gbmZ0X21ldGFfZ2V0X2luaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjExLjU5NDQ2NTk2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzc1NTQzODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDb25zaWRlcmluZyBFdmFsdWF0aW9uIEZ1bmN0aW9ucyBmb3IgRm9jdXMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIHN0YXJ0IHJlYWxseSBkaWdnaW5nIGluLiBgbmZ0X21ldGFfZ2V0X2V2YWxgIHNlZW1zIGxpa2UgYSBzb2xpZCwgb2J2aW91cyBzdGFydGluZyBwb2ludCBmb3IgZm9jdXNpbmcgb24gZXZhbHVhdGlvbiBmdW5jdGlvbnMuIEl0J3MgYSBrZXkgZnVuY3Rpb24sIGJ1dCBpcyBpdCB0aGUgKmJlc3QqPyBNeSBleHBlcmllbmNlIGlzIHRoYXQgb25lIGZ1bmN0aW9uIGlzIHJhcmVseSB0aGUgd2hvbGUgc3RvcnkuXG5cbkxldCdzIHNlZeKApiBXaGF0IGFib3V0IGBuZnRfcnRfZ2V0X2V2YWxgPyBJIG5lZWQgdG8gY29uc2lkZXIgaXQsIHRvby4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgY291bGQgbGVhZCB0byBzb21lIGludGVyZXN0aW5nIGluc2lnaHRzLiBJdCdzIHByb2JhYmx5IHdvcnRoIGludmVzdGlnYXRpbmcgaXRzIHJvbGUgYW5kIGhvdyBpdCByZWxhdGVzIHRvIGBuZnRfbWV0YV9nZXRfZXZhbGAuIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoZXNlIHR3bywgYW5kIGxpa2VseSBvdGhlcnMsIGludGVyYWN0IHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgZXZhbHVhdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU0NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjE0LjM3MDAxMzIyNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMTE2NTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfcnRfZ2V0X2V2YWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmg9MTQ4PXZvaWQgbmZ0X2R5bnNldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaC0xNDktXFx0XFx0ICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaDoxNTA6dm9pZCBuZnRfcnRfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5oLTE1MS1cXHRcXHQgICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncywgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTIwMz1zdGF0aWMgdm9pZCBleHByX2NhbGxfb3BzX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIyOS1cXHRYKGUsIG5mdF9keW5zZXRfZXZhbCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjIzMDpcXHRYKGUsIG5mdF9ydF9nZXRfZXZhbCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIzMS1cXHRYKGUsIG5mdF9iaXR3aXNlX2V2YWwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYz0yMj1zdGF0aWMgdTE2IGdldF90Y3Btc3MoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKnNrYmRzdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmMtNTMtXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYzo1NDp2b2lkIG5mdF9ydF9nZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYy01NS1cXHRcXHQgICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmM9MTkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9ydF9nZXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYy0xOTUtXFx0LnNpemVcXHRcXHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcnQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9ydC5jOjE5NjpcXHQuZXZhbFxcdFxcdD0gbmZ0X3J0X2dldF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmMtMTk3LVxcdC5pbml0XFx0XFx0PSBuZnRfcnRfZ2V0X2luaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjE1Ljc5MTE4MzU2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzE3NzMxODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipFdmFsdWF0aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGZvciBOZXR3b3JrIEZpbHRlciBSdWxlcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBnb29kIHN5bWJvbHMgdG8gcmVhbGx5IGhvbWUgaW4gb24gd2hlbiBkaWdnaW5nIGludG8gdGhlIG5ldHdvcmsgZmlsdGVyIGV2YWx1YXRpb24gcHJvY2Vzcy4gV2UncmUgYWxyZWFkeSB1c2luZyBgbmZ0X3J0X2dldF9ldmFsYCwgYW5kIHRoYXQncyBzb2xpZCDigJMgaXQncyBkZWZpbml0ZWx5IGEga2V5IHBvaW50IHRvIGV4YW1pbmUuIEJ1dCBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsLiBUaGUgYG5mdF94ZnJtX2dldF9ldmFsX291dGAgZnVuY3Rpb24ganVzdCBwb3BwZWQgaW50byBteSBoZWFkLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBpdCdzIGFub3RoZXIgZ29vZCBjYW5kaWRhdGUgZm9yIGNsb3NlciBpbnNwZWN0aW9uLCBhbmQgaWYgaXQgaXMsIEkgY2FuIGRldGVybWluZSB3aHkgYW5kIHdoZXJlIGl0IG1heSBiZSBiZW5lZmljaWFsIHRvIGFuYWx5emUuIEkgbmVlZCB0byBtYXAgdGhlIGV2YWx1YXRpb24gZnVuY3Rpb24gbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzExLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTU6MTguNTA4OTE3NDE3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUwMjU0MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF94ZnJtX2dldF9ldmFsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYz0xMjA9c3RhdGljIHZvaWQgbmZ0X3hmcm1fc3RhdGVfZ2V0X2tleShjb25zdCBzdHJ1Y3QgbmZ0X3hmcm0gKnByaXYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTYwLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoxNjE6c3RhdGljIHZvaWQgbmZ0X3hmcm1fZ2V0X2V2YWxfaW4oY29uc3Qgc3RydWN0IG5mdF94ZnJtICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0xNjItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0xNzYtXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjE3NzpzdGF0aWMgdm9pZCBuZnRfeGZybV9nZXRfZXZhbF9vdXQoY29uc3Qgc3RydWN0IG5mdF94ZnJtICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0xNzgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMjAxLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoyMDI6c3RhdGljIHZvaWQgbmZ0X3hmcm1fZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMDMtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTIwOS1cXHRjYXNlIFhGUk1fUE9MSUNZX0lOOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoyMTA6XFx0XFx0bmZ0X3hmcm1fZ2V0X2V2YWxfaW4ocHJpdiwgcmVncywgcGt0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMjExLVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMTItXFx0Y2FzZSBYRlJNX1BPTElDWV9PVVQ6XFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjIxMzpcXHRcXHRuZnRfeGZybV9nZXRfZXZhbF9vdXQocHJpdiwgcmVncywgcGt0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMjE0LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jPTI3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfeGZybV9nZXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTI3Mi1cXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF94ZnJtKSksXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjI3MzpcXHQuZXZhbFxcdFxcdD0gbmZ0X3hmcm1fZ2V0X2V2YWwsXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTI3NC1cXHQuaW5pdFxcdFxcdD0gbmZ0X3hmcm1fZ2V0X2luaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjE5Ljk1OTE3NjAxN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA4MDA4NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgTkZUIFRyYW5zZm9ybWF0aW9uIExvZ2ljKipcblxuT2theSwgYG5mdF94ZnJtX2dldF9ldmFsYCBzZWVtcyBsaWtlIGEga2V5IGZ1bmN0aW9uIHRvIHplcm8gaW4gb24gcmlnaHQgbm93LiBJdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBOZXR3b3JrIEZpbHRlciBUYWJsZSAoTkZUKSBmcmFtZXdvcmsgaGFuZGxlcyB0cmFuc2Zvcm1hdGlvbnMuIEkgc3VzcGVjdCBpdCdzIHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIGFuZCBldmFsdWF0aW5nIHRoZSBzcGVjaWZpYyB0cmFuc2Zvcm1hdGlvbiB0byBiZSBhcHBsaWVkLCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwYWNrZXQgZGF0YS4gTXkgZ3V0IHNheXMgdGhpcyBpcyB3aGVyZSB0aGUgcG9saWN5IHNlbGVjdGlvbiBhbmQgdHJhbnNmb3JtYXRpb24gc2V0dXAgaW50ZXJ0d2luZS4gSSdtIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IHRoZSBYRlJNLXJlbGF0ZWQgZGV0YWlscyBhcmUgcmVzb2x2ZWQuXG5cbk5leHQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLiBUaGlzIHNvdW5kcyBwcm9taXNpbmcsIHBvc3NpYmx5IHJlbGF0ZWQgdG8gcGF0aCBzZWxlY3Rpb24gb3Igcm91dGluZyB3aXRoaW4gdGhlIGRldmljZSBjb250ZXh0LCB3aGljaCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGZvciBwZXJmb3JtYW5jZS4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIGtleSBwYXJ0IGluIGhvdyB0aGUgdHJhbnNmb3JtZWQgcGFja2V0cyBhcmUgZm9yd2FyZGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMgZXNzZW50aWFsIHRvIHNlZWluZyBob3cgdGhlIHBhY2tldCBmbG93cyBhcmUgaGFuZGxlZCB3aXRoIHRyYW5zZm9ybWF0aW9ucyBhcHBsaWVkLiBMZXQncyBzZWUgaG93IHRoZSBwYWNrZXQgaXMgYWN0dWFsbHkgcm91dGVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEyMiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjIzLjE2NzE4NzAzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5NDI2MDAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfZmlsbF9mb3J3YXJkX3BhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0yODI9c3RhdGljIGludCBhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTI5Mi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoyOTM6XFx0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgXFx1MDAyNnN0YWNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTI5NC1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzA3LWVycl9vdXQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozMDg6XFx0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UoXFx1MDAyNnN0YWNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTMwOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jPTkyPW10a19mbG93X2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsIHN0cnVjdCBtdGtfd2RtYV9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMTA0LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYzoxMDU6XFx0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgXFx1MDAyNnN0YWNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMDYtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMjEtZXJyX291dDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYzoxMjI6XFx0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UoXFx1MDAyNnN0YWNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMjMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTM0Mjg9aW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjM0Mjk6aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNDMwLVxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MzQzMTp2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM0MzItc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9NzU2PXN0YXRpYyBpbnQgdmxhbl9kZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzYyLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jOjc2MzpzdGF0aWMgaW50IHZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzY0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTEwOS1cXHQubmRvX2dldF9pZmxpbmtcXHRcXHQ9IHZsYW5fZGV2X2dldF9pZmxpbmssXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTExMDpcXHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoXFx0PSB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aCxcXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMTExLVxcdC5uZG9faHd0c3RhbXBfZ2V0XFx0PSB2bGFuX2h3dHN0YW1wX2dldCxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTc0Mz1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzUwLVxcbm5ldC9jb3JlL2Rldi5jOjc1MTp2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbm5ldC9jb3JlL2Rldi5jLTc1Mi17XFxuLS1cXG5uZXQvY29yZS9kZXYuYy03NjktfVxcbm5ldC9jb3JlL2Rldi5jOjc3MDpFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSk7XFxubmV0L2NvcmUvZGV2LmMtNzcxLVxcbm5ldC9jb3JlL2Rldi5jOjc3MjppbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG5uZXQvY29yZS9kZXYuYy03NzMtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTgxMi1lcnJfb3V0Olxcbm5ldC9jb3JlL2Rldi5jOjgxMzpcXHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7XFxubmV0L2NvcmUvZGV2LmMtODE0LVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtODE2LX1cXG5uZXQvY29yZS9kZXYuYzo4MTc6RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcXG5uZXQvY29yZS9kZXYuYy04MTgtXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz05Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfbW9uaXRvcmlmX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk4OC1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5ODk6c3RhdGljIGludCBpZWVlODAyMTFfbmV0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxubmV0L21hYzgwMjExL2lmYWNlLmMtOTkwLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMDQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX2RhdGFpZl84MDIzX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwNTMtXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IGllZWU4MDIxMV9jaGFuZ2VfbWFjLFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjEwNTQ6XFx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aFxcdD0gaWVlZTgwMjExX25ldGRldl9maWxsX2ZvcndhcmRfcGF0aCxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDU1LVxcdC5uZG9fc2V0dXBfdGNcXHRcXHQ9IGllZWU4MDIxMV9uZXRkZXZfc2V0dXBfdGMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTM2PXN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzo0NTpzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDYtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTczLW91dDpcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjc0OlxcdHJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBoYSwgc3RhY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNzUtfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz05Nz1zdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xOTEtZXJyX291dDpcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjE5MjpcXHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xOTMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTIxND1zdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMjUtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoyMjY6XFx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgXFx1MDAyNnN0YWNrKSBcXHUwMDNjIDAgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIyNy1cXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXFx1MDAyNnN0YWNrLCBcXHUwMDI2aW5mbywgaGEsIGZ0KSBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjI0LjY2MTQ1MjI3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDUzMjk2MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIEZsb3cgT2ZmbG9hZCBQYXRoKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgc3BlY2lmaWNhbGx5IGhvdyB0cmFmZmljIGdldHMgb2ZmbG9hZGVkIGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBMZXQncyBzZWUuLi4gSSd2ZSBnb3QgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIHRoYXQncyB0aGUgY29yZSBmdW5jdGlvbi4gSXQncyBjYWxsZWQgZnJvbSBgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYG5mdF9kZXZfZm9yd2FyZF9wYXRoYC4gTm93LCBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIGlzIGNhbGxlZCBieSBgbmZ0X2Zsb3dfcm91dGVgLCBhbmQgZmluYWxseSB0aGF0J3MgYWxsIGhvb2tlZCBpbnRvIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLiBUaGF0IG1ha2VzIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIHRoZSBrZXkgZW50cnkgcG9pbnQgdG8gbG9vayBhdCwgcmlnaHQ/IFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhIG1vcmUgZm9jdXNlZCBhbmFseXNpcy4gXG5cbk5vdywgc2luY2Ugd2UncmUgdGFsa2luZyBhYm91dCBvZmZsb2FkaW5nLCBsZXQgbWUgYWxzbyBjaGVjayBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBUQ1AgY29ubmVjdGlvbiB0cmFja2luZy4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU0OSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNToyOC4xMTQ3NTEwMTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTkyNDIxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubnRyYWNrX3RjcF9wYWNrZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg9MTA1PWludCBuZl9jb25udHJhY2tfdWRwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaC0xMDktXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg6MTEwOmludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgtMTExLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTE5Njk9c3RhdGljIGludCBuZl9jb25udHJhY2tfaGFuZGxlX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk3Ni1cXHRjYXNlIElQUFJPVE9fVENQOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoxOTc3OlxcdFxcdHJldHVybiBuZl9jb25udHJhY2tfdGNwX3BhY2tldChjdCwgc2tiLCBkYXRhb2ZmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xOTc4LVxcdFxcdFxcdFxcdFxcdCAgICAgICBjdGluZm8sIHN0YXRlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTk1Mj1zdGF0aWMgdm9pZCBuZl9jdF90Y3Bfc3RhdGVfcmVzZXQoc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy05NjItLyogUmV0dXJucyB2ZXJkaWN0IGZvciBwYWNrZXQsIG9yIC0xIGZvciBpbnZhbGlkLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjk2MzppbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTk2NC1cXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTU6MjkuNTczOTk5NzIzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzY5MDQ5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIENvbm50cmFjayBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBUQ1AgcGFja2V0IGhhbmRsaW5nIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3lzdGVtLiBSaWdodCwgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwIGRpdmUuIEkga25vdyBpdCBnZXRzIGNhbGxlZCBmcm9tIGBuZl9jb25udHJhY2tfaGFuZGxlX3BhY2tldGAsIHdoaWNoIGl0c2VsZiBpcyBpbnZva2VkIGJ5IGBuZl9jb25udHJhY2tfaW5gLiBBbmQgYG5mX2Nvbm50cmFja19pbmAgaXMsIGVzc2VudGlhbGx5LCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIGVudGlyZSBjb25udHJhY2sgcHJvY2Vzcy4gU28sIHdvcmtpbmcgYmFja3dhcmRzLCBJJ3ZlIGdvdCB0aGUgY2FsbCBjaGFpbiBtYXBwZWQgaW4gbXkgaGVhZC5cblxuTm93LCBsZXQncyBzZWUgaG93IHRoaW5ncyBhcmUgc3RydWN0dXJlZC4gTGV0J3Mgc2hpZnQgb3VyIGZvY3VzIHRvIGBnZXRfY3Rfb3JfdHVwbGVfZnJvbV9za2JgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBpbmZvcm1hdGlvbiBnZXRzIGZldGNoZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzUyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjMyLjg1MDkwNzQwN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NDY2NjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfY3Rfb3JfdHVwbGVfZnJvbV9za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz0xMDI9ZmluZF9vcl9ldmljdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uY291bnRfbGlzdCAqbGlzdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMTI5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6MTMwOnN0YXRpYyBib29sIGdldF9jdF9vcl90dXBsZV9mcm9tX3NrYihzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0xMzEtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz0xNjk9c3RhdGljIGludCBfX25mX2Nvbm5jb3VudF9hZGQoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0xODMtXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYzoxODQ6XFx0aWYgKCFnZXRfY3Rfb3JfdHVwbGVfZnJvbV9za2IobmV0LCBza2IsIGwzbnVtLCBcXHUwMDI2Y3QsIFxcdTAwMjZ0dXBsZSwgXFx1MDAyNnpvbmUsIFxcdTAwMjZyZWZjb3VudGVkKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTE4NS1cXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM9NDAzPWluc2VydF90cmVlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNDYxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6NDYyOlxcdGlmIChnZXRfY3Rfb3JfdHVwbGVfZnJvbV9za2IobmV0LCBza2IsIGwzbnVtLCBcXHUwMDI2Y3QsIFxcdTAwMjZ0dXBsZSwgXFx1MDAyNnpvbmUsIFxcdTAwMjZyZWZjb3VudGVkKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNDYzLVxcdFxcdC8qIGV4cGVjdGVkIGNhc2U6IG1hdGNoLCBpbnNlcnQgbmV3IG5vZGUgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTU6MzQuMzA1NTc3ODI3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjUwNzIwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbm5lY3Rpb24gTGltaXQgRXZhbHVhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcgaW4gdGhlIGNhbGwgZ3JhcGhzLCBgX19uZl9jb25uY291bnRfYWRkYCBhbmQgYGluc2VydF90cmVlYCBhcmUgdGhlIGVudHJ5IHBvaW50cy4gYGluc2VydF90cmVlYCBpcyB1bHRpbWF0ZWx5IGNhbGxlZCBieSBgbmZfY29ubmNvdW50X2NvdW50YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFNpbWlsYXJseSwgYF9fbmZfY29ubmNvdW50X2FkZGAgaGFzIGl0cyBvcmlnaW5zIGluIGBuZl9jb25uY291bnRfYWRkYC4gVGhlbiwgYG5mX2Nvbm5jb3VudF9jb3VudGAgaXRzZWxmIGZlZWRzIGludG8gYm90aCBgeHRfY29ubmxpbWl0X2V2YWxgIGFuZCBgbmZ0X2Nvbm5saW1pdF9ldmFsYC5cblxuR2l2ZW4gdGhhdCwgYG5mdF9jb25ubGltaXRfZXZhbGAgbG9va3MgbGlrZSB0aGUgbW9zdCBzdHJhdGVnaWNhbGx5IGltcG9ydGFudCBwb2ludCB0byBmb2N1cyBvbiBoZXJlLiBJdCdzIHRoZSBjbGVhbmVzdCBwbGFjZSB0byBzdGFydCBsb29raW5nIGF0IGhvdyBjb25uZWN0aW9uIGxpbWl0cyBhcmUgYWN0dWFsbHkgKmV2YWx1YXRlZCogd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBJJ2xsIGJlZ2luIG15IGRlZXBlciBkaXZlIHRoZXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY291bnRpbmcgbWVjaGFuaXNtIGludGVyYWN0cyB3aXRoIHRoZSBOZXRmaWx0ZXIgdGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDc4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjM4LjEzMDY1MzAxM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MzQyOTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfY29ubmxpbWl0X2V2YWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmM9MTc2PXN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9jb25ubGltaXRfb2JqX3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jLTE4My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYzoxODQ6c3RhdGljIHZvaWQgbmZ0X2Nvbm5saW1pdF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYy0xODUtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jPTI1MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfY29ubmxpbWl0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jLTI1My1cXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9jb25ubGltaXQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYzoyNTQ6XFx0LmV2YWxcXHRcXHQ9IG5mdF9jb25ubGltaXRfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYy0yNTUtXFx0LmluaXRcXHRcXHQ9IG5mdF9jb25ubGltaXRfaW5pdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTU6MzkuNTc0MDg3MzIzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NjY1MTM1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5GX1RBQkxFUyBTeW1ib2wgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLCBgbmZ0X3JlamVjdF9pcHY0X2V2YWxgLCBgbmZ0X3JlamVjdF9pcHY2X2V2YWxgLCBgbmZ0X3JlamVjdF9pbmV0X2V2YWxgLCBgbmZ0X21ldGFfZ2V0X2V2YWxgLCBgbmZ0X3J0X2dldF9ldmFsYCwgYG5mdF94ZnJtX2dldF9ldmFsYCwgYG5mdF9jb25ubGltaXRfZXZhbGAsIGFuZCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBUaGUgZ29hbCwgYXMgYWx3YXlzLCBpcyB0byBtYXAgdGhlc2Uga2VybmVsIHN5bWJvbHMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBLY29uZmlnIG9wdGlvbnMuXG5cbkZpcnN0IHBhc3M6IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIHNlZW1zIHRvIGJlIGxpbmtlZCB0byBgTkZfRkxPV19UQUJMRWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuIGBuZnRfcmVqZWN0X2lwdjRfZXZhbGAgYW5kIGBuZnRfcmVqZWN0X2lwdjZfZXZhbGAgbWFwIGRpcmVjdGx5IHRvIGBORlRfUkVKRUNUX0lQVjRgIGFuZCBgTkZUX1JFSkVDVF9JUFY2YCByZXNwZWN0aXZlbHksIGFuZCBgbmZ0X3JlamVjdF9pbmV0X2V2YWxgIGNvcnJlc3BvbmRzIHRvIGBORlRfUkVKRUNUX0lORVRgIC0gc3RhbmRhcmQuXG5cbk5vdywgdGhpbmdzIGdldCBhIGxpdHRsZSBpbnRlcmVzdGluZyB3aXRoIGBuZnRfbWV0YV9nZXRfZXZhbGAuIFdhaXQsIGlzbid0IHRoYXQgZnVuY3Rpb25hbGl0eSBwcmV0dHkgZnVuZGFtZW50YWw/IEknbSBhbG1vc3QgY2VydGFpbiBgTkZUX01FVEFgIGlzIGJ1aWx0LWluLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBuZl90YWJsZXMgY29kZSBhbmQgS2NvbmZpZyB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cblNpbWlsYXJseSwgSSBuZWVkIHRvIHZlcmlmeSBgbmZ0X3J0X2dldF9ldmFsYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZW50cnkgZm9yIGBORlRfUlRgIHRvIGNvbmZpcm0gdGhhdC4gR290dGEgYmUgcHJlY2lzZS5cblxuYG5mdF94ZnJtX2dldF9ldmFsYCBtYXBzIHRvIGBORlRfWEZSTWAgYW5kIGBuZnRfY29ubmxpbWl0X2V2YWxgIHRvIGBORlRfQ09OTkxJTUlUYCB3aGljaCBzZWVtIHN0cmFpZ2h0Zm9yd2FyZC4gRmluYWxseSwgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBhcHBlYXJzIHRvIGRlcGVuZCBvbiBgTkZfQ09OTlRSQUNLYC4gQWxsIG9mIHRoZXNlIGxvb2sgc29saWQgYnV0IGEgcXVpY2sgZG91YmxlIGNoZWNrIGlzIGFsd2F5cyBzbWFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2NzIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTU6NDUuMDQwNjAzNTQ3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjA5MjcyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ4MD1jb25maWcgTkZfVEFCTEVTX05FVERFVlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDg1OmNvbmZpZyBORlRfTlVNR0VOXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4Ni1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00OTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ5MTpjb25maWcgTkZUX0NUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5Mi1cXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDk4OmNvbmZpZyBORlRfRVhUSERSX0RDQ1BcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDk5LVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgZXh0aGRyIERDQ1Agc3VwcG9ydCAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTAzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDQ6Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX0ZMT1dfVEFCTEVcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUxMTpjb25maWcgTkZUX0NPTk5MSU1JVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgY29ubmxpbWl0IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MTktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUyMDpjb25maWcgTkZUX0xPR1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MjEtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbG9nIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MjUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUyNjpjb25maWcgTkZUX0xJTUlUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUyNy1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBsaW1pdCBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMxLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MzI6Y29uZmlnIE5GVF9NQVNRXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUzMy1cXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU0MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQxOmNvbmZpZyBORlRfUkVESVJcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTQyLVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTQ5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NTA6Y29uZmlnIE5GVF9OQVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUxLVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTU4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NTk6Y29uZmlnIE5GVF9UVU5ORUxcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTYwLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIHR1bm5lbCBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTY0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NjU6Y29uZmlnIE5GVF9RVUVVRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NjYtXFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU3MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTcyOmNvbmZpZyBORlRfUVVPVEFcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTczLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIHF1b3RhIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NzctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjU3ODpjb25maWcgTkZUX1JFSkVDVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NzktXFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTg1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1ODY6Y29uZmlnIE5GVF9SRUpFQ1RfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01ODctXFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSU5FVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU5MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTkxOmNvbmZpZyBORlRfQ09NUEFUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU5Mi1cXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTk4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1OTk6Y29uZmlnIE5GVF9IQVNIXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYwMC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBoYXNoIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYwNTpjb25maWcgTkZUX0ZJQlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDYtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjA3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2MDg6Y29uZmlnIE5GVF9GSUJfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDktXFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSU5FVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYxNy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjE4OmNvbmZpZyBORlRfWEZSTVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MTktXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgeGZybS9JUFNlYyBzZWN1cml0eSBhc3NvY2lhdGlvbiBtYXRjaGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYyNTpjb25maWcgTkZUX1NPQ0tFVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjYtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgc29ja2V0IG1hdGNoIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjMyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2MzM6Y29uZmlnIE5GVF9PU0ZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjM0LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIHBhc3NpdmUgT1MgZmluZ2VycHJpbnQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MzktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0MDpjb25maWcgTkZUX1RQUk9YWVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDEtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgdHByb3h5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDk6Y29uZmlnIE5GVF9TWU5QUk9YWVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTAtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgU1lOUFJPWFkgZXhwcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTY2Mj1jb25maWcgTkZfRFVQX05FVERFVlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjY4OmNvbmZpZyBORlRfRFVQX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjktXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY3My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Njc0OmNvbmZpZyBORlRfRldEX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NzUtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHBhY2tldCBmb3J3YXJkaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2ODA6Y29uZmlnIE5GVF9GSUJfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY4MS1cXHRkZXBlbmRzIG9uIE5GVF9GSUJfSVBWNFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY4OC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Njg5OmNvbmZpZyBORlRfUkVKRUNUX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02OTAtXFx0ZGVwZW5kcyBvbiBORlRfUkVKRUNUX0lQVjRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTU6NDUuMDgyNzAyMzI2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDEyMjEyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIExhbmRzY2FwZSoqXG5cbkhtbSwgc29tZXRoaW5nIGRvZXNuJ3QgZmVlbCBxdWl0ZSByaWdodC4gSSB3YXMgZXhwZWN0aW5nIGBORlRfTUVUQWAgYW5kIGBORlRfUlRgIHRvIGJlIHByZXNlbnQgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIGJ1dCBJJ20gZHJhd2luZyBhIGJsYW5rLiBUaGF0IHNlZW1zIG9kZCwgZ2l2ZW4gdGhlaXIgcm9sZXMuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIFRoZSBLY29uZmlnIGZpbGVzIHVzdWFsbHkgZGljdGF0ZSB0aGUgb3B0aW9ucyB3ZSBoYXZlIGF2YWlsYWJsZS4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gc2hpZnQgbXkgZm9jdXMuIExldCdzIHN0ZXAgYmFjayBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIE1ha2VmaWxlIHdpdGhpbiB0aGUgYG5ldC9uZXRmaWx0ZXJgIGRpcmVjdG9yeSB0byBzZWUgaG93IHRob3NlIHN5bWJvbHMgYXJlIGFjdHVhbGx5IGluY2x1ZGVkLiBUaGUgTWFrZWZpbGUgaXMgd2hlcmUgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgZGVmaW5lZC4gSXQgc2hvdWxkIG9mZmVyIGNsdWVzIGFzIHRvIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBjb25maWd1cmVkLCB3aGljaCBtYXkgZXhwbGFpbiB0aGVpciBhYnNlbmNlIGluIEtjb25maWcuIEl0J3MgdGltZSB0byBmb2xsb3cgdGhlIGJ1aWxkIHJlY2lwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxMjIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNTo0OC4yODM5MjYxMTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjk1MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9tZXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT04Nz1uZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcXFxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OS1cXHRcXHQgIG5mdF9iaXR3aXNlLm8gbmZ0X2J5dGVvcmRlci5vIG5mdF9wYXlsb2FkLm8gbmZ0X2xvb2t1cC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjkwOlxcdFxcdCAgbmZ0X2R5bnNldC5vIG5mdF9tZXRhLm8gbmZ0X3J0Lm8gbmZ0X2V4dGhkci5vIG5mdF9sYXN0Lm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTEtXFx0XFx0ICBuZnRfY291bnRlci5vIG5mdF9vYmpyZWYubyBuZnRfaW5uZXIubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE1OjQ4LjMyNzIyOTYzMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY3MDk3MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipRdWljayBORl9UQUJMRVMgUmVmcmVzaGVyKipcblxuUmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgYG5mX3RhYmxlc2Agc3Vic3lzdGVtLCBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIHdoaWNoIG1vZHVsZXMgYXJlIHJlcXVpcmVkLiBJIHNlZSB0aGF0IGBuZnRfbWV0YWAgYW5kIGBuZnRfcnRgIGFyZSBmdW5kYW1lbnRhbCBjb21wb25lbnRzLCBjb3JlIHRvIGBuZl90YWJsZXNgLiBUaGF0IG1lYW5zLCBhbmQgdGhpcyBzZWVtcyBsb2dpY2FsLCBgTkZfVEFCTEVTYCBpdHNlbGYgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgSSdtIGludGVyZXN0ZWQgaW4uIEkgc2hvdWxkIGNoZWNrLCB0aG91Z2gsIGFib3V0IHRoZXNlIHNwZWNpZmljIG1vZHVsZXM6IGBORlRfUkVKRUNUX0lQVjRgIGFuZCBgTkZUX1JFSkVDVF9JUFY2YC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzLCB0aGV5IHNlZW0gbGVzcyBjb3JlIGJ1dCBzdGlsbCBxdWl0ZSBpbXBvcnRhbnQgaW4gbWFueSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1NDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNTo1MS4zOTQzMzA2NzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODI2NDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlRfUkVKRUNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTQwPWlmIE5GX1RBQkxFU19JUFY0XFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNDEtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NDI6Y29uZmlnIE5GVF9SRUpFQ1RfSVBWNFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTQzLVxcdHNlbGVjdCBORl9SRUpFQ1RfSVBWNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNTo1MS40MzkxNjI2NTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwODYzMDQ2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHNlZW1pbmdseSBzaW1wbGUgc3RhdGVtZW50LCBjcmFmdGVkIGFzIHRob3VnaCBpdCdzIGEgZGlyZWN0IHJlZmxlY3Rpb24gb2YgbXkgb3duIGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBkZXZlbG9wbWVudDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEEgS2NvbmZpZyBSZXZlbGF0aW9uKipcblxuQWxyaWdodCwgXCJBbmQgYG5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnYFwiLi4uIHRoYXQncyBpbnRyaWd1aW5nLiBJdCdzIGVzc2VudGlhbGx5IGEgcG9pbnRlciwgYSBicmVhZGNydW1iIHRyYWlsLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBpbXBsaWNhdGlvbjogd2UncmUgdGFsa2luZyBhYm91dCBJUHY2LXNwZWNpZmljIG5ldGZpbHRlciBjb25maWd1cmF0aW9uLiBcIkFuZFwiIGltcGxpZXMgYSBjb250aW51YXRpb24sIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSB0b3BpYyBhdCBoYW5kLiBJdCBzdWdnZXN0cyBmdXJ0aGVyIGRldGFpbHMgb3IgcGVyaGFwcyBhIGRpZmZlcmVudCBwZXJzcGVjdGl2ZSBhcmUgYWJvdXQgdG8gYmUgaW50cm9kdWNlZC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB3ZSdyZSBkZWx2aW5nIGludG8gdGhlIHJlYWxtIG9mIG5ldHdvcmsgcGFja2V0IGZpbHRlcmluZyB3aXRoaW4gdGhlIElQdjYgcHJvdG9jb2wgc3RhY2suIFRoZSBmYWN0IGl0IGlzIHRoZSBLY29uZmlnIGhpbnRzIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUHY2IG5ldGZpbHRlci4gSXQgcmVtaW5kcyBtZSBvZiB0aGUgaW1wb3J0YW5jZSBvZiBtb2R1bGFyaXR5IGluIHRoZSBrZXJuZWwuIFRoaXMgcGFydGljdWxhciBLY29uZmlnIGZpbGUgaXMgd2hlcmUgdGhlIHNldHRpbmdzIHRoYXQgZGV0ZXJtaW5lIHdoaWNoIG5ldGZpbHRlciBtb2R1bGVzIGFyZSBjb21waWxlZCBpbnRvIHRoZSBJUHY2IG5ldHdvcmsgc3RhY2sgYXJlLiBUaGlzIGluZm9ybWF0aW9uIGhhcyBsaWtlbHkgY29tZSB1cCBpbiBkaXNjdXNzaW9ucyBhYm91dCBjb25maWd1cmluZyBvciBkZWJ1Z2dpbmcgSVB2NiBmaXJld2FsbCBiZWhhdmlvciwgb3IgcGVyaGFwcyBkdXJpbmcgYW4gb3ZlcnZpZXcgb2YgdGhlIGtlcm5lbCdzIG5ldHdvcmsgc2VjdXJpdHkgZmVhdHVyZXMuIEl0J3Mgbm93IHRpbWUgdG8gZXhwbG9yZSB0aGlzIHNwZWNpZmljIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODk1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6MDIuNTI1NDcxMTMyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjQxOTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX1JFSkVDVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0zNj1pZiBORl9UQUJMRVNfSVBWNlxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTM3LVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjM4OmNvbmZpZyBORlRfUkVKRUNUX0lQVjZcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0zOS1cXHRzZWxlY3QgTkZfUkVKRUNUX0lQVjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6MDIuNTY3ODk2OTgyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MjEyMjU5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGZpbHRlciBDb25maWd1cmF0aW9uIGZvciBPcHRpbWFsIFBlcmZvcm1hbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMgZmxvdyB0YWJsZSBzZXR1cC4gU2VlbXMgbGlrZSB3ZSBuZWVkIGBORl9UQUJMRVNgLCBgTkZfRkxPV19UQUJMRWAsIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAgYXMgdGhlIGNvcmUgY29tcG9uZW50cywgbmF0dXJhbGx5LiBUaGVuLCBmb3IgdGhlIHJlamVjdCBmdW5jdGlvbmFsaXR5LCB3ZSBoYXZlIGBORlRfUkVKRUNUX0lQVjRgLCBgTkZUX1JFSkVDVF9JUFY2YCwgYW5kIGBORlRfUkVKRUNUX0lORVRgLiBGaW5hbGx5LCBgTkZUX1hGUk1gLCBgTkZUX0NPTk5MSU1JVGAsIGFuZCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBiaXRzIHdpdGggYE5GX0NPTk5UUkFDS2AgYXJlIGluIHRoZSBtaXggYXMgd2VsbC5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHRoYXQgYE5GVF9SRUpFQ1RfSU5FVGAgaXMgYWN0dWFsbHkgZGVmaW5lZCBpbiB0aGUgS2NvbmZpZyDigJMgeWVwLCBpdCdzIHRoZXJlIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBHb29kLiBOb3csIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBTZWVtcyBgTkZfUkVKRUNUX0lQVjRgIGFuZCBgTkZfUkVKRUNUX0lQVjZgIGFyZSBkaXJlY3RseSBzZWxlY3RlZCBieSBgTkZUX1JFSkVDVF9JUFY0YCBhbmQgYE5GVF9SRUpFQ1RfSVBWNmAuXG5cbkFoLCBidXQgaG9sZCBvbi4uLiB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBuZl9yZWplY3RfaXB2NC5jYCBhbmQgYG5mX3JlamVjdF9pcHY2LmNgLiBUaGVzZSBhcmUgYnVpbHQgd2hlbiBgTkZfUkVKRUNUX0lQVjRgIGFuZCBgTkZfUkVKRUNUX0lQVjZgIGFyZSBleHBsaWNpdGx5IGVuYWJsZWQsIGFuZCB0aGVzZSwgaW4gdHVybiwgYXJlIHNlbGVjdGVkIGJ5IHRoZSBgTkZUX1JFSkVDVF8qYCBvcHRpb25zIGFuZCBhbHNvIGBJUF9ORl9UQVJHRVRfUkVKRUNUYCBhbmQgYElQNl9ORl9UQVJHRVRfUkVKRUNUYCAuIFRoaXMgbWVhbnMgdGhhdCBlbmFibGluZyBgTkZUX1JFSkVDVF9JUFY0YCBhbmQgYE5GVF9SRUpFQ1RfSVBWNmAgaXMgc3VmZmljaWVudCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LiBUaGF0J3MgZ29vZCwga2VlcHMgdGhpbmdzIGNsZWFuZXIuXG5cbk5vdywgZm9jdXNpbmcgb24gY29ubmVjdGlvbiB0cmFja2luZywgd2UgaGF2ZSBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0NPTk5DT1VOVGAgd2l0aCB1cy4gYE5GVF9DT05OTElNSVRgIHNlbGVjdHMgYE5GX0NPTk5DT1VOVGAsIG1ha2luZyB0aGF0IGEgbG9naWNhbCBkZXBlbmRlbmN5LlxuXG5GaW5hbGx5LCBsZXQncyBjb25zaWRlciB0aGUgXCJmb3J3YXJkIHBhdGhcIiBmdW5jdGlvbnMuIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGluIGBuZXQvY29yZS9kZXYuY2AsIHNvIGl0J3MgYWx3YXlzIGluY2x1ZGVkLiBIb3dldmVyLCBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIGlzIGluIGBuZl9mbG93X3RhYmxlX3BhdGguY2AuIE5lZWQgdG8gcXVpY2tseSByZXZpZXcgd2hlbiBgbmZfZmxvd190YWJsZV9wYXRoLmNgIGdldHMgYnVpbHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzAwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE2OjA5LjI4OTEyNjAxOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEzMDgzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9wYXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDM9bmZfZmxvd190YWJsZS1vYmpzXFx0XFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NDpcXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDUtXFx0XFx0XFx0XFx0ICAgbmZfZmxvd190YWJsZV9vZmZsb2FkLm8gbmZfZmxvd190YWJsZV94ZHAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjowOS4zMzA0NDAyNDhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwMTQ5NDM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGbG93IFRhYmxlIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIHdpdGhpbiBgbmZfZmxvd190YWJsZWAuIEdpdmVuIG15IGJhY2tncm91bmQsIEkgdW5kZXJzdGFuZCB0aGlzIGlzIGJ1aWx0IHVzaW5nIGBORl9GTE9XX1RBQkxFYCwgd2hpY2ggaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgYmFzZSBzdHJ1Y3R1cmUuIE5vdywgSSB3YW50IHRvIHRyYWNlIGEgcGFydGljdWxhciBmdW5jdGlvbiBvciBwYXRoLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBmb3J3YXJkaW5nIHBhdGggaXMgYnVpbHQuIEknbGwgd2FudCB0byBjaGVjayBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAuIEkgcmVjYWxsIHRoYXQgb25lIGJlaW5nIHJlbGF0ZWQgdG8gZW5jYXBzdWxhdGlvbi4gSSBrbm93IHRoYXQgbGl2ZXMgaW4gYG5ldC9pcHY0L2lwaXAuY2AuIFRoZSBuZXh0IHF1ZXN0aW9uIGlzIHdoZW4gaXMgdGhhdCBidWlsdD8gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIG9yZGVyIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzYxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6MTIuNTMxOTM3MjEzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg3MTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGlwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSArPSBpcG1yX2Jhc2Uub1xcbm5ldC9pcHY0L01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORVRfSVBJUCkgKz0gaXBpcC5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMjYtZ3JlLXkgOj0gZ3JlX2RlbXV4Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6MTIuNTc0ODE1MTMyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTEzNTcxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbnNpZGVyaW5nIElQIFR1bm5lbGluZyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUgc3lzdGVtIG5lZWRzIHRvIHN1cHBvcnQgSVAtaW4tSVAgdHVubmVscywgc28gZW5hYmxpbmcgYE5FVF9JUElQYCBpcyBkZWZpbml0ZWx5IHRoZSByaWdodCBtb3ZlLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIEknbSB0aGlua2luZyBhYm91dCBJUHY2IHR1bm5lbGluZy4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIEkgbmVlZCB0byBjb25zaWRlciBpcyBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAsIHdoaWNoLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIHJlc2lkZXMgd2l0aGluIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHR1bm5lbCBmb3J3YXJkaW5nIHBhdGggaXMgY29ycmVjdGx5IGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkIGZvciBJUHY2IHR1bm5lbHMuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGNydWNpYWwgZm9yIHNldHRpbmcgdXAgdGhlIGVuY2Fwc3VsYXRpb24gYW5kIGRlY2Fwc3VsYXRpb24gbG9naWMsIGVzcGVjaWFsbHkgYXJvdW5kIGhlYWRlciBtYW5pcHVsYXRpb24gYW5kIHJvdXRlIGxvb2t1cHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpdGggdGhlIHR1bm5lbCBkcml2ZXIgYW5kIHRoZSBJUHY2IHN0YWNrLiBHaXZlbiB0aGF0IGl0IHJlc2lkZXMgaW4gdGhlIElQdjYgdHVubmVsIGNvZGUsIGl0IGNsZWFybHkgcGxheXMgYSBrZXkgcm9sZSBpbiBtYWtpbmcgc3VyZSBJUHY2IHRyYWZmaWMgaXMgY29ycmVjdGx5IHJvdXRlZCB0aHJvdWdoIHRoZXNlIHR1bm5lbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5Njk3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6MTUuNzI2MTc1MDM4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTA3MTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfdHVubmVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTQxPW9iai0kKENPTkZJR19JUFY2X1NJVCkgKz0gc2l0Lm9cXG5uZXQvaXB2Ni9NYWtlZmlsZTo0MjpvYmotJChDT05GSUdfSVBWNl9UVU5ORUwpICs9IGlwNl90dW5uZWwub1xcbm5ldC9pcHY2L01ha2VmaWxlLTQzLW9iai0kKENPTkZJR19JUFY2X0dSRSkgKz0gaXA2X2dyZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE2OjE1Ljc2NzI0OTgxOFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgxNjA5OTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGRpc3RpbGxlZCBpbnRvIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkNvbnNpZGVyaW5nIElQdjYgVHVubmVsaW5nIGFuZCBEYXRhIFN0cnVjdHVyZSBBbGlnbm1lbnQqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYElQVjZfVFVOTkVMYCBuZWVkcyB0byBiZSBlbmFibGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBhY2NvdW50ZWQgZm9yLiBOb3csIGxldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gbG9vayBhdCBob3cgZm9yd2FyZCBwYXRocyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBgZHNhX3VzZXJfZmlsbF9mb3J3YXJkX3BhdGhgIGZ1bmN0aW9uLiBUaGF0J3MgcHJvYmFibHkgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGZvciB0aGlzLiBJIGtub3cgaXQncyBsb2NhdGVkIGluIGBuZXQvZHNhL3VzZXIuY2AuXG5cblRoZSBuZXh0IHF1ZXN0aW9uIEkgaGF2ZSBpcywgYXQgd2hhdCBwb2ludCBpcyBgbmV0L2RzYS91c2VyLmNgIGV2ZW4gYnVpbHQgaW50byB0aGUga2VybmVsPyBUaGlzIHF1ZXN0aW9uIG5lZWRzIGFuc3dlcmluZyB0byBlbnN1cmUgdGhhdCB3aGF0ZXZlciBpcyByZXF1aXJlZCBpcyBhbHNvIGJlaW5nIGNvbXBpbGVkIHdoZW4gaXQgbmVlZHMgdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDg2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6MTguODQ4ODYxNzc1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQ5NDAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9kc2EvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RzYS9NYWtlZmlsZT0xMD1kc2FfY29yZS15ICs9IFxcXFxcXG4tLVxcbm5ldC9kc2EvTWFrZWZpbGUtMTktXFx0dHJhY2UubyBcXFxcXFxubmV0L2RzYS9NYWtlZmlsZToyMDpcXHR1c2VyLm9cXG5uZXQvZHNhL01ha2VmaWxlLTIxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjoxOC45MDAzNjA2MzRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE1MzM3MzIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEU0EgQ29yZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmcm9tIGEgYGRzYV9jb3JlYCBwZXJzcGVjdGl2ZSwgd2hpY2ggaXMgYnVpbHQgb24gYE5FVF9EU0FgLiBUaGUgY29yZSBoZXJlIGlzIHdoYXQgbWF0dGVyczsgdGhvc2UgaGFyZHdhcmUtc3BlY2lmaWMgZnVuY3Rpb25zLCBgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvYCBhbmQgYG10a19mbG93X2dldF93ZG1hX2luZm9gLCBmb3VuZCBpbiBgYWlyb2hhX3BwZS5jYCBhbmQgYG10a19wcGVfb2ZmbG9hZC5jYCByZXNwZWN0aXZlbHksIGFyZSBwcm9iYWJseSBpcnJlbGV2YW50IGluIGEgUUVNVSBlbnZpcm9ubWVudCwgYW5kIGl0IGlzIHRoZSBjb3JlIHRoYXQgbWF0dGVycy4gSSBjYW4gaWdub3JlIGVuYWJsaW5nIHRob3NlIHNwZWNpZmljIGRyaXZlcnMgYmVjYXVzZSB0aGUgaGVhcnQgb2YgaXQgaXMgdGhlIGNvcmUgY2hhbmdlcy5cblxuVGhlcmVmb3JlLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byBjb25zaWRlciBhcmU6IGBORl9UQUJMRVNgLCBgTkZfRkxPV19UQUJMRWAsIGBORlRfRkxPV19PRkZMT0FEYCwgYE5GVF9SRUpFQ1RfSVBWNGAsIGBORlRfUkVKRUNUX0lQVjZgLCBgTkZUX1JFSkVDVF9JTkVUYCwgYE5GVF9YRlJNYCwgYE5GVF9DT05OTElNSVRgLCBgTkZfQ09OTlRSQUNLYCwgYE5FVF9JUElQYCwgYElQVjZfVFVOTkVMYCwgYW5kIGBORVRfRFNBYC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBgTkZUX0ZMT1dfT0ZGTE9BRGAgcmVsaWVzIG9uIGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfRkxPV19UQUJMRWAsIHNvIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQgdG9vLiBBbmQgSSBzZWUgdGhhdCBgTkZUX1JFSkVDVF9JTkVUYCBkZXBlbmRzIG9uIGBORl9UQUJMRVNfSU5FVGAgYXMgd2VsbCwgc28gdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQyNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjoyNC4wNTM3MzYzMjJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDA4NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9UQUJMRVNfSU5FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE2OjI0LjA5NDc1NTc4MVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI5MTU0NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipDaGVja2luZyBEZXBlbmRlbmNpZXMgZm9yIE5ldHdvcmsgRnVuY3Rpb25hbGl0eSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBzdGFydGluZyB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgYE5GX1RBQkxFU19JTkVUYCBuZWVkcyB0byBiZSBlbmFibGVkLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIHVuZGVyc3Rvb2QsIGFuZCB3ZSdsbCBrZWVwIHRoYXQgYXMgb3VyIGJhc2UuXG5cbk5vdywgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBlbnN1cmUgdGhhdCBgTkZUX1hGUk1gIGRvZXNuJ3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBpbnRlcmRlcGVuZGVuY2llcyB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBGaXJzdCwgaXQgcmVxdWlyZXMgYE5GX1RBQkxFU2AgaXRzZWxmLCB3aGljaCBtYWtlcyBzZW5zZS4gV2Uga25vdyB0aGF0IGBORl9UQUJMRVNgIGhhcyBgTkZfVEFCTEVTX0lORVRgIGFzIGEgY29tcG9uZW50LCBzbyB3ZSdyZSBnb29kIHRoZXJlLiBXaGF0IGFib3V0IGBYRlJNYD8gTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBgWEZSTWAgZG9lc24ndCBoYXZlIGFueSBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cyB0aGF0IHdlIHNob3VsZCBiZSBjb25zaWRlcmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjoyNy41MjM5MTM3NzRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTI2MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlRfWEZSTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTYwOD1jb25maWcgTkZUX0ZJQl9JTkVUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjE3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2MTg6Y29uZmlnIE5GVF9YRlJNXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYxOS1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyB4ZnJtL0lQU2VjIHNlY3VyaXR5IGFzc29jaWF0aW9uIG1hdGNoaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjoyNy41NjYwNDQ1NzNaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5MTYyNjg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlOiBORlRfUkVKRUNUX0lQVjQqKlxuXG5SaWdodCwgc28gdGhpcyBjb2RlIHNlY3Rpb24gc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhdCBmaXJzdCBnbGFuY2UuIEl0J3MgdHVja2VkIGluc2lkZSBhbiBgaWYgTkZfVEFCTEVTYCBibG9jaywgc28gY2xlYXJseSwgdGhhdCdzIHRoZSBwcmltYXJ5LCBhbmQgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIHRoZSAqb25seSogZXhwbGljaXQgZGVwZW5kZW5jeS4gQnV0IHRoZW4sIGl0IGRhd25zIG9uIG1lLCBgWEZSTWAgaXMgc3VjaCBhIGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgY29tcG9uZW50OyBpdCdzIHByYWN0aWNhbGx5IGFsd2F5cyBjb21waWxlZCBpbi4gSXQgd291bGQgYmUgYSBzaWxseSBvdmVyc2lnaHQgdG8gbWlzcyBpZiBgTkZUX1JFSkVDVF9JUFY0YCByZWxpZXMgb24gaXQuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIGBORlRfUkVKRUNUX0lQVjRgJ3MgY29uZmlnIG9wdGlvbnMuIEFoLCB0aGVyZSBpdCBpcy4gQ29uZmlybWVkLiBJdCBkaXJlY3RseSBkZXBlbmRzIG9uIGBORl9UQUJMRVNfSVBWNGAuIFRoYXQncyBub3QgZW50aXJlbHkgdW5leHBlY3RlZCwgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTQzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6MzAuODU3Njc0MTk3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE1MjY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTX0lQVjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MzM9aWYgTkZfVEFCTEVTXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzQtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzU6Y29uZmlnIE5GX1RBQkxFU19JUFY0XFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiSVB2NCBuZl90YWJsZXMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6MzAuODk5ODMwNzE2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2OTgyNjM4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBrZXJuZWwgbW9kdWxlIGNvbmZpZ3VyYXRpb24sIGZvY3VzaW5nIG9uIHRoZSBlc3NlbnRpYWwgYG5mdGFibGVzYCBjb21wb25lbnRzOlxuXG4qKk15IEtlcm5lbCBNb2R1bGUgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBnZXR0aW5nIHRoaXMgc3lzdGVtIHVwIHRvIHNudWZmIHdpdGggYG5mdGFibGVzYC4gVG8gbWFrZSBzdXJlIGl0J3MgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQsIEkgKmFic29sdXRlbHkqIG5lZWQgdG8gZW5hYmxlIGBORl9UQUJMRVNfSVBWNGAuIFRoYXQncyBhIG5vLWJyYWluZXIsIGZ1bmRhbWVudGFsIGZvciBoYW5kbGluZyBJUHY0IHRyYWZmaWMgd2l0aCBuZnRhYmxlcy4gQW5kIGlmIEkgd2FudCB0byBnZXQgdGhlIElQdjYgcmVqZWN0cyBkb25lIGluIGBuZnRhYmxlc2AsIEkgYWxzbyBuZWVkIGBORl9UQUJMRVNfSVBWNmAuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuICBJIG5lZWQgdG8gY29uZmlndXJlIGJvdGggdG8gZ2V0IGV2ZXJ5dGhpbmcgd29ya2luZyBhcyBleHBlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5NjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjozMy41OTgwOTczMjlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwOTM2MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9UQUJMRVNfSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0yOT1pZiBORl9UQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0zMC1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzozMTpjb25maWcgTkZfVEFCTEVTX0lQVjZcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJJUHY2IG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjozMy42MzkwMzYxOThaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2NzQ5NzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmV2aWV3IGEgc2V0IG9mIGtlcm5lbCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBuZXR3b3JraW5nIHRhc2suIEZpcnN0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGZ1bmRhbWVudGFsIE5ldGZpbHRlciBhbmQgbmZ0YWJsZXMgY29tcG9uZW50cywgc3BlY2lmaWNhbGx5IGBORl9UQUJMRVNgLCBgTkZfVEFCTEVTX0lQVjRgLCBgTkZfVEFCTEVTX0lQVjZgLCBhbmQgdGhlIGNvbWJpbmVkIGBORl9UQUJMRVNfSU5FVGAuIFRoZXNlIGFyZSwgb2YgY291cnNlLCBhYnNvbHV0ZWx5IGNydWNpYWwgdG8gYWxtb3N0IGFueSBtb2Rlcm4gbmV0d29yayBzZXR1cCB1c2luZyBuZnRhYmxlcy4gVGhlbiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZmxvdyBvZmZsb2FkIGNvbmZpZ3VyYXRpb25zOyBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCBhbmQgdGhlIHJlamVjdCBjb25maWd1cmF0aW9uczsgYE5GVF9SRUpFQ1RfSVBWNGAsIGBORlRfUkVKRUNUX0lQVjZgLCBhbmQgYE5GVF9SRUpFQ1RfSU5FVGAuXG5cbkknbGwgYWxzbyBrZWVwIGluIG1pbmQgcmVsYXRlZCBvcHRpb25zIGxpa2UgYE5GVF9YRlJNYCBmb3IgdHJhbnNwb3J0IGxheWVyIHNlY3VyaXR5IGFuZCBlbmNhcHN1bGF0aW9uLCBhbmQgdGhlIGBORlRfQ09OTkxJTUlUYCBtb2R1bGUgZm9yIGNvbm5lY3Rpb24gbGltaXRpbmcsIHNob3VsZCBJIG5lZWQgdGhlbS4gV2UgY2FuJ3QgZm9yZ2V0IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHBpZWNlLCBgTkZfQ09OTlRSQUNLYC4gVGhlbiwgdGhlcmUncyB0aGUgbW9yZSBnZW5lcmFsIG5ldHdvcmtpbmcgb3B0aW9ucyBsaWtlIGBORVRfSVBJUGAgYW5kIGBJUFY2X1RVTk5FTGAgdG8gY29uc2lkZXIuXG5cbk5vdywgYSBiaXQgb2YgYSBzYW5pdHkgY2hlY2sgaXMgbmVlZGVkIG9uIHRoaXMgbGFzdCBvbmUg4oCTIGBORVRfRFNBYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24uIEknbSBwcmV0dHkgc3VyZSBpdCBkZXBlbmRzIG9uIGEgZmV3IHRoaW5ncy4gQmVzdCB0byBlbnN1cmUgYWxsIHRoZSBwcmVyZXF1aXNpdGVzIGFyZSBtZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjc0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE2OjM4LjAwNjUzNTc1N1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE5MTI1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9EU0FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RzYS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kc2EvS2NvbmZpZy0yLVxcbm5ldC9kc2EvS2NvbmZpZzozOm1lbnVjb25maWcgTkVUX0RTQVxcbm5ldC9kc2EvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnPTE3PWlmIE5FVF9EU0FcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0yMC1cXG5uZXQvZHNhL0tjb25maWc6MjE6Y29uZmlnIE5FVF9EU0FfVEFHX05PTkVcXG5uZXQvZHNhL0tjb25maWctMjItXFx0dHJpc3RhdGUgXFxcIk5vLW9wIHRhZyBkcml2ZXJcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMjYtXFxubmV0L2RzYS9LY29uZmlnOjI3OmNvbmZpZyBORVRfRFNBX1RBR19BUjkzMzFcXG5uZXQvZHNhL0tjb25maWctMjgtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIEF0aGVyb3MgQVI5MzMxIFNvQyB3aXRoIGJ1aWx0LWluIHN3aXRjaFxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0zMi1cXG5uZXQvZHNhL0tjb25maWc6MzM6Y29uZmlnIE5FVF9EU0FfVEFHX0JSQ01fQ09NTU9OXFxubmV0L2RzYS9LY29uZmlnLTM0LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMzYtXFxubmV0L2RzYS9LY29uZmlnOjM3OmNvbmZpZyBORVRfRFNBX1RBR19CUkNNXFxubmV0L2RzYS9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBCcm9hZGNvbSBzd2l0Y2hlcyB1c2luZyBpbi1mcmFtZSBoZWFkZXJzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTQzLVxcbm5ldC9kc2EvS2NvbmZpZzo0NDpjb25maWcgTkVUX0RTQV9UQUdfQlJDTV9MRUdBQ1lcXG5uZXQvZHNhL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIEJDTTYzeHggbGVnYWN5IHN3aXRjaGVzIHVzaW5nIGluLWZyYW1lIGhlYWRlcnNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctNTMtXFxubmV0L2RzYS9LY29uZmlnOjU0OmNvbmZpZyBORVRfRFNBX1RBR19CUkNNX0xFR0FDWV9GQ1NcXG5uZXQvZHNhL0tjb25maWctNTUtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIEJDTTUzeHggbGVnYWN5IHN3aXRjaGVzIHVzaW5nIGluLWZyYW1lIGhlYWRlcnNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctNjMtXFxubmV0L2RzYS9LY29uZmlnOjY0OmNvbmZpZyBORVRfRFNBX1RBR19CUkNNX1BSRVBFTkRcXG5uZXQvZHNhL0tjb25maWctNjUtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIEJyb2FkY29tIHN3aXRjaGVzIHVzaW5nIHByZXBlbmRlZCBoZWFkZXJzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTcxLVxcbm5ldC9kc2EvS2NvbmZpZzo3Mjpjb25maWcgTkVUX0RTQV9UQUdfSEVMTENSRUVLXFxubmV0L2RzYS9LY29uZmlnLTczLVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBIaXJzY2htYW5uIEhlbGxjcmVlayBUU04gc3dpdGNoZXNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctNzctXFxubmV0L2RzYS9LY29uZmlnOjc4OmNvbmZpZyBORVRfRFNBX1RBR19HU1dJUFxcbm5ldC9kc2EvS2NvbmZpZy03OS1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTGFudGlxIC8gSW50ZWwgR1NXSVAgc3dpdGNoZXNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctODMtXFxubmV0L2RzYS9LY29uZmlnOjg0OmNvbmZpZyBORVRfRFNBX1RBR19EU0FfQ09NTU9OXFxubmV0L2RzYS9LY29uZmlnLTg1LVxcdHRyaXN0YXRlXFxubmV0L2RzYS9LY29uZmlnLTg2LVxcbm5ldC9kc2EvS2NvbmZpZzo4Nzpjb25maWcgTkVUX0RTQV9UQUdfRFNBXFxubmV0L2RzYS9LY29uZmlnLTg4LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNYXJ2ZWxsIHN3aXRjaGVzIHVzaW5nIERTQSBoZWFkZXJzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTkzLVxcbm5ldC9kc2EvS2NvbmZpZzo5NDpjb25maWcgTkVUX0RTQV9UQUdfRURTQVxcbm5ldC9kc2EvS2NvbmZpZy05NS1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTWFydmVsbCBzd2l0Y2hlcyB1c2luZyBFdGhlclR5cGUgRFNBIGhlYWRlcnNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTAwLVxcbm5ldC9kc2EvS2NvbmZpZzoxMDE6Y29uZmlnIE5FVF9EU0FfVEFHX01US1xcbm5ldC9kc2EvS2NvbmZpZy0xMDItXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIE1lZGlhdGVrIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTEwNi1cXG5uZXQvZHNhL0tjb25maWc6MTA3OmNvbmZpZyBORVRfRFNBX1RBR19NWExfODYyWFhcXG5uZXQvZHNhL0tjb25maWctMTA4LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgTXhMODYyeHggc3dpdGNoZXNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTEzLVxcbm5ldC9kc2EvS2NvbmZpZzoxMTQ6Y29uZmlnIE5FVF9EU0FfVEFHX01YTF9HU1cxWFhcXG5uZXQvZHNhL0tjb25maWctMTE1LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNYXhMaW5lYXIgR1NXMXh4IHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTEyMS1cXG5uZXQvZHNhL0tjb25maWc6MTIyOmNvbmZpZyBORVRfRFNBX1RBR19LU1pcXG5uZXQvZHNhL0tjb25maWctMTIzLVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNaWNyb2NoaXAgODc5NS85Mzd4Lzk0NzcvOTg5MyBmYW1pbGllcyBvZiBzd2l0Y2hlc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xMjctXFxubmV0L2RzYS9LY29uZmlnOjEyODpjb25maWcgTkVUX0RTQV9UQUdfTkVUQ1xcbm5ldC9kc2EvS2NvbmZpZy0xMjktXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIE5YUCBORVRDIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTEzNy1cXG5uZXQvZHNhL0tjb25maWc6MTM4OmNvbmZpZyBORVRfRFNBX1RBR19PQ0VMT1RcXG5uZXQvZHNhL0tjb25maWctMTM5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBPY2Vsb3QgZmFtaWx5IG9mIHN3aXRjaGVzLCB1c2luZyBOUEkgcG9ydFxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNDgtXFxubmV0L2RzYS9LY29uZmlnOjE0OTpjb25maWcgTkVUX0RTQV9UQUdfT0NFTE9UXzgwMjFRXFxubmV0L2RzYS9LY29uZmlnLTE1MC1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgT2NlbG90IGZhbWlseSBvZiBzd2l0Y2hlcywgdXNpbmcgVkxBTlxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNTgtXFxubmV0L2RzYS9LY29uZmlnOjE1OTpjb25maWcgTkVUX0RTQV9UQUdfUUNBXFxubmV0L2RzYS9LY29uZmlnLTE2MC1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgUXVhbGNvbW0gQXRoZXJvcyBRQ0E4SyBzd2l0Y2hlc1xcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xNjQtXFxubmV0L2RzYS9LY29uZmlnOjE2NTpjb25maWcgTkVUX0RTQV9UQUdfUlRMNF9BXFxubmV0L2RzYS9LY29uZmlnLTE2Ni1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgUmVhbHRlayA0IGJ5dGUgcHJvdG9jb2wgQSB0YWdzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTE3MS1cXG5uZXQvZHNhL0tjb25maWc6MTcyOmNvbmZpZyBORVRfRFNBX1RBR19SVEw4XzRcXG5uZXQvZHNhL0tjb25maWctMTczLVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBSZWFsdGVrIDggYnl0ZSBwcm90b2NvbCA0IHRhZ3NcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTc3LVxcbm5ldC9kc2EvS2NvbmZpZzoxNzg6Y29uZmlnIE5FVF9EU0FfVEFHX1JaTjFfQTVQU1dcXG5uZXQvZHNhL0tjb25maWctMTc5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBSZW5lc2FzIFJaL04xIEE1UFNXIHN3aXRjaFxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0xODQtXFxubmV0L2RzYS9LY29uZmlnOjE4NTpjb25maWcgTkVUX0RTQV9UQUdfTEFOOTMwM1xcbm5ldC9kc2EvS2NvbmZpZy0xODYtXFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIFNNU0MvTWljcm9jaGlwIExBTjkzMDMgZmFtaWx5IG9mIHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTE5MC1cXG5uZXQvZHNhL0tjb25maWc6MTkxOmNvbmZpZyBORVRfRFNBX1RBR19TSkExMTA1XFxubmV0L2RzYS9LY29uZmlnLTE5Mi1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTlhQIFNKQTExMDUgc3dpdGNoZXNcXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMTk5LVxcbm5ldC9kc2EvS2NvbmZpZzoyMDA6Y29uZmlnIE5FVF9EU0FfVEFHX1RSQUlMRVJcXG5uZXQvZHNhL0tjb25maWctMjAxLVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBzd2l0Y2hlcyB1c2luZyBhIHRyYWlsZXIgdGFnXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTIwNS1cXG5uZXQvZHNhL0tjb25maWc6MjA2OmNvbmZpZyBORVRfRFNBX1RBR19WU0M3M1hYXzgwMjFRXFxubmV0L2RzYS9LY29uZmlnLTIwNy1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTWljcm9jaGlwL1ZpdGVzc2UgVlNDNzN4eCBmYW1pbHkgb2Ygc3dpdGNoZXMsIHVzaW5nIFZMQU5cXFwiXFxuLS1cXG5uZXQvZHNhL0tjb25maWctMjExLVxcbm5ldC9kc2EvS2NvbmZpZzoyMTI6Y29uZmlnIE5FVF9EU0FfVEFHX1hSUzcwMFhcXG5uZXQvZHNhL0tjb25maWctMjEzLVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBYUlM3MDB4IHN3aXRjaGVzXFxcIlxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTIxNy1cXG5uZXQvZHNhL0tjb25maWc6MjE4OmNvbmZpZyBORVRfRFNBX1RBR19ZVDkyMVhcXG5uZXQvZHNhL0tjb25maWctMjE5LVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IHN3aXRjaGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjozOC4wNDg0NTM2NDdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1NDY4ODkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgYW5kIGEgRm9jdXNlZCBSZXZpZXcqKlxuXG5Pa2F5LCBhZnRlciB0aGlua2luZyBhYm91dCB0aGlzLCBJJ3ZlIGNvbmNsdWRlZCB0aGF0IGBORVRfRFNBYCBpcyBzdWZmaWNpZW50IGZvciBub3cuIEkgZG9uJ3Qgc2VlIGFueSBpbW1lZGlhdGUgbmVlZCB0byBnbyBmdXJ0aGVyIGRvd24gdGhhdCBwYXRoLlxuXG5MZXQncyBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IHJlZ2FyZGluZyB0aG9zZSBmb2N1cyBzeW1ib2xzOiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgYG5mdF9yZWplY3RfaXB2NF9ldmFsYCwgYG5mdF9yZWplY3RfaXB2Nl9ldmFsYCwgYG5mdF9yZWplY3RfaW5ldF9ldmFsYCwgYG5mdF9tZXRhX2dldF9ldmFsYCwgYG5mdF9ydF9nZXRfZXZhbGAsIGBuZnRfeGZybV9nZXRfZXZhbGAsIGBuZnRfY29ubmxpbWl0X2V2YWxgLCBhbmQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YC4gVGhlc2UgYXJlIHRoZSBrZXkgYXJlYXMgdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuXG5cbkhvbGQgb24gYSBtaW51dGUsIEknbSBqdXN0IHJlY2FsbGluZyB0aGF0IGBuZnRfcmVqZWN0X2lwdjRfZXZhbGAgaXMsIGluIGZhY3QsIHN0YXRpY2FsbHkgZGVmaW5lZC4gTGV0IG1lIGp1c3Qgb3BlbiB1cCBgbmZ0X3JlamVjdF9pcHY0LmNgIGFuZCBtYWtlIHN1cmUgbXkgaW5zdGluY3RzIGFyZSBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDgyOCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjo0Mi4wMDMxNDUxNzFaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNTEyMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9yZWplY3RfaXB2NF9ldmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY0LmMtMTgtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jOjE5OnN0YXRpYyB2b2lkIG5mdF9yZWplY3RfaXB2NF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9pcHY0LmMtMjAtXFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjQuYz00MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcmVqZWN0X2lwdjRfb3BzID0ge1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jLTQzLVxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3JlamVjdCkpLFxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfcmVqZWN0X2lwdjQuYzo0NDpcXHQuZXZhbFxcdFxcdD0gbmZ0X3JlamVjdF9pcHY0X2V2YWwsXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWplY3RfaXB2NC5jLTQ1LVxcdC5pbml0XFx0XFx0PSBuZnRfcmVqZWN0X2luaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE2OjQyLjA0NDY2MjM4MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzA5NDU0MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgbmV0d29yayBmdW5jdGlvbnMuIFRoZSBpbml0aWFsIHRob3VnaHQgd2FzLCBldmVuIGlmIHNvbWV0aGluZydzIHN0YXRpYywgc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gZmluZCBpdCBpZiBpdCBpc24ndCBpbmxpbmVkLCBzbyBpdCdzICpwb3RlbnRpYWxseSogdGFyZ2V0YWJsZS4gQnV0IGxldCdzIHJlZmluZSB0aGlzIGFuYWx5c2lzLiBcblxuQWhhISBgbmZfc2VuZF9yZXNldGAgYW5kIGBuZl9zZW5kX3Jlc2V0NmAgYXJlIGJvdGggKmV4cG9ydGVkKiBhbmQgKm5vbi1zdGF0aWMqLiBBbmQgc2ltaWxhcmx5LCBgbmZfc2VuZF91bnJlYWNoYCBhbmQgYG5mX3NlbmRfdW5yZWFjaDZgIGFyZSBhbHNvIGV4cG9ydGVkLiBTbyB0aGF0J3MgZ29vZCEgVGhhdCBtYWtlcyB0aGVtIGJldHRlciBjYW5kaWRhdGVzLCBhbmQgd29ydGggZm9jdXNpbmcgb24uIExldCdzIG1ha2UgYSBub3RlIG9mIHRob3NlIGZvdXIgYXMgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIGZ1enppbmcuXG5cbk5vdywgd2hhdCBhYm91dCB0aGUgYG5mdGAgc3Vic3lzdGVtPyBMZXQncyBjaGVjayBgbmZ0X21ldGFfZ2V0X2V2YWxgLi4uIHllcCwgZXhwb3J0ZWQuIFRoYXQgbG9va3MgcHJvbWlzaW5nLiBBbmQgYG5mdF9ydF9nZXRfZXZhbGAgaXMgYWxzbyBleHBvcnRlZC4gT2theS4gV2hhdCBhYm91dCBgbmZ0X3hmcm1fZ2V0X2V2YWxgPyBBaCwgaXQncyBzdGF0aWMsIGRhbW4uIEJ1dCwgaG9sZCBvbi4uLiBgbmZ0X3hmcm1fZ2V0X2V2YWxfb3V0YCBpcyBhbHNvIHN0YXRpYy4gTGV0J3MgYmFja3RyYWNrLCBpdCdzICpzdGF0aWMqIGJ1dCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQ/IEkgc2VlIGBuZnRfeGZybV9nZXRfb3BzYCBpcyByZWdpc3RlcmVkLCBzbyBtYXliZSB0aGF0J3MgYSBiZXR0ZXIgc3RhcnRpbmcgcG9pbnQuXG5cbkFuZCBmaW5hbGx5LCBsZXQncyBsb29rIGF0IGBuZnRfY29ubmxpbWl0X2V2YWxgLCB0aGF0IG9uZSBpcyBzdGF0aWMuIEJ1dCwgd2FpdCwgYG5mX2Nvbm5jb3VudF9hZGRgIGlzIGV4cG9ydGVkLiBPa2F5LCBnb29kLiBTbyB0aGUgcGljdHVyZSdzIGJlY29taW5nIGNsZWFyZXIuIFxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQ4OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjo0Ny4zNTQxMTk4NzdaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzI4ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm5jb3VudF9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jPTEzMD1zdGF0aWMgYm9vbCBnZXRfY3Rfb3JfdHVwbGVfZnJvbV9za2Ioc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0xNjgtXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYzoxNjk6c3RhdGljIGludCBfX25mX2Nvbm5jb3VudF9hZGQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMTcwLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTI3Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jOjI3ODppbnQgbmZfY29ubmNvdW50X2FkZF9za2Ioc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMjc5LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0yODYtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsaXN0LVxcdTAwM2VsaXN0X2xvY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6Mjg3OlxcdHJldCA9IF9fbmZfY29ubmNvdW50X2FkZChuZXQsIHNrYiwgbDNudW0sIGxpc3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMjg4LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsaXN0LVxcdTAwM2VsaXN0X2xvY2spO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0yOTEtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6MjkyOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm5jb3VudF9hZGRfc2tiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTI5My1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM9NDAzPWluc2VydF90cmVlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNDM3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6NDM4OlxcdFxcdFxcdHJldCA9IG5mX2Nvbm5jb3VudF9hZGRfc2tiKG5ldCwgc2tiLCBsM251bSwgXFx1MDAyNnJiY29ubi1cXHUwMDNlbGlzdCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy00MzktXFx0XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVFWElTVClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM9NTMzPWNvdW50X3RyZWUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy01ODItXFx0Lyogc2FtZSBzb3VyY2UgbmV0d29yayAtXFx1MDAzZSBiZSBjb3VudGVkISAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6NTgzOlxcdHJldCA9IF9fbmZfY29ubmNvdW50X2FkZChuZXQsIHNrYiwgbDNudW0sIFxcdTAwMjZyYmNvbm4tXFx1MDAzZWxpc3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNTg0LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZyYmNvbm4tXFx1MDAzZWxpc3QubGlzdF9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTY6NDcuMzk2NDU0NTI2WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMTkxNTQ5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodHMsIGZvY3VzaW5nIG9uIHRoZSBleHBvcnRlZCBzeW1ib2xzOlxuXG4qKlJlZmxlY3Rpbmcgb24gS2VybmVsIE1vZHVsZSBFeHBvcnRzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgbmZfY29ubmNvdW50X2FkZF9za2JgIGFuZCBgbmZfY29ubmNvdW50X2NvdW50YCBhcmUgYm90aCBiZWluZyBleHBvcnRlZC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGZldyB0aGluZ3MsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2Yga2VybmVsIG1vZHVsZSBkZXNpZ24gYW5kIG5ldGZpbHRlci5cblxuRmlyc3QsIHRoZXNlIHN5bWJvbHMgYXJlIGNsZWFybHkgaW50ZW5kZWQgdG8gYmUgKnVzZWQqIGJ5IG90aGVyIG1vZHVsZXMuIFRoZXkncmUgbm90IGludGVybmFsIGZ1bmN0aW9uczsgdGhleSdyZSBtZWFudCBmb3IgaW50ZXJhY3Rpb24uIFRoZSBuYW1pbmcgc3VnZ2VzdHMgdGhleSdyZSByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcgb3IgY29ubmVjdGlvbiBjb3VudGluZyDigJMgbGlrZWx5IHBhcnQgb2Ygc29tZSBzb3J0IG9mIG5ldHdvcmsgZmlyZXdhbGwgb3IgbW9uaXRvcmluZyBmdW5jdGlvbmFsaXR5LiBUaGUgXCJuZlwiIHByZWZpeCBpcyBhIGRlYWQgZ2l2ZWF3YXkgZm9yIG5ldGZpbHRlci5cblxuSSdtIGFzc3VtaW5nIGBuZl9jb25uY291bnRfYWRkX3NrYmAgbGlrZWx5IGhhbmRsZXMgYWRkaW5nIG9yIHVwZGF0aW5nIGluZm9ybWF0aW9uIGFib3V0IGEgbmV0d29yayBwYWNrZXQgKFNLQikgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgY29ubmVjdGlvbi4gTWF5YmUgdGhpcyBpbnZvbHZlcyBpbmNyZW1lbnRpbmcgY291bnRlcnMgb3Igc3RvcmluZyBjb25uZWN0aW9uIGRldGFpbHMuIEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBuZXRmaWx0ZXIgaG9va3MsIGl0IGNvdWxkIGJlIGNhbGxlZCB3aXRoaW4gYW4gTkYgaG9vayBmdW5jdGlvbi5cblxuYG5mX2Nvbm5jb3VudF9jb3VudGAsIG9uIHRoZSBvdGhlciBoYW5kLCBsaWtlbHkgcHJvdmlkZXMgYSB3YXkgdG8gcmV0cmlldmUgb3IgZXhwb3NlIGNvbm5lY3Rpb24gY291bnQgZGF0YS4gQ291bGQgYmUgZm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvciB0byBkeW5hbWljYWxseSBhZGp1c3QgYmVoYXZpb3IgYmFzZWQgb24gY29ubmVjdGlvbiBsb2FkLiBJdCBjb3VsZCBiZSB1c2VkIHRvIGdhdGhlciBzdGF0aXN0aWNzIG9uIGEgY29ubmVjdGlvbiwgcGVyaGFwcyB0byB0cmFjayBudW1iZXIgb2YgcGFja2V0cyBhbmQgYnl0ZXMuXG5cblRoZSBmYWN0IHRoYXQgdGhlc2UgYXJlIGV4cG9ydGVkIGltcGxpZXMgdGhhdCB0aGVyZSBpcyBhIHdlbGwtZGVmaW5lZCBpbnRlcmZhY2UgZm9yIGludGVyYWN0aW5nIHdpdGggdGhpcyBcImNvbm5jb3VudFwiIGZ1bmN0aW9uYWxpdHkuIE5vdywgbXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIHJldmlldyB0aGUgYXNzb2NpYXRlZCBoZWFkZXIgZmlsZXMgYW5kIHNvdXJjZSBjb2RlIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlaXIgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQsIGNyaXRpY2FsbHksIHRoZWlyIGludGVuZGVkIHVzYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgb3BlcmF0ZSBvbiBhbmQgdGhlIHBvc3NpYmxlIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBjb25jZXJucyBpbnZvbHZlZC4gQXJlIHRoZXNlIGZ1bmN0aW9ucyB0aHJlYWQtc2FmZT8gRG8gdGhleSB1dGlsaXplIGFueSBpbnRlcm5hbCBtdXRleGVzP1xuXG5UaGlzIGV4cG9ydCBzdWdnZXN0cyB0aGF0IHdob2V2ZXIgZGV2ZWxvcGVkIHRoaXMgbW9kdWxlIHdhcyB0aGlua2luZyBhYm91dCBtb2R1bGFyaXR5LiBUaGV5IHJlY29nbml6ZWQgdGhhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIG9yIGV2ZW4gb3RoZXIgbW9kdWxlcyBtaWdodCBuZWVkIHRvIGFjY2VzcyBhbmQgdXRpbGl6ZSB0aGlzIGNvbm5lY3Rpb24gY291bnRpbmcgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBhIGdvb2QgdGhpbmcg4oCTIGdvb2QgY29kZSBkZXNpZ24gcHJvbW90ZXMgcmV1c2UgYW5kIGNvbGxhYm9yYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoZXkncmUgZGVzaWduZWQgZm9yIG1vZHVsYXJpdHkuXG5cblNvLCBpbiBzdW1tYXJ5OiBJJ20gc2VlaW5nIGEgY29ubmVjdGlvbiBjb3VudCBtb2R1bGUgb3IgZmVhdHVyZS4gSSBuZWVkIHRvIHJlc2VhcmNoIGV4YWN0bHkgaG93IHRob3NlIG1vZHVsZXMgYXJlIGRlc2lnbmVkIHRvIGludGVncmF0ZSB3aXRoIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjc5NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE2OjUyLjUxNTYxMzc0NFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE0MDEwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubmNvdW50X2NvdW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz01OTU9c3RhdGljIHZvaWQgdHJlZV9nY193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy02NjUtICovXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYzo2NjY6dW5zaWduZWQgaW50IG5mX2Nvbm5jb3VudF9jb3VudF9za2Ioc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNjY3LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy02NzQtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6Njc1OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm5jb3VudF9jb3VudF9za2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNjc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoxNjo1Mi41NTcwMjA4MTRaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY4NDkxMzM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEFzc2Vzc21lbnQgb2YgS2V5IE5ldGZpbHRlciBTeW1ib2xzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHRoaW5raW5nIGFib3V0IHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gSSBzdGFydGVkIGJ5IHplcm9pbmcgaW4gb24gYG5mX2Nvbm5jb3VudF9hZGRfc2tiYCBhbmQgYG5mX2Nvbm5jb3VudF9jb3VudF9za2JgIGFzIGdvb2QgaW5pdGlhbCBjYW5kaWRhdGVzLiBOb3csIEkndmUgZXhwYW5kZWQgdGhlIHNjb3BlIGEgYml0LlxuXG5JJ20gYWxzbyBjb25zaWRlcmluZyBgbmZ0X2Zsb3dfcm91dGVgIGJlY2F1c2UgaXQncyBleHBvcnRlZCBhbmQgbG9va3MgaW1wb3J0YW50LiBBbmQsIHNpbWlsYXJseSwgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAgaGF2ZSBjYXVnaHQgbXkgYXR0ZW50aW9uIGZvciBiZWluZyBleHBvcnRlZC5cblxuVGhlcmVmb3JlLCBteSBjdXJyZW50IHdvcmtpbmcgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGluY2x1ZGVzOlxuXG4qICAgYG5mdF9mbG93X3JvdXRlYFxuKiAgIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgXG4qICAgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYFxuKiAgIGBuZl9zZW5kX3Jlc2V0YFxuKiAgIGBuZl9zZW5kX3Jlc2V0NmBcbiogICBgbmZfc2VuZF91bnJlYWNoYFxuKiAgIGBuZl9zZW5kX3VucmVhY2g2YFxuKiAgIGBuZnRfbWV0YV9nZXRfZXZhbGBcbiogICBgbmZ0X3J0X2dldF9ldmFsYFxuKiAgIGBuZl9jb25uY291bnRfYWRkX3NrYmBcbiogICBgbmZfY29ubmNvdW50X2NvdW50X3NrYmBcbiogICBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgXG5cbkkgZG91YmxlLWNoZWNrZWQgZWFjaCBvbmUgdG8gYmUgc3VyZSB0aGV5IHdlcmUgZXhwb3J0ZWQsIGp1c3QgdG8gY29uZmlybSBteSBjdXJyZW50IHVuZGVyc3RhbmRpbmcuIFNvLCBgbmZ0X2Zsb3dfcm91dGVgIGFuZCB0aGUgYGRldl9maWxsX2ZvcndhcmRfcGF0aCpgIGZ1bmN0aW9ucyBhcmUgYWxsIGV4cG9ydGVkLiBBbHNvIHRoZSBgbmZfc2VuZF8qYCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLCBhbG9uZyB3aXRoIHRoZSBgbmZ0XypfZ2V0X2V2YWxgIGZ1bmN0aW9ucywgYW5kIG9mIGNvdXJzZSB0aGUgYG5mX2Nvbm5jb3VudF8qYCBmdW5jdGlvbnMuXG5cbkkgZGlkIHJ1biBpbnRvIGEgc21hbGwgYW5vbWFseSB3aXRoIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAuIFdoaWxlIGl0ICppc24ndCogZXhwb3J0ZWQsIGl0J3Mgbm9uLXN0YXRpYyBhbmQgZGVmaW5lZCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYCwgd2hpY2ggbWFrZXMgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24sIGRlc3BpdGUgYmVpbmcgbm9uLWV4cG9ydGVkLlxuXG5XYWl0Li4uIHNvbWV0aGluZyBzdGlsbCBzZWVtcyBhIGxpdHRsZSBvZmYuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgYG5mX3NlbmRfdW5yZWFjaGAgaXMgZXhwb3J0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTIyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE2OjU5LjI0MTkzNjM4WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODYzMDU0Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXChuZl9zZW5kX3VucmVhY2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MzQ4PXZvaWQgbmZfc2VuZF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCBjb2RlLCBpbnQgaG9vaylcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTM2OC19XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM6MzY5OkVYUE9SVF9TWU1CT0xfR1BMKG5mX3NlbmRfdW5yZWFjaCk7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzcwLVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmM9NDM4PXZvaWQgbmZfc2VuZF91bnJlYWNoNihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2JfaW4sXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy00NTEtfVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jOjQ1MjpFWFBPUlRfU1lNQk9MX0dQTChuZl9zZW5kX3VucmVhY2g2KTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy00NTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE3OjAxLjEwNDk5OTMwNVoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODY5NjMzNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSdtIHRoaW5raW5nIHRoZXNlIHRoaW5ncyBteXNlbGY6XG5cbioqRXhwb3J0aW5nIE5GVHMgYW5kIEV2YWx1YXRpb24gUmV0cmlldmFsKipcblxuQWxyaWdodCwgc28gdGhlIHRvcGljIGF0IGhhbmQgaXMgdGhlIGV4cG9ydCBwcm9jZXNzLCBhbmQsIHllcywgSSdtIGNvbmZpcm1pbmcgdGhhdCB0aGUgcmVsZXZhbnQgaXRlbXMgYXJlIGluZGVlZCBiZWluZyBleHBvcnRlZC4gTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBgbmZ0X3J0X2dldF9ldmFsYCBmdW5jdGlvbi4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIHJldHJpZXZpbmcgdGhlIGV2YWx1YXRpb24gcmVzdWx0cyByZXNpZGVzLCBhbmQgdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIHdvcmtzIGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGUgZXhwb3J0IHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdmFsdWVzIGFyZSBhY3F1aXJlZCBhbmQgaG93IHRoYXQgYWNxdWlzaXRpb24gd29ya3MgaW4gcmVsYXRpb24gdG8gaG93IGl0IGlzIGV4cG9ydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODgzNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjE3OjAzLjk3NDYzNjEzNFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyOTU0Mzc4NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKG5mdF9ydF9nZXRfZXZhbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MTc6MDUuOTA0MTkwNTk4WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDYzNDM0NDAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSG1tLCBgbmZ0X3J0X2dldF9ldmFsYCBJcyBNaXNzaW5nPyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGp1c3QgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwncyBuZXRmaWx0ZXIgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgcnVudGltZSBldmFsdWF0aW9uIGZyYW1ld29yay4gSSB3YXMgZXhwZWN0aW5nIGBuZnRfcnRfZ2V0X2V2YWxgIHRvIGJlIGF2YWlsYWJsZS4gSSBuZWVkIGl0IGZvciBYLCBhbmQgSSB0aG91Z2h0IHRoYXQgd2FzIGEgY29yZSBwYXJ0IG9mIHRoZSBpbmZyYXN0cnVjdHVyZS4gQnV0Li4uIGl0J3Mgbm90IGV4cG9ydGVkLiBUaGF0J3MgaW1tZWRpYXRlbHkgcHJvYmxlbWF0aWMuIE5vdyBJIGhhdmUgdG8gZmlndXJlIG91dCB3aHkuIElzIGl0IGEgY29tcGlsZS10aW1lIG9wdGlvbiBJIG1pc3NlZD8gSXMgaXQgaGlkZGVuIGJlaGluZCBzb21lIG1hY3JvIHRoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZD8gT3IgcGVyaGFwcyBpdCdzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgZnVuY3Rpb24gd2l0aCBhIHNpbWlsYXIgbmFtZSwgc29tZXRoaW5nIGludGVybmFsPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBUaGlzIHdhc24ndCBhbnRpY2lwYXRlZCwgYW5kIGl0IHRocm93cyBhIGJpdCBvZiBhIHdyZW5jaCBpbnRvIG15IGN1cnJlbnQgcGxhbi4gVGltZSB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIGhlYWRlcnMgYWdhaW4sIGFuZCBtYXliZSBjcm9zcy1yZWZlcmVuY2UgdGhlIGNvbW1pdCBsb2dzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTA2MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjIyOjI2LjUzODUzODk1WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI5NDk3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3J0X2dldF9ldmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcnQuYz0yMj1zdGF0aWMgdTE2IGdldF90Y3Btc3MoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKnNrYmRzdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmMtNTMtXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYzo1NDp2b2lkIG5mdF9ydF9nZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYy01NS1cXHRcXHQgICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmM9MTkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9ydF9nZXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYy0xOTUtXFx0LnNpemVcXHRcXHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcnQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9ydC5jOjE5NjpcXHQuZXZhbFxcdFxcdD0gbmZ0X3J0X2dldF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmMtMTk3LVxcdC5pbml0XFx0XFx0PSBuZnRfcnRfZ2V0X2luaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjIyOjI2LjcxMTQ5NzM5OFoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjUwMDY3ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYG5mdF9tZXRhX2dldF9ldmFsYCdzIFZpc2liaWxpdHkgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIHRhcmdldCBmdW5jdGlvbiBpc24ndCBzdGF0aWMsIGJ1dCBpdCBhbHNvIGlzbid0IGV4cGxpY2l0bHkgZXhwb3J0ZWQuIFRoYXQncyBhY3R1YWxseSBhIHJlbGllZi4gV2hpbGUgc3RhdGljIGZ1bmN0aW9ucyBjYW4gc29tZXRpbWVzIHByZXNlbnQgYSBjaGFsbGVuZ2UgaW4gZnV6emluZyBzY2VuYXJpb3MsIHRoZSBmYWN0IHRoYXQgaXQncyAqbm90KiBzdGF0aWMgbWVhbnMgaXQncyBhY2Nlc3NpYmxlLiBTeXprYWxsZXIsIGluIGl0cyBjdXJyZW50IHN0YXRlLCBjYW4gYWJzb2x1dGVseSBoYW5kbGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHNvIG5vIG5lZWQgZm9yIHdvcmthcm91bmRzIHRoZXJlLiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBzeW1ib2wgdGFibGUgY29udGFpbnMgdGhlIGZ1bmN0aW9uLlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhbmQgZm9jdXMgc3BlY2lmaWNhbGx5IG9uIGBuZnRfbWV0YV9nZXRfZXZhbGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGZvciBleHBsb2l0YXRpb24uIFRoaXMgaXMgd2hlcmUgdGhlIGludmVzdGlnYXRpb24gcmVhbGx5IGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1ODAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoyMjoyOS45NjE1Njk3NDJaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDAzNjkyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKG5mdF9tZXRhX2dldF9ldmFsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz0zNjQ9dm9pZCBuZnRfbWV0YV9nZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDcyLX1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NDczOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9tZXRhX2dldF9ldmFsKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNDc0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoyMjozNC4zNjE5NDY1NzFaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjczMzY4MzkyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlZlcmlmeWluZyB0aGUgRXhwb3J0IE9wZXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSd2ZSBlc3RhYmxpc2hlZCB0aGF0IHRoZSBkYXRhIGlzICpleHBvcnRlZCouIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBhc3N1bXB0aW9uIHdlJ3JlIHN0YXJ0aW5nIGZyb20uIE5vdywgbGV0J3MgZHJpbGwgZG93biBhbmQgc2VlIGhvdyBleGFjdGx5IHRoYXQncyB3b3JraW5nLCB3aGF0J3MgYmVoaW5kIHRoZSBzY2VuZXMuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiBjYWxsOiBgbmZ0X3hmcm1fZ2V0X2V2YWxgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsgaGFuZGxlcyB0aGUgdHJhbnNmb3JtYXRpb24gcmV0cmlldmFsIGFuZCBldmFsdWF0aW9uIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgaW50ZXJhY3Rpb25zIGhhcHBlbmluZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTkzNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjIyOjM3LjA5NTYzNDgwMloiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MTc0NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF94ZnJtX2dldF9ldmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM9MTIwPXN0YXRpYyB2b2lkIG5mdF94ZnJtX3N0YXRlX2dldF9rZXkoY29uc3Qgc3RydWN0IG5mdF94ZnJtICpwcml2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTE2MC1cXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MTYxOnN0YXRpYyB2b2lkIG5mdF94ZnJtX2dldF9ldmFsX2luKGNvbnN0IHN0cnVjdCBuZnRfeGZybSAqcHJpdixcXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTYyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTc2LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoxNzc6c3RhdGljIHZvaWQgbmZ0X3hmcm1fZ2V0X2V2YWxfb3V0KGNvbnN0IHN0cnVjdCBuZnRfeGZybSAqcHJpdixcXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMTc4LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTIwMS1cXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MjAyOnN0YXRpYyB2b2lkIG5mdF94ZnJtX2dldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMjAzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMDktXFx0Y2FzZSBYRlJNX1BPTElDWV9JTjpcXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MjEwOlxcdFxcdG5mdF94ZnJtX2dldF9ldmFsX2luKHByaXYsIHJlZ3MsIHBrdCk7XFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTIxMS1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmMtMjEyLVxcdGNhc2UgWEZSTV9QT0xJQ1lfT1VUOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoyMTM6XFx0XFx0bmZ0X3hmcm1fZ2V0X2V2YWxfb3V0KHByaXYsIHJlZ3MsIHBrdCk7XFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTIxNC1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYz0yNzA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3hmcm1fZ2V0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yNzItXFx0LnNpemVcXHRcXHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfeGZybSkpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoyNzM6XFx0LmV2YWxcXHRcXHQ9IG5mdF94ZnJtX2dldF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yNzQtXFx0LmluaXRcXHRcXHQ9IG5mdF94ZnJtX2dldF9pbml0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoyMjozNy4xOTk4MTQ3MzFaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3OTU0ODAwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBTeXprYWxsZXIgVGFyZ2V0KipcblxuUmlnaHQsIHRoaXMgbG9va3MgcHJldHR5IHN0YXRpYy4gSSBzZWUgaXQsIHJlZ2lzdGVyZWQgaW4gYG5mdF94ZnJtX2dldF9vcHNgLCBhbmQgdGhhdCBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoZSBmYWN0IHRoYXQgaXQncyAqbm90KiBkeW5hbWljYWxseSBnZW5lcmF0ZWQgaW5jcmVhc2VzIHRoZSBjaGFuY2UgdGhhdCBzeXprYWxsZXIsIHRoZSBmdXp6ZXIsIGNvdWxkIHBvdGVudGlhbGx5IHRhcmdldCBpdCBkaXJlY3RseS4gSWYgaXQncyBub3QgaW5saW5lZCwgdGhlbiBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgdG8gaW5jbHVkZSBhbmQgc2VlIHdoYXQgaGFwcGVucy4gSSdtIHRoaW5raW5nIHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGZpbmQgYSB3YXkgaW4uXG5cbk5vdywgbGV0J3Mgc3dpdGNoIGdlYXJzIGFuZCBpbnZlc3RpZ2F0ZSBgbmZ0X2Nvbm5saW1pdF9ldmFsYC4gSSdsbCBjcm9zcy1yZWZlcmVuY2UgdGhlIGBuZnRfeGZybV9nZXRfb3BzYCB0byBkZXRlcm1pbmUgdGhlIHJlbGF0aW9uc2hpcCwgaWYgYW55LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDczMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjIyOjQwLjU3OTM2NjA2NFoiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMzQ1NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9jb25ubGltaXRfZXZhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYz0xNzY9c3RhdGljIHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgbmZ0X2Nvbm5saW1pdF9vYmpfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmMtMTgzLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jOjE4NDpzdGF0aWMgdm9pZCBuZnRfY29ubmxpbWl0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jLTE4NS1cXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmM9MjUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9jb25ubGltaXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmMtMjUzLVxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X2Nvbm5saW1pdCkpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jOjI1NDpcXHQuZXZhbFxcdFxcdD0gbmZ0X2Nvbm5saW1pdF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jLTI1NS1cXHQuaW5pdFxcdFxcdD0gbmZ0X2Nvbm5saW1pdF9pbml0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoyMjo0MC43ODA3MjA5MzFaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1MDc3NjIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBTdGF0aWMgUmVhbGl0eTogUmVnaXN0ZXJlZCBhbmQgUmVhZHkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgc29tZXRoaW5nJ3MgKnN0YXRpYyouIE5vdCBkeW5hbWljLCBub3QgY2hhbmdpbmcg4oCTIHdoaWNoIGNvdWxkIGJlIGEgZ29vZCBvciBiYWQgdGhpbmcsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gQnV0IGFsc28sIGl0J3MgKnJlZ2lzdGVyZWQqLiBUaGF0J3MgdGhlIGNyaXRpY2FsIGJpdC4gUmVnaXN0ZXJlZCBpbXBsaWVzIGl0J3Mga25vd24sIGFjY291bnRlZCBmb3IsIHdpdGhpbiB0aGUgc3lzdGVtLiBXZSdyZSBub3QgZGVhbGluZyB3aXRoIGFuIHVua25vd24gdmFyaWFibGUgaGVyZSwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCByZWxpZWYuIE5vdywgd2hhdCdzIHJlZ2lzdGVyZWQsIGFuZCB3aGF0IGRvZXMgdGhpcyBtZWFuIGZvciBvdXIgZmxvdz8gVGltZSB0byBkaWcgaW50byBgbmZ0X2Zsb3dfcm91dGVgLiBMZXQncyBzZWUgaG93IHRoYXQgcmVnaXN0ZXJlZCBzdGF0dXMgaW50ZXJhY3RzIHdpdGggdGhlIHJvdXRpbmcgbG9naWMuIFRoaXMgY291bGQgYmUgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSdtIGtlZW4gdG8gc2VlIGlmIHRoaXMgc3RhdGljIGJ1dCByZWdpc3RlcmVkIGFzcGVjdCBpbmZsdWVuY2VzIHRoZSBmbG93IHBhdGgsIG9yIGlzIHNpbXBseSBhIGRhdGEgcG9pbnQuIExldCdzIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEyNjMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDoyMjo0NC41MzE1MDA1NThaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODkyMTE0NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKG5mdF9mbG93X3JvdXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MjYwPWludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMTYtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MzE3OkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9mbG93X3JvdXRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MjI6NDkuNDIwNzIxMDVaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTMyODI3MDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUHJvcG9zZWQgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZXJpZXMgaGFzIGJlZW4gZXhwb3J0ZWQsIGdvb2QuIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgZml4ZXMg4oCTIHNwZWNpZmljYWxseSwgbWVtb3J5IGxlYWsgcmVzb2x1dGlvbiBhbmQgcmVmaW5lZCBoYW5kbGluZyBvZiBgZHN0X2VudHJ5YCB3aXRoaW4gYHNrX2J1ZmZgIGFuZCBgbmV0X2RldmljZV9wYXRoYC4gSSd2ZSBub3RlZCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gc3ltYm9scyB0YXJnZXRlZCBmb3IgcmV2aWV3OiBgbmZ0X2Zsb3dfcm91dGVgLCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCwgYG5mX3NlbmRfcmVzZXRgLCBhbmQgc28gb24sIGNvdmVyaW5nIHRoZSB1c3VhbCBzdXNwZWN0cyBpbiBOZXRmaWx0ZXIncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBwYWNrZXQgcGF0aCwgaW5jbHVkaW5nIGZsb3cgb2ZmbG9hZCwgVENQIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCByZWplY3QvdW5yZWFjaGFibGUgaGFuZGxpbmcuXG5cblRoZSBwYXRjaCdzIGludHJvZHVjdGlvbiBvZiBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VgIGZvciBjb3JyZWN0IGBkc3RgIHJlbGVhc2UgaXMgYSBkZWZpbml0ZSBzaWduIHRoYXQgdGhpcyBpcyBpbXBvcnRhbnQsIGFzIGFyZSB0aGUgdXBkYXRlcyB0byBgc2tiX3ZhbGlkX2RzdGAgY2hlY2tzIGFjcm9zcyB0aGUgbW9kdWxlcy4gVGhlc2UgYXJlIGNoYW5nZXMgdGhhdCB0b3VjaCByZWFjaGFibGUga2VybmVsIGNvZGUgcGF0aHMuIFRoaXMgZGVtYW5kcyByaWdvcm91cyBmdXp6aW5nIGFzIHBhcnQgb2Ygb3VyIGFuYWx5c2lzIHBsYW4uXG5cbk5vdywgbGV0J3MgdmVyaWZ5IG15IGNvbmZpZ3VyYXRpb24gYXNzdW1wdGlvbnMuIEkgc2VlIHRoYXQgd2UgaGF2ZSBgTkZfVEFCTEVTYCwgYE5GX1RBQkxFU19JUFY0YCwgYE5GX1RBQkxFU19JUFY2YCwgYE5GX1RBQkxFU19JTkVUYCwgYE5GX0ZMT1dfVEFCTEVgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORlRfUkVKRUNUX0lQVjRgLCBgTkZUX1JFSkVDVF9JUFY2YCwgYE5GVF9SRUpFQ1RfSU5FVGAsIGBORlRfWEZSTWAsIGBORlRfQ09OTkxJTUlUYCwgYE5GX0NPTk5UUkFDS2AsIGBORVRfSVBJUGAsIGBJUFY2X1RVTk5FTGAsIGFuZCBgTkVUX0RTQWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGNvcnJlY3QuXG5cbkZpcnN0LCBpcyBgTkZfQ09OTkNPVU5UYCBhY3R1YWxseSBuZWVkZWQsIG9yIGlzIGl0IHB1bGxlZCBpbiB2aWEgYSBkZXBlbmRlbmN5PyBBaCwgaXQgc2VlbXMgYE5GVF9DT05OTElNSVRgIHNlbGVjdHMgYE5GX0NPTk5DT1VOVGAsIHNvIGp1c3QgaGF2aW5nIGBORlRfQ09OTkxJTUlUYCBpcyBzdWZmaWNpZW50LiBUaGF0IHNpbXBsaWZpZXMgdGhlIGNvbmZpZ3VyYXRpb24uXG5cbk5leHQsIEknbGwgY29uZmlybSB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgc2VlLiBgTkVUX0lQSVBgIGJ1aWxkcyBgbmV0L2lwdjQvaXBpcC5jYCwgc28gdGhhdCdzIGNvcnJlY3QuIFNpbWlsYXJseSwgYElQVjZfVFVOTkVMYCBidWlsZHMgYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AsIGFuZCBgTkVUX0RTQWAgYnVpbGRzIGBuZXQvZHNhL3VzZXIuY2AuIEV4Y2VsbGVudCwgbXkgYXNzdW1wdGlvbnMgYXJlIHZhbGlkYXRlZC5cblxuSSdtIHNhdGlzZmllZCB3aXRoIHRoaXMgYW5hbHlzaXMuIEkgd2lsbCBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTYxNiwiT3V0cHV0VG9rZW5zIjozODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6MjI6NTguNzQ4OTk1OTFaIiwiU2VxIjo3MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY5MDUzNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX0lQVjRcIixcbiAgICBcIk5GX1RBQkxFU19JUFY2XCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZUX1JFSkVDVF9JUFY0XCIsXG4gICAgXCJORlRfUkVKRUNUX0lQVjZcIixcbiAgICBcIk5GVF9SRUpFQ1RfSU5FVFwiLFxuICAgIFwiTkZUX1hGUk1cIixcbiAgICBcIk5GVF9DT05OTElNSVRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVUX0lQSVBcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJORVRfRFNBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X2Zsb3dfcm91dGVcIixcbiAgICBcImRldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwiZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VcIixcbiAgICBcIm5mX3NlbmRfcmVzZXRcIixcbiAgICBcIm5mX3NlbmRfcmVzZXQ2XCIsXG4gICAgXCJuZl9zZW5kX3VucmVhY2hcIixcbiAgICBcIm5mX3NlbmRfdW5yZWFjaDZcIixcbiAgICBcIm5mdF9tZXRhX2dldF9ldmFsXCIsXG4gICAgXCJuZnRfcnRfZ2V0X2V2YWxcIixcbiAgICBcIm5mX2Nvbm5jb3VudF9hZGRfc2tiXCIsXG4gICAgXCJuZl9jb25uY291bnRfY291bnRfc2tiXCIsXG4gICAgXCJuZl9jb25udHJhY2tfdGNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0byBmaXggbWVtb3J5IGxlYWtzIGFuZCBpbXByb3ZlIGhhbmRsaW5nIG9mIGBkc3RfZW50cnlgIGluIGBza19idWZmYCBhbmQgYG5ldF9kZXZpY2VfcGF0aGAuIEl0IGludHJvZHVjZXMgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCB0byBwcm9wZXJseSByZWxlYXNlIGBkc3RgIGVudHJpZXMsIHVwZGF0ZXMgYHNrYl92YWxpZF9kc3RgIGNoZWNrcyBpbiBuZXRmaWx0ZXIgcmVqZWN0LCBtZXRhLCBydCwgYW5kIHhmcm0gbW9kdWxlcywgYW5kIG1vZGlmaWVzIGNvbm50cmFjayBUQ1Agc3RhdGUgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX0lQVjRcIixcbiAgICBcIk5GX1RBQkxFU19JUFY2XCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZUX1JFSkVDVF9JUFY0XCIsXG4gICAgXCJORlRfUkVKRUNUX0lQVjZcIixcbiAgICBcIk5GVF9SRUpFQ1RfSU5FVFwiLFxuICAgIFwiTkZUX1hGUk1cIixcbiAgICBcIk5GVF9DT05OTElNSVRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVUX0lQSVBcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJORVRfRFNBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X2Zsb3dfcm91dGVcIixcbiAgICBcImRldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwiZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VcIixcbiAgICBcIm5mX3NlbmRfcmVzZXRcIixcbiAgICBcIm5mX3NlbmRfcmVzZXQ2XCIsXG4gICAgXCJuZl9zZW5kX3VucmVhY2hcIixcbiAgICBcIm5mX3NlbmRfdW5yZWFjaDZcIixcbiAgICBcIm5mdF9tZXRhX2dldF9ldmFsXCIsXG4gICAgXCJuZnRfcnRfZ2V0X2V2YWxcIixcbiAgICBcIm5mX2Nvbm5jb3VudF9hZGRfc2tiXCIsXG4gICAgXCJuZl9jb25uY291bnRfY291bnRfc2tiXCIsXG4gICAgXCJuZl9jb25udHJhY2tfdGNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0byBmaXggbWVtb3J5IGxlYWtzIGFuZCBpbXByb3ZlIGhhbmRsaW5nIG9mIGBkc3RfZW50cnlgIGluIGBza19idWZmYCBhbmQgYG5ldF9kZXZpY2VfcGF0aGAuIEl0IGludHJvZHVjZXMgYGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlYCB0byBwcm9wZXJseSByZWxlYXNlIGBkc3RgIGVudHJpZXMsIHVwZGF0ZXMgYHNrYl92YWxpZF9kc3RgIGNoZWNrcyBpbiBuZXRmaWx0ZXIgcmVqZWN0LCBtZXRhLCBydCwgYW5kIHhmcm0gbW9kdWxlcywgYW5kIG1vZGlmaWVzIGNvbm50cmFjayBUQ1Agc3RhdGUgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhxnfd[1] Phase: Succeeded StartedAt: 2026-08-02 00:23:11 +0000 UTC FinishedAt: 2026-08-02 00:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 00:23:11 +0000 UTC FinishedAt: 2026-08-02 00:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2] Phase: Succeeded StartedAt: 2026-08-02 00:23:11 +0000 UTC FinishedAt: 2026-08-02 04:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 00:23:11 +0000 UTC FinishedAt: 2026-08-02 04:16:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 00:23:11 +0000 UTC FinishedAt: 2026-08-02 00:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 00:23:11 +0000 UTC FinishedAt: 2026-08-02 00:23:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowhxnfd/series-workflowhxnfd-convert-artifact-1836265945/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 00:23:37 +0000 UTC FinishedAt: 2026-08-02 00:51:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 00:23:37 +0000 UTC FinishedAt: 2026-08-02 00:51:41 +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:*07fc9044-d6e1-45c5-903d-3d84aa66af2d,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-workflowhxnfd/series-workflowhxnfd-convert-artifact-1836265945/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": "004c325a-7460-40ee-a42b-7cdd19728925", "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-workflowhxnfd/series-workflowhxnfd-build-action-2833732215/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 00:23:37 +0000 UTC FinishedAt: 2026-08-02 00:51:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*07fc9044-d6e1-45c5-903d-3d84aa66af2d,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-workflowhxnfd/series-workflowhxnfd-convert-artifact-1836265945/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": "004c325a-7460-40ee-a42b-7cdd19728925", "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-workflowhxnfd/series-workflowhxnfd-build-action-2833732215/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 00:51:41 +0000 UTC FinishedAt: 2026-08-02 00:51:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 00:51:41 +0000 UTC FinishedAt: 2026-08-02 00:51:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 00:51:41 +0000 UTC FinishedAt: 2026-08-02 00:52:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 00:51:41 +0000 UTC FinishedAt: 2026-08-02 00:52:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowhxnfd/series-workflowhxnfd-convert-artifact-1377423532/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 00:52:08 +0000 UTC FinishedAt: 2026-08-02 00:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 00:52:08 +0000 UTC FinishedAt: 2026-08-02 00:53:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*004c325a-7460-40ee-a42b-7cdd19728925,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-workflowhxnfd/series-workflowhxnfd-build-action-2833732215/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-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 00:54:11 +0000 UTC FinishedAt: 2026-08-02 00:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 00:54:11 +0000 UTC FinishedAt: 2026-08-02 00:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 00:54:11 +0000 UTC FinishedAt: 2026-08-02 01:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 00:54:11 +0000 UTC FinishedAt: 2026-08-02 01:13:13 +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:*07fc9044-d6e1-45c5-903d-3d84aa66af2d,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-workflowhxnfd/series-workflowhxnfd-convert-artifact-1377423532/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": "edb8e6e5-db44-4feb-9779-9afa835f1f05", "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-workflowhxnfd/series-workflowhxnfd-build-action-3208337224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 00:54:11 +0000 UTC FinishedAt: 2026-08-02 01:13:01 +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:*07fc9044-d6e1-45c5-903d-3d84aa66af2d,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-workflowhxnfd/series-workflowhxnfd-convert-artifact-1377423532/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": "edb8e6e5-db44-4feb-9779-9afa835f1f05", "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-workflowhxnfd/series-workflowhxnfd-build-action-3208337224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 01:13:13 +0000 UTC FinishedAt: 2026-08-02 01:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 01:13:13 +0000 UTC FinishedAt: 2026-08-02 01:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 01:13:13 +0000 UTC FinishedAt: 2026-08-02 01:15:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 01:13:13 +0000 UTC FinishedAt: 2026-08-02 01:15:05 +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:*edb8e6e5-db44-4feb-9779-9afa835f1f05,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-workflowhxnfd/series-workflowhxnfd-build-action-3208337224/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-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-02 01:15:15 +0000 UTC FinishedAt: 2026-08-02 04:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 01:15:15 +0000 UTC FinishedAt: 2026-08-02 01:15:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 01:15:15 +0000 UTC FinishedAt: 2026-08-02 01:15:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-02 01:15:16 +0000 UTC FinishedAt: 2026-08-02 04:16:55 +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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"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:*004c325a-7460-40ee-a42b-7cdd19728925,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*edb8e6e5-db44-4feb-9779-9afa835f1f05,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-workflowhxnfd/series-workflowhxnfd-build-action-2833732215/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-workflowhxnfd/series-workflowhxnfd-build-action-3208337224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 01:15:16 +0000 UTC FinishedAt: 2026-08-02 01:15:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 01:15:16 +0000 UTC FinishedAt: 2026-08-02 01:15:40 +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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"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-workflowhxnfd/series-workflowhxnfd-convert-artifact-2409450133/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-02 01:15:16 +0000 UTC FinishedAt: 2026-08-02 01:15:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-02 01:15:46 +0000 UTC FinishedAt: 2026-08-02 04:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxnfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nft_flow_route","dev_fill_forward_path","dev_fill_forward_path_release","nf_send_reset","nf_send_reset6","nf_send_unreach","nf_send_unreach6","nft_meta_get_eval","nft_rt_get_eval","nf_conncount_add_skb","nf_conncount_count_skb","nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_IPV4","NF_TABLES_IPV6","NF_TABLES_INET","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NFT_REJECT_IPV4","NFT_REJECT_IPV6","NFT_REJECT_INET","NFT_XFRM","NFT_CONNLIMIT","NF_CONNTRACK","NET_IPIP","IPV6_TUNNEL","NET_DSA"],"series_id":"95906114-7fde-4ead-925f-0aa9bae6ff0e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-02 01:15:46 +0000 UTC FinishedAt: 2026-08-02 04:16:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*004c325a-7460-40ee-a42b-7cdd19728925,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*edb8e6e5-db44-4feb-9779-9afa835f1f05,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-workflowhxnfd/series-workflowhxnfd-build-action-2833732215/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-workflowhxnfd/series-workflowhxnfd-build-action-3208337224/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-workflowhxnfd/series-workflowhxnfd-convert-artifact-2409450133/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,}