Name: series-workflowvrxl8 Phase: Succeeded StartedAt: 2026-07-30 12:51:31 +0000 UTC FinishedAt: 2026-07-30 14:45:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[0] Phase: Succeeded StartedAt: 2026-07-30 12:51:31 +0000 UTC FinishedAt: 2026-07-30 13:11:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 12:51:31 +0000 UTC FinishedAt: 2026-07-30 13:11:06 +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": "b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "0c471fee-08db-4328-9f8e-2908dfc8864e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_execute_actions", "ovs_dp_process_packet", "ovs_packet_cmd_execute" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2V4ZWN1dGVfYWN0aW9ucyYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OywKICAgICYjMzQ7b3ZzX3BhY2tldF9jbWRfZXhlY3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVjdXJzaW9uIGxpbWl0IGNoZWNraW5nIGluIE9wZW4gdlN3aXRjaCBhY3Rpb24gZXhlY3V0aW9uLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgY2hlY2sgdG8gYGNsb25lX2V4ZWN1dGVgIHdoaWNoIHByZXZpb3VzbHkgb25seSBpbmNyZW1lbnRlZCB0aGUgY291bnRlciB3aXRob3V0IGNoZWNraW5nIHRoZSBsaW1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIHN0YWNrIG92ZXJmbG93cyBvciBleGNlc3NpdmUgcmVjdXJzaW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgZGVlcGx5IG5lc3RlZCBhY3Rpb25zIHdpdGhvdXQgYnJlYWtpbmcgdmFsaWQgY29uZmlndXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNmUxNjVhNGFiYjY0MmI0ZDg5MTliNTVkMzQyMzA5NTg2YzFhMzlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTM6MTA6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYyBiL25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmNcbmluZGV4IDUxM2ZjYTZhOGU4YTQuLmRjMTdhZGJlYjkzMzAgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jXG5AQCAtMTQ2Niw2ICYjNDM7MTQ2NiwyNiBAQCBzdGF0aWMgaW50IGRvX2V4ZWN1dGVfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG92c19leGVjX2xldmVsX2VudGVyKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbGV2ZWw7XG4mIzQzO1xuJiM0MztcdGxldmVsID0gX190aGlzX2NwdV9pbmNfcmV0dXJuKG92c19wY3B1X3N0b3JhZ2UtXHUwMDNlZXhlY19sZXZlbCk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGxldmVsIFx1MDAzZSBPVlNfUkVDVVJTSU9OX0xJTUlUKSkge1xuJiM0MztcdFx0bmV0X2NyaXRfcmF0ZWxpbWl0ZWQoXCYjMzQ7b3ZzOiByZWN1cnNpb24gbGltaXQgcmVhY2hlZCBvbiBkYXRhcGF0aCAlcywgcHJvYmFibGUgY29uZmlndXJhdGlvbiBlcnJvclxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIG92c19kcF9uYW1lKGRwKSk7XG4mIzQzO1x0XHRfX3RoaXNfY3B1X2RlYyhvdnNfcGNwdV9zdG9yYWdlLVx1MDAzZWV4ZWNfbGV2ZWwpO1xuJiM0MztcdFx0b3ZzX2tmcmVlX3NrYl9yZWFzb24oc2tiLCBPVlNfRFJPUF9SRUNVUlNJT05fTElNSVQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTkVURE9XTjtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG92c19leGVjX2xldmVsX2V4aXQodm9pZClcbiYjNDM7e1xuJiM0MztcdF9fdGhpc19jcHVfZGVjKG92c19wY3B1X3N0b3JhZ2UtXHUwMDNlZXhlY19sZXZlbCk7XG4mIzQzO31cbiYjNDM7XG4gLyogRXhlY3V0ZSB0aGUgYWN0aW9ucyBvbiB0aGUgY2xvbmUgb2YgdGhlIHBhY2tldC4gVGhlIGVmZmVjdCBvZiB0aGVcbiAgKiBleGVjdXRpb24gZG9lcyBub3QgYWZmZWN0IHRoZSBvcmlnaW5hbCAmIzM5O3NrYiYjMzk7IG5vciB0aGUgb3JpZ2luYWwgJiMzOTtrZXkmIzM5Oy5cbiAgKlxuQEAgLTE0OTcsMTQgJiM0MzsxNTE3LDE0IEBAIHN0YXRpYyBpbnQgY2xvbmVfZXhlY3V0ZShzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKGNsb25lKSB7XG4gXHRcdGludCBlcnIgPSAwO1xuIFx0XHRpZiAoYWN0aW9ucykgeyAvKiBTYW1wbGUgYWN0aW9uICovXG4tXHRcdFx0aWYgKGNsb25lX2Zsb3dfa2V5KVxuLVx0XHRcdFx0X190aGlzX2NwdV9pbmMob3ZzX3BjcHVfc3RvcmFnZS1cdTAwM2VleGVjX2xldmVsKTtcbiYjNDM7XHRcdFx0ZXJyID0gb3ZzX2V4ZWNfbGV2ZWxfZW50ZXIoZHAsIHNrYik7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcbiBcdFx0XHRlcnIgPSBkb19leGVjdXRlX2FjdGlvbnMoZHAsIHNrYiwgY2xvbmUsXG4gXHRcdFx0XHRcdFx0IGFjdGlvbnMsIGxlbik7XG4gXG4tXHRcdFx0aWYgKGNsb25lX2Zsb3dfa2V5KVxuLVx0XHRcdFx0X190aGlzX2NwdV9kZWMob3ZzX3BjcHVfc3RvcmFnZS1cdTAwM2VleGVjX2xldmVsKTtcbiYjNDM7XHRcdFx0b3ZzX2V4ZWNfbGV2ZWxfZXhpdCgpO1xuIFx0XHR9IGVsc2UgeyAvKiBSZWNpcmMgYWN0aW9uICovXG4gXHRcdFx0Y2xvbmUtXHUwMDNlcmVjaXJjX2lkID0gcmVjaXJjX2lkO1xuIFx0XHRcdG92c19kcF9wcm9jZXNzX3BhY2tldChza2IsIGNsb25lKTtcbkBAIC0xNTcxLDE0ICYjNDM7MTU5MSwxMSBAQCBpbnQgb3ZzX2V4ZWN1dGVfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHtcbiBcdGludCBlcnIsIGxldmVsO1xuIFxuLVx0bGV2ZWwgPSBfX3RoaXNfY3B1X2luY19yZXR1cm4ob3ZzX3BjcHVfc3RvcmFnZS1cdTAwM2VleGVjX2xldmVsKTtcbi1cdGlmICh1bmxpa2VseShsZXZlbCBcdTAwM2UgT1ZTX1JFQ1VSU0lPTl9MSU1JVCkpIHtcbi1cdFx0bmV0X2NyaXRfcmF0ZWxpbWl0ZWQoXCYjMzQ7b3ZzOiByZWN1cnNpb24gbGltaXQgcmVhY2hlZCBvbiBkYXRhcGF0aCAlcywgcHJvYmFibGUgY29uZmlndXJhdGlvbiBlcnJvclxcblwmIzM0Oyxcbi1cdFx0XHRcdCAgICAgb3ZzX2RwX25hbWUoZHApKTtcbi1cdFx0b3ZzX2tmcmVlX3NrYl9yZWFzb24oc2tiLCBPVlNfRFJPUF9SRUNVUlNJT05fTElNSVQpO1xuLVx0XHRlcnIgPSAtRU5FVERPV047XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuJiM0MztcdGVyciA9IG92c19leGVjX2xldmVsX2VudGVyKGRwLCBza2IpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRsZXZlbCA9IF9fdGhpc19jcHVfcmVhZChvdnNfcGNwdV9zdG9yYWdlLVx1MDAzZWV4ZWNfbGV2ZWwpO1xuIFxuIFx0T1ZTX0NCKHNrYiktXHUwMDNlYWN0c19vcmlnbGVuID0gYWN0cy1cdTAwM2VvcmlnX2xlbjtcbiBcdGVyciA9IGRvX2V4ZWN1dGVfYWN0aW9ucyhkcCwgc2tiLCBrZXksXG5AQCAtMTU4Nyw3ICYjNDM7MTYwNCw2IEBAIGludCBvdnNfZXhlY3V0ZV9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAobGV2ZWwgPT0gMSlcbiBcdFx0cHJvY2Vzc19kZWZlcnJlZF9hY3Rpb25zKGRwKTtcbiBcbi1vdXQ6XG4tXHRfX3RoaXNfY3B1X2RlYyhvdnNfcGNwdV9zdG9yYWdlLVx1MDAzZWV4ZWNfbGV2ZWwpO1xuJiM0MztcdG92c19leGVjX2xldmVsX2V4aXQoKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292c19leGVjdXRlX2FjdGlvbnMmIzM0OywKICAgICYjMzQ7b3ZzX2RwX3Byb2Nlc3NfcGFja2V0JiMzNDssCiAgICAmIzM0O292c19wYWNrZXRfY21kX2V4ZWN1dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlY3Vyc2lvbiBsaW1pdCBjaGVja2luZyBpbiBPcGVuIHZTd2l0Y2ggYWN0aW9uIGV4ZWN1dGlvbiwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGBjbG9uZV9leGVjdXRlYCB3aGljaCBwcmV2aW91c2x5IG9ubHkgaW5jcmVtZW50ZWQgdGhlIGNvdW50ZXIgd2l0aG91dCBjaGVja2luZyB0aGUgbGltaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBzdGFjayBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlIHJlY3Vyc2lvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIGRlZXBseSBuZXN0ZWQgYWN0aW9ucyB3aXRob3V0IGJyZWFraW5nIHZhbGlkIGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzZlMTY1YTRhYmI2NDJiNGQ4OTE5YjU1ZDM0MjMwOTU4NmMxYTM5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDMwIDEzOjEwOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYyBiL25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMKaW5kZXggNTEzZmNhNmE4ZThhNC4uZGMxN2FkYmViOTMzMCAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jCkBAIC0xNDY2LDYgJiM0MzsxNDY2LDI2IEBAIHN0YXRpYyBpbnQgZG9fZXhlY3V0ZV9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG92c19leGVjX2xldmVsX2VudGVyKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlpbnQgbGV2ZWw7CiYjNDM7CiYjNDM7CWxldmVsID0gX190aGlzX2NwdV9pbmNfcmV0dXJuKG92c19wY3B1X3N0b3JhZ2UtJmd0O2V4ZWNfbGV2ZWwpOwomIzQzOwlpZiAodW5saWtlbHkobGV2ZWwgJmd0OyBPVlNfUkVDVVJTSU9OX0xJTUlUKSkgewomIzQzOwkJbmV0X2NyaXRfcmF0ZWxpbWl0ZWQoJiMzNDtvdnM6IHJlY3Vyc2lvbiBsaW1pdCByZWFjaGVkIG9uIGRhdGFwYXRoICVzLCBwcm9iYWJsZSBjb25maWd1cmF0aW9uIGVycm9yXG4mIzM0OywKJiM0MzsJCQkJICAgICBvdnNfZHBfbmFtZShkcCkpOwomIzQzOwkJX190aGlzX2NwdV9kZWMob3ZzX3BjcHVfc3RvcmFnZS0mZ3Q7ZXhlY19sZXZlbCk7CiYjNDM7CQlvdnNfa2ZyZWVfc2tiX3JlYXNvbihza2IsIE9WU19EUk9QX1JFQ1VSU0lPTl9MSU1JVCk7CiYjNDM7CQlyZXR1cm4gLUVORVRET1dOOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdnNfZXhlY19sZXZlbF9leGl0KHZvaWQpCiYjNDM7ewomIzQzOwlfX3RoaXNfY3B1X2RlYyhvdnNfcGNwdV9zdG9yYWdlLSZndDtleGVjX2xldmVsKTsKJiM0Mzt9CiYjNDM7CiAvKiBFeGVjdXRlIHRoZSBhY3Rpb25zIG9uIHRoZSBjbG9uZSBvZiB0aGUgcGFja2V0LiBUaGUgZWZmZWN0IG9mIHRoZQogICogZXhlY3V0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgb3JpZ2luYWwgJiMzOTtza2ImIzM5OyBub3IgdGhlIG9yaWdpbmFsICYjMzk7a2V5JiMzOTsuCiAgKgpAQCAtMTQ5NywxNCAmIzQzOzE1MTcsMTQgQEAgc3RhdGljIGludCBjbG9uZV9leGVjdXRlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKGNsb25lKSB7CiAJCWludCBlcnIgPSAwOwogCQlpZiAoYWN0aW9ucykgeyAvKiBTYW1wbGUgYWN0aW9uICovCi0JCQlpZiAoY2xvbmVfZmxvd19rZXkpCi0JCQkJX190aGlzX2NwdV9pbmMob3ZzX3BjcHVfc3RvcmFnZS0mZ3Q7ZXhlY19sZXZlbCk7CiYjNDM7CQkJZXJyID0gb3ZzX2V4ZWNfbGV2ZWxfZW50ZXIoZHAsIHNrYik7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKIAogCQkJZXJyID0gZG9fZXhlY3V0ZV9hY3Rpb25zKGRwLCBza2IsIGNsb25lLAogCQkJCQkJIGFjdGlvbnMsIGxlbik7CiAKLQkJCWlmIChjbG9uZV9mbG93X2tleSkKLQkJCQlfX3RoaXNfY3B1X2RlYyhvdnNfcGNwdV9zdG9yYWdlLSZndDtleGVjX2xldmVsKTsKJiM0MzsJCQlvdnNfZXhlY19sZXZlbF9leGl0KCk7CiAJCX0gZWxzZSB7IC8qIFJlY2lyYyBhY3Rpb24gKi8KIAkJCWNsb25lLSZndDtyZWNpcmNfaWQgPSByZWNpcmNfaWQ7CiAJCQlvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc2tiLCBjbG9uZSk7CkBAIC0xNTcxLDE0ICYjNDM7MTU5MSwxMSBAQCBpbnQgb3ZzX2V4ZWN1dGVfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogewogCWludCBlcnIsIGxldmVsOwogCi0JbGV2ZWwgPSBfX3RoaXNfY3B1X2luY19yZXR1cm4ob3ZzX3BjcHVfc3RvcmFnZS0mZ3Q7ZXhlY19sZXZlbCk7Ci0JaWYgKHVubGlrZWx5KGxldmVsICZndDsgT1ZTX1JFQ1VSU0lPTl9MSU1JVCkpIHsKLQkJbmV0X2NyaXRfcmF0ZWxpbWl0ZWQoJiMzNDtvdnM6IHJlY3Vyc2lvbiBsaW1pdCByZWFjaGVkIG9uIGRhdGFwYXRoICVzLCBwcm9iYWJsZSBjb25maWd1cmF0aW9uIGVycm9yXG4mIzM0OywKLQkJCQkgICAgIG92c19kcF9uYW1lKGRwKSk7Ci0JCW92c19rZnJlZV9za2JfcmVhc29uKHNrYiwgT1ZTX0RST1BfUkVDVVJTSU9OX0xJTUlUKTsKLQkJZXJyID0gLUVORVRET1dOOwotCQlnb3RvIG91dDsKLQl9CiYjNDM7CWVyciA9IG92c19leGVjX2xldmVsX2VudGVyKGRwLCBza2IpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJbGV2ZWwgPSBfX3RoaXNfY3B1X3JlYWQob3ZzX3BjcHVfc3RvcmFnZS0mZ3Q7ZXhlY19sZXZlbCk7CiAKIAlPVlNfQ0Ioc2tiKS0mZ3Q7YWN0c19vcmlnbGVuID0gYWN0cy0mZ3Q7b3JpZ19sZW47CiAJZXJyID0gZG9fZXhlY3V0ZV9hY3Rpb25zKGRwLCBza2IsIGtleSwKQEAgLTE1ODcsNyAmIzQzOzE2MDQsNiBAQCBpbnQgb3ZzX2V4ZWN1dGVfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChsZXZlbCA9PSAxKQogCQlwcm9jZXNzX2RlZmVycmVkX2FjdGlvbnMoZHApOwogCi1vdXQ6Ci0JX190aGlzX2NwdV9kZWMob3ZzX3BjcHVfc3RvcmFnZS0mZ3Q7ZXhlY19sZXZlbCk7CiYjNDM7CW92c19leGVjX2xldmVsX2V4aXQoKTsKIAlyZXR1cm4gZXJyOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT3BlbiB2U3dpdGNoIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY2AuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIHJlZmFjdG9yaW5nIHRoZSByZWN1cnNpb24gbGltaXQgY2hlY2tzLCBwdWxsaW5nIHRoZW0gb3V0IG9mIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYCBhbmQgYGNsb25lX2V4ZWN1dGVgIGFuZCBpbnRvIHRoZXNlIGhlbHBlciBmdW5jdGlvbnMsIGBvdnNfZXhlY19sZXZlbF9lbnRlcmAgYW5kIGBvdnNfZXhlY19sZXZlbF9leGl0YC4gVGhhdCBtYWtlcyBzZW5zZTsgbW9kdWxhcml0eSBpcyBhbHdheXMgYSBnb29kIHRoaW5nLCBlc3BlY2lhbGx5IGluIGEgY29tcGxleCBzeXN0ZW0gbGlrZSB0aGlzLgoKV2FpdCBhIHNlY29uZOKApiBMb29raW5nIGNsb3NlciwgdGhpcyBpc24mIzM5O3QgKmp1c3QqIHJlZmFjdG9yaW5nLiBUaGUgcGF0Y2ggKmNoYW5nZXMqIHRoZSBiZWhhdmlvciBvZiBgY2xvbmVfZXhlY3V0ZWAuIEJlZm9yZSwgaWYgYGNsb25lX2Zsb3dfa2V5YCB3YXMgdHJ1ZSwgaXQgd291bGQganVzdCBpbmNyZW1lbnQgYGV4ZWNfbGV2ZWxgLiBJdCBkaWRuJiMzOTt0IGFjdHVhbGx5ICpjaGVjayogaWYgdGhlIGxpbWl0IHdhcyBleGNlZWRlZC4gTm93LCB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYG92c19leGVjX2xldmVsX2VudGVyYCwgaXQgKmRvZXMqIGNoZWNrIGFuZCByZXR1cm5zIGFuIGVycm9yLCBzcGVjaWZpY2FsbHkgYC1FTkVURE9XTmAsIGlmIHRoZSByZWN1cnNpb24gbGV2ZWwgaXMgdG9vIGhpZ2guIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBjbGVhbnVwLiBJdCYjMzk7cyBzdWJ0bGUsIGJ1dCBzaWduaWZpY2FudC4gVGhlIG9sZCBjb2RlIGp1c3Qga2VwdCBjbGltYmluZyBpbiByZWN1cnNpb24gd2hlbiBpdCBzaG91bGQmIzM5O3ZlIHN0b3BwZWQuCgpTbywgSSYjMzk7bSBub3RpbmcgdGhpcyBpcyBhIGJlaGF2aW9yIGNoYW5nZSBpbiB0aGUgY3JpdGljYWwgcGF0aCBvZiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGxpa2VseSBuZWVkcyBzY3J1dGlueSBhcyBpdCBjYW4gYWZmZWN0IGhvdyB0aGUgZGF0YXBhdGggd2lsbCB3b3JrLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgaW50byBob3cgdGhlIHJlY3Vyc2lvbiBsaW1pdCBpcyBjb25maWd1cmVkIGFuZCB3aGF0IGhhcHBlbnMgaWYgd2UgaGl0IGl0LgoKTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIHdoZXJlIHRoZSBjb25maWcgb3B0aW9ucyBmb3IgT3BlbiB2U3dpdGNoIGFyZS4gYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydDsgYE9QRU5WU1dJVENIYCB3aWxsIHByb2JhYmx5IGJlIGluIHRoZXJlIHNvbWV3aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT1BFTlZTV0lUQ0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgxNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgT3BlbiB2U3dpdGNoIEFjdGlvbiBFeGVjdXRpb24qKgoKUmlnaHQsIHNvIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlIHJldm9sdmVzIGFyb3VuZCBgT1BFTlZTV0lUQ0hgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuIFRoZSBrZXkgcGxheWVycyBzZWVtIHRvIGJlIGBjbG9uZV9leGVjdXRlYCBhbmQgYG92c19leGVjdXRlX2FjdGlvbnNgLiBBbHJlYWR5LCBhIHF1aWNrIG5vdGUgdG8gbXlzZWxmOiBgb3ZzX2V4ZWN1dGVfYWN0aW9uc2AgaXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IGluZmx1ZW5jZXMgaG93IGl0JiMzOTtzIGNhbGxhYmxlIGFuZCBwb3RlbnRpYWxseSBpbXBhY3RzIGl0cyBzY29wZSBhbmQgdmlzaWJpbGl0eSB3aXRoaW4gdGhlIGNvZGViYXNlLiBNZWFud2hpbGUsIGBjbG9uZV9leGVjdXRlYCBpcyBzdGF0aWMuIFRoYXQgdXN1YWxseSBtZWFucyBpdCYjMzk7cyBsaW1pdGVkIHRvIHRoZSBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4sIHdoaWNoIGNvdWxkIHNpZ25pZnkgc29tZSBsb2NhbCBvcHRpbWl6YXRpb25zIG9yIHNwZWNpZmljIHVzZXMuCgpOb3csIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBgb3ZzX2V4ZWN1dGVfYWN0aW9uc2AuIExldCYjMzk7cyBuYXZpZ2F0ZSB0byBgbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY2AgYW5kIHRha2UgYSBsb29rLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBVbmRlcnN0YW5kaW5nIHRoZSBjb3JlIGxvZ2ljIGluIHRoYXQgZnVuY3Rpb24gaXMgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgYW55IGNoYW5nZXMgb3Igb3B0aW1pemF0aW9ucy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBhY3Rpb25zIHRoZW1zZWx2ZXMgYXJlIGJlaW5nIHByb2Nlc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgb3ZzX2V4ZWN1dGVfYWN0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xNTYxPXN0YXRpYyB2b2lkIHByb2Nlc3NfZGVmZXJyZWRfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU4Ny0vKiBFeGVjdXRlIGEgbGlzdCBvZiBhY3Rpb25zIGFnYWluc3QgJiMzOTtza2ImIzM5Oy4gKi9cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MTU4ODppbnQgb3ZzX2V4ZWN1dGVfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTg5LVx0XHRcdGNvbnN0IHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKmFjdHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gQWN0aW9uIEV4ZWN1dGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbi4gYG92c19leGVjdXRlX2FjdGlvbnNgIHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYWN0aW9ucyBhcmUgYWN0dWFsbHkgZXhlY3V0ZWQuIEkmIzM5O3ZlIGdvdCBhIGdvb2QgZmVlbGluZyBhYm91dCB0aGF0IG9uZSwgaXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgc28gdG8gc3BlYWsuIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgc3RhdGljIGZ1bmN0aW9uIGBjbG9uZV9leGVjdXRlYC4gSG1tLCB0aGF0IGNvdWxkIGJlIGludGVyZXN0aW5nIGFzIHdlbGwuIExldCYjMzk7cyBzZWUgd2hvIGlzIGNhbGxpbmcgYGNsb25lX2V4ZWN1dGVgLiBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsIGNoYWluIGlzIHRoZSBsb2dpY2FsIG5leHQgc3RlcC4gVGhhdCBzaG91bGQgaWxsdW1pbmF0ZSBzb21lIGRlcGVuZGVuY2llcywgc29tZSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgZ2l2ZSBtZSBhIGJyb2FkZXIgdmlldyBvZiBob3cgdGhlc2UgYWN0aW9uIGV4ZWN1dGlvbnMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyB0cmFjZSBiYWNrIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2xvbmVfZXhlY3V0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xMTU9c3RhdGljIGJvb2wgaXNfZmxvd19rZXlfdmFsaWQoY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xMTktXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjEyMDpzdGF0aWMgaW50IGNsb25lX2V4ZWN1dGUoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTIxLVx0XHRcdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTkxOD1zdGF0aWMgaW50IGRlY190dGxfZXhjZXB0aW9uX2hhbmRsZXIoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTkyNS1cdGlmIChubGFfbGVuKGFjdGlvbnMpKVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzo5MjY6XHRcdHJldHVybiBjbG9uZV9leGVjdXRlKGRwLCBza2IsIGtleSwgMCwgbmxhX2RhdGEoYWN0aW9ucyksXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTkyNy1cdFx0XHRcdCAgICAgbmxhX2xlbihhY3Rpb25zKSwgdHJ1ZSwgZmFsc2UpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9OTM3PXN0YXRpYyBpbnQgc2FtcGxlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy05NjQtXHRjbG9uZV9mbG93X2tleSA9ICFhcmctXHUwMDNlZXhlYztcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6OTY1Olx0ZXJyID0gY2xvbmVfZXhlY3V0ZShkcCwgc2tiLCBrZXksIDAsIGFjdGlvbnMsIHJlbSwgbGFzdCxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtOTY2LVx0XHRcdCAgICBjbG9uZV9mbG93X2tleSk7XG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz05Nzg9c3RhdGljIGludCBjbG9uZShzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtOTkxLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzo5OTI6XHRyZXR1cm4gY2xvbmVfZXhlY3V0ZShkcCwgc2tiLCBrZXksIDAsIGFjdGlvbnMsIHJlbSwgbGFzdCxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtOTkzLVx0XHRcdCAgICAgIWRvbnRfY2xvbmVfZmxvd19rZXkpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MTExMT1zdGF0aWMgaW50IGV4ZWN1dGVfcmVjaXJjKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xMTI2LVx0cmVjaXJjX2lkID0gbmxhX2dldF91MzIoYSk7XG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjExMjc6XHRyZXR1cm4gY2xvbmVfZXhlY3V0ZShkcCwgc2tiLCBrZXksIHJlY2lyY19pZCwgTlVMTCwgMCwgbGFzdCwgdHJ1ZSk7XG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTExMjgtfVxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MTEzMD1zdGF0aWMgaW50IGV4ZWN1dGVfY2hlY2tfcGt0X2xlbihzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTE2NC1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MTE2NTpcdHJldHVybiBjbG9uZV9leGVjdXRlKGRwLCBza2IsIGtleSwgMCwgbmxhX2RhdGEoYWN0aW9ucyksXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTExNjYtXHRcdFx0ICAgICBubGFfbGVuKGFjdGlvbnMpLCBsYXN0LCBjbG9uZV9mbG93X2tleSk7XG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xNDg0PXN0YXRpYyB2b2lkIG92c19leGVjX2xldmVsX2V4aXQodm9pZClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE0OTQtICovXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjE0OTU6c3RhdGljIGludCBjbG9uZV9leGVjdXRlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE0OTYtXHRcdFx0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LCB1MzIgcmVjaXJjX2lkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggb2YgYGNsb25lX2V4ZWN1dGVgKioKClJpZ2h0LCBzbyBgY2xvbmVfZXhlY3V0ZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwcmltYXJ5IGNhbGwgY2hhaW4gZm9yIHRoaXMgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgYGNsb25lX2V4ZWN1dGVgIGlzIGNhbGxlZCBieSBzZXZlcmFsIG90aGVyIGZ1bmN0aW9uczogYGRlY190dGxfZXhjZXB0aW9uX2hhbmRsZXJgLCBgc2FtcGxlYCwgYGNsb25lYCwgYGV4ZWN1dGVfcmVjaXJjYCwgYW5kIGBleGVjdXRlX2NoZWNrX3BrdF9sZW5gLiBOb3Qgc3VycHJpc2luZywgaXQmIzM5O3MgdXNlZCBpbiBzZXZlcmFsIGtleSBhY3Rpb24gcGF0aHMuIFRob3NlIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucywgYW5kIHRoZXkmIzM5O3JlIGFsbCBjYWxsZWQgZnJvbSBgZG9fZXhlY3V0ZV9hY3Rpb25zYC4gVGhhdCYjMzk7cyB0aGUgbGluay4gU28gYG92c19leGVjdXRlX2FjdGlvbnNgIGFjdHMgYXMgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gdGhpcyB3aG9sZSBzeXN0ZW0uCgpOb3csIEkgc2hvdWxkIGNvbmZpcm0gd2hlcmUgYG92c19leGVjdXRlX2FjdGlvbnNgIGlzIGludm9rZWQgZnJvbS4gSSBzdXNwZWN0IGl0JiMzOTtzIGxhcmdlbHkgc2VsZi1jb250YWluZWQgd2l0aGluIHRoZSBhY3Rpb25zIG1vZHVsZSwgYnV0IGl0JiMzOTtzIHdvcnRoIHZlcmlmeWluZyB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgZXh0ZXJuYWwgZW50cnkgcG9pbnRzLiBUaGF04oCZcyB0aGUgbmV4dCBzdGVwLiBJ4oCZbGwgY2hlY2sgaWYgYG92c19leGVjdXRlX2FjdGlvbnNgIGlzIGNhbGxlZCBmcm9tICpvdXRzaWRlKiBgYWN0aW9ucy5jYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIGV4ZWN1dGlvbiBmbG93LiBUaGlzIHdpbGwgY2xhcmlmeSB0aGUgaW50ZWdyYXRpb24gcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfZXhlY3V0ZV9hY3Rpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE1NjE9c3RhdGljIHZvaWQgcHJvY2Vzc19kZWZlcnJlZF9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHApXG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTg3LS8qIEV4ZWN1dGUgYSBsaXN0IG9mIGFjdGlvbnMgYWdhaW5zdCAmIzM5O3NrYiYjMzk7LiAqL1xubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxNTg4OmludCBvdnNfZXhlY3V0ZV9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1ODktXHRcdFx0Y29uc3Qgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqYWN0cyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDU9dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzA4LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MzA5Olx0ZXJyb3IgPSBvdnNfZXhlY3V0ZV9hY3Rpb25zKGRwLCBza2IsIHNmX2FjdHMsIGtleSk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zMTAtXHRpZiAodW5saWtlbHkoZXJyb3IpKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTYxMj1zdGF0aWMgaW50IG92c19wYWNrZXRfY21kX2V4ZWN1dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy03MDItXHRcdHRoaXNfY3B1X3dyaXRlKG92c19wY3B1X3N0b3JhZ2UtXHUwMDNlb3duZXIsIGN1cnJlbnQpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NzAzOlx0ZXJyID0gb3ZzX2V4ZWN1dGVfYWN0aW9ucyhkcCwgcGFja2V0LCBzZl9hY3RzLCBcdTAwMjZmbG93LVx1MDAzZWtleSk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy03MDQtXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MzI5PXN0cnVjdCBza19idWZmICpvdnNfdnBvcnRfY21kX2J1aWxkX2luZm8oc3RydWN0IHZwb3J0ICp2cG9ydCwgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oLTMzMS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oOjMzMjppbnQgb3ZzX2V4ZWN1dGVfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMzMzLVx0XHRcdGNvbnN0IHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKiwgc3RydWN0IHN3X2Zsb3dfa2V5ICopO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzUxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipGb2N1c2luZyBvbiBQYWNrZXQgUHJvY2Vzc2luZyBpbiBPcGVuIHZTd2l0Y2gqKgoKUmlnaHQsIHNvIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkgZnVuY3Rpb24sIGFzIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGJvdGggYG92c19kcF9wcm9jZXNzX3BhY2tldGAgYW5kIGBvdnNfcGFja2V0X2NtZF9leGVjdXRlYC4gR2l2ZW4gdGhhdCwgSSB0aGluayBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBsb29rcyBsaWtlIHRoZSBwcmltYXJ5IHBvaW50IG9mIGludGVyZXN0IGZvciB0cmFjaW5nIHRoZSBkYXRhIGZsb3cuIFNlZW1zIGxpa2UgdGhlIGJldHRlciBhbmdsZSB0byBwdXJzdWUgaW5pdGlhbGx5LiBUaGVyZWZvcmUsIEkmIzM5O2xsIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIGZpcnN0IHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGF0IGxldmVsLiBUaGF0IGxvb2tzIGxpa2UgdGhlIGJlc3QgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19kcF9wcm9jZXNzX3BhY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xNDk1PXN0YXRpYyBpbnQgY2xvbmVfZXhlY3V0ZShzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTUyOS1cdFx0XHRjbG9uZS1cdTAwM2VyZWNpcmNfaWQgPSByZWNpcmNfaWQ7XG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjE1MzA6XHRcdFx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgY2xvbmUpO1xubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTMxLVx0XHR9XG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xNTYxPXN0YXRpYyB2b2lkIHByb2Nlc3NfZGVmZXJyZWRfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU3OS1cdFx0ZWxzZVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxNTgwOlx0XHRcdG92c19kcF9wcm9jZXNzX3BhY2tldChza2IsIGtleSk7XG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1ODEtXHR9IHdoaWxlICghYWN0aW9uX2ZpZm9faXNfZW1wdHkoZmlmbykpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTIzMz12b2lkIG92c19kcF9kZXRhY2hfcG9ydChzdHJ1Y3QgdnBvcnQgKnApXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjQ0LS8qIE11c3QgYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jay4gKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI0NTp2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0Ni17XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MzE4PWV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfdnBvcnRfZ2VubF9mYW1pbHk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0zMTktXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaDozMjA6dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMzIxLXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYz00OTc9aW50IG92c192cG9ydF9yZWNlaXZlKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNTIyLVx0fVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM6NTIzOlx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgXHUwMDI2a2V5KTtcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jLTUyNC1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIFBhY2tldCBQcm9jZXNzaW5nIGluIE9wZW4gdlN3aXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHBhY2tldCBwcm9jZXNzaW5nIGZsb3cgd2l0aGluIE9wZW4gdlN3aXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBkYXRhIHBhdGggYW5kIHRoZSBhY3Rpb24gZXhlY3V0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgb3ZzX3Zwb3J0X3JlY2VpdmVgIGNhbGxzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLCBhbmQgdGhlbiBgb3ZzX3BhY2tldF9jbWRfZXhlY3V0ZWAgY2FsbHMgYG92c19leGVjdXRlX2FjdGlvbnNgLiBTbywgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCByZWFsbHkgZm9jdXMgb24gdGhvc2Ugc3ltYm9sczogYG92c19leGVjdXRlX2FjdGlvbnNgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIEl0IHNlZW1zIGxpa2UgYG92c19wYWNrZXRfY21kX2V4ZWN1dGVgIGlzIGltcG9ydGFudCB0b28uCgpOb3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcGx5IGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgY3JpdGljYWwgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBXaGVyZSBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGRlZmluZWQ/IExldCBtZSBzZWUuIFRoZSBjb2RlIGl0c2VsZiBmb3IgYWN0aW9ucyBpcyBpbiBgbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY2AsIGFuZCB0aGF0JiMzOTtzIG9idmlvdXNseSBwYXJ0IG9mIGBPUEVOVlNXSVRDSGAuIEkmIzM5O2xsIGFsc28gZ2xhbmNlIHRocm91Z2ggdGhlIGBuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGVgIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGJ1aWxkLXRpbWUgb3Igb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBhZmZlY3QgdGhpcyBjcml0aWNhbCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthY3Rpb25zLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL01ha2VmaWxlPTg9b3BlbnZzd2l0Y2gteSA6PSBcXFxubmV0L29wZW52c3dpdGNoL01ha2VmaWxlOjk6XHRhY3Rpb25zLm8gXFxcbm5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZS0xMC1cdGRhdGFwYXRoLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoaXMsIGNvbnNpZGVyaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipBbmFseXppbmcgdGhlIE9wZW4gdlN3aXRjaCBQYXRjaCoqCgpBbHJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBmaXggZm9yIE9wZW4gdlN3aXRjaCDigJMgbm90aGluZyB0b28gY29tcGxleCwganVzdCBhIGJ1ZyBpbiBgY2xvbmVfZXhlY3V0ZWAuIEFwcGFyZW50bHksIHRoZSByZWN1cnNpb24gbGltaXQgd2FzbiYjMzk7dCBiZWluZyBjaGVja2VkLCB3aGljaCwgYXMgd2UgYWxsIGtub3csIGNvdWxkIHRyaWdnZXIgYSBuYXN0eSBzdGFjayBvdmVyZmxvdyBvciBzb21lIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlmIGFjdGlvbiBsb29wcyBnZXQgaW50cm9kdWNlZC4gRGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoZXJlLiBHb29kIGNhdGNoLCBhbmQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIGZ1enppbmcgZWZmb3J0cy4KCk15IGZvY3VzIGZvciB0aGlzIGlzIG9uIGEgZmV3IGtleSBzeW1ib2xzOiBgb3ZzX2V4ZWN1dGVfYWN0aW9uc2AsIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLCBhbmQgYG92c19wYWNrZXRfY21kX2V4ZWN1dGVgLiBUaGVzZSBhcmUgbGlrZWx5IHRvIGJlIHRoZSBlbnRyeSBwb2ludHMgb3Iga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBhY3Rpb24gZXhlY3V0aW9uIGFuZCBwYWNrZXQgcHJvY2Vzc2luZyB3aXRoaW4gdGhlIHZTd2l0Y2guCgpOb3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBPUEVOVlNXSVRDSGAgaXNuJiMzOTt0IGRlcGVuZGVudCBvbiBhbm90aGVyIHNvZnR3YXJlLCBhcyBhIG5ldyBjaGFuZ2UgaW4gYSBkZXBlbmRhbmN5IGNhbiBjYXVzZSBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnPTY9Y29uZmlnIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo5Olx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xMC1cdFx0ICAgKE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFx1MDAyNlx1MDAyNiBcXFxuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTEyLVx0XHRcdFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6MTM6XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTE0LVx0c2VsZWN0IE1QTFNcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZz00ND1jb25maWcgT1BFTlZTV0lUQ0hfR1JFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ2Olx0ZGVwZW5kcyBvbiBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDc6XHRkZXBlbmRzIG9uIE5FVF9JUEdSRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDgtXHRkZWZhdWx0IE9QRU5WU1dJVENIXG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWc9NTc9Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTk6XHRkZXBlbmRzIG9uIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2MDpcdGRlcGVuZHMgb24gVlhMQU5cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTYxLVx0ZGVmYXVsdCBPUEVOVlNXSVRDSFxuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnPTY5PWNvbmZpZyBPUEVOVlNXSVRDSF9HRU5FVkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdlbmV2ZSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xubmV0L29wZW52c3dpdGNoL0tjb25maWc6NzE6XHRkZXBlbmRzIG9uIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo3MjpcdGRlcGVuZHMgb24gR0VORVZFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03My1cdGRlZmF1bHQgT1BFTlZTV0lUQ0hcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU4MAoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiA0ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE9wZW4gdlN3aXRjaCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBPcGVuIHZTd2l0Y2ggcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBkZXBlbmRlbmN5IG9uIGBJTkVUYCB1c3VhbGx5IG1lYW5zIHRoYXQgYE9QRU5WU1dJVENIYCBiZWluZyBlbmFibGVkIGlzIGVub3VnaCB0byBnZXQgbWUgc3RhcnRlZC4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgYXJlYXMgdG8gZm9jdXMgb24uIFRoaW5raW5nIGFib3V0IHBhY2tldCBmbG93LCBgb3ZzX3Zwb3J0X3JlY2VpdmVgIGlzIHdoZXJlIHBhY2tldHMgZnJvbSB2cG9ydHMgZW50ZXIsIGFuZCBgb3ZzX3BhY2tldF9jbWRfZXhlY3V0ZWAgaGFuZGxlcyBwYWNrZXRzIGZyb20gdXNlcnNwYWNlLiBCb3RoIG9mIHRoZXNlIHBhdGhzIGV2ZW50dWFsbHkgZnVubmVsIGludG8gYG92c19leGVjdXRlX2FjdGlvbnNgLiBUaGF0IGZ1bmN0aW9uLCB0aGVyZWZvcmUsIHNlZW1zIGxpa2UgdGhlIG1vc3Qgc3RyYXRlZ2ljIGZvY3VzIHN5bWJvbC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGFkZCB0aGUgb3RoZXIgZW50cnkgcG9pbnRzIHRvIG15IGxpc3QuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEFoLCB0aGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0JiMzOTtzIHRpZ2h0ZW5pbmcgdXAgdGhlIHJlY3Vyc2lvbiBsaW1pdCBjaGVja2luZyB3aXRoaW4gYGNsb25lX2V4ZWN1dGVgLiBQcmV2aW91c2x5LCB0aGUgY291bnRlciB3YXMganVzdCBpbmNyZW1lbnRpbmcsIGJ1dCBub3cgdGhlcmUmIzM5O3MgYW4gZXhwbGljaXQgY2hlY2sgYWdhaW5zdCBgT1ZTX1JFQ1VSU0lPTl9MSU1JVGAuIEdvb2QsIHRoYXQgc2hvdWxkIHByZXZlbnQgc3RhY2sgb3ZlcmZsb3dzIG9yIGV4Y2Vzc2l2ZSByZWN1cnNpb24uCgpJdCYjMzk7cyBhIGRlZmluaXRlIGltcHJvdmVtZW50LiBIb3dldmVyLCB0aGlzIGFsc28gd2FycmFudHMgZnV6emluZy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgYnJlYWsgdmFsaWQgY29uZmlndXJhdGlvbnMgd2l0aCBkZWVwbHkgbmVzdGVkIGFjdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBkb2luZyB3aGF0IGl0JiMzOTtzIGludGVuZGVkIHRvIGRvLgoKU28sIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gTXkgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgWyYjMzQ7b3ZzX2V4ZWN1dGVfYWN0aW9ucyYjMzQ7LCAmIzM0O292c19kcF9wcm9jZXNzX3BhY2tldCYjMzQ7LCAmIzM0O292c19wYWNrZXRfY21kX2V4ZWN1dGUmIzM0O11gLiBHaXZlbiB0aGUgZGVwZW5kZW5jeSwgSSYjMzk7bGwgYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O09QRU5WU1dJVENIJiMzNDtdYC4gTXkgcmVhc29uaW5nIGlzOiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSByZWN1cnNpb24gbGltaXQgY2hlY2tpbmcgaW4gT3BlbiB2U3dpdGNoIGFjdGlvbiBleGVjdXRpb24sIHNwZWNpZmljYWxseSBhZGRpbmcgYSBjaGVjayB0byBgY2xvbmVfZXhlY3V0ZWAgd2hpY2ggcHJldmlvdXNseSBvbmx5IGluY3JlbWVudGVkIHRoZSBjb3VudGVyIHdpdGhvdXQgY2hlY2tpbmcgdGhlIGxpbWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBwb3RlbnRpYWwgc3RhY2sgb3ZlcmZsb3dzIG9yIGV4Y2Vzc2l2ZSByZWN1cnNpb24sIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaGFuZGxlcyBkZWVwbHkgbmVzdGVkIGFjdGlvbnMgd2l0aG91dCBicmVha2luZyB2YWxpZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2V4ZWN1dGVfYWN0aW9ucyYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OywKICAgICYjMzQ7b3ZzX3BhY2tldF9jbWRfZXhlY3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVjdXJzaW9uIGxpbWl0IGNoZWNraW5nIGluIE9wZW4gdlN3aXRjaCBhY3Rpb24gZXhlY3V0aW9uLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgY2hlY2sgdG8gYGNsb25lX2V4ZWN1dGVgIHdoaWNoIHByZXZpb3VzbHkgb25seSBpbmNyZW1lbnRlZCB0aGUgY291bnRlciB3aXRob3V0IGNoZWNraW5nIHRoZSBsaW1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIHN0YWNrIG92ZXJmbG93cyBvciBleGNlc3NpdmUgcmVjdXJzaW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgZGVlcGx5IG5lc3RlZCBhY3Rpb25zIHdpdGhvdXQgYnJlYWtpbmcgdmFsaWQgY29uZmlndXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2V4ZWN1dGVfYWN0aW9ucyYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OywKICAgICYjMzQ7b3ZzX3BhY2tldF9jbWRfZXhlY3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVjdXJzaW9uIGxpbWl0IGNoZWNraW5nIGluIE9wZW4gdlN3aXRjaCBhY3Rpb24gZXhlY3V0aW9uLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgY2hlY2sgdG8gYGNsb25lX2V4ZWN1dGVgIHdoaWNoIHByZXZpb3VzbHkgb25seSBpbmNyZW1lbnRlZCB0aGUgY291bnRlciB3aXRob3V0IGNoZWNraW5nIHRoZSBsaW1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIHN0YWNrIG92ZXJmbG93cyBvciBleGNlc3NpdmUgcmVjdXJzaW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgZGVlcGx5IG5lc3RlZCBhY3Rpb25zIHdpdGhvdXQgYnJlYWtpbmcgdmFsaWQgY29uZmlndXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDoxNi42MDA2MjM1NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4Njk0NzEyMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2V4ZWN1dGVfYWN0aW9uc1wiLFxuICAgIFwib3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCIsXG4gICAgXCJvdnNfcGFja2V0X2NtZF9leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlY3Vyc2lvbiBsaW1pdCBjaGVja2luZyBpbiBPcGVuIHZTd2l0Y2ggYWN0aW9uIGV4ZWN1dGlvbiwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGBjbG9uZV9leGVjdXRlYCB3aGljaCBwcmV2aW91c2x5IG9ubHkgaW5jcmVtZW50ZWQgdGhlIGNvdW50ZXIgd2l0aG91dCBjaGVja2luZyB0aGUgbGltaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBzdGFjayBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlIHJlY3Vyc2lvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIGRlZXBseSBuZXN0ZWQgYWN0aW9ucyB3aXRob3V0IGJyZWFraW5nIHZhbGlkIGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDoxNi42MDA2MzQxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5NDEyOTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzZlMTY1YTRhYmI2NDJiNGQ4OTE5YjU1ZDM0MjMwOTU4NmMxYTM5ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAxMzoxMDoxNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jIGIvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY1xcbmluZGV4IDUxM2ZjYTZhOGU4YTQuLmRjMTdhZGJlYjkzMzAgMTAwNjQ0XFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmNcXG5AQCAtMTQ2Niw2ICsxNDY2LDI2IEBAIHN0YXRpYyBpbnQgZG9fZXhlY3V0ZV9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG92c19leGVjX2xldmVsX2VudGVyKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0aW50IGxldmVsO1xcbitcXG4rXFx0bGV2ZWwgPSBfX3RoaXNfY3B1X2luY19yZXR1cm4ob3ZzX3BjcHVfc3RvcmFnZS1cXHUwMDNlZXhlY19sZXZlbCk7XFxuK1xcdGlmICh1bmxpa2VseShsZXZlbCBcXHUwMDNlIE9WU19SRUNVUlNJT05fTElNSVQpKSB7XFxuK1xcdFxcdG5ldF9jcml0X3JhdGVsaW1pdGVkKFxcXCJvdnM6IHJlY3Vyc2lvbiBsaW1pdCByZWFjaGVkIG9uIGRhdGFwYXRoICVzLCBwcm9iYWJsZSBjb25maWd1cmF0aW9uIGVycm9yXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIG92c19kcF9uYW1lKGRwKSk7XFxuK1xcdFxcdF9fdGhpc19jcHVfZGVjKG92c19wY3B1X3N0b3JhZ2UtXFx1MDAzZWV4ZWNfbGV2ZWwpO1xcbitcXHRcXHRvdnNfa2ZyZWVfc2tiX3JlYXNvbihza2IsIE9WU19EUk9QX1JFQ1VSU0lPTl9MSU1JVCk7XFxuK1xcdFxcdHJldHVybiAtRU5FVERPV047XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG92c19leGVjX2xldmVsX2V4aXQodm9pZClcXG4re1xcbitcXHRfX3RoaXNfY3B1X2RlYyhvdnNfcGNwdV9zdG9yYWdlLVxcdTAwM2VleGVjX2xldmVsKTtcXG4rfVxcbitcXG4gLyogRXhlY3V0ZSB0aGUgYWN0aW9ucyBvbiB0aGUgY2xvbmUgb2YgdGhlIHBhY2tldC4gVGhlIGVmZmVjdCBvZiB0aGVcXG4gICogZXhlY3V0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgb3JpZ2luYWwgJ3NrYicgbm9yIHRoZSBvcmlnaW5hbCAna2V5Jy5cXG4gICpcXG5AQCAtMTQ5NywxNCArMTUxNywxNCBAQCBzdGF0aWMgaW50IGNsb25lX2V4ZWN1dGUoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKGNsb25lKSB7XFxuIFxcdFxcdGludCBlcnIgPSAwO1xcbiBcXHRcXHRpZiAoYWN0aW9ucykgeyAvKiBTYW1wbGUgYWN0aW9uICovXFxuLVxcdFxcdFxcdGlmIChjbG9uZV9mbG93X2tleSlcXG4tXFx0XFx0XFx0XFx0X190aGlzX2NwdV9pbmMob3ZzX3BjcHVfc3RvcmFnZS1cXHUwMDNlZXhlY19sZXZlbCk7XFxuK1xcdFxcdFxcdGVyciA9IG92c19leGVjX2xldmVsX2VudGVyKGRwLCBza2IpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4gXFx0XFx0XFx0ZXJyID0gZG9fZXhlY3V0ZV9hY3Rpb25zKGRwLCBza2IsIGNsb25lLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgYWN0aW9ucywgbGVuKTtcXG4gXFxuLVxcdFxcdFxcdGlmIChjbG9uZV9mbG93X2tleSlcXG4tXFx0XFx0XFx0XFx0X190aGlzX2NwdV9kZWMob3ZzX3BjcHVfc3RvcmFnZS1cXHUwMDNlZXhlY19sZXZlbCk7XFxuK1xcdFxcdFxcdG92c19leGVjX2xldmVsX2V4aXQoKTtcXG4gXFx0XFx0fSBlbHNlIHsgLyogUmVjaXJjIGFjdGlvbiAqL1xcbiBcXHRcXHRcXHRjbG9uZS1cXHUwMDNlcmVjaXJjX2lkID0gcmVjaXJjX2lkO1xcbiBcXHRcXHRcXHRvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc2tiLCBjbG9uZSk7XFxuQEAgLTE1NzEsMTQgKzE1OTEsMTEgQEAgaW50IG92c19leGVjdXRlX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4ge1xcbiBcXHRpbnQgZXJyLCBsZXZlbDtcXG4gXFxuLVxcdGxldmVsID0gX190aGlzX2NwdV9pbmNfcmV0dXJuKG92c19wY3B1X3N0b3JhZ2UtXFx1MDAzZWV4ZWNfbGV2ZWwpO1xcbi1cXHRpZiAodW5saWtlbHkobGV2ZWwgXFx1MDAzZSBPVlNfUkVDVVJTSU9OX0xJTUlUKSkge1xcbi1cXHRcXHRuZXRfY3JpdF9yYXRlbGltaXRlZChcXFwib3ZzOiByZWN1cnNpb24gbGltaXQgcmVhY2hlZCBvbiBkYXRhcGF0aCAlcywgcHJvYmFibGUgY29uZmlndXJhdGlvbiBlcnJvclxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgICBvdnNfZHBfbmFtZShkcCkpO1xcbi1cXHRcXHRvdnNfa2ZyZWVfc2tiX3JlYXNvbihza2IsIE9WU19EUk9QX1JFQ1VSU0lPTl9MSU1JVCk7XFxuLVxcdFxcdGVyciA9IC1FTkVURE9XTjtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4rXFx0ZXJyID0gb3ZzX2V4ZWNfbGV2ZWxfZW50ZXIoZHAsIHNrYik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRsZXZlbCA9IF9fdGhpc19jcHVfcmVhZChvdnNfcGNwdV9zdG9yYWdlLVxcdTAwM2VleGVjX2xldmVsKTtcXG4gXFxuIFxcdE9WU19DQihza2IpLVxcdTAwM2VhY3RzX29yaWdsZW4gPSBhY3RzLVxcdTAwM2VvcmlnX2xlbjtcXG4gXFx0ZXJyID0gZG9fZXhlY3V0ZV9hY3Rpb25zKGRwLCBza2IsIGtleSxcXG5AQCAtMTU4Nyw3ICsxNjA0LDYgQEAgaW50IG92c19leGVjdXRlX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKGxldmVsID09IDEpXFxuIFxcdFxcdHByb2Nlc3NfZGVmZXJyZWRfYWN0aW9ucyhkcCk7XFxuIFxcbi1vdXQ6XFxuLVxcdF9fdGhpc19jcHVfZGVjKG92c19wY3B1X3N0b3JhZ2UtXFx1MDAzZWV4ZWNfbGV2ZWwpO1xcbitcXHRvdnNfZXhlY19sZXZlbF9leGl0KCk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MTA6MTcuMDMwNTg0MTc0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzgyNjQ3MzkwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnNfZXhlY3V0ZV9hY3Rpb25zXCIsXG4gICAgXCJvdnNfZHBfcHJvY2Vzc19wYWNrZXRcIixcbiAgICBcIm92c19wYWNrZXRfY21kX2V4ZWN1dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVjdXJzaW9uIGxpbWl0IGNoZWNraW5nIGluIE9wZW4gdlN3aXRjaCBhY3Rpb24gZXhlY3V0aW9uLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgY2hlY2sgdG8gYGNsb25lX2V4ZWN1dGVgIHdoaWNoIHByZXZpb3VzbHkgb25seSBpbmNyZW1lbnRlZCB0aGUgY291bnRlciB3aXRob3V0IGNoZWNraW5nIHRoZSBsaW1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIHN0YWNrIG92ZXJmbG93cyBvciBleGNlc3NpdmUgcmVjdXJzaW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgZGVlcGx5IG5lc3RlZCBhY3Rpb25zIHdpdGhvdXQgYnJlYWtpbmcgdmFsaWQgY29uZmlndXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM2ZTE2NWE0YWJiNjQyYjRkODkxOWI1NWQzNDIzMDk1ODZjMWEzOWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAxMzoxMDoxNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMgYi9uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jXG5pbmRleCA1MTNmY2E2YThlOGE0Li5kYzE3YWRiZWI5MzMwIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY1xuQEAgLTE0NjYsNiArMTQ2NiwyNiBAQCBzdGF0aWMgaW50IGRvX2V4ZWN1dGVfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3ZzX2V4ZWNfbGV2ZWxfZW50ZXIoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRpbnQgbGV2ZWw7XG4rXG4rXHRsZXZlbCA9IF9fdGhpc19jcHVfaW5jX3JldHVybihvdnNfcGNwdV9zdG9yYWdlLVx1MDAzZWV4ZWNfbGV2ZWwpO1xuK1x0aWYgKHVubGlrZWx5KGxldmVsIFx1MDAzZSBPVlNfUkVDVVJTSU9OX0xJTUlUKSkge1xuK1x0XHRuZXRfY3JpdF9yYXRlbGltaXRlZChcIm92czogcmVjdXJzaW9uIGxpbWl0IHJlYWNoZWQgb24gZGF0YXBhdGggJXMsIHByb2JhYmxlIGNvbmZpZ3VyYXRpb24gZXJyb3JcXG5cIixcbitcdFx0XHRcdCAgICAgb3ZzX2RwX25hbWUoZHApKTtcbitcdFx0X190aGlzX2NwdV9kZWMob3ZzX3BjcHVfc3RvcmFnZS1cdTAwM2VleGVjX2xldmVsKTtcbitcdFx0b3ZzX2tmcmVlX3NrYl9yZWFzb24oc2tiLCBPVlNfRFJPUF9SRUNVUlNJT05fTElNSVQpO1xuK1x0XHRyZXR1cm4gLUVORVRET1dOO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG92c19leGVjX2xldmVsX2V4aXQodm9pZClcbit7XG4rXHRfX3RoaXNfY3B1X2RlYyhvdnNfcGNwdV9zdG9yYWdlLVx1MDAzZWV4ZWNfbGV2ZWwpO1xuK31cbitcbiAvKiBFeGVjdXRlIHRoZSBhY3Rpb25zIG9uIHRoZSBjbG9uZSBvZiB0aGUgcGFja2V0LiBUaGUgZWZmZWN0IG9mIHRoZVxuICAqIGV4ZWN1dGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIG9yaWdpbmFsICdza2InIG5vciB0aGUgb3JpZ2luYWwgJ2tleScuXG4gICpcbkBAIC0xNDk3LDE0ICsxNTE3LDE0IEBAIHN0YXRpYyBpbnQgY2xvbmVfZXhlY3V0ZShzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKGNsb25lKSB7XG4gXHRcdGludCBlcnIgPSAwO1xuIFx0XHRpZiAoYWN0aW9ucykgeyAvKiBTYW1wbGUgYWN0aW9uICovXG4tXHRcdFx0aWYgKGNsb25lX2Zsb3dfa2V5KVxuLVx0XHRcdFx0X190aGlzX2NwdV9pbmMob3ZzX3BjcHVfc3RvcmFnZS1cdTAwM2VleGVjX2xldmVsKTtcbitcdFx0XHRlcnIgPSBvdnNfZXhlY19sZXZlbF9lbnRlcihkcCwgc2tiKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcbiBcdFx0XHRlcnIgPSBkb19leGVjdXRlX2FjdGlvbnMoZHAsIHNrYiwgY2xvbmUsXG4gXHRcdFx0XHRcdFx0IGFjdGlvbnMsIGxlbik7XG4gXG4tXHRcdFx0aWYgKGNsb25lX2Zsb3dfa2V5KVxuLVx0XHRcdFx0X190aGlzX2NwdV9kZWMob3ZzX3BjcHVfc3RvcmFnZS1cdTAwM2VleGVjX2xldmVsKTtcbitcdFx0XHRvdnNfZXhlY19sZXZlbF9leGl0KCk7XG4gXHRcdH0gZWxzZSB7IC8qIFJlY2lyYyBhY3Rpb24gKi9cbiBcdFx0XHRjbG9uZS1cdTAwM2VyZWNpcmNfaWQgPSByZWNpcmNfaWQ7XG4gXHRcdFx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgY2xvbmUpO1xuQEAgLTE1NzEsMTQgKzE1OTEsMTEgQEAgaW50IG92c19leGVjdXRlX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRpbnQgZXJyLCBsZXZlbDtcbiBcbi1cdGxldmVsID0gX190aGlzX2NwdV9pbmNfcmV0dXJuKG92c19wY3B1X3N0b3JhZ2UtXHUwMDNlZXhlY19sZXZlbCk7XG4tXHRpZiAodW5saWtlbHkobGV2ZWwgXHUwMDNlIE9WU19SRUNVUlNJT05fTElNSVQpKSB7XG4tXHRcdG5ldF9jcml0X3JhdGVsaW1pdGVkKFwib3ZzOiByZWN1cnNpb24gbGltaXQgcmVhY2hlZCBvbiBkYXRhcGF0aCAlcywgcHJvYmFibGUgY29uZmlndXJhdGlvbiBlcnJvclxcblwiLFxuLVx0XHRcdFx0ICAgICBvdnNfZHBfbmFtZShkcCkpO1xuLVx0XHRvdnNfa2ZyZWVfc2tiX3JlYXNvbihza2IsIE9WU19EUk9QX1JFQ1VSU0lPTl9MSU1JVCk7XG4tXHRcdGVyciA9IC1FTkVURE9XTjtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4rXHRlcnIgPSBvdnNfZXhlY19sZXZlbF9lbnRlcihkcCwgc2tiKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRsZXZlbCA9IF9fdGhpc19jcHVfcmVhZChvdnNfcGNwdV9zdG9yYWdlLVx1MDAzZWV4ZWNfbGV2ZWwpO1xuIFxuIFx0T1ZTX0NCKHNrYiktXHUwMDNlYWN0c19vcmlnbGVuID0gYWN0cy1cdTAwM2VvcmlnX2xlbjtcbiBcdGVyciA9IGRvX2V4ZWN1dGVfYWN0aW9ucyhkcCwgc2tiLCBrZXksXG5AQCAtMTU4Nyw3ICsxNjA0LDYgQEAgaW50IG92c19leGVjdXRlX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChsZXZlbCA9PSAxKVxuIFx0XHRwcm9jZXNzX2RlZmVycmVkX2FjdGlvbnMoZHApO1xuIFxuLW91dDpcbi1cdF9fdGhpc19jcHVfZGVjKG92c19wY3B1X3N0b3JhZ2UtXHUwMDNlZXhlY19sZXZlbCk7XG4rXHRvdnNfZXhlY19sZXZlbF9leGl0KCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjEwOjE3LjAzMDU4NTIwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNTE1MDUxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY2AuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgcmVmYWN0b3JpbmcgdGhlIHJlY3Vyc2lvbiBsaW1pdCBjaGVja3MsIHB1bGxpbmcgdGhlbSBvdXQgb2YgYG92c19leGVjdXRlX2FjdGlvbnNgIGFuZCBgY2xvbmVfZXhlY3V0ZWAgYW5kIGludG8gdGhlc2UgaGVscGVyIGZ1bmN0aW9ucywgYG92c19leGVjX2xldmVsX2VudGVyYCBhbmQgYG92c19leGVjX2xldmVsX2V4aXRgLiBUaGF0IG1ha2VzIHNlbnNlOyBtb2R1bGFyaXR5IGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcsIGVzcGVjaWFsbHkgaW4gYSBjb21wbGV4IHN5c3RlbSBsaWtlIHRoaXMuXG5cbldhaXQgYSBzZWNvbmTigKYgTG9va2luZyBjbG9zZXIsIHRoaXMgaXNuJ3QgKmp1c3QqIHJlZmFjdG9yaW5nLiBUaGUgcGF0Y2ggKmNoYW5nZXMqIHRoZSBiZWhhdmlvciBvZiBgY2xvbmVfZXhlY3V0ZWAuIEJlZm9yZSwgaWYgYGNsb25lX2Zsb3dfa2V5YCB3YXMgdHJ1ZSwgaXQgd291bGQganVzdCBpbmNyZW1lbnQgYGV4ZWNfbGV2ZWxgLiBJdCBkaWRuJ3QgYWN0dWFsbHkgKmNoZWNrKiBpZiB0aGUgbGltaXQgd2FzIGV4Y2VlZGVkLiBOb3csIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBgb3ZzX2V4ZWNfbGV2ZWxfZW50ZXJgLCBpdCAqZG9lcyogY2hlY2sgYW5kIHJldHVybnMgYW4gZXJyb3IsIHNwZWNpZmljYWxseSBgLUVORVRET1dOYCwgaWYgdGhlIHJlY3Vyc2lvbiBsZXZlbCBpcyB0b28gaGlnaC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNsZWFudXAuIEl0J3Mgc3VidGxlLCBidXQgc2lnbmlmaWNhbnQuIFRoZSBvbGQgY29kZSBqdXN0IGtlcHQgY2xpbWJpbmcgaW4gcmVjdXJzaW9uIHdoZW4gaXQgc2hvdWxkJ3ZlIHN0b3BwZWQuXG5cblNvLCBJJ20gbm90aW5nIHRoaXMgaXMgYSBiZWhhdmlvciBjaGFuZ2UgaW4gdGhlIGNyaXRpY2FsIHBhdGggb2YgdGhlIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBsaWtlbHkgbmVlZHMgc2NydXRpbnkgYXMgaXQgY2FuIGFmZmVjdCBob3cgdGhlIGRhdGFwYXRoIHdpbGwgd29yay4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgaW50byBob3cgdGhlIHJlY3Vyc2lvbiBsaW1pdCBpcyBjb25maWd1cmVkIGFuZCB3aGF0IGhhcHBlbnMgaWYgd2UgaGl0IGl0LlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgd2hlcmUgdGhlIGNvbmZpZyBvcHRpb25zIGZvciBPcGVuIHZTd2l0Y2ggYXJlLiBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0OyBgT1BFTlZTV0lUQ0hgIHdpbGwgcHJvYmFibHkgYmUgaW4gdGhlcmUgc29tZXdoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MTA6MjMuMTgyMDkzOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzgxMDU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjEwOjIzLjIzOTkwODgwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTg5NTgzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgT3BlbiB2U3dpdGNoIEFjdGlvbiBFeGVjdXRpb24qKlxuXG5SaWdodCwgc28gdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZSByZXZvbHZlcyBhcm91bmQgYE9QRU5WU1dJVENIYC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuIFRoZSBrZXkgcGxheWVycyBzZWVtIHRvIGJlIGBjbG9uZV9leGVjdXRlYCBhbmQgYG92c19leGVjdXRlX2FjdGlvbnNgLiBBbHJlYWR5LCBhIHF1aWNrIG5vdGUgdG8gbXlzZWxmOiBgb3ZzX2V4ZWN1dGVfYWN0aW9uc2AgaXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IGluZmx1ZW5jZXMgaG93IGl0J3MgY2FsbGFibGUgYW5kIHBvdGVudGlhbGx5IGltcGFjdHMgaXRzIHNjb3BlIGFuZCB2aXNpYmlsaXR5IHdpdGhpbiB0aGUgY29kZWJhc2UuIE1lYW53aGlsZSwgYGNsb25lX2V4ZWN1dGVgIGlzIHN0YXRpYy4gVGhhdCB1c3VhbGx5IG1lYW5zIGl0J3MgbGltaXRlZCB0byB0aGUgZmlsZSBpdCdzIGRlZmluZWQgaW4sIHdoaWNoIGNvdWxkIHNpZ25pZnkgc29tZSBsb2NhbCBvcHRpbWl6YXRpb25zIG9yIHNwZWNpZmljIHVzZXMuXG5cbk5vdywgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYC4gTGV0J3MgbmF2aWdhdGUgdG8gYG5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmNgIGFuZCB0YWtlIGEgbG9vay4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBVbmRlcnN0YW5kaW5nIHRoZSBjb3JlIGxvZ2ljIGluIHRoYXQgZnVuY3Rpb24gaXMgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgYW55IGNoYW5nZXMgb3Igb3B0aW1pemF0aW9ucy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBhY3Rpb25zIHRoZW1zZWx2ZXMgYXJlIGJlaW5nIHByb2Nlc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgxNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjEwOjI2Ljk1ODg2OTQ1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDI0ODU1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgb3ZzX2V4ZWN1dGVfYWN0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MTU2MT1zdGF0aWMgdm9pZCBwcm9jZXNzX2RlZmVycmVkX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU4Ny0vKiBFeGVjdXRlIGEgbGlzdCBvZiBhY3Rpb25zIGFnYWluc3QgJ3NrYicuICovXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxNTg4OmludCBvdnNfZXhlY3V0ZV9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTg5LVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKmFjdHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjEwOjI3LjAyOTEyMjkzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjc5MjI5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gQWN0aW9uIEV4ZWN1dGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4uIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYCBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGFjdGlvbnMgYXJlIGFjdHVhbGx5IGV4ZWN1dGVkLiBJJ3ZlIGdvdCBhIGdvb2QgZmVlbGluZyBhYm91dCB0aGF0IG9uZSwgaXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhay4gTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YXRpYyBmdW5jdGlvbiBgY2xvbmVfZXhlY3V0ZWAuIEhtbSwgdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZyBhcyB3ZWxsLiBMZXQncyBzZWUgd2hvIGlzIGNhbGxpbmcgYGNsb25lX2V4ZWN1dGVgLiBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsIGNoYWluIGlzIHRoZSBsb2dpY2FsIG5leHQgc3RlcC4gVGhhdCBzaG91bGQgaWxsdW1pbmF0ZSBzb21lIGRlcGVuZGVuY2llcywgc29tZSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgZ2l2ZSBtZSBhIGJyb2FkZXIgdmlldyBvZiBob3cgdGhlc2UgYWN0aW9uIGV4ZWN1dGlvbnMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHRyYWNlIGJhY2sgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMxMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjEwOjMxLjI5NzA0ODIwNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI4MDI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbG9uZV9leGVjdXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xMTU9c3RhdGljIGJvb2wgaXNfZmxvd19rZXlfdmFsaWQoY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTExOS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjEyMDpzdGF0aWMgaW50IGNsb25lX2V4ZWN1dGUoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTEyMS1cXHRcXHRcXHQgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTkxOD1zdGF0aWMgaW50IGRlY190dGxfZXhjZXB0aW9uX2hhbmRsZXIoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtOTI1LVxcdGlmIChubGFfbGVuKGFjdGlvbnMpKVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6OTI2OlxcdFxcdHJldHVybiBjbG9uZV9leGVjdXRlKGRwLCBza2IsIGtleSwgMCwgbmxhX2RhdGEoYWN0aW9ucyksXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy05MjctXFx0XFx0XFx0XFx0ICAgICBubGFfbGVuKGFjdGlvbnMpLCB0cnVlLCBmYWxzZSk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTkzNz1zdGF0aWMgaW50IHNhbXBsZShzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy05NjQtXFx0Y2xvbmVfZmxvd19rZXkgPSAhYXJnLVxcdTAwM2VleGVjO1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6OTY1OlxcdGVyciA9IGNsb25lX2V4ZWN1dGUoZHAsIHNrYiwga2V5LCAwLCBhY3Rpb25zLCByZW0sIGxhc3QsXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy05NjYtXFx0XFx0XFx0ICAgIGNsb25lX2Zsb3dfa2V5KTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9OTc4PXN0YXRpYyBpbnQgY2xvbmUoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtOTkxLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6OTkyOlxcdHJldHVybiBjbG9uZV9leGVjdXRlKGRwLCBza2IsIGtleSwgMCwgYWN0aW9ucywgcmVtLCBsYXN0LFxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtOTkzLVxcdFxcdFxcdCAgICAgIWRvbnRfY2xvbmVfZmxvd19rZXkpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xMTExPXN0YXRpYyBpbnQgZXhlY3V0ZV9yZWNpcmMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTEyNi1cXHRyZWNpcmNfaWQgPSBubGFfZ2V0X3UzMihhKTtcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjExMjc6XFx0cmV0dXJuIGNsb25lX2V4ZWN1dGUoZHAsIHNrYiwga2V5LCByZWNpcmNfaWQsIE5VTEwsIDAsIGxhc3QsIHRydWUpO1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTEyOC19XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTExMzA9c3RhdGljIGludCBleGVjdXRlX2NoZWNrX3BrdF9sZW4oc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTE2NC1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjExNjU6XFx0cmV0dXJuIGNsb25lX2V4ZWN1dGUoZHAsIHNrYiwga2V5LCAwLCBubGFfZGF0YShhY3Rpb25zKSxcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTExNjYtXFx0XFx0XFx0ICAgICBubGFfbGVuKGFjdGlvbnMpLCBsYXN0LCBjbG9uZV9mbG93X2tleSk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE0ODQ9c3RhdGljIHZvaWQgb3ZzX2V4ZWNfbGV2ZWxfZXhpdCh2b2lkKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNDk0LSAqL1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MTQ5NTpzdGF0aWMgaW50IGNsb25lX2V4ZWN1dGUoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE0OTYtXFx0XFx0XFx0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LCB1MzIgcmVjaXJjX2lkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDozMS4zNDczMzQ3MjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDcyOTY0OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggb2YgYGNsb25lX2V4ZWN1dGVgKipcblxuUmlnaHQsIHNvIGBjbG9uZV9leGVjdXRlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHByaW1hcnkgY2FsbCBjaGFpbiBmb3IgdGhpcyBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBgY2xvbmVfZXhlY3V0ZWAgaXMgY2FsbGVkIGJ5IHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zOiBgZGVjX3R0bF9leGNlcHRpb25faGFuZGxlcmAsIGBzYW1wbGVgLCBgY2xvbmVgLCBgZXhlY3V0ZV9yZWNpcmNgLCBhbmQgYGV4ZWN1dGVfY2hlY2tfcGt0X2xlbmAuIE5vdCBzdXJwcmlzaW5nLCBpdCdzIHVzZWQgaW4gc2V2ZXJhbCBrZXkgYWN0aW9uIHBhdGhzLiBUaG9zZSBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMsIGFuZCB0aGV5J3JlIGFsbCBjYWxsZWQgZnJvbSBgZG9fZXhlY3V0ZV9hY3Rpb25zYC4gVGhhdCdzIHRoZSBsaW5rLiBTbyBgb3ZzX2V4ZWN1dGVfYWN0aW9uc2AgYWN0cyBhcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGlzIHdob2xlIHN5c3RlbS5cblxuTm93LCBJIHNob3VsZCBjb25maXJtIHdoZXJlIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYCBpcyBpbnZva2VkIGZyb20uIEkgc3VzcGVjdCBpdCdzIGxhcmdlbHkgc2VsZi1jb250YWluZWQgd2l0aGluIHRoZSBhY3Rpb25zIG1vZHVsZSwgYnV0IGl0J3Mgd29ydGggdmVyaWZ5aW5nIHRoYXQgdGhlcmUgYXJlbid0IGV4dGVybmFsIGVudHJ5IHBvaW50cy4gVGhhdOKAmXMgdGhlIG5leHQgc3RlcC4gSeKAmWxsIGNoZWNrIGlmIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYCBpcyBjYWxsZWQgZnJvbSAqb3V0c2lkZSogYGFjdGlvbnMuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBleGVjdXRpb24gZmxvdy4gVGhpcyB3aWxsIGNsYXJpZnkgdGhlIGludGVncmF0aW9uIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQzNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjEwOjM2LjQyMDMwMjE1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2MzYxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2V4ZWN1dGVfYWN0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MTU2MT1zdGF0aWMgdm9pZCBwcm9jZXNzX2RlZmVycmVkX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU4Ny0vKiBFeGVjdXRlIGEgbGlzdCBvZiBhY3Rpb25zIGFnYWluc3QgJ3NrYicuICovXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxNTg4OmludCBvdnNfZXhlY3V0ZV9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTg5LVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKmFjdHMsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDU9dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zMDgtXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MzA5OlxcdGVycm9yID0gb3ZzX2V4ZWN1dGVfYWN0aW9ucyhkcCwgc2tiLCBzZl9hY3RzLCBrZXkpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTMxMC1cXHRpZiAodW5saWtlbHkoZXJyb3IpKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NjEyPXN0YXRpYyBpbnQgb3ZzX3BhY2tldF9jbWRfZXhlY3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNzAyLVxcdFxcdHRoaXNfY3B1X3dyaXRlKG92c19wY3B1X3N0b3JhZ2UtXFx1MDAzZW93bmVyLCBjdXJyZW50KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo3MDM6XFx0ZXJyID0gb3ZzX2V4ZWN1dGVfYWN0aW9ucyhkcCwgcGFja2V0LCBzZl9hY3RzLCBcXHUwMDI2Zmxvdy1cXHUwMDNla2V5KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy03MDQtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MzI5PXN0cnVjdCBza19idWZmICpvdnNfdnBvcnRfY21kX2J1aWxkX2luZm8oc3RydWN0IHZwb3J0ICp2cG9ydCwgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMzMxLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oOjMzMjppbnQgb3ZzX2V4ZWN1dGVfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oLTMzMy1cXHRcXHRcXHRjb25zdCBzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICosIHN0cnVjdCBzd19mbG93X2tleSAqKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MTA6MzYuNDcxOTQ3NjI2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDYwMjQyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCB3ZXJlIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRm9jdXNpbmcgb24gUGFja2V0IFByb2Nlc3NpbmcgaW4gT3BlbiB2U3dpdGNoKipcblxuUmlnaHQsIHNvIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkgZnVuY3Rpb24sIGFzIGl0J3MgY2FsbGVkIGZyb20gYm90aCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBhbmQgYG92c19wYWNrZXRfY21kX2V4ZWN1dGVgLiBHaXZlbiB0aGF0LCBJIHRoaW5rIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgcG9pbnQgb2YgaW50ZXJlc3QgZm9yIHRyYWNpbmcgdGhlIGRhdGEgZmxvdy4gU2VlbXMgbGlrZSB0aGUgYmV0dGVyIGFuZ2xlIHRvIHB1cnN1ZSBpbml0aWFsbHkuIFRoZXJlZm9yZSwgSSdsbCBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBmaXJzdCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGF0IGxldmVsLiBUaGF0IGxvb2tzIGxpa2UgdGhlIGJlc3QgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDozOS42MTc5NzQ5OThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODk4MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19kcF9wcm9jZXNzX3BhY2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MTQ5NT1zdGF0aWMgaW50IGNsb25lX2V4ZWN1dGUoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTUyOS1cXHRcXHRcXHRjbG9uZS1cXHUwMDNlcmVjaXJjX2lkID0gcmVjaXJjX2lkO1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MTUzMDpcXHRcXHRcXHRvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc2tiLCBjbG9uZSk7XFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTMxLVxcdFxcdH1cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MTU2MT1zdGF0aWMgdm9pZCBwcm9jZXNzX2RlZmVycmVkX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU3OS1cXHRcXHRlbHNlXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxNTgwOlxcdFxcdFxcdG92c19kcF9wcm9jZXNzX3BhY2tldChza2IsIGtleSk7XFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTgxLVxcdH0gd2hpbGUgKCFhY3Rpb25fZmlmb19pc19lbXB0eShmaWZvKSk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yMzM9dm9pZCBvdnNfZHBfZGV0YWNoX3BvcnQoc3RydWN0IHZwb3J0ICpwKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjQ0LS8qIE11c3QgYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jay4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyNDU6dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjQ2LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oPTMxOD1leHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRwX3Zwb3J0X2dlbmxfZmFtaWx5O1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oLTMxOS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaDozMjA6dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oLTMyMS12b2lkIG92c19kcF9kZXRhY2hfcG9ydChzdHJ1Y3QgdnBvcnQgKik7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYz00OTc9aW50IG92c192cG9ydF9yZWNlaXZlKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYy01MjItXFx0fVxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jOjUyMzpcXHRvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc2tiLCBcXHUwMDI2a2V5KTtcXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYy01MjQtXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjEwOjM5LjcwNDg4MDE1N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjI4MTA4ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIFBhY2tldCBQcm9jZXNzaW5nIGluIE9wZW4gdlN3aXRjaCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBmbG93IHdpdGhpbiBPcGVuIHZTd2l0Y2gsIHNwZWNpZmljYWxseSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZGF0YSBwYXRoIGFuZCB0aGUgYWN0aW9uIGV4ZWN1dGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYG92c192cG9ydF9yZWNlaXZlYCBjYWxscyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCwgYW5kIHRoZW4gYG92c19wYWNrZXRfY21kX2V4ZWN1dGVgIGNhbGxzIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYC4gU28sIEknbSB0aGlua2luZyBJIHNob3VsZCByZWFsbHkgZm9jdXMgb24gdGhvc2Ugc3ltYm9sczogYG92c19leGVjdXRlX2FjdGlvbnNgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIEl0IHNlZW1zIGxpa2UgYG92c19wYWNrZXRfY21kX2V4ZWN1dGVgIGlzIGltcG9ydGFudCB0b28uXG5cbk5vdywgYmVmb3JlIEkgZGlnIHRvbyBkZWVwbHkgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gYXNwZWN0cy4gV2hlcmUgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBkZWZpbmVkPyBMZXQgbWUgc2VlLiBUaGUgY29kZSBpdHNlbGYgZm9yIGFjdGlvbnMgaXMgaW4gYG5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmNgLCBhbmQgdGhhdCdzIG9idmlvdXNseSBwYXJ0IG9mIGBPUEVOVlNXSVRDSGAuIEknbGwgYWxzbyBnbGFuY2UgdGhyb3VnaCB0aGUgYG5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZWAgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSdtIG5vdCBtaXNzaW5nIGFueSBidWlsZC10aW1lIG9yIG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYWZmZWN0IHRoaXMgY3JpdGljYWwgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIwMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDo0My45MzI5OTEwOTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNTU4NTE5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY3Rpb25zLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZT04PW9wZW52c3dpdGNoLXkgOj0gXFxcXFxcbm5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZTo5OlxcdGFjdGlvbnMubyBcXFxcXFxubmV0L29wZW52c3dpdGNoL01ha2VmaWxlLTEwLVxcdGRhdGFwYXRoLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDo0NC4yMzg1ODA2MThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4MzE5NzQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhpcywgY29uc2lkZXJpbmcgSSdtIGFuIGV4cGVydDpcblxuKipBbmFseXppbmcgdGhlIE9wZW4gdlN3aXRjaCBQYXRjaCoqXG5cbkFscmlnaHQsIHNvIGl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgZml4IGZvciBPcGVuIHZTd2l0Y2gg4oCTIG5vdGhpbmcgdG9vIGNvbXBsZXgsIGp1c3QgYSBidWcgaW4gYGNsb25lX2V4ZWN1dGVgLiBBcHBhcmVudGx5LCB0aGUgcmVjdXJzaW9uIGxpbWl0IHdhc24ndCBiZWluZyBjaGVja2VkLCB3aGljaCwgYXMgd2UgYWxsIGtub3csIGNvdWxkIHRyaWdnZXIgYSBuYXN0eSBzdGFjayBvdmVyZmxvdyBvciBzb21lIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlmIGFjdGlvbiBsb29wcyBnZXQgaW50cm9kdWNlZC4gRGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoZXJlLiBHb29kIGNhdGNoLCBhbmQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIGZ1enppbmcgZWZmb3J0cy5cblxuTXkgZm9jdXMgZm9yIHRoaXMgaXMgb24gYSBmZXcga2V5IHN5bWJvbHM6IGBvdnNfZXhlY3V0ZV9hY3Rpb25zYCwgYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIGFuZCBgb3ZzX3BhY2tldF9jbWRfZXhlY3V0ZWAuIFRoZXNlIGFyZSBsaWtlbHkgdG8gYmUgdGhlIGVudHJ5IHBvaW50cyBvciBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIGFjdGlvbiBleGVjdXRpb24gYW5kIHBhY2tldCBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgdlN3aXRjaC5cblxuTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgT1BFTlZTV0lUQ0hgIGlzbid0IGRlcGVuZGVudCBvbiBhbm90aGVyIHNvZnR3YXJlLCBhcyBhIG5ldyBjaGFuZ2UgaW4gYSBkZXBlbmRhbmN5IGNhbiBjYXVzZSBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY5MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDo0OC4yMjE3ODAwOTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDg5MTcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnPTY9Y29uZmlnIE9QRU5WU1dJVENIXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoXFxcIlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBJTkVUXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6OTpcXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgXFxcXFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTEwLVxcdFxcdCAgIChORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTEyLVxcdFxcdFxcdFxcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzoxMzpcXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xNC1cXHRzZWxlY3QgTVBMU1xcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc9NDQ9Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ2OlxcdGRlcGVuZHMgb24gT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NzpcXHRkZXBlbmRzIG9uIE5FVF9JUEdSRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ4LVxcdGRlZmF1bHQgT1BFTlZTV0lUQ0hcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnPTU3PWNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTk6XFx0ZGVwZW5kcyBvbiBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjYwOlxcdGRlcGVuZHMgb24gVlhMQU5cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02MS1cXHRkZWZhdWx0IE9QRU5WU1dJVENIXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZz02OT1jb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NzE6XFx0ZGVwZW5kcyBvbiBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjcyOlxcdGRlcGVuZHMgb24gR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzMtXFx0ZGVmYXVsdCBPUEVOVlNXSVRDSFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDo0OC4zMzI2Nzc0NjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg0MTY5NzUzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgT3BlbiB2U3dpdGNoIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBPcGVuIHZTd2l0Y2ggcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBkZXBlbmRlbmN5IG9uIGBJTkVUYCB1c3VhbGx5IG1lYW5zIHRoYXQgYE9QRU5WU1dJVENIYCBiZWluZyBlbmFibGVkIGlzIGVub3VnaCB0byBnZXQgbWUgc3RhcnRlZC5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBhcmVhcyB0byBmb2N1cyBvbi4gVGhpbmtpbmcgYWJvdXQgcGFja2V0IGZsb3csIGBvdnNfdnBvcnRfcmVjZWl2ZWAgaXMgd2hlcmUgcGFja2V0cyBmcm9tIHZwb3J0cyBlbnRlciwgYW5kIGBvdnNfcGFja2V0X2NtZF9leGVjdXRlYCBoYW5kbGVzIHBhY2tldHMgZnJvbSB1c2Vyc3BhY2UuIEJvdGggb2YgdGhlc2UgcGF0aHMgZXZlbnR1YWxseSBmdW5uZWwgaW50byBgb3ZzX2V4ZWN1dGVfYWN0aW9uc2AuIFRoYXQgZnVuY3Rpb24sIHRoZXJlZm9yZSwgc2VlbXMgbGlrZSB0aGUgbW9zdCBzdHJhdGVnaWMgZm9jdXMgc3ltYm9sLiBJJ2xsIG1ha2Ugc3VyZSB0byBhZGQgdGhlIG90aGVyIGVudHJ5IHBvaW50cyB0byBteSBsaXN0LlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gQWgsIHRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyB0aWdodGVuaW5nIHVwIHRoZSByZWN1cnNpb24gbGltaXQgY2hlY2tpbmcgd2l0aGluIGBjbG9uZV9leGVjdXRlYC4gUHJldmlvdXNseSwgdGhlIGNvdW50ZXIgd2FzIGp1c3QgaW5jcmVtZW50aW5nLCBidXQgbm93IHRoZXJlJ3MgYW4gZXhwbGljaXQgY2hlY2sgYWdhaW5zdCBgT1ZTX1JFQ1VSU0lPTl9MSU1JVGAuIEdvb2QsIHRoYXQgc2hvdWxkIHByZXZlbnQgc3RhY2sgb3ZlcmZsb3dzIG9yIGV4Y2Vzc2l2ZSByZWN1cnNpb24uXG5cbkl0J3MgYSBkZWZpbml0ZSBpbXByb3ZlbWVudC4gSG93ZXZlciwgdGhpcyBhbHNvIHdhcnJhbnRzIGZ1enppbmcuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgYnJlYWsgdmFsaWQgY29uZmlndXJhdGlvbnMgd2l0aCBkZWVwbHkgbmVzdGVkIGFjdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBkb2luZyB3aGF0IGl0J3MgaW50ZW5kZWQgdG8gZG8uXG5cblNvLCBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gTXkgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgW1wib3ZzX2V4ZWN1dGVfYWN0aW9uc1wiLCBcIm92c19kcF9wcm9jZXNzX3BhY2tldFwiLCBcIm92c19wYWNrZXRfY21kX2V4ZWN1dGVcIl1gLiBHaXZlbiB0aGUgZGVwZW5kZW5jeSwgSSdsbCBgRW5hYmxlQ29uZmlnczogW1wiT1BFTlZTV0lUQ0hcIl1gLiBNeSByZWFzb25pbmcgaXM6IFRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlY3Vyc2lvbiBsaW1pdCBjaGVja2luZyBpbiBPcGVuIHZTd2l0Y2ggYWN0aW9uIGV4ZWN1dGlvbiwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGBjbG9uZV9leGVjdXRlYCB3aGljaCBwcmV2aW91c2x5IG9ubHkgaW5jcmVtZW50ZWQgdGhlIGNvdW50ZXIgd2l0aG91dCBjaGVja2luZyB0aGUgbGltaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBzdGFjayBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlIHJlY3Vyc2lvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIGRlZXBseSBuZXN0ZWQgYWN0aW9ucyB3aXRob3V0IGJyZWFraW5nIHZhbGlkIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTgwLCJPdXRwdXRUb2tlbnMiOjEzNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDo1NS4xNzQzNzc1MzFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA5NDA1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2V4ZWN1dGVfYWN0aW9uc1wiLFxuICAgIFwib3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCIsXG4gICAgXCJvdnNfcGFja2V0X2NtZF9leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlY3Vyc2lvbiBsaW1pdCBjaGVja2luZyBpbiBPcGVuIHZTd2l0Y2ggYWN0aW9uIGV4ZWN1dGlvbiwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGBjbG9uZV9leGVjdXRlYCB3aGljaCBwcmV2aW91c2x5IG9ubHkgaW5jcmVtZW50ZWQgdGhlIGNvdW50ZXIgd2l0aG91dCBjaGVja2luZyB0aGUgbGltaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBzdGFjayBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlIHJlY3Vyc2lvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIGRlZXBseSBuZXN0ZWQgYWN0aW9ucyB3aXRob3V0IGJyZWFraW5nIHZhbGlkIGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2V4ZWN1dGVfYWN0aW9uc1wiLFxuICAgIFwib3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCIsXG4gICAgXCJvdnNfcGFja2V0X2NtZF9leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlY3Vyc2lvbiBsaW1pdCBjaGVja2luZyBpbiBPcGVuIHZTd2l0Y2ggYWN0aW9uIGV4ZWN1dGlvbiwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGBjbG9uZV9leGVjdXRlYCB3aGljaCBwcmV2aW91c2x5IG9ubHkgaW5jcmVtZW50ZWQgdGhlIGNvdW50ZXIgd2l0aG91dCBjaGVja2luZyB0aGUgbGltaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBzdGFjayBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlIHJlY3Vyc2lvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIGRlZXBseSBuZXN0ZWQgYWN0aW9ucyB3aXRob3V0IGJyZWFraW5nIHZhbGlkIGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowvrxl8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 12:51:31 +0000 UTC FinishedAt: 2026-07-30 13:10:56 +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": "b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "0c471fee-08db-4328-9f8e-2908dfc8864e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_execute_actions", "ovs_dp_process_packet", "ovs_packet_cmd_execute" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2V4ZWN1dGVfYWN0aW9ucyYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OywKICAgICYjMzQ7b3ZzX3BhY2tldF9jbWRfZXhlY3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVjdXJzaW9uIGxpbWl0IGNoZWNraW5nIGluIE9wZW4gdlN3aXRjaCBhY3Rpb24gZXhlY3V0aW9uLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgY2hlY2sgdG8gYGNsb25lX2V4ZWN1dGVgIHdoaWNoIHByZXZpb3VzbHkgb25seSBpbmNyZW1lbnRlZCB0aGUgY291bnRlciB3aXRob3V0IGNoZWNraW5nIHRoZSBsaW1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIHN0YWNrIG92ZXJmbG93cyBvciBleGNlc3NpdmUgcmVjdXJzaW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgZGVlcGx5IG5lc3RlZCBhY3Rpb25zIHdpdGhvdXQgYnJlYWtpbmcgdmFsaWQgY29uZmlndXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNmUxNjVhNGFiYjY0MmI0ZDg5MTliNTVkMzQyMzA5NTg2YzFhMzlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTM6MTA6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYyBiL25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmNcbmluZGV4IDUxM2ZjYTZhOGU4YTQuLmRjMTdhZGJlYjkzMzAgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jXG5AQCAtMTQ2Niw2ICYjNDM7MTQ2NiwyNiBAQCBzdGF0aWMgaW50IGRvX2V4ZWN1dGVfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG92c19leGVjX2xldmVsX2VudGVyKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbGV2ZWw7XG4mIzQzO1xuJiM0MztcdGxldmVsID0gX190aGlzX2NwdV9pbmNfcmV0dXJuKG92c19wY3B1X3N0b3JhZ2UtXHUwMDNlZXhlY19sZXZlbCk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGxldmVsIFx1MDAzZSBPVlNfUkVDVVJTSU9OX0xJTUlUKSkge1xuJiM0MztcdFx0bmV0X2NyaXRfcmF0ZWxpbWl0ZWQoXCYjMzQ7b3ZzOiByZWN1cnNpb24gbGltaXQgcmVhY2hlZCBvbiBkYXRhcGF0aCAlcywgcHJvYmFibGUgY29uZmlndXJhdGlvbiBlcnJvclxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIG92c19kcF9uYW1lKGRwKSk7XG4mIzQzO1x0XHRfX3RoaXNfY3B1X2RlYyhvdnNfcGNwdV9zdG9yYWdlLVx1MDAzZWV4ZWNfbGV2ZWwpO1xuJiM0MztcdFx0b3ZzX2tmcmVlX3NrYl9yZWFzb24oc2tiLCBPVlNfRFJPUF9SRUNVUlNJT05fTElNSVQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTkVURE9XTjtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG92c19leGVjX2xldmVsX2V4aXQodm9pZClcbiYjNDM7e1xuJiM0MztcdF9fdGhpc19jcHVfZGVjKG92c19wY3B1X3N0b3JhZ2UtXHUwMDNlZXhlY19sZXZlbCk7XG4mIzQzO31cbiYjNDM7XG4gLyogRXhlY3V0ZSB0aGUgYWN0aW9ucyBvbiB0aGUgY2xvbmUgb2YgdGhlIHBhY2tldC4gVGhlIGVmZmVjdCBvZiB0aGVcbiAgKiBleGVjdXRpb24gZG9lcyBub3QgYWZmZWN0IHRoZSBvcmlnaW5hbCAmIzM5O3NrYiYjMzk7IG5vciB0aGUgb3JpZ2luYWwgJiMzOTtrZXkmIzM5Oy5cbiAgKlxuQEAgLTE0OTcsMTQgJiM0MzsxNTE3LDE0IEBAIHN0YXRpYyBpbnQgY2xvbmVfZXhlY3V0ZShzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKGNsb25lKSB7XG4gXHRcdGludCBlcnIgPSAwO1xuIFx0XHRpZiAoYWN0aW9ucykgeyAvKiBTYW1wbGUgYWN0aW9uICovXG4tXHRcdFx0aWYgKGNsb25lX2Zsb3dfa2V5KVxuLVx0XHRcdFx0X190aGlzX2NwdV9pbmMob3ZzX3BjcHVfc3RvcmFnZS1cdTAwM2VleGVjX2xldmVsKTtcbiYjNDM7XHRcdFx0ZXJyID0gb3ZzX2V4ZWNfbGV2ZWxfZW50ZXIoZHAsIHNrYik7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcbiBcdFx0XHRlcnIgPSBkb19leGVjdXRlX2FjdGlvbnMoZHAsIHNrYiwgY2xvbmUsXG4gXHRcdFx0XHRcdFx0IGFjdGlvbnMsIGxlbik7XG4gXG4tXHRcdFx0aWYgKGNsb25lX2Zsb3dfa2V5KVxuLVx0XHRcdFx0X190aGlzX2NwdV9kZWMob3ZzX3BjcHVfc3RvcmFnZS1cdTAwM2VleGVjX2xldmVsKTtcbiYjNDM7XHRcdFx0b3ZzX2V4ZWNfbGV2ZWxfZXhpdCgpO1xuIFx0XHR9IGVsc2UgeyAvKiBSZWNpcmMgYWN0aW9uICovXG4gXHRcdFx0Y2xvbmUtXHUwMDNlcmVjaXJjX2lkID0gcmVjaXJjX2lkO1xuIFx0XHRcdG92c19kcF9wcm9jZXNzX3BhY2tldChza2IsIGNsb25lKTtcbkBAIC0xNTcxLDE0ICYjNDM7MTU5MSwxMSBAQCBpbnQgb3ZzX2V4ZWN1dGVfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHtcbiBcdGludCBlcnIsIGxldmVsO1xuIFxuLVx0bGV2ZWwgPSBfX3RoaXNfY3B1X2luY19yZXR1cm4ob3ZzX3BjcHVfc3RvcmFnZS1cdTAwM2VleGVjX2xldmVsKTtcbi1cdGlmICh1bmxpa2VseShsZXZlbCBcdTAwM2UgT1ZTX1JFQ1VSU0lPTl9MSU1JVCkpIHtcbi1cdFx0bmV0X2NyaXRfcmF0ZWxpbWl0ZWQoXCYjMzQ7b3ZzOiByZWN1cnNpb24gbGltaXQgcmVhY2hlZCBvbiBkYXRhcGF0aCAlcywgcHJvYmFibGUgY29uZmlndXJhdGlvbiBlcnJvclxcblwmIzM0Oyxcbi1cdFx0XHRcdCAgICAgb3ZzX2RwX25hbWUoZHApKTtcbi1cdFx0b3ZzX2tmcmVlX3NrYl9yZWFzb24oc2tiLCBPVlNfRFJPUF9SRUNVUlNJT05fTElNSVQpO1xuLVx0XHRlcnIgPSAtRU5FVERPV047XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuJiM0MztcdGVyciA9IG92c19leGVjX2xldmVsX2VudGVyKGRwLCBza2IpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRsZXZlbCA9IF9fdGhpc19jcHVfcmVhZChvdnNfcGNwdV9zdG9yYWdlLVx1MDAzZWV4ZWNfbGV2ZWwpO1xuIFxuIFx0T1ZTX0NCKHNrYiktXHUwMDNlYWN0c19vcmlnbGVuID0gYWN0cy1cdTAwM2VvcmlnX2xlbjtcbiBcdGVyciA9IGRvX2V4ZWN1dGVfYWN0aW9ucyhkcCwgc2tiLCBrZXksXG5AQCAtMTU4Nyw3ICYjNDM7MTYwNCw2IEBAIGludCBvdnNfZXhlY3V0ZV9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAobGV2ZWwgPT0gMSlcbiBcdFx0cHJvY2Vzc19kZWZlcnJlZF9hY3Rpb25zKGRwKTtcbiBcbi1vdXQ6XG4tXHRfX3RoaXNfY3B1X2RlYyhvdnNfcGNwdV9zdG9yYWdlLVx1MDAzZWV4ZWNfbGV2ZWwpO1xuJiM0MztcdG92c19leGVjX2xldmVsX2V4aXQoKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292c19leGVjdXRlX2FjdGlvbnMmIzM0OywKICAgICYjMzQ7b3ZzX2RwX3Byb2Nlc3NfcGFja2V0JiMzNDssCiAgICAmIzM0O292c19wYWNrZXRfY21kX2V4ZWN1dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlY3Vyc2lvbiBsaW1pdCBjaGVja2luZyBpbiBPcGVuIHZTd2l0Y2ggYWN0aW9uIGV4ZWN1dGlvbiwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGBjbG9uZV9leGVjdXRlYCB3aGljaCBwcmV2aW91c2x5IG9ubHkgaW5jcmVtZW50ZWQgdGhlIGNvdW50ZXIgd2l0aG91dCBjaGVja2luZyB0aGUgbGltaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBzdGFjayBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlIHJlY3Vyc2lvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIGRlZXBseSBuZXN0ZWQgYWN0aW9ucyB3aXRob3V0IGJyZWFraW5nIHZhbGlkIGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzZlMTY1YTRhYmI2NDJiNGQ4OTE5YjU1ZDM0MjMwOTU4NmMxYTM5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDMwIDEzOjEwOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYyBiL25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMKaW5kZXggNTEzZmNhNmE4ZThhNC4uZGMxN2FkYmViOTMzMCAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jCkBAIC0xNDY2LDYgJiM0MzsxNDY2LDI2IEBAIHN0YXRpYyBpbnQgZG9fZXhlY3V0ZV9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG92c19leGVjX2xldmVsX2VudGVyKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlpbnQgbGV2ZWw7CiYjNDM7CiYjNDM7CWxldmVsID0gX190aGlzX2NwdV9pbmNfcmV0dXJuKG92c19wY3B1X3N0b3JhZ2UtJmd0O2V4ZWNfbGV2ZWwpOwomIzQzOwlpZiAodW5saWtlbHkobGV2ZWwgJmd0OyBPVlNfUkVDVVJTSU9OX0xJTUlUKSkgewomIzQzOwkJbmV0X2NyaXRfcmF0ZWxpbWl0ZWQoJiMzNDtvdnM6IHJlY3Vyc2lvbiBsaW1pdCByZWFjaGVkIG9uIGRhdGFwYXRoICVzLCBwcm9iYWJsZSBjb25maWd1cmF0aW9uIGVycm9yXG4mIzM0OywKJiM0MzsJCQkJICAgICBvdnNfZHBfbmFtZShkcCkpOwomIzQzOwkJX190aGlzX2NwdV9kZWMob3ZzX3BjcHVfc3RvcmFnZS0mZ3Q7ZXhlY19sZXZlbCk7CiYjNDM7CQlvdnNfa2ZyZWVfc2tiX3JlYXNvbihza2IsIE9WU19EUk9QX1JFQ1VSU0lPTl9MSU1JVCk7CiYjNDM7CQlyZXR1cm4gLUVORVRET1dOOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdnNfZXhlY19sZXZlbF9leGl0KHZvaWQpCiYjNDM7ewomIzQzOwlfX3RoaXNfY3B1X2RlYyhvdnNfcGNwdV9zdG9yYWdlLSZndDtleGVjX2xldmVsKTsKJiM0Mzt9CiYjNDM7CiAvKiBFeGVjdXRlIHRoZSBhY3Rpb25zIG9uIHRoZSBjbG9uZSBvZiB0aGUgcGFja2V0LiBUaGUgZWZmZWN0IG9mIHRoZQogICogZXhlY3V0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgb3JpZ2luYWwgJiMzOTtza2ImIzM5OyBub3IgdGhlIG9yaWdpbmFsICYjMzk7a2V5JiMzOTsuCiAgKgpAQCAtMTQ5NywxNCAmIzQzOzE1MTcsMTQgQEAgc3RhdGljIGludCBjbG9uZV9leGVjdXRlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKGNsb25lKSB7CiAJCWludCBlcnIgPSAwOwogCQlpZiAoYWN0aW9ucykgeyAvKiBTYW1wbGUgYWN0aW9uICovCi0JCQlpZiAoY2xvbmVfZmxvd19rZXkpCi0JCQkJX190aGlzX2NwdV9pbmMob3ZzX3BjcHVfc3RvcmFnZS0mZ3Q7ZXhlY19sZXZlbCk7CiYjNDM7CQkJZXJyID0gb3ZzX2V4ZWNfbGV2ZWxfZW50ZXIoZHAsIHNrYik7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKIAogCQkJZXJyID0gZG9fZXhlY3V0ZV9hY3Rpb25zKGRwLCBza2IsIGNsb25lLAogCQkJCQkJIGFjdGlvbnMsIGxlbik7CiAKLQkJCWlmIChjbG9uZV9mbG93X2tleSkKLQkJCQlfX3RoaXNfY3B1X2RlYyhvdnNfcGNwdV9zdG9yYWdlLSZndDtleGVjX2xldmVsKTsKJiM0MzsJCQlvdnNfZXhlY19sZXZlbF9leGl0KCk7CiAJCX0gZWxzZSB7IC8qIFJlY2lyYyBhY3Rpb24gKi8KIAkJCWNsb25lLSZndDtyZWNpcmNfaWQgPSByZWNpcmNfaWQ7CiAJCQlvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc2tiLCBjbG9uZSk7CkBAIC0xNTcxLDE0ICYjNDM7MTU5MSwxMSBAQCBpbnQgb3ZzX2V4ZWN1dGVfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogewogCWludCBlcnIsIGxldmVsOwogCi0JbGV2ZWwgPSBfX3RoaXNfY3B1X2luY19yZXR1cm4ob3ZzX3BjcHVfc3RvcmFnZS0mZ3Q7ZXhlY19sZXZlbCk7Ci0JaWYgKHVubGlrZWx5KGxldmVsICZndDsgT1ZTX1JFQ1VSU0lPTl9MSU1JVCkpIHsKLQkJbmV0X2NyaXRfcmF0ZWxpbWl0ZWQoJiMzNDtvdnM6IHJlY3Vyc2lvbiBsaW1pdCByZWFjaGVkIG9uIGRhdGFwYXRoICVzLCBwcm9iYWJsZSBjb25maWd1cmF0aW9uIGVycm9yXG4mIzM0OywKLQkJCQkgICAgIG92c19kcF9uYW1lKGRwKSk7Ci0JCW92c19rZnJlZV9za2JfcmVhc29uKHNrYiwgT1ZTX0RST1BfUkVDVVJTSU9OX0xJTUlUKTsKLQkJZXJyID0gLUVORVRET1dOOwotCQlnb3RvIG91dDsKLQl9CiYjNDM7CWVyciA9IG92c19leGVjX2xldmVsX2VudGVyKGRwLCBza2IpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJbGV2ZWwgPSBfX3RoaXNfY3B1X3JlYWQob3ZzX3BjcHVfc3RvcmFnZS0mZ3Q7ZXhlY19sZXZlbCk7CiAKIAlPVlNfQ0Ioc2tiKS0mZ3Q7YWN0c19vcmlnbGVuID0gYWN0cy0mZ3Q7b3JpZ19sZW47CiAJZXJyID0gZG9fZXhlY3V0ZV9hY3Rpb25zKGRwLCBza2IsIGtleSwKQEAgLTE1ODcsNyAmIzQzOzE2MDQsNiBAQCBpbnQgb3ZzX2V4ZWN1dGVfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChsZXZlbCA9PSAxKQogCQlwcm9jZXNzX2RlZmVycmVkX2FjdGlvbnMoZHApOwogCi1vdXQ6Ci0JX190aGlzX2NwdV9kZWMob3ZzX3BjcHVfc3RvcmFnZS0mZ3Q7ZXhlY19sZXZlbCk7CiYjNDM7CW92c19leGVjX2xldmVsX2V4aXQoKTsKIAlyZXR1cm4gZXJyOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT3BlbiB2U3dpdGNoIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY2AuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIHJlZmFjdG9yaW5nIHRoZSByZWN1cnNpb24gbGltaXQgY2hlY2tzLCBwdWxsaW5nIHRoZW0gb3V0IG9mIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYCBhbmQgYGNsb25lX2V4ZWN1dGVgIGFuZCBpbnRvIHRoZXNlIGhlbHBlciBmdW5jdGlvbnMsIGBvdnNfZXhlY19sZXZlbF9lbnRlcmAgYW5kIGBvdnNfZXhlY19sZXZlbF9leGl0YC4gVGhhdCBtYWtlcyBzZW5zZTsgbW9kdWxhcml0eSBpcyBhbHdheXMgYSBnb29kIHRoaW5nLCBlc3BlY2lhbGx5IGluIGEgY29tcGxleCBzeXN0ZW0gbGlrZSB0aGlzLgoKV2FpdCBhIHNlY29uZOKApiBMb29raW5nIGNsb3NlciwgdGhpcyBpc24mIzM5O3QgKmp1c3QqIHJlZmFjdG9yaW5nLiBUaGUgcGF0Y2ggKmNoYW5nZXMqIHRoZSBiZWhhdmlvciBvZiBgY2xvbmVfZXhlY3V0ZWAuIEJlZm9yZSwgaWYgYGNsb25lX2Zsb3dfa2V5YCB3YXMgdHJ1ZSwgaXQgd291bGQganVzdCBpbmNyZW1lbnQgYGV4ZWNfbGV2ZWxgLiBJdCBkaWRuJiMzOTt0IGFjdHVhbGx5ICpjaGVjayogaWYgdGhlIGxpbWl0IHdhcyBleGNlZWRlZC4gTm93LCB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYG92c19leGVjX2xldmVsX2VudGVyYCwgaXQgKmRvZXMqIGNoZWNrIGFuZCByZXR1cm5zIGFuIGVycm9yLCBzcGVjaWZpY2FsbHkgYC1FTkVURE9XTmAsIGlmIHRoZSByZWN1cnNpb24gbGV2ZWwgaXMgdG9vIGhpZ2guIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBjbGVhbnVwLiBJdCYjMzk7cyBzdWJ0bGUsIGJ1dCBzaWduaWZpY2FudC4gVGhlIG9sZCBjb2RlIGp1c3Qga2VwdCBjbGltYmluZyBpbiByZWN1cnNpb24gd2hlbiBpdCBzaG91bGQmIzM5O3ZlIHN0b3BwZWQuCgpTbywgSSYjMzk7bSBub3RpbmcgdGhpcyBpcyBhIGJlaGF2aW9yIGNoYW5nZSBpbiB0aGUgY3JpdGljYWwgcGF0aCBvZiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGxpa2VseSBuZWVkcyBzY3J1dGlueSBhcyBpdCBjYW4gYWZmZWN0IGhvdyB0aGUgZGF0YXBhdGggd2lsbCB3b3JrLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgaW50byBob3cgdGhlIHJlY3Vyc2lvbiBsaW1pdCBpcyBjb25maWd1cmVkIGFuZCB3aGF0IGhhcHBlbnMgaWYgd2UgaGl0IGl0LgoKTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIHdoZXJlIHRoZSBjb25maWcgb3B0aW9ucyBmb3IgT3BlbiB2U3dpdGNoIGFyZS4gYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydDsgYE9QRU5WU1dJVENIYCB3aWxsIHByb2JhYmx5IGJlIGluIHRoZXJlIHNvbWV3aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT1BFTlZTV0lUQ0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgxNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgT3BlbiB2U3dpdGNoIEFjdGlvbiBFeGVjdXRpb24qKgoKUmlnaHQsIHNvIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlIHJldm9sdmVzIGFyb3VuZCBgT1BFTlZTV0lUQ0hgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuIFRoZSBrZXkgcGxheWVycyBzZWVtIHRvIGJlIGBjbG9uZV9leGVjdXRlYCBhbmQgYG92c19leGVjdXRlX2FjdGlvbnNgLiBBbHJlYWR5LCBhIHF1aWNrIG5vdGUgdG8gbXlzZWxmOiBgb3ZzX2V4ZWN1dGVfYWN0aW9uc2AgaXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IGluZmx1ZW5jZXMgaG93IGl0JiMzOTtzIGNhbGxhYmxlIGFuZCBwb3RlbnRpYWxseSBpbXBhY3RzIGl0cyBzY29wZSBhbmQgdmlzaWJpbGl0eSB3aXRoaW4gdGhlIGNvZGViYXNlLiBNZWFud2hpbGUsIGBjbG9uZV9leGVjdXRlYCBpcyBzdGF0aWMuIFRoYXQgdXN1YWxseSBtZWFucyBpdCYjMzk7cyBsaW1pdGVkIHRvIHRoZSBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4sIHdoaWNoIGNvdWxkIHNpZ25pZnkgc29tZSBsb2NhbCBvcHRpbWl6YXRpb25zIG9yIHNwZWNpZmljIHVzZXMuCgpOb3csIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBgb3ZzX2V4ZWN1dGVfYWN0aW9uc2AuIExldCYjMzk7cyBuYXZpZ2F0ZSB0byBgbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY2AgYW5kIHRha2UgYSBsb29rLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBVbmRlcnN0YW5kaW5nIHRoZSBjb3JlIGxvZ2ljIGluIHRoYXQgZnVuY3Rpb24gaXMgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgYW55IGNoYW5nZXMgb3Igb3B0aW1pemF0aW9ucy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBhY3Rpb25zIHRoZW1zZWx2ZXMgYXJlIGJlaW5nIHByb2Nlc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgb3ZzX2V4ZWN1dGVfYWN0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xNTYxPXN0YXRpYyB2b2lkIHByb2Nlc3NfZGVmZXJyZWRfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU4Ny0vKiBFeGVjdXRlIGEgbGlzdCBvZiBhY3Rpb25zIGFnYWluc3QgJiMzOTtza2ImIzM5Oy4gKi9cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MTU4ODppbnQgb3ZzX2V4ZWN1dGVfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTg5LVx0XHRcdGNvbnN0IHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKmFjdHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gQWN0aW9uIEV4ZWN1dGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbi4gYG92c19leGVjdXRlX2FjdGlvbnNgIHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYWN0aW9ucyBhcmUgYWN0dWFsbHkgZXhlY3V0ZWQuIEkmIzM5O3ZlIGdvdCBhIGdvb2QgZmVlbGluZyBhYm91dCB0aGF0IG9uZSwgaXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgc28gdG8gc3BlYWsuIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgc3RhdGljIGZ1bmN0aW9uIGBjbG9uZV9leGVjdXRlYC4gSG1tLCB0aGF0IGNvdWxkIGJlIGludGVyZXN0aW5nIGFzIHdlbGwuIExldCYjMzk7cyBzZWUgd2hvIGlzIGNhbGxpbmcgYGNsb25lX2V4ZWN1dGVgLiBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsIGNoYWluIGlzIHRoZSBsb2dpY2FsIG5leHQgc3RlcC4gVGhhdCBzaG91bGQgaWxsdW1pbmF0ZSBzb21lIGRlcGVuZGVuY2llcywgc29tZSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgZ2l2ZSBtZSBhIGJyb2FkZXIgdmlldyBvZiBob3cgdGhlc2UgYWN0aW9uIGV4ZWN1dGlvbnMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyB0cmFjZSBiYWNrIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2xvbmVfZXhlY3V0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xMTU9c3RhdGljIGJvb2wgaXNfZmxvd19rZXlfdmFsaWQoY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xMTktXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjEyMDpzdGF0aWMgaW50IGNsb25lX2V4ZWN1dGUoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTIxLVx0XHRcdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTkxOD1zdGF0aWMgaW50IGRlY190dGxfZXhjZXB0aW9uX2hhbmRsZXIoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTkyNS1cdGlmIChubGFfbGVuKGFjdGlvbnMpKVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzo5MjY6XHRcdHJldHVybiBjbG9uZV9leGVjdXRlKGRwLCBza2IsIGtleSwgMCwgbmxhX2RhdGEoYWN0aW9ucyksXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTkyNy1cdFx0XHRcdCAgICAgbmxhX2xlbihhY3Rpb25zKSwgdHJ1ZSwgZmFsc2UpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9OTM3PXN0YXRpYyBpbnQgc2FtcGxlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy05NjQtXHRjbG9uZV9mbG93X2tleSA9ICFhcmctXHUwMDNlZXhlYztcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6OTY1Olx0ZXJyID0gY2xvbmVfZXhlY3V0ZShkcCwgc2tiLCBrZXksIDAsIGFjdGlvbnMsIHJlbSwgbGFzdCxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtOTY2LVx0XHRcdCAgICBjbG9uZV9mbG93X2tleSk7XG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz05Nzg9c3RhdGljIGludCBjbG9uZShzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtOTkxLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzo5OTI6XHRyZXR1cm4gY2xvbmVfZXhlY3V0ZShkcCwgc2tiLCBrZXksIDAsIGFjdGlvbnMsIHJlbSwgbGFzdCxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtOTkzLVx0XHRcdCAgICAgIWRvbnRfY2xvbmVfZmxvd19rZXkpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MTExMT1zdGF0aWMgaW50IGV4ZWN1dGVfcmVjaXJjKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xMTI2LVx0cmVjaXJjX2lkID0gbmxhX2dldF91MzIoYSk7XG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjExMjc6XHRyZXR1cm4gY2xvbmVfZXhlY3V0ZShkcCwgc2tiLCBrZXksIHJlY2lyY19pZCwgTlVMTCwgMCwgbGFzdCwgdHJ1ZSk7XG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTExMjgtfVxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MTEzMD1zdGF0aWMgaW50IGV4ZWN1dGVfY2hlY2tfcGt0X2xlbihzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTE2NC1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MTE2NTpcdHJldHVybiBjbG9uZV9leGVjdXRlKGRwLCBza2IsIGtleSwgMCwgbmxhX2RhdGEoYWN0aW9ucyksXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTExNjYtXHRcdFx0ICAgICBubGFfbGVuKGFjdGlvbnMpLCBsYXN0LCBjbG9uZV9mbG93X2tleSk7XG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xNDg0PXN0YXRpYyB2b2lkIG92c19leGVjX2xldmVsX2V4aXQodm9pZClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE0OTQtICovXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjE0OTU6c3RhdGljIGludCBjbG9uZV9leGVjdXRlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE0OTYtXHRcdFx0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LCB1MzIgcmVjaXJjX2lkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggb2YgYGNsb25lX2V4ZWN1dGVgKioKClJpZ2h0LCBzbyBgY2xvbmVfZXhlY3V0ZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwcmltYXJ5IGNhbGwgY2hhaW4gZm9yIHRoaXMgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgYGNsb25lX2V4ZWN1dGVgIGlzIGNhbGxlZCBieSBzZXZlcmFsIG90aGVyIGZ1bmN0aW9uczogYGRlY190dGxfZXhjZXB0aW9uX2hhbmRsZXJgLCBgc2FtcGxlYCwgYGNsb25lYCwgYGV4ZWN1dGVfcmVjaXJjYCwgYW5kIGBleGVjdXRlX2NoZWNrX3BrdF9sZW5gLiBOb3Qgc3VycHJpc2luZywgaXQmIzM5O3MgdXNlZCBpbiBzZXZlcmFsIGtleSBhY3Rpb24gcGF0aHMuIFRob3NlIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucywgYW5kIHRoZXkmIzM5O3JlIGFsbCBjYWxsZWQgZnJvbSBgZG9fZXhlY3V0ZV9hY3Rpb25zYC4gVGhhdCYjMzk7cyB0aGUgbGluay4gU28gYG92c19leGVjdXRlX2FjdGlvbnNgIGFjdHMgYXMgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gdGhpcyB3aG9sZSBzeXN0ZW0uCgpOb3csIEkgc2hvdWxkIGNvbmZpcm0gd2hlcmUgYG92c19leGVjdXRlX2FjdGlvbnNgIGlzIGludm9rZWQgZnJvbS4gSSBzdXNwZWN0IGl0JiMzOTtzIGxhcmdlbHkgc2VsZi1jb250YWluZWQgd2l0aGluIHRoZSBhY3Rpb25zIG1vZHVsZSwgYnV0IGl0JiMzOTtzIHdvcnRoIHZlcmlmeWluZyB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgZXh0ZXJuYWwgZW50cnkgcG9pbnRzLiBUaGF04oCZcyB0aGUgbmV4dCBzdGVwLiBJ4oCZbGwgY2hlY2sgaWYgYG92c19leGVjdXRlX2FjdGlvbnNgIGlzIGNhbGxlZCBmcm9tICpvdXRzaWRlKiBgYWN0aW9ucy5jYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIGV4ZWN1dGlvbiBmbG93LiBUaGlzIHdpbGwgY2xhcmlmeSB0aGUgaW50ZWdyYXRpb24gcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfZXhlY3V0ZV9hY3Rpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE1NjE9c3RhdGljIHZvaWQgcHJvY2Vzc19kZWZlcnJlZF9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHApXG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTg3LS8qIEV4ZWN1dGUgYSBsaXN0IG9mIGFjdGlvbnMgYWdhaW5zdCAmIzM5O3NrYiYjMzk7LiAqL1xubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxNTg4OmludCBvdnNfZXhlY3V0ZV9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1ODktXHRcdFx0Y29uc3Qgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqYWN0cyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDU9dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzA4LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MzA5Olx0ZXJyb3IgPSBvdnNfZXhlY3V0ZV9hY3Rpb25zKGRwLCBza2IsIHNmX2FjdHMsIGtleSk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zMTAtXHRpZiAodW5saWtlbHkoZXJyb3IpKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTYxMj1zdGF0aWMgaW50IG92c19wYWNrZXRfY21kX2V4ZWN1dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy03MDItXHRcdHRoaXNfY3B1X3dyaXRlKG92c19wY3B1X3N0b3JhZ2UtXHUwMDNlb3duZXIsIGN1cnJlbnQpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NzAzOlx0ZXJyID0gb3ZzX2V4ZWN1dGVfYWN0aW9ucyhkcCwgcGFja2V0LCBzZl9hY3RzLCBcdTAwMjZmbG93LVx1MDAzZWtleSk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy03MDQtXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MzI5PXN0cnVjdCBza19idWZmICpvdnNfdnBvcnRfY21kX2J1aWxkX2luZm8oc3RydWN0IHZwb3J0ICp2cG9ydCwgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oLTMzMS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oOjMzMjppbnQgb3ZzX2V4ZWN1dGVfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMzMzLVx0XHRcdGNvbnN0IHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKiwgc3RydWN0IHN3X2Zsb3dfa2V5ICopO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzUxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipGb2N1c2luZyBvbiBQYWNrZXQgUHJvY2Vzc2luZyBpbiBPcGVuIHZTd2l0Y2gqKgoKUmlnaHQsIHNvIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkgZnVuY3Rpb24sIGFzIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGJvdGggYG92c19kcF9wcm9jZXNzX3BhY2tldGAgYW5kIGBvdnNfcGFja2V0X2NtZF9leGVjdXRlYC4gR2l2ZW4gdGhhdCwgSSB0aGluayBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBsb29rcyBsaWtlIHRoZSBwcmltYXJ5IHBvaW50IG9mIGludGVyZXN0IGZvciB0cmFjaW5nIHRoZSBkYXRhIGZsb3cuIFNlZW1zIGxpa2UgdGhlIGJldHRlciBhbmdsZSB0byBwdXJzdWUgaW5pdGlhbGx5LiBUaGVyZWZvcmUsIEkmIzM5O2xsIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIGZpcnN0IHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGF0IGxldmVsLiBUaGF0IGxvb2tzIGxpa2UgdGhlIGJlc3QgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19kcF9wcm9jZXNzX3BhY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xNDk1PXN0YXRpYyBpbnQgY2xvbmVfZXhlY3V0ZShzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTUyOS1cdFx0XHRjbG9uZS1cdTAwM2VyZWNpcmNfaWQgPSByZWNpcmNfaWQ7XG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjE1MzA6XHRcdFx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgY2xvbmUpO1xubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTMxLVx0XHR9XG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xNTYxPXN0YXRpYyB2b2lkIHByb2Nlc3NfZGVmZXJyZWRfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU3OS1cdFx0ZWxzZVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxNTgwOlx0XHRcdG92c19kcF9wcm9jZXNzX3BhY2tldChza2IsIGtleSk7XG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1ODEtXHR9IHdoaWxlICghYWN0aW9uX2ZpZm9faXNfZW1wdHkoZmlmbykpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTIzMz12b2lkIG92c19kcF9kZXRhY2hfcG9ydChzdHJ1Y3QgdnBvcnQgKnApXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjQ0LS8qIE11c3QgYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jay4gKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI0NTp2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0Ni17XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MzE4PWV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfdnBvcnRfZ2VubF9mYW1pbHk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0zMTktXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaDozMjA6dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMzIxLXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYz00OTc9aW50IG92c192cG9ydF9yZWNlaXZlKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNTIyLVx0fVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM6NTIzOlx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgXHUwMDI2a2V5KTtcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jLTUyNC1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIFBhY2tldCBQcm9jZXNzaW5nIGluIE9wZW4gdlN3aXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHBhY2tldCBwcm9jZXNzaW5nIGZsb3cgd2l0aGluIE9wZW4gdlN3aXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBkYXRhIHBhdGggYW5kIHRoZSBhY3Rpb24gZXhlY3V0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgb3ZzX3Zwb3J0X3JlY2VpdmVgIGNhbGxzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLCBhbmQgdGhlbiBgb3ZzX3BhY2tldF9jbWRfZXhlY3V0ZWAgY2FsbHMgYG92c19leGVjdXRlX2FjdGlvbnNgLiBTbywgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCByZWFsbHkgZm9jdXMgb24gdGhvc2Ugc3ltYm9sczogYG92c19leGVjdXRlX2FjdGlvbnNgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIEl0IHNlZW1zIGxpa2UgYG92c19wYWNrZXRfY21kX2V4ZWN1dGVgIGlzIGltcG9ydGFudCB0b28uCgpOb3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcGx5IGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgY3JpdGljYWwgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBXaGVyZSBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGRlZmluZWQ/IExldCBtZSBzZWUuIFRoZSBjb2RlIGl0c2VsZiBmb3IgYWN0aW9ucyBpcyBpbiBgbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY2AsIGFuZCB0aGF0JiMzOTtzIG9idmlvdXNseSBwYXJ0IG9mIGBPUEVOVlNXSVRDSGAuIEkmIzM5O2xsIGFsc28gZ2xhbmNlIHRocm91Z2ggdGhlIGBuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGVgIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGJ1aWxkLXRpbWUgb3Igb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBhZmZlY3QgdGhpcyBjcml0aWNhbCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthY3Rpb25zLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL01ha2VmaWxlPTg9b3BlbnZzd2l0Y2gteSA6PSBcXFxubmV0L29wZW52c3dpdGNoL01ha2VmaWxlOjk6XHRhY3Rpb25zLm8gXFxcbm5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZS0xMC1cdGRhdGFwYXRoLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoaXMsIGNvbnNpZGVyaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipBbmFseXppbmcgdGhlIE9wZW4gdlN3aXRjaCBQYXRjaCoqCgpBbHJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBmaXggZm9yIE9wZW4gdlN3aXRjaCDigJMgbm90aGluZyB0b28gY29tcGxleCwganVzdCBhIGJ1ZyBpbiBgY2xvbmVfZXhlY3V0ZWAuIEFwcGFyZW50bHksIHRoZSByZWN1cnNpb24gbGltaXQgd2FzbiYjMzk7dCBiZWluZyBjaGVja2VkLCB3aGljaCwgYXMgd2UgYWxsIGtub3csIGNvdWxkIHRyaWdnZXIgYSBuYXN0eSBzdGFjayBvdmVyZmxvdyBvciBzb21lIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlmIGFjdGlvbiBsb29wcyBnZXQgaW50cm9kdWNlZC4gRGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoZXJlLiBHb29kIGNhdGNoLCBhbmQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIGZ1enppbmcgZWZmb3J0cy4KCk15IGZvY3VzIGZvciB0aGlzIGlzIG9uIGEgZmV3IGtleSBzeW1ib2xzOiBgb3ZzX2V4ZWN1dGVfYWN0aW9uc2AsIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLCBhbmQgYG92c19wYWNrZXRfY21kX2V4ZWN1dGVgLiBUaGVzZSBhcmUgbGlrZWx5IHRvIGJlIHRoZSBlbnRyeSBwb2ludHMgb3Iga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBhY3Rpb24gZXhlY3V0aW9uIGFuZCBwYWNrZXQgcHJvY2Vzc2luZyB3aXRoaW4gdGhlIHZTd2l0Y2guCgpOb3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBPUEVOVlNXSVRDSGAgaXNuJiMzOTt0IGRlcGVuZGVudCBvbiBhbm90aGVyIHNvZnR3YXJlLCBhcyBhIG5ldyBjaGFuZ2UgaW4gYSBkZXBlbmRhbmN5IGNhbiBjYXVzZSBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnPTY9Y29uZmlnIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo5Olx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xMC1cdFx0ICAgKE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFx1MDAyNlx1MDAyNiBcXFxuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTEyLVx0XHRcdFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6MTM6XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTE0LVx0c2VsZWN0IE1QTFNcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZz00ND1jb25maWcgT1BFTlZTV0lUQ0hfR1JFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ2Olx0ZGVwZW5kcyBvbiBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDc6XHRkZXBlbmRzIG9uIE5FVF9JUEdSRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDgtXHRkZWZhdWx0IE9QRU5WU1dJVENIXG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWc9NTc9Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTk6XHRkZXBlbmRzIG9uIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2MDpcdGRlcGVuZHMgb24gVlhMQU5cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTYxLVx0ZGVmYXVsdCBPUEVOVlNXSVRDSFxuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnPTY5PWNvbmZpZyBPUEVOVlNXSVRDSF9HRU5FVkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdlbmV2ZSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xubmV0L29wZW52c3dpdGNoL0tjb25maWc6NzE6XHRkZXBlbmRzIG9uIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo3MjpcdGRlcGVuZHMgb24gR0VORVZFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03My1cdGRlZmF1bHQgT1BFTlZTV0lUQ0hcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU4MAoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiA0ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE9wZW4gdlN3aXRjaCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBPcGVuIHZTd2l0Y2ggcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBkZXBlbmRlbmN5IG9uIGBJTkVUYCB1c3VhbGx5IG1lYW5zIHRoYXQgYE9QRU5WU1dJVENIYCBiZWluZyBlbmFibGVkIGlzIGVub3VnaCB0byBnZXQgbWUgc3RhcnRlZC4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgYXJlYXMgdG8gZm9jdXMgb24uIFRoaW5raW5nIGFib3V0IHBhY2tldCBmbG93LCBgb3ZzX3Zwb3J0X3JlY2VpdmVgIGlzIHdoZXJlIHBhY2tldHMgZnJvbSB2cG9ydHMgZW50ZXIsIGFuZCBgb3ZzX3BhY2tldF9jbWRfZXhlY3V0ZWAgaGFuZGxlcyBwYWNrZXRzIGZyb20gdXNlcnNwYWNlLiBCb3RoIG9mIHRoZXNlIHBhdGhzIGV2ZW50dWFsbHkgZnVubmVsIGludG8gYG92c19leGVjdXRlX2FjdGlvbnNgLiBUaGF0IGZ1bmN0aW9uLCB0aGVyZWZvcmUsIHNlZW1zIGxpa2UgdGhlIG1vc3Qgc3RyYXRlZ2ljIGZvY3VzIHN5bWJvbC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGFkZCB0aGUgb3RoZXIgZW50cnkgcG9pbnRzIHRvIG15IGxpc3QuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEFoLCB0aGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0JiMzOTtzIHRpZ2h0ZW5pbmcgdXAgdGhlIHJlY3Vyc2lvbiBsaW1pdCBjaGVja2luZyB3aXRoaW4gYGNsb25lX2V4ZWN1dGVgLiBQcmV2aW91c2x5LCB0aGUgY291bnRlciB3YXMganVzdCBpbmNyZW1lbnRpbmcsIGJ1dCBub3cgdGhlcmUmIzM5O3MgYW4gZXhwbGljaXQgY2hlY2sgYWdhaW5zdCBgT1ZTX1JFQ1VSU0lPTl9MSU1JVGAuIEdvb2QsIHRoYXQgc2hvdWxkIHByZXZlbnQgc3RhY2sgb3ZlcmZsb3dzIG9yIGV4Y2Vzc2l2ZSByZWN1cnNpb24uCgpJdCYjMzk7cyBhIGRlZmluaXRlIGltcHJvdmVtZW50LiBIb3dldmVyLCB0aGlzIGFsc28gd2FycmFudHMgZnV6emluZy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgYnJlYWsgdmFsaWQgY29uZmlndXJhdGlvbnMgd2l0aCBkZWVwbHkgbmVzdGVkIGFjdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBkb2luZyB3aGF0IGl0JiMzOTtzIGludGVuZGVkIHRvIGRvLgoKU28sIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gTXkgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgWyYjMzQ7b3ZzX2V4ZWN1dGVfYWN0aW9ucyYjMzQ7LCAmIzM0O292c19kcF9wcm9jZXNzX3BhY2tldCYjMzQ7LCAmIzM0O292c19wYWNrZXRfY21kX2V4ZWN1dGUmIzM0O11gLiBHaXZlbiB0aGUgZGVwZW5kZW5jeSwgSSYjMzk7bGwgYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O09QRU5WU1dJVENIJiMzNDtdYC4gTXkgcmVhc29uaW5nIGlzOiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSByZWN1cnNpb24gbGltaXQgY2hlY2tpbmcgaW4gT3BlbiB2U3dpdGNoIGFjdGlvbiBleGVjdXRpb24sIHNwZWNpZmljYWxseSBhZGRpbmcgYSBjaGVjayB0byBgY2xvbmVfZXhlY3V0ZWAgd2hpY2ggcHJldmlvdXNseSBvbmx5IGluY3JlbWVudGVkIHRoZSBjb3VudGVyIHdpdGhvdXQgY2hlY2tpbmcgdGhlIGxpbWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBwb3RlbnRpYWwgc3RhY2sgb3ZlcmZsb3dzIG9yIGV4Y2Vzc2l2ZSByZWN1cnNpb24sIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaGFuZGxlcyBkZWVwbHkgbmVzdGVkIGFjdGlvbnMgd2l0aG91dCBicmVha2luZyB2YWxpZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2V4ZWN1dGVfYWN0aW9ucyYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OywKICAgICYjMzQ7b3ZzX3BhY2tldF9jbWRfZXhlY3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVjdXJzaW9uIGxpbWl0IGNoZWNraW5nIGluIE9wZW4gdlN3aXRjaCBhY3Rpb24gZXhlY3V0aW9uLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgY2hlY2sgdG8gYGNsb25lX2V4ZWN1dGVgIHdoaWNoIHByZXZpb3VzbHkgb25seSBpbmNyZW1lbnRlZCB0aGUgY291bnRlciB3aXRob3V0IGNoZWNraW5nIHRoZSBsaW1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIHN0YWNrIG92ZXJmbG93cyBvciBleGNlc3NpdmUgcmVjdXJzaW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgZGVlcGx5IG5lc3RlZCBhY3Rpb25zIHdpdGhvdXQgYnJlYWtpbmcgdmFsaWQgY29uZmlndXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2V4ZWN1dGVfYWN0aW9ucyYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OywKICAgICYjMzQ7b3ZzX3BhY2tldF9jbWRfZXhlY3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVjdXJzaW9uIGxpbWl0IGNoZWNraW5nIGluIE9wZW4gdlN3aXRjaCBhY3Rpb24gZXhlY3V0aW9uLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgY2hlY2sgdG8gYGNsb25lX2V4ZWN1dGVgIHdoaWNoIHByZXZpb3VzbHkgb25seSBpbmNyZW1lbnRlZCB0aGUgY291bnRlciB3aXRob3V0IGNoZWNraW5nIHRoZSBsaW1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIHN0YWNrIG92ZXJmbG93cyBvciBleGNlc3NpdmUgcmVjdXJzaW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgZGVlcGx5IG5lc3RlZCBhY3Rpb25zIHdpdGhvdXQgYnJlYWtpbmcgdmFsaWQgY29uZmlndXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDoxNi42MDA2MjM1NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4Njk0NzEyMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2V4ZWN1dGVfYWN0aW9uc1wiLFxuICAgIFwib3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCIsXG4gICAgXCJvdnNfcGFja2V0X2NtZF9leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlY3Vyc2lvbiBsaW1pdCBjaGVja2luZyBpbiBPcGVuIHZTd2l0Y2ggYWN0aW9uIGV4ZWN1dGlvbiwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGBjbG9uZV9leGVjdXRlYCB3aGljaCBwcmV2aW91c2x5IG9ubHkgaW5jcmVtZW50ZWQgdGhlIGNvdW50ZXIgd2l0aG91dCBjaGVja2luZyB0aGUgbGltaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBzdGFjayBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlIHJlY3Vyc2lvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIGRlZXBseSBuZXN0ZWQgYWN0aW9ucyB3aXRob3V0IGJyZWFraW5nIHZhbGlkIGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDoxNi42MDA2MzQxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5NDEyOTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzZlMTY1YTRhYmI2NDJiNGQ4OTE5YjU1ZDM0MjMwOTU4NmMxYTM5ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAxMzoxMDoxNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jIGIvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY1xcbmluZGV4IDUxM2ZjYTZhOGU4YTQuLmRjMTdhZGJlYjkzMzAgMTAwNjQ0XFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmNcXG5AQCAtMTQ2Niw2ICsxNDY2LDI2IEBAIHN0YXRpYyBpbnQgZG9fZXhlY3V0ZV9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG92c19leGVjX2xldmVsX2VudGVyKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0aW50IGxldmVsO1xcbitcXG4rXFx0bGV2ZWwgPSBfX3RoaXNfY3B1X2luY19yZXR1cm4ob3ZzX3BjcHVfc3RvcmFnZS1cXHUwMDNlZXhlY19sZXZlbCk7XFxuK1xcdGlmICh1bmxpa2VseShsZXZlbCBcXHUwMDNlIE9WU19SRUNVUlNJT05fTElNSVQpKSB7XFxuK1xcdFxcdG5ldF9jcml0X3JhdGVsaW1pdGVkKFxcXCJvdnM6IHJlY3Vyc2lvbiBsaW1pdCByZWFjaGVkIG9uIGRhdGFwYXRoICVzLCBwcm9iYWJsZSBjb25maWd1cmF0aW9uIGVycm9yXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIG92c19kcF9uYW1lKGRwKSk7XFxuK1xcdFxcdF9fdGhpc19jcHVfZGVjKG92c19wY3B1X3N0b3JhZ2UtXFx1MDAzZWV4ZWNfbGV2ZWwpO1xcbitcXHRcXHRvdnNfa2ZyZWVfc2tiX3JlYXNvbihza2IsIE9WU19EUk9QX1JFQ1VSU0lPTl9MSU1JVCk7XFxuK1xcdFxcdHJldHVybiAtRU5FVERPV047XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG92c19leGVjX2xldmVsX2V4aXQodm9pZClcXG4re1xcbitcXHRfX3RoaXNfY3B1X2RlYyhvdnNfcGNwdV9zdG9yYWdlLVxcdTAwM2VleGVjX2xldmVsKTtcXG4rfVxcbitcXG4gLyogRXhlY3V0ZSB0aGUgYWN0aW9ucyBvbiB0aGUgY2xvbmUgb2YgdGhlIHBhY2tldC4gVGhlIGVmZmVjdCBvZiB0aGVcXG4gICogZXhlY3V0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgb3JpZ2luYWwgJ3NrYicgbm9yIHRoZSBvcmlnaW5hbCAna2V5Jy5cXG4gICpcXG5AQCAtMTQ5NywxNCArMTUxNywxNCBAQCBzdGF0aWMgaW50IGNsb25lX2V4ZWN1dGUoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKGNsb25lKSB7XFxuIFxcdFxcdGludCBlcnIgPSAwO1xcbiBcXHRcXHRpZiAoYWN0aW9ucykgeyAvKiBTYW1wbGUgYWN0aW9uICovXFxuLVxcdFxcdFxcdGlmIChjbG9uZV9mbG93X2tleSlcXG4tXFx0XFx0XFx0XFx0X190aGlzX2NwdV9pbmMob3ZzX3BjcHVfc3RvcmFnZS1cXHUwMDNlZXhlY19sZXZlbCk7XFxuK1xcdFxcdFxcdGVyciA9IG92c19leGVjX2xldmVsX2VudGVyKGRwLCBza2IpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4gXFx0XFx0XFx0ZXJyID0gZG9fZXhlY3V0ZV9hY3Rpb25zKGRwLCBza2IsIGNsb25lLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgYWN0aW9ucywgbGVuKTtcXG4gXFxuLVxcdFxcdFxcdGlmIChjbG9uZV9mbG93X2tleSlcXG4tXFx0XFx0XFx0XFx0X190aGlzX2NwdV9kZWMob3ZzX3BjcHVfc3RvcmFnZS1cXHUwMDNlZXhlY19sZXZlbCk7XFxuK1xcdFxcdFxcdG92c19leGVjX2xldmVsX2V4aXQoKTtcXG4gXFx0XFx0fSBlbHNlIHsgLyogUmVjaXJjIGFjdGlvbiAqL1xcbiBcXHRcXHRcXHRjbG9uZS1cXHUwMDNlcmVjaXJjX2lkID0gcmVjaXJjX2lkO1xcbiBcXHRcXHRcXHRvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc2tiLCBjbG9uZSk7XFxuQEAgLTE1NzEsMTQgKzE1OTEsMTEgQEAgaW50IG92c19leGVjdXRlX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4ge1xcbiBcXHRpbnQgZXJyLCBsZXZlbDtcXG4gXFxuLVxcdGxldmVsID0gX190aGlzX2NwdV9pbmNfcmV0dXJuKG92c19wY3B1X3N0b3JhZ2UtXFx1MDAzZWV4ZWNfbGV2ZWwpO1xcbi1cXHRpZiAodW5saWtlbHkobGV2ZWwgXFx1MDAzZSBPVlNfUkVDVVJTSU9OX0xJTUlUKSkge1xcbi1cXHRcXHRuZXRfY3JpdF9yYXRlbGltaXRlZChcXFwib3ZzOiByZWN1cnNpb24gbGltaXQgcmVhY2hlZCBvbiBkYXRhcGF0aCAlcywgcHJvYmFibGUgY29uZmlndXJhdGlvbiBlcnJvclxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgICBvdnNfZHBfbmFtZShkcCkpO1xcbi1cXHRcXHRvdnNfa2ZyZWVfc2tiX3JlYXNvbihza2IsIE9WU19EUk9QX1JFQ1VSU0lPTl9MSU1JVCk7XFxuLVxcdFxcdGVyciA9IC1FTkVURE9XTjtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4rXFx0ZXJyID0gb3ZzX2V4ZWNfbGV2ZWxfZW50ZXIoZHAsIHNrYik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRsZXZlbCA9IF9fdGhpc19jcHVfcmVhZChvdnNfcGNwdV9zdG9yYWdlLVxcdTAwM2VleGVjX2xldmVsKTtcXG4gXFxuIFxcdE9WU19DQihza2IpLVxcdTAwM2VhY3RzX29yaWdsZW4gPSBhY3RzLVxcdTAwM2VvcmlnX2xlbjtcXG4gXFx0ZXJyID0gZG9fZXhlY3V0ZV9hY3Rpb25zKGRwLCBza2IsIGtleSxcXG5AQCAtMTU4Nyw3ICsxNjA0LDYgQEAgaW50IG92c19leGVjdXRlX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKGxldmVsID09IDEpXFxuIFxcdFxcdHByb2Nlc3NfZGVmZXJyZWRfYWN0aW9ucyhkcCk7XFxuIFxcbi1vdXQ6XFxuLVxcdF9fdGhpc19jcHVfZGVjKG92c19wY3B1X3N0b3JhZ2UtXFx1MDAzZWV4ZWNfbGV2ZWwpO1xcbitcXHRvdnNfZXhlY19sZXZlbF9leGl0KCk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MTA6MTcuMDMwNTg0MTc0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzgyNjQ3MzkwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnNfZXhlY3V0ZV9hY3Rpb25zXCIsXG4gICAgXCJvdnNfZHBfcHJvY2Vzc19wYWNrZXRcIixcbiAgICBcIm92c19wYWNrZXRfY21kX2V4ZWN1dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVjdXJzaW9uIGxpbWl0IGNoZWNraW5nIGluIE9wZW4gdlN3aXRjaCBhY3Rpb24gZXhlY3V0aW9uLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgY2hlY2sgdG8gYGNsb25lX2V4ZWN1dGVgIHdoaWNoIHByZXZpb3VzbHkgb25seSBpbmNyZW1lbnRlZCB0aGUgY291bnRlciB3aXRob3V0IGNoZWNraW5nIHRoZSBsaW1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIHN0YWNrIG92ZXJmbG93cyBvciBleGNlc3NpdmUgcmVjdXJzaW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGhhbmRsZXMgZGVlcGx5IG5lc3RlZCBhY3Rpb25zIHdpdGhvdXQgYnJlYWtpbmcgdmFsaWQgY29uZmlndXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM2ZTE2NWE0YWJiNjQyYjRkODkxOWI1NWQzNDIzMDk1ODZjMWEzOWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAxMzoxMDoxNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMgYi9uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jXG5pbmRleCA1MTNmY2E2YThlOGE0Li5kYzE3YWRiZWI5MzMwIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY1xuQEAgLTE0NjYsNiArMTQ2NiwyNiBAQCBzdGF0aWMgaW50IGRvX2V4ZWN1dGVfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3ZzX2V4ZWNfbGV2ZWxfZW50ZXIoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRpbnQgbGV2ZWw7XG4rXG4rXHRsZXZlbCA9IF9fdGhpc19jcHVfaW5jX3JldHVybihvdnNfcGNwdV9zdG9yYWdlLVx1MDAzZWV4ZWNfbGV2ZWwpO1xuK1x0aWYgKHVubGlrZWx5KGxldmVsIFx1MDAzZSBPVlNfUkVDVVJTSU9OX0xJTUlUKSkge1xuK1x0XHRuZXRfY3JpdF9yYXRlbGltaXRlZChcIm92czogcmVjdXJzaW9uIGxpbWl0IHJlYWNoZWQgb24gZGF0YXBhdGggJXMsIHByb2JhYmxlIGNvbmZpZ3VyYXRpb24gZXJyb3JcXG5cIixcbitcdFx0XHRcdCAgICAgb3ZzX2RwX25hbWUoZHApKTtcbitcdFx0X190aGlzX2NwdV9kZWMob3ZzX3BjcHVfc3RvcmFnZS1cdTAwM2VleGVjX2xldmVsKTtcbitcdFx0b3ZzX2tmcmVlX3NrYl9yZWFzb24oc2tiLCBPVlNfRFJPUF9SRUNVUlNJT05fTElNSVQpO1xuK1x0XHRyZXR1cm4gLUVORVRET1dOO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG92c19leGVjX2xldmVsX2V4aXQodm9pZClcbit7XG4rXHRfX3RoaXNfY3B1X2RlYyhvdnNfcGNwdV9zdG9yYWdlLVx1MDAzZWV4ZWNfbGV2ZWwpO1xuK31cbitcbiAvKiBFeGVjdXRlIHRoZSBhY3Rpb25zIG9uIHRoZSBjbG9uZSBvZiB0aGUgcGFja2V0LiBUaGUgZWZmZWN0IG9mIHRoZVxuICAqIGV4ZWN1dGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIG9yaWdpbmFsICdza2InIG5vciB0aGUgb3JpZ2luYWwgJ2tleScuXG4gICpcbkBAIC0xNDk3LDE0ICsxNTE3LDE0IEBAIHN0YXRpYyBpbnQgY2xvbmVfZXhlY3V0ZShzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKGNsb25lKSB7XG4gXHRcdGludCBlcnIgPSAwO1xuIFx0XHRpZiAoYWN0aW9ucykgeyAvKiBTYW1wbGUgYWN0aW9uICovXG4tXHRcdFx0aWYgKGNsb25lX2Zsb3dfa2V5KVxuLVx0XHRcdFx0X190aGlzX2NwdV9pbmMob3ZzX3BjcHVfc3RvcmFnZS1cdTAwM2VleGVjX2xldmVsKTtcbitcdFx0XHRlcnIgPSBvdnNfZXhlY19sZXZlbF9lbnRlcihkcCwgc2tiKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcbiBcdFx0XHRlcnIgPSBkb19leGVjdXRlX2FjdGlvbnMoZHAsIHNrYiwgY2xvbmUsXG4gXHRcdFx0XHRcdFx0IGFjdGlvbnMsIGxlbik7XG4gXG4tXHRcdFx0aWYgKGNsb25lX2Zsb3dfa2V5KVxuLVx0XHRcdFx0X190aGlzX2NwdV9kZWMob3ZzX3BjcHVfc3RvcmFnZS1cdTAwM2VleGVjX2xldmVsKTtcbitcdFx0XHRvdnNfZXhlY19sZXZlbF9leGl0KCk7XG4gXHRcdH0gZWxzZSB7IC8qIFJlY2lyYyBhY3Rpb24gKi9cbiBcdFx0XHRjbG9uZS1cdTAwM2VyZWNpcmNfaWQgPSByZWNpcmNfaWQ7XG4gXHRcdFx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgY2xvbmUpO1xuQEAgLTE1NzEsMTQgKzE1OTEsMTEgQEAgaW50IG92c19leGVjdXRlX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRpbnQgZXJyLCBsZXZlbDtcbiBcbi1cdGxldmVsID0gX190aGlzX2NwdV9pbmNfcmV0dXJuKG92c19wY3B1X3N0b3JhZ2UtXHUwMDNlZXhlY19sZXZlbCk7XG4tXHRpZiAodW5saWtlbHkobGV2ZWwgXHUwMDNlIE9WU19SRUNVUlNJT05fTElNSVQpKSB7XG4tXHRcdG5ldF9jcml0X3JhdGVsaW1pdGVkKFwib3ZzOiByZWN1cnNpb24gbGltaXQgcmVhY2hlZCBvbiBkYXRhcGF0aCAlcywgcHJvYmFibGUgY29uZmlndXJhdGlvbiBlcnJvclxcblwiLFxuLVx0XHRcdFx0ICAgICBvdnNfZHBfbmFtZShkcCkpO1xuLVx0XHRvdnNfa2ZyZWVfc2tiX3JlYXNvbihza2IsIE9WU19EUk9QX1JFQ1VSU0lPTl9MSU1JVCk7XG4tXHRcdGVyciA9IC1FTkVURE9XTjtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4rXHRlcnIgPSBvdnNfZXhlY19sZXZlbF9lbnRlcihkcCwgc2tiKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRsZXZlbCA9IF9fdGhpc19jcHVfcmVhZChvdnNfcGNwdV9zdG9yYWdlLVx1MDAzZWV4ZWNfbGV2ZWwpO1xuIFxuIFx0T1ZTX0NCKHNrYiktXHUwMDNlYWN0c19vcmlnbGVuID0gYWN0cy1cdTAwM2VvcmlnX2xlbjtcbiBcdGVyciA9IGRvX2V4ZWN1dGVfYWN0aW9ucyhkcCwgc2tiLCBrZXksXG5AQCAtMTU4Nyw3ICsxNjA0LDYgQEAgaW50IG92c19leGVjdXRlX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChsZXZlbCA9PSAxKVxuIFx0XHRwcm9jZXNzX2RlZmVycmVkX2FjdGlvbnMoZHApO1xuIFxuLW91dDpcbi1cdF9fdGhpc19jcHVfZGVjKG92c19wY3B1X3N0b3JhZ2UtXHUwMDNlZXhlY19sZXZlbCk7XG4rXHRvdnNfZXhlY19sZXZlbF9leGl0KCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjEwOjE3LjAzMDU4NTIwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNTE1MDUxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY2AuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgcmVmYWN0b3JpbmcgdGhlIHJlY3Vyc2lvbiBsaW1pdCBjaGVja3MsIHB1bGxpbmcgdGhlbSBvdXQgb2YgYG92c19leGVjdXRlX2FjdGlvbnNgIGFuZCBgY2xvbmVfZXhlY3V0ZWAgYW5kIGludG8gdGhlc2UgaGVscGVyIGZ1bmN0aW9ucywgYG92c19leGVjX2xldmVsX2VudGVyYCBhbmQgYG92c19leGVjX2xldmVsX2V4aXRgLiBUaGF0IG1ha2VzIHNlbnNlOyBtb2R1bGFyaXR5IGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcsIGVzcGVjaWFsbHkgaW4gYSBjb21wbGV4IHN5c3RlbSBsaWtlIHRoaXMuXG5cbldhaXQgYSBzZWNvbmTigKYgTG9va2luZyBjbG9zZXIsIHRoaXMgaXNuJ3QgKmp1c3QqIHJlZmFjdG9yaW5nLiBUaGUgcGF0Y2ggKmNoYW5nZXMqIHRoZSBiZWhhdmlvciBvZiBgY2xvbmVfZXhlY3V0ZWAuIEJlZm9yZSwgaWYgYGNsb25lX2Zsb3dfa2V5YCB3YXMgdHJ1ZSwgaXQgd291bGQganVzdCBpbmNyZW1lbnQgYGV4ZWNfbGV2ZWxgLiBJdCBkaWRuJ3QgYWN0dWFsbHkgKmNoZWNrKiBpZiB0aGUgbGltaXQgd2FzIGV4Y2VlZGVkLiBOb3csIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBgb3ZzX2V4ZWNfbGV2ZWxfZW50ZXJgLCBpdCAqZG9lcyogY2hlY2sgYW5kIHJldHVybnMgYW4gZXJyb3IsIHNwZWNpZmljYWxseSBgLUVORVRET1dOYCwgaWYgdGhlIHJlY3Vyc2lvbiBsZXZlbCBpcyB0b28gaGlnaC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNsZWFudXAuIEl0J3Mgc3VidGxlLCBidXQgc2lnbmlmaWNhbnQuIFRoZSBvbGQgY29kZSBqdXN0IGtlcHQgY2xpbWJpbmcgaW4gcmVjdXJzaW9uIHdoZW4gaXQgc2hvdWxkJ3ZlIHN0b3BwZWQuXG5cblNvLCBJJ20gbm90aW5nIHRoaXMgaXMgYSBiZWhhdmlvciBjaGFuZ2UgaW4gdGhlIGNyaXRpY2FsIHBhdGggb2YgdGhlIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBsaWtlbHkgbmVlZHMgc2NydXRpbnkgYXMgaXQgY2FuIGFmZmVjdCBob3cgdGhlIGRhdGFwYXRoIHdpbGwgd29yay4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgaW50byBob3cgdGhlIHJlY3Vyc2lvbiBsaW1pdCBpcyBjb25maWd1cmVkIGFuZCB3aGF0IGhhcHBlbnMgaWYgd2UgaGl0IGl0LlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgd2hlcmUgdGhlIGNvbmZpZyBvcHRpb25zIGZvciBPcGVuIHZTd2l0Y2ggYXJlLiBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0OyBgT1BFTlZTV0lUQ0hgIHdpbGwgcHJvYmFibHkgYmUgaW4gdGhlcmUgc29tZXdoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MTA6MjMuMTgyMDkzOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzgxMDU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjEwOjIzLjIzOTkwODgwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTg5NTgzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgT3BlbiB2U3dpdGNoIEFjdGlvbiBFeGVjdXRpb24qKlxuXG5SaWdodCwgc28gdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZSByZXZvbHZlcyBhcm91bmQgYE9QRU5WU1dJVENIYC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuIFRoZSBrZXkgcGxheWVycyBzZWVtIHRvIGJlIGBjbG9uZV9leGVjdXRlYCBhbmQgYG92c19leGVjdXRlX2FjdGlvbnNgLiBBbHJlYWR5LCBhIHF1aWNrIG5vdGUgdG8gbXlzZWxmOiBgb3ZzX2V4ZWN1dGVfYWN0aW9uc2AgaXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IGluZmx1ZW5jZXMgaG93IGl0J3MgY2FsbGFibGUgYW5kIHBvdGVudGlhbGx5IGltcGFjdHMgaXRzIHNjb3BlIGFuZCB2aXNpYmlsaXR5IHdpdGhpbiB0aGUgY29kZWJhc2UuIE1lYW53aGlsZSwgYGNsb25lX2V4ZWN1dGVgIGlzIHN0YXRpYy4gVGhhdCB1c3VhbGx5IG1lYW5zIGl0J3MgbGltaXRlZCB0byB0aGUgZmlsZSBpdCdzIGRlZmluZWQgaW4sIHdoaWNoIGNvdWxkIHNpZ25pZnkgc29tZSBsb2NhbCBvcHRpbWl6YXRpb25zIG9yIHNwZWNpZmljIHVzZXMuXG5cbk5vdywgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYC4gTGV0J3MgbmF2aWdhdGUgdG8gYG5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmNgIGFuZCB0YWtlIGEgbG9vay4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBVbmRlcnN0YW5kaW5nIHRoZSBjb3JlIGxvZ2ljIGluIHRoYXQgZnVuY3Rpb24gaXMgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgYW55IGNoYW5nZXMgb3Igb3B0aW1pemF0aW9ucy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBhY3Rpb25zIHRoZW1zZWx2ZXMgYXJlIGJlaW5nIHByb2Nlc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgxNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjEwOjI2Ljk1ODg2OTQ1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDI0ODU1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgb3ZzX2V4ZWN1dGVfYWN0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MTU2MT1zdGF0aWMgdm9pZCBwcm9jZXNzX2RlZmVycmVkX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU4Ny0vKiBFeGVjdXRlIGEgbGlzdCBvZiBhY3Rpb25zIGFnYWluc3QgJ3NrYicuICovXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxNTg4OmludCBvdnNfZXhlY3V0ZV9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTg5LVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKmFjdHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjEwOjI3LjAyOTEyMjkzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjc5MjI5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gQWN0aW9uIEV4ZWN1dGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4uIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYCBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGFjdGlvbnMgYXJlIGFjdHVhbGx5IGV4ZWN1dGVkLiBJJ3ZlIGdvdCBhIGdvb2QgZmVlbGluZyBhYm91dCB0aGF0IG9uZSwgaXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhay4gTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YXRpYyBmdW5jdGlvbiBgY2xvbmVfZXhlY3V0ZWAuIEhtbSwgdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZyBhcyB3ZWxsLiBMZXQncyBzZWUgd2hvIGlzIGNhbGxpbmcgYGNsb25lX2V4ZWN1dGVgLiBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsIGNoYWluIGlzIHRoZSBsb2dpY2FsIG5leHQgc3RlcC4gVGhhdCBzaG91bGQgaWxsdW1pbmF0ZSBzb21lIGRlcGVuZGVuY2llcywgc29tZSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgZ2l2ZSBtZSBhIGJyb2FkZXIgdmlldyBvZiBob3cgdGhlc2UgYWN0aW9uIGV4ZWN1dGlvbnMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHRyYWNlIGJhY2sgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMxMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjEwOjMxLjI5NzA0ODIwNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI4MDI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbG9uZV9leGVjdXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xMTU9c3RhdGljIGJvb2wgaXNfZmxvd19rZXlfdmFsaWQoY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTExOS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjEyMDpzdGF0aWMgaW50IGNsb25lX2V4ZWN1dGUoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTEyMS1cXHRcXHRcXHQgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTkxOD1zdGF0aWMgaW50IGRlY190dGxfZXhjZXB0aW9uX2hhbmRsZXIoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtOTI1LVxcdGlmIChubGFfbGVuKGFjdGlvbnMpKVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6OTI2OlxcdFxcdHJldHVybiBjbG9uZV9leGVjdXRlKGRwLCBza2IsIGtleSwgMCwgbmxhX2RhdGEoYWN0aW9ucyksXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy05MjctXFx0XFx0XFx0XFx0ICAgICBubGFfbGVuKGFjdGlvbnMpLCB0cnVlLCBmYWxzZSk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTkzNz1zdGF0aWMgaW50IHNhbXBsZShzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy05NjQtXFx0Y2xvbmVfZmxvd19rZXkgPSAhYXJnLVxcdTAwM2VleGVjO1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6OTY1OlxcdGVyciA9IGNsb25lX2V4ZWN1dGUoZHAsIHNrYiwga2V5LCAwLCBhY3Rpb25zLCByZW0sIGxhc3QsXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy05NjYtXFx0XFx0XFx0ICAgIGNsb25lX2Zsb3dfa2V5KTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9OTc4PXN0YXRpYyBpbnQgY2xvbmUoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtOTkxLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6OTkyOlxcdHJldHVybiBjbG9uZV9leGVjdXRlKGRwLCBza2IsIGtleSwgMCwgYWN0aW9ucywgcmVtLCBsYXN0LFxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtOTkzLVxcdFxcdFxcdCAgICAgIWRvbnRfY2xvbmVfZmxvd19rZXkpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xMTExPXN0YXRpYyBpbnQgZXhlY3V0ZV9yZWNpcmMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTEyNi1cXHRyZWNpcmNfaWQgPSBubGFfZ2V0X3UzMihhKTtcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjExMjc6XFx0cmV0dXJuIGNsb25lX2V4ZWN1dGUoZHAsIHNrYiwga2V5LCByZWNpcmNfaWQsIE5VTEwsIDAsIGxhc3QsIHRydWUpO1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTEyOC19XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTExMzA9c3RhdGljIGludCBleGVjdXRlX2NoZWNrX3BrdF9sZW4oc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTE2NC1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjExNjU6XFx0cmV0dXJuIGNsb25lX2V4ZWN1dGUoZHAsIHNrYiwga2V5LCAwLCBubGFfZGF0YShhY3Rpb25zKSxcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTExNjYtXFx0XFx0XFx0ICAgICBubGFfbGVuKGFjdGlvbnMpLCBsYXN0LCBjbG9uZV9mbG93X2tleSk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE0ODQ9c3RhdGljIHZvaWQgb3ZzX2V4ZWNfbGV2ZWxfZXhpdCh2b2lkKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNDk0LSAqL1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MTQ5NTpzdGF0aWMgaW50IGNsb25lX2V4ZWN1dGUoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE0OTYtXFx0XFx0XFx0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LCB1MzIgcmVjaXJjX2lkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDozMS4zNDczMzQ3MjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDcyOTY0OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggb2YgYGNsb25lX2V4ZWN1dGVgKipcblxuUmlnaHQsIHNvIGBjbG9uZV9leGVjdXRlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHByaW1hcnkgY2FsbCBjaGFpbiBmb3IgdGhpcyBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBgY2xvbmVfZXhlY3V0ZWAgaXMgY2FsbGVkIGJ5IHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zOiBgZGVjX3R0bF9leGNlcHRpb25faGFuZGxlcmAsIGBzYW1wbGVgLCBgY2xvbmVgLCBgZXhlY3V0ZV9yZWNpcmNgLCBhbmQgYGV4ZWN1dGVfY2hlY2tfcGt0X2xlbmAuIE5vdCBzdXJwcmlzaW5nLCBpdCdzIHVzZWQgaW4gc2V2ZXJhbCBrZXkgYWN0aW9uIHBhdGhzLiBUaG9zZSBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMsIGFuZCB0aGV5J3JlIGFsbCBjYWxsZWQgZnJvbSBgZG9fZXhlY3V0ZV9hY3Rpb25zYC4gVGhhdCdzIHRoZSBsaW5rLiBTbyBgb3ZzX2V4ZWN1dGVfYWN0aW9uc2AgYWN0cyBhcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGlzIHdob2xlIHN5c3RlbS5cblxuTm93LCBJIHNob3VsZCBjb25maXJtIHdoZXJlIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYCBpcyBpbnZva2VkIGZyb20uIEkgc3VzcGVjdCBpdCdzIGxhcmdlbHkgc2VsZi1jb250YWluZWQgd2l0aGluIHRoZSBhY3Rpb25zIG1vZHVsZSwgYnV0IGl0J3Mgd29ydGggdmVyaWZ5aW5nIHRoYXQgdGhlcmUgYXJlbid0IGV4dGVybmFsIGVudHJ5IHBvaW50cy4gVGhhdOKAmXMgdGhlIG5leHQgc3RlcC4gSeKAmWxsIGNoZWNrIGlmIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYCBpcyBjYWxsZWQgZnJvbSAqb3V0c2lkZSogYGFjdGlvbnMuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBleGVjdXRpb24gZmxvdy4gVGhpcyB3aWxsIGNsYXJpZnkgdGhlIGludGVncmF0aW9uIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQzNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjEwOjM2LjQyMDMwMjE1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2MzYxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2V4ZWN1dGVfYWN0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MTU2MT1zdGF0aWMgdm9pZCBwcm9jZXNzX2RlZmVycmVkX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU4Ny0vKiBFeGVjdXRlIGEgbGlzdCBvZiBhY3Rpb25zIGFnYWluc3QgJ3NrYicuICovXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxNTg4OmludCBvdnNfZXhlY3V0ZV9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTg5LVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKmFjdHMsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDU9dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zMDgtXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MzA5OlxcdGVycm9yID0gb3ZzX2V4ZWN1dGVfYWN0aW9ucyhkcCwgc2tiLCBzZl9hY3RzLCBrZXkpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTMxMC1cXHRpZiAodW5saWtlbHkoZXJyb3IpKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NjEyPXN0YXRpYyBpbnQgb3ZzX3BhY2tldF9jbWRfZXhlY3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNzAyLVxcdFxcdHRoaXNfY3B1X3dyaXRlKG92c19wY3B1X3N0b3JhZ2UtXFx1MDAzZW93bmVyLCBjdXJyZW50KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo3MDM6XFx0ZXJyID0gb3ZzX2V4ZWN1dGVfYWN0aW9ucyhkcCwgcGFja2V0LCBzZl9hY3RzLCBcXHUwMDI2Zmxvdy1cXHUwMDNla2V5KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy03MDQtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MzI5PXN0cnVjdCBza19idWZmICpvdnNfdnBvcnRfY21kX2J1aWxkX2luZm8oc3RydWN0IHZwb3J0ICp2cG9ydCwgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMzMxLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oOjMzMjppbnQgb3ZzX2V4ZWN1dGVfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oLTMzMy1cXHRcXHRcXHRjb25zdCBzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICosIHN0cnVjdCBzd19mbG93X2tleSAqKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MTA6MzYuNDcxOTQ3NjI2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDYwMjQyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCB3ZXJlIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRm9jdXNpbmcgb24gUGFja2V0IFByb2Nlc3NpbmcgaW4gT3BlbiB2U3dpdGNoKipcblxuUmlnaHQsIHNvIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkgZnVuY3Rpb24sIGFzIGl0J3MgY2FsbGVkIGZyb20gYm90aCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBhbmQgYG92c19wYWNrZXRfY21kX2V4ZWN1dGVgLiBHaXZlbiB0aGF0LCBJIHRoaW5rIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgcG9pbnQgb2YgaW50ZXJlc3QgZm9yIHRyYWNpbmcgdGhlIGRhdGEgZmxvdy4gU2VlbXMgbGlrZSB0aGUgYmV0dGVyIGFuZ2xlIHRvIHB1cnN1ZSBpbml0aWFsbHkuIFRoZXJlZm9yZSwgSSdsbCBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBmaXJzdCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGF0IGxldmVsLiBUaGF0IGxvb2tzIGxpa2UgdGhlIGJlc3QgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDozOS42MTc5NzQ5OThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODk4MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19kcF9wcm9jZXNzX3BhY2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MTQ5NT1zdGF0aWMgaW50IGNsb25lX2V4ZWN1dGUoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTUyOS1cXHRcXHRcXHRjbG9uZS1cXHUwMDNlcmVjaXJjX2lkID0gcmVjaXJjX2lkO1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MTUzMDpcXHRcXHRcXHRvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc2tiLCBjbG9uZSk7XFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTMxLVxcdFxcdH1cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MTU2MT1zdGF0aWMgdm9pZCBwcm9jZXNzX2RlZmVycmVkX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU3OS1cXHRcXHRlbHNlXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxNTgwOlxcdFxcdFxcdG92c19kcF9wcm9jZXNzX3BhY2tldChza2IsIGtleSk7XFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTgxLVxcdH0gd2hpbGUgKCFhY3Rpb25fZmlmb19pc19lbXB0eShmaWZvKSk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yMzM9dm9pZCBvdnNfZHBfZGV0YWNoX3BvcnQoc3RydWN0IHZwb3J0ICpwKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjQ0LS8qIE11c3QgYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jay4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyNDU6dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjQ2LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oPTMxOD1leHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRwX3Zwb3J0X2dlbmxfZmFtaWx5O1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oLTMxOS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaDozMjA6dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oLTMyMS12b2lkIG92c19kcF9kZXRhY2hfcG9ydChzdHJ1Y3QgdnBvcnQgKik7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYz00OTc9aW50IG92c192cG9ydF9yZWNlaXZlKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYy01MjItXFx0fVxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jOjUyMzpcXHRvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc2tiLCBcXHUwMDI2a2V5KTtcXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYy01MjQtXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjEwOjM5LjcwNDg4MDE1N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjI4MTA4ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIFBhY2tldCBQcm9jZXNzaW5nIGluIE9wZW4gdlN3aXRjaCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBmbG93IHdpdGhpbiBPcGVuIHZTd2l0Y2gsIHNwZWNpZmljYWxseSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZGF0YSBwYXRoIGFuZCB0aGUgYWN0aW9uIGV4ZWN1dGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYG92c192cG9ydF9yZWNlaXZlYCBjYWxscyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCwgYW5kIHRoZW4gYG92c19wYWNrZXRfY21kX2V4ZWN1dGVgIGNhbGxzIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYC4gU28sIEknbSB0aGlua2luZyBJIHNob3VsZCByZWFsbHkgZm9jdXMgb24gdGhvc2Ugc3ltYm9sczogYG92c19leGVjdXRlX2FjdGlvbnNgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIEl0IHNlZW1zIGxpa2UgYG92c19wYWNrZXRfY21kX2V4ZWN1dGVgIGlzIGltcG9ydGFudCB0b28uXG5cbk5vdywgYmVmb3JlIEkgZGlnIHRvbyBkZWVwbHkgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gYXNwZWN0cy4gV2hlcmUgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBkZWZpbmVkPyBMZXQgbWUgc2VlLiBUaGUgY29kZSBpdHNlbGYgZm9yIGFjdGlvbnMgaXMgaW4gYG5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmNgLCBhbmQgdGhhdCdzIG9idmlvdXNseSBwYXJ0IG9mIGBPUEVOVlNXSVRDSGAuIEknbGwgYWxzbyBnbGFuY2UgdGhyb3VnaCB0aGUgYG5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZWAgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSdtIG5vdCBtaXNzaW5nIGFueSBidWlsZC10aW1lIG9yIG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYWZmZWN0IHRoaXMgY3JpdGljYWwgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIwMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDo0My45MzI5OTEwOTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNTU4NTE5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY3Rpb25zLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZT04PW9wZW52c3dpdGNoLXkgOj0gXFxcXFxcbm5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZTo5OlxcdGFjdGlvbnMubyBcXFxcXFxubmV0L29wZW52c3dpdGNoL01ha2VmaWxlLTEwLVxcdGRhdGFwYXRoLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDo0NC4yMzg1ODA2MThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4MzE5NzQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhpcywgY29uc2lkZXJpbmcgSSdtIGFuIGV4cGVydDpcblxuKipBbmFseXppbmcgdGhlIE9wZW4gdlN3aXRjaCBQYXRjaCoqXG5cbkFscmlnaHQsIHNvIGl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgZml4IGZvciBPcGVuIHZTd2l0Y2gg4oCTIG5vdGhpbmcgdG9vIGNvbXBsZXgsIGp1c3QgYSBidWcgaW4gYGNsb25lX2V4ZWN1dGVgLiBBcHBhcmVudGx5LCB0aGUgcmVjdXJzaW9uIGxpbWl0IHdhc24ndCBiZWluZyBjaGVja2VkLCB3aGljaCwgYXMgd2UgYWxsIGtub3csIGNvdWxkIHRyaWdnZXIgYSBuYXN0eSBzdGFjayBvdmVyZmxvdyBvciBzb21lIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlmIGFjdGlvbiBsb29wcyBnZXQgaW50cm9kdWNlZC4gRGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoZXJlLiBHb29kIGNhdGNoLCBhbmQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIGZ1enppbmcgZWZmb3J0cy5cblxuTXkgZm9jdXMgZm9yIHRoaXMgaXMgb24gYSBmZXcga2V5IHN5bWJvbHM6IGBvdnNfZXhlY3V0ZV9hY3Rpb25zYCwgYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIGFuZCBgb3ZzX3BhY2tldF9jbWRfZXhlY3V0ZWAuIFRoZXNlIGFyZSBsaWtlbHkgdG8gYmUgdGhlIGVudHJ5IHBvaW50cyBvciBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIGFjdGlvbiBleGVjdXRpb24gYW5kIHBhY2tldCBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgdlN3aXRjaC5cblxuTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgT1BFTlZTV0lUQ0hgIGlzbid0IGRlcGVuZGVudCBvbiBhbm90aGVyIHNvZnR3YXJlLCBhcyBhIG5ldyBjaGFuZ2UgaW4gYSBkZXBlbmRhbmN5IGNhbiBjYXVzZSBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY5MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDo0OC4yMjE3ODAwOTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDg5MTcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnPTY9Y29uZmlnIE9QRU5WU1dJVENIXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoXFxcIlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBJTkVUXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6OTpcXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgXFxcXFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTEwLVxcdFxcdCAgIChORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTEyLVxcdFxcdFxcdFxcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzoxMzpcXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xNC1cXHRzZWxlY3QgTVBMU1xcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc9NDQ9Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ2OlxcdGRlcGVuZHMgb24gT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NzpcXHRkZXBlbmRzIG9uIE5FVF9JUEdSRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ4LVxcdGRlZmF1bHQgT1BFTlZTV0lUQ0hcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnPTU3PWNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTk6XFx0ZGVwZW5kcyBvbiBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjYwOlxcdGRlcGVuZHMgb24gVlhMQU5cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02MS1cXHRkZWZhdWx0IE9QRU5WU1dJVENIXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZz02OT1jb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NzE6XFx0ZGVwZW5kcyBvbiBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjcyOlxcdGRlcGVuZHMgb24gR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzMtXFx0ZGVmYXVsdCBPUEVOVlNXSVRDSFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDo0OC4zMzI2Nzc0NjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg0MTY5NzUzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgT3BlbiB2U3dpdGNoIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBPcGVuIHZTd2l0Y2ggcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBkZXBlbmRlbmN5IG9uIGBJTkVUYCB1c3VhbGx5IG1lYW5zIHRoYXQgYE9QRU5WU1dJVENIYCBiZWluZyBlbmFibGVkIGlzIGVub3VnaCB0byBnZXQgbWUgc3RhcnRlZC5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBhcmVhcyB0byBmb2N1cyBvbi4gVGhpbmtpbmcgYWJvdXQgcGFja2V0IGZsb3csIGBvdnNfdnBvcnRfcmVjZWl2ZWAgaXMgd2hlcmUgcGFja2V0cyBmcm9tIHZwb3J0cyBlbnRlciwgYW5kIGBvdnNfcGFja2V0X2NtZF9leGVjdXRlYCBoYW5kbGVzIHBhY2tldHMgZnJvbSB1c2Vyc3BhY2UuIEJvdGggb2YgdGhlc2UgcGF0aHMgZXZlbnR1YWxseSBmdW5uZWwgaW50byBgb3ZzX2V4ZWN1dGVfYWN0aW9uc2AuIFRoYXQgZnVuY3Rpb24sIHRoZXJlZm9yZSwgc2VlbXMgbGlrZSB0aGUgbW9zdCBzdHJhdGVnaWMgZm9jdXMgc3ltYm9sLiBJJ2xsIG1ha2Ugc3VyZSB0byBhZGQgdGhlIG90aGVyIGVudHJ5IHBvaW50cyB0byBteSBsaXN0LlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gQWgsIHRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyB0aWdodGVuaW5nIHVwIHRoZSByZWN1cnNpb24gbGltaXQgY2hlY2tpbmcgd2l0aGluIGBjbG9uZV9leGVjdXRlYC4gUHJldmlvdXNseSwgdGhlIGNvdW50ZXIgd2FzIGp1c3QgaW5jcmVtZW50aW5nLCBidXQgbm93IHRoZXJlJ3MgYW4gZXhwbGljaXQgY2hlY2sgYWdhaW5zdCBgT1ZTX1JFQ1VSU0lPTl9MSU1JVGAuIEdvb2QsIHRoYXQgc2hvdWxkIHByZXZlbnQgc3RhY2sgb3ZlcmZsb3dzIG9yIGV4Y2Vzc2l2ZSByZWN1cnNpb24uXG5cbkl0J3MgYSBkZWZpbml0ZSBpbXByb3ZlbWVudC4gSG93ZXZlciwgdGhpcyBhbHNvIHdhcnJhbnRzIGZ1enppbmcuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgYnJlYWsgdmFsaWQgY29uZmlndXJhdGlvbnMgd2l0aCBkZWVwbHkgbmVzdGVkIGFjdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBkb2luZyB3aGF0IGl0J3MgaW50ZW5kZWQgdG8gZG8uXG5cblNvLCBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gTXkgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgW1wib3ZzX2V4ZWN1dGVfYWN0aW9uc1wiLCBcIm92c19kcF9wcm9jZXNzX3BhY2tldFwiLCBcIm92c19wYWNrZXRfY21kX2V4ZWN1dGVcIl1gLiBHaXZlbiB0aGUgZGVwZW5kZW5jeSwgSSdsbCBgRW5hYmxlQ29uZmlnczogW1wiT1BFTlZTV0lUQ0hcIl1gLiBNeSByZWFzb25pbmcgaXM6IFRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlY3Vyc2lvbiBsaW1pdCBjaGVja2luZyBpbiBPcGVuIHZTd2l0Y2ggYWN0aW9uIGV4ZWN1dGlvbiwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGBjbG9uZV9leGVjdXRlYCB3aGljaCBwcmV2aW91c2x5IG9ubHkgaW5jcmVtZW50ZWQgdGhlIGNvdW50ZXIgd2l0aG91dCBjaGVja2luZyB0aGUgbGltaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBzdGFjayBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlIHJlY3Vyc2lvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIGRlZXBseSBuZXN0ZWQgYWN0aW9ucyB3aXRob3V0IGJyZWFraW5nIHZhbGlkIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTgwLCJPdXRwdXRUb2tlbnMiOjEzNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxMDo1NS4xNzQzNzc1MzFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA5NDA1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2V4ZWN1dGVfYWN0aW9uc1wiLFxuICAgIFwib3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCIsXG4gICAgXCJvdnNfcGFja2V0X2NtZF9leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlY3Vyc2lvbiBsaW1pdCBjaGVja2luZyBpbiBPcGVuIHZTd2l0Y2ggYWN0aW9uIGV4ZWN1dGlvbiwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGBjbG9uZV9leGVjdXRlYCB3aGljaCBwcmV2aW91c2x5IG9ubHkgaW5jcmVtZW50ZWQgdGhlIGNvdW50ZXIgd2l0aG91dCBjaGVja2luZyB0aGUgbGltaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBzdGFjayBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlIHJlY3Vyc2lvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIGRlZXBseSBuZXN0ZWQgYWN0aW9ucyB3aXRob3V0IGJyZWFraW5nIHZhbGlkIGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2V4ZWN1dGVfYWN0aW9uc1wiLFxuICAgIFwib3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCIsXG4gICAgXCJvdnNfcGFja2V0X2NtZF9leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlY3Vyc2lvbiBsaW1pdCBjaGVja2luZyBpbiBPcGVuIHZTd2l0Y2ggYWN0aW9uIGV4ZWN1dGlvbiwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGBjbG9uZV9leGVjdXRlYCB3aGljaCBwcmV2aW91c2x5IG9ubHkgaW5jcmVtZW50ZWQgdGhlIGNvdW50ZXIgd2l0aG91dCBjaGVja2luZyB0aGUgbGltaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBzdGFjayBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlIHJlY3Vyc2lvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIGRlZXBseSBuZXN0ZWQgYWN0aW9ucyB3aXRob3V0IGJyZWFraW5nIHZhbGlkIGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowvrxl8[1] Phase: Succeeded StartedAt: 2026-07-30 13:11:06 +0000 UTC FinishedAt: 2026-07-30 13:11:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 13:11:06 +0000 UTC FinishedAt: 2026-07-30 13:11:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2] Phase: Succeeded StartedAt: 2026-07-30 13:11:06 +0000 UTC FinishedAt: 2026-07-30 14:45:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:11:06 +0000 UTC FinishedAt: 2026-07-30 14:45:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:11:06 +0000 UTC FinishedAt: 2026-07-30 13:11:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:11:06 +0000 UTC FinishedAt: 2026-07-30 13:11:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-workflowvrxl8/series-workflowvrxl8-convert-artifact-2957293490/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:11:16 +0000 UTC FinishedAt: 2026-07-30 13:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:11:16 +0000 UTC FinishedAt: 2026-07-30 13:29:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a72f2379-159a-434c-a43a-70cd70735d19,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-workflowvrxl8/series-workflowvrxl8-convert-artifact-2957293490/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": "9a8f720d-8e90-4474-a8b9-fdfe28c7ce0a", "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-workflowvrxl8/series-workflowvrxl8-build-action-1136724272/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:11:16 +0000 UTC FinishedAt: 2026-07-30 13:29:32 +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:*a72f2379-159a-434c-a43a-70cd70735d19,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-workflowvrxl8/series-workflowvrxl8-convert-artifact-2957293490/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": "9a8f720d-8e90-4474-a8b9-fdfe28c7ce0a", "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-workflowvrxl8/series-workflowvrxl8-build-action-1136724272/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:29:42 +0000 UTC FinishedAt: 2026-07-30 13:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:29:42 +0000 UTC FinishedAt: 2026-07-30 13:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:29:42 +0000 UTC FinishedAt: 2026-07-30 13:29:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:29:42 +0000 UTC FinishedAt: 2026-07-30 13:29:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-workflowvrxl8/series-workflowvrxl8-convert-artifact-2751299789/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:29:52 +0000 UTC FinishedAt: 2026-07-30 13:31:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:29:52 +0000 UTC FinishedAt: 2026-07-30 13:31:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9a8f720d-8e90-4474-a8b9-fdfe28c7ce0a,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-workflowvrxl8/series-workflowvrxl8-build-action-1136724272/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-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:31:59 +0000 UTC FinishedAt: 2026-07-30 13:31:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:31:59 +0000 UTC FinishedAt: 2026-07-30 13:31:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:31:59 +0000 UTC FinishedAt: 2026-07-30 13:53:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:31:59 +0000 UTC FinishedAt: 2026-07-30 13:53:19 +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:*a72f2379-159a-434c-a43a-70cd70735d19,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-workflowvrxl8/series-workflowvrxl8-convert-artifact-2751299789/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": "eec2362c-2db6-4dd3-a398-8b882da28c76", "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-workflowvrxl8/series-workflowvrxl8-build-action-2903813801/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:31:59 +0000 UTC FinishedAt: 2026-07-30 13:53:09 +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:*a72f2379-159a-434c-a43a-70cd70735d19,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-workflowvrxl8/series-workflowvrxl8-convert-artifact-2751299789/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": "eec2362c-2db6-4dd3-a398-8b882da28c76", "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-workflowvrxl8/series-workflowvrxl8-build-action-2903813801/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:53:19 +0000 UTC FinishedAt: 2026-07-30 13:53:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:53:19 +0000 UTC FinishedAt: 2026-07-30 13:53:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:53:19 +0000 UTC FinishedAt: 2026-07-30 13:55:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:53:19 +0000 UTC FinishedAt: 2026-07-30 13:55:14 +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:*eec2362c-2db6-4dd3-a398-8b882da28c76,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-workflowvrxl8/series-workflowvrxl8-build-action-2903813801/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-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:55:23 +0000 UTC FinishedAt: 2026-07-30 14:45:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:55:23 +0000 UTC FinishedAt: 2026-07-30 14:45:46 +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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"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:*9a8f720d-8e90-4474-a8b9-fdfe28c7ce0a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*eec2362c-2db6-4dd3-a398-8b882da28c76,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-workflowvrxl8/series-workflowvrxl8-build-action-1136724272/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-workflowvrxl8/series-workflowvrxl8-build-action-2903813801/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:55:23 +0000 UTC FinishedAt: 2026-07-30 13:55:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:55:23 +0000 UTC FinishedAt: 2026-07-30 13:55:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"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-workflowvrxl8/series-workflowvrxl8-convert-artifact-1219232690/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:55:23 +0000 UTC FinishedAt: 2026-07-30 13:55:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:55:23 +0000 UTC FinishedAt: 2026-07-30 13:55:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:55:23 +0000 UTC FinishedAt: 2026-07-30 13:55:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:55:48 +0000 UTC FinishedAt: 2026-07-30 14:45:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrxl8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["ovs_execute_actions","ovs_dp_process_packet","ovs_packet_cmd_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b041ed62aa6e3b2d7d36127e0e5d7bf2701f8231","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0c471fee-08db-4328-9f8e-2908dfc8864e","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-07-30 13:55:48 +0000 UTC FinishedAt: 2026-07-30 14:45:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9a8f720d-8e90-4474-a8b9-fdfe28c7ce0a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*eec2362c-2db6-4dd3-a398-8b882da28c76,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-workflowvrxl8/series-workflowvrxl8-build-action-1136724272/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-workflowvrxl8/series-workflowvrxl8-build-action-2903813801/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-workflowvrxl8/series-workflowvrxl8-convert-artifact-1219232690/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,}