Name: series-workflowz5n9n Phase: Succeeded StartedAt: 2026-08-13 13:41:14 +0000 UTC FinishedAt: 2026-08-13 14:50:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[0] Phase: Succeeded StartedAt: 2026-08-13 13:41:14 +0000 UTC FinishedAt: 2026-08-13 13:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 13:41:14 +0000 UTC FinishedAt: 2026-08-13 13:59:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2bb155e92167cd5ad6aae312e83291da2454f8b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2bb155e92167cd5ad6aae312e83291da2454f8b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "a94363ad-eef0-4cc8-9c49-6904d1675c65" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "afiucv_hs_rcv" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGSVVDViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FmaXVjdl9oc19yY3YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgb25seSBzb2NrZXRzIHdpdGggdGhlIEFGX0lVQ1ZfVFJBTlNfSElQRVIgdHJhbnNwb3J0IHR5cGUgcHJvY2VzcyBpbmNvbWluZyBIaXBlclNvY2tldHMgcGFja2V0cyBpbiBgYWZpdWN2X2hzX3JjdigpYC4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBwYWNrZXRzIGNvdWxkIGJlIGluY29ycmVjdGx5IHJvdXRlZCB0byBzb2NrZXRzIG9mIGEgZGlmZmVyZW50IHRyYW5zcG9ydCB0eXBlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZXNlIHR5cGVzIG9mIGlzc3VlcyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdHJhbnNwb3J0IHR5cGUgY2hlY2sgaW4gYGFmaXVjdl9oc19yY3ZgIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBIaXBlclNvY2tldHMgcGFja2V0cyBmb3Igc29ja2V0cyBub3QgdXNpbmcgdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBuZXR3b3JrIHByb3RvY29sIHBhY2tldCBoYW5kbGVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJhdyBzb2NrZXRzIG9yIHR1bi90YXAgZGV2aWNlcyBieSBzZW5kaW5nIHBhY2tldHMgd2l0aCBwcm90b2NvbCBFVEhfUF9BRl9JVUNWLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGJjNTYzYjE1Y2ZmMTljZTA1MDkwODc2NTJlY2ZhYmY3YTc1OGY2Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDEzOjU3OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuaW5kZXggZWEwNDdiYWI2NWU3Yy4uNWZiNjc5M2I5YTY0YSAxMDA2NDRcbi0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5AQCAtMjA3OSw2ICYjNDM7MjA3OSw4IEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c2sgPSBOVUxMO1xuIFx0cmVhZF9sb2NrKFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcbiBcdHNrX2Zvcl9lYWNoKHNrLCBcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZCkge1xuJiM0MztcdFx0aWYgKGl1Y3Zfc2soc2spLVx1MDAzZXRyYW5zcG9ydCAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKHRyYW5zX2hkci1cdTAwM2VmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKSB7XG4gXHRcdFx0aWYgKCghbWVtY21wKFx1MDAyNml1Y3Zfc2soc2spLVx1MDAzZXNyY19uYW1lLFxuIFx0XHRcdFx0ICAgICB0cmFuc19oZHItXHUwMDNlZGVzdEFwcE5hbWUsIDgpKSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZJVUNWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWZpdWN2X2hzX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdHJhbnNwb3J0IHR5cGUgY2hlY2sgaW4gYGFmaXVjdl9oc19yY3ZgIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBIaXBlclNvY2tldHMgcGFja2V0cyBmb3Igc29ja2V0cyBub3QgdXNpbmcgdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBuZXR3b3JrIHByb3RvY29sIHBhY2tldCBoYW5kbGVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJhdyBzb2NrZXRzIG9yIHR1bi90YXAgZGV2aWNlcyBieSBzZW5kaW5nIHBhY2tldHMgd2l0aCBwcm90b2NvbCBFVEhfUF9BRl9JVUNWLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGJjNTYzYjE1Y2ZmMTljZTA1MDkwODc2NTJlY2ZhYmY3YTc1OGY2YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDEzOjU3OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jCmluZGV4IGVhMDQ3YmFiNjVlN2MuLjVmYjY3OTNiOWE2NGEgMTAwNjQ0Ci0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXVjdi9hZl9pdWN2LmMKQEAgLTIwNzksNiAmIzQzOzIwNzksOCBAQCBzdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlzayA9IE5VTEw7CiAJcmVhZF9sb2NrKCZhbXA7aXVjdl9za19saXN0LmxvY2spOwogCXNrX2Zvcl9lYWNoKHNrLCAmYW1wO2l1Y3Zfc2tfbGlzdC5oZWFkKSB7CiYjNDM7CQlpZiAoaXVjdl9zayhzayktJmd0O3RyYW5zcG9ydCAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSKQomIzQzOwkJCWNvbnRpbnVlOwogCQlpZiAodHJhbnNfaGRyLSZndDtmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKSB7CiAJCQlpZiAoKCFtZW1jbXAoJmFtcDtpdWN2X3NrKHNrKS0mZ3Q7c3JjX25hbWUsCiAJCQkJICAgICB0cmFuc19oZHItJmd0O2Rlc3RBcHBOYW1lLCA4KSkgJmFtcDsmYW1wOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogbmV0L2l1Y3YvYWZfaXVjdi5jKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgYmVlbiBhcHBsaWVkIHRvIGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBTcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIGEgbmV3IGNoZWNrIGluIGBhZml1Y3ZfaHNfcmN2YDogYGlmIChpdWN2X3NrKHNrKS0mZ3Q7dHJhbnNwb3J0ICE9IEFGX0lVQ1ZfVFJBTlNfSElQRVIpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBhIG5ldyBhdHRhY2sgc3VyZmFjZT8gSXMgYG5ldC9pdWN2L2FmX2l1Y3YuY2Agd29ydGggZnV6emluZyBub3c/JiMzNDsgSXQmIzM5O3Mgd29ydGggdGFraW5nIGEgZGVlcGVyIGxvb2suCgpSaWdodCwgSVVDVuKApiB0aGF0JiMzOTtzIGFuIElCTSBzMzkwIHNwZWNpZmljIHByb3RvY29sLCByaWdodD8gSW50ZXItVXNlciBDb21tdW5pY2F0aW9uIFZlaGljbGUuIFRoZSBuZXh0IHF1ZXN0aW9uIGJlY29tZXMsICYjMzQ7Q2FuIHdlIGV2ZW4gZnV6eiB0aGlzIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQ/JiMzNDsgRm9ydHVuYXRlbHksIEkga25vdyBRRU1VIHN1cHBvcnRzIHMzOTB4LCBzbyB0aGUgYXJjaGl0ZWN0dXJlIGJhcnJpZXIgaXNuJiMzOTt0IGEgcHJvYmxlbS4gKkJ1dCwqIGxldCYjMzk7cyBub3QganVtcCB0aGUgZ3VuLiBXZSAqaGF2ZSogdG8gY2hlY2sgaWYgdGhpcyBpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSB0aGF0IG1pZ2h0IG5vdCBldmVuIGJlICpwcmVzZW50KiBpbiBvdXIgdGFyZ2V0IGVudmlyb25tZW50LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYG5ldC9pdWN2L0tjb25maWdgIHRvIGNvbmZpcm0gYmVmb3JlIHByb2NlZWRpbmcuIEdvdHRhIGdldCB0aGF0IGJhc2VsaW5lLCBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVVDViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2l1Y3YvS2NvbmZpZzoyOmNvbmZpZyBJVUNWXG5uZXQvaXVjdi9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIFMzOTBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTkyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlMzOTAgRnV6emluZyBGZWFzaWJpbGl0eSoqCgpPa2F5LCBzbyB0aGlzIGhpbmdlcyBvbiBTMzkwLiAqQ2FuKiBzeXprYWxsZXIgYWN0dWFsbHkgZnV6eiBzMzkweD8gR29vZCwgdGhlIGRvY3VtZW50YXRpb24gY29uZmlybXMgdGhhdCBpdCBkb2VzLiBOb3csIEkgbmVlZCB0byByZW1lbWJlciB0aGUgc3BlY2lmaWMgY2F2ZWF0cy4uLiByaWdodCwgdGhlIGluc3RydWN0aW9ucyBwb2ludCBvdXQgdGhhdCBzb21lIGNvZGUgcGF0aHMgYXJlIGluYWNjZXNzaWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGhhcmR3YXJlIGVtdWxhdGlvbi4gQSBrZXkgY29uc2lkZXJhdGlvbi4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGNhbiBJVUNWIGJlIGVmZmVjdGl2ZWx5IGZ1enplZCAqd2l0aGluKiBRRU1VPyBZZXMsIG9mIGNvdXJzZSwgUUVNVSBoYXMgczM5MHggZW11bGF0aW9uLiBCdXQgdGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uIGlzIHdoZXRoZXIgaXQmIzM5O3MgKndvcnRoKiB0aGUgZWZmb3J0LCBnaXZlbiB0aGUgcG90ZW50aWFsIGxpbWl0YXRpb25zLiBUaGlzIGlzIHRoZSBjcnV4LiBUbyBtYWtlIHRoYXQgY2FsbCwgbGV0JiMzOTtzIHN0YXJ0IGJ5IGRldGVybWluaW5nIGlmIHRoZSBmdW5jdGlvbiBgYWZpdWN2X2hzX3JjdmAgaXMgZXZlbiByZWFjaGFibGUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZml1Y3ZfaHNfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz0yMDEyPXN0YXRpYyBpbnQgYWZpdWN2X2hzX2NhbGxiYWNrX3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1My0vKlxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwNTQ6ICogYWZpdWN2X2hzX3JjdigpIC0gYmFzZSBmdW5jdGlvbiBmb3IgYXJyaXZpbmcgZGF0YSB0aHJvdWdoIEhpcGVyU29ja2V0c1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTUtICogICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTctICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1ODpzdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDU5LVx0c3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjk2PXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXVjdl9wYWNrZXRfdHlwZSA9IHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk3LVx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjk4Olx0LmZ1bmMgPSBhZml1Y3ZfaHNfcmN2LFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTktfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIElVQ1YgTmV0d29yayBQcm90b2NvbCoqCgpPa2F5LCBzbyBgYWZpdWN2X2hzX3JjdmAgaXMgc2V0IHVwIGFzIGEgaGFuZGxlciBmb3IgcGFja2V0cyB1c2luZyB0aGUgYEVUSF9QX0FGX0lVQ1ZgIHByb3RvY29sLiBSaWdodCwgc28gdGhhdCBtZWFucyBJIGNhbiBpbnRlcmFjdCB3aXRoIGl0IHVzaW5nIHJhdyBzb2NrZXRzIG9yIHR1bi90YXAgZGV2aWNlcywgc2VuZGluZyBwYWNrZXRzIHdpdGggdGhhdCBzcGVjaWZpYyBwcm90b2NvbCB0eXBlLiBCdXQgd2FpdCwgYEVUSF9QX0FGX0lVQ1ZgICppcyogYSBuZXR3b3JrIHByb3RvY29sLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgSVVDVmAgaXRzZWxmIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG5ldHdvcmsgY2FwYWJpbGl0aWVzIG9mIHRoZSBzeXN0ZW0uIExldCBtZSBjaGVjayB0aGUgYG5ldC9pdWN2L0tjb25maWdgIGZpbGUgdG8gc2VlIGhvdyBgQUZfSVVDVmAgaXMgY29uZmlndXJlZC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQUZfSVVDViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgTmV0L0l1Y3YvS2NvbmZpZyBGaWxlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvaXVjdi9LY29uZmlnYC4gSSBuZWVkIHRvIHRob3JvdWdobHkgYXNzZXNzIGl0cyBjb250ZW50cy4gSSYjMzk7bSBsb29raW5nIGZvciBldmVyeXRoaW5nOiBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoZW1zZWx2ZXMsIGFuZCBhbnkgaW5oZXJlbnQgbG9naWMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjayBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIEtjb25maWcgZmlsZXMuIEFyZSB0aGVyZSBhbnkgc3VidGxlIGltcGxpY2F0aW9ucyBvciBwb3RlbnRpYWwgZ290Y2hhcyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgc2VsZWN0YCBzdGF0ZW1lbnRzIGFuZCB0cmlzdGF0ZSBvcHRpb25zLCBtYWtpbmcgc3VyZSBJIGZ1bGx5IGdyYXNwIHRoZSBjb25kaXRpb25hbCBpbmNsdXNpb24gbG9naWMuIFRoaXMgd2lsbCBiZSB0aGUgZm91bmRhdGlvbiBmb3IgZmlndXJpbmcgb3V0IGhvdyB0aGUgSVVDViBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgaXMgY29uZmlndXJlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBhcmVhcyB0aGF0IG5lZWQgaW1tZWRpYXRlIGF0dGVudGlvbiBmcm9tIG15IHBlcnNwZWN0aXZlLiBUaGlzIGlzIGEgY3JpdGljYWwgc3RlcCBiZWZvcmUgbWFraW5nIGNoYW5nZXMgb3IgcmVjb21tZW5kYXRpb25zIHJlbGF0ZWQgdG8gSVVDVi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBJVUNWXG4gICAzOlx0XHRkZXBlbmRzIG9uIFMzOTBcbiAgIDQ6XHRcdGRlZl90cmlzdGF0ZSB5IGlmIFMzOTBcbiAgIDU6XHRcdHByb21wdCBcJiMzNDtJVUNWIHN1cHBvcnQgKFMzOTAgLSB6L1ZNIG9ubHkpXCYjMzQ7XG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgaW50ZXItdXNlciBjb21tdW5pY2F0aW9uXG4gICA4Olx0XHQgIHVuZGVyIFZNIG9yIFZJRi4gSWYgeW91IHJ1biBvbiB6L1ZNLCBzYXkgXCYjMzQ7WVwmIzM0OyB0byBlbmFibGUgYSBmYXN0XG4gICA5Olx0XHQgIGNvbW11bmljYXRpb24gbGluayBiZXR3ZWVuIFZNIGd1ZXN0cy5cbiAgMTA6XHRcbiAgMTE6XHRjb25maWcgQUZJVUNWXG4gIDEyOlx0XHRkZXBlbmRzIG9uIFMzOTBcbiAgMTM6XHRcdGRlZl90cmlzdGF0ZSBtIGlmIFFFVEhfTDMgfHwgSVVDVlxuICAxNDpcdFx0cHJvbXB0IFwmIzM0O0FGX0lVQ1YgU29ja2V0IHN1cHBvcnQgKFMzOTAgLSB6L1ZNIGFuZCBIaXBlclNvY2tldHMgdHJhbnNwb3J0KVwmIzM0O1xuICAxNTpcdFx0aGVscFxuICAxNjpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIEFGX0lVQ1Ygc29ja2V0IGFwcGxpY2F0aW9uc1xuICAxNzpcdFx0ICBiYXNlZCBvbiB6L1ZNIGludGVyLXVzZXIgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIG9yIGJhc2VkIG9uXG4gIDE4Olx0XHQgIEhpcGVyU29ja2V0cy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE5NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFGSVVDViBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaW52b2x2ZXMgYGNvbmZpZyBBRklVQ1ZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIG9mIGNvdXJzZSwgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBBRklVQ1ZgLiBUaGUgY29kZSBzZWVtcyB0byBiZSBsb2NhdGVkIGluIGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBSaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb24gaGFuZGxlcyB0aGUgaGVhdnkgbGlmdGluZywgYW5kIGl0IGxvb2tzIGxpa2UgYGFmaXVjdl9oc19yY3ZgIGlzIHRoZSBwcmltZSBzdXNwZWN0LiBZZXMsIGNvbmZpcm1lZC4gQnV0IGhhbmcgb24uLi4gYGFmaXVjdl9oc19yY3ZgIGlzIHN0YXRpYyEgVGhhdCYjMzk7cyBub3QgaWRlYWwsIHNpbmNlIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeXBvaW50IGZ1bmN0aW9ucy4KCkhvd2V2ZXIsIGEgY2xvc2VyIGxvb2sgcmV2ZWFscyB0aGF0IGBhZml1Y3ZfaHNfcmN2YCBpcyByZWdpc3RlcmVkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYGl1Y3ZfcGFja2V0X3R5cGVgOgoKYGBgYwpzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGl1Y3ZfcGFja2V0X3R5cGUgPSB7CgkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0FGX0lVQ1YpLAoJLmZ1bmMgPSBhZml1Y3ZfaHNfcmN2LAp9OwpgYGAKClNpbmNlIHdlJiMzOTtyZSB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIChgLmZ1bmMgPSBhZml1Y3ZfaHNfcmN2YCksIGl0IGFsbW9zdCBjZXJ0YWlubHkgKndvbiYjMzk7dCogYmUgaW5saW5lZCBhbmQgd2lsbCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoaXMgbWFrZXMgaXQgYW4gYWNjZXB0YWJsZSBlbnRyeSBwb2ludCwgZXZlbiBpZiBpdCYjMzk7cyBkZWNsYXJlZCBzdGF0aWMuIEp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBgbmV0L2l1Y3YvYWZfaXVjdi5jYCBmb3IgYW55IG90aGVyIHJlZmVyZW5jZXMgdG8gYGl1Y3ZfcGFja2V0X3R5cGVgIHRvIGVuc3VyZSB0aGVyZSBpc24mIzM5O3QgYW5vdGhlciBlbnRyeSBwb2ludCBJJiMzOTttIG92ZXJsb29raW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpdWN2X3BhY2tldF90eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz0yMjkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5NS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjk2OnN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXVjdl9wYWNrZXRfdHlwZSA9IHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk3LVx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjMwMT1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzM1LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMzY6XHRkZXZfYWRkX3BhY2soXHUwMDI2aXVjdl9wYWNrZXRfdHlwZSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzNy1cdHJldHVybiAwO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzUwPXN0YXRpYyB2b2lkIF9fZXhpdCBhZml1Y3ZfZXhpdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzU1LVx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2YWZpdWN2X25ldGRldl9ub3RpZmllcik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM1NjpcdGRldl9yZW1vdmVfcGFjayhcdTAwMjZpdWN2X3BhY2tldF90eXBlKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzU3LVx0c29ja191bnJlZ2lzdGVyKFBGX0lVQ1YpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjc4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIGBhZml1Y3ZfaHNfcmN2YCBQYWNrZXQgSGFuZGxlcioqCgpPa2F5LCBzbyBgYWZpdWN2X2hzX3JjdmAgaXMgYSBwYWNrZXQgaGFuZGxlciwgc3BlY2lmaWNhbGx5IGZvciBwYWNrZXRzIG9mIHR5cGUgYEVUSF9QX0FGX0lVQ1ZgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgaXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgZnV6emluZyBpdC4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIG5ldHdvcmsgcGFja2V0IGhhbmRsZXIgYW5kIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2Ug4oCTIHBvdGVudGlhbGx5IHRocm91Z2ggdHVuL3RhcCBvciByYXcgc29ja2V0cyDigJMgdGhlIGF0dGFjayBzdXJmYWNlIGlzIGRlZmluaXRlbHkgdGhlcmUuCgpUaGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRzIGEgY2hlY2sgd2l0aGluIGBhZml1Y3ZfaHNfcmN2YDogYGlmIChpdWN2X3NrKHNrKS0mZ3Q7dHJhbnNwb3J0ICE9IEFGX0lVQ1ZfVFJBTlNfSElQRVIpYC4gVGhpcyBjbGVhcmx5IGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSB0aGUgaGFuZGxlciB3YXMgcHJvY2Vzc2luZyBwYWNrZXRzIGZvciBzb2NrZXRzIG5vdCB1c2luZyB0aGUgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydC4gR29vZC4KClRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVkIGlzIGBBRklVQ1ZgLiBIbW0sIGJ1dCBgQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O2NhbiB3ZSBmdXp6IHRoaXMgb24geDg2PyYjMzQ7LiBUaGUgYW5zd2VyIGlzIG5vLCB3ZSBjYW4mIzM5O3QuIEl0JiMzOTtzIHMzOTAgc3BlY2lmaWMuIEhvd2V2ZXIsIHN5emthbGxlciAqZG9lcyogZnV6eiBzMzkweC4gTXkgbmV4dCB0aG91Z2h0IGlzLCBjYW4gd2UgcnVuIHN5emthbGxlciBhbmQgZnV6eiBvbiBhbiBlbXVsYXRlZCBzMzkweCBlbnZpcm9ubWVudD8gVGhlIGRvY3VtZW50YXRpb24gcG9pbnRzIHRvIHRoZSBpZGVhIHRoYXQgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIGFyZSBwcm9ibGVtYXRpYy4gSG93ZXZlciwgdGhlIGluc3RydWN0aW9ucyBzdGF0ZSB0aGlzIGlzIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUuIFFFTVUgc3VwcG9ydHMgczM5MHgsIGFuZCBzeXprYWxsZXIgcnVucyBzMzkweCBpbnN0YW5jZXMgb24gUUVNVSwgc28gdGhlIGNvZGUgaXMgKnJlYWNoYWJsZSouCgpCdXQsIGEgdGhvdWdodCBlbWVyZ2VzOyBkb2VzIGBBRklVQ1ZgIGFjdHVhbGx5IHJlcXVpcmUgc3BlY2lmaWMgczM5MCBoYXJkd2FyZSB0aGF0ICppc24mIzM5O3QqIGVtdWxhdGVkPyBUaGUgY29uZmlnIHRleHQgc2F5cyB0aGF0IHRoZSBwcm9tcHQgc2F5cyAmIzM0O0FGX0lVQ1YgU29ja2V0IHN1cHBvcnQgKFMzOTAgLSB6L1ZNIGFuZCBIaXBlclNvY2tldHMgdHJhbnNwb3J0KSYjMzQ7LiBIaXBlclNvY2tldHMgaXMganVzdCBhICp0cmFuc3BvcnQqLiBJdCYjMzk7cyBub3QgYSBoYXJkd2FyZSByZXF1aXJlbWVudCBmb3IgdGhlIGBhZml1Y3ZfaHNfcmN2YCBmdW5jdGlvbiB0byBiZSBjYWxsZWQuIEFueSBuZXR3b3JrIGRldmljZSBjYW4gcmVjZWl2ZSBhIHBhY2tldCB3aXRoIGBza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX0FGX0lVQ1YpYCwgYW5kIGBkZXZfYWRkX3BhY2tgIHdpbGwgcm91dGUgaXQgdG8gYGFmaXVjdl9oc19yY3ZgLiBUaGlzIGlzIHRoZSBrZXkuIEl0IGxvb2tzIGxpa2UgaXQgZG9lc24mIzM5O3QgbmVlZCBIaXBlclNvY2tldHMgc3BlY2lmaWNhbGx5LiBJJiMzOTttIGdvaW5nIHRvIHZlcmlmeSB0aGlzIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VUSF9QX0FGX0lVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvaWZfZXRoZXIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvaWZfZXRoZXIuaC0xMjUtI2RlZmluZSBFVEhfUF9JRkVcdDB4RUQzRVx0XHQvKiBGb3JDRVMgaW50ZXItRkUgTEZCIHR5cGUgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9pZl9ldGhlci5oOjEyNjojZGVmaW5lIEVUSF9QX0FGX0lVQ1YgICAweEZCRkJcdFx0LyogSUJNIGFmX2l1Y3YgWyBOT1QgQU4gT0ZGSUNJQUxMWSBSRUdJU1RFUkVEIElEIF0gKi9cbmluY2x1ZGUvdWFwaS9saW51eC9pZl9ldGhlci5oLTEyNy0jZGVmaW5lIEVUSF9QX05YUF9ORVRDICAweEZEM0FcdFx0LyogTlhQIE5FVEMgRFNBIFsgTk9UIEFOIE9GRklDSUFMTFkgUkVHSVNURVJFRCBJRCBdICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0ODgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBhZml1Y3ZfaHNfcmN2YCBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBgRVRIX1BfQUZfSVVDVmAgaXMganVzdCBhbiBFdGhlcm5ldCBwcm90b2NvbCBJRC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIFNlbmRpbmcgYSBwYWNrZXQgd2l0aCB0aGF0IElEIHRocm91Z2ggZWl0aGVyIGBBRl9QQUNLRVRgIG9yIGEgYHR1bmAgaW50ZXJmYWNlIHdpbGwgaW5ldml0YWJseSB0cmlnZ2VyIHRoZSBgYWZpdWN2X2hzX3JjdmAgZnVuY3Rpb24uIFNvLCB5ZXMsIHRoZSBmdW5jdGlvbiAqaXMqIHJlYWNoYWJsZSDigJMgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBjb25jbHVzaW9uLiBOb3csIGxldCYjMzk7cyBkaWcgZGVlcGVyIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIHdlIG5lZWQgdG8gY29uc2lkZXIuCgpUaGUgcGF0Y2ggaXRzZWxmIHplcm9lcyBpbiBvbiBgYWZpdWN2X2hzX3JjdmAsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBzdHJvbmcgaW5kaWNhdG9yLiBMb29raW5nIGF0IHRoZSBjb2RlIG1vZGlmaWNhdGlvbiwgaXQgc2VlbXMgbGlrZSB0aGVyZSBpcyBub3cgYSBjaGVjayB0aGF0IGZpbHRlcnMgb24gYGl1Y3Zfc2soc2spLSZndDt0cmFuc3BvcnQgIT0gQUZfSVVDVl9UUkFOU19ISVBFUmAuIFNvLCB3ZSBzaG91bGQgaW52ZXN0aWdhdGUgd2hhdCB0aGF0IG1lYW5zIHdpdGhpbiB0aGUgZnVuY3Rpb24uIFNpbmNlIHRoZSBmdW5jdGlvbiBpcyBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgdGhlcmUgYXJlbiYjMzk7dCBpbW1lZGlhdGUgY29uY2VybnMuIElzIHRoZXJlIGFub3RoZXIgd2F5IGluPwoKQ291bGQgdGhlIHZ1bG5lcmFiaWxpdHkgYmUgdGhyb3VnaCBgaXVjdl9zb2NrX2JpbmRgIG9yIGBpdWN2X3NvY2tfY29ubmVjdGA/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYG5ldC9pdWN2L2FmX2l1Y3YuY2AgdG8gdW5kZXJzdGFuZCB0aGUgYGl1Y3Zfc2soc2spLSZndDt0cmFuc3BvcnRgIGFzc2lnbm1lbnQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMgbmV3IGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cmFuc3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTEwNz1zdGF0aWMgaW5saW5lIHZvaWQgbG93X25tY3B5KHVuc2lnbmVkIGNoYXIgKmRzdCwgY2hhciAqc3JjKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTgtICpcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTk6ICogRm9yIElVQ1ZfSVBSTURBVEEsIEFGX0lVQ1YgdXNlcyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb24gdG8gdHJhbnNwb3J0IHNvY2tldFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyMC0gKiBkYXRhOlxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjY9c3RhdGljIGlubGluZSBpbnQgaXVjdl9iZWxvd19tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzEtXHRcdHJldHVybiAxO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MjpcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTczLVx0XHRyZXR1cm4gKGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlc2tic19pbl94bWl0KSBcdTAwM2MgaXVjdi1cdTAwM2VwYXRoLVx1MDAzZW1zZ2xpbSk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4Mj1zdGF0aWMgdm9pZCBpdWN2X3NvY2tfd2FrZV9tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTQtLypcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxOTU6ICogYWZpdWN2X2hzX3NlbmQoKSAtIHNlbmQgYSBtZXNzYWdlIHRocm91Z2ggSGlwZXJTb2NrZXRzIHRyYW5zcG9ydFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5Ni0gKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MzM1PXN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzY3LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjM2ODovKiBTZW5kIGNvbnRyb2xsaW5nIGZsYWdzIHRocm91Z2ggYW4gSVVDViBzb2NrZXQgZm9yIEhJUEVSIHRyYW5zcG9ydCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jLTM2OS1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9jdHJsKHN0cnVjdCBzb2NrICpzaywgdTggZmxhZ3MpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTM5NT1zdGF0aWMgdm9pZCBpdWN2X3NvY2tfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy00MDgtXHRjYXNlIElVQ1ZfQ09OTkVDVEVEOlxubmV0L2l1Y3YvYWZfaXVjdi5jOjQwOTpcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00MTAtXHRcdFx0ZXJyID0gaXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19GSU4pO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkzLVx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDk0Olx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTUtXHRlbHNlXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDk2Olx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNDk3LVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODI9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjE1LVx0XHRpZiAoIW1lbWNtcChzYS1cdTAwM2VzaXVjdl91c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCkpXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjE2Olx0XHRcdGdvdG8gdm1fYmluZDsgLyogVk0gSVVDViB0cmFuc3BvcnQgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYy02MTctXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjE4Olx0LyogdHJ5IGhpcGVyIHRyYW5zcG9ydCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jLTYxOS1cdG1lbWNweSh1aWQsIHNhLVx1MDAzZXNpdWN2X3VzZXJfaWQsIHNpemVvZih1aWQpKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjMzLVx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9CT1VORDtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2MzQ6XHRcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTYzNS1cdFx0XHRpZiAoIWl1Y3YtXHUwMDNlbXNnbGltaXQpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY0Ny1cdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0JPVU5EO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjY0ODpcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQ5LVx0XHRzay1cdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTY2NT1zdGF0aWMgaW50IGl1Y3Zfc29ja19hdXRvYmluZChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3My1cdG1lbWNweShpdWN2LVx1MDAzZXNyY191c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6Njc0Olx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNjc1LVx0c2stXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz03MzM9c3RhdGljIGludCBpdWN2X3NvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQ3LVx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfT1BFTiBcdTAwMjZcdTAwMjZcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NDg6XHQgICAgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUilcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDktXHRcdHJldHVybiAtRUJBREZEOyAvKiBleHBsaWNpdCBiaW5kIHJlcXVpcmVkICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc2NS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NjY6XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUilcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NjctXHRcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNvY2stXHUwMDNlc2ssIEFGX0lVQ1ZfRkxBR19TWU4pO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODAtXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzgxOlx0aWYgKGVyciBcdTAwMjZcdTAwMjYgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4Mi1cdFx0aXVjdl9zZXZlcl9wYXRoKHNrLCAwKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTE2PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy05OTgtXHQgKiBmb3IgU09DS19TVFJFQU0gd2UgbWlnaHQgd2FudCB0byBpbXByb3ZlIGl0IGluIGZ1dHVyZSAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjk5OTpcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTAwMC1cdFx0aGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSAmIzQzO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDQzLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNDQ6XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNDUtXHRcdGF0b21pY19pbmMoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfc2VudCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTAtXHRcdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDUxOlx0fSBlbHNlIHsgLyogQ2xhc3NpYyBWTSBJVUNWIHRyYW5zcG9ydCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTItXHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNml1Y3YtXHUwMDNlc2VuZF9za2JfcSwgc2tiKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTIzNz1zdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMwOC1cdFx0Y29uc3VtZV9za2Ioc2tiKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzA5Olx0XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMTAtXHRcdFx0YXRvbWljX2luYyhcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2KTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTQxOD1zdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDQzLVx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ09OTkVDVEVEKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ0NDpcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NDUtXHRcdFx0dHhtc2cuY2xhc3MgPSAwO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDY3LVx0aWYgKGhvdyA9PSBSQ1ZfU0hVVERPV04gfHwgaG93ID09IFNIVVRET1dOX01BU0spIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDY4Olx0XHRpZiAoKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikgXHUwMDI2XHUwMDI2XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ2OS1cdFx0ICAgIGl1Y3YtXHUwMDNlcGF0aCkge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjA3PXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NjYtXHRpdWN2X3NvY2tfaW5pdChuc2ssIHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjY3Olx0bml1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NjgtXHRuc2stXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xODMxPXN0YXRpYyBzdHJ1Y3QgaXVjdl9oYW5kbGVyIGFmX2l1Y3ZfaGFuZGxlciA9IHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTgzOS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODQwOi8qKioqKioqKioqKioqKioqKiBIaXBlclNvY2tldHMgdHJhbnNwb3J0IGNhbGxiYWNrcyAqKioqKioqKioqKioqKioqKioqKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODQxLXN0YXRpYyB2b2lkIGFmaXVjdl9zd2FwX3NyY19kZXN0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4NjQ9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg5Ni1cdGl1Y3Zfc29ja19pbml0KG5zaywgc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE4OTc6XHRuaXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE4OTgtXHRuaXVjdi1cdTAwM2Vtc2dsaW1pdCA9IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIwMTI9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDMyLVx0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjAzMzpcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjAzNC1cdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDU0LSAqIGFmaXVjdl9oc19yY3YoKSAtIGJhc2UgZnVuY3Rpb24gZm9yIGFycml2aW5nIGRhdGEgdGhyb3VnaCBIaXBlclNvY2tldHNcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDU1OiAqICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTYtICogICAgICAgICAgICAgICAgICAgY2FsbGVkIGZyb20gbmV0aWYgUlggc29mdGlycVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMDU4PXN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDgxLVx0c2tfZm9yX2VhY2goc2ssIFx1MDAyNml1Y3Zfc2tfbGlzdC5oZWFkKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA4MjpcdFx0aWYgKGl1Y3Zfc2soc2spLVx1MDAzZXRyYW5zcG9ydCAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwODMtXHRcdFx0Y29udGludWU7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNjYtICogYWZpdWN2X2hzX2NhbGxiYWNrX3R4bm90aWZ5KCkgLSBoYW5kbGUgc2VuZCBub3RpZmljYXRpb25zIGZyb20gSGlwZXJTb2NrZXRzXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE2NzogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNjgtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjc4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBIaXBlclNvY2tldHMgUGFja2V0IFJlY2VwdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGBhZml1Y3ZfaHNfcmN2YCBpcyBjbGVhcmx5IHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgaW5jb21pbmcgcGFja2V0cy4gSSBzZWUgYSBzdWl0ZSBvZiByZWxhdGVkIGZ1bmN0aW9ucyB0b286IGBpdWN2X3NvY2tfYmluZGAsIGBpdWN2X3NvY2tfY29ubmVjdGAsIGBpdWN2X3NvY2tfc2VuZG1zZ2AsIGBpdWN2X3NvY2tfcmVjdm1zZ2AsIGFuZCB0aGUgdmFyaW91cyBjYWxsYmFjayBmdW5jdGlvbnMgYGFmaXVjdl9oc19jYWxsYmFja18qYC4gTWFrZXMgc2Vuc2UsIHRoZSB1c3VhbCBzb2NrZXQgb3BlcmF0aW9ucy4KCk5vdywgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrICp3aXRoaW4qIGBhZml1Y3ZfaHNfcmN2YDogYGlmIChpdWN2X3NrKHNrKS0mZ3Q7dHJhbnNwb3J0ICE9IEFGX0lVQ1ZfVFJBTlNfSElQRVIpYC4gQWgsIHRoYXQmIzM5O3MgY2xldmVyLiBJdCYjMzk7cyBleHBsaWNpdGx5IGVuc3VyaW5nIHRoYXQgYGFmaXVjdl9oc19yY3ZgICpvbmx5KiBwcm9jZXNzZXMgcGFja2V0cyBmb3IgSGlwZXJTb2NrZXRzLWJhc2VkIHNvY2tldHMgKGlkZW50aWZpZWQgYnkgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgKSwgYW5kIG5vdCBmb3IgdGhlIHN0YW5kYXJkIElVQ1Ygc29ja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4LiBJdCYjMzk7cyBkZXNpZ25lZCB0byBwcmV2ZW50IHBhY2tldCBtaXNyb3V0aW5nLCB3aGljaCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uIG9yIG90aGVyIG5hc3R5IHNpZGUgZWZmZWN0cy4gQWJzb2x1dGVseSwgdGhpcyBpcyBhIGJ1ZyBmaXggdGhhdCB3YXJyYW50cyBmdXp6aW5nLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBgQUZJVUNWYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm93LCBsZXQgbWUgc2VlLi4uIEl0ICpkZXBlbmRzKiBvbiBgUzM5MGAgd2hpY2ggaXMgYXMgZXhwZWN0ZWQsIGJ1dCB3aGF0IGVsc2U/IE9rYXksIGJhY2sgdG8gYG5ldC9pdWN2L0tjb25maWdgLiBIYW5nIG9uLi4uIGBkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZgLiBPa2F5LCB0aGUgZGVmYXVsdCBpcyBgbWAgaWYgZWl0aGVyIGBRRVRIX0wzYCBvciBgSVVDVmAgYXJlIGVuYWJsZWQuIEJ1dCBpdCBvbmx5ICpkZXBlbmRzKiBvbiBgUzM5MGAsIHNvIGl0IGRvZXNuJiMzOTt0IHN0cmljdGx5IGRlcGVuZCBvbiBgSVVDVmAuIEFzIGxvbmcgYXMgdGhlIGFyY2ggaXMgczM5MCwganVzdCBlbmFibGluZyBgQUZJVUNWYCBzaG91bGQgYmUgc3VmZmljaWVudC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGBNYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgYnVpbGQgcnVsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FGSVVDViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0lVQ1YpXHQmIzQzOz0gaXVjdi5vXG5uZXQvaXVjdi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19BRklVQ1YpXHQmIzQzOz0gYWZfaXVjdi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjQ4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBhZl9pdWN2LmNgIENvbXBpbGF0aW9uIERlcGVuZGVuY3kqKgoKUmlnaHQsIHNvIEkgaW5pdGlhbGx5IHRob3VnaHQsICYjMzQ7T2theSwgYENPTkZJR19BRklVQ1ZgIGlzIGFsbCBJIG5lZWQgdG8gZ2V0IGBhZl9pdWN2LmNgIHRvIGNvbXBpbGUuJiMzNDsgUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gQnV0IHRoZW4sIGEgcmVkIGZsYWcgcG9wcGVkIHVwLiAmIzM0O0hvbGQgb24sIHdoYXQgYWJvdXQgYENPTkZJR19JVUNWYD8gSXMgdGhhdCBhbHNvIG5lY2Vzc2FyeT8mIzM0OyBJdCYjMzk7cyBhIGh1bmNoLCBidXQgdGhlIHdheSB0aGVzZSB0aGluZ3MgYXJlIG9mdGVuIHN0cnVjdHVyZWQsIGBhZl9pdWN2LmNgICptaWdodCogZGVwZW5kIG9uIGNvcmUgZnVuY3Rpb25zIG9yIGRlZmluaXRpb25zIGZyb20gYGl1Y3YuY2AuIFRoaXMgaXMgY29tbW9uIHdpdGggbmV0d29yayBwcm90b2NvbHMuIFRvIGJlIHN1cmUsIEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlcmUgaXMgYW4gZXhwbGljaXQgbGlua2FnZS4gSSBzaG91bGQgc2VlIGlmIGBhZl9pdWN2LmNgIGlzIHVzaW5nIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGluIGBpdWN2LmNgLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgbG9vayBmb3IgdGhvc2UgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3MgZ28gY2hlY2sgdGhlIHNvdXJjZSBmaWxlIGBuZXQvaXVjdi9hZl9pdWN2LmNgIGZvciBhbnkgZnVuY3Rpb24gY2FsbHMgc3RhcnRpbmcgd2l0aCBgaXVjdl9gLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZGVmaW5pdGl2ZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l1Y3ZfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTIzMDE9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMyNi1cdGlmIChwcl9pdWN2KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMyNzpcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VpdWN2X3JlZ2lzdGVyKFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMyOC1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNzYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElVQ1YgUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIHRoaXMgY29kZSBzbmlwcGV0IGlzIHVzaW5nIGBwcl9pdWN2LSZndDtpdWN2X3JlZ2lzdGVyYC4gSW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgc2VlIHRoYXQgYHByX2l1Y3ZgIGlzIGEgcG9pbnRlci4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZGVyZWZlcmVuY2UgaGVyZSwgd2hpY2ggaW1wbGllcyBpdCYjMzk7cyBwb2ludGluZyB0byBzb21lIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGEgbWVtYmVyIG5hbWVkIGBpdWN2X3JlZ2lzdGVyYC4gQWxyaWdodCwgbGV0JiMzOTtzIGJhY2sgdXAgYSBzdGVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgcHJfaXVjdmAgaXMgYWN0dWFsbHkgKmRlZmluZWQqLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBpdHMgZGVjbGFyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmUgaXQgcG9pbnRzIHRvLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBgaXVjdl9yZWdpc3RlcmAgb3BlcmF0aW9uLiBMZXQmIzM5O3MgZmluZCB0aGF0IGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ByX2l1Y3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTQyPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gaXVjdl9wcm90byA9IHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDctXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDg6c3RhdGljIHN0cnVjdCBpdWN2X2ludGVyZmFjZSAqcHJfaXVjdjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OS1zdGF0aWMgc3RydWN0IGl1Y3ZfaGFuZGxlciBhZl9pdWN2X2hhbmRsZXI7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTMzNT1zdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTM0Ny1cdFx0XHRBU0NFQkModXNlcl9kYXRhLCBzaXplb2YodXNlcl9kYXRhKSk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MzQ4Olx0XHRcdHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTM0OS1cdFx0fSBlbHNlXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzUwOlx0XHRcdHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNTEtXHRcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkyLVx0bWVtc2V0KFx1MDAyNml1Y3YtXHUwMDNlaW5pdCwgMCwgc2l6ZW9mKGl1Y3YtXHUwMDNlaW5pdCkpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5MzpcdGlmIChwcl9pdWN2KVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5NC1cdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02MTMtXHQvKiBCaW5kIHRoZSBzb2NrZXQgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzo2MTQ6XHRpZiAocHJfaXVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MTUtXHRcdGlmICghbWVtY21wKHNhLVx1MDAzZXNpdWN2X3VzZXJfaWQsIGl1Y3ZfdXNlcmlkLCA4KSlcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQyLXZtX2JpbmQ6XG5uZXQvaXVjdi9hZl9pdWN2LmM6NjQzOlx0aWYgKHByX2l1Y3YpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDQtXHRcdC8qIHVzZSBsb2NhbCB1c2VyaWQgZm9yIGJhY2t3YXJkIGNvbXBhdCAqL1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz02NjU9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02NjktXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjcwOlx0aWYgKHVubGlrZWx5KCFwcl9pdWN2KSlcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzEtXHRcdHJldHVybiAtRVBST1RPO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz02ODc9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDUtXHR9XG5uZXQvaXVjdi9hZl9pdWN2LmM6NzA2Olx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX2Nvbm5lY3QoaXVjdi1cdTAwM2VwYXRoLCBcdTAwMjZhZl9pdWN2X2hhbmRsZXIsXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzA3LVx0XHRcdFx0ICAgIHNhLVx1MDAzZXNpdWN2X3VzZXJfaWQsIE5VTEwsIHVzZXJfZGF0YSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTA1PXN0YXRpYyBpbnQgaXVjdl9zZW5kX2lwcm0oc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgc3RydWN0IGl1Y3ZfbWVzc2FnZSAqbXNnLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy05MTEtXHRwcm1kYXRhWzddID0gMHhmZiAtICh1OCkgc2tiLVx1MDAzZWxlbjtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo5MTI6XHRyZXR1cm4gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3NlbmQocGF0aCwgbXNnLCBJVUNWX0lQUk1EQVRBLCAwLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTkxMy1cdFx0XHRcdCAodm9pZCAqKSBwcm1kYXRhLCA4KTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTE2PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDY5LVx0XHRcdGlmIChlcnIgPT0gMHgxNSkge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNzA6XHRcdFx0XHRwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIoaXVjdi1cdTAwM2VwYXRoLCBOVUxMKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDcxLVx0XHRcdFx0YXRvbWljX2RlYyhcdTAwMjZpdWN2LVx1MDAzZXNrYnNfaW5feG1pdCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwODgtXHRcdFx0fVxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwODk6XHRcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cdTAwM2VwYXRoLCBcdTAwMjZ0eG1zZyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDkwLVx0XHRcdFx0XHRcdCAgICBJVUNWX0lQQlVGTFNULCAwLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDkyLVx0XHR9IGVsc2UgeyAvKiBub24tSVBSTSBMaW5lYXIgc2tiICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA5MzpcdFx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVx1MDAzZXBhdGgsIFx1MDAyNnR4bXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwOTQtXHRcdFx0XHRcdDAsIDAsICh2b2lkICopc2tiLVx1MDAzZWRhdGEsIHNrYi1cdTAwM2VsZW4pO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xMTU4PXN0YXRpYyB2b2lkIGl1Y3ZfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE4OS1cdFx0XHR9XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE5MDpcdFx0XHRyYyA9IHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9yZWNlaXZlKHBhdGgsIG1zZyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTkxLVx0XHRcdFx0XHQgICAgICBJVUNWX0lQQlVGTFNULFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTkzLVx0XHR9IGVsc2Uge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjExOTQ6XHRcdFx0cmMgPSBwcl9pdWN2LVx1MDAzZW1lc3NhZ2VfcmVjZWl2ZShwYXRoLCBtc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE5NS1cdFx0XHRcdFx0ICAgICAgbXNnLVx1MDAzZWZsYWdzIFx1MDAyNiBJVUNWX0lQUk1EQVRBLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNDE4PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NDYtXHRcdFx0dHhtc2cudGFnID0gMDtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDQ3Olx0XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXHUwMDNlcGF0aCwgXHUwMDI2dHhtc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ0OC1cdFx0XHRcdElVQ1ZfSVBSTURBVEEsIDAsICh2b2lkICopIGlwcm1fc2h1dGRvd24sIDgpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDY5LVx0XHQgICAgaXVjdi1cdTAwM2VwYXRoKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3MDpcdFx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfcXVpZXNjZShpdWN2LVx1MDAzZXBhdGgsIE5VTEwpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzEtXHRcdFx0aWYgKGVycilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjQ0LVx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IElVQ1ZfTElTVEVOKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY0NTpcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0Ni1cdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTEtXHRpZiAoc2tfYWNjZXB0cV9pc19mdWxsKHNrKSkge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NTI6XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTMtXHRcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjU5LVx0aWYgKCFuc2spIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjYwOlx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjYxLVx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY4NS1cdHBhdGgtXHUwMDNlbXNnbGltID0gaXVjdi1cdTAwM2Vtc2dsaW1pdDtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjg2Olx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX2FjY2VwdChwYXRoLCBcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIG51c2VyX2RhdGEsIG5zayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY4Ny1cdGlmIChlcnIpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTcxMj1zdGF0aWMgdm9pZCBpdWN2X2NhbGxiYWNrX3J4KHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsIHN0cnVjdCBpdWN2X21lc3NhZ2UgKm1zZylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcyMC1cdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyMTpcdFx0cHJfaXVjdi1cdTAwM2VtZXNzYWdlX3JlamVjdChwYXRoLCBtc2cpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MjItXHRcdHJldHVybjtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjMwMT1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzEyLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMTM6XHRcdHByX2l1Y3YgPSBcdTAwMjZpdWN2X2lmO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTQtXHR9IGVsc2Uge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTUtXHRcdG1lbXNldChcdTAwMjZpdWN2X3VzZXJpZCwgMCwgc2l6ZW9mKGl1Y3ZfdXNlcmlkKSk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMxNjpcdFx0cHJfaXVjdiA9IE5VTEw7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMxNy1cdH1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMyNS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzI2Olx0aWYgKHByX2l1Y3YpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzI3Olx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZWl1Y3ZfcmVnaXN0ZXIoXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzI4LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzM5LW91dF9ub3RpZmllcjpcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzQwOlx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM0MTpcdFx0cHJfaXVjdi1cdTAwM2VpdWN2X3VucmVnaXN0ZXIoXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzQyLW91dF9zb2NrOlxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzUwPXN0YXRpYyB2b2lkIF9fZXhpdCBhZml1Y3ZfZXhpdCh2b2lkKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNTEte1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIzNTI6XHRpZiAocHJfaXVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzUzOlx0XHRwcl9pdWN2LVx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjM5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJVUNWIEluaXRpYWxpemF0aW9uIExvZ2ljKioKCk9rYXksIHNvIGBwcl9pdWN2YCBnZXRzIGFzc2lnbmVkIHRoZSBhZGRyZXNzIG9mIGBpdWN2X2lmYCAqb25seSogaWYgYHNtYXBpX2dldF9pdWN2X3VzZXJpZGAgcmV0dXJucyBzdWNjZXNzZnVsbHkuIE90aGVyd2lzZSwgaXQmIzM5O3Mgc2V0IHRvIGBOVUxMYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBhdCBmaXJzdCBnbGFuY2UsIGJ1dCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgcGllY2VzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gdmlzdWFsaXppbmcgdGhpcyBjb3JyZWN0bHkuCgpIb2xkIG9uLi4uIGBpdWN2X2lmYC4uLiB0aGF0JiMzOTtzIGRlY2xhcmVkIGFuZCAqZXhwb3J0ZWQqIGZyb20gYGl1Y3YuY2AsIGlzbiYjMzk7dCBpdD8gR290dGEgcXVpY2tseSBjb25maXJtIHRoYXQuIE5vIGFzc3VtcHRpb25zIGhlcmUsIEkmIzM5O2xsIGdvIGNoZWNrIHRoYXQgbW9kdWxlJiMzOTtzIGRlZmluaXRpb24uIE5lZWQgdG8gdmVyaWZ5IHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l1Y3ZfaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTIzMDE9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMxMi1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzEzOlx0XHRwcl9pdWN2ID0gXHUwMDI2aXVjdl9pZjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzE0LVx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMzgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgSVVDViBJbnRlcmZhY2UqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBJVUNWIChJbnRlci1Vc2VyIENvbW11bmljYXRpb24gVmVoaWNsZSkgaW50ZXJmYWNlIGhlcmUuIFRoZSBzcGVjaWZpYyBwYXJ0IEkmIzM5O20gZm9jdXNpbmcgb24gbm93IGlzIHRoZSBgaXVjdl9pZmAuIE5hdHVyYWxseSwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzdHJ1Y3R1cmUgb3IgZnVuY3Rpb24gYWN0dWFsbHkgKmlzKi4gU28sIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZTogYGluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oYC4gSSYjMzk7bSBob3BpbmcgdGhhdCBoZWFkZXIgZmlsZSBob2xkcyB0aGUga2V5IC0gaXQgKnNob3VsZCogZGVmaW5lIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3Mgb2YgdGhlIElVQ1YgaW50ZXJmYWNlLCBpbmNsdWRpbmcgYGl1Y3ZfaWZgLCB3aGV0aGVyIGl0JiMzOTtzIGEgc3RydWN0dXJlIGRlZmluaW5nIGRhdGEgZm9yIHRoZSBpbnRlcmZhY2UsIGFuIGVudW0gb2YgbWV0aG9kcywgb3IgZXZlbiBhbiBleHRlcm5hbCBwb2ludGVyIGZvciB1c2UuIFRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIHVucmF2ZWxpbmcgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9pZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oPTI2OT1zdHJ1Y3QgaXVjdl9pbnRlcmZhY2Uge1xuLS1cbmluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oLTMwMC1cbmluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oOjMwMTpleHRlcm4gc3RydWN0IGl1Y3ZfaW50ZXJmYWNlIGl1Y3ZfaWY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzkxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEFGSVVDViBhbmQgSVVDViBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgaXVjdl9pZmAgZnVuY3Rpb24sIGFuZCBJIHNlZSBpdCYjMzk7cyBkZWZpbmVkIGluIGBpdWN2LmNgLiBSaWdodCBhd2F5LCB0aGlzIHNjcmVhbXMgZGVwZW5kZW5jeS4gTG9naWNhbGx5LCBpdCBzZWVtcyB0aGF0IGlmIGBBRklVQ1ZgIHVzZXMgYGl1Y3ZfaWZgLCB0aGVuIGBBRklVQ1ZgIGluaGVyZW50bHkgZGVwZW5kcyBvbiBgSVVDVmAuIEJ1dCB0aGVuIEkgaGF2ZSB0aGlzIG5hZ2dpbmcgZmVlbGluZywgbGlrZSBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLi4uIHRoZSBidWlsZCBzeXN0ZW0gY2FuIGJlIHRyaWNreS4KCldhaXQsIGNhbiBgQUZJVUNWYCAqcmVhbGx5KiBiZSBjb21waWxlZCB3aXRob3V0IGBJVUNWYD8gVGhhdCBqdXN0IGRvZXNuJiMzOTt0IHNpdCByaWdodCB3aXRoIG1lLiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9pdWN2L0tjb25maWdgIGZpbGUuIExldCYjMzk7cyBzZWUuLi4gQWhhIQoKYGBgCmNvbmZpZyBBRklVQ1YKCWRlcGVuZHMgb24gUzM5MAoJZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWCmBgYAoKQWgsIHRoZXJlIGl0IGlzISBUaGUga2V5IGlzIHRoYXQgYEFGSVVDVmAgY2FuIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLCBidXQgZGVwZW5kcyBvbiBgSVVDVmAgYmVpbmcgZWl0aGVyIGJ1aWx0LWluICggYHlgICkgb3IgYXZhaWxhYmxlIGFzIGEgbW9kdWxlICggYG1gICkuIEJ1dCBpZiBgSVVDVmAgaXMgKm5vdCogZW5hYmxlZCBhdCBhbGwsIHRoZW4gYGl1Y3ZfaWZgIHdvbiYjMzk7dCBiZSBhdmFpbGFibGUsIGFuZCBgQUZJVUNWYCB3b24mIzM5O3QgYmUgYWJsZSB0byBjb21waWxlLCBhcyB0aGUgc3ltYm9sIHdpbGwgYmUgdW5kZWZpbmVkLiBUaGlzIGNvbmRpdGlvbmFsIGxvZ2ljIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjYW4gdHJpcCB5b3UgdXAgaW4gdGhlc2UgYnVpbGQgc3lzdGVtcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgaXVjdl9pZmAgaXMgYWN0dWFsbHkgY29uZGl0aW9uYWxseSBjb21waWxlZCBkZXBlbmRpbmcgb24gYElVQ1ZgIGJlaW5nIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l1Y3ZfaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvaXVjdi5jPTE4MDE9c3RhdGljIHZvaWQgaXVjdl9leHRlcm5hbF9pbnRlcnJ1cHQoc3RydWN0IGV4dF9jb2RlIGV4dF9jb2RlLFxuLS1cbm5ldC9pdWN2L2l1Y3YuYy0xODMzLVxubmV0L2l1Y3YvaXVjdi5jOjE4MzQ6c3RydWN0IGl1Y3ZfaW50ZXJmYWNlIGl1Y3ZfaWYgPSB7XG5uZXQvaXVjdi9pdWN2LmMtMTgzNS1cdC5tZXNzYWdlX3JlY2VpdmUgPSBpdWN2X21lc3NhZ2VfcmVjZWl2ZSxcbi0tXG5uZXQvaXVjdi9pdWN2LmMtMTg1Mi19O1xubmV0L2l1Y3YvaXVjdi5jOjE4NTM6RVhQT1JUX1NZTUJPTChpdWN2X2lmKTtcbm5ldC9pdWN2L2l1Y3YuYy0xODU0LVxuLS1cbm5ldC9pdWN2L2l1Y3YuYz0xODYyPXN0YXRpYyBpbnQgX19pbml0IGl1Y3ZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2l1Y3YuYy0xOTAyLVx0XHRnb3RvIG91dF9yZWJvb3Q7XG5uZXQvaXVjdi9pdWN2LmM6MTkwMzpcdGl1Y3ZfaWYucm9vdCA9IGl1Y3Zfcm9vdDtcbm5ldC9pdWN2L2l1Y3YuYzoxOTA0Olx0aXVjdl9pZi5idXMgPSBcdTAwMjZpdWN2X2J1cztcbm5ldC9pdWN2L2l1Y3YuYy0xOTA1LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjgzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQSBRdWljayBDb2RlIENvbnVuZHJ1bSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBTb21ldGhpbmcgZG9lc24mIzM5O3QgcXVpdGUgaml2ZSBoZXJlLiBJZiBJJiMzOTttIHVuZGVyc3RhbmRpbmcgdGhpcyBjb3JyZWN0bHksIHRoZSBJbnRlZ3JhdGVkIFVzZXIgQ29tbXVuaWNhdGlvbiBWZWhpY2xlIChgSVVDVmApIGZ1bmN0aW9uYWxpdHkgaXNuJiMzOTt0IHN1cHBvc2VkIHRvIGJlIGFjdGl2ZSwgcmlnaHQ/IFNvLCBob3cgaW4gdGhlIHdvcmxkIGlzIHRoZSBgYWZfaXVjdi5jYCBmaWxlIGV2ZW4gY29tcGlsaW5nPyBUaGF0IHNlZW1z4oCmdW5leHBlY3RlZC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgYGluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oYCBoZWFkZXIgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyLiBJIGhhdmUgYSBodW5jaCB0aGUgaXNzdWUgaXMgbGlrZWx5IHJvb3RlZCB0aGVyZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9pZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oPTI2OT1zdHJ1Y3QgaXVjdl9pbnRlcmZhY2Uge1xuLS1cbmluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oLTMwMC1cbmluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oOjMwMTpleHRlcm4gc3RydWN0IGl1Y3ZfaW50ZXJmYWNlIGl1Y3ZfaWY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTkzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgYSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBCbG9jayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBqdW1wcyB0byBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW4gYCNpZmRlZiBDT05GSUdfSVVDVmAgd3JhcHBlZCBhcm91bmQgdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gY2hlY2tpbmcuIElmIGl0ICppcyogdGhlcmUsIHRoYXQgdGVsbHMgbWUgdGhlIGNvbXBpbGVyIG9ubHkgaW5jbHVkZXMgdGhpcyBmdW5jdGlvbmFsaXR5IGlmIHRoZSBgQ09ORklHX0lVQ1ZgIHByZXByb2Nlc3NvciBtYWNybyBpcyBkZWZpbmVkLiBUaGF0JiMzOTtzIGNydWNpYWwgaW5mb3JtYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgY29kZSBibG9jay4gRGV0ZXJtaW5pbmcgdGhpcyBjb25kaXRpb25hbCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pdWN2L2l1Y3YuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Nzk3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgSVVDViBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IHRoZSBJVUNWIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciwgc3BlY2lmaWNhbGx5LCB0aGUgYG5ldC9pdWN2L2FmX2l1Y3YuY2AgZmlsZS4gVGhpcyBpcyB0aGUgbGlrZWx5IHBsYWNlIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGNvcmUgSVVDViBmdW5jdGlvbmFsaXR5IGRlZmluZWQuIEkmIzM5O20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgYSBjb25kaXRpb25hbCBjaGVjay4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFmdGVyIGBJU19FTkFCTEVEKENPTkZJR19JVUNWKWAuIFRoaXMgaXMgdGhlIHR5cGljYWwgbWFjcm8gZm9yIHZlcmlmeWluZyB0aGF0IHRoZSBgQ09ORklHX0lVQ1ZgIEtjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQgZHVyaW5nIHRoZSBidWlsZC4gVGhpcyB0ZWxscyBtZSBpZiB0aGUgSVVDViBzdXBwb3J0IGhhcyBiZWVuIGNvbmZpZ3VyZWQgaW50byB0aGlzIGtlcm5lbCBidWlsZC4gVGhpcyBpcyB0aGUgKmZpcnN0KiBzdGVwIGluIHVuZGVyc3RhbmRpbmcgb3IgdHJvdWJsZXNob290aW5nIGFueSBJVUNWLXJlbGF0ZWQgaXNzdWUgLSBpdCBkaWN0YXRlcyB3aGV0aGVyIEkgY2FuIGV4cGVjdCBhbnkgb2YgdGhlIElVQ1YgY29kZSB0byBiZSBhY3RpdmUuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhhdCBtYWNybyAqZmlyc3QqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSVVDViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9MjMwMT1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA0LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDU6XHRpZiAobWFjaGluZV9pc192bSgpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19JVUNWKSkge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDYtXHRcdGNwY21kKFwmIzM0O1FVRVJZIFVTRVJJRFwmIzM0OywgaXVjdl91c2VyaWQsIHNpemVvZihpdWN2X3VzZXJpZCksIFx1MDAyNmVycik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjI0CgkJCQkJCQlvdXRwdXQ6IDEyOAoJCQkJCQkJdGhvdWdodHM6IDE2MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIElVQ1YgSGlwZXJTb2NrZXRzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBJU19FTkFCTEVEKENPTkZJR19JVUNWKWAgaXMgdXNlZCBpbiBgYWZfaXVjdi5jYC4gVGhpcyBtZWFucyB0aGF0IHdlIGNhbiBidWlsZCB0aGUgYEFGSVVDVmAgc3Vic3lzdGVtIHdpdGhvdXQgdGhlIGNvcmUgYElVQ1ZgIGZ1bmN0aW9uYWxpdHkuIFNpbmNlIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBIaXBlclNvY2tldHMsIGFuZCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBBRl9JVUNWX1RSQU5TX0hJUEVSYCwgb25seSBgQ09ORklHX0FGSVVDVmAgaXMgcmVsZXZhbnQgaGVyZS4gSG93ZXZlciwgYENPTkZJR19BRklVQ1ZgIGRlcGVuZHMgb24gYFMzOTBgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgdGhlIGhhcmR3YXJlIGNvbnRleHQuCgpUaGUgaW5zdHJ1Y3Rpb25zIHRlbGwgbWUgdG8gcmV0dXJuIGBBRklVQ1ZgIGluIGBFbmFibGVDb25maWdzYCwgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeC4gVGhhdCYjMzk7cyBlYXN5IGVub3VnaC4gIFNvLCBgQUZJVUNWYCBpdCBpcy4gIE5vdGhpbmcgZWxzZSBpcyBuZWVkZWQgZm9yIHRoaXMgc3BlY2lmaWMgcGF0Y2guCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBgYWZpdWN2X2hzX3JjdmAgaXMgdGhlIGtleS4gVGhlbiB0aGVyZSYjMzk7cyBgYWZpdWN2X2hzX2NhbGxiYWNrX3N5bmAgYW5kIGBhZml1Y3ZfaHNfY2FsbGJhY2tfcnhgLCByZWxhdGVkIHRvIEhpcGVyU29ja2V0cy4gQW5kIHRoZW4gdGhlcmUgYXJlIGBpdWN2X3NvY2tfYmluZGAsIGBpdWN2X3NvY2tfY29ubmVjdGAsIGBpdWN2X3NvY2tfc2VuZG1zZ2AsIGBpdWN2X3NvY2tfcmVjdm1zZ2AKCkFmdGVyIHJldmlld2luZyB0aGUgcGF0Y2gsIEkgc2VlIHRoYXQgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBgYWZpdWN2X2hzX3JjdmAuIEkgZG91YmxlLWNoZWNrZWQgaWYgYGFmaXVjdl9oc19yY3ZgIGlzIHN0YXRpYy4gWWVzLCBpdCBpcyBkZWNsYXJlZCBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyBpcyB0YWtlbiBhbmQgcGFzc2VkIHRvIGBkZXZfYWRkX3BhY2tgLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGFuIGVudHJ5IHBvaW50LCBub3QgaW5saW5lZCwgYW5kIGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiAgU28gaXQmIzM5O3Mgc3VpdGFibGUgdG8gaW5jbHVkZS4KCkkgZXhhbWluZWQgYGl1Y3Zfc29ja19iaW5kYCwgYGl1Y3Zfc29ja19jb25uZWN0YCwgZXRjLiBUaGV5IGFyZSBzdGF0aWMgdG9vLCBidXQgdGhleSYjMzk7cmUgcmVnaXN0ZXJlZCBpbiBgcHJvdG9fb3BzYCwgc28gdGhhdCYjMzk7cyBhY2NlcHRhYmxlLgoKU28gbXkgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBhcmU6ICBgYWZpdWN2X2hzX3JjdmAuIFdoaWxlIGBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luYCBhbmQgYGFmaXVjdl9oc19jYWxsYmFja19yeGAgYXJlIGNhbGxlZCBieSBgYWZpdWN2X2hzX3JjdmAsIGluY2x1ZGluZyBgYWZpdWN2X2hzX3JjdmAgaXMgdGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBhIGZ1bmN0aW9uYWwgZml4LiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGFmaXVjdl9oc19yY3ZgIHRvIGluY2x1ZGUgYSB0cmFuc3BvcnQgdHlwZSBjaGVjay4gSXQgZW5zdXJlcyB0aGF0IEhpcGVyU29ja2V0cyBwYWNrZXRzIGFyZW4mIzM5O3QgcHJvY2Vzc2VkIGJ5IHNvY2tldHMgdGhhdCBhcmVuJiMzOTt0IHVzaW5nIHRoZSBIaXBlclNvY2tldHMgdHJhbnNwb3J0LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGhlcmUuCgpDcnVjaWFsbHksIHRoaXMgaXMgcmVhY2hhYmxlIGluIFFFTVUhIHMzOTB4IGlzIHN1cHBvcnRlZCBieSBRRU1VLCBhbmQgU3l6a2FsbGVyIGlzIGFjdGl2ZWx5IGZ1enppbmcgb24gaXQuIFRoZSBgQUZJVUNWYCBjb25maWcgY2FuIGJlIGVuYWJsZWQuIEkgY2FuIHNlbmQgYSBwYWNrZXQgd2l0aCBgRVRIX1BfQUZfSVVDVmAgdmlhIGBBRl9QQUNLRVRgIG9yIGB0dW4vdGFwYCB0byBnZXQgdG8gdGhpcyBmdW5jdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IGZ1enphYmxlLgoKVGhlcmVmb3JlLCBoZXJlIGFyZSB0aGUgcmVzdWx0czoKLSBXb3J0aEZ1enppbmc6IHRydWUKLSBSZWFzb25pbmc6IFRoZSBwYXRjaCBhZGRzIGEgdHJhbnNwb3J0IHR5cGUgY2hlY2sgaW4gYGFmaXVjdl9oc19yY3ZgIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBIaXBlclNvY2tldHMgcGFja2V0cyBmb3Igc29ja2V0cyBub3QgdXNpbmcgdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBuZXR3b3JrIHByb3RvY29sIHBhY2tldCBoYW5kbGVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJhdyBzb2NrZXRzIG9yIHR1bi90YXAgZGV2aWNlcyBieSBzZW5kaW5nIHBhY2tldHMgd2l0aCBwcm90b2NvbCBFVEhfUF9BRl9JVUNWLgotIEZvY3VzU3ltYm9sczogWyYjMzQ7YWZpdWN2X2hzX3JjdiYjMzQ7XQotIEVuYWJsZUNvbmZpZ3M6IFsmIzM0O0FGSVVDViYjMzQ7XQoKYEFGSVVDVmAgaXMgdGhlIG9ubHkgbmVlZGVkIGNvbmZpZywgc2luY2UgaXQmIzM5O3Mgc291cmNlZCBmcm9tIGBuZXQvaXVjdi9LY29uZmlnYCwgd2hpY2ggaW5jbHVkZXMgYG5ldC9LY29uZmlnYCwgYW5kIGRlcGVuZHMgb24gYFMzOTBgLgoKYGFmaXVjdl9oc19yY3ZgIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBGb2N1c1N5bWJvbHMuCgpJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRklVQ1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZml1Y3ZfaHNfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB0cmFuc3BvcnQgdHlwZSBjaGVjayBpbiBgYWZpdWN2X2hzX3JjdmAgdG8gcHJldmVudCBwcm9jZXNzaW5nIEhpcGVyU29ja2V0cyBwYWNrZXRzIGZvciBzb2NrZXRzIG5vdCB1c2luZyB0aGUgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBBRl9JVUNWIG5ldHdvcmsgcHJvdG9jb2wgcGFja2V0IGhhbmRsZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcmF3IHNvY2tldHMgb3IgdHVuL3RhcCBkZXZpY2VzIGJ5IHNlbmRpbmcgcGFja2V0cyB3aXRoIHByb3RvY29sIEVUSF9QX0FGX0lVQ1YuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGSVVDViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FmaXVjdl9oc19yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHRyYW5zcG9ydCB0eXBlIGNoZWNrIGluIGBhZml1Y3ZfaHNfcmN2YCB0byBwcmV2ZW50IHByb2Nlc3NpbmcgSGlwZXJTb2NrZXRzIHBhY2tldHMgZm9yIHNvY2tldHMgbm90IHVzaW5nIHRoZSBIaXBlclNvY2tldHMgdHJhbnNwb3J0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEFGX0lVQ1YgbmV0d29yayBwcm90b2NvbCBwYWNrZXQgaGFuZGxlciwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSByYXcgc29ja2V0cyBvciB0dW4vdGFwIGRldmljZXMgYnkgc2VuZGluZyBwYWNrZXRzIHdpdGggcHJvdG9jb2wgRVRIX1BfQUZfSVVDVi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgb25seSBzb2NrZXRzIHdpdGggdGhlIEFGX0lVQ1ZfVFJBTlNfSElQRVIgdHJhbnNwb3J0IHR5cGUgcHJvY2VzcyBpbmNvbWluZyBIaXBlclNvY2tldHMgcGFja2V0cyBpbiBgYWZpdWN2X2hzX3JjdigpYC4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBwYWNrZXRzIGNvdWxkIGJlIGluY29ycmVjdGx5IHJvdXRlZCB0byBzb2NrZXRzIG9mIGEgZGlmZmVyZW50IHRyYW5zcG9ydCB0eXBlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZXNlIHR5cGVzIG9mIGlzc3VlcyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYmM1NjNiMTVjZmYxOWNlMDUwOTA4NzY1MmVjZmFiZjdhNzU4ZjZjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTM6NTc6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmMKaW5kZXggZWEwNDdiYWI2NWU3Yy4uNWZiNjc5M2I5YTY0YSAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pdWN2L2FmX2l1Y3YuYwpAQCAtMjA3OSw2ICYjNDM7MjA3OSw4IEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCXNrID0gTlVMTDsKIAlyZWFkX2xvY2soJmFtcDtpdWN2X3NrX2xpc3QubG9jayk7CiAJc2tfZm9yX2VhY2goc2ssICZhbXA7aXVjdl9za19saXN0LmhlYWQpIHsKJiM0MzsJCWlmIChpdWN2X3NrKHNrKS0mZ3Q7dHJhbnNwb3J0ICE9IEFGX0lVQ1ZfVFJBTlNfSElQRVIpCiYjNDM7CQkJY29udGludWU7CiAJCWlmICh0cmFuc19oZHItJmd0O2ZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pIHsKIAkJCWlmICgoIW1lbWNtcCgmYW1wO2l1Y3Zfc2soc2spLSZndDtzcmNfbmFtZSwKIAkJCQkgICAgIHRyYW5zX2hkci0mZ3Q7ZGVzdEFwcE5hbWUsIDgpKSAmYW1wOyZhbXA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBJVUNWIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIHdpdGhpbiBhIGxvb3AgdGhhdCBpdGVyYXRlcyB0aHJvdWdoIElVQ1Ygc29ja2V0czogYGlmIChpdWN2X3NrKHNrKS0mZ3Q7dHJhbnNwb3J0ICE9IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIGNvbnRpbnVlO2AuIEVzc2VudGlhbGx5LCB0aGlzIHNlZW1zIHRvIGZpbHRlciB0aGUgc29ja2V0cyBiYXNlZCBvbiB0aGVpciB0cmFuc3BvcnQgdHlwZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGBBRl9JVUNWX1RSQU5TX0hJUEVSYCBzb2NrZXRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgbGlrZWx5IGEgc3RyYWlnaHRmb3J3YXJkIGJ1ZyBmaXguIEl0IHByZXZlbnRzIHBhY2tldHMgZnJvbSBiZWluZyBtaXN0YWtlbmx5IGRlbGl2ZXJlZCB0byBzb2NrZXRzIHRoYXQgYXJlbiYjMzk7dCBvZiB0aGUgYEhJUEVSYCB0cmFuc3BvcnQgdHlwZS4KCkkgZG9uJiMzOTt0IHN1c3BlY3QgdGhpcyBpcyByZWxhdGVkIHRvIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIE1vcmUgbGlrZWx5LCBpdCYjMzk7cyBhIGxvZ2ljIGVycm9yIHRoYXQgY291bGQgbGVhZCB0byBwYWNrZXQgbWlzZGlyZWN0aW9uLiBJZiBhIHBhY2tldCBhcnJpdmVkLCB0aGUgc3lzdGVtIHdvdWxkIGluY29ycmVjdGx5IHRyeSB0byBwcm9jZXNzIGl0IHRocm91Z2ggdGhlIHdyb25nIHNvY2tldCB0eXBlLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSB2YXJpZXR5IG9mIGlzc3VlcywgZnJvbSB0eXBlIGNvbmZ1c2lvbiB0byBpbmNvcnJlY3QgcHJvY2Vzc2luZy4KCkkmIzM5O20gbm93IGdvaW5nIHRvIGludmVzdGlnYXRlIGBhZml1Y3ZfaHNfcmN2YCBpbiB0aGUgc2FtZSBmaWxlIHRvIGNvbmZpcm0gaG93IHRoaXMgbmV3IGNoZWNrIGlzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FmaXVjdl9oc19yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTIwMTI9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDUzLS8qXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1NDogKiBhZml1Y3ZfaHNfcmN2KCkgLSBiYXNlIGZ1bmN0aW9uIGZvciBhcnJpdmluZyBkYXRhIHRocm91Z2ggSGlwZXJTb2NrZXRzXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1NS0gKiAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1Ny0gKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDU4OnN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTktXHRzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyOTY9c3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpdWN2X3BhY2tldF90eXBlID0ge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTctXHQudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0FGX0lVQ1YpLFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTg6XHQuZnVuYyA9IGFmaXVjdl9oc19yY3YsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5OS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDA2CgkJCQkJCQlvdXRwdXQ6IDE2MQoJCQkJCQkJdGhvdWdodHM6IDIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgbG9naWMgYnVnIGZpeC4gVGhlIGtleSBpcyB0aGF0IGl0JiMzOTtzIGFkZGluZyBhIGNoZWNrOiBgaXVjdl9zayhzayktJmd0O3RyYW5zcG9ydCAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSYC4gSSBnZXQgaXQg4oCTIHRoaXMgaXMgZGVzaWduZWQgdG8gcHJldmVudCBzb2NrZXRzIHRoYXQgKmFyZW4mIzM5O3QqIHNwZWNpZmljYWxseSBjb25maWd1cmVkIGZvciBISVBFUiB0cmFuc3BvcnQgZnJvbSBzb21laG93IHJlY2VpdmluZyBISVBFUiBwYWNrZXRzLiBTZWVtcyBsaWtlIGEgZ29vZCBwcmFjdGljZSB0byBpbmNsdWRlIGluIGFueSB3ZWxsLWRlc2lnbmVkIHN5c3RlbSwgcmVnYXJkbGVzcy4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gY29uc2lkZXIgdW5pbml0aWFsaXplZCBtZW1vcnksIHNpbmNlIEtNU0FOIGlzIGFsd2F5cyB0b3Atb2YtbWluZC4gSG93ZXZlciwgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb2RlLCB0aGlzIGNoYW5nZSBhcHBlYXJzIG11Y2ggbW9yZSBmb2N1c2VkIG9uIHByZXZlbnRpbmcgdGhlIHBvdGVudGlhbCBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHR5cGUgY29uZnVzaW9uLCBvciBldmVuIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBpZiBhIG5vbi1ISVBFUiBzb2NrZXQgKmRpZCogZXJyb25lb3VzbHkgcHJvY2VzcyBhIEhJUEVSIHBhY2tldC4gU28sIHdoaWxlIGl0JiMzOTtzIGltcG9ydGFudCB0byBiZSB2aWdpbGFudCBhYm91dCBtZW1vcnkgc2FmZXR5IGluIGdlbmVyYWwsIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBoZXJlIHRoYXQgZGlyZWN0bHkgYWRkcmVzc2VzIG9yIHJlc29sdmVzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGxlYWsgaXNzdWVzLgoKYGl1Y3Zfc2soc2spYCBpcyBqdXN0IGEgY2FzdCB0byBgc3RydWN0IGl1Y3Zfc29ja2AsIHdoaWNoIGlzIGV4cGVjdGVkLiBObyBzaWducyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLgoKS01TQU4gZmxhZ3MgYXJlIHR5cGljYWxseSB1c2VkIGZvciBkZXRlY3RpbmcgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zIHRoYXQgSSB1c3VhbGx5IHNlZS4gS0FTQU4gaXMgdGhlIHRvb2wgdGhhdCB3b3VsZCBsaWtlbHkgYmUgbW9yZSByZWxldmFudCBmb3IgT09CLCBVQUYsIGFuZCBzaW1pbGFyIGlzc3Vlcy4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBzZWVtIHRvIHRvdWNoIGFueSBLTVNBTiBjb25jZXJucy4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IG9ubHkgc29ja2V0cyB3aXRoIHRoZSBBRl9JVUNWX1RSQU5TX0hJUEVSIHRyYW5zcG9ydCB0eXBlIHByb2Nlc3MgaW5jb21pbmcgSGlwZXJTb2NrZXRzIHBhY2tldHMgaW4gYGFmaXVjdl9oc19yY3YoKWAuIFRoaXMgZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgcGFja2V0cyBjb3VsZCBiZSBpbmNvcnJlY3RseSByb3V0ZWQgdG8gc29ja2V0cyBvZiBhIGRpZmZlcmVudCB0cmFuc3BvcnQgdHlwZSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byB0eXBlIGNvbmZ1c2lvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBUaGVzZSB0eXBlcyBvZiBpc3N1ZXMgYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBlbnN1cmUgdGhhdCBvbmx5IHNvY2tldHMgd2l0aCB0aGUgQUZfSVVDVl9UUkFOU19ISVBFUiB0cmFuc3BvcnQgdHlwZSBwcm9jZXNzIGluY29taW5nIEhpcGVyU29ja2V0cyBwYWNrZXRzIGluIGBhZml1Y3ZfaHNfcmN2KClgLiBUaGlzIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIHBhY2tldHMgY291bGQgYmUgaW5jb3JyZWN0bHkgcm91dGVkIHRvIHNvY2tldHMgb2YgYSBkaWZmZXJlbnQgdHJhbnNwb3J0IHR5cGUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdHlwZSBjb25mdXNpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gVGhlc2UgdHlwZXMgb2YgaXNzdWVzIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjIzLjY1Njc2NjA4MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTA5NDE0ODc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRklVQ1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZml1Y3ZfaHNfcmN2XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgb25seSBzb2NrZXRzIHdpdGggdGhlIEFGX0lVQ1ZfVFJBTlNfSElQRVIgdHJhbnNwb3J0IHR5cGUgcHJvY2VzcyBpbmNvbWluZyBIaXBlclNvY2tldHMgcGFja2V0cyBpbiBgYWZpdWN2X2hzX3JjdigpYC4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBwYWNrZXRzIGNvdWxkIGJlIGluY29ycmVjdGx5IHJvdXRlZCB0byBzb2NrZXRzIG9mIGEgZGlmZmVyZW50IHRyYW5zcG9ydCB0eXBlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZXNlIHR5cGVzIG9mIGlzc3VlcyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB0cmFuc3BvcnQgdHlwZSBjaGVjayBpbiBgYWZpdWN2X2hzX3JjdmAgdG8gcHJldmVudCBwcm9jZXNzaW5nIEhpcGVyU29ja2V0cyBwYWNrZXRzIGZvciBzb2NrZXRzIG5vdCB1c2luZyB0aGUgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBBRl9JVUNWIG5ldHdvcmsgcHJvdG9jb2wgcGFja2V0IGhhbmRsZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcmF3IHNvY2tldHMgb3IgdHVuL3RhcCBkZXZpY2VzIGJ5IHNlbmRpbmcgcGFja2V0cyB3aXRoIHByb3RvY29sIEVUSF9QX0FGX0lVQ1YuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjIzLjY1Njc3MjE1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkxMzk5MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGJjNTYzYjE1Y2ZmMTljZTA1MDkwODc2NTJlY2ZhYmY3YTc1OGY2Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzo1NzoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmNcXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi41ZmI2NzkzYjlhNjRhIDEwMDY0NFxcbi0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuY1xcbisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xcbkBAIC0yMDc5LDYgKzIwNzksOCBAQCBzdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0c2sgPSBOVUxMO1xcbiBcXHRyZWFkX2xvY2soXFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcXG4gXFx0c2tfZm9yX2VhY2goc2ssIFxcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZCkge1xcbitcXHRcXHRpZiAoaXVjdl9zayhzayktXFx1MDAzZXRyYW5zcG9ydCAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKHRyYW5zX2hkci1cXHUwMDNlZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1NZTikge1xcbiBcXHRcXHRcXHRpZiAoKCFtZW1jbXAoXFx1MDAyNml1Y3Zfc2soc2spLVxcdTAwM2VzcmNfbmFtZSxcXG4gXFx0XFx0XFx0XFx0ICAgICB0cmFuc19oZHItXFx1MDAzZWRlc3RBcHBOYW1lLCA4KSkgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTc6MjQuMDQ4ODAwNzUyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIwNzA4MzA4NzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGSVVDVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmaXVjdl9oc19yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdHJhbnNwb3J0IHR5cGUgY2hlY2sgaW4gYGFmaXVjdl9oc19yY3ZgIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBIaXBlclNvY2tldHMgcGFja2V0cyBmb3Igc29ja2V0cyBub3QgdXNpbmcgdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBuZXR3b3JrIHByb3RvY29sIHBhY2tldCBoYW5kbGVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJhdyBzb2NrZXRzIG9yIHR1bi90YXAgZGV2aWNlcyBieSBzZW5kaW5nIHBhY2tldHMgd2l0aCBwcm90b2NvbCBFVEhfUF9BRl9JVUNWLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYmM1NjNiMTVjZmYxOWNlMDUwOTA4NzY1MmVjZmFiZjdhNzU4ZjZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTM6NTc6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbmluZGV4IGVhMDQ3YmFiNjVlN2MuLjVmYjY3OTNiOWE2NGEgMTAwNjQ0XG4tLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmNcbisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuQEAgLTIwNzksNiArMjA3OSw4IEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c2sgPSBOVUxMO1xuIFx0cmVhZF9sb2NrKFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcbiBcdHNrX2Zvcl9lYWNoKHNrLCBcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZCkge1xuK1x0XHRpZiAoaXVjdl9zayhzayktXHUwMDNldHJhbnNwb3J0ICE9IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICh0cmFuc19oZHItXHUwMDNlZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1NZTikge1xuIFx0XHRcdGlmICgoIW1lbWNtcChcdTAwMjZpdWN2X3NrKHNrKS1cdTAwM2VzcmNfbmFtZSxcbiBcdFx0XHRcdCAgICAgdHJhbnNfaGRyLVx1MDAzZWRlc3RBcHBOYW1lLCA4KSkgXHUwMDI2XHUwMDI2XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzoyNC4wNDg4MDI3NTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTAwNTU1MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogbmV0L2l1Y3YvYWZfaXVjdi5jKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBTcGVjaWZpY2FsbHksIHRoZXJlJ3MgYSBuZXcgY2hlY2sgaW4gYGFmaXVjdl9oc19yY3ZgOiBgaWYgKGl1Y3Zfc2soc2spLVx1MDAzZXRyYW5zcG9ydCAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoaXMgYSBuZXcgYXR0YWNrIHN1cmZhY2U/IElzIGBuZXQvaXVjdi9hZl9pdWN2LmNgIHdvcnRoIGZ1enppbmcgbm93P1wiIEl0J3Mgd29ydGggdGFraW5nIGEgZGVlcGVyIGxvb2suXG5cblJpZ2h0LCBJVUNW4oCmIHRoYXQncyBhbiBJQk0gczM5MCBzcGVjaWZpYyBwcm90b2NvbCwgcmlnaHQ/IEludGVyLVVzZXIgQ29tbXVuaWNhdGlvbiBWZWhpY2xlLiBUaGUgbmV4dCBxdWVzdGlvbiBiZWNvbWVzLCBcIkNhbiB3ZSBldmVuIGZ1enogdGhpcyBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50P1wiIEZvcnR1bmF0ZWx5LCBJIGtub3cgUUVNVSBzdXBwb3J0cyBzMzkweCwgc28gdGhlIGFyY2hpdGVjdHVyZSBiYXJyaWVyIGlzbid0IGEgcHJvYmxlbS4gKkJ1dCwqIGxldCdzIG5vdCBqdW1wIHRoZSBndW4uIFdlICpoYXZlKiB0byBjaGVjayBpZiB0aGlzIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIHRoYXQgbWlnaHQgbm90IGV2ZW4gYmUgKnByZXNlbnQqIGluIG91ciB0YXJnZXQgZW52aXJvbm1lbnQuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBuZXQvaXVjdi9LY29uZmlnYCB0byBjb25maXJtIGJlZm9yZSBwcm9jZWVkaW5nLiBHb3R0YSBnZXQgdGhhdCBiYXNlbGluZSwgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzoyOS45NDkzNjAwODFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2Mjk5NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElVQ1ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2l1Y3YvS2NvbmZpZzoyOmNvbmZpZyBJVUNWXFxubmV0L2l1Y3YvS2NvbmZpZy0zLVxcdGRlcGVuZHMgb24gUzM5MFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzoyOS45OTg5OTQzNDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDUwOTYwNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlMzOTAgRnV6emluZyBGZWFzaWJpbGl0eSoqXG5cbk9rYXksIHNvIHRoaXMgaGluZ2VzIG9uIFMzOTAuICpDYW4qIHN5emthbGxlciBhY3R1YWxseSBmdXp6IHMzOTB4PyBHb29kLCB0aGUgZG9jdW1lbnRhdGlvbiBjb25maXJtcyB0aGF0IGl0IGRvZXMuIE5vdywgSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBzcGVjaWZpYyBjYXZlYXRzLi4uIHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb25zIHBvaW50IG91dCB0aGF0IHNvbWUgY29kZSBwYXRocyBhcmUgaW5hY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggaGFyZHdhcmUgZW11bGF0aW9uLiBBIGtleSBjb25zaWRlcmF0aW9uLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBjYW4gSVVDViBiZSBlZmZlY3RpdmVseSBmdXp6ZWQgKndpdGhpbiogUUVNVT8gWWVzLCBvZiBjb3Vyc2UsIFFFTVUgaGFzIHMzOTB4IGVtdWxhdGlvbi4gQnV0IHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0J3MgKndvcnRoKiB0aGUgZWZmb3J0LCBnaXZlbiB0aGUgcG90ZW50aWFsIGxpbWl0YXRpb25zLiBUaGlzIGlzIHRoZSBjcnV4LiBUbyBtYWtlIHRoYXQgY2FsbCwgbGV0J3Mgc3RhcnQgYnkgZGV0ZXJtaW5pbmcgaWYgdGhlIGZ1bmN0aW9uIGBhZml1Y3ZfaHNfcmN2YCBpcyBldmVuIHJlYWNoYWJsZS4gVGhhdCdzIHRoZSBmaXJzdCBzdGVwLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzozNS4wNDk5NTc1MzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMTAxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZpdWN2X2hzX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTIwMTI9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTMtLypcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1NDogKiBhZml1Y3ZfaHNfcmN2KCkgLSBiYXNlIGZ1bmN0aW9uIGZvciBhcnJpdmluZyBkYXRhIHRocm91Z2ggSGlwZXJTb2NrZXRzXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTUtICogICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1Ny0gKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1ODpzdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1OS1cXHRzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI5Nj1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGl1Y3ZfcGFja2V0X3R5cGUgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTctXFx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI5ODpcXHQuZnVuYyA9IGFmaXVjdl9oc19yY3YsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTktfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTc6MzUuMDk2OTcxMjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY2OTUxNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIElVQ1YgTmV0d29yayBQcm90b2NvbCoqXG5cbk9rYXksIHNvIGBhZml1Y3ZfaHNfcmN2YCBpcyBzZXQgdXAgYXMgYSBoYW5kbGVyIGZvciBwYWNrZXRzIHVzaW5nIHRoZSBgRVRIX1BfQUZfSVVDVmAgcHJvdG9jb2wuIFJpZ2h0LCBzbyB0aGF0IG1lYW5zIEkgY2FuIGludGVyYWN0IHdpdGggaXQgdXNpbmcgcmF3IHNvY2tldHMgb3IgdHVuL3RhcCBkZXZpY2VzLCBzZW5kaW5nIHBhY2tldHMgd2l0aCB0aGF0IHNwZWNpZmljIHByb3RvY29sIHR5cGUuIEJ1dCB3YWl0LCBgRVRIX1BfQUZfSVVDVmAgKmlzKiBhIG5ldHdvcmsgcHJvdG9jb2wuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBJVUNWYCBpdHNlbGYgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbmV0d29yayBjYXBhYmlsaXRpZXMgb2YgdGhlIHN5c3RlbS4gTGV0IG1lIGNoZWNrIHRoZSBgbmV0L2l1Y3YvS2NvbmZpZ2AgZmlsZSB0byBzZWUgaG93IGBBRl9JVUNWYCBpcyBjb25maWd1cmVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgY29uZmlndXJhdGlvbiBjb250ZXh0IEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzozOS4wNjM5MjQ5MjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MTUwNjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBRl9JVUNWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjM5LjEwOTg1MDM5NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTMwODA5NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBOZXQvSXVjdi9LY29uZmlnIEZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgbmV0L2l1Y3YvS2NvbmZpZ2AuIEkgbmVlZCB0byB0aG9yb3VnaGx5IGFzc2VzcyBpdHMgY29udGVudHMuIEknbSBsb29raW5nIGZvciBldmVyeXRoaW5nOiBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoZW1zZWx2ZXMsIGFuZCBhbnkgaW5oZXJlbnQgbG9naWMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjayBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIEtjb25maWcgZmlsZXMuIEFyZSB0aGVyZSBhbnkgc3VidGxlIGltcGxpY2F0aW9ucyBvciBwb3RlbnRpYWwgZ290Y2hhcyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBzZWxlY3RgIHN0YXRlbWVudHMgYW5kIHRyaXN0YXRlIG9wdGlvbnMsIG1ha2luZyBzdXJlIEkgZnVsbHkgZ3Jhc3AgdGhlIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBsb2dpYy4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uIGZvciBmaWd1cmluZyBvdXQgaG93IHRoZSBJVUNWIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSBpcyBjb25maWd1cmVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IGFyZWFzIHRoYXQgbmVlZCBpbW1lZGlhdGUgYXR0ZW50aW9uIGZyb20gbXkgcGVyc3BlY3RpdmUuIFRoaXMgaXMgYSBjcml0aWNhbCBzdGVwIGJlZm9yZSBtYWtpbmcgY2hhbmdlcyBvciByZWNvbW1lbmRhdGlvbnMgcmVsYXRlZCB0byBJVUNWLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjU2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTc6NDQuNTYyOTMzODE5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgSVVDVlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBTMzkwXFxuICAgNDpcXHRcXHRkZWZfdHJpc3RhdGUgeSBpZiBTMzkwXFxuICAgNTpcXHRcXHRwcm9tcHQgXFxcIklVQ1Ygc3VwcG9ydCAoUzM5MCAtIHovVk0gb25seSlcXFwiXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgaW50ZXItdXNlciBjb21tdW5pY2F0aW9uXFxuICAgODpcXHRcXHQgIHVuZGVyIFZNIG9yIFZJRi4gSWYgeW91IHJ1biBvbiB6L1ZNLCBzYXkgXFxcIllcXFwiIHRvIGVuYWJsZSBhIGZhc3RcXG4gICA5OlxcdFxcdCAgY29tbXVuaWNhdGlvbiBsaW5rIGJldHdlZW4gVk0gZ3Vlc3RzLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRjb25maWcgQUZJVUNWXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFMzOTBcXG4gIDEzOlxcdFxcdGRlZl90cmlzdGF0ZSBtIGlmIFFFVEhfTDMgfHwgSVVDVlxcbiAgMTQ6XFx0XFx0cHJvbXB0IFxcXCJBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydClcXFwiXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXFxuICAxNzpcXHRcXHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cXG4gIDE4OlxcdFxcdCAgSGlwZXJTb2NrZXRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Nzo0NC41NjI5OTQ3NTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA4MTI4NjI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFGSVVDViBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpbnZvbHZlcyBgY29uZmlnIEFGSVVDVmAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgb2YgY291cnNlLCB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBgQUZJVUNWYC4gVGhlIGNvZGUgc2VlbXMgdG8gYmUgbG9jYXRlZCBpbiBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gUmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGhlYXZ5IGxpZnRpbmcsIGFuZCBpdCBsb29rcyBsaWtlIGBhZml1Y3ZfaHNfcmN2YCBpcyB0aGUgcHJpbWUgc3VzcGVjdC4gWWVzLCBjb25maXJtZWQuIEJ1dCBoYW5nIG9uLi4uIGBhZml1Y3ZfaHNfcmN2YCBpcyBzdGF0aWMhIFRoYXQncyBub3QgaWRlYWwsIHNpbmNlIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeXBvaW50IGZ1bmN0aW9ucy5cblxuSG93ZXZlciwgYSBjbG9zZXIgbG9vayByZXZlYWxzIHRoYXQgYGFmaXVjdl9oc19yY3ZgIGlzIHJlZ2lzdGVyZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgaXVjdl9wYWNrZXRfdHlwZWA6XG5cbmBgYGNcbnN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXVjdl9wYWNrZXRfdHlwZSA9IHtcblx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcblx0LmZ1bmMgPSBhZml1Y3ZfaHNfcmN2LFxufTtcbmBgYFxuXG5TaW5jZSB3ZSdyZSB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIChgLmZ1bmMgPSBhZml1Y3ZfaHNfcmN2YCksIGl0IGFsbW9zdCBjZXJ0YWlubHkgKndvbid0KiBiZSBpbmxpbmVkIGFuZCB3aWxsIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gVGhpcyBtYWtlcyBpdCBhbiBhY2NlcHRhYmxlIGVudHJ5IHBvaW50LCBldmVuIGlmIGl0J3MgZGVjbGFyZWQgc3RhdGljLiBKdXN0IHRvIGJlIHRob3JvdWdoLCBJJ2xsIGRvdWJsZS1jaGVjayBgbmV0L2l1Y3YvYWZfaXVjdi5jYCBmb3IgYW55IG90aGVyIHJlZmVyZW5jZXMgdG8gYGl1Y3ZfcGFja2V0X3R5cGVgIHRvIGVuc3VyZSB0aGVyZSBpc24ndCBhbm90aGVyIGVudHJ5IHBvaW50IEknbSBvdmVybG9va2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE5NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjUxLjY0NDI4NDg0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3NzE2NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdl9wYWNrZXRfdHlwZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTIyOTA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IGl1Y3Zfc29ja19mYW1pbHlfb3BzID0ge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTUtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTY6c3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpdWN2X3BhY2tldF90eXBlID0ge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk3LVxcdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfQUZfSVVDViksXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjMwMT1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMzUtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMzY6XFx0ZGV2X2FkZF9wYWNrKFxcdTAwMjZpdWN2X3BhY2tldF90eXBlKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzNy1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzUwPXN0YXRpYyB2b2lkIF9fZXhpdCBhZml1Y3ZfZXhpdCh2b2lkKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNTUtXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXFx1MDAyNmFmaXVjdl9uZXRkZXZfbm90aWZpZXIpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzU2OlxcdGRldl9yZW1vdmVfcGFjayhcXHUwMDI2aXVjdl9wYWNrZXRfdHlwZSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNTctXFx0c29ja191bnJlZ2lzdGVyKFBGX0lVQ1YpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Nzo1MS42OTQwNjA5MzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEwMTYzMTA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgYWZpdWN2X2hzX3JjdmAgUGFja2V0IEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBgYWZpdWN2X2hzX3JjdmAgaXMgYSBwYWNrZXQgaGFuZGxlciwgc3BlY2lmaWNhbGx5IGZvciBwYWNrZXRzIG9mIHR5cGUgYEVUSF9QX0FGX0lVQ1ZgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBmdXp6aW5nIGl0LiBHaXZlbiB0aGF0IGl0J3MgYSBuZXR3b3JrIHBhY2tldCBoYW5kbGVyIGFuZCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIOKAkyBwb3RlbnRpYWxseSB0aHJvdWdoIHR1bi90YXAgb3IgcmF3IHNvY2tldHMg4oCTIHRoZSBhdHRhY2sgc3VyZmFjZSBpcyBkZWZpbml0ZWx5IHRoZXJlLlxuXG5UaGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRzIGEgY2hlY2sgd2l0aGluIGBhZml1Y3ZfaHNfcmN2YDogYGlmIChpdWN2X3NrKHNrKS1cdTAwM2V0cmFuc3BvcnQgIT0gQUZfSVVDVl9UUkFOU19ISVBFUilgLiBUaGlzIGNsZWFybHkgYWRkcmVzc2VzIGEgYnVnIHdoZXJlIHRoZSBoYW5kbGVyIHdhcyBwcm9jZXNzaW5nIHBhY2tldHMgZm9yIHNvY2tldHMgbm90IHVzaW5nIHRoZSBIaXBlclNvY2tldHMgdHJhbnNwb3J0LiBHb29kLlxuXG5UaGUgY29uZmlndXJhdGlvbiByZXF1aXJlZCBpcyBgQUZJVUNWYC4gSG1tLCBidXQgYEFGSVVDVmAgZGVwZW5kcyBvbiBgUzM5MGAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJjYW4gd2UgZnV6eiB0aGlzIG9uIHg4Nj9cIi4gVGhlIGFuc3dlciBpcyBubywgd2UgY2FuJ3QuIEl0J3MgczM5MCBzcGVjaWZpYy4gSG93ZXZlciwgc3l6a2FsbGVyICpkb2VzKiBmdXp6IHMzOTB4LiBNeSBuZXh0IHRob3VnaHQgaXMsIGNhbiB3ZSBydW4gc3l6a2FsbGVyIGFuZCBmdXp6IG9uIGFuIGVtdWxhdGVkIHMzOTB4IGVudmlyb25tZW50PyBUaGUgZG9jdW1lbnRhdGlvbiBwb2ludHMgdG8gdGhlIGlkZWEgdGhhdCBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgYXJlIHByb2JsZW1hdGljLiBIb3dldmVyLCB0aGUgaW5zdHJ1Y3Rpb25zIHN0YXRlIHRoaXMgaXMgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZS4gUUVNVSBzdXBwb3J0cyBzMzkweCwgYW5kIHN5emthbGxlciBydW5zIHMzOTB4IGluc3RhbmNlcyBvbiBRRU1VLCBzbyB0aGUgY29kZSBpcyAqcmVhY2hhYmxlKi5cblxuQnV0LCBhIHRob3VnaHQgZW1lcmdlczsgZG9lcyBgQUZJVUNWYCBhY3R1YWxseSByZXF1aXJlIHNwZWNpZmljIHMzOTAgaGFyZHdhcmUgdGhhdCAqaXNuJ3QqIGVtdWxhdGVkPyBUaGUgY29uZmlnIHRleHQgc2F5cyB0aGF0IHRoZSBwcm9tcHQgc2F5cyBcIkFGX0lVQ1YgU29ja2V0IHN1cHBvcnQgKFMzOTAgLSB6L1ZNIGFuZCBIaXBlclNvY2tldHMgdHJhbnNwb3J0KVwiLiBIaXBlclNvY2tldHMgaXMganVzdCBhICp0cmFuc3BvcnQqLiBJdCdzIG5vdCBhIGhhcmR3YXJlIHJlcXVpcmVtZW50IGZvciB0aGUgYGFmaXVjdl9oc19yY3ZgIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC4gQW55IG5ldHdvcmsgZGV2aWNlIGNhbiByZWNlaXZlIGEgcGFja2V0IHdpdGggYHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BRl9JVUNWKWAsIGFuZCBgZGV2X2FkZF9wYWNrYCB3aWxsIHJvdXRlIGl0IHRvIGBhZml1Y3ZfaHNfcmN2YC4gVGhpcyBpcyB0aGUga2V5LiBJdCBsb29rcyBsaWtlIGl0IGRvZXNuJ3QgbmVlZCBIaXBlclNvY2tldHMgc3BlY2lmaWNhbGx5LiBJJ20gZ29pbmcgdG8gdmVyaWZ5IHRoaXMgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI3OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODowMC43OTU2OTUwMTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTM5MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVUSF9QX0FGX0lVQ1ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmgtMTI1LSNkZWZpbmUgRVRIX1BfSUZFXFx0MHhFRDNFXFx0XFx0LyogRm9yQ0VTIGludGVyLUZFIExGQiB0eXBlICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmg6MTI2OiNkZWZpbmUgRVRIX1BfQUZfSVVDViAgIDB4RkJGQlxcdFxcdC8qIElCTSBhZl9pdWN2IFsgTk9UIEFOIE9GRklDSUFMTFkgUkVHSVNURVJFRCBJRCBdICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmgtMTI3LSNkZWZpbmUgRVRIX1BfTlhQX05FVEMgIDB4RkQzQVxcdFxcdC8qIE5YUCBORVRDIERTQSBbIE5PVCBBTiBPRkZJQ0lBTExZIFJFR0lTVEVSRUQgSUQgXSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODowMC44NDU2Mzg5MjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQwNjM3ODc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGFmaXVjdl9oc19yY3ZgIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gYEVUSF9QX0FGX0lVQ1ZgIGlzIGp1c3QgYW4gRXRoZXJuZXQgcHJvdG9jb2wgSUQuIFRoYXQncyBzdHJhaWdodGZvcndhcmQuIFNlbmRpbmcgYSBwYWNrZXQgd2l0aCB0aGF0IElEIHRocm91Z2ggZWl0aGVyIGBBRl9QQUNLRVRgIG9yIGEgYHR1bmAgaW50ZXJmYWNlIHdpbGwgaW5ldml0YWJseSB0cmlnZ2VyIHRoZSBgYWZpdWN2X2hzX3JjdmAgZnVuY3Rpb24uIFNvLCB5ZXMsIHRoZSBmdW5jdGlvbiAqaXMqIHJlYWNoYWJsZSDigJMgdGhhdCdzIHRoZSBvYnZpb3VzIGNvbmNsdXNpb24uIE5vdywgbGV0J3MgZGlnIGRlZXBlciB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIGNvbnNpZGVyLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIHplcm9lcyBpbiBvbiBgYWZpdWN2X2hzX3JjdmAsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBzdHJvbmcgaW5kaWNhdG9yLiBMb29raW5nIGF0IHRoZSBjb2RlIG1vZGlmaWNhdGlvbiwgaXQgc2VlbXMgbGlrZSB0aGVyZSBpcyBub3cgYSBjaGVjayB0aGF0IGZpbHRlcnMgb24gYGl1Y3Zfc2soc2spLVx1MDAzZXRyYW5zcG9ydCAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSYC4gU28sIHdlIHNob3VsZCBpbnZlc3RpZ2F0ZSB3aGF0IHRoYXQgbWVhbnMgd2l0aGluIHRoZSBmdW5jdGlvbi4gU2luY2UgdGhlIGZ1bmN0aW9uIGlzIHN0YXRpYywgYnV0IGl0cyBhZGRyZXNzIGlzIHRha2VuLCB0aGVyZSBhcmVuJ3QgaW1tZWRpYXRlIGNvbmNlcm5zLiBJcyB0aGVyZSBhbm90aGVyIHdheSBpbj9cblxuQ291bGQgdGhlIHZ1bG5lcmFiaWxpdHkgYmUgdGhyb3VnaCBgaXVjdl9zb2NrX2JpbmRgIG9yIGBpdWN2X3NvY2tfY29ubmVjdGA/IEknbGwgbmVlZCB0byBjaGVjayBgbmV0L2l1Y3YvYWZfaXVjdi5jYCB0byB1bmRlcnN0YW5kIHRoZSBgaXVjdl9zayhzayktXHUwMDNldHJhbnNwb3J0YCBhc3NpZ25tZW50IGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGlzIG5ldyBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODowOC4yNTIwMTk5M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4OTgwMjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYW5zcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTEwNz1zdGF0aWMgaW5saW5lIHZvaWQgbG93X25tY3B5KHVuc2lnbmVkIGNoYXIgKmRzdCwgY2hhciAqc3JjKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOC0gKlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTk6ICogRm9yIElVQ1ZfSVBSTURBVEEsIEFGX0lVQ1YgdXNlcyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb24gdG8gdHJhbnNwb3J0IHNvY2tldFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjAtICogZGF0YTpcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjY9c3RhdGljIGlubGluZSBpbnQgaXVjdl9iZWxvd19tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MS1cXHRcXHRyZXR1cm4gMTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyOlxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzMtXFx0XFx0cmV0dXJuIChhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0KSBcXHUwMDNjIGl1Y3YtXFx1MDAzZXBhdGgtXFx1MDAzZW1zZ2xpbSk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTgyPXN0YXRpYyB2b2lkIGl1Y3Zfc29ja193YWtlX21zZ2xpbShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTk0LS8qXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE5NTogKiBhZml1Y3ZfaHNfc2VuZCgpIC0gc2VuZCBhIG1lc3NhZ2UgdGhyb3VnaCBIaXBlclNvY2tldHMgdHJhbnNwb3J0XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5Ni0gKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0zMzU9c3RhdGljIHZvaWQgaXVjdl9zZXZlcl9wYXRoKHN0cnVjdCBzb2NrICpzaywgaW50IHdpdGhfdXNlcl9kYXRhKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTM2Ny1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzY4Oi8qIFNlbmQgY29udHJvbGxpbmcgZmxhZ3MgdGhyb3VnaCBhbiBJVUNWIHNvY2tldCBmb3IgSElQRVIgdHJhbnNwb3J0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTM2OS1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9jdHJsKHN0cnVjdCBzb2NrICpzaywgdTggZmxhZ3MpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Mzk1PXN0YXRpYyB2b2lkIGl1Y3Zfc29ja19jbG9zZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDA4LVxcdGNhc2UgSVVDVl9DT05ORUNURUQ6XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQwOTpcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDEwLVxcdFxcdFxcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfRklOKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2VybilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTMtXFx0aWYgKHByX2l1Y3YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5NDpcXHRcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5NS1cXHRlbHNlXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5NjpcXHRcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTctXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NTgyPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjE1LVxcdFxcdGlmICghbWVtY21wKHNhLVxcdTAwM2VzaXVjdl91c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCkpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjYxNjpcXHRcXHRcXHRnb3RvIHZtX2JpbmQ7IC8qIFZNIElVQ1YgdHJhbnNwb3J0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTYxNy1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjE4OlxcdC8qIHRyeSBoaXBlciB0cmFuc3BvcnQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjE5LVxcdG1lbWNweSh1aWQsIHNhLVxcdTAwM2VzaXVjdl91c2VyX2lkLCBzaXplb2YodWlkKSk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjMzLVxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IElVQ1ZfQk9VTkQ7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjYzNDpcXHRcXHRcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MzUtXFx0XFx0XFx0aWYgKCFpdWN2LVxcdTAwM2Vtc2dsaW1pdClcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDctXFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gSVVDVl9CT1VORDtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjQ4OlxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQ5LVxcdFxcdHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY1PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzMtXFx0bWVtY3B5KGl1Y3YtXFx1MDAzZXNyY191c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY3NDpcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3NS1cXHRzay1cXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTczMz1zdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc0Ny1cXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IElVQ1ZfT1BFTiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NDg6XFx0ICAgIGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDktXFx0XFx0cmV0dXJuIC1FQkFERkQ7IC8qIGV4cGxpY2l0IGJpbmQgcmVxdWlyZWQgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NjUtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc2NjpcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc2Ny1cXHRcXHRlcnIgPSBpdWN2X3NlbmRfY3RybChzb2NrLVxcdTAwM2VzaywgQUZfSVVDVl9GTEFHX1NZTik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzgwLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3ODE6XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODItXFx0XFx0aXVjdl9zZXZlcl9wYXRoKHNrLCAwKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz05MTY9c3RhdGljIGludCBpdWN2X3NvY2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTk4LVxcdCAqIGZvciBTT0NLX1NUUkVBTSB3ZSBtaWdodCB3YW50IHRvIGltcHJvdmUgaXQgaW4gZnV0dXJlICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjk5OTpcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTAwMC1cXHRcXHRoZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIpICtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDQzLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDQ0OlxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDQ1LVxcdFxcdGF0b21pY19pbmMoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19zZW50KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDUwLVxcdFxcdH1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA1MTpcXHR9IGVsc2UgeyAvKiBDbGFzc2ljIFZNIElVQ1YgdHJhbnNwb3J0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTItXFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNml1Y3YtXFx1MDAzZXNlbmRfc2tiX3EsIHNrYik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTIzNz1zdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzA4LVxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEzMDk6XFx0XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMTAtXFx0XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MTg9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDQzLVxcdCAgICBzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9DT05ORUNURUQpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ0NDpcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDQ1LVxcdFxcdFxcdHR4bXNnLmNsYXNzID0gMDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDY3LVxcdGlmIChob3cgPT0gUkNWX1NIVVRET1dOIHx8IGhvdyA9PSBTSFVURE9XTl9NQVNLKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0Njg6XFx0XFx0aWYgKChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDY5LVxcdFxcdCAgICBpdWN2LVxcdTAwM2VwYXRoKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NjYtXFx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2Njc6XFx0bml1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY2OC1cXHRuc2stXFx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xODMxPXN0YXRpYyBzdHJ1Y3QgaXVjdl9oYW5kbGVyIGFmX2l1Y3ZfaGFuZGxlciA9IHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODM5LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODQwOi8qKioqKioqKioqKioqKioqKiBIaXBlclNvY2tldHMgdHJhbnNwb3J0IGNhbGxiYWNrcyAqKioqKioqKioqKioqKioqKioqKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg0MS1zdGF0aWMgdm9pZCBhZml1Y3Zfc3dhcF9zcmNfZGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4NjQ9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODk2LVxcdGl1Y3Zfc29ja19pbml0KG5zaywgc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODk3OlxcdG5pdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODk4LVxcdG5pdWN2LVxcdTAwM2Vtc2dsaW1pdCA9IGl1Y3YtXFx1MDAzZW1zZ2xpbWl0O1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIwMTI9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwMzItXFx0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwMzM6XFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjAzNC1cXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDU0LSAqIGFmaXVjdl9oc19yY3YoKSAtIGJhc2UgZnVuY3Rpb24gZm9yIGFycml2aW5nIGRhdGEgdGhyb3VnaCBIaXBlclNvY2tldHNcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1NTogKiAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1Ni0gKiAgICAgICAgICAgICAgICAgICBjYWxsZWQgZnJvbSBuZXRpZiBSWCBzb2Z0aXJxXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjA1OD1zdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDgxLVxcdHNrX2Zvcl9lYWNoKHNrLCBcXHUwMDI2aXVjdl9za19saXN0LmhlYWQpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA4MjpcXHRcXHRpZiAoaXVjdl9zayhzayktXFx1MDAzZXRyYW5zcG9ydCAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDgzLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNjYtICogYWZpdWN2X2hzX2NhbGxiYWNrX3R4bm90aWZ5KCkgLSBoYW5kbGUgc2VuZCBub3RpZmljYXRpb25zIGZyb20gSGlwZXJTb2NrZXRzXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIxNjc6ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE2OC0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6MDguMzcxMDA0NzQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTQxNTkyMzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBIaXBlclNvY2tldHMgUGFja2V0IFJlY2VwdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgYGFmaXVjdl9oc19yY3ZgIGlzIGNsZWFybHkgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBpbmNvbWluZyBwYWNrZXRzLiBJIHNlZSBhIHN1aXRlIG9mIHJlbGF0ZWQgZnVuY3Rpb25zIHRvbzogYGl1Y3Zfc29ja19iaW5kYCwgYGl1Y3Zfc29ja19jb25uZWN0YCwgYGl1Y3Zfc29ja19zZW5kbXNnYCwgYGl1Y3Zfc29ja19yZWN2bXNnYCwgYW5kIHRoZSB2YXJpb3VzIGNhbGxiYWNrIGZ1bmN0aW9ucyBgYWZpdWN2X2hzX2NhbGxiYWNrXypgLiBNYWtlcyBzZW5zZSwgdGhlIHVzdWFsIHNvY2tldCBvcGVyYXRpb25zLlxuXG5Ob3csIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjaGVjayAqd2l0aGluKiBgYWZpdWN2X2hzX3JjdmA6IGBpZiAoaXVjdl9zayhzayktXHUwMDNldHJhbnNwb3J0ICE9IEFGX0lVQ1ZfVFJBTlNfSElQRVIpYC4gQWgsIHRoYXQncyBjbGV2ZXIuIEl0J3MgZXhwbGljaXRseSBlbnN1cmluZyB0aGF0IGBhZml1Y3ZfaHNfcmN2YCAqb25seSogcHJvY2Vzc2VzIHBhY2tldHMgZm9yIEhpcGVyU29ja2V0cy1iYXNlZCBzb2NrZXRzIChpZGVudGlmaWVkIGJ5IGBBRl9JVUNWX1RSQU5TX0hJUEVSYCksIGFuZCBub3QgZm9yIHRoZSBzdGFuZGFyZCBJVUNWIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeC4gSXQncyBkZXNpZ25lZCB0byBwcmV2ZW50IHBhY2tldCBtaXNyb3V0aW5nLCB3aGljaCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uIG9yIG90aGVyIG5hc3R5IHNpZGUgZWZmZWN0cy4gQWJzb2x1dGVseSwgdGhpcyBpcyBhIGJ1ZyBmaXggdGhhdCB3YXJyYW50cyBmdXp6aW5nLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gYEFGSVVDVmAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24uIE5vdywgbGV0IG1lIHNlZS4uLiBJdCAqZGVwZW5kcyogb24gYFMzOTBgIHdoaWNoIGlzIGFzIGV4cGVjdGVkLCBidXQgd2hhdCBlbHNlPyBPa2F5LCBiYWNrIHRvIGBuZXQvaXVjdi9LY29uZmlnYC4gSGFuZyBvbi4uLiBgZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWYC4gT2theSwgdGhlIGRlZmF1bHQgaXMgYG1gIGlmIGVpdGhlciBgUUVUSF9MM2Agb3IgYElVQ1ZgIGFyZSBlbmFibGVkLiBCdXQgaXQgb25seSAqZGVwZW5kcyogb24gYFMzOTBgLCBzbyBpdCBkb2Vzbid0IHN0cmljdGx5IGRlcGVuZCBvbiBgSVVDVmAuIEFzIGxvbmcgYXMgdGhlIGFyY2ggaXMgczM5MCwganVzdCBlbmFibGluZyBgQUZJVUNWYCBzaG91bGQgYmUgc3VmZmljaWVudC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgYE1ha2VmaWxlYCB0byBjb25maXJtIHRoZSBidWlsZCBydWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6MTguNTEyNjAwMzM5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTIyMzQ1OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQUZJVUNWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0lVQ1YpXFx0Kz0gaXVjdi5vXFxubmV0L2l1Y3YvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfQUZJVUNWKVxcdCs9IGFmX2l1Y3Yub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODoxOC43NjQ4NDA5NjNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0NDQyNDk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBhZl9pdWN2LmNgIENvbXBpbGF0aW9uIERlcGVuZGVuY3kqKlxuXG5SaWdodCwgc28gSSBpbml0aWFsbHkgdGhvdWdodCwgXCJPa2F5LCBgQ09ORklHX0FGSVVDVmAgaXMgYWxsIEkgbmVlZCB0byBnZXQgYGFmX2l1Y3YuY2AgdG8gY29tcGlsZS5cIiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlbiwgYSByZWQgZmxhZyBwb3BwZWQgdXAuIFwiSG9sZCBvbiwgd2hhdCBhYm91dCBgQ09ORklHX0lVQ1ZgPyBJcyB0aGF0IGFsc28gbmVjZXNzYXJ5P1wiIEl0J3MgYSBodW5jaCwgYnV0IHRoZSB3YXkgdGhlc2UgdGhpbmdzIGFyZSBvZnRlbiBzdHJ1Y3R1cmVkLCBgYWZfaXVjdi5jYCAqbWlnaHQqIGRlcGVuZCBvbiBjb3JlIGZ1bmN0aW9ucyBvciBkZWZpbml0aW9ucyBmcm9tIGBpdWN2LmNgLiBUaGlzIGlzIGNvbW1vbiB3aXRoIG5ldHdvcmsgcHJvdG9jb2xzLiBUbyBiZSBzdXJlLCBJIG5lZWQgdG8gdmVyaWZ5IGlmIHRoZXJlIGlzIGFuIGV4cGxpY2l0IGxpbmthZ2UuIEkgc2hvdWxkIHNlZSBpZiBgYWZfaXVjdi5jYCBpcyB1c2luZyBmdW5jdGlvbnMgdGhhdCBhcmUgZGVmaW5lZCBpbiBgaXVjdi5jYC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGxvb2sgZm9yIHRob3NlIGRlcGVuZGVuY2llcy4gTGV0J3MgZ28gY2hlY2sgdGhlIHNvdXJjZSBmaWxlIGBuZXQvaXVjdi9hZl9pdWN2LmNgIGZvciBhbnkgZnVuY3Rpb24gY2FsbHMgc3RhcnRpbmcgd2l0aCBgaXVjdl9gLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZGVmaW5pdGl2ZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjQ4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6MjQuMjA5MjY4MjE5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg3ODQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2X3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9MjMwMT1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMjYtXFx0aWYgKHByX2l1Y3YpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMyNzpcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VpdWN2X3JlZ2lzdGVyKFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzI4LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU4OjI0LjI1NDE1MTgxNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTMyMjQ4MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVVDViBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUgc25pcHBldCBpcyB1c2luZyBgcHJfaXVjdi1cdTAwM2VpdWN2X3JlZ2lzdGVyYC4gSW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgc2VlIHRoYXQgYHByX2l1Y3ZgIGlzIGEgcG9pbnRlci4gVGhhdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBkZXJlZmVyZW5jZSBoZXJlLCB3aGljaCBpbXBsaWVzIGl0J3MgcG9pbnRpbmcgdG8gc29tZSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBhIG1lbWJlciBuYW1lZCBgaXVjdl9yZWdpc3RlcmAuIEFscmlnaHQsIGxldCdzIGJhY2sgdXAgYSBzdGVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgcHJfaXVjdmAgaXMgYWN0dWFsbHkgKmRlZmluZWQqLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBpdHMgZGVjbGFyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmUgaXQgcG9pbnRzIHRvLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgYGl1Y3ZfcmVnaXN0ZXJgIG9wZXJhdGlvbi4gTGV0J3MgZmluZCB0aGF0IGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTc2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6MzAuMTg2NDAyMTY5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ0NDc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcl9pdWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9NDI9c3RhdGljIHN0cnVjdCBwcm90byBpdWN2X3Byb3RvID0ge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ3LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0ODpzdGF0aWMgc3RydWN0IGl1Y3ZfaW50ZXJmYWNlICpwcl9pdWN2O1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OS1zdGF0aWMgc3RydWN0IGl1Y3ZfaGFuZGxlciBhZl9pdWN2X2hhbmRsZXI7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MzM1PXN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDctXFx0XFx0XFx0QVNDRUJDKHVzZXJfZGF0YSwgc2l6ZW9mKHVzZXJfZGF0YSkpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNDg6XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDktXFx0XFx0fSBlbHNlXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjM1MDpcXHRcXHRcXHRwcl9pdWN2LVxcdTAwM2VwYXRoX3NldmVyKHBhdGgsIE5VTEwpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNTEtXFx0XFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkyLVxcdG1lbXNldChcXHUwMDI2aXVjdi1cXHUwMDNlaW5pdCwgMCwgc2l6ZW9mKGl1Y3YtXFx1MDAzZWluaXQpKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDkzOlxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTQtXFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTYxMy1cXHQvKiBCaW5kIHRoZSBzb2NrZXQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjE0OlxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MTUtXFx0XFx0aWYgKCFtZW1jbXAoc2EtXFx1MDAzZXNpdWN2X3VzZXJfaWQsIGl1Y3ZfdXNlcmlkLCA4KSlcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDItdm1fYmluZDpcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjQzOlxcdGlmIChwcl9pdWN2KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY0NC1cXHRcXHQvKiB1c2UgbG9jYWwgdXNlcmlkIGZvciBiYWNrd2FyZCBjb21wYXQgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02NjU9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY2OS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjcwOlxcdGlmICh1bmxpa2VseSghcHJfaXVjdikpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3MS1cXHRcXHRyZXR1cm4gLUVQUk9UTztcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02ODc9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTcwNS1cXHR9XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcwNjpcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX2Nvbm5lY3QoaXVjdi1cXHUwMDNlcGF0aCwgXFx1MDAyNmFmX2l1Y3ZfaGFuZGxlcixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzA3LVxcdFxcdFxcdFxcdCAgICBzYS1cXHUwMDNlc2l1Y3ZfdXNlcl9pZCwgTlVMTCwgdXNlcl9kYXRhLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTkwNT1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9pcHJtKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsIHN0cnVjdCBpdWN2X21lc3NhZ2UgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05MTEtXFx0cHJtZGF0YVs3XSA9IDB4ZmYgLSAodTgpIHNrYi1cXHUwMDNlbGVuO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo5MTI6XFx0cmV0dXJuIHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2Vfc2VuZChwYXRoLCBtc2csIElVQ1ZfSVBSTURBVEEsIDAsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTkxMy1cXHRcXHRcXHRcXHQgKHZvaWQgKikgcHJtZGF0YSwgOCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTE2PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNjktXFx0XFx0XFx0aWYgKGVyciA9PSAweDE1KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNzA6XFx0XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihpdWN2LVxcdTAwM2VwYXRoLCBOVUxMKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA3MS1cXHRcXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZpdWN2LVxcdTAwM2Vza2JzX2luX3htaXQpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwODgtXFx0XFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDg5OlxcdFxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVxcdTAwM2VwYXRoLCBcXHUwMDI2dHhtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwOTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIElVQ1ZfSVBCVUZMU1QsIDAsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA5Mi1cXHRcXHR9IGVsc2UgeyAvKiBub24tSVBSTSBMaW5lYXIgc2tiICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwOTM6XFx0XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZ0eG1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA5NC1cXHRcXHRcXHRcXHRcXHQwLCAwLCAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4pO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTExNTg9c3RhdGljIHZvaWQgaXVjdl9wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExODktXFx0XFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTkwOlxcdFxcdFxcdHJjID0gcHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9yZWNlaXZlKHBhdGgsIG1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE5MS1cXHRcXHRcXHRcXHRcXHQgICAgICBJVUNWX0lQQlVGTFNULFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOTMtXFx0XFx0fSBlbHNlIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE5NDpcXHRcXHRcXHRyYyA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2VfcmVjZWl2ZShwYXRoLCBtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgbXNnLVxcdTAwM2VmbGFncyBcXHUwMDI2IElVQ1ZfSVBSTURBVEEsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTQxOD1zdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NDYtXFx0XFx0XFx0dHhtc2cudGFnID0gMDtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ0NzpcXHRcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cXHUwMDNlcGF0aCwgXFx1MDAyNnR4bXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDQ4LVxcdFxcdFxcdFxcdElVQ1ZfSVBSTURBVEEsIDAsICh2b2lkICopIGlwcm1fc2h1dGRvd24sIDgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NjktXFx0XFx0ICAgIGl1Y3YtXFx1MDAzZXBhdGgpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3MDpcXHRcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX3F1aWVzY2UoaXVjdi1cXHUwMDNlcGF0aCwgTlVMTCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzEtXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjA3PXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0NC1cXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IElVQ1ZfTElTVEVOKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NDU6XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjQ2LVxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTEtXFx0aWYgKHNrX2FjY2VwdHFfaXNfZnVsbChzaykpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY1MjpcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTMtXFx0XFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY1OS1cXHRpZiAoIW5zaykge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjYwOlxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY2MS1cXHRcXHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjg1LVxcdHBhdGgtXFx1MDAzZW1zZ2xpbSA9IGl1Y3YtXFx1MDAzZW1zZ2xpbWl0O1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjg2OlxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfYWNjZXB0KHBhdGgsIFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIG51c2VyX2RhdGEsIG5zayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2ODctXFx0aWYgKGVycikge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE3MTI9c3RhdGljIHZvaWQgaXVjdl9jYWxsYmFja19yeChzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2cpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcyMC1cXHRpZiAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgUkNWX1NIVVRET1dOKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MjE6XFx0XFx0cHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9yZWplY3QocGF0aCwgbXNnKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcyMi1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjMwMT1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTItXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMTM6XFx0XFx0cHJfaXVjdiA9IFxcdTAwMjZpdWN2X2lmO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzE0LVxcdH0gZWxzZSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTUtXFx0XFx0bWVtc2V0KFxcdTAwMjZpdWN2X3VzZXJpZCwgMCwgc2l6ZW9mKGl1Y3ZfdXNlcmlkKSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMTY6XFx0XFx0cHJfaXVjdiA9IE5VTEw7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTctXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMjUtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMjY6XFx0aWYgKHByX2l1Y3YpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMyNzpcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VpdWN2X3JlZ2lzdGVyKFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzI4LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzOS1vdXRfbm90aWZpZXI6XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzNDA6XFx0aWYgKHByX2l1Y3YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzNDE6XFx0XFx0cHJfaXVjdi1cXHUwMDNlaXVjdl91bnJlZ2lzdGVyKFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzQyLW91dF9zb2NrOlxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzNTA9c3RhdGljIHZvaWQgX19leGl0IGFmaXVjdl9leGl0KHZvaWQpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNTEte1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzUyOlxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzUzOlxcdFxcdHByX2l1Y3YtXFx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjM1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6MzAuMjM0ODUzMTk1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5NTgzNzc4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJVUNWIEluaXRpYWxpemF0aW9uIExvZ2ljKipcblxuT2theSwgc28gYHByX2l1Y3ZgIGdldHMgYXNzaWduZWQgdGhlIGFkZHJlc3Mgb2YgYGl1Y3ZfaWZgICpvbmx5KiBpZiBgc21hcGlfZ2V0X2l1Y3ZfdXNlcmlkYCByZXR1cm5zIHN1Y2Nlc3NmdWxseS4gT3RoZXJ3aXNlLCBpdCdzIHNldCB0byBgTlVMTGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggYXQgZmlyc3QgZ2xhbmNlLCBidXQgbGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgcGllY2VzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gdmlzdWFsaXppbmcgdGhpcyBjb3JyZWN0bHkuXG5cbkhvbGQgb24uLi4gYGl1Y3ZfaWZgLi4uIHRoYXQncyBkZWNsYXJlZCBhbmQgKmV4cG9ydGVkKiBmcm9tIGBpdWN2LmNgLCBpc24ndCBpdD8gR290dGEgcXVpY2tseSBjb25maXJtIHRoYXQuIE5vIGFzc3VtcHRpb25zIGhlcmUsIEknbGwgZ28gY2hlY2sgdGhhdCBtb2R1bGUncyBkZWZpbml0aW9uLiBOZWVkIHRvIHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTYzOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU4OjM5LjE5MzIzMzYyOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2MDEwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdl9pZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTIzMDE9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzEyLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzEzOlxcdFxcdHByX2l1Y3YgPSBcXHUwMDI2aXVjdl9pZjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMxNC1cXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODozOS4yMzg4Mzg1NTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3MDAyNzYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIElVQ1YgSW50ZXJmYWNlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIElVQ1YgKEludGVyLVVzZXIgQ29tbXVuaWNhdGlvbiBWZWhpY2xlKSBpbnRlcmZhY2UgaGVyZS4gVGhlIHNwZWNpZmljIHBhcnQgSSdtIGZvY3VzaW5nIG9uIG5vdyBpcyB0aGUgYGl1Y3ZfaWZgLiBOYXR1cmFsbHksIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBkZWZpbml0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgc3RydWN0dXJlIG9yIGZ1bmN0aW9uIGFjdHVhbGx5ICppcyouIFNvLCBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZTogYGluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oYC4gSSdtIGhvcGluZyB0aGF0IGhlYWRlciBmaWxlIGhvbGRzIHRoZSBrZXkgLSBpdCAqc2hvdWxkKiBkZWZpbmUgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgSVVDViBpbnRlcmZhY2UsIGluY2x1ZGluZyBgaXVjdl9pZmAsIHdoZXRoZXIgaXQncyBhIHN0cnVjdHVyZSBkZWZpbmluZyBkYXRhIGZvciB0aGUgaW50ZXJmYWNlLCBhbiBlbnVtIG9mIG1ldGhvZHMsIG9yIGV2ZW4gYW4gZXh0ZXJuYWwgcG9pbnRlciBmb3IgdXNlLiBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIHVucmF2ZWxpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMzgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODo0My40MDg4Njg3OTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjU1OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml1Y3ZfaWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvaXVjdi9pdWN2LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXVjdi9pdWN2Lmg9MjY5PXN0cnVjdCBpdWN2X2ludGVyZmFjZSB7XFxuLS1cXG5pbmNsdWRlL25ldC9pdWN2L2l1Y3YuaC0zMDAtXFxuaW5jbHVkZS9uZXQvaXVjdi9pdWN2Lmg6MzAxOmV4dGVybiBzdHJ1Y3QgaXVjdl9pbnRlcmZhY2UgaXVjdl9pZjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6NDMuNDUyNTI5MDM1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NDc0NDAzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQUZJVUNWIGFuZCBJVUNWIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgaXVjdl9pZmAgZnVuY3Rpb24sIGFuZCBJIHNlZSBpdCdzIGRlZmluZWQgaW4gYGl1Y3YuY2AuIFJpZ2h0IGF3YXksIHRoaXMgc2NyZWFtcyBkZXBlbmRlbmN5LiBMb2dpY2FsbHksIGl0IHNlZW1zIHRoYXQgaWYgYEFGSVVDVmAgdXNlcyBgaXVjdl9pZmAsIHRoZW4gYEFGSVVDVmAgaW5oZXJlbnRseSBkZXBlbmRzIG9uIGBJVUNWYC4gQnV0IHRoZW4gSSBoYXZlIHRoaXMgbmFnZ2luZyBmZWVsaW5nLCBsaWtlIEknbSBtaXNzaW5nIHNvbWV0aGluZy4uLiB0aGUgYnVpbGQgc3lzdGVtIGNhbiBiZSB0cmlja3kuXG5cbldhaXQsIGNhbiBgQUZJVUNWYCAqcmVhbGx5KiBiZSBjb21waWxlZCB3aXRob3V0IGBJVUNWYD8gVGhhdCBqdXN0IGRvZXNuJ3Qgc2l0IHJpZ2h0IHdpdGggbWUuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBgbmV0L2l1Y3YvS2NvbmZpZ2AgZmlsZS4gTGV0J3Mgc2VlLi4uIEFoYSFcblxuYGBgXG5jb25maWcgQUZJVUNWXG5cdGRlcGVuZHMgb24gUzM5MFxuXHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcbmBgYFxuXG5BaCwgdGhlcmUgaXQgaXMhIFRoZSBrZXkgaXMgdGhhdCBgQUZJVUNWYCBjYW4gYmUgYnVpbHQgYXMgYSBtb2R1bGUsIGJ1dCBkZXBlbmRzIG9uIGBJVUNWYCBiZWluZyBlaXRoZXIgYnVpbHQtaW4gKCBgeWAgKSBvciBhdmFpbGFibGUgYXMgYSBtb2R1bGUgKCBgbWAgKS4gQnV0IGlmIGBJVUNWYCBpcyAqbm90KiBlbmFibGVkIGF0IGFsbCwgdGhlbiBgaXVjdl9pZmAgd29uJ3QgYmUgYXZhaWxhYmxlLCBhbmQgYEFGSVVDVmAgd29uJ3QgYmUgYWJsZSB0byBjb21waWxlLCBhcyB0aGUgc3ltYm9sIHdpbGwgYmUgdW5kZWZpbmVkLiBUaGlzIGNvbmRpdGlvbmFsIGxvZ2ljIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjYW4gdHJpcCB5b3UgdXAgaW4gdGhlc2UgYnVpbGQgc3lzdGVtcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgaXVjdl9pZmAgaXMgYWN0dWFsbHkgY29uZGl0aW9uYWxseSBjb21waWxlZCBkZXBlbmRpbmcgb24gYElVQ1ZgIGJlaW5nIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzkxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU4OjUwLjE5OTk3MTkzNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0NTcyMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdl9pZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvaXVjdi5jPTE4MDE9c3RhdGljIHZvaWQgaXVjdl9leHRlcm5hbF9pbnRlcnJ1cHQoc3RydWN0IGV4dF9jb2RlIGV4dF9jb2RlLFxcbi0tXFxubmV0L2l1Y3YvaXVjdi5jLTE4MzMtXFxubmV0L2l1Y3YvaXVjdi5jOjE4MzQ6c3RydWN0IGl1Y3ZfaW50ZXJmYWNlIGl1Y3ZfaWYgPSB7XFxubmV0L2l1Y3YvaXVjdi5jLTE4MzUtXFx0Lm1lc3NhZ2VfcmVjZWl2ZSA9IGl1Y3ZfbWVzc2FnZV9yZWNlaXZlLFxcbi0tXFxubmV0L2l1Y3YvaXVjdi5jLTE4NTItfTtcXG5uZXQvaXVjdi9pdWN2LmM6MTg1MzpFWFBPUlRfU1lNQk9MKGl1Y3ZfaWYpO1xcbm5ldC9pdWN2L2l1Y3YuYy0xODU0LVxcbi0tXFxubmV0L2l1Y3YvaXVjdi5jPTE4NjI9c3RhdGljIGludCBfX2luaXQgaXVjdl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9pdWN2LmMtMTkwMi1cXHRcXHRnb3RvIG91dF9yZWJvb3Q7XFxubmV0L2l1Y3YvaXVjdi5jOjE5MDM6XFx0aXVjdl9pZi5yb290ID0gaXVjdl9yb290O1xcbm5ldC9pdWN2L2l1Y3YuYzoxOTA0OlxcdGl1Y3ZfaWYuYnVzID0gXFx1MDAyNml1Y3ZfYnVzO1xcbm5ldC9pdWN2L2l1Y3YuYy0xOTA1LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODo1MC4yNjM0MzQ4MDlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2NjUwMjM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBIFF1aWNrIENvZGUgQ29udW5kcnVtKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGRvZXNuJ3QgcXVpdGUgaml2ZSBoZXJlLiBJZiBJJ20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgdGhlIEludGVncmF0ZWQgVXNlciBDb21tdW5pY2F0aW9uIFZlaGljbGUgKGBJVUNWYCkgZnVuY3Rpb25hbGl0eSBpc24ndCBzdXBwb3NlZCB0byBiZSBhY3RpdmUsIHJpZ2h0PyBTbywgaG93IGluIHRoZSB3b3JsZCBpcyB0aGUgYGFmX2l1Y3YuY2AgZmlsZSBldmVuIGNvbXBpbGluZz8gVGhhdCBzZWVtc+KApnVuZXhwZWN0ZWQuIExldCdzIGRpZyBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBgaW5jbHVkZS9uZXQvaXVjdi9pdWN2LmhgIGhlYWRlciBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuIEkgaGF2ZSBhIGh1bmNoIHRoZSBpc3N1ZSBpcyBsaWtlbHkgcm9vdGVkIHRoZXJlLiBUaW1lIHRvIGludmVzdGlnYXRlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI4MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU4OjU0LjYyOTk0MDE2NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMDIxMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdl9pZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9pdWN2L2l1Y3YuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pdWN2L2l1Y3YuaD0yNjk9c3RydWN0IGl1Y3ZfaW50ZXJmYWNlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oLTMwMC1cXG5pbmNsdWRlL25ldC9pdWN2L2l1Y3YuaDozMDE6ZXh0ZXJuIHN0cnVjdCBpdWN2X2ludGVyZmFjZSBpdWN2X2lmO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODo1NC42NzI5NDg4MzFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUwODY1NDYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBCbG9jayoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgbXkgYnJhaW4ganVtcHMgdG8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW4gYCNpZmRlZiBDT05GSUdfSVVDVmAgd3JhcHBlZCBhcm91bmQgdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24uIFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgSSdtIGNoZWNraW5nLiBJZiBpdCAqaXMqIHRoZXJlLCB0aGF0IHRlbGxzIG1lIHRoZSBjb21waWxlciBvbmx5IGluY2x1ZGVzIHRoaXMgZnVuY3Rpb25hbGl0eSBpZiB0aGUgYENPTkZJR19JVUNWYCBwcmVwcm9jZXNzb3IgbWFjcm8gaXMgZGVmaW5lZC4gVGhhdCdzIGNydWNpYWwgaW5mb3JtYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgY29kZSBibG9jay4gRGV0ZXJtaW5pbmcgdGhpcyBjb25kaXRpb25hbCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTkzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MDEuMTgxNjA1NzU2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU1NjIwNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lVQ1ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvaXVjdi9pdWN2LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU5OjAxLjIzMDE2OTMwMVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjc3MTc0ODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBJVUNWIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgSVVDViBpbXBsZW1lbnRhdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIsIHNwZWNpZmljYWxseSwgdGhlIGBuZXQvaXVjdi9hZl9pdWN2LmNgIGZpbGUuIFRoaXMgaXMgdGhlIGxpa2VseSBwbGFjZSB3aGVyZSBJJ2xsIGZpbmQgdGhlIGNvcmUgSVVDViBmdW5jdGlvbmFsaXR5IGRlZmluZWQuIEknbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBhIGNvbmRpdGlvbmFsIGNoZWNrLiBTcGVjaWZpY2FsbHksIEknbSBhZnRlciBgSVNfRU5BQkxFRChDT05GSUdfSVVDVilgLiBUaGlzIGlzIHRoZSB0eXBpY2FsIG1hY3JvIGZvciB2ZXJpZnlpbmcgdGhhdCB0aGUgYENPTkZJR19JVUNWYCBLY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkIGR1cmluZyB0aGUgYnVpbGQuIFRoaXMgdGVsbHMgbWUgaWYgdGhlIElVQ1Ygc3VwcG9ydCBoYXMgYmVlbiBjb25maWd1cmVkIGludG8gdGhpcyBrZXJuZWwgYnVpbGQuIFRoaXMgaXMgdGhlICpmaXJzdCogc3RlcCBpbiB1bmRlcnN0YW5kaW5nIG9yIHRyb3VibGVzaG9vdGluZyBhbnkgSVVDVi1yZWxhdGVkIGlzc3VlIC0gaXQgZGljdGF0ZXMgd2hldGhlciBJIGNhbiBleHBlY3QgYW55IG9mIHRoZSBJVUNWIGNvZGUgdG8gYmUgYWN0aXZlLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhhdCBtYWNybyAqZmlyc3QqLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc5NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU5OjA2LjUwNzM0NzA2N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2Nzk2NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lVQ1ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzAxPXN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwNC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMwNTpcXHRpZiAobWFjaGluZV9pc192bSgpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDYtXFx0XFx0Y3BjbWQoXFxcIlFVRVJZIFVTRVJJRFxcXCIsIGl1Y3ZfdXNlcmlkLCBzaXplb2YoaXVjdl91c2VyaWQpLCBcXHUwMDI2ZXJyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MDYuNTUxMDMzNTMyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTI3MTQ0MzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBJVUNWIEhpcGVyU29ja2V0cyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpYCBpcyB1c2VkIGluIGBhZl9pdWN2LmNgLiBUaGlzIG1lYW5zIHRoYXQgd2UgY2FuIGJ1aWxkIHRoZSBgQUZJVUNWYCBzdWJzeXN0ZW0gd2l0aG91dCB0aGUgY29yZSBgSVVDVmAgZnVuY3Rpb25hbGl0eS4gU2luY2UgdGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIEhpcGVyU29ja2V0cywgYW5kIHdlJ3JlIGRlYWxpbmcgd2l0aCBgQUZfSVVDVl9UUkFOU19ISVBFUmAsIG9ubHkgYENPTkZJR19BRklVQ1ZgIGlzIHJlbGV2YW50IGhlcmUuIEhvd2V2ZXIsIGBDT05GSUdfQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBoYXJkd2FyZSBjb250ZXh0LlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIHRlbGwgbWUgdG8gcmV0dXJuIGBBRklVQ1ZgIGluIGBFbmFibGVDb25maWdzYCwgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeC4gVGhhdCdzIGVhc3kgZW5vdWdoLiAgU28sIGBBRklVQ1ZgIGl0IGlzLiAgTm90aGluZyBlbHNlIGlzIG5lZWRlZCBmb3IgdGhpcyBzcGVjaWZpYyBwYXRjaC5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBgYWZpdWN2X2hzX3JjdmAgaXMgdGhlIGtleS4gVGhlbiB0aGVyZSdzIGBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luYCBhbmQgYGFmaXVjdl9oc19jYWxsYmFja19yeGAsIHJlbGF0ZWQgdG8gSGlwZXJTb2NrZXRzLiBBbmQgdGhlbiB0aGVyZSBhcmUgYGl1Y3Zfc29ja19iaW5kYCwgYGl1Y3Zfc29ja19jb25uZWN0YCwgYGl1Y3Zfc29ja19zZW5kbXNnYCwgYGl1Y3Zfc29ja19yZWN2bXNnYFxuXG5BZnRlciByZXZpZXdpbmcgdGhlIHBhdGNoLCBJIHNlZSB0aGF0IHRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpcyB3aXRoaW4gYGFmaXVjdl9oc19yY3ZgLiBJIGRvdWJsZS1jaGVja2VkIGlmIGBhZml1Y3ZfaHNfcmN2YCBpcyBzdGF0aWMuIFllcywgaXQgaXMgZGVjbGFyZWQgc3RhdGljLCBidXQgaXRzIGFkZHJlc3MgaXMgdGFrZW4gYW5kIHBhc3NlZCB0byBgZGV2X2FkZF9wYWNrYC4gVGhpcyBtZWFucyBpdCdzIGFuIGVudHJ5IHBvaW50LCBub3QgaW5saW5lZCwgYW5kIGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiAgU28gaXQncyBzdWl0YWJsZSB0byBpbmNsdWRlLlxuXG5JIGV4YW1pbmVkIGBpdWN2X3NvY2tfYmluZGAsIGBpdWN2X3NvY2tfY29ubmVjdGAsIGV0Yy4gVGhleSBhcmUgc3RhdGljIHRvbywgYnV0IHRoZXkncmUgcmVnaXN0ZXJlZCBpbiBgcHJvdG9fb3BzYCwgc28gdGhhdCdzIGFjY2VwdGFibGUuXG5cblNvIG15IFwiRm9jdXNTeW1ib2xzXCIgYXJlOiAgYGFmaXVjdl9oc19yY3ZgLiBXaGlsZSBgYWZpdWN2X2hzX2NhbGxiYWNrX3N5bmAgYW5kIGBhZml1Y3ZfaHNfY2FsbGJhY2tfcnhgIGFyZSBjYWxsZWQgYnkgYGFmaXVjdl9oc19yY3ZgLCBpbmNsdWRpbmcgYGFmaXVjdl9oc19yY3ZgIGlzIHRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaC5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBhIGZ1bmN0aW9uYWwgZml4LiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGFmaXVjdl9oc19yY3ZgIHRvIGluY2x1ZGUgYSB0cmFuc3BvcnQgdHlwZSBjaGVjay4gSXQgZW5zdXJlcyB0aGF0IEhpcGVyU29ja2V0cyBwYWNrZXRzIGFyZW4ndCBwcm9jZXNzZWQgYnkgc29ja2V0cyB0aGF0IGFyZW4ndCB1c2luZyB0aGUgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCwgc28gSSdtIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGhlcmUuXG5cbkNydWNpYWxseSwgdGhpcyBpcyByZWFjaGFibGUgaW4gUUVNVSEgczM5MHggaXMgc3VwcG9ydGVkIGJ5IFFFTVUsIGFuZCBTeXprYWxsZXIgaXMgYWN0aXZlbHkgZnV6emluZyBvbiBpdC4gVGhlIGBBRklVQ1ZgIGNvbmZpZyBjYW4gYmUgZW5hYmxlZC4gSSBjYW4gc2VuZCBhIHBhY2tldCB3aXRoIGBFVEhfUF9BRl9JVUNWYCB2aWEgYEFGX1BBQ0tFVGAgb3IgYHR1bi90YXBgIHRvIGdldCB0byB0aGlzIGZ1bmN0aW9uLiBUaGlzIGlzIGRlZmluaXRlbHkgZnV6emFibGUuXG5cblRoZXJlZm9yZSwgaGVyZSBhcmUgdGhlIHJlc3VsdHM6XG4tIFdvcnRoRnV6emluZzogdHJ1ZVxuLSBSZWFzb25pbmc6IFRoZSBwYXRjaCBhZGRzIGEgdHJhbnNwb3J0IHR5cGUgY2hlY2sgaW4gYGFmaXVjdl9oc19yY3ZgIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBIaXBlclNvY2tldHMgcGFja2V0cyBmb3Igc29ja2V0cyBub3QgdXNpbmcgdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBuZXR3b3JrIHByb3RvY29sIHBhY2tldCBoYW5kbGVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJhdyBzb2NrZXRzIG9yIHR1bi90YXAgZGV2aWNlcyBieSBzZW5kaW5nIHBhY2tldHMgd2l0aCBwcm90b2NvbCBFVEhfUF9BRl9JVUNWLlxuLSBGb2N1c1N5bWJvbHM6IFtcImFmaXVjdl9oc19yY3ZcIl1cbi0gRW5hYmxlQ29uZmlnczogW1wiQUZJVUNWXCJdXG5cbmBBRklVQ1ZgIGlzIHRoZSBvbmx5IG5lZWRlZCBjb25maWcsIHNpbmNlIGl0J3Mgc291cmNlZCBmcm9tIGBuZXQvaXVjdi9LY29uZmlnYCwgd2hpY2ggaW5jbHVkZXMgYG5ldC9LY29uZmlnYCwgYW5kIGRlcGVuZHMgb24gYFMzOTBgLlxuXG5gYWZpdWN2X2hzX3JjdmAgaXMgc3VmZmljaWVudCBmb3IgdGhlIEZvY3VzU3ltYm9scy5cblxuSSdtIHJlYWR5IHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjI0LCJPdXRwdXRUb2tlbnMiOjEyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MjQuNjc4MTgwMzgzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg5MjY2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGSVVDVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmaXVjdl9oc19yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdHJhbnNwb3J0IHR5cGUgY2hlY2sgaW4gYGFmaXVjdl9oc19yY3ZgIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBIaXBlclNvY2tldHMgcGFja2V0cyBmb3Igc29ja2V0cyBub3QgdXNpbmcgdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBuZXR3b3JrIHByb3RvY29sIHBhY2tldCBoYW5kbGVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJhdyBzb2NrZXRzIG9yIHR1bi90YXAgZGV2aWNlcyBieSBzZW5kaW5nIHBhY2tldHMgd2l0aCBwcm90b2NvbCBFVEhfUF9BRl9JVUNWLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGSVVDVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmaXVjdl9oc19yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdHJhbnNwb3J0IHR5cGUgY2hlY2sgaW4gYGFmaXVjdl9oc19yY3ZgIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBIaXBlclNvY2tldHMgcGFja2V0cyBmb3Igc29ja2V0cyBub3QgdXNpbmcgdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBuZXR3b3JrIHByb3RvY29sIHBhY2tldCBoYW5kbGVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJhdyBzb2NrZXRzIG9yIHR1bi90YXAgZGV2aWNlcyBieSBzZW5kaW5nIHBhY2tldHMgd2l0aCBwcm90b2NvbCBFVEhfUF9BRl9JVUNWLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1OToyNC43NTcxMTM1MDVaIiwiU2VxIjozNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTkzNzkwNzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MjQuNzU3NTg2MDE1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzOTkzMzE0Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgb25seSBzb2NrZXRzIHdpdGggdGhlIEFGX0lVQ1ZfVFJBTlNfSElQRVIgdHJhbnNwb3J0IHR5cGUgcHJvY2VzcyBpbmNvbWluZyBIaXBlclNvY2tldHMgcGFja2V0cyBpbiBgYWZpdWN2X2hzX3JjdigpYC4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBwYWNrZXRzIGNvdWxkIGJlIGluY29ycmVjdGx5IHJvdXRlZCB0byBzb2NrZXRzIG9mIGEgZGlmZmVyZW50IHRyYW5zcG9ydCB0eXBlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZXNlIHR5cGVzIG9mIGlzc3VlcyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRiYzU2M2IxNWNmZjE5Y2UwNTA5MDg3NjUyZWNmYWJmN2E3NThmNmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzo1NzoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuaW5kZXggZWEwNDdiYWI2NWU3Yy4uNWZiNjc5M2I5YTY0YSAxMDA2NDRcbi0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuY1xuKysrIGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5AQCAtMjA3OSw2ICsyMDc5LDggQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRzayA9IE5VTEw7XG4gXHRyZWFkX2xvY2soXHUwMDI2aXVjdl9za19saXN0LmxvY2spO1xuIFx0c2tfZm9yX2VhY2goc2ssIFx1MDAyNml1Y3Zfc2tfbGlzdC5oZWFkKSB7XG4rXHRcdGlmIChpdWN2X3NrKHNrKS1cdTAwM2V0cmFuc3BvcnQgIT0gQUZfSVVDVl9UUkFOU19ISVBFUilcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKHRyYW5zX2hkci1cdTAwM2VmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKSB7XG4gXHRcdFx0aWYgKCghbWVtY21wKFx1MDAyNml1Y3Zfc2soc2spLVx1MDAzZXNyY19uYW1lLFxuIFx0XHRcdFx0ICAgICB0cmFuc19oZHItXHUwMDNlZGVzdEFwcE5hbWUsIDgpKSBcdTAwMjZcdTAwMjZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU5OjI0Ljc1NzU4NzM5NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTI0NDgzMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBJVUNWIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gSXQgc2VlbXMgdGhleSd2ZSBhZGRlZCBhIGNoZWNrIHdpdGhpbiBhIGxvb3AgdGhhdCBpdGVyYXRlcyB0aHJvdWdoIElVQ1Ygc29ja2V0czogYGlmIChpdWN2X3NrKHNrKS1cdTAwM2V0cmFuc3BvcnQgIT0gQUZfSVVDVl9UUkFOU19ISVBFUikgY29udGludWU7YC4gRXNzZW50aWFsbHksIHRoaXMgc2VlbXMgdG8gZmlsdGVyIHRoZSBzb2NrZXRzIGJhc2VkIG9uIHRoZWlyIHRyYW5zcG9ydCB0eXBlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgIHNvY2tldHMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBsaWtlbHkgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeC4gSXQgcHJldmVudHMgcGFja2V0cyBmcm9tIGJlaW5nIG1pc3Rha2VubHkgZGVsaXZlcmVkIHRvIHNvY2tldHMgdGhhdCBhcmVuJ3Qgb2YgdGhlIGBISVBFUmAgdHJhbnNwb3J0IHR5cGUuXG5cbkkgZG9uJ3Qgc3VzcGVjdCB0aGlzIGlzIHJlbGF0ZWQgdG8gYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gTW9yZSBsaWtlbHksIGl0J3MgYSBsb2dpYyBlcnJvciB0aGF0IGNvdWxkIGxlYWQgdG8gcGFja2V0IG1pc2RpcmVjdGlvbi4gSWYgYSBwYWNrZXQgYXJyaXZlZCwgdGhlIHN5c3RlbSB3b3VsZCBpbmNvcnJlY3RseSB0cnkgdG8gcHJvY2VzcyBpdCB0aHJvdWdoIHRoZSB3cm9uZyBzb2NrZXQgdHlwZS4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgdmFyaWV0eSBvZiBpc3N1ZXMsIGZyb20gdHlwZSBjb25mdXNpb24gdG8gaW5jb3JyZWN0IHByb2Nlc3NpbmcuXG5cbkknbSBub3cgZ29pbmcgdG8gaW52ZXN0aWdhdGUgYGFmaXVjdl9oc19yY3ZgIGluIHRoZSBzYW1lIGZpbGUgdG8gY29uZmlybSBob3cgdGhpcyBuZXcgY2hlY2sgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU5OjMxLjI4MjA3MzEwNloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxNjc2NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZpdWN2X2hzX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTIwMTI9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTMtLypcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1NDogKiBhZml1Y3ZfaHNfcmN2KCkgLSBiYXNlIGZ1bmN0aW9uIGZvciBhcnJpdmluZyBkYXRhIHRocm91Z2ggSGlwZXJTb2NrZXRzXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTUtICogICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1Ny0gKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1ODpzdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1OS1cXHRzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI5Nj1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGl1Y3ZfcGFja2V0X3R5cGUgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTctXFx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI5ODpcXHQuZnVuYyA9IGFmaXVjdl9oc19yY3YsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTktfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MzEuMzMxMjQ3NjYxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MTk2MzE2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgbG9naWMgYnVnIGZpeC4gVGhlIGtleSBpcyB0aGF0IGl0J3MgYWRkaW5nIGEgY2hlY2s6IGBpdWN2X3NrKHNrKS1cdTAwM2V0cmFuc3BvcnQgIT0gQUZfSVVDVl9UUkFOU19ISVBFUmAuIEkgZ2V0IGl0IOKAkyB0aGlzIGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgc29ja2V0cyB0aGF0ICphcmVuJ3QqIHNwZWNpZmljYWxseSBjb25maWd1cmVkIGZvciBISVBFUiB0cmFuc3BvcnQgZnJvbSBzb21laG93IHJlY2VpdmluZyBISVBFUiBwYWNrZXRzLiBTZWVtcyBsaWtlIGEgZ29vZCBwcmFjdGljZSB0byBpbmNsdWRlIGluIGFueSB3ZWxsLWRlc2lnbmVkIHN5c3RlbSwgcmVnYXJkbGVzcy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjb25zaWRlciB1bmluaXRpYWxpemVkIG1lbW9yeSwgc2luY2UgS01TQU4gaXMgYWx3YXlzIHRvcC1vZi1taW5kLiBIb3dldmVyLCBhZnRlciByZXZpZXdpbmcgdGhlIGNvZGUsIHRoaXMgY2hhbmdlIGFwcGVhcnMgbXVjaCBtb3JlIGZvY3VzZWQgb24gcHJldmVudGluZyB0aGUgcG90ZW50aWFsIGZvciBvdXQtb2YtYm91bmRzIGFjY2VzcywgdHlwZSBjb25mdXNpb24sIG9yIGV2ZW4gdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIGlmIGEgbm9uLUhJUEVSIHNvY2tldCAqZGlkKiBlcnJvbmVvdXNseSBwcm9jZXNzIGEgSElQRVIgcGFja2V0LiBTbywgd2hpbGUgaXQncyBpbXBvcnRhbnQgdG8gYmUgdmlnaWxhbnQgYWJvdXQgbWVtb3J5IHNhZmV0eSBpbiBnZW5lcmFsLCBJIGRvbid0IHNlZSBhbnl0aGluZyBoZXJlIHRoYXQgZGlyZWN0bHkgYWRkcmVzc2VzIG9yIHJlc29sdmVzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGxlYWsgaXNzdWVzLlxuXG5gaXVjdl9zayhzaylgIGlzIGp1c3QgYSBjYXN0IHRvIGBzdHJ1Y3QgaXVjdl9zb2NrYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIE5vIHNpZ25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuXG5cbktNU0FOIGZsYWdzIGFyZSB0eXBpY2FsbHkgdXNlZCBmb3IgZGV0ZWN0aW5nIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9ibGVtcyB0aGF0IEkgdXN1YWxseSBzZWUuIEtBU0FOIGlzIHRoZSB0b29sIHRoYXQgd291bGQgbGlrZWx5IGJlIG1vcmUgcmVsZXZhbnQgZm9yIE9PQiwgVUFGLCBhbmQgc2ltaWxhciBpc3N1ZXMuIFRoaXMgcGF0Y2ggZG9lc24ndCBzZWVtIHRvIHRvdWNoIGFueSBLTVNBTiBjb25jZXJucy4gVGhlcmVmb3JlLCBJJ20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDA2LCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1OTozOC43NTA4ODMwOTlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBlbnN1cmUgdGhhdCBvbmx5IHNvY2tldHMgd2l0aCB0aGUgQUZfSVVDVl9UUkFOU19ISVBFUiB0cmFuc3BvcnQgdHlwZSBwcm9jZXNzIGluY29taW5nIEhpcGVyU29ja2V0cyBwYWNrZXRzIGluIGBhZml1Y3ZfaHNfcmN2KClgLiBUaGlzIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIHBhY2tldHMgY291bGQgYmUgaW5jb3JyZWN0bHkgcm91dGVkIHRvIHNvY2tldHMgb2YgYSBkaWZmZXJlbnQgdHJhbnNwb3J0IHR5cGUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdHlwZSBjb25mdXNpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gVGhlc2UgdHlwZXMgb2YgaXNzdWVzIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IG9ubHkgc29ja2V0cyB3aXRoIHRoZSBBRl9JVUNWX1RSQU5TX0hJUEVSIHRyYW5zcG9ydCB0eXBlIHByb2Nlc3MgaW5jb21pbmcgSGlwZXJTb2NrZXRzIHBhY2tldHMgaW4gYGFmaXVjdl9oc19yY3YoKWAuIFRoaXMgZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgcGFja2V0cyBjb3VsZCBiZSBpbmNvcnJlY3RseSByb3V0ZWQgdG8gc29ja2V0cyBvZiBhIGRpZmZlcmVudCB0cmFuc3BvcnQgdHlwZSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byB0eXBlIGNvbmZ1c2lvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBUaGVzZSB0eXBlcyBvZiBpc3N1ZXMgYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowz5n9n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 13:41:14 +0000 UTC FinishedAt: 2026-08-13 13:59:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2bb155e92167cd5ad6aae312e83291da2454f8b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2bb155e92167cd5ad6aae312e83291da2454f8b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "a94363ad-eef0-4cc8-9c49-6904d1675c65" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "afiucv_hs_rcv" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGSVVDViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FmaXVjdl9oc19yY3YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgb25seSBzb2NrZXRzIHdpdGggdGhlIEFGX0lVQ1ZfVFJBTlNfSElQRVIgdHJhbnNwb3J0IHR5cGUgcHJvY2VzcyBpbmNvbWluZyBIaXBlclNvY2tldHMgcGFja2V0cyBpbiBgYWZpdWN2X2hzX3JjdigpYC4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBwYWNrZXRzIGNvdWxkIGJlIGluY29ycmVjdGx5IHJvdXRlZCB0byBzb2NrZXRzIG9mIGEgZGlmZmVyZW50IHRyYW5zcG9ydCB0eXBlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZXNlIHR5cGVzIG9mIGlzc3VlcyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdHJhbnNwb3J0IHR5cGUgY2hlY2sgaW4gYGFmaXVjdl9oc19yY3ZgIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBIaXBlclNvY2tldHMgcGFja2V0cyBmb3Igc29ja2V0cyBub3QgdXNpbmcgdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBuZXR3b3JrIHByb3RvY29sIHBhY2tldCBoYW5kbGVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJhdyBzb2NrZXRzIG9yIHR1bi90YXAgZGV2aWNlcyBieSBzZW5kaW5nIHBhY2tldHMgd2l0aCBwcm90b2NvbCBFVEhfUF9BRl9JVUNWLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGJjNTYzYjE1Y2ZmMTljZTA1MDkwODc2NTJlY2ZhYmY3YTc1OGY2Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDEzOjU3OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuaW5kZXggZWEwNDdiYWI2NWU3Yy4uNWZiNjc5M2I5YTY0YSAxMDA2NDRcbi0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5AQCAtMjA3OSw2ICYjNDM7MjA3OSw4IEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c2sgPSBOVUxMO1xuIFx0cmVhZF9sb2NrKFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcbiBcdHNrX2Zvcl9lYWNoKHNrLCBcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZCkge1xuJiM0MztcdFx0aWYgKGl1Y3Zfc2soc2spLVx1MDAzZXRyYW5zcG9ydCAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKHRyYW5zX2hkci1cdTAwM2VmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKSB7XG4gXHRcdFx0aWYgKCghbWVtY21wKFx1MDAyNml1Y3Zfc2soc2spLVx1MDAzZXNyY19uYW1lLFxuIFx0XHRcdFx0ICAgICB0cmFuc19oZHItXHUwMDNlZGVzdEFwcE5hbWUsIDgpKSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZJVUNWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWZpdWN2X2hzX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdHJhbnNwb3J0IHR5cGUgY2hlY2sgaW4gYGFmaXVjdl9oc19yY3ZgIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBIaXBlclNvY2tldHMgcGFja2V0cyBmb3Igc29ja2V0cyBub3QgdXNpbmcgdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBuZXR3b3JrIHByb3RvY29sIHBhY2tldCBoYW5kbGVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJhdyBzb2NrZXRzIG9yIHR1bi90YXAgZGV2aWNlcyBieSBzZW5kaW5nIHBhY2tldHMgd2l0aCBwcm90b2NvbCBFVEhfUF9BRl9JVUNWLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGJjNTYzYjE1Y2ZmMTljZTA1MDkwODc2NTJlY2ZhYmY3YTc1OGY2YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDEzOjU3OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jCmluZGV4IGVhMDQ3YmFiNjVlN2MuLjVmYjY3OTNiOWE2NGEgMTAwNjQ0Ci0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXVjdi9hZl9pdWN2LmMKQEAgLTIwNzksNiAmIzQzOzIwNzksOCBAQCBzdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlzayA9IE5VTEw7CiAJcmVhZF9sb2NrKCZhbXA7aXVjdl9za19saXN0LmxvY2spOwogCXNrX2Zvcl9lYWNoKHNrLCAmYW1wO2l1Y3Zfc2tfbGlzdC5oZWFkKSB7CiYjNDM7CQlpZiAoaXVjdl9zayhzayktJmd0O3RyYW5zcG9ydCAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSKQomIzQzOwkJCWNvbnRpbnVlOwogCQlpZiAodHJhbnNfaGRyLSZndDtmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKSB7CiAJCQlpZiAoKCFtZW1jbXAoJmFtcDtpdWN2X3NrKHNrKS0mZ3Q7c3JjX25hbWUsCiAJCQkJICAgICB0cmFuc19oZHItJmd0O2Rlc3RBcHBOYW1lLCA4KSkgJmFtcDsmYW1wOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogbmV0L2l1Y3YvYWZfaXVjdi5jKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgYmVlbiBhcHBsaWVkIHRvIGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBTcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIGEgbmV3IGNoZWNrIGluIGBhZml1Y3ZfaHNfcmN2YDogYGlmIChpdWN2X3NrKHNrKS0mZ3Q7dHJhbnNwb3J0ICE9IEFGX0lVQ1ZfVFJBTlNfSElQRVIpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBhIG5ldyBhdHRhY2sgc3VyZmFjZT8gSXMgYG5ldC9pdWN2L2FmX2l1Y3YuY2Agd29ydGggZnV6emluZyBub3c/JiMzNDsgSXQmIzM5O3Mgd29ydGggdGFraW5nIGEgZGVlcGVyIGxvb2suCgpSaWdodCwgSVVDVuKApiB0aGF0JiMzOTtzIGFuIElCTSBzMzkwIHNwZWNpZmljIHByb3RvY29sLCByaWdodD8gSW50ZXItVXNlciBDb21tdW5pY2F0aW9uIFZlaGljbGUuIFRoZSBuZXh0IHF1ZXN0aW9uIGJlY29tZXMsICYjMzQ7Q2FuIHdlIGV2ZW4gZnV6eiB0aGlzIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQ/JiMzNDsgRm9ydHVuYXRlbHksIEkga25vdyBRRU1VIHN1cHBvcnRzIHMzOTB4LCBzbyB0aGUgYXJjaGl0ZWN0dXJlIGJhcnJpZXIgaXNuJiMzOTt0IGEgcHJvYmxlbS4gKkJ1dCwqIGxldCYjMzk7cyBub3QganVtcCB0aGUgZ3VuLiBXZSAqaGF2ZSogdG8gY2hlY2sgaWYgdGhpcyBpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSB0aGF0IG1pZ2h0IG5vdCBldmVuIGJlICpwcmVzZW50KiBpbiBvdXIgdGFyZ2V0IGVudmlyb25tZW50LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYG5ldC9pdWN2L0tjb25maWdgIHRvIGNvbmZpcm0gYmVmb3JlIHByb2NlZWRpbmcuIEdvdHRhIGdldCB0aGF0IGJhc2VsaW5lLCBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVVDViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2l1Y3YvS2NvbmZpZzoyOmNvbmZpZyBJVUNWXG5uZXQvaXVjdi9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIFMzOTBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTkyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlMzOTAgRnV6emluZyBGZWFzaWJpbGl0eSoqCgpPa2F5LCBzbyB0aGlzIGhpbmdlcyBvbiBTMzkwLiAqQ2FuKiBzeXprYWxsZXIgYWN0dWFsbHkgZnV6eiBzMzkweD8gR29vZCwgdGhlIGRvY3VtZW50YXRpb24gY29uZmlybXMgdGhhdCBpdCBkb2VzLiBOb3csIEkgbmVlZCB0byByZW1lbWJlciB0aGUgc3BlY2lmaWMgY2F2ZWF0cy4uLiByaWdodCwgdGhlIGluc3RydWN0aW9ucyBwb2ludCBvdXQgdGhhdCBzb21lIGNvZGUgcGF0aHMgYXJlIGluYWNjZXNzaWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGhhcmR3YXJlIGVtdWxhdGlvbi4gQSBrZXkgY29uc2lkZXJhdGlvbi4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGNhbiBJVUNWIGJlIGVmZmVjdGl2ZWx5IGZ1enplZCAqd2l0aGluKiBRRU1VPyBZZXMsIG9mIGNvdXJzZSwgUUVNVSBoYXMgczM5MHggZW11bGF0aW9uLiBCdXQgdGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uIGlzIHdoZXRoZXIgaXQmIzM5O3MgKndvcnRoKiB0aGUgZWZmb3J0LCBnaXZlbiB0aGUgcG90ZW50aWFsIGxpbWl0YXRpb25zLiBUaGlzIGlzIHRoZSBjcnV4LiBUbyBtYWtlIHRoYXQgY2FsbCwgbGV0JiMzOTtzIHN0YXJ0IGJ5IGRldGVybWluaW5nIGlmIHRoZSBmdW5jdGlvbiBgYWZpdWN2X2hzX3JjdmAgaXMgZXZlbiByZWFjaGFibGUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZml1Y3ZfaHNfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz0yMDEyPXN0YXRpYyBpbnQgYWZpdWN2X2hzX2NhbGxiYWNrX3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1My0vKlxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwNTQ6ICogYWZpdWN2X2hzX3JjdigpIC0gYmFzZSBmdW5jdGlvbiBmb3IgYXJyaXZpbmcgZGF0YSB0aHJvdWdoIEhpcGVyU29ja2V0c1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTUtICogICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTctICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1ODpzdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDU5LVx0c3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjk2PXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXVjdl9wYWNrZXRfdHlwZSA9IHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk3LVx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjk4Olx0LmZ1bmMgPSBhZml1Y3ZfaHNfcmN2LFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTktfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIElVQ1YgTmV0d29yayBQcm90b2NvbCoqCgpPa2F5LCBzbyBgYWZpdWN2X2hzX3JjdmAgaXMgc2V0IHVwIGFzIGEgaGFuZGxlciBmb3IgcGFja2V0cyB1c2luZyB0aGUgYEVUSF9QX0FGX0lVQ1ZgIHByb3RvY29sLiBSaWdodCwgc28gdGhhdCBtZWFucyBJIGNhbiBpbnRlcmFjdCB3aXRoIGl0IHVzaW5nIHJhdyBzb2NrZXRzIG9yIHR1bi90YXAgZGV2aWNlcywgc2VuZGluZyBwYWNrZXRzIHdpdGggdGhhdCBzcGVjaWZpYyBwcm90b2NvbCB0eXBlLiBCdXQgd2FpdCwgYEVUSF9QX0FGX0lVQ1ZgICppcyogYSBuZXR3b3JrIHByb3RvY29sLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgSVVDVmAgaXRzZWxmIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG5ldHdvcmsgY2FwYWJpbGl0aWVzIG9mIHRoZSBzeXN0ZW0uIExldCBtZSBjaGVjayB0aGUgYG5ldC9pdWN2L0tjb25maWdgIGZpbGUgdG8gc2VlIGhvdyBgQUZfSVVDVmAgaXMgY29uZmlndXJlZC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQUZfSVVDViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgTmV0L0l1Y3YvS2NvbmZpZyBGaWxlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvaXVjdi9LY29uZmlnYC4gSSBuZWVkIHRvIHRob3JvdWdobHkgYXNzZXNzIGl0cyBjb250ZW50cy4gSSYjMzk7bSBsb29raW5nIGZvciBldmVyeXRoaW5nOiBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoZW1zZWx2ZXMsIGFuZCBhbnkgaW5oZXJlbnQgbG9naWMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjayBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIEtjb25maWcgZmlsZXMuIEFyZSB0aGVyZSBhbnkgc3VidGxlIGltcGxpY2F0aW9ucyBvciBwb3RlbnRpYWwgZ290Y2hhcyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgc2VsZWN0YCBzdGF0ZW1lbnRzIGFuZCB0cmlzdGF0ZSBvcHRpb25zLCBtYWtpbmcgc3VyZSBJIGZ1bGx5IGdyYXNwIHRoZSBjb25kaXRpb25hbCBpbmNsdXNpb24gbG9naWMuIFRoaXMgd2lsbCBiZSB0aGUgZm91bmRhdGlvbiBmb3IgZmlndXJpbmcgb3V0IGhvdyB0aGUgSVVDViBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgaXMgY29uZmlndXJlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBhcmVhcyB0aGF0IG5lZWQgaW1tZWRpYXRlIGF0dGVudGlvbiBmcm9tIG15IHBlcnNwZWN0aXZlLiBUaGlzIGlzIGEgY3JpdGljYWwgc3RlcCBiZWZvcmUgbWFraW5nIGNoYW5nZXMgb3IgcmVjb21tZW5kYXRpb25zIHJlbGF0ZWQgdG8gSVVDVi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBJVUNWXG4gICAzOlx0XHRkZXBlbmRzIG9uIFMzOTBcbiAgIDQ6XHRcdGRlZl90cmlzdGF0ZSB5IGlmIFMzOTBcbiAgIDU6XHRcdHByb21wdCBcJiMzNDtJVUNWIHN1cHBvcnQgKFMzOTAgLSB6L1ZNIG9ubHkpXCYjMzQ7XG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgaW50ZXItdXNlciBjb21tdW5pY2F0aW9uXG4gICA4Olx0XHQgIHVuZGVyIFZNIG9yIFZJRi4gSWYgeW91IHJ1biBvbiB6L1ZNLCBzYXkgXCYjMzQ7WVwmIzM0OyB0byBlbmFibGUgYSBmYXN0XG4gICA5Olx0XHQgIGNvbW11bmljYXRpb24gbGluayBiZXR3ZWVuIFZNIGd1ZXN0cy5cbiAgMTA6XHRcbiAgMTE6XHRjb25maWcgQUZJVUNWXG4gIDEyOlx0XHRkZXBlbmRzIG9uIFMzOTBcbiAgMTM6XHRcdGRlZl90cmlzdGF0ZSBtIGlmIFFFVEhfTDMgfHwgSVVDVlxuICAxNDpcdFx0cHJvbXB0IFwmIzM0O0FGX0lVQ1YgU29ja2V0IHN1cHBvcnQgKFMzOTAgLSB6L1ZNIGFuZCBIaXBlclNvY2tldHMgdHJhbnNwb3J0KVwmIzM0O1xuICAxNTpcdFx0aGVscFxuICAxNjpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIEFGX0lVQ1Ygc29ja2V0IGFwcGxpY2F0aW9uc1xuICAxNzpcdFx0ICBiYXNlZCBvbiB6L1ZNIGludGVyLXVzZXIgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIG9yIGJhc2VkIG9uXG4gIDE4Olx0XHQgIEhpcGVyU29ja2V0cy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE5NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFGSVVDViBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaW52b2x2ZXMgYGNvbmZpZyBBRklVQ1ZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIG9mIGNvdXJzZSwgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBBRklVQ1ZgLiBUaGUgY29kZSBzZWVtcyB0byBiZSBsb2NhdGVkIGluIGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBSaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb24gaGFuZGxlcyB0aGUgaGVhdnkgbGlmdGluZywgYW5kIGl0IGxvb2tzIGxpa2UgYGFmaXVjdl9oc19yY3ZgIGlzIHRoZSBwcmltZSBzdXNwZWN0LiBZZXMsIGNvbmZpcm1lZC4gQnV0IGhhbmcgb24uLi4gYGFmaXVjdl9oc19yY3ZgIGlzIHN0YXRpYyEgVGhhdCYjMzk7cyBub3QgaWRlYWwsIHNpbmNlIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeXBvaW50IGZ1bmN0aW9ucy4KCkhvd2V2ZXIsIGEgY2xvc2VyIGxvb2sgcmV2ZWFscyB0aGF0IGBhZml1Y3ZfaHNfcmN2YCBpcyByZWdpc3RlcmVkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYGl1Y3ZfcGFja2V0X3R5cGVgOgoKYGBgYwpzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGl1Y3ZfcGFja2V0X3R5cGUgPSB7CgkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0FGX0lVQ1YpLAoJLmZ1bmMgPSBhZml1Y3ZfaHNfcmN2LAp9OwpgYGAKClNpbmNlIHdlJiMzOTtyZSB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIChgLmZ1bmMgPSBhZml1Y3ZfaHNfcmN2YCksIGl0IGFsbW9zdCBjZXJ0YWlubHkgKndvbiYjMzk7dCogYmUgaW5saW5lZCBhbmQgd2lsbCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoaXMgbWFrZXMgaXQgYW4gYWNjZXB0YWJsZSBlbnRyeSBwb2ludCwgZXZlbiBpZiBpdCYjMzk7cyBkZWNsYXJlZCBzdGF0aWMuIEp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBgbmV0L2l1Y3YvYWZfaXVjdi5jYCBmb3IgYW55IG90aGVyIHJlZmVyZW5jZXMgdG8gYGl1Y3ZfcGFja2V0X3R5cGVgIHRvIGVuc3VyZSB0aGVyZSBpc24mIzM5O3QgYW5vdGhlciBlbnRyeSBwb2ludCBJJiMzOTttIG92ZXJsb29raW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpdWN2X3BhY2tldF90eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz0yMjkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5NS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjk2OnN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXVjdl9wYWNrZXRfdHlwZSA9IHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk3LVx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjMwMT1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzM1LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMzY6XHRkZXZfYWRkX3BhY2soXHUwMDI2aXVjdl9wYWNrZXRfdHlwZSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzNy1cdHJldHVybiAwO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzUwPXN0YXRpYyB2b2lkIF9fZXhpdCBhZml1Y3ZfZXhpdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzU1LVx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2YWZpdWN2X25ldGRldl9ub3RpZmllcik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM1NjpcdGRldl9yZW1vdmVfcGFjayhcdTAwMjZpdWN2X3BhY2tldF90eXBlKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzU3LVx0c29ja191bnJlZ2lzdGVyKFBGX0lVQ1YpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjc4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIGBhZml1Y3ZfaHNfcmN2YCBQYWNrZXQgSGFuZGxlcioqCgpPa2F5LCBzbyBgYWZpdWN2X2hzX3JjdmAgaXMgYSBwYWNrZXQgaGFuZGxlciwgc3BlY2lmaWNhbGx5IGZvciBwYWNrZXRzIG9mIHR5cGUgYEVUSF9QX0FGX0lVQ1ZgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgaXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgZnV6emluZyBpdC4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIG5ldHdvcmsgcGFja2V0IGhhbmRsZXIgYW5kIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2Ug4oCTIHBvdGVudGlhbGx5IHRocm91Z2ggdHVuL3RhcCBvciByYXcgc29ja2V0cyDigJMgdGhlIGF0dGFjayBzdXJmYWNlIGlzIGRlZmluaXRlbHkgdGhlcmUuCgpUaGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRzIGEgY2hlY2sgd2l0aGluIGBhZml1Y3ZfaHNfcmN2YDogYGlmIChpdWN2X3NrKHNrKS0mZ3Q7dHJhbnNwb3J0ICE9IEFGX0lVQ1ZfVFJBTlNfSElQRVIpYC4gVGhpcyBjbGVhcmx5IGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSB0aGUgaGFuZGxlciB3YXMgcHJvY2Vzc2luZyBwYWNrZXRzIGZvciBzb2NrZXRzIG5vdCB1c2luZyB0aGUgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydC4gR29vZC4KClRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVkIGlzIGBBRklVQ1ZgLiBIbW0sIGJ1dCBgQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O2NhbiB3ZSBmdXp6IHRoaXMgb24geDg2PyYjMzQ7LiBUaGUgYW5zd2VyIGlzIG5vLCB3ZSBjYW4mIzM5O3QuIEl0JiMzOTtzIHMzOTAgc3BlY2lmaWMuIEhvd2V2ZXIsIHN5emthbGxlciAqZG9lcyogZnV6eiBzMzkweC4gTXkgbmV4dCB0aG91Z2h0IGlzLCBjYW4gd2UgcnVuIHN5emthbGxlciBhbmQgZnV6eiBvbiBhbiBlbXVsYXRlZCBzMzkweCBlbnZpcm9ubWVudD8gVGhlIGRvY3VtZW50YXRpb24gcG9pbnRzIHRvIHRoZSBpZGVhIHRoYXQgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIGFyZSBwcm9ibGVtYXRpYy4gSG93ZXZlciwgdGhlIGluc3RydWN0aW9ucyBzdGF0ZSB0aGlzIGlzIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUuIFFFTVUgc3VwcG9ydHMgczM5MHgsIGFuZCBzeXprYWxsZXIgcnVucyBzMzkweCBpbnN0YW5jZXMgb24gUUVNVSwgc28gdGhlIGNvZGUgaXMgKnJlYWNoYWJsZSouCgpCdXQsIGEgdGhvdWdodCBlbWVyZ2VzOyBkb2VzIGBBRklVQ1ZgIGFjdHVhbGx5IHJlcXVpcmUgc3BlY2lmaWMgczM5MCBoYXJkd2FyZSB0aGF0ICppc24mIzM5O3QqIGVtdWxhdGVkPyBUaGUgY29uZmlnIHRleHQgc2F5cyB0aGF0IHRoZSBwcm9tcHQgc2F5cyAmIzM0O0FGX0lVQ1YgU29ja2V0IHN1cHBvcnQgKFMzOTAgLSB6L1ZNIGFuZCBIaXBlclNvY2tldHMgdHJhbnNwb3J0KSYjMzQ7LiBIaXBlclNvY2tldHMgaXMganVzdCBhICp0cmFuc3BvcnQqLiBJdCYjMzk7cyBub3QgYSBoYXJkd2FyZSByZXF1aXJlbWVudCBmb3IgdGhlIGBhZml1Y3ZfaHNfcmN2YCBmdW5jdGlvbiB0byBiZSBjYWxsZWQuIEFueSBuZXR3b3JrIGRldmljZSBjYW4gcmVjZWl2ZSBhIHBhY2tldCB3aXRoIGBza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX0FGX0lVQ1YpYCwgYW5kIGBkZXZfYWRkX3BhY2tgIHdpbGwgcm91dGUgaXQgdG8gYGFmaXVjdl9oc19yY3ZgLiBUaGlzIGlzIHRoZSBrZXkuIEl0IGxvb2tzIGxpa2UgaXQgZG9lc24mIzM5O3QgbmVlZCBIaXBlclNvY2tldHMgc3BlY2lmaWNhbGx5LiBJJiMzOTttIGdvaW5nIHRvIHZlcmlmeSB0aGlzIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VUSF9QX0FGX0lVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvaWZfZXRoZXIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvaWZfZXRoZXIuaC0xMjUtI2RlZmluZSBFVEhfUF9JRkVcdDB4RUQzRVx0XHQvKiBGb3JDRVMgaW50ZXItRkUgTEZCIHR5cGUgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9pZl9ldGhlci5oOjEyNjojZGVmaW5lIEVUSF9QX0FGX0lVQ1YgICAweEZCRkJcdFx0LyogSUJNIGFmX2l1Y3YgWyBOT1QgQU4gT0ZGSUNJQUxMWSBSRUdJU1RFUkVEIElEIF0gKi9cbmluY2x1ZGUvdWFwaS9saW51eC9pZl9ldGhlci5oLTEyNy0jZGVmaW5lIEVUSF9QX05YUF9ORVRDICAweEZEM0FcdFx0LyogTlhQIE5FVEMgRFNBIFsgTk9UIEFOIE9GRklDSUFMTFkgUkVHSVNURVJFRCBJRCBdICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0ODgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBhZml1Y3ZfaHNfcmN2YCBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBgRVRIX1BfQUZfSVVDVmAgaXMganVzdCBhbiBFdGhlcm5ldCBwcm90b2NvbCBJRC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIFNlbmRpbmcgYSBwYWNrZXQgd2l0aCB0aGF0IElEIHRocm91Z2ggZWl0aGVyIGBBRl9QQUNLRVRgIG9yIGEgYHR1bmAgaW50ZXJmYWNlIHdpbGwgaW5ldml0YWJseSB0cmlnZ2VyIHRoZSBgYWZpdWN2X2hzX3JjdmAgZnVuY3Rpb24uIFNvLCB5ZXMsIHRoZSBmdW5jdGlvbiAqaXMqIHJlYWNoYWJsZSDigJMgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBjb25jbHVzaW9uLiBOb3csIGxldCYjMzk7cyBkaWcgZGVlcGVyIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIHdlIG5lZWQgdG8gY29uc2lkZXIuCgpUaGUgcGF0Y2ggaXRzZWxmIHplcm9lcyBpbiBvbiBgYWZpdWN2X2hzX3JjdmAsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBzdHJvbmcgaW5kaWNhdG9yLiBMb29raW5nIGF0IHRoZSBjb2RlIG1vZGlmaWNhdGlvbiwgaXQgc2VlbXMgbGlrZSB0aGVyZSBpcyBub3cgYSBjaGVjayB0aGF0IGZpbHRlcnMgb24gYGl1Y3Zfc2soc2spLSZndDt0cmFuc3BvcnQgIT0gQUZfSVVDVl9UUkFOU19ISVBFUmAuIFNvLCB3ZSBzaG91bGQgaW52ZXN0aWdhdGUgd2hhdCB0aGF0IG1lYW5zIHdpdGhpbiB0aGUgZnVuY3Rpb24uIFNpbmNlIHRoZSBmdW5jdGlvbiBpcyBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgdGhlcmUgYXJlbiYjMzk7dCBpbW1lZGlhdGUgY29uY2VybnMuIElzIHRoZXJlIGFub3RoZXIgd2F5IGluPwoKQ291bGQgdGhlIHZ1bG5lcmFiaWxpdHkgYmUgdGhyb3VnaCBgaXVjdl9zb2NrX2JpbmRgIG9yIGBpdWN2X3NvY2tfY29ubmVjdGA/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYG5ldC9pdWN2L2FmX2l1Y3YuY2AgdG8gdW5kZXJzdGFuZCB0aGUgYGl1Y3Zfc2soc2spLSZndDt0cmFuc3BvcnRgIGFzc2lnbm1lbnQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMgbmV3IGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cmFuc3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTEwNz1zdGF0aWMgaW5saW5lIHZvaWQgbG93X25tY3B5KHVuc2lnbmVkIGNoYXIgKmRzdCwgY2hhciAqc3JjKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTgtICpcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTk6ICogRm9yIElVQ1ZfSVBSTURBVEEsIEFGX0lVQ1YgdXNlcyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb24gdG8gdHJhbnNwb3J0IHNvY2tldFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyMC0gKiBkYXRhOlxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjY9c3RhdGljIGlubGluZSBpbnQgaXVjdl9iZWxvd19tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzEtXHRcdHJldHVybiAxO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MjpcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTczLVx0XHRyZXR1cm4gKGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlc2tic19pbl94bWl0KSBcdTAwM2MgaXVjdi1cdTAwM2VwYXRoLVx1MDAzZW1zZ2xpbSk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4Mj1zdGF0aWMgdm9pZCBpdWN2X3NvY2tfd2FrZV9tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTQtLypcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxOTU6ICogYWZpdWN2X2hzX3NlbmQoKSAtIHNlbmQgYSBtZXNzYWdlIHRocm91Z2ggSGlwZXJTb2NrZXRzIHRyYW5zcG9ydFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5Ni0gKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MzM1PXN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzY3LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjM2ODovKiBTZW5kIGNvbnRyb2xsaW5nIGZsYWdzIHRocm91Z2ggYW4gSVVDViBzb2NrZXQgZm9yIEhJUEVSIHRyYW5zcG9ydCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jLTM2OS1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9jdHJsKHN0cnVjdCBzb2NrICpzaywgdTggZmxhZ3MpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTM5NT1zdGF0aWMgdm9pZCBpdWN2X3NvY2tfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy00MDgtXHRjYXNlIElVQ1ZfQ09OTkVDVEVEOlxubmV0L2l1Y3YvYWZfaXVjdi5jOjQwOTpcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00MTAtXHRcdFx0ZXJyID0gaXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19GSU4pO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkzLVx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDk0Olx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTUtXHRlbHNlXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDk2Olx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNDk3LVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODI9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjE1LVx0XHRpZiAoIW1lbWNtcChzYS1cdTAwM2VzaXVjdl91c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCkpXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjE2Olx0XHRcdGdvdG8gdm1fYmluZDsgLyogVk0gSVVDViB0cmFuc3BvcnQgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYy02MTctXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjE4Olx0LyogdHJ5IGhpcGVyIHRyYW5zcG9ydCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jLTYxOS1cdG1lbWNweSh1aWQsIHNhLVx1MDAzZXNpdWN2X3VzZXJfaWQsIHNpemVvZih1aWQpKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjMzLVx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9CT1VORDtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2MzQ6XHRcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTYzNS1cdFx0XHRpZiAoIWl1Y3YtXHUwMDNlbXNnbGltaXQpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY0Ny1cdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0JPVU5EO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjY0ODpcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQ5LVx0XHRzay1cdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTY2NT1zdGF0aWMgaW50IGl1Y3Zfc29ja19hdXRvYmluZChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3My1cdG1lbWNweShpdWN2LVx1MDAzZXNyY191c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6Njc0Olx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNjc1LVx0c2stXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz03MzM9c3RhdGljIGludCBpdWN2X3NvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQ3LVx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfT1BFTiBcdTAwMjZcdTAwMjZcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NDg6XHQgICAgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUilcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDktXHRcdHJldHVybiAtRUJBREZEOyAvKiBleHBsaWNpdCBiaW5kIHJlcXVpcmVkICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc2NS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NjY6XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUilcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NjctXHRcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNvY2stXHUwMDNlc2ssIEFGX0lVQ1ZfRkxBR19TWU4pO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODAtXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzgxOlx0aWYgKGVyciBcdTAwMjZcdTAwMjYgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4Mi1cdFx0aXVjdl9zZXZlcl9wYXRoKHNrLCAwKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTE2PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy05OTgtXHQgKiBmb3IgU09DS19TVFJFQU0gd2UgbWlnaHQgd2FudCB0byBpbXByb3ZlIGl0IGluIGZ1dHVyZSAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjk5OTpcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTAwMC1cdFx0aGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSAmIzQzO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDQzLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNDQ6XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNDUtXHRcdGF0b21pY19pbmMoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfc2VudCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTAtXHRcdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDUxOlx0fSBlbHNlIHsgLyogQ2xhc3NpYyBWTSBJVUNWIHRyYW5zcG9ydCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTItXHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNml1Y3YtXHUwMDNlc2VuZF9za2JfcSwgc2tiKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTIzNz1zdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMwOC1cdFx0Y29uc3VtZV9za2Ioc2tiKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzA5Olx0XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMTAtXHRcdFx0YXRvbWljX2luYyhcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2KTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTQxOD1zdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDQzLVx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ09OTkVDVEVEKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ0NDpcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NDUtXHRcdFx0dHhtc2cuY2xhc3MgPSAwO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDY3LVx0aWYgKGhvdyA9PSBSQ1ZfU0hVVERPV04gfHwgaG93ID09IFNIVVRET1dOX01BU0spIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDY4Olx0XHRpZiAoKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikgXHUwMDI2XHUwMDI2XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ2OS1cdFx0ICAgIGl1Y3YtXHUwMDNlcGF0aCkge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjA3PXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NjYtXHRpdWN2X3NvY2tfaW5pdChuc2ssIHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjY3Olx0bml1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NjgtXHRuc2stXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xODMxPXN0YXRpYyBzdHJ1Y3QgaXVjdl9oYW5kbGVyIGFmX2l1Y3ZfaGFuZGxlciA9IHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTgzOS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODQwOi8qKioqKioqKioqKioqKioqKiBIaXBlclNvY2tldHMgdHJhbnNwb3J0IGNhbGxiYWNrcyAqKioqKioqKioqKioqKioqKioqKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODQxLXN0YXRpYyB2b2lkIGFmaXVjdl9zd2FwX3NyY19kZXN0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4NjQ9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg5Ni1cdGl1Y3Zfc29ja19pbml0KG5zaywgc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE4OTc6XHRuaXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE4OTgtXHRuaXVjdi1cdTAwM2Vtc2dsaW1pdCA9IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIwMTI9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDMyLVx0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjAzMzpcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjAzNC1cdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDU0LSAqIGFmaXVjdl9oc19yY3YoKSAtIGJhc2UgZnVuY3Rpb24gZm9yIGFycml2aW5nIGRhdGEgdGhyb3VnaCBIaXBlclNvY2tldHNcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDU1OiAqICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTYtICogICAgICAgICAgICAgICAgICAgY2FsbGVkIGZyb20gbmV0aWYgUlggc29mdGlycVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMDU4PXN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDgxLVx0c2tfZm9yX2VhY2goc2ssIFx1MDAyNml1Y3Zfc2tfbGlzdC5oZWFkKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA4MjpcdFx0aWYgKGl1Y3Zfc2soc2spLVx1MDAzZXRyYW5zcG9ydCAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwODMtXHRcdFx0Y29udGludWU7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNjYtICogYWZpdWN2X2hzX2NhbGxiYWNrX3R4bm90aWZ5KCkgLSBoYW5kbGUgc2VuZCBub3RpZmljYXRpb25zIGZyb20gSGlwZXJTb2NrZXRzXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE2NzogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNjgtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjc4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBIaXBlclNvY2tldHMgUGFja2V0IFJlY2VwdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGBhZml1Y3ZfaHNfcmN2YCBpcyBjbGVhcmx5IHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgaW5jb21pbmcgcGFja2V0cy4gSSBzZWUgYSBzdWl0ZSBvZiByZWxhdGVkIGZ1bmN0aW9ucyB0b286IGBpdWN2X3NvY2tfYmluZGAsIGBpdWN2X3NvY2tfY29ubmVjdGAsIGBpdWN2X3NvY2tfc2VuZG1zZ2AsIGBpdWN2X3NvY2tfcmVjdm1zZ2AsIGFuZCB0aGUgdmFyaW91cyBjYWxsYmFjayBmdW5jdGlvbnMgYGFmaXVjdl9oc19jYWxsYmFja18qYC4gTWFrZXMgc2Vuc2UsIHRoZSB1c3VhbCBzb2NrZXQgb3BlcmF0aW9ucy4KCk5vdywgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrICp3aXRoaW4qIGBhZml1Y3ZfaHNfcmN2YDogYGlmIChpdWN2X3NrKHNrKS0mZ3Q7dHJhbnNwb3J0ICE9IEFGX0lVQ1ZfVFJBTlNfSElQRVIpYC4gQWgsIHRoYXQmIzM5O3MgY2xldmVyLiBJdCYjMzk7cyBleHBsaWNpdGx5IGVuc3VyaW5nIHRoYXQgYGFmaXVjdl9oc19yY3ZgICpvbmx5KiBwcm9jZXNzZXMgcGFja2V0cyBmb3IgSGlwZXJTb2NrZXRzLWJhc2VkIHNvY2tldHMgKGlkZW50aWZpZWQgYnkgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgKSwgYW5kIG5vdCBmb3IgdGhlIHN0YW5kYXJkIElVQ1Ygc29ja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4LiBJdCYjMzk7cyBkZXNpZ25lZCB0byBwcmV2ZW50IHBhY2tldCBtaXNyb3V0aW5nLCB3aGljaCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uIG9yIG90aGVyIG5hc3R5IHNpZGUgZWZmZWN0cy4gQWJzb2x1dGVseSwgdGhpcyBpcyBhIGJ1ZyBmaXggdGhhdCB3YXJyYW50cyBmdXp6aW5nLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBgQUZJVUNWYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm93LCBsZXQgbWUgc2VlLi4uIEl0ICpkZXBlbmRzKiBvbiBgUzM5MGAgd2hpY2ggaXMgYXMgZXhwZWN0ZWQsIGJ1dCB3aGF0IGVsc2U/IE9rYXksIGJhY2sgdG8gYG5ldC9pdWN2L0tjb25maWdgLiBIYW5nIG9uLi4uIGBkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZgLiBPa2F5LCB0aGUgZGVmYXVsdCBpcyBgbWAgaWYgZWl0aGVyIGBRRVRIX0wzYCBvciBgSVVDVmAgYXJlIGVuYWJsZWQuIEJ1dCBpdCBvbmx5ICpkZXBlbmRzKiBvbiBgUzM5MGAsIHNvIGl0IGRvZXNuJiMzOTt0IHN0cmljdGx5IGRlcGVuZCBvbiBgSVVDVmAuIEFzIGxvbmcgYXMgdGhlIGFyY2ggaXMgczM5MCwganVzdCBlbmFibGluZyBgQUZJVUNWYCBzaG91bGQgYmUgc3VmZmljaWVudC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGBNYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgYnVpbGQgcnVsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FGSVVDViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0lVQ1YpXHQmIzQzOz0gaXVjdi5vXG5uZXQvaXVjdi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19BRklVQ1YpXHQmIzQzOz0gYWZfaXVjdi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjQ4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBhZl9pdWN2LmNgIENvbXBpbGF0aW9uIERlcGVuZGVuY3kqKgoKUmlnaHQsIHNvIEkgaW5pdGlhbGx5IHRob3VnaHQsICYjMzQ7T2theSwgYENPTkZJR19BRklVQ1ZgIGlzIGFsbCBJIG5lZWQgdG8gZ2V0IGBhZl9pdWN2LmNgIHRvIGNvbXBpbGUuJiMzNDsgUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gQnV0IHRoZW4sIGEgcmVkIGZsYWcgcG9wcGVkIHVwLiAmIzM0O0hvbGQgb24sIHdoYXQgYWJvdXQgYENPTkZJR19JVUNWYD8gSXMgdGhhdCBhbHNvIG5lY2Vzc2FyeT8mIzM0OyBJdCYjMzk7cyBhIGh1bmNoLCBidXQgdGhlIHdheSB0aGVzZSB0aGluZ3MgYXJlIG9mdGVuIHN0cnVjdHVyZWQsIGBhZl9pdWN2LmNgICptaWdodCogZGVwZW5kIG9uIGNvcmUgZnVuY3Rpb25zIG9yIGRlZmluaXRpb25zIGZyb20gYGl1Y3YuY2AuIFRoaXMgaXMgY29tbW9uIHdpdGggbmV0d29yayBwcm90b2NvbHMuIFRvIGJlIHN1cmUsIEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlcmUgaXMgYW4gZXhwbGljaXQgbGlua2FnZS4gSSBzaG91bGQgc2VlIGlmIGBhZl9pdWN2LmNgIGlzIHVzaW5nIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGluIGBpdWN2LmNgLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgbG9vayBmb3IgdGhvc2UgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3MgZ28gY2hlY2sgdGhlIHNvdXJjZSBmaWxlIGBuZXQvaXVjdi9hZl9pdWN2LmNgIGZvciBhbnkgZnVuY3Rpb24gY2FsbHMgc3RhcnRpbmcgd2l0aCBgaXVjdl9gLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZGVmaW5pdGl2ZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l1Y3ZfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTIzMDE9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMyNi1cdGlmIChwcl9pdWN2KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMyNzpcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VpdWN2X3JlZ2lzdGVyKFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMyOC1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNzYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElVQ1YgUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIHRoaXMgY29kZSBzbmlwcGV0IGlzIHVzaW5nIGBwcl9pdWN2LSZndDtpdWN2X3JlZ2lzdGVyYC4gSW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgc2VlIHRoYXQgYHByX2l1Y3ZgIGlzIGEgcG9pbnRlci4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZGVyZWZlcmVuY2UgaGVyZSwgd2hpY2ggaW1wbGllcyBpdCYjMzk7cyBwb2ludGluZyB0byBzb21lIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGEgbWVtYmVyIG5hbWVkIGBpdWN2X3JlZ2lzdGVyYC4gQWxyaWdodCwgbGV0JiMzOTtzIGJhY2sgdXAgYSBzdGVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgcHJfaXVjdmAgaXMgYWN0dWFsbHkgKmRlZmluZWQqLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBpdHMgZGVjbGFyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmUgaXQgcG9pbnRzIHRvLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBgaXVjdl9yZWdpc3RlcmAgb3BlcmF0aW9uLiBMZXQmIzM5O3MgZmluZCB0aGF0IGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ByX2l1Y3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTQyPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gaXVjdl9wcm90byA9IHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDctXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDg6c3RhdGljIHN0cnVjdCBpdWN2X2ludGVyZmFjZSAqcHJfaXVjdjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OS1zdGF0aWMgc3RydWN0IGl1Y3ZfaGFuZGxlciBhZl9pdWN2X2hhbmRsZXI7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTMzNT1zdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTM0Ny1cdFx0XHRBU0NFQkModXNlcl9kYXRhLCBzaXplb2YodXNlcl9kYXRhKSk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MzQ4Olx0XHRcdHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTM0OS1cdFx0fSBlbHNlXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzUwOlx0XHRcdHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNTEtXHRcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkyLVx0bWVtc2V0KFx1MDAyNml1Y3YtXHUwMDNlaW5pdCwgMCwgc2l6ZW9mKGl1Y3YtXHUwMDNlaW5pdCkpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5MzpcdGlmIChwcl9pdWN2KVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5NC1cdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02MTMtXHQvKiBCaW5kIHRoZSBzb2NrZXQgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzo2MTQ6XHRpZiAocHJfaXVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MTUtXHRcdGlmICghbWVtY21wKHNhLVx1MDAzZXNpdWN2X3VzZXJfaWQsIGl1Y3ZfdXNlcmlkLCA4KSlcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQyLXZtX2JpbmQ6XG5uZXQvaXVjdi9hZl9pdWN2LmM6NjQzOlx0aWYgKHByX2l1Y3YpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDQtXHRcdC8qIHVzZSBsb2NhbCB1c2VyaWQgZm9yIGJhY2t3YXJkIGNvbXBhdCAqL1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz02NjU9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02NjktXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjcwOlx0aWYgKHVubGlrZWx5KCFwcl9pdWN2KSlcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzEtXHRcdHJldHVybiAtRVBST1RPO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz02ODc9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDUtXHR9XG5uZXQvaXVjdi9hZl9pdWN2LmM6NzA2Olx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX2Nvbm5lY3QoaXVjdi1cdTAwM2VwYXRoLCBcdTAwMjZhZl9pdWN2X2hhbmRsZXIsXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzA3LVx0XHRcdFx0ICAgIHNhLVx1MDAzZXNpdWN2X3VzZXJfaWQsIE5VTEwsIHVzZXJfZGF0YSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTA1PXN0YXRpYyBpbnQgaXVjdl9zZW5kX2lwcm0oc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgc3RydWN0IGl1Y3ZfbWVzc2FnZSAqbXNnLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy05MTEtXHRwcm1kYXRhWzddID0gMHhmZiAtICh1OCkgc2tiLVx1MDAzZWxlbjtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo5MTI6XHRyZXR1cm4gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3NlbmQocGF0aCwgbXNnLCBJVUNWX0lQUk1EQVRBLCAwLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTkxMy1cdFx0XHRcdCAodm9pZCAqKSBwcm1kYXRhLCA4KTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTE2PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDY5LVx0XHRcdGlmIChlcnIgPT0gMHgxNSkge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNzA6XHRcdFx0XHRwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIoaXVjdi1cdTAwM2VwYXRoLCBOVUxMKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDcxLVx0XHRcdFx0YXRvbWljX2RlYyhcdTAwMjZpdWN2LVx1MDAzZXNrYnNfaW5feG1pdCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwODgtXHRcdFx0fVxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwODk6XHRcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cdTAwM2VwYXRoLCBcdTAwMjZ0eG1zZyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDkwLVx0XHRcdFx0XHRcdCAgICBJVUNWX0lQQlVGTFNULCAwLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDkyLVx0XHR9IGVsc2UgeyAvKiBub24tSVBSTSBMaW5lYXIgc2tiICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA5MzpcdFx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVx1MDAzZXBhdGgsIFx1MDAyNnR4bXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwOTQtXHRcdFx0XHRcdDAsIDAsICh2b2lkICopc2tiLVx1MDAzZWRhdGEsIHNrYi1cdTAwM2VsZW4pO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xMTU4PXN0YXRpYyB2b2lkIGl1Y3ZfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE4OS1cdFx0XHR9XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE5MDpcdFx0XHRyYyA9IHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9yZWNlaXZlKHBhdGgsIG1zZyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTkxLVx0XHRcdFx0XHQgICAgICBJVUNWX0lQQlVGTFNULFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTkzLVx0XHR9IGVsc2Uge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjExOTQ6XHRcdFx0cmMgPSBwcl9pdWN2LVx1MDAzZW1lc3NhZ2VfcmVjZWl2ZShwYXRoLCBtc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE5NS1cdFx0XHRcdFx0ICAgICAgbXNnLVx1MDAzZWZsYWdzIFx1MDAyNiBJVUNWX0lQUk1EQVRBLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNDE4PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NDYtXHRcdFx0dHhtc2cudGFnID0gMDtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDQ3Olx0XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXHUwMDNlcGF0aCwgXHUwMDI2dHhtc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ0OC1cdFx0XHRcdElVQ1ZfSVBSTURBVEEsIDAsICh2b2lkICopIGlwcm1fc2h1dGRvd24sIDgpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDY5LVx0XHQgICAgaXVjdi1cdTAwM2VwYXRoKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3MDpcdFx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfcXVpZXNjZShpdWN2LVx1MDAzZXBhdGgsIE5VTEwpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzEtXHRcdFx0aWYgKGVycilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjQ0LVx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IElVQ1ZfTElTVEVOKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY0NTpcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0Ni1cdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTEtXHRpZiAoc2tfYWNjZXB0cV9pc19mdWxsKHNrKSkge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NTI6XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTMtXHRcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjU5LVx0aWYgKCFuc2spIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjYwOlx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjYxLVx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY4NS1cdHBhdGgtXHUwMDNlbXNnbGltID0gaXVjdi1cdTAwM2Vtc2dsaW1pdDtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjg2Olx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX2FjY2VwdChwYXRoLCBcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIG51c2VyX2RhdGEsIG5zayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY4Ny1cdGlmIChlcnIpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTcxMj1zdGF0aWMgdm9pZCBpdWN2X2NhbGxiYWNrX3J4KHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsIHN0cnVjdCBpdWN2X21lc3NhZ2UgKm1zZylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcyMC1cdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyMTpcdFx0cHJfaXVjdi1cdTAwM2VtZXNzYWdlX3JlamVjdChwYXRoLCBtc2cpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MjItXHRcdHJldHVybjtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjMwMT1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzEyLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMTM6XHRcdHByX2l1Y3YgPSBcdTAwMjZpdWN2X2lmO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTQtXHR9IGVsc2Uge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTUtXHRcdG1lbXNldChcdTAwMjZpdWN2X3VzZXJpZCwgMCwgc2l6ZW9mKGl1Y3ZfdXNlcmlkKSk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMxNjpcdFx0cHJfaXVjdiA9IE5VTEw7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMxNy1cdH1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMyNS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzI2Olx0aWYgKHByX2l1Y3YpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzI3Olx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZWl1Y3ZfcmVnaXN0ZXIoXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzI4LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzM5LW91dF9ub3RpZmllcjpcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzQwOlx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM0MTpcdFx0cHJfaXVjdi1cdTAwM2VpdWN2X3VucmVnaXN0ZXIoXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzQyLW91dF9zb2NrOlxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzUwPXN0YXRpYyB2b2lkIF9fZXhpdCBhZml1Y3ZfZXhpdCh2b2lkKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNTEte1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIzNTI6XHRpZiAocHJfaXVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzUzOlx0XHRwcl9pdWN2LVx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjM5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJVUNWIEluaXRpYWxpemF0aW9uIExvZ2ljKioKCk9rYXksIHNvIGBwcl9pdWN2YCBnZXRzIGFzc2lnbmVkIHRoZSBhZGRyZXNzIG9mIGBpdWN2X2lmYCAqb25seSogaWYgYHNtYXBpX2dldF9pdWN2X3VzZXJpZGAgcmV0dXJucyBzdWNjZXNzZnVsbHkuIE90aGVyd2lzZSwgaXQmIzM5O3Mgc2V0IHRvIGBOVUxMYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBhdCBmaXJzdCBnbGFuY2UsIGJ1dCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgcGllY2VzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gdmlzdWFsaXppbmcgdGhpcyBjb3JyZWN0bHkuCgpIb2xkIG9uLi4uIGBpdWN2X2lmYC4uLiB0aGF0JiMzOTtzIGRlY2xhcmVkIGFuZCAqZXhwb3J0ZWQqIGZyb20gYGl1Y3YuY2AsIGlzbiYjMzk7dCBpdD8gR290dGEgcXVpY2tseSBjb25maXJtIHRoYXQuIE5vIGFzc3VtcHRpb25zIGhlcmUsIEkmIzM5O2xsIGdvIGNoZWNrIHRoYXQgbW9kdWxlJiMzOTtzIGRlZmluaXRpb24uIE5lZWQgdG8gdmVyaWZ5IHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l1Y3ZfaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTIzMDE9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMxMi1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzEzOlx0XHRwcl9pdWN2ID0gXHUwMDI2aXVjdl9pZjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzE0LVx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMzgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgSVVDViBJbnRlcmZhY2UqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBJVUNWIChJbnRlci1Vc2VyIENvbW11bmljYXRpb24gVmVoaWNsZSkgaW50ZXJmYWNlIGhlcmUuIFRoZSBzcGVjaWZpYyBwYXJ0IEkmIzM5O20gZm9jdXNpbmcgb24gbm93IGlzIHRoZSBgaXVjdl9pZmAuIE5hdHVyYWxseSwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzdHJ1Y3R1cmUgb3IgZnVuY3Rpb24gYWN0dWFsbHkgKmlzKi4gU28sIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZTogYGluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oYC4gSSYjMzk7bSBob3BpbmcgdGhhdCBoZWFkZXIgZmlsZSBob2xkcyB0aGUga2V5IC0gaXQgKnNob3VsZCogZGVmaW5lIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3Mgb2YgdGhlIElVQ1YgaW50ZXJmYWNlLCBpbmNsdWRpbmcgYGl1Y3ZfaWZgLCB3aGV0aGVyIGl0JiMzOTtzIGEgc3RydWN0dXJlIGRlZmluaW5nIGRhdGEgZm9yIHRoZSBpbnRlcmZhY2UsIGFuIGVudW0gb2YgbWV0aG9kcywgb3IgZXZlbiBhbiBleHRlcm5hbCBwb2ludGVyIGZvciB1c2UuIFRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIHVucmF2ZWxpbmcgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9pZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oPTI2OT1zdHJ1Y3QgaXVjdl9pbnRlcmZhY2Uge1xuLS1cbmluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oLTMwMC1cbmluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oOjMwMTpleHRlcm4gc3RydWN0IGl1Y3ZfaW50ZXJmYWNlIGl1Y3ZfaWY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzkxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEFGSVVDViBhbmQgSVVDViBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgaXVjdl9pZmAgZnVuY3Rpb24sIGFuZCBJIHNlZSBpdCYjMzk7cyBkZWZpbmVkIGluIGBpdWN2LmNgLiBSaWdodCBhd2F5LCB0aGlzIHNjcmVhbXMgZGVwZW5kZW5jeS4gTG9naWNhbGx5LCBpdCBzZWVtcyB0aGF0IGlmIGBBRklVQ1ZgIHVzZXMgYGl1Y3ZfaWZgLCB0aGVuIGBBRklVQ1ZgIGluaGVyZW50bHkgZGVwZW5kcyBvbiBgSVVDVmAuIEJ1dCB0aGVuIEkgaGF2ZSB0aGlzIG5hZ2dpbmcgZmVlbGluZywgbGlrZSBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLi4uIHRoZSBidWlsZCBzeXN0ZW0gY2FuIGJlIHRyaWNreS4KCldhaXQsIGNhbiBgQUZJVUNWYCAqcmVhbGx5KiBiZSBjb21waWxlZCB3aXRob3V0IGBJVUNWYD8gVGhhdCBqdXN0IGRvZXNuJiMzOTt0IHNpdCByaWdodCB3aXRoIG1lLiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9pdWN2L0tjb25maWdgIGZpbGUuIExldCYjMzk7cyBzZWUuLi4gQWhhIQoKYGBgCmNvbmZpZyBBRklVQ1YKCWRlcGVuZHMgb24gUzM5MAoJZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWCmBgYAoKQWgsIHRoZXJlIGl0IGlzISBUaGUga2V5IGlzIHRoYXQgYEFGSVVDVmAgY2FuIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLCBidXQgZGVwZW5kcyBvbiBgSVVDVmAgYmVpbmcgZWl0aGVyIGJ1aWx0LWluICggYHlgICkgb3IgYXZhaWxhYmxlIGFzIGEgbW9kdWxlICggYG1gICkuIEJ1dCBpZiBgSVVDVmAgaXMgKm5vdCogZW5hYmxlZCBhdCBhbGwsIHRoZW4gYGl1Y3ZfaWZgIHdvbiYjMzk7dCBiZSBhdmFpbGFibGUsIGFuZCBgQUZJVUNWYCB3b24mIzM5O3QgYmUgYWJsZSB0byBjb21waWxlLCBhcyB0aGUgc3ltYm9sIHdpbGwgYmUgdW5kZWZpbmVkLiBUaGlzIGNvbmRpdGlvbmFsIGxvZ2ljIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjYW4gdHJpcCB5b3UgdXAgaW4gdGhlc2UgYnVpbGQgc3lzdGVtcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgaXVjdl9pZmAgaXMgYWN0dWFsbHkgY29uZGl0aW9uYWxseSBjb21waWxlZCBkZXBlbmRpbmcgb24gYElVQ1ZgIGJlaW5nIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l1Y3ZfaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvaXVjdi5jPTE4MDE9c3RhdGljIHZvaWQgaXVjdl9leHRlcm5hbF9pbnRlcnJ1cHQoc3RydWN0IGV4dF9jb2RlIGV4dF9jb2RlLFxuLS1cbm5ldC9pdWN2L2l1Y3YuYy0xODMzLVxubmV0L2l1Y3YvaXVjdi5jOjE4MzQ6c3RydWN0IGl1Y3ZfaW50ZXJmYWNlIGl1Y3ZfaWYgPSB7XG5uZXQvaXVjdi9pdWN2LmMtMTgzNS1cdC5tZXNzYWdlX3JlY2VpdmUgPSBpdWN2X21lc3NhZ2VfcmVjZWl2ZSxcbi0tXG5uZXQvaXVjdi9pdWN2LmMtMTg1Mi19O1xubmV0L2l1Y3YvaXVjdi5jOjE4NTM6RVhQT1JUX1NZTUJPTChpdWN2X2lmKTtcbm5ldC9pdWN2L2l1Y3YuYy0xODU0LVxuLS1cbm5ldC9pdWN2L2l1Y3YuYz0xODYyPXN0YXRpYyBpbnQgX19pbml0IGl1Y3ZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2l1Y3YuYy0xOTAyLVx0XHRnb3RvIG91dF9yZWJvb3Q7XG5uZXQvaXVjdi9pdWN2LmM6MTkwMzpcdGl1Y3ZfaWYucm9vdCA9IGl1Y3Zfcm9vdDtcbm5ldC9pdWN2L2l1Y3YuYzoxOTA0Olx0aXVjdl9pZi5idXMgPSBcdTAwMjZpdWN2X2J1cztcbm5ldC9pdWN2L2l1Y3YuYy0xOTA1LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjgzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQSBRdWljayBDb2RlIENvbnVuZHJ1bSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBTb21ldGhpbmcgZG9lc24mIzM5O3QgcXVpdGUgaml2ZSBoZXJlLiBJZiBJJiMzOTttIHVuZGVyc3RhbmRpbmcgdGhpcyBjb3JyZWN0bHksIHRoZSBJbnRlZ3JhdGVkIFVzZXIgQ29tbXVuaWNhdGlvbiBWZWhpY2xlIChgSVVDVmApIGZ1bmN0aW9uYWxpdHkgaXNuJiMzOTt0IHN1cHBvc2VkIHRvIGJlIGFjdGl2ZSwgcmlnaHQ/IFNvLCBob3cgaW4gdGhlIHdvcmxkIGlzIHRoZSBgYWZfaXVjdi5jYCBmaWxlIGV2ZW4gY29tcGlsaW5nPyBUaGF0IHNlZW1z4oCmdW5leHBlY3RlZC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgYGluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oYCBoZWFkZXIgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyLiBJIGhhdmUgYSBodW5jaCB0aGUgaXNzdWUgaXMgbGlrZWx5IHJvb3RlZCB0aGVyZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9pZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oPTI2OT1zdHJ1Y3QgaXVjdl9pbnRlcmZhY2Uge1xuLS1cbmluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oLTMwMC1cbmluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oOjMwMTpleHRlcm4gc3RydWN0IGl1Y3ZfaW50ZXJmYWNlIGl1Y3ZfaWY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTkzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgYSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBCbG9jayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBqdW1wcyB0byBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW4gYCNpZmRlZiBDT05GSUdfSVVDVmAgd3JhcHBlZCBhcm91bmQgdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gY2hlY2tpbmcuIElmIGl0ICppcyogdGhlcmUsIHRoYXQgdGVsbHMgbWUgdGhlIGNvbXBpbGVyIG9ubHkgaW5jbHVkZXMgdGhpcyBmdW5jdGlvbmFsaXR5IGlmIHRoZSBgQ09ORklHX0lVQ1ZgIHByZXByb2Nlc3NvciBtYWNybyBpcyBkZWZpbmVkLiBUaGF0JiMzOTtzIGNydWNpYWwgaW5mb3JtYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgY29kZSBibG9jay4gRGV0ZXJtaW5pbmcgdGhpcyBjb25kaXRpb25hbCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pdWN2L2l1Y3YuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Nzk3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgSVVDViBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IHRoZSBJVUNWIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciwgc3BlY2lmaWNhbGx5LCB0aGUgYG5ldC9pdWN2L2FmX2l1Y3YuY2AgZmlsZS4gVGhpcyBpcyB0aGUgbGlrZWx5IHBsYWNlIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGNvcmUgSVVDViBmdW5jdGlvbmFsaXR5IGRlZmluZWQuIEkmIzM5O20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgYSBjb25kaXRpb25hbCBjaGVjay4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFmdGVyIGBJU19FTkFCTEVEKENPTkZJR19JVUNWKWAuIFRoaXMgaXMgdGhlIHR5cGljYWwgbWFjcm8gZm9yIHZlcmlmeWluZyB0aGF0IHRoZSBgQ09ORklHX0lVQ1ZgIEtjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQgZHVyaW5nIHRoZSBidWlsZC4gVGhpcyB0ZWxscyBtZSBpZiB0aGUgSVVDViBzdXBwb3J0IGhhcyBiZWVuIGNvbmZpZ3VyZWQgaW50byB0aGlzIGtlcm5lbCBidWlsZC4gVGhpcyBpcyB0aGUgKmZpcnN0KiBzdGVwIGluIHVuZGVyc3RhbmRpbmcgb3IgdHJvdWJsZXNob290aW5nIGFueSBJVUNWLXJlbGF0ZWQgaXNzdWUgLSBpdCBkaWN0YXRlcyB3aGV0aGVyIEkgY2FuIGV4cGVjdCBhbnkgb2YgdGhlIElVQ1YgY29kZSB0byBiZSBhY3RpdmUuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhhdCBtYWNybyAqZmlyc3QqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSVVDViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9MjMwMT1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA0LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDU6XHRpZiAobWFjaGluZV9pc192bSgpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19JVUNWKSkge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDYtXHRcdGNwY21kKFwmIzM0O1FVRVJZIFVTRVJJRFwmIzM0OywgaXVjdl91c2VyaWQsIHNpemVvZihpdWN2X3VzZXJpZCksIFx1MDAyNmVycik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjI0CgkJCQkJCQlvdXRwdXQ6IDEyOAoJCQkJCQkJdGhvdWdodHM6IDE2MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIElVQ1YgSGlwZXJTb2NrZXRzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBJU19FTkFCTEVEKENPTkZJR19JVUNWKWAgaXMgdXNlZCBpbiBgYWZfaXVjdi5jYC4gVGhpcyBtZWFucyB0aGF0IHdlIGNhbiBidWlsZCB0aGUgYEFGSVVDVmAgc3Vic3lzdGVtIHdpdGhvdXQgdGhlIGNvcmUgYElVQ1ZgIGZ1bmN0aW9uYWxpdHkuIFNpbmNlIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBIaXBlclNvY2tldHMsIGFuZCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBBRl9JVUNWX1RSQU5TX0hJUEVSYCwgb25seSBgQ09ORklHX0FGSVVDVmAgaXMgcmVsZXZhbnQgaGVyZS4gSG93ZXZlciwgYENPTkZJR19BRklVQ1ZgIGRlcGVuZHMgb24gYFMzOTBgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgdGhlIGhhcmR3YXJlIGNvbnRleHQuCgpUaGUgaW5zdHJ1Y3Rpb25zIHRlbGwgbWUgdG8gcmV0dXJuIGBBRklVQ1ZgIGluIGBFbmFibGVDb25maWdzYCwgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeC4gVGhhdCYjMzk7cyBlYXN5IGVub3VnaC4gIFNvLCBgQUZJVUNWYCBpdCBpcy4gIE5vdGhpbmcgZWxzZSBpcyBuZWVkZWQgZm9yIHRoaXMgc3BlY2lmaWMgcGF0Y2guCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBgYWZpdWN2X2hzX3JjdmAgaXMgdGhlIGtleS4gVGhlbiB0aGVyZSYjMzk7cyBgYWZpdWN2X2hzX2NhbGxiYWNrX3N5bmAgYW5kIGBhZml1Y3ZfaHNfY2FsbGJhY2tfcnhgLCByZWxhdGVkIHRvIEhpcGVyU29ja2V0cy4gQW5kIHRoZW4gdGhlcmUgYXJlIGBpdWN2X3NvY2tfYmluZGAsIGBpdWN2X3NvY2tfY29ubmVjdGAsIGBpdWN2X3NvY2tfc2VuZG1zZ2AsIGBpdWN2X3NvY2tfcmVjdm1zZ2AKCkFmdGVyIHJldmlld2luZyB0aGUgcGF0Y2gsIEkgc2VlIHRoYXQgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBgYWZpdWN2X2hzX3JjdmAuIEkgZG91YmxlLWNoZWNrZWQgaWYgYGFmaXVjdl9oc19yY3ZgIGlzIHN0YXRpYy4gWWVzLCBpdCBpcyBkZWNsYXJlZCBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyBpcyB0YWtlbiBhbmQgcGFzc2VkIHRvIGBkZXZfYWRkX3BhY2tgLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGFuIGVudHJ5IHBvaW50LCBub3QgaW5saW5lZCwgYW5kIGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiAgU28gaXQmIzM5O3Mgc3VpdGFibGUgdG8gaW5jbHVkZS4KCkkgZXhhbWluZWQgYGl1Y3Zfc29ja19iaW5kYCwgYGl1Y3Zfc29ja19jb25uZWN0YCwgZXRjLiBUaGV5IGFyZSBzdGF0aWMgdG9vLCBidXQgdGhleSYjMzk7cmUgcmVnaXN0ZXJlZCBpbiBgcHJvdG9fb3BzYCwgc28gdGhhdCYjMzk7cyBhY2NlcHRhYmxlLgoKU28gbXkgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBhcmU6ICBgYWZpdWN2X2hzX3JjdmAuIFdoaWxlIGBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luYCBhbmQgYGFmaXVjdl9oc19jYWxsYmFja19yeGAgYXJlIGNhbGxlZCBieSBgYWZpdWN2X2hzX3JjdmAsIGluY2x1ZGluZyBgYWZpdWN2X2hzX3JjdmAgaXMgdGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBhIGZ1bmN0aW9uYWwgZml4LiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGFmaXVjdl9oc19yY3ZgIHRvIGluY2x1ZGUgYSB0cmFuc3BvcnQgdHlwZSBjaGVjay4gSXQgZW5zdXJlcyB0aGF0IEhpcGVyU29ja2V0cyBwYWNrZXRzIGFyZW4mIzM5O3QgcHJvY2Vzc2VkIGJ5IHNvY2tldHMgdGhhdCBhcmVuJiMzOTt0IHVzaW5nIHRoZSBIaXBlclNvY2tldHMgdHJhbnNwb3J0LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGhlcmUuCgpDcnVjaWFsbHksIHRoaXMgaXMgcmVhY2hhYmxlIGluIFFFTVUhIHMzOTB4IGlzIHN1cHBvcnRlZCBieSBRRU1VLCBhbmQgU3l6a2FsbGVyIGlzIGFjdGl2ZWx5IGZ1enppbmcgb24gaXQuIFRoZSBgQUZJVUNWYCBjb25maWcgY2FuIGJlIGVuYWJsZWQuIEkgY2FuIHNlbmQgYSBwYWNrZXQgd2l0aCBgRVRIX1BfQUZfSVVDVmAgdmlhIGBBRl9QQUNLRVRgIG9yIGB0dW4vdGFwYCB0byBnZXQgdG8gdGhpcyBmdW5jdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IGZ1enphYmxlLgoKVGhlcmVmb3JlLCBoZXJlIGFyZSB0aGUgcmVzdWx0czoKLSBXb3J0aEZ1enppbmc6IHRydWUKLSBSZWFzb25pbmc6IFRoZSBwYXRjaCBhZGRzIGEgdHJhbnNwb3J0IHR5cGUgY2hlY2sgaW4gYGFmaXVjdl9oc19yY3ZgIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBIaXBlclNvY2tldHMgcGFja2V0cyBmb3Igc29ja2V0cyBub3QgdXNpbmcgdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBuZXR3b3JrIHByb3RvY29sIHBhY2tldCBoYW5kbGVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJhdyBzb2NrZXRzIG9yIHR1bi90YXAgZGV2aWNlcyBieSBzZW5kaW5nIHBhY2tldHMgd2l0aCBwcm90b2NvbCBFVEhfUF9BRl9JVUNWLgotIEZvY3VzU3ltYm9sczogWyYjMzQ7YWZpdWN2X2hzX3JjdiYjMzQ7XQotIEVuYWJsZUNvbmZpZ3M6IFsmIzM0O0FGSVVDViYjMzQ7XQoKYEFGSVVDVmAgaXMgdGhlIG9ubHkgbmVlZGVkIGNvbmZpZywgc2luY2UgaXQmIzM5O3Mgc291cmNlZCBmcm9tIGBuZXQvaXVjdi9LY29uZmlnYCwgd2hpY2ggaW5jbHVkZXMgYG5ldC9LY29uZmlnYCwgYW5kIGRlcGVuZHMgb24gYFMzOTBgLgoKYGFmaXVjdl9oc19yY3ZgIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBGb2N1c1N5bWJvbHMuCgpJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRklVQ1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZml1Y3ZfaHNfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB0cmFuc3BvcnQgdHlwZSBjaGVjayBpbiBgYWZpdWN2X2hzX3JjdmAgdG8gcHJldmVudCBwcm9jZXNzaW5nIEhpcGVyU29ja2V0cyBwYWNrZXRzIGZvciBzb2NrZXRzIG5vdCB1c2luZyB0aGUgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBBRl9JVUNWIG5ldHdvcmsgcHJvdG9jb2wgcGFja2V0IGhhbmRsZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcmF3IHNvY2tldHMgb3IgdHVuL3RhcCBkZXZpY2VzIGJ5IHNlbmRpbmcgcGFja2V0cyB3aXRoIHByb3RvY29sIEVUSF9QX0FGX0lVQ1YuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGSVVDViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FmaXVjdl9oc19yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHRyYW5zcG9ydCB0eXBlIGNoZWNrIGluIGBhZml1Y3ZfaHNfcmN2YCB0byBwcmV2ZW50IHByb2Nlc3NpbmcgSGlwZXJTb2NrZXRzIHBhY2tldHMgZm9yIHNvY2tldHMgbm90IHVzaW5nIHRoZSBIaXBlclNvY2tldHMgdHJhbnNwb3J0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEFGX0lVQ1YgbmV0d29yayBwcm90b2NvbCBwYWNrZXQgaGFuZGxlciwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSByYXcgc29ja2V0cyBvciB0dW4vdGFwIGRldmljZXMgYnkgc2VuZGluZyBwYWNrZXRzIHdpdGggcHJvdG9jb2wgRVRIX1BfQUZfSVVDVi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgb25seSBzb2NrZXRzIHdpdGggdGhlIEFGX0lVQ1ZfVFJBTlNfSElQRVIgdHJhbnNwb3J0IHR5cGUgcHJvY2VzcyBpbmNvbWluZyBIaXBlclNvY2tldHMgcGFja2V0cyBpbiBgYWZpdWN2X2hzX3JjdigpYC4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBwYWNrZXRzIGNvdWxkIGJlIGluY29ycmVjdGx5IHJvdXRlZCB0byBzb2NrZXRzIG9mIGEgZGlmZmVyZW50IHRyYW5zcG9ydCB0eXBlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZXNlIHR5cGVzIG9mIGlzc3VlcyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYmM1NjNiMTVjZmYxOWNlMDUwOTA4NzY1MmVjZmFiZjdhNzU4ZjZjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTM6NTc6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmMKaW5kZXggZWEwNDdiYWI2NWU3Yy4uNWZiNjc5M2I5YTY0YSAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pdWN2L2FmX2l1Y3YuYwpAQCAtMjA3OSw2ICYjNDM7MjA3OSw4IEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCXNrID0gTlVMTDsKIAlyZWFkX2xvY2soJmFtcDtpdWN2X3NrX2xpc3QubG9jayk7CiAJc2tfZm9yX2VhY2goc2ssICZhbXA7aXVjdl9za19saXN0LmhlYWQpIHsKJiM0MzsJCWlmIChpdWN2X3NrKHNrKS0mZ3Q7dHJhbnNwb3J0ICE9IEFGX0lVQ1ZfVFJBTlNfSElQRVIpCiYjNDM7CQkJY29udGludWU7CiAJCWlmICh0cmFuc19oZHItJmd0O2ZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pIHsKIAkJCWlmICgoIW1lbWNtcCgmYW1wO2l1Y3Zfc2soc2spLSZndDtzcmNfbmFtZSwKIAkJCQkgICAgIHRyYW5zX2hkci0mZ3Q7ZGVzdEFwcE5hbWUsIDgpKSAmYW1wOyZhbXA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBJVUNWIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIHdpdGhpbiBhIGxvb3AgdGhhdCBpdGVyYXRlcyB0aHJvdWdoIElVQ1Ygc29ja2V0czogYGlmIChpdWN2X3NrKHNrKS0mZ3Q7dHJhbnNwb3J0ICE9IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIGNvbnRpbnVlO2AuIEVzc2VudGlhbGx5LCB0aGlzIHNlZW1zIHRvIGZpbHRlciB0aGUgc29ja2V0cyBiYXNlZCBvbiB0aGVpciB0cmFuc3BvcnQgdHlwZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGBBRl9JVUNWX1RSQU5TX0hJUEVSYCBzb2NrZXRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgbGlrZWx5IGEgc3RyYWlnaHRmb3J3YXJkIGJ1ZyBmaXguIEl0IHByZXZlbnRzIHBhY2tldHMgZnJvbSBiZWluZyBtaXN0YWtlbmx5IGRlbGl2ZXJlZCB0byBzb2NrZXRzIHRoYXQgYXJlbiYjMzk7dCBvZiB0aGUgYEhJUEVSYCB0cmFuc3BvcnQgdHlwZS4KCkkgZG9uJiMzOTt0IHN1c3BlY3QgdGhpcyBpcyByZWxhdGVkIHRvIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIE1vcmUgbGlrZWx5LCBpdCYjMzk7cyBhIGxvZ2ljIGVycm9yIHRoYXQgY291bGQgbGVhZCB0byBwYWNrZXQgbWlzZGlyZWN0aW9uLiBJZiBhIHBhY2tldCBhcnJpdmVkLCB0aGUgc3lzdGVtIHdvdWxkIGluY29ycmVjdGx5IHRyeSB0byBwcm9jZXNzIGl0IHRocm91Z2ggdGhlIHdyb25nIHNvY2tldCB0eXBlLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSB2YXJpZXR5IG9mIGlzc3VlcywgZnJvbSB0eXBlIGNvbmZ1c2lvbiB0byBpbmNvcnJlY3QgcHJvY2Vzc2luZy4KCkkmIzM5O20gbm93IGdvaW5nIHRvIGludmVzdGlnYXRlIGBhZml1Y3ZfaHNfcmN2YCBpbiB0aGUgc2FtZSBmaWxlIHRvIGNvbmZpcm0gaG93IHRoaXMgbmV3IGNoZWNrIGlzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FmaXVjdl9oc19yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTIwMTI9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDUzLS8qXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1NDogKiBhZml1Y3ZfaHNfcmN2KCkgLSBiYXNlIGZ1bmN0aW9uIGZvciBhcnJpdmluZyBkYXRhIHRocm91Z2ggSGlwZXJTb2NrZXRzXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1NS0gKiAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1Ny0gKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDU4OnN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTktXHRzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyOTY9c3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpdWN2X3BhY2tldF90eXBlID0ge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTctXHQudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0FGX0lVQ1YpLFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTg6XHQuZnVuYyA9IGFmaXVjdl9oc19yY3YsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5OS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDA2CgkJCQkJCQlvdXRwdXQ6IDE2MQoJCQkJCQkJdGhvdWdodHM6IDIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgbG9naWMgYnVnIGZpeC4gVGhlIGtleSBpcyB0aGF0IGl0JiMzOTtzIGFkZGluZyBhIGNoZWNrOiBgaXVjdl9zayhzayktJmd0O3RyYW5zcG9ydCAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSYC4gSSBnZXQgaXQg4oCTIHRoaXMgaXMgZGVzaWduZWQgdG8gcHJldmVudCBzb2NrZXRzIHRoYXQgKmFyZW4mIzM5O3QqIHNwZWNpZmljYWxseSBjb25maWd1cmVkIGZvciBISVBFUiB0cmFuc3BvcnQgZnJvbSBzb21laG93IHJlY2VpdmluZyBISVBFUiBwYWNrZXRzLiBTZWVtcyBsaWtlIGEgZ29vZCBwcmFjdGljZSB0byBpbmNsdWRlIGluIGFueSB3ZWxsLWRlc2lnbmVkIHN5c3RlbSwgcmVnYXJkbGVzcy4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gY29uc2lkZXIgdW5pbml0aWFsaXplZCBtZW1vcnksIHNpbmNlIEtNU0FOIGlzIGFsd2F5cyB0b3Atb2YtbWluZC4gSG93ZXZlciwgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb2RlLCB0aGlzIGNoYW5nZSBhcHBlYXJzIG11Y2ggbW9yZSBmb2N1c2VkIG9uIHByZXZlbnRpbmcgdGhlIHBvdGVudGlhbCBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHR5cGUgY29uZnVzaW9uLCBvciBldmVuIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBpZiBhIG5vbi1ISVBFUiBzb2NrZXQgKmRpZCogZXJyb25lb3VzbHkgcHJvY2VzcyBhIEhJUEVSIHBhY2tldC4gU28sIHdoaWxlIGl0JiMzOTtzIGltcG9ydGFudCB0byBiZSB2aWdpbGFudCBhYm91dCBtZW1vcnkgc2FmZXR5IGluIGdlbmVyYWwsIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBoZXJlIHRoYXQgZGlyZWN0bHkgYWRkcmVzc2VzIG9yIHJlc29sdmVzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGxlYWsgaXNzdWVzLgoKYGl1Y3Zfc2soc2spYCBpcyBqdXN0IGEgY2FzdCB0byBgc3RydWN0IGl1Y3Zfc29ja2AsIHdoaWNoIGlzIGV4cGVjdGVkLiBObyBzaWducyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLgoKS01TQU4gZmxhZ3MgYXJlIHR5cGljYWxseSB1c2VkIGZvciBkZXRlY3RpbmcgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zIHRoYXQgSSB1c3VhbGx5IHNlZS4gS0FTQU4gaXMgdGhlIHRvb2wgdGhhdCB3b3VsZCBsaWtlbHkgYmUgbW9yZSByZWxldmFudCBmb3IgT09CLCBVQUYsIGFuZCBzaW1pbGFyIGlzc3Vlcy4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBzZWVtIHRvIHRvdWNoIGFueSBLTVNBTiBjb25jZXJucy4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IG9ubHkgc29ja2V0cyB3aXRoIHRoZSBBRl9JVUNWX1RSQU5TX0hJUEVSIHRyYW5zcG9ydCB0eXBlIHByb2Nlc3MgaW5jb21pbmcgSGlwZXJTb2NrZXRzIHBhY2tldHMgaW4gYGFmaXVjdl9oc19yY3YoKWAuIFRoaXMgZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgcGFja2V0cyBjb3VsZCBiZSBpbmNvcnJlY3RseSByb3V0ZWQgdG8gc29ja2V0cyBvZiBhIGRpZmZlcmVudCB0cmFuc3BvcnQgdHlwZSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byB0eXBlIGNvbmZ1c2lvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBUaGVzZSB0eXBlcyBvZiBpc3N1ZXMgYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBlbnN1cmUgdGhhdCBvbmx5IHNvY2tldHMgd2l0aCB0aGUgQUZfSVVDVl9UUkFOU19ISVBFUiB0cmFuc3BvcnQgdHlwZSBwcm9jZXNzIGluY29taW5nIEhpcGVyU29ja2V0cyBwYWNrZXRzIGluIGBhZml1Y3ZfaHNfcmN2KClgLiBUaGlzIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIHBhY2tldHMgY291bGQgYmUgaW5jb3JyZWN0bHkgcm91dGVkIHRvIHNvY2tldHMgb2YgYSBkaWZmZXJlbnQgdHJhbnNwb3J0IHR5cGUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdHlwZSBjb25mdXNpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gVGhlc2UgdHlwZXMgb2YgaXNzdWVzIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjIzLjY1Njc2NjA4MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTA5NDE0ODc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRklVQ1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZml1Y3ZfaHNfcmN2XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgb25seSBzb2NrZXRzIHdpdGggdGhlIEFGX0lVQ1ZfVFJBTlNfSElQRVIgdHJhbnNwb3J0IHR5cGUgcHJvY2VzcyBpbmNvbWluZyBIaXBlclNvY2tldHMgcGFja2V0cyBpbiBgYWZpdWN2X2hzX3JjdigpYC4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBwYWNrZXRzIGNvdWxkIGJlIGluY29ycmVjdGx5IHJvdXRlZCB0byBzb2NrZXRzIG9mIGEgZGlmZmVyZW50IHRyYW5zcG9ydCB0eXBlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZXNlIHR5cGVzIG9mIGlzc3VlcyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB0cmFuc3BvcnQgdHlwZSBjaGVjayBpbiBgYWZpdWN2X2hzX3JjdmAgdG8gcHJldmVudCBwcm9jZXNzaW5nIEhpcGVyU29ja2V0cyBwYWNrZXRzIGZvciBzb2NrZXRzIG5vdCB1c2luZyB0aGUgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBBRl9JVUNWIG5ldHdvcmsgcHJvdG9jb2wgcGFja2V0IGhhbmRsZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcmF3IHNvY2tldHMgb3IgdHVuL3RhcCBkZXZpY2VzIGJ5IHNlbmRpbmcgcGFja2V0cyB3aXRoIHByb3RvY29sIEVUSF9QX0FGX0lVQ1YuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjIzLjY1Njc3MjE1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkxMzk5MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGJjNTYzYjE1Y2ZmMTljZTA1MDkwODc2NTJlY2ZhYmY3YTc1OGY2Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzo1NzoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmNcXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi41ZmI2NzkzYjlhNjRhIDEwMDY0NFxcbi0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuY1xcbisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xcbkBAIC0yMDc5LDYgKzIwNzksOCBAQCBzdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0c2sgPSBOVUxMO1xcbiBcXHRyZWFkX2xvY2soXFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcXG4gXFx0c2tfZm9yX2VhY2goc2ssIFxcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZCkge1xcbitcXHRcXHRpZiAoaXVjdl9zayhzayktXFx1MDAzZXRyYW5zcG9ydCAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKHRyYW5zX2hkci1cXHUwMDNlZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1NZTikge1xcbiBcXHRcXHRcXHRpZiAoKCFtZW1jbXAoXFx1MDAyNml1Y3Zfc2soc2spLVxcdTAwM2VzcmNfbmFtZSxcXG4gXFx0XFx0XFx0XFx0ICAgICB0cmFuc19oZHItXFx1MDAzZWRlc3RBcHBOYW1lLCA4KSkgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTc6MjQuMDQ4ODAwNzUyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIwNzA4MzA4NzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGSVVDVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmaXVjdl9oc19yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdHJhbnNwb3J0IHR5cGUgY2hlY2sgaW4gYGFmaXVjdl9oc19yY3ZgIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBIaXBlclNvY2tldHMgcGFja2V0cyBmb3Igc29ja2V0cyBub3QgdXNpbmcgdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBuZXR3b3JrIHByb3RvY29sIHBhY2tldCBoYW5kbGVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJhdyBzb2NrZXRzIG9yIHR1bi90YXAgZGV2aWNlcyBieSBzZW5kaW5nIHBhY2tldHMgd2l0aCBwcm90b2NvbCBFVEhfUF9BRl9JVUNWLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYmM1NjNiMTVjZmYxOWNlMDUwOTA4NzY1MmVjZmFiZjdhNzU4ZjZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTM6NTc6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbmluZGV4IGVhMDQ3YmFiNjVlN2MuLjVmYjY3OTNiOWE2NGEgMTAwNjQ0XG4tLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmNcbisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuQEAgLTIwNzksNiArMjA3OSw4IEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c2sgPSBOVUxMO1xuIFx0cmVhZF9sb2NrKFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcbiBcdHNrX2Zvcl9lYWNoKHNrLCBcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZCkge1xuK1x0XHRpZiAoaXVjdl9zayhzayktXHUwMDNldHJhbnNwb3J0ICE9IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICh0cmFuc19oZHItXHUwMDNlZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1NZTikge1xuIFx0XHRcdGlmICgoIW1lbWNtcChcdTAwMjZpdWN2X3NrKHNrKS1cdTAwM2VzcmNfbmFtZSxcbiBcdFx0XHRcdCAgICAgdHJhbnNfaGRyLVx1MDAzZWRlc3RBcHBOYW1lLCA4KSkgXHUwMDI2XHUwMDI2XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzoyNC4wNDg4MDI3NTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTAwNTU1MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogbmV0L2l1Y3YvYWZfaXVjdi5jKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBTcGVjaWZpY2FsbHksIHRoZXJlJ3MgYSBuZXcgY2hlY2sgaW4gYGFmaXVjdl9oc19yY3ZgOiBgaWYgKGl1Y3Zfc2soc2spLVx1MDAzZXRyYW5zcG9ydCAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoaXMgYSBuZXcgYXR0YWNrIHN1cmZhY2U/IElzIGBuZXQvaXVjdi9hZl9pdWN2LmNgIHdvcnRoIGZ1enppbmcgbm93P1wiIEl0J3Mgd29ydGggdGFraW5nIGEgZGVlcGVyIGxvb2suXG5cblJpZ2h0LCBJVUNW4oCmIHRoYXQncyBhbiBJQk0gczM5MCBzcGVjaWZpYyBwcm90b2NvbCwgcmlnaHQ/IEludGVyLVVzZXIgQ29tbXVuaWNhdGlvbiBWZWhpY2xlLiBUaGUgbmV4dCBxdWVzdGlvbiBiZWNvbWVzLCBcIkNhbiB3ZSBldmVuIGZ1enogdGhpcyBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50P1wiIEZvcnR1bmF0ZWx5LCBJIGtub3cgUUVNVSBzdXBwb3J0cyBzMzkweCwgc28gdGhlIGFyY2hpdGVjdHVyZSBiYXJyaWVyIGlzbid0IGEgcHJvYmxlbS4gKkJ1dCwqIGxldCdzIG5vdCBqdW1wIHRoZSBndW4uIFdlICpoYXZlKiB0byBjaGVjayBpZiB0aGlzIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIHRoYXQgbWlnaHQgbm90IGV2ZW4gYmUgKnByZXNlbnQqIGluIG91ciB0YXJnZXQgZW52aXJvbm1lbnQuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBuZXQvaXVjdi9LY29uZmlnYCB0byBjb25maXJtIGJlZm9yZSBwcm9jZWVkaW5nLiBHb3R0YSBnZXQgdGhhdCBiYXNlbGluZSwgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzoyOS45NDkzNjAwODFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2Mjk5NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElVQ1ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2l1Y3YvS2NvbmZpZzoyOmNvbmZpZyBJVUNWXFxubmV0L2l1Y3YvS2NvbmZpZy0zLVxcdGRlcGVuZHMgb24gUzM5MFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzoyOS45OTg5OTQzNDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDUwOTYwNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlMzOTAgRnV6emluZyBGZWFzaWJpbGl0eSoqXG5cbk9rYXksIHNvIHRoaXMgaGluZ2VzIG9uIFMzOTAuICpDYW4qIHN5emthbGxlciBhY3R1YWxseSBmdXp6IHMzOTB4PyBHb29kLCB0aGUgZG9jdW1lbnRhdGlvbiBjb25maXJtcyB0aGF0IGl0IGRvZXMuIE5vdywgSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBzcGVjaWZpYyBjYXZlYXRzLi4uIHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb25zIHBvaW50IG91dCB0aGF0IHNvbWUgY29kZSBwYXRocyBhcmUgaW5hY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggaGFyZHdhcmUgZW11bGF0aW9uLiBBIGtleSBjb25zaWRlcmF0aW9uLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBjYW4gSVVDViBiZSBlZmZlY3RpdmVseSBmdXp6ZWQgKndpdGhpbiogUUVNVT8gWWVzLCBvZiBjb3Vyc2UsIFFFTVUgaGFzIHMzOTB4IGVtdWxhdGlvbi4gQnV0IHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0J3MgKndvcnRoKiB0aGUgZWZmb3J0LCBnaXZlbiB0aGUgcG90ZW50aWFsIGxpbWl0YXRpb25zLiBUaGlzIGlzIHRoZSBjcnV4LiBUbyBtYWtlIHRoYXQgY2FsbCwgbGV0J3Mgc3RhcnQgYnkgZGV0ZXJtaW5pbmcgaWYgdGhlIGZ1bmN0aW9uIGBhZml1Y3ZfaHNfcmN2YCBpcyBldmVuIHJlYWNoYWJsZS4gVGhhdCdzIHRoZSBmaXJzdCBzdGVwLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzozNS4wNDk5NTc1MzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMTAxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZpdWN2X2hzX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTIwMTI9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTMtLypcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1NDogKiBhZml1Y3ZfaHNfcmN2KCkgLSBiYXNlIGZ1bmN0aW9uIGZvciBhcnJpdmluZyBkYXRhIHRocm91Z2ggSGlwZXJTb2NrZXRzXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTUtICogICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1Ny0gKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1ODpzdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1OS1cXHRzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI5Nj1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGl1Y3ZfcGFja2V0X3R5cGUgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTctXFx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI5ODpcXHQuZnVuYyA9IGFmaXVjdl9oc19yY3YsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTktfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTc6MzUuMDk2OTcxMjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY2OTUxNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIElVQ1YgTmV0d29yayBQcm90b2NvbCoqXG5cbk9rYXksIHNvIGBhZml1Y3ZfaHNfcmN2YCBpcyBzZXQgdXAgYXMgYSBoYW5kbGVyIGZvciBwYWNrZXRzIHVzaW5nIHRoZSBgRVRIX1BfQUZfSVVDVmAgcHJvdG9jb2wuIFJpZ2h0LCBzbyB0aGF0IG1lYW5zIEkgY2FuIGludGVyYWN0IHdpdGggaXQgdXNpbmcgcmF3IHNvY2tldHMgb3IgdHVuL3RhcCBkZXZpY2VzLCBzZW5kaW5nIHBhY2tldHMgd2l0aCB0aGF0IHNwZWNpZmljIHByb3RvY29sIHR5cGUuIEJ1dCB3YWl0LCBgRVRIX1BfQUZfSVVDVmAgKmlzKiBhIG5ldHdvcmsgcHJvdG9jb2wuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBJVUNWYCBpdHNlbGYgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbmV0d29yayBjYXBhYmlsaXRpZXMgb2YgdGhlIHN5c3RlbS4gTGV0IG1lIGNoZWNrIHRoZSBgbmV0L2l1Y3YvS2NvbmZpZ2AgZmlsZSB0byBzZWUgaG93IGBBRl9JVUNWYCBpcyBjb25maWd1cmVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgY29uZmlndXJhdGlvbiBjb250ZXh0IEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzozOS4wNjM5MjQ5MjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MTUwNjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBRl9JVUNWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjM5LjEwOTg1MDM5NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTMwODA5NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBOZXQvSXVjdi9LY29uZmlnIEZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgbmV0L2l1Y3YvS2NvbmZpZ2AuIEkgbmVlZCB0byB0aG9yb3VnaGx5IGFzc2VzcyBpdHMgY29udGVudHMuIEknbSBsb29raW5nIGZvciBldmVyeXRoaW5nOiBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoZW1zZWx2ZXMsIGFuZCBhbnkgaW5oZXJlbnQgbG9naWMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjayBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIEtjb25maWcgZmlsZXMuIEFyZSB0aGVyZSBhbnkgc3VidGxlIGltcGxpY2F0aW9ucyBvciBwb3RlbnRpYWwgZ290Y2hhcyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBzZWxlY3RgIHN0YXRlbWVudHMgYW5kIHRyaXN0YXRlIG9wdGlvbnMsIG1ha2luZyBzdXJlIEkgZnVsbHkgZ3Jhc3AgdGhlIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBsb2dpYy4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uIGZvciBmaWd1cmluZyBvdXQgaG93IHRoZSBJVUNWIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSBpcyBjb25maWd1cmVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IGFyZWFzIHRoYXQgbmVlZCBpbW1lZGlhdGUgYXR0ZW50aW9uIGZyb20gbXkgcGVyc3BlY3RpdmUuIFRoaXMgaXMgYSBjcml0aWNhbCBzdGVwIGJlZm9yZSBtYWtpbmcgY2hhbmdlcyBvciByZWNvbW1lbmRhdGlvbnMgcmVsYXRlZCB0byBJVUNWLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjU2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTc6NDQuNTYyOTMzODE5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgSVVDVlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBTMzkwXFxuICAgNDpcXHRcXHRkZWZfdHJpc3RhdGUgeSBpZiBTMzkwXFxuICAgNTpcXHRcXHRwcm9tcHQgXFxcIklVQ1Ygc3VwcG9ydCAoUzM5MCAtIHovVk0gb25seSlcXFwiXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgaW50ZXItdXNlciBjb21tdW5pY2F0aW9uXFxuICAgODpcXHRcXHQgIHVuZGVyIFZNIG9yIFZJRi4gSWYgeW91IHJ1biBvbiB6L1ZNLCBzYXkgXFxcIllcXFwiIHRvIGVuYWJsZSBhIGZhc3RcXG4gICA5OlxcdFxcdCAgY29tbXVuaWNhdGlvbiBsaW5rIGJldHdlZW4gVk0gZ3Vlc3RzLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRjb25maWcgQUZJVUNWXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFMzOTBcXG4gIDEzOlxcdFxcdGRlZl90cmlzdGF0ZSBtIGlmIFFFVEhfTDMgfHwgSVVDVlxcbiAgMTQ6XFx0XFx0cHJvbXB0IFxcXCJBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydClcXFwiXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXFxuICAxNzpcXHRcXHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cXG4gIDE4OlxcdFxcdCAgSGlwZXJTb2NrZXRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Nzo0NC41NjI5OTQ3NTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA4MTI4NjI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFGSVVDViBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpbnZvbHZlcyBgY29uZmlnIEFGSVVDVmAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgb2YgY291cnNlLCB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBgQUZJVUNWYC4gVGhlIGNvZGUgc2VlbXMgdG8gYmUgbG9jYXRlZCBpbiBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gUmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGhlYXZ5IGxpZnRpbmcsIGFuZCBpdCBsb29rcyBsaWtlIGBhZml1Y3ZfaHNfcmN2YCBpcyB0aGUgcHJpbWUgc3VzcGVjdC4gWWVzLCBjb25maXJtZWQuIEJ1dCBoYW5nIG9uLi4uIGBhZml1Y3ZfaHNfcmN2YCBpcyBzdGF0aWMhIFRoYXQncyBub3QgaWRlYWwsIHNpbmNlIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeXBvaW50IGZ1bmN0aW9ucy5cblxuSG93ZXZlciwgYSBjbG9zZXIgbG9vayByZXZlYWxzIHRoYXQgYGFmaXVjdl9oc19yY3ZgIGlzIHJlZ2lzdGVyZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgaXVjdl9wYWNrZXRfdHlwZWA6XG5cbmBgYGNcbnN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXVjdl9wYWNrZXRfdHlwZSA9IHtcblx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcblx0LmZ1bmMgPSBhZml1Y3ZfaHNfcmN2LFxufTtcbmBgYFxuXG5TaW5jZSB3ZSdyZSB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIChgLmZ1bmMgPSBhZml1Y3ZfaHNfcmN2YCksIGl0IGFsbW9zdCBjZXJ0YWlubHkgKndvbid0KiBiZSBpbmxpbmVkIGFuZCB3aWxsIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gVGhpcyBtYWtlcyBpdCBhbiBhY2NlcHRhYmxlIGVudHJ5IHBvaW50LCBldmVuIGlmIGl0J3MgZGVjbGFyZWQgc3RhdGljLiBKdXN0IHRvIGJlIHRob3JvdWdoLCBJJ2xsIGRvdWJsZS1jaGVjayBgbmV0L2l1Y3YvYWZfaXVjdi5jYCBmb3IgYW55IG90aGVyIHJlZmVyZW5jZXMgdG8gYGl1Y3ZfcGFja2V0X3R5cGVgIHRvIGVuc3VyZSB0aGVyZSBpc24ndCBhbm90aGVyIGVudHJ5IHBvaW50IEknbSBvdmVybG9va2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE5NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjUxLjY0NDI4NDg0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3NzE2NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdl9wYWNrZXRfdHlwZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTIyOTA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IGl1Y3Zfc29ja19mYW1pbHlfb3BzID0ge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTUtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTY6c3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpdWN2X3BhY2tldF90eXBlID0ge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk3LVxcdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfQUZfSVVDViksXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjMwMT1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMzUtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMzY6XFx0ZGV2X2FkZF9wYWNrKFxcdTAwMjZpdWN2X3BhY2tldF90eXBlKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzNy1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzUwPXN0YXRpYyB2b2lkIF9fZXhpdCBhZml1Y3ZfZXhpdCh2b2lkKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNTUtXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXFx1MDAyNmFmaXVjdl9uZXRkZXZfbm90aWZpZXIpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzU2OlxcdGRldl9yZW1vdmVfcGFjayhcXHUwMDI2aXVjdl9wYWNrZXRfdHlwZSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNTctXFx0c29ja191bnJlZ2lzdGVyKFBGX0lVQ1YpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Nzo1MS42OTQwNjA5MzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEwMTYzMTA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgYWZpdWN2X2hzX3JjdmAgUGFja2V0IEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBgYWZpdWN2X2hzX3JjdmAgaXMgYSBwYWNrZXQgaGFuZGxlciwgc3BlY2lmaWNhbGx5IGZvciBwYWNrZXRzIG9mIHR5cGUgYEVUSF9QX0FGX0lVQ1ZgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBmdXp6aW5nIGl0LiBHaXZlbiB0aGF0IGl0J3MgYSBuZXR3b3JrIHBhY2tldCBoYW5kbGVyIGFuZCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIOKAkyBwb3RlbnRpYWxseSB0aHJvdWdoIHR1bi90YXAgb3IgcmF3IHNvY2tldHMg4oCTIHRoZSBhdHRhY2sgc3VyZmFjZSBpcyBkZWZpbml0ZWx5IHRoZXJlLlxuXG5UaGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRzIGEgY2hlY2sgd2l0aGluIGBhZml1Y3ZfaHNfcmN2YDogYGlmIChpdWN2X3NrKHNrKS1cdTAwM2V0cmFuc3BvcnQgIT0gQUZfSVVDVl9UUkFOU19ISVBFUilgLiBUaGlzIGNsZWFybHkgYWRkcmVzc2VzIGEgYnVnIHdoZXJlIHRoZSBoYW5kbGVyIHdhcyBwcm9jZXNzaW5nIHBhY2tldHMgZm9yIHNvY2tldHMgbm90IHVzaW5nIHRoZSBIaXBlclNvY2tldHMgdHJhbnNwb3J0LiBHb29kLlxuXG5UaGUgY29uZmlndXJhdGlvbiByZXF1aXJlZCBpcyBgQUZJVUNWYC4gSG1tLCBidXQgYEFGSVVDVmAgZGVwZW5kcyBvbiBgUzM5MGAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJjYW4gd2UgZnV6eiB0aGlzIG9uIHg4Nj9cIi4gVGhlIGFuc3dlciBpcyBubywgd2UgY2FuJ3QuIEl0J3MgczM5MCBzcGVjaWZpYy4gSG93ZXZlciwgc3l6a2FsbGVyICpkb2VzKiBmdXp6IHMzOTB4LiBNeSBuZXh0IHRob3VnaHQgaXMsIGNhbiB3ZSBydW4gc3l6a2FsbGVyIGFuZCBmdXp6IG9uIGFuIGVtdWxhdGVkIHMzOTB4IGVudmlyb25tZW50PyBUaGUgZG9jdW1lbnRhdGlvbiBwb2ludHMgdG8gdGhlIGlkZWEgdGhhdCBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgYXJlIHByb2JsZW1hdGljLiBIb3dldmVyLCB0aGUgaW5zdHJ1Y3Rpb25zIHN0YXRlIHRoaXMgaXMgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZS4gUUVNVSBzdXBwb3J0cyBzMzkweCwgYW5kIHN5emthbGxlciBydW5zIHMzOTB4IGluc3RhbmNlcyBvbiBRRU1VLCBzbyB0aGUgY29kZSBpcyAqcmVhY2hhYmxlKi5cblxuQnV0LCBhIHRob3VnaHQgZW1lcmdlczsgZG9lcyBgQUZJVUNWYCBhY3R1YWxseSByZXF1aXJlIHNwZWNpZmljIHMzOTAgaGFyZHdhcmUgdGhhdCAqaXNuJ3QqIGVtdWxhdGVkPyBUaGUgY29uZmlnIHRleHQgc2F5cyB0aGF0IHRoZSBwcm9tcHQgc2F5cyBcIkFGX0lVQ1YgU29ja2V0IHN1cHBvcnQgKFMzOTAgLSB6L1ZNIGFuZCBIaXBlclNvY2tldHMgdHJhbnNwb3J0KVwiLiBIaXBlclNvY2tldHMgaXMganVzdCBhICp0cmFuc3BvcnQqLiBJdCdzIG5vdCBhIGhhcmR3YXJlIHJlcXVpcmVtZW50IGZvciB0aGUgYGFmaXVjdl9oc19yY3ZgIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC4gQW55IG5ldHdvcmsgZGV2aWNlIGNhbiByZWNlaXZlIGEgcGFja2V0IHdpdGggYHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BRl9JVUNWKWAsIGFuZCBgZGV2X2FkZF9wYWNrYCB3aWxsIHJvdXRlIGl0IHRvIGBhZml1Y3ZfaHNfcmN2YC4gVGhpcyBpcyB0aGUga2V5LiBJdCBsb29rcyBsaWtlIGl0IGRvZXNuJ3QgbmVlZCBIaXBlclNvY2tldHMgc3BlY2lmaWNhbGx5LiBJJ20gZ29pbmcgdG8gdmVyaWZ5IHRoaXMgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI3OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODowMC43OTU2OTUwMTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTM5MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVUSF9QX0FGX0lVQ1ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmgtMTI1LSNkZWZpbmUgRVRIX1BfSUZFXFx0MHhFRDNFXFx0XFx0LyogRm9yQ0VTIGludGVyLUZFIExGQiB0eXBlICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmg6MTI2OiNkZWZpbmUgRVRIX1BfQUZfSVVDViAgIDB4RkJGQlxcdFxcdC8qIElCTSBhZl9pdWN2IFsgTk9UIEFOIE9GRklDSUFMTFkgUkVHSVNURVJFRCBJRCBdICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmgtMTI3LSNkZWZpbmUgRVRIX1BfTlhQX05FVEMgIDB4RkQzQVxcdFxcdC8qIE5YUCBORVRDIERTQSBbIE5PVCBBTiBPRkZJQ0lBTExZIFJFR0lTVEVSRUQgSUQgXSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODowMC44NDU2Mzg5MjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQwNjM3ODc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGFmaXVjdl9oc19yY3ZgIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gYEVUSF9QX0FGX0lVQ1ZgIGlzIGp1c3QgYW4gRXRoZXJuZXQgcHJvdG9jb2wgSUQuIFRoYXQncyBzdHJhaWdodGZvcndhcmQuIFNlbmRpbmcgYSBwYWNrZXQgd2l0aCB0aGF0IElEIHRocm91Z2ggZWl0aGVyIGBBRl9QQUNLRVRgIG9yIGEgYHR1bmAgaW50ZXJmYWNlIHdpbGwgaW5ldml0YWJseSB0cmlnZ2VyIHRoZSBgYWZpdWN2X2hzX3JjdmAgZnVuY3Rpb24uIFNvLCB5ZXMsIHRoZSBmdW5jdGlvbiAqaXMqIHJlYWNoYWJsZSDigJMgdGhhdCdzIHRoZSBvYnZpb3VzIGNvbmNsdXNpb24uIE5vdywgbGV0J3MgZGlnIGRlZXBlciB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIGNvbnNpZGVyLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIHplcm9lcyBpbiBvbiBgYWZpdWN2X2hzX3JjdmAsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBzdHJvbmcgaW5kaWNhdG9yLiBMb29raW5nIGF0IHRoZSBjb2RlIG1vZGlmaWNhdGlvbiwgaXQgc2VlbXMgbGlrZSB0aGVyZSBpcyBub3cgYSBjaGVjayB0aGF0IGZpbHRlcnMgb24gYGl1Y3Zfc2soc2spLVx1MDAzZXRyYW5zcG9ydCAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSYC4gU28sIHdlIHNob3VsZCBpbnZlc3RpZ2F0ZSB3aGF0IHRoYXQgbWVhbnMgd2l0aGluIHRoZSBmdW5jdGlvbi4gU2luY2UgdGhlIGZ1bmN0aW9uIGlzIHN0YXRpYywgYnV0IGl0cyBhZGRyZXNzIGlzIHRha2VuLCB0aGVyZSBhcmVuJ3QgaW1tZWRpYXRlIGNvbmNlcm5zLiBJcyB0aGVyZSBhbm90aGVyIHdheSBpbj9cblxuQ291bGQgdGhlIHZ1bG5lcmFiaWxpdHkgYmUgdGhyb3VnaCBgaXVjdl9zb2NrX2JpbmRgIG9yIGBpdWN2X3NvY2tfY29ubmVjdGA/IEknbGwgbmVlZCB0byBjaGVjayBgbmV0L2l1Y3YvYWZfaXVjdi5jYCB0byB1bmRlcnN0YW5kIHRoZSBgaXVjdl9zayhzayktXHUwMDNldHJhbnNwb3J0YCBhc3NpZ25tZW50IGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGlzIG5ldyBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODowOC4yNTIwMTk5M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4OTgwMjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYW5zcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTEwNz1zdGF0aWMgaW5saW5lIHZvaWQgbG93X25tY3B5KHVuc2lnbmVkIGNoYXIgKmRzdCwgY2hhciAqc3JjKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOC0gKlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTk6ICogRm9yIElVQ1ZfSVBSTURBVEEsIEFGX0lVQ1YgdXNlcyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb24gdG8gdHJhbnNwb3J0IHNvY2tldFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjAtICogZGF0YTpcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjY9c3RhdGljIGlubGluZSBpbnQgaXVjdl9iZWxvd19tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MS1cXHRcXHRyZXR1cm4gMTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyOlxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzMtXFx0XFx0cmV0dXJuIChhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0KSBcXHUwMDNjIGl1Y3YtXFx1MDAzZXBhdGgtXFx1MDAzZW1zZ2xpbSk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTgyPXN0YXRpYyB2b2lkIGl1Y3Zfc29ja193YWtlX21zZ2xpbShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTk0LS8qXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE5NTogKiBhZml1Y3ZfaHNfc2VuZCgpIC0gc2VuZCBhIG1lc3NhZ2UgdGhyb3VnaCBIaXBlclNvY2tldHMgdHJhbnNwb3J0XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5Ni0gKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0zMzU9c3RhdGljIHZvaWQgaXVjdl9zZXZlcl9wYXRoKHN0cnVjdCBzb2NrICpzaywgaW50IHdpdGhfdXNlcl9kYXRhKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTM2Ny1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzY4Oi8qIFNlbmQgY29udHJvbGxpbmcgZmxhZ3MgdGhyb3VnaCBhbiBJVUNWIHNvY2tldCBmb3IgSElQRVIgdHJhbnNwb3J0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTM2OS1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9jdHJsKHN0cnVjdCBzb2NrICpzaywgdTggZmxhZ3MpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Mzk1PXN0YXRpYyB2b2lkIGl1Y3Zfc29ja19jbG9zZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDA4LVxcdGNhc2UgSVVDVl9DT05ORUNURUQ6XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQwOTpcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDEwLVxcdFxcdFxcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfRklOKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2VybilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTMtXFx0aWYgKHByX2l1Y3YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5NDpcXHRcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5NS1cXHRlbHNlXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5NjpcXHRcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTctXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NTgyPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjE1LVxcdFxcdGlmICghbWVtY21wKHNhLVxcdTAwM2VzaXVjdl91c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCkpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjYxNjpcXHRcXHRcXHRnb3RvIHZtX2JpbmQ7IC8qIFZNIElVQ1YgdHJhbnNwb3J0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTYxNy1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjE4OlxcdC8qIHRyeSBoaXBlciB0cmFuc3BvcnQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjE5LVxcdG1lbWNweSh1aWQsIHNhLVxcdTAwM2VzaXVjdl91c2VyX2lkLCBzaXplb2YodWlkKSk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjMzLVxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IElVQ1ZfQk9VTkQ7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjYzNDpcXHRcXHRcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MzUtXFx0XFx0XFx0aWYgKCFpdWN2LVxcdTAwM2Vtc2dsaW1pdClcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDctXFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gSVVDVl9CT1VORDtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjQ4OlxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQ5LVxcdFxcdHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY1PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzMtXFx0bWVtY3B5KGl1Y3YtXFx1MDAzZXNyY191c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY3NDpcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3NS1cXHRzay1cXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTczMz1zdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc0Ny1cXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IElVQ1ZfT1BFTiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NDg6XFx0ICAgIGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDktXFx0XFx0cmV0dXJuIC1FQkFERkQ7IC8qIGV4cGxpY2l0IGJpbmQgcmVxdWlyZWQgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NjUtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc2NjpcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc2Ny1cXHRcXHRlcnIgPSBpdWN2X3NlbmRfY3RybChzb2NrLVxcdTAwM2VzaywgQUZfSVVDVl9GTEFHX1NZTik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzgwLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3ODE6XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODItXFx0XFx0aXVjdl9zZXZlcl9wYXRoKHNrLCAwKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz05MTY9c3RhdGljIGludCBpdWN2X3NvY2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTk4LVxcdCAqIGZvciBTT0NLX1NUUkVBTSB3ZSBtaWdodCB3YW50IHRvIGltcHJvdmUgaXQgaW4gZnV0dXJlICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjk5OTpcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTAwMC1cXHRcXHRoZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIpICtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDQzLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDQ0OlxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDQ1LVxcdFxcdGF0b21pY19pbmMoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19zZW50KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDUwLVxcdFxcdH1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA1MTpcXHR9IGVsc2UgeyAvKiBDbGFzc2ljIFZNIElVQ1YgdHJhbnNwb3J0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTItXFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNml1Y3YtXFx1MDAzZXNlbmRfc2tiX3EsIHNrYik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTIzNz1zdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzA4LVxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEzMDk6XFx0XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMTAtXFx0XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MTg9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDQzLVxcdCAgICBzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9DT05ORUNURUQpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ0NDpcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDQ1LVxcdFxcdFxcdHR4bXNnLmNsYXNzID0gMDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDY3LVxcdGlmIChob3cgPT0gUkNWX1NIVVRET1dOIHx8IGhvdyA9PSBTSFVURE9XTl9NQVNLKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0Njg6XFx0XFx0aWYgKChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDY5LVxcdFxcdCAgICBpdWN2LVxcdTAwM2VwYXRoKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NjYtXFx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2Njc6XFx0bml1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY2OC1cXHRuc2stXFx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xODMxPXN0YXRpYyBzdHJ1Y3QgaXVjdl9oYW5kbGVyIGFmX2l1Y3ZfaGFuZGxlciA9IHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODM5LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODQwOi8qKioqKioqKioqKioqKioqKiBIaXBlclNvY2tldHMgdHJhbnNwb3J0IGNhbGxiYWNrcyAqKioqKioqKioqKioqKioqKioqKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg0MS1zdGF0aWMgdm9pZCBhZml1Y3Zfc3dhcF9zcmNfZGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4NjQ9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODk2LVxcdGl1Y3Zfc29ja19pbml0KG5zaywgc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODk3OlxcdG5pdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODk4LVxcdG5pdWN2LVxcdTAwM2Vtc2dsaW1pdCA9IGl1Y3YtXFx1MDAzZW1zZ2xpbWl0O1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIwMTI9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwMzItXFx0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwMzM6XFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjAzNC1cXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDU0LSAqIGFmaXVjdl9oc19yY3YoKSAtIGJhc2UgZnVuY3Rpb24gZm9yIGFycml2aW5nIGRhdGEgdGhyb3VnaCBIaXBlclNvY2tldHNcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1NTogKiAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1Ni0gKiAgICAgICAgICAgICAgICAgICBjYWxsZWQgZnJvbSBuZXRpZiBSWCBzb2Z0aXJxXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjA1OD1zdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDgxLVxcdHNrX2Zvcl9lYWNoKHNrLCBcXHUwMDI2aXVjdl9za19saXN0LmhlYWQpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA4MjpcXHRcXHRpZiAoaXVjdl9zayhzayktXFx1MDAzZXRyYW5zcG9ydCAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDgzLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNjYtICogYWZpdWN2X2hzX2NhbGxiYWNrX3R4bm90aWZ5KCkgLSBoYW5kbGUgc2VuZCBub3RpZmljYXRpb25zIGZyb20gSGlwZXJTb2NrZXRzXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIxNjc6ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE2OC0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6MDguMzcxMDA0NzQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTQxNTkyMzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBIaXBlclNvY2tldHMgUGFja2V0IFJlY2VwdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgYGFmaXVjdl9oc19yY3ZgIGlzIGNsZWFybHkgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBpbmNvbWluZyBwYWNrZXRzLiBJIHNlZSBhIHN1aXRlIG9mIHJlbGF0ZWQgZnVuY3Rpb25zIHRvbzogYGl1Y3Zfc29ja19iaW5kYCwgYGl1Y3Zfc29ja19jb25uZWN0YCwgYGl1Y3Zfc29ja19zZW5kbXNnYCwgYGl1Y3Zfc29ja19yZWN2bXNnYCwgYW5kIHRoZSB2YXJpb3VzIGNhbGxiYWNrIGZ1bmN0aW9ucyBgYWZpdWN2X2hzX2NhbGxiYWNrXypgLiBNYWtlcyBzZW5zZSwgdGhlIHVzdWFsIHNvY2tldCBvcGVyYXRpb25zLlxuXG5Ob3csIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjaGVjayAqd2l0aGluKiBgYWZpdWN2X2hzX3JjdmA6IGBpZiAoaXVjdl9zayhzayktXHUwMDNldHJhbnNwb3J0ICE9IEFGX0lVQ1ZfVFJBTlNfSElQRVIpYC4gQWgsIHRoYXQncyBjbGV2ZXIuIEl0J3MgZXhwbGljaXRseSBlbnN1cmluZyB0aGF0IGBhZml1Y3ZfaHNfcmN2YCAqb25seSogcHJvY2Vzc2VzIHBhY2tldHMgZm9yIEhpcGVyU29ja2V0cy1iYXNlZCBzb2NrZXRzIChpZGVudGlmaWVkIGJ5IGBBRl9JVUNWX1RSQU5TX0hJUEVSYCksIGFuZCBub3QgZm9yIHRoZSBzdGFuZGFyZCBJVUNWIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeC4gSXQncyBkZXNpZ25lZCB0byBwcmV2ZW50IHBhY2tldCBtaXNyb3V0aW5nLCB3aGljaCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uIG9yIG90aGVyIG5hc3R5IHNpZGUgZWZmZWN0cy4gQWJzb2x1dGVseSwgdGhpcyBpcyBhIGJ1ZyBmaXggdGhhdCB3YXJyYW50cyBmdXp6aW5nLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gYEFGSVVDVmAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24uIE5vdywgbGV0IG1lIHNlZS4uLiBJdCAqZGVwZW5kcyogb24gYFMzOTBgIHdoaWNoIGlzIGFzIGV4cGVjdGVkLCBidXQgd2hhdCBlbHNlPyBPa2F5LCBiYWNrIHRvIGBuZXQvaXVjdi9LY29uZmlnYC4gSGFuZyBvbi4uLiBgZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWYC4gT2theSwgdGhlIGRlZmF1bHQgaXMgYG1gIGlmIGVpdGhlciBgUUVUSF9MM2Agb3IgYElVQ1ZgIGFyZSBlbmFibGVkLiBCdXQgaXQgb25seSAqZGVwZW5kcyogb24gYFMzOTBgLCBzbyBpdCBkb2Vzbid0IHN0cmljdGx5IGRlcGVuZCBvbiBgSVVDVmAuIEFzIGxvbmcgYXMgdGhlIGFyY2ggaXMgczM5MCwganVzdCBlbmFibGluZyBgQUZJVUNWYCBzaG91bGQgYmUgc3VmZmljaWVudC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgYE1ha2VmaWxlYCB0byBjb25maXJtIHRoZSBidWlsZCBydWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6MTguNTEyNjAwMzM5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTIyMzQ1OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQUZJVUNWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0lVQ1YpXFx0Kz0gaXVjdi5vXFxubmV0L2l1Y3YvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfQUZJVUNWKVxcdCs9IGFmX2l1Y3Yub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODoxOC43NjQ4NDA5NjNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0NDQyNDk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBhZl9pdWN2LmNgIENvbXBpbGF0aW9uIERlcGVuZGVuY3kqKlxuXG5SaWdodCwgc28gSSBpbml0aWFsbHkgdGhvdWdodCwgXCJPa2F5LCBgQ09ORklHX0FGSVVDVmAgaXMgYWxsIEkgbmVlZCB0byBnZXQgYGFmX2l1Y3YuY2AgdG8gY29tcGlsZS5cIiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlbiwgYSByZWQgZmxhZyBwb3BwZWQgdXAuIFwiSG9sZCBvbiwgd2hhdCBhYm91dCBgQ09ORklHX0lVQ1ZgPyBJcyB0aGF0IGFsc28gbmVjZXNzYXJ5P1wiIEl0J3MgYSBodW5jaCwgYnV0IHRoZSB3YXkgdGhlc2UgdGhpbmdzIGFyZSBvZnRlbiBzdHJ1Y3R1cmVkLCBgYWZfaXVjdi5jYCAqbWlnaHQqIGRlcGVuZCBvbiBjb3JlIGZ1bmN0aW9ucyBvciBkZWZpbml0aW9ucyBmcm9tIGBpdWN2LmNgLiBUaGlzIGlzIGNvbW1vbiB3aXRoIG5ldHdvcmsgcHJvdG9jb2xzLiBUbyBiZSBzdXJlLCBJIG5lZWQgdG8gdmVyaWZ5IGlmIHRoZXJlIGlzIGFuIGV4cGxpY2l0IGxpbmthZ2UuIEkgc2hvdWxkIHNlZSBpZiBgYWZfaXVjdi5jYCBpcyB1c2luZyBmdW5jdGlvbnMgdGhhdCBhcmUgZGVmaW5lZCBpbiBgaXVjdi5jYC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGxvb2sgZm9yIHRob3NlIGRlcGVuZGVuY2llcy4gTGV0J3MgZ28gY2hlY2sgdGhlIHNvdXJjZSBmaWxlIGBuZXQvaXVjdi9hZl9pdWN2LmNgIGZvciBhbnkgZnVuY3Rpb24gY2FsbHMgc3RhcnRpbmcgd2l0aCBgaXVjdl9gLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZGVmaW5pdGl2ZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjQ4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6MjQuMjA5MjY4MjE5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg3ODQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2X3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9MjMwMT1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMjYtXFx0aWYgKHByX2l1Y3YpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMyNzpcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VpdWN2X3JlZ2lzdGVyKFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzI4LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU4OjI0LjI1NDE1MTgxNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTMyMjQ4MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVVDViBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUgc25pcHBldCBpcyB1c2luZyBgcHJfaXVjdi1cdTAwM2VpdWN2X3JlZ2lzdGVyYC4gSW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgc2VlIHRoYXQgYHByX2l1Y3ZgIGlzIGEgcG9pbnRlci4gVGhhdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBkZXJlZmVyZW5jZSBoZXJlLCB3aGljaCBpbXBsaWVzIGl0J3MgcG9pbnRpbmcgdG8gc29tZSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBhIG1lbWJlciBuYW1lZCBgaXVjdl9yZWdpc3RlcmAuIEFscmlnaHQsIGxldCdzIGJhY2sgdXAgYSBzdGVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgcHJfaXVjdmAgaXMgYWN0dWFsbHkgKmRlZmluZWQqLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBpdHMgZGVjbGFyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmUgaXQgcG9pbnRzIHRvLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgYGl1Y3ZfcmVnaXN0ZXJgIG9wZXJhdGlvbi4gTGV0J3MgZmluZCB0aGF0IGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTc2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6MzAuMTg2NDAyMTY5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ0NDc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcl9pdWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9NDI9c3RhdGljIHN0cnVjdCBwcm90byBpdWN2X3Byb3RvID0ge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ3LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0ODpzdGF0aWMgc3RydWN0IGl1Y3ZfaW50ZXJmYWNlICpwcl9pdWN2O1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OS1zdGF0aWMgc3RydWN0IGl1Y3ZfaGFuZGxlciBhZl9pdWN2X2hhbmRsZXI7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MzM1PXN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDctXFx0XFx0XFx0QVNDRUJDKHVzZXJfZGF0YSwgc2l6ZW9mKHVzZXJfZGF0YSkpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNDg6XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDktXFx0XFx0fSBlbHNlXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjM1MDpcXHRcXHRcXHRwcl9pdWN2LVxcdTAwM2VwYXRoX3NldmVyKHBhdGgsIE5VTEwpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNTEtXFx0XFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkyLVxcdG1lbXNldChcXHUwMDI2aXVjdi1cXHUwMDNlaW5pdCwgMCwgc2l6ZW9mKGl1Y3YtXFx1MDAzZWluaXQpKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDkzOlxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTQtXFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTYxMy1cXHQvKiBCaW5kIHRoZSBzb2NrZXQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjE0OlxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MTUtXFx0XFx0aWYgKCFtZW1jbXAoc2EtXFx1MDAzZXNpdWN2X3VzZXJfaWQsIGl1Y3ZfdXNlcmlkLCA4KSlcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDItdm1fYmluZDpcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjQzOlxcdGlmIChwcl9pdWN2KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY0NC1cXHRcXHQvKiB1c2UgbG9jYWwgdXNlcmlkIGZvciBiYWNrd2FyZCBjb21wYXQgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02NjU9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY2OS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjcwOlxcdGlmICh1bmxpa2VseSghcHJfaXVjdikpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3MS1cXHRcXHRyZXR1cm4gLUVQUk9UTztcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02ODc9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTcwNS1cXHR9XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcwNjpcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX2Nvbm5lY3QoaXVjdi1cXHUwMDNlcGF0aCwgXFx1MDAyNmFmX2l1Y3ZfaGFuZGxlcixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzA3LVxcdFxcdFxcdFxcdCAgICBzYS1cXHUwMDNlc2l1Y3ZfdXNlcl9pZCwgTlVMTCwgdXNlcl9kYXRhLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTkwNT1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9pcHJtKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsIHN0cnVjdCBpdWN2X21lc3NhZ2UgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05MTEtXFx0cHJtZGF0YVs3XSA9IDB4ZmYgLSAodTgpIHNrYi1cXHUwMDNlbGVuO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo5MTI6XFx0cmV0dXJuIHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2Vfc2VuZChwYXRoLCBtc2csIElVQ1ZfSVBSTURBVEEsIDAsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTkxMy1cXHRcXHRcXHRcXHQgKHZvaWQgKikgcHJtZGF0YSwgOCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTE2PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNjktXFx0XFx0XFx0aWYgKGVyciA9PSAweDE1KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNzA6XFx0XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihpdWN2LVxcdTAwM2VwYXRoLCBOVUxMKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA3MS1cXHRcXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZpdWN2LVxcdTAwM2Vza2JzX2luX3htaXQpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwODgtXFx0XFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDg5OlxcdFxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVxcdTAwM2VwYXRoLCBcXHUwMDI2dHhtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwOTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIElVQ1ZfSVBCVUZMU1QsIDAsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA5Mi1cXHRcXHR9IGVsc2UgeyAvKiBub24tSVBSTSBMaW5lYXIgc2tiICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwOTM6XFx0XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZ0eG1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA5NC1cXHRcXHRcXHRcXHRcXHQwLCAwLCAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4pO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTExNTg9c3RhdGljIHZvaWQgaXVjdl9wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExODktXFx0XFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTkwOlxcdFxcdFxcdHJjID0gcHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9yZWNlaXZlKHBhdGgsIG1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE5MS1cXHRcXHRcXHRcXHRcXHQgICAgICBJVUNWX0lQQlVGTFNULFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOTMtXFx0XFx0fSBlbHNlIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE5NDpcXHRcXHRcXHRyYyA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2VfcmVjZWl2ZShwYXRoLCBtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgbXNnLVxcdTAwM2VmbGFncyBcXHUwMDI2IElVQ1ZfSVBSTURBVEEsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTQxOD1zdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NDYtXFx0XFx0XFx0dHhtc2cudGFnID0gMDtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ0NzpcXHRcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cXHUwMDNlcGF0aCwgXFx1MDAyNnR4bXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDQ4LVxcdFxcdFxcdFxcdElVQ1ZfSVBSTURBVEEsIDAsICh2b2lkICopIGlwcm1fc2h1dGRvd24sIDgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NjktXFx0XFx0ICAgIGl1Y3YtXFx1MDAzZXBhdGgpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3MDpcXHRcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX3F1aWVzY2UoaXVjdi1cXHUwMDNlcGF0aCwgTlVMTCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzEtXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjA3PXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0NC1cXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IElVQ1ZfTElTVEVOKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NDU6XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjQ2LVxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTEtXFx0aWYgKHNrX2FjY2VwdHFfaXNfZnVsbChzaykpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY1MjpcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTMtXFx0XFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY1OS1cXHRpZiAoIW5zaykge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjYwOlxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY2MS1cXHRcXHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjg1LVxcdHBhdGgtXFx1MDAzZW1zZ2xpbSA9IGl1Y3YtXFx1MDAzZW1zZ2xpbWl0O1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjg2OlxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfYWNjZXB0KHBhdGgsIFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIG51c2VyX2RhdGEsIG5zayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2ODctXFx0aWYgKGVycikge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE3MTI9c3RhdGljIHZvaWQgaXVjdl9jYWxsYmFja19yeChzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2cpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcyMC1cXHRpZiAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgUkNWX1NIVVRET1dOKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MjE6XFx0XFx0cHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9yZWplY3QocGF0aCwgbXNnKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcyMi1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjMwMT1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTItXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMTM6XFx0XFx0cHJfaXVjdiA9IFxcdTAwMjZpdWN2X2lmO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzE0LVxcdH0gZWxzZSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTUtXFx0XFx0bWVtc2V0KFxcdTAwMjZpdWN2X3VzZXJpZCwgMCwgc2l6ZW9mKGl1Y3ZfdXNlcmlkKSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMTY6XFx0XFx0cHJfaXVjdiA9IE5VTEw7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTctXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMjUtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMjY6XFx0aWYgKHByX2l1Y3YpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMyNzpcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VpdWN2X3JlZ2lzdGVyKFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzI4LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzOS1vdXRfbm90aWZpZXI6XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzNDA6XFx0aWYgKHByX2l1Y3YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzNDE6XFx0XFx0cHJfaXVjdi1cXHUwMDNlaXVjdl91bnJlZ2lzdGVyKFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzQyLW91dF9zb2NrOlxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzNTA9c3RhdGljIHZvaWQgX19leGl0IGFmaXVjdl9leGl0KHZvaWQpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNTEte1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzUyOlxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzUzOlxcdFxcdHByX2l1Y3YtXFx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjM1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6MzAuMjM0ODUzMTk1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5NTgzNzc4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJVUNWIEluaXRpYWxpemF0aW9uIExvZ2ljKipcblxuT2theSwgc28gYHByX2l1Y3ZgIGdldHMgYXNzaWduZWQgdGhlIGFkZHJlc3Mgb2YgYGl1Y3ZfaWZgICpvbmx5KiBpZiBgc21hcGlfZ2V0X2l1Y3ZfdXNlcmlkYCByZXR1cm5zIHN1Y2Nlc3NmdWxseS4gT3RoZXJ3aXNlLCBpdCdzIHNldCB0byBgTlVMTGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggYXQgZmlyc3QgZ2xhbmNlLCBidXQgbGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgcGllY2VzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gdmlzdWFsaXppbmcgdGhpcyBjb3JyZWN0bHkuXG5cbkhvbGQgb24uLi4gYGl1Y3ZfaWZgLi4uIHRoYXQncyBkZWNsYXJlZCBhbmQgKmV4cG9ydGVkKiBmcm9tIGBpdWN2LmNgLCBpc24ndCBpdD8gR290dGEgcXVpY2tseSBjb25maXJtIHRoYXQuIE5vIGFzc3VtcHRpb25zIGhlcmUsIEknbGwgZ28gY2hlY2sgdGhhdCBtb2R1bGUncyBkZWZpbml0aW9uLiBOZWVkIHRvIHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTYzOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU4OjM5LjE5MzIzMzYyOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2MDEwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdl9pZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTIzMDE9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzEyLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzEzOlxcdFxcdHByX2l1Y3YgPSBcXHUwMDI2aXVjdl9pZjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMxNC1cXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODozOS4yMzg4Mzg1NTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3MDAyNzYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIElVQ1YgSW50ZXJmYWNlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIElVQ1YgKEludGVyLVVzZXIgQ29tbXVuaWNhdGlvbiBWZWhpY2xlKSBpbnRlcmZhY2UgaGVyZS4gVGhlIHNwZWNpZmljIHBhcnQgSSdtIGZvY3VzaW5nIG9uIG5vdyBpcyB0aGUgYGl1Y3ZfaWZgLiBOYXR1cmFsbHksIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBkZWZpbml0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgc3RydWN0dXJlIG9yIGZ1bmN0aW9uIGFjdHVhbGx5ICppcyouIFNvLCBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZTogYGluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oYC4gSSdtIGhvcGluZyB0aGF0IGhlYWRlciBmaWxlIGhvbGRzIHRoZSBrZXkgLSBpdCAqc2hvdWxkKiBkZWZpbmUgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgSVVDViBpbnRlcmZhY2UsIGluY2x1ZGluZyBgaXVjdl9pZmAsIHdoZXRoZXIgaXQncyBhIHN0cnVjdHVyZSBkZWZpbmluZyBkYXRhIGZvciB0aGUgaW50ZXJmYWNlLCBhbiBlbnVtIG9mIG1ldGhvZHMsIG9yIGV2ZW4gYW4gZXh0ZXJuYWwgcG9pbnRlciBmb3IgdXNlLiBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIHVucmF2ZWxpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMzgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODo0My40MDg4Njg3OTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjU1OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml1Y3ZfaWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvaXVjdi9pdWN2LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXVjdi9pdWN2Lmg9MjY5PXN0cnVjdCBpdWN2X2ludGVyZmFjZSB7XFxuLS1cXG5pbmNsdWRlL25ldC9pdWN2L2l1Y3YuaC0zMDAtXFxuaW5jbHVkZS9uZXQvaXVjdi9pdWN2Lmg6MzAxOmV4dGVybiBzdHJ1Y3QgaXVjdl9pbnRlcmZhY2UgaXVjdl9pZjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6NDMuNDUyNTI5MDM1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NDc0NDAzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQUZJVUNWIGFuZCBJVUNWIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgaXVjdl9pZmAgZnVuY3Rpb24sIGFuZCBJIHNlZSBpdCdzIGRlZmluZWQgaW4gYGl1Y3YuY2AuIFJpZ2h0IGF3YXksIHRoaXMgc2NyZWFtcyBkZXBlbmRlbmN5LiBMb2dpY2FsbHksIGl0IHNlZW1zIHRoYXQgaWYgYEFGSVVDVmAgdXNlcyBgaXVjdl9pZmAsIHRoZW4gYEFGSVVDVmAgaW5oZXJlbnRseSBkZXBlbmRzIG9uIGBJVUNWYC4gQnV0IHRoZW4gSSBoYXZlIHRoaXMgbmFnZ2luZyBmZWVsaW5nLCBsaWtlIEknbSBtaXNzaW5nIHNvbWV0aGluZy4uLiB0aGUgYnVpbGQgc3lzdGVtIGNhbiBiZSB0cmlja3kuXG5cbldhaXQsIGNhbiBgQUZJVUNWYCAqcmVhbGx5KiBiZSBjb21waWxlZCB3aXRob3V0IGBJVUNWYD8gVGhhdCBqdXN0IGRvZXNuJ3Qgc2l0IHJpZ2h0IHdpdGggbWUuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBgbmV0L2l1Y3YvS2NvbmZpZ2AgZmlsZS4gTGV0J3Mgc2VlLi4uIEFoYSFcblxuYGBgXG5jb25maWcgQUZJVUNWXG5cdGRlcGVuZHMgb24gUzM5MFxuXHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcbmBgYFxuXG5BaCwgdGhlcmUgaXQgaXMhIFRoZSBrZXkgaXMgdGhhdCBgQUZJVUNWYCBjYW4gYmUgYnVpbHQgYXMgYSBtb2R1bGUsIGJ1dCBkZXBlbmRzIG9uIGBJVUNWYCBiZWluZyBlaXRoZXIgYnVpbHQtaW4gKCBgeWAgKSBvciBhdmFpbGFibGUgYXMgYSBtb2R1bGUgKCBgbWAgKS4gQnV0IGlmIGBJVUNWYCBpcyAqbm90KiBlbmFibGVkIGF0IGFsbCwgdGhlbiBgaXVjdl9pZmAgd29uJ3QgYmUgYXZhaWxhYmxlLCBhbmQgYEFGSVVDVmAgd29uJ3QgYmUgYWJsZSB0byBjb21waWxlLCBhcyB0aGUgc3ltYm9sIHdpbGwgYmUgdW5kZWZpbmVkLiBUaGlzIGNvbmRpdGlvbmFsIGxvZ2ljIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjYW4gdHJpcCB5b3UgdXAgaW4gdGhlc2UgYnVpbGQgc3lzdGVtcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgaXVjdl9pZmAgaXMgYWN0dWFsbHkgY29uZGl0aW9uYWxseSBjb21waWxlZCBkZXBlbmRpbmcgb24gYElVQ1ZgIGJlaW5nIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzkxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU4OjUwLjE5OTk3MTkzNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0NTcyMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdl9pZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvaXVjdi5jPTE4MDE9c3RhdGljIHZvaWQgaXVjdl9leHRlcm5hbF9pbnRlcnJ1cHQoc3RydWN0IGV4dF9jb2RlIGV4dF9jb2RlLFxcbi0tXFxubmV0L2l1Y3YvaXVjdi5jLTE4MzMtXFxubmV0L2l1Y3YvaXVjdi5jOjE4MzQ6c3RydWN0IGl1Y3ZfaW50ZXJmYWNlIGl1Y3ZfaWYgPSB7XFxubmV0L2l1Y3YvaXVjdi5jLTE4MzUtXFx0Lm1lc3NhZ2VfcmVjZWl2ZSA9IGl1Y3ZfbWVzc2FnZV9yZWNlaXZlLFxcbi0tXFxubmV0L2l1Y3YvaXVjdi5jLTE4NTItfTtcXG5uZXQvaXVjdi9pdWN2LmM6MTg1MzpFWFBPUlRfU1lNQk9MKGl1Y3ZfaWYpO1xcbm5ldC9pdWN2L2l1Y3YuYy0xODU0LVxcbi0tXFxubmV0L2l1Y3YvaXVjdi5jPTE4NjI9c3RhdGljIGludCBfX2luaXQgaXVjdl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9pdWN2LmMtMTkwMi1cXHRcXHRnb3RvIG91dF9yZWJvb3Q7XFxubmV0L2l1Y3YvaXVjdi5jOjE5MDM6XFx0aXVjdl9pZi5yb290ID0gaXVjdl9yb290O1xcbm5ldC9pdWN2L2l1Y3YuYzoxOTA0OlxcdGl1Y3ZfaWYuYnVzID0gXFx1MDAyNml1Y3ZfYnVzO1xcbm5ldC9pdWN2L2l1Y3YuYy0xOTA1LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODo1MC4yNjM0MzQ4MDlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2NjUwMjM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBIFF1aWNrIENvZGUgQ29udW5kcnVtKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGRvZXNuJ3QgcXVpdGUgaml2ZSBoZXJlLiBJZiBJJ20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgdGhlIEludGVncmF0ZWQgVXNlciBDb21tdW5pY2F0aW9uIFZlaGljbGUgKGBJVUNWYCkgZnVuY3Rpb25hbGl0eSBpc24ndCBzdXBwb3NlZCB0byBiZSBhY3RpdmUsIHJpZ2h0PyBTbywgaG93IGluIHRoZSB3b3JsZCBpcyB0aGUgYGFmX2l1Y3YuY2AgZmlsZSBldmVuIGNvbXBpbGluZz8gVGhhdCBzZWVtc+KApnVuZXhwZWN0ZWQuIExldCdzIGRpZyBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBgaW5jbHVkZS9uZXQvaXVjdi9pdWN2LmhgIGhlYWRlciBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuIEkgaGF2ZSBhIGh1bmNoIHRoZSBpc3N1ZSBpcyBsaWtlbHkgcm9vdGVkIHRoZXJlLiBUaW1lIHRvIGludmVzdGlnYXRlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI4MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU4OjU0LjYyOTk0MDE2NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMDIxMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdl9pZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9pdWN2L2l1Y3YuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pdWN2L2l1Y3YuaD0yNjk9c3RydWN0IGl1Y3ZfaW50ZXJmYWNlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oLTMwMC1cXG5pbmNsdWRlL25ldC9pdWN2L2l1Y3YuaDozMDE6ZXh0ZXJuIHN0cnVjdCBpdWN2X2ludGVyZmFjZSBpdWN2X2lmO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODo1NC42NzI5NDg4MzFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUwODY1NDYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBCbG9jayoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgbXkgYnJhaW4ganVtcHMgdG8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW4gYCNpZmRlZiBDT05GSUdfSVVDVmAgd3JhcHBlZCBhcm91bmQgdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24uIFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgSSdtIGNoZWNraW5nLiBJZiBpdCAqaXMqIHRoZXJlLCB0aGF0IHRlbGxzIG1lIHRoZSBjb21waWxlciBvbmx5IGluY2x1ZGVzIHRoaXMgZnVuY3Rpb25hbGl0eSBpZiB0aGUgYENPTkZJR19JVUNWYCBwcmVwcm9jZXNzb3IgbWFjcm8gaXMgZGVmaW5lZC4gVGhhdCdzIGNydWNpYWwgaW5mb3JtYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgY29kZSBibG9jay4gRGV0ZXJtaW5pbmcgdGhpcyBjb25kaXRpb25hbCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTkzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MDEuMTgxNjA1NzU2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU1NjIwNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lVQ1ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvaXVjdi9pdWN2LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU5OjAxLjIzMDE2OTMwMVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjc3MTc0ODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBJVUNWIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgSVVDViBpbXBsZW1lbnRhdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIsIHNwZWNpZmljYWxseSwgdGhlIGBuZXQvaXVjdi9hZl9pdWN2LmNgIGZpbGUuIFRoaXMgaXMgdGhlIGxpa2VseSBwbGFjZSB3aGVyZSBJJ2xsIGZpbmQgdGhlIGNvcmUgSVVDViBmdW5jdGlvbmFsaXR5IGRlZmluZWQuIEknbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBhIGNvbmRpdGlvbmFsIGNoZWNrLiBTcGVjaWZpY2FsbHksIEknbSBhZnRlciBgSVNfRU5BQkxFRChDT05GSUdfSVVDVilgLiBUaGlzIGlzIHRoZSB0eXBpY2FsIG1hY3JvIGZvciB2ZXJpZnlpbmcgdGhhdCB0aGUgYENPTkZJR19JVUNWYCBLY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkIGR1cmluZyB0aGUgYnVpbGQuIFRoaXMgdGVsbHMgbWUgaWYgdGhlIElVQ1Ygc3VwcG9ydCBoYXMgYmVlbiBjb25maWd1cmVkIGludG8gdGhpcyBrZXJuZWwgYnVpbGQuIFRoaXMgaXMgdGhlICpmaXJzdCogc3RlcCBpbiB1bmRlcnN0YW5kaW5nIG9yIHRyb3VibGVzaG9vdGluZyBhbnkgSVVDVi1yZWxhdGVkIGlzc3VlIC0gaXQgZGljdGF0ZXMgd2hldGhlciBJIGNhbiBleHBlY3QgYW55IG9mIHRoZSBJVUNWIGNvZGUgdG8gYmUgYWN0aXZlLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhhdCBtYWNybyAqZmlyc3QqLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc5NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU5OjA2LjUwNzM0NzA2N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2Nzk2NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lVQ1ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzAxPXN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwNC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMwNTpcXHRpZiAobWFjaGluZV9pc192bSgpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDYtXFx0XFx0Y3BjbWQoXFxcIlFVRVJZIFVTRVJJRFxcXCIsIGl1Y3ZfdXNlcmlkLCBzaXplb2YoaXVjdl91c2VyaWQpLCBcXHUwMDI2ZXJyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MDYuNTUxMDMzNTMyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTI3MTQ0MzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBJVUNWIEhpcGVyU29ja2V0cyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpYCBpcyB1c2VkIGluIGBhZl9pdWN2LmNgLiBUaGlzIG1lYW5zIHRoYXQgd2UgY2FuIGJ1aWxkIHRoZSBgQUZJVUNWYCBzdWJzeXN0ZW0gd2l0aG91dCB0aGUgY29yZSBgSVVDVmAgZnVuY3Rpb25hbGl0eS4gU2luY2UgdGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIEhpcGVyU29ja2V0cywgYW5kIHdlJ3JlIGRlYWxpbmcgd2l0aCBgQUZfSVVDVl9UUkFOU19ISVBFUmAsIG9ubHkgYENPTkZJR19BRklVQ1ZgIGlzIHJlbGV2YW50IGhlcmUuIEhvd2V2ZXIsIGBDT05GSUdfQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBoYXJkd2FyZSBjb250ZXh0LlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIHRlbGwgbWUgdG8gcmV0dXJuIGBBRklVQ1ZgIGluIGBFbmFibGVDb25maWdzYCwgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeC4gVGhhdCdzIGVhc3kgZW5vdWdoLiAgU28sIGBBRklVQ1ZgIGl0IGlzLiAgTm90aGluZyBlbHNlIGlzIG5lZWRlZCBmb3IgdGhpcyBzcGVjaWZpYyBwYXRjaC5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBgYWZpdWN2X2hzX3JjdmAgaXMgdGhlIGtleS4gVGhlbiB0aGVyZSdzIGBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luYCBhbmQgYGFmaXVjdl9oc19jYWxsYmFja19yeGAsIHJlbGF0ZWQgdG8gSGlwZXJTb2NrZXRzLiBBbmQgdGhlbiB0aGVyZSBhcmUgYGl1Y3Zfc29ja19iaW5kYCwgYGl1Y3Zfc29ja19jb25uZWN0YCwgYGl1Y3Zfc29ja19zZW5kbXNnYCwgYGl1Y3Zfc29ja19yZWN2bXNnYFxuXG5BZnRlciByZXZpZXdpbmcgdGhlIHBhdGNoLCBJIHNlZSB0aGF0IHRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpcyB3aXRoaW4gYGFmaXVjdl9oc19yY3ZgLiBJIGRvdWJsZS1jaGVja2VkIGlmIGBhZml1Y3ZfaHNfcmN2YCBpcyBzdGF0aWMuIFllcywgaXQgaXMgZGVjbGFyZWQgc3RhdGljLCBidXQgaXRzIGFkZHJlc3MgaXMgdGFrZW4gYW5kIHBhc3NlZCB0byBgZGV2X2FkZF9wYWNrYC4gVGhpcyBtZWFucyBpdCdzIGFuIGVudHJ5IHBvaW50LCBub3QgaW5saW5lZCwgYW5kIGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiAgU28gaXQncyBzdWl0YWJsZSB0byBpbmNsdWRlLlxuXG5JIGV4YW1pbmVkIGBpdWN2X3NvY2tfYmluZGAsIGBpdWN2X3NvY2tfY29ubmVjdGAsIGV0Yy4gVGhleSBhcmUgc3RhdGljIHRvbywgYnV0IHRoZXkncmUgcmVnaXN0ZXJlZCBpbiBgcHJvdG9fb3BzYCwgc28gdGhhdCdzIGFjY2VwdGFibGUuXG5cblNvIG15IFwiRm9jdXNTeW1ib2xzXCIgYXJlOiAgYGFmaXVjdl9oc19yY3ZgLiBXaGlsZSBgYWZpdWN2X2hzX2NhbGxiYWNrX3N5bmAgYW5kIGBhZml1Y3ZfaHNfY2FsbGJhY2tfcnhgIGFyZSBjYWxsZWQgYnkgYGFmaXVjdl9oc19yY3ZgLCBpbmNsdWRpbmcgYGFmaXVjdl9oc19yY3ZgIGlzIHRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaC5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBhIGZ1bmN0aW9uYWwgZml4LiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGFmaXVjdl9oc19yY3ZgIHRvIGluY2x1ZGUgYSB0cmFuc3BvcnQgdHlwZSBjaGVjay4gSXQgZW5zdXJlcyB0aGF0IEhpcGVyU29ja2V0cyBwYWNrZXRzIGFyZW4ndCBwcm9jZXNzZWQgYnkgc29ja2V0cyB0aGF0IGFyZW4ndCB1c2luZyB0aGUgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCwgc28gSSdtIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGhlcmUuXG5cbkNydWNpYWxseSwgdGhpcyBpcyByZWFjaGFibGUgaW4gUUVNVSEgczM5MHggaXMgc3VwcG9ydGVkIGJ5IFFFTVUsIGFuZCBTeXprYWxsZXIgaXMgYWN0aXZlbHkgZnV6emluZyBvbiBpdC4gVGhlIGBBRklVQ1ZgIGNvbmZpZyBjYW4gYmUgZW5hYmxlZC4gSSBjYW4gc2VuZCBhIHBhY2tldCB3aXRoIGBFVEhfUF9BRl9JVUNWYCB2aWEgYEFGX1BBQ0tFVGAgb3IgYHR1bi90YXBgIHRvIGdldCB0byB0aGlzIGZ1bmN0aW9uLiBUaGlzIGlzIGRlZmluaXRlbHkgZnV6emFibGUuXG5cblRoZXJlZm9yZSwgaGVyZSBhcmUgdGhlIHJlc3VsdHM6XG4tIFdvcnRoRnV6emluZzogdHJ1ZVxuLSBSZWFzb25pbmc6IFRoZSBwYXRjaCBhZGRzIGEgdHJhbnNwb3J0IHR5cGUgY2hlY2sgaW4gYGFmaXVjdl9oc19yY3ZgIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBIaXBlclNvY2tldHMgcGFja2V0cyBmb3Igc29ja2V0cyBub3QgdXNpbmcgdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBuZXR3b3JrIHByb3RvY29sIHBhY2tldCBoYW5kbGVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJhdyBzb2NrZXRzIG9yIHR1bi90YXAgZGV2aWNlcyBieSBzZW5kaW5nIHBhY2tldHMgd2l0aCBwcm90b2NvbCBFVEhfUF9BRl9JVUNWLlxuLSBGb2N1c1N5bWJvbHM6IFtcImFmaXVjdl9oc19yY3ZcIl1cbi0gRW5hYmxlQ29uZmlnczogW1wiQUZJVUNWXCJdXG5cbmBBRklVQ1ZgIGlzIHRoZSBvbmx5IG5lZWRlZCBjb25maWcsIHNpbmNlIGl0J3Mgc291cmNlZCBmcm9tIGBuZXQvaXVjdi9LY29uZmlnYCwgd2hpY2ggaW5jbHVkZXMgYG5ldC9LY29uZmlnYCwgYW5kIGRlcGVuZHMgb24gYFMzOTBgLlxuXG5gYWZpdWN2X2hzX3JjdmAgaXMgc3VmZmljaWVudCBmb3IgdGhlIEZvY3VzU3ltYm9scy5cblxuSSdtIHJlYWR5IHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjI0LCJPdXRwdXRUb2tlbnMiOjEyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MjQuNjc4MTgwMzgzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg5MjY2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGSVVDVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmaXVjdl9oc19yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdHJhbnNwb3J0IHR5cGUgY2hlY2sgaW4gYGFmaXVjdl9oc19yY3ZgIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBIaXBlclNvY2tldHMgcGFja2V0cyBmb3Igc29ja2V0cyBub3QgdXNpbmcgdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBuZXR3b3JrIHByb3RvY29sIHBhY2tldCBoYW5kbGVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJhdyBzb2NrZXRzIG9yIHR1bi90YXAgZGV2aWNlcyBieSBzZW5kaW5nIHBhY2tldHMgd2l0aCBwcm90b2NvbCBFVEhfUF9BRl9JVUNWLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGSVVDVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmaXVjdl9oc19yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdHJhbnNwb3J0IHR5cGUgY2hlY2sgaW4gYGFmaXVjdl9oc19yY3ZgIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBIaXBlclNvY2tldHMgcGFja2V0cyBmb3Igc29ja2V0cyBub3QgdXNpbmcgdGhlIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBuZXR3b3JrIHByb3RvY29sIHBhY2tldCBoYW5kbGVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJhdyBzb2NrZXRzIG9yIHR1bi90YXAgZGV2aWNlcyBieSBzZW5kaW5nIHBhY2tldHMgd2l0aCBwcm90b2NvbCBFVEhfUF9BRl9JVUNWLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1OToyNC43NTcxMTM1MDVaIiwiU2VxIjozNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTkzNzkwNzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MjQuNzU3NTg2MDE1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzOTkzMzE0Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgb25seSBzb2NrZXRzIHdpdGggdGhlIEFGX0lVQ1ZfVFJBTlNfSElQRVIgdHJhbnNwb3J0IHR5cGUgcHJvY2VzcyBpbmNvbWluZyBIaXBlclNvY2tldHMgcGFja2V0cyBpbiBgYWZpdWN2X2hzX3JjdigpYC4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBwYWNrZXRzIGNvdWxkIGJlIGluY29ycmVjdGx5IHJvdXRlZCB0byBzb2NrZXRzIG9mIGEgZGlmZmVyZW50IHRyYW5zcG9ydCB0eXBlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZXNlIHR5cGVzIG9mIGlzc3VlcyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRiYzU2M2IxNWNmZjE5Y2UwNTA5MDg3NjUyZWNmYWJmN2E3NThmNmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzo1NzoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuaW5kZXggZWEwNDdiYWI2NWU3Yy4uNWZiNjc5M2I5YTY0YSAxMDA2NDRcbi0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuY1xuKysrIGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5AQCAtMjA3OSw2ICsyMDc5LDggQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRzayA9IE5VTEw7XG4gXHRyZWFkX2xvY2soXHUwMDI2aXVjdl9za19saXN0LmxvY2spO1xuIFx0c2tfZm9yX2VhY2goc2ssIFx1MDAyNml1Y3Zfc2tfbGlzdC5oZWFkKSB7XG4rXHRcdGlmIChpdWN2X3NrKHNrKS1cdTAwM2V0cmFuc3BvcnQgIT0gQUZfSVVDVl9UUkFOU19ISVBFUilcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKHRyYW5zX2hkci1cdTAwM2VmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKSB7XG4gXHRcdFx0aWYgKCghbWVtY21wKFx1MDAyNml1Y3Zfc2soc2spLVx1MDAzZXNyY19uYW1lLFxuIFx0XHRcdFx0ICAgICB0cmFuc19oZHItXHUwMDNlZGVzdEFwcE5hbWUsIDgpKSBcdTAwMjZcdTAwMjZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU5OjI0Ljc1NzU4NzM5NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTI0NDgzMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBJVUNWIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gSXQgc2VlbXMgdGhleSd2ZSBhZGRlZCBhIGNoZWNrIHdpdGhpbiBhIGxvb3AgdGhhdCBpdGVyYXRlcyB0aHJvdWdoIElVQ1Ygc29ja2V0czogYGlmIChpdWN2X3NrKHNrKS1cdTAwM2V0cmFuc3BvcnQgIT0gQUZfSVVDVl9UUkFOU19ISVBFUikgY29udGludWU7YC4gRXNzZW50aWFsbHksIHRoaXMgc2VlbXMgdG8gZmlsdGVyIHRoZSBzb2NrZXRzIGJhc2VkIG9uIHRoZWlyIHRyYW5zcG9ydCB0eXBlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgIHNvY2tldHMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBsaWtlbHkgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeC4gSXQgcHJldmVudHMgcGFja2V0cyBmcm9tIGJlaW5nIG1pc3Rha2VubHkgZGVsaXZlcmVkIHRvIHNvY2tldHMgdGhhdCBhcmVuJ3Qgb2YgdGhlIGBISVBFUmAgdHJhbnNwb3J0IHR5cGUuXG5cbkkgZG9uJ3Qgc3VzcGVjdCB0aGlzIGlzIHJlbGF0ZWQgdG8gYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gTW9yZSBsaWtlbHksIGl0J3MgYSBsb2dpYyBlcnJvciB0aGF0IGNvdWxkIGxlYWQgdG8gcGFja2V0IG1pc2RpcmVjdGlvbi4gSWYgYSBwYWNrZXQgYXJyaXZlZCwgdGhlIHN5c3RlbSB3b3VsZCBpbmNvcnJlY3RseSB0cnkgdG8gcHJvY2VzcyBpdCB0aHJvdWdoIHRoZSB3cm9uZyBzb2NrZXQgdHlwZS4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgdmFyaWV0eSBvZiBpc3N1ZXMsIGZyb20gdHlwZSBjb25mdXNpb24gdG8gaW5jb3JyZWN0IHByb2Nlc3NpbmcuXG5cbkknbSBub3cgZ29pbmcgdG8gaW52ZXN0aWdhdGUgYGFmaXVjdl9oc19yY3ZgIGluIHRoZSBzYW1lIGZpbGUgdG8gY29uZmlybSBob3cgdGhpcyBuZXcgY2hlY2sgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU5OjMxLjI4MjA3MzEwNloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxNjc2NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZpdWN2X2hzX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTIwMTI9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTMtLypcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1NDogKiBhZml1Y3ZfaHNfcmN2KCkgLSBiYXNlIGZ1bmN0aW9uIGZvciBhcnJpdmluZyBkYXRhIHRocm91Z2ggSGlwZXJTb2NrZXRzXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTUtICogICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1Ny0gKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1ODpzdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1OS1cXHRzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI5Nj1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGl1Y3ZfcGFja2V0X3R5cGUgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTctXFx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI5ODpcXHQuZnVuYyA9IGFmaXVjdl9oc19yY3YsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTktfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MzEuMzMxMjQ3NjYxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MTk2MzE2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgbG9naWMgYnVnIGZpeC4gVGhlIGtleSBpcyB0aGF0IGl0J3MgYWRkaW5nIGEgY2hlY2s6IGBpdWN2X3NrKHNrKS1cdTAwM2V0cmFuc3BvcnQgIT0gQUZfSVVDVl9UUkFOU19ISVBFUmAuIEkgZ2V0IGl0IOKAkyB0aGlzIGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgc29ja2V0cyB0aGF0ICphcmVuJ3QqIHNwZWNpZmljYWxseSBjb25maWd1cmVkIGZvciBISVBFUiB0cmFuc3BvcnQgZnJvbSBzb21laG93IHJlY2VpdmluZyBISVBFUiBwYWNrZXRzLiBTZWVtcyBsaWtlIGEgZ29vZCBwcmFjdGljZSB0byBpbmNsdWRlIGluIGFueSB3ZWxsLWRlc2lnbmVkIHN5c3RlbSwgcmVnYXJkbGVzcy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjb25zaWRlciB1bmluaXRpYWxpemVkIG1lbW9yeSwgc2luY2UgS01TQU4gaXMgYWx3YXlzIHRvcC1vZi1taW5kLiBIb3dldmVyLCBhZnRlciByZXZpZXdpbmcgdGhlIGNvZGUsIHRoaXMgY2hhbmdlIGFwcGVhcnMgbXVjaCBtb3JlIGZvY3VzZWQgb24gcHJldmVudGluZyB0aGUgcG90ZW50aWFsIGZvciBvdXQtb2YtYm91bmRzIGFjY2VzcywgdHlwZSBjb25mdXNpb24sIG9yIGV2ZW4gdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIGlmIGEgbm9uLUhJUEVSIHNvY2tldCAqZGlkKiBlcnJvbmVvdXNseSBwcm9jZXNzIGEgSElQRVIgcGFja2V0LiBTbywgd2hpbGUgaXQncyBpbXBvcnRhbnQgdG8gYmUgdmlnaWxhbnQgYWJvdXQgbWVtb3J5IHNhZmV0eSBpbiBnZW5lcmFsLCBJIGRvbid0IHNlZSBhbnl0aGluZyBoZXJlIHRoYXQgZGlyZWN0bHkgYWRkcmVzc2VzIG9yIHJlc29sdmVzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGxlYWsgaXNzdWVzLlxuXG5gaXVjdl9zayhzaylgIGlzIGp1c3QgYSBjYXN0IHRvIGBzdHJ1Y3QgaXVjdl9zb2NrYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIE5vIHNpZ25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuXG5cbktNU0FOIGZsYWdzIGFyZSB0eXBpY2FsbHkgdXNlZCBmb3IgZGV0ZWN0aW5nIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9ibGVtcyB0aGF0IEkgdXN1YWxseSBzZWUuIEtBU0FOIGlzIHRoZSB0b29sIHRoYXQgd291bGQgbGlrZWx5IGJlIG1vcmUgcmVsZXZhbnQgZm9yIE9PQiwgVUFGLCBhbmQgc2ltaWxhciBpc3N1ZXMuIFRoaXMgcGF0Y2ggZG9lc24ndCBzZWVtIHRvIHRvdWNoIGFueSBLTVNBTiBjb25jZXJucy4gVGhlcmVmb3JlLCBJJ20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDA2LCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1OTozOC43NTA4ODMwOTlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBlbnN1cmUgdGhhdCBvbmx5IHNvY2tldHMgd2l0aCB0aGUgQUZfSVVDVl9UUkFOU19ISVBFUiB0cmFuc3BvcnQgdHlwZSBwcm9jZXNzIGluY29taW5nIEhpcGVyU29ja2V0cyBwYWNrZXRzIGluIGBhZml1Y3ZfaHNfcmN2KClgLiBUaGlzIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIHBhY2tldHMgY291bGQgYmUgaW5jb3JyZWN0bHkgcm91dGVkIHRvIHNvY2tldHMgb2YgYSBkaWZmZXJlbnQgdHJhbnNwb3J0IHR5cGUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdHlwZSBjb25mdXNpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gVGhlc2UgdHlwZXMgb2YgaXNzdWVzIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IG9ubHkgc29ja2V0cyB3aXRoIHRoZSBBRl9JVUNWX1RSQU5TX0hJUEVSIHRyYW5zcG9ydCB0eXBlIHByb2Nlc3MgaW5jb21pbmcgSGlwZXJTb2NrZXRzIHBhY2tldHMgaW4gYGFmaXVjdl9oc19yY3YoKWAuIFRoaXMgZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgcGFja2V0cyBjb3VsZCBiZSBpbmNvcnJlY3RseSByb3V0ZWQgdG8gc29ja2V0cyBvZiBhIGRpZmZlcmVudCB0cmFuc3BvcnQgdHlwZSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byB0eXBlIGNvbmZ1c2lvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBUaGVzZSB0eXBlcyBvZiBpc3N1ZXMgYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowz5n9n[1] Phase: Succeeded StartedAt: 2026-08-13 13:59:49 +0000 UTC FinishedAt: 2026-08-13 13:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 13:59:49 +0000 UTC FinishedAt: 2026-08-13 13:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2] Phase: Succeeded StartedAt: 2026-08-13 13:59:49 +0000 UTC FinishedAt: 2026-08-13 14:50:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 13:59:49 +0000 UTC FinishedAt: 2026-08-13 14:50:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 13:59:49 +0000 UTC FinishedAt: 2026-08-13 13:59:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 13:59:49 +0000 UTC FinishedAt: 2026-08-13 13:59:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowz5n9n/series-workflowz5n9n-convert-artifact-1531531003/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 13:59:59 +0000 UTC FinishedAt: 2026-08-13 14:20:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 13:59:59 +0000 UTC FinishedAt: 2026-08-13 14:20:25 +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:*1b67993d-3df0-485c-ad8d-2fae70adb685,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-workflowz5n9n/series-workflowz5n9n-convert-artifact-1531531003/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": "3dad947b-05fa-4ab0-bf43-6d2b2eb2d2ac", "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-workflowz5n9n/series-workflowz5n9n-build-action-1867251257/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 13:59:59 +0000 UTC FinishedAt: 2026-08-13 14:19:40 +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:*1b67993d-3df0-485c-ad8d-2fae70adb685,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-workflowz5n9n/series-workflowz5n9n-convert-artifact-1531531003/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": "3dad947b-05fa-4ab0-bf43-6d2b2eb2d2ac", "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-workflowz5n9n/series-workflowz5n9n-build-action-1867251257/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 14:20:26 +0000 UTC FinishedAt: 2026-08-13 14:20:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 14:20:28 +0000 UTC FinishedAt: 2026-08-13 14:20:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 14:20:28 +0000 UTC FinishedAt: 2026-08-13 14:20:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 14:20:28 +0000 UTC FinishedAt: 2026-08-13 14:20:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowz5n9n/series-workflowz5n9n-convert-artifact-1079265106/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 14:20:43 +0000 UTC FinishedAt: 2026-08-13 14:22:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 14:20:43 +0000 UTC FinishedAt: 2026-08-13 14:22:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3dad947b-05fa-4ab0-bf43-6d2b2eb2d2ac,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-workflowz5n9n/series-workflowz5n9n-build-action-1867251257/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-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 14:22:44 +0000 UTC FinishedAt: 2026-08-13 14:22:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 14:22:45 +0000 UTC FinishedAt: 2026-08-13 14:22:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 14:22:45 +0000 UTC FinishedAt: 2026-08-13 14:43:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 14:22:45 +0000 UTC FinishedAt: 2026-08-13 14:43:21 +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:*1b67993d-3df0-485c-ad8d-2fae70adb685,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-workflowz5n9n/series-workflowz5n9n-convert-artifact-1079265106/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": "cdf5d6c9-a45d-4995-9ddd-5544677bc16f", "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-workflowz5n9n/series-workflowz5n9n-build-action-2226308582/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 14:22:45 +0000 UTC FinishedAt: 2026-08-13 14:42:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1b67993d-3df0-485c-ad8d-2fae70adb685,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-workflowz5n9n/series-workflowz5n9n-convert-artifact-1079265106/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": "cdf5d6c9-a45d-4995-9ddd-5544677bc16f", "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-workflowz5n9n/series-workflowz5n9n-build-action-2226308582/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 14:43:21 +0000 UTC FinishedAt: 2026-08-13 14:43:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 14:43:21 +0000 UTC FinishedAt: 2026-08-13 14:43:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 14:43:21 +0000 UTC FinishedAt: 2026-08-13 14:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 14:43:21 +0000 UTC FinishedAt: 2026-08-13 14:45:04 +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:*cdf5d6c9-a45d-4995-9ddd-5544677bc16f,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-workflowz5n9n/series-workflowz5n9n-build-action-2226308582/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-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 14:45:14 +0000 UTC FinishedAt: 2026-08-13 14:50:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 14:45:14 +0000 UTC FinishedAt: 2026-08-13 14:50:11 +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":["afiucv_hs_rcv"],"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:*3dad947b-05fa-4ab0-bf43-6d2b2eb2d2ac,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cdf5d6c9-a45d-4995-9ddd-5544677bc16f,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-workflowz5n9n/series-workflowz5n9n-build-action-1867251257/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-workflowz5n9n/series-workflowz5n9n-build-action-2226308582/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 14:45:14 +0000 UTC FinishedAt: 2026-08-13 14:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 14:45:14 +0000 UTC FinishedAt: 2026-08-13 14:45:20 +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":["afiucv_hs_rcv"],"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-workflowz5n9n/series-workflowz5n9n-convert-artifact-408684455/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 14:45:14 +0000 UTC FinishedAt: 2026-08-13 14:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 14:45:14 +0000 UTC FinishedAt: 2026-08-13 14:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 14:45:14 +0000 UTC FinishedAt: 2026-08-13 14:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 14:45:24 +0000 UTC FinishedAt: 2026-08-13 14:50:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5n9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"a94363ad-eef0-4cc8-9c49-6904d1675c65","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 14:45:24 +0000 UTC FinishedAt: 2026-08-13 14:50:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3dad947b-05fa-4ab0-bf43-6d2b2eb2d2ac,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cdf5d6c9-a45d-4995-9ddd-5544677bc16f,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-workflowz5n9n/series-workflowz5n9n-build-action-1867251257/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-workflowz5n9n/series-workflowz5n9n-build-action-2226308582/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-workflowz5n9n/series-workflowz5n9n-convert-artifact-408684455/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,}