Name: series-workflowtq9cs Phase: Succeeded StartedAt: 2026-07-12 12:54:46 +0000 UTC FinishedAt: 2026-07-12 17:55:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[0] Phase: Succeeded StartedAt: 2026-07-12 12:54:46 +0000 UTC FinishedAt: 2026-07-12 13:17:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[0].run-triage Phase: Succeeded StartedAt: 2026-07-12 12:54:46 +0000 UTC FinishedAt: 2026-07-12 13:17:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "8964811b-89a7-4adf-8d0a-c8256dc048e8" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_check_and_inject_events" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYGt2bV9jcHVfZ2V0X2ludGVycnVwdGAgcmV0dXJucyAtMSAobm8gcGVuZGluZyBpbnRlcnJ1cHQpIGRlc3BpdGUgYGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cmAgcmV0dXJuaW5nIHRydWUuIEl0IHJlcGxhY2VzIGEgYFdBUk5fT05fT05DRWAgd2l0aCBhIGBnb3RvIG91dDtgLCBza2lwcGluZyB0aGUgcmVzdCBvZiB0aGUgZXZlbnQgaW5qZWN0aW9uIGxvZ2ljIChsaWtlIGBlbmFibGVfaXJxX3dpbmRvd2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNJiMzOTtzIGludGVycnVwdCBpbmplY3Rpb24gcGF0aCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE4YTE4NTUzZjAxZTg4MzE2ZmU1ZjVjMjQ0NzJhNmE5NTk0NDMzOWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAxMzoxNjo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IGFmY2FjMTA0Mjk0N2E1Li4zNmJmNDc5YTExNjQ5OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtMTA3OTcsMTEgJiM0MzsxMDc5NywxMSBAQCBzdGF0aWMgaW50IGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdGlmIChyKSB7XG4gXHRcdFx0aW50IGlycSA9IGt2bV9jcHVfZ2V0X2ludGVycnVwdCh2Y3B1KTtcbiBcbi1cdFx0XHRpZiAoIVdBUk5fT05fT05DRShpcnEgPT0gLTEpKSB7XG4tXHRcdFx0XHRrdm1fcXVldWVfaW50ZXJydXB0KHZjcHUsIGlycSwgZmFsc2UpO1xuLVx0XHRcdFx0a3ZtX3g4Nl9jYWxsKGluamVjdF9pcnEpKHZjcHUsIGZhbHNlKTtcbi1cdFx0XHRcdFdBUk5fT04oa3ZtX3g4Nl9jYWxsKGludGVycnVwdF9hbGxvd2VkKSh2Y3B1LCB0cnVlKSBcdTAwM2MgMCk7XG4tXHRcdFx0fVxuJiM0MztcdFx0XHRpZiAoaXJxID09IC0xKVxuJiM0MztcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRrdm1fcXVldWVfaW50ZXJydXB0KHZjcHUsIGlycSwgZmFsc2UpO1xuJiM0MztcdFx0XHRrdm1feDg2X2NhbGwoaW5qZWN0X2lycSkodmNwdSwgZmFsc2UpO1xuJiM0MztcdFx0XHRXQVJOX09OKGt2bV94ODZfY2FsbChpbnRlcnJ1cHRfYWxsb3dlZCkodmNwdSwgdHJ1ZSkgXHUwMDNjIDApO1xuIFx0XHR9XG4gXHRcdGlmIChrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHIodmNwdSkpXG4gXHRcdFx0a3ZtX3g4Nl9jYWxsKGVuYWJsZV9pcnFfd2luZG93KSh2Y3B1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGBrdm1fY3B1X2dldF9pbnRlcnJ1cHRgIHJldHVybnMgLTEgKG5vIHBlbmRpbmcgaW50ZXJydXB0KSBkZXNwaXRlIGBrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHJgIHJldHVybmluZyB0cnVlLiBJdCByZXBsYWNlcyBhIGBXQVJOX09OX09OQ0VgIHdpdGggYSBgZ290byBvdXQ7YCwgc2tpcHBpbmcgdGhlIHJlc3Qgb2YgdGhlIGV2ZW50IGluamVjdGlvbiBsb2dpYyAobGlrZSBgZW5hYmxlX2lycV93aW5kb3dgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSYjMzk7cyBpbnRlcnJ1cHQgaW5qZWN0aW9uIHBhdGggYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE4YTE4NTUzZjAxZTg4MzE2ZmU1ZjVjMjQ0NzJhNmE5NTk0NDMzOWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCAxMiAxMzoxNjo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCBhZmNhYzEwNDI5NDdhNS4uMzZiZjQ3OWExMTY0OTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTEwNzk3LDExICYjNDM7MTA3OTcsMTEgQEAgc3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQlpZiAocikgewogCQkJaW50IGlycSA9IGt2bV9jcHVfZ2V0X2ludGVycnVwdCh2Y3B1KTsKIAotCQkJaWYgKCFXQVJOX09OX09OQ0UoaXJxID09IC0xKSkgewotCQkJCWt2bV9xdWV1ZV9pbnRlcnJ1cHQodmNwdSwgaXJxLCBmYWxzZSk7Ci0JCQkJa3ZtX3g4Nl9jYWxsKGluamVjdF9pcnEpKHZjcHUsIGZhbHNlKTsKLQkJCQlXQVJOX09OKGt2bV94ODZfY2FsbChpbnRlcnJ1cHRfYWxsb3dlZCkodmNwdSwgdHJ1ZSkgJmx0OyAwKTsKLQkJCX0KJiM0MzsJCQlpZiAoaXJxID09IC0xKQomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsJCQlrdm1fcXVldWVfaW50ZXJydXB0KHZjcHUsIGlycSwgZmFsc2UpOwomIzQzOwkJCWt2bV94ODZfY2FsbChpbmplY3RfaXJxKSh2Y3B1LCBmYWxzZSk7CiYjNDM7CQkJV0FSTl9PTihrdm1feDg2X2NhbGwoaW50ZXJydXB0X2FsbG93ZWQpKHZjcHUsIHRydWUpICZsdDsgMCk7CiAJCX0KIAkJaWYgKGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cih2Y3B1KSkKIAkJCWt2bV94ODZfY2FsbChlbmFibGVfaXJxX3dpbmRvdykodmNwdSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIEludGVycnVwdCBJbmplY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgS1ZNIHBhdGNoLCBhbmQgaXQmIzM5O3MgbW9kaWZ5aW5nIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGlzOiB0aGV5JiMzOTt2ZSByZXBsYWNlZCBhIGBXQVJOX09OX09OQ0UoaXJxID09IC0xKWAgd2l0aCBhIGRpcmVjdCBgaWYgKGlycSA9PSAtMSkgZ290byBvdXQ7YC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2U7IGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gYmVjYXVzZSBpdCBhbHRlcnMgdGhlIGNvbnRyb2wgZmxvdy4KCkxldCBtZSBicmVhayBkb3duIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSBsb29rZWQgbGlrZSB0aGlzOiBpZiBgaXJxID09IC0xYCwgdGhlIGBpZmAgYmxvY2sgd291bGQgYmUgc2tpcHBlZCBhbmQgdGhlIGV4ZWN1dGlvbiB3b3VsZCBjb250aW51ZSBhcyBub3JtYWw6CmBgYGMKCQkJaWYgKCFXQVJOX09OX09OQ0UoaXJxID09IC0xKSkgewoJCQkJa3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCBpcnEsIGZhbHNlKTsKCQkJCWt2bV94ODZfY2FsbChpbmplY3RfaXJxKSh2Y3B1LCBmYWxzZSk7CgkJCQlXQVJOX09OKGt2bV94ODZfY2FsbChpbnRlcnJ1cHRfYWxsb3dlZCkodmNwdSwgdHJ1ZSkgJmx0OyAwKTsKCQkJfQpgYGAKSWYgYGlycSA9PSAtMWAgdGhlIGZvbGxvd2luZyBjb2RlIHdvdWxkIHN0aWxsIGJlIGV4ZWN1dGVkOgpgYGBjCgkJaWYgKGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cih2Y3B1KSkKCQkJa3ZtX3g4Nl9jYWxsKGVuYWJsZV9pcnFfd2luZG93KSh2Y3B1KTsKYGBgCkJ1dCBub3csIHdpdGggdGhlIHBhdGNoLCB0aGUgY29kZSBiZWNvbWVzOgpgYGBjCgkJCWlmIChpcnEgPT0gLTEpCgkJCQlnb3RvIG91dDsKCQkJa3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCBpcnEsIGZhbHNlKTsKCQkJa3ZtX3g4Nl9jYWxsKGluamVjdF9pcnEpKHZjcHUsIGZhbHNlKTsKCQkJV0FSTl9PTihrdm1feDg2X2NhbGwoaW50ZXJydXB0X2FsbG93ZWQpKHZjcHUsIHRydWUpICZsdDsgMCk7CmBgYAoKTm93LCBpZiBgaXJxID09IC0xYCwgaXQgaW1tZWRpYXRlbHkganVtcHMgdG8gYG91dGAuIFRoaXMgbWVhbnMgaXQgKnNraXBzKiB0aGUgYGt2bV9xdWV1ZV9pbnRlcnJ1cHRgLCBga3ZtX3g4Nl9jYWxsKGluamVjdF9pcnEpYCwgYFdBUk5fT05gIGNhbGxzLCBhbmQgY3J1Y2lhbGx5LCBhbnkgY29kZSAqYWZ0ZXIqIHRoYXQsIGluY2x1ZGluZyB0aGUgYGVuYWJsZV9pcnFfd2luZG93YCBjaGVjaywgd2hhdGV2ZXIgdGhhdCBkb2VzLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGF0JiMzOTtzIHRoZSBwdXJwb3NlIG9mIGBlbmFibGVfaXJxX3dpbmRvd2A/IFdoeSBpcyBpdCBza2lwcGVkIG5vdyBpZiBgaXJxID09IC0xYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgY291bGQgYmUgYSBzaW1wbGUgb3B0aW1pemF0aW9uLCBidXQgaXQgY291bGQgYWxzbyBiZSBoaWRpbmcgYSBtb3JlIHN1YnRsZSBidWcgb3IgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Uvc2VjdXJpdHkgdHJhZGUtb2ZmLiBMZXQgbWUgY2hlY2sgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz0xMDU3NT1zdGF0aWMgdm9pZCBrdm1faW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNjMyLSAqL1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNjMzOnN0YXRpYyBpbnQga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDYzNC1cdFx0XHRcdCAgICAgICBib29sICpyZXFfaW1tZWRpYXRlX2V4aXQpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwODk0PXZvaWQgX19rdm1fdmNwdV91cGRhdGVfYXBpY3Yoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDkxOS1cdCAqIHN0aWxsIGFjdGl2ZSB3aGVuIHRoZSBpbnRlcnJ1cHQgZ290IGFjY2VwdGVkLiBNYWtlIHN1cmVcbmFyY2gveDg2L2t2bS94ODYuYzoxMDkyMDpcdCAqIGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cygpIGlzIGNhbGxlZCB0byBjaGVjayBmb3IgdGhhdC5cbmFyY2gveDg2L2t2bS94ODYuYy0xMDkyMS1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMTExMj1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTI5NS1cbmFyY2gveDg2L2t2bS94ODYuYzoxMTI5NjpcdFx0ciA9IGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyh2Y3B1LCBcdTAwMjZyZXFfaW1tZWRpYXRlX2V4aXQpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjk3LVx0XHRpZiAociBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIC0gQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgSSYjMzk7bSBoZXJlLCBJIHNlZSB0aGUgY2FsbCB0byBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYC4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24gaW4gdGhlIEtWTSBpbmZyYXN0cnVjdHVyZSwgYW5kIEkmIzM5O20ga2VlbiB0byBleGFtaW5lIHRoZSByZXN0IG9mIGl0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBldmVudHMgYXJlIGhhbmRsZWQgYW5kIGluamVjdGVkIGludG8gdGhlIHZpcnR1YWwgbWFjaGluZSBmcm9tIHRoaXMgcG9pbnQuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIHZpdGFsIGZvciBtYW5hZ2luZyB0aGluZ3MgbGlrZSBpbnRlcnJ1cHRzLCBleGNlcHRpb25zLCBhbmQgb3RoZXIgc2lnbmFscyB0aGF0IG5lZWQgdG8gcmVhY2ggdGhlIGd1ZXN0LiBVbmRlcnN0YW5kaW5nIHRoaXMgY29tcGxldGUgcHJvY2VzcyBpcyBlc3NlbnRpYWwuIExldCYjMzk7cyBzZWUgd2hhdCBtb3JlIGl0IGVudGFpbHMuLi4gbGV0JiMzOTtzIHNlZSB0aGUgZmxvdywgdGhlIGNvbmRpdGlvbnMsIGFuZCB0aGUgYWN0dWFsIGluamVjdGlvbiBtZWNoYW5pc21zLiBLbm93aW5nIHRoZSBkZXRhaWxzIGhlcmUgbWVhbnMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIHN5c3RlbSB0aGF0IHJ1bnMgY29ycmVjdGx5IGFuZCBvbmUgdGhhdCBkb2VzbiYjMzk7dC4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzgwOlx0XHRcdFx0Z290byBvdXQ7XG4xMDc4MTpcdFx0XHRpZiAocikge1xuMTA3ODI6XHRcdFx0XHQtLXZjcHUtXHUwMDNlYXJjaC5ubWlfcGVuZGluZztcbjEwNzgzOlx0XHRcdFx0dmNwdS1cdTAwM2VhcmNoLm5taV9pbmplY3RlZCA9IHRydWU7XG4xMDc4NDpcdFx0XHRcdGt2bV94ODZfY2FsbChpbmplY3Rfbm1pKSh2Y3B1KTtcbjEwNzg1Olx0XHRcdFx0Y2FuX2luamVjdCA9IGZhbHNlO1xuMTA3ODY6XHRcdFx0XHRXQVJOX09OKGt2bV94ODZfY2FsbChubWlfYWxsb3dlZCkodmNwdSwgdHJ1ZSkgXHUwMDNjIDApO1xuMTA3ODc6XHRcdFx0fVxuMTA3ODg6XHRcdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5ubWlfcGVuZGluZylcbjEwNzg5Olx0XHRcdFx0a3ZtX3g4Nl9jYWxsKGVuYWJsZV9ubWlfd2luZG93KSh2Y3B1KTtcbjEwNzkwOlx0XHR9XG4xMDc5MTpcdFxuMTA3OTI6XHRcdGlmIChrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHIodmNwdSkpIHtcbjEwNzkzOlx0XHRcdHIgPSBjYW5faW5qZWN0ID8ga3ZtX3g4Nl9jYWxsKGludGVycnVwdF9hbGxvd2VkKSh2Y3B1LCB0cnVlKSA6XG4xMDc5NDpcdFx0XHRcdFx0IC1FQlVTWTtcbjEwNzk1Olx0XHRcdGlmIChyIFx1MDAzYyAwKVxuMTA3OTY6XHRcdFx0XHRnb3RvIG91dDtcbjEwNzk3Olx0XHRcdGlmIChyKSB7XG4xMDc5ODpcdFx0XHRcdGludCBpcnEgPSBrdm1fY3B1X2dldF9pbnRlcnJ1cHQodmNwdSk7XG4xMDc5OTpcdFxuMTA4MDA6XHRcdFx0XHRpZiAoaXJxID09IC0xKVxuMTA4MDE6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMTA4MDI6XHRcdFx0XHRrdm1fcXVldWVfaW50ZXJydXB0KHZjcHUsIGlycSwgZmFsc2UpO1xuMTA4MDM6XHRcdFx0XHRrdm1feDg2X2NhbGwoaW5qZWN0X2lycSkodmNwdSwgZmFsc2UpO1xuMTA4MDQ6XHRcdFx0XHRXQVJOX09OKGt2bV94ODZfY2FsbChpbnRlcnJ1cHRfYWxsb3dlZCkodmNwdSwgdHJ1ZSkgXHUwMDNjIDApO1xuMTA4MDU6XHRcdFx0fVxuMTA4MDY6XHRcdFx0aWYgKGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cih2Y3B1KSlcbjEwODA3Olx0XHRcdFx0a3ZtX3g4Nl9jYWxsKGVuYWJsZV9pcnFfd2luZG93KSh2Y3B1KTtcbjEwODA4Olx0XHR9XG4xMDgwOTpcdFxuMTA4MTA6XHRcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNlxuMTA4MTE6XHRcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWhhc19ldmVudHMgXHUwMDI2XHUwMDI2XG4xMDgxMjpcdFx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlaGFzX2V2ZW50cyh2Y3B1LCB0cnVlKSlcbjEwODEzOlx0XHRcdCpyZXFfaW1tZWRpYXRlX2V4aXQgPSB0cnVlO1xuMTA4MTQ6XHRcbjEwODE1Olx0XHQvKlxuMTA4MTY6XHRcdCAqIEtWTSBtdXN0IG5ldmVyIHF1ZXVlIGEgbmV3IGV4Y2VwdGlvbiB3aGlsZSBpbmplY3RpbmcgYW4gZXZlbnQ7IEtWTVxuMTA4MTc6XHRcdCAqIGlzIGRvbmUgZW11bGF0aW5nIGFuZCBzaG91bGQgb25seSBwcm9wYWdhdGUgdGhlIHRvLWJlLWluamVjdGVkIGV2ZW50XG4xMDgxODpcdFx0ICogdG8gdGhlIFZNQ1MvVk1DQi4gIFF1ZXVlaW5nIGEgbmV3IGV4Y2VwdGlvbiBjYW4gcHV0IHRoZSB2Q1BVIGludG8gYW5cbjEwODE5Olx0XHQgKiBpbmZpbml0ZSBsb29wIGFzIEtWTSB3aWxsIGJhaWwgZnJvbSBWTS1FbnRlciB0byBpbmplY3QgdGhlIHBlbmRpbmdcbjEwODIwOlx0XHQgKiBleGNlcHRpb24gYW5kIHN0YXJ0IHRoZSBjeWNsZSBhbGwgb3Zlci5cbjEwODIxOlx0XHQgKlxuMTA4MjI6XHRcdCAqIEV4ZW1wdCB0cmlwbGUgZmF1bHRzIGFzIHRoZXkgaGF2ZSBzcGVjaWFsIGhhbmRsaW5nIGFuZCB3b24mIzM5O3QgcHV0IHRoZVxuMTA4MjM6XHRcdCAqIHZDUFUgaW50byBhbiBpbmZpbml0ZSBsb29wLiAgVHJpcGxlIGZhdWx0IGNhbiBiZSBxdWV1ZWQgd2hlbiBydW5uaW5nXG4xMDgyNDpcdFx0ICogVk1YIHdpdGhvdXQgdW5yZXN0cmljdGVkIGd1ZXN0LCBhcyB0aGF0IHJlcXVpcmVzIEtWTSB0byBlbXVsYXRlIFJlYWxcbjEwODI1Olx0XHQgKiBNb2RlIGV2ZW50cyAoc2VlIGt2bV9pbmplY3RfcmVhbG1vZGVfaW50ZXJydXB0KCkpLlxuMTA4MjY6XHRcdCAqL1xuMTA4Mjc6XHRcdFdBUk5fT05fT05DRSh2Y3B1LVx1MDAzZWFyY2guZXhjZXB0aW9uLnBlbmRpbmcgfHxcbjEwODI4Olx0XHRcdCAgICAgdmNwdS1cdTAwM2VhcmNoLmV4Y2VwdGlvbl92bWV4aXQucGVuZGluZyk7XG4xMDgyOTpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLVk0geDg2IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvciB3aGVuIHRoZSBpbnRlcnJ1cHQgcmVxdWVzdCAoYGlycWApIGlzIHNldCB0byAtMS4gQ3VycmVudGx5LCBpdCYjMzk7cyBwcmV2ZW50aW5nIHRoZSB3YXJuaW5nIHdpdGggYFdBUk5fT05fT05DRWAgYW5kIHNpbXBseSBqdW1wcyB0byBgb3V0O2AuIEkgc2VlLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBpdCBieXBhc3NlcyBgZW5hYmxlX2lycV93aW5kb3dgIGFuZCB0aGUgc3Vic2VxdWVudCBjb2RlIHdpdGhpbiB0aGUgZnVuY3Rpb24uIFRoaXMgaXMgd29ydGggYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSB3aXRoIGZ1enppbmcgaW4gbWluZC4gU2luY2UgdGhpcyBpcyBpbiBLVk0geDg2IGFuZCBkZWFscyB3aXRoIGludGVycnVwdCBpbmplY3Rpb24sIGl0IGNvdWxkIGJlIGEgc3BvdCBmb3Igc3VidGxlIHNlY3VyaXR5IGZsYXdzIG9yIGVkZ2UgY2FzZSBmYWlsdXJlcy4gSSBzaG91bGQgY2hlY2sgdGhhdCBgS1ZNYCBjb25maWcgaXMgZGVmaW5pdGVseSBlbmFibGVkLiBUaGUgcHJpbWFyeSBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIHRoaXMgaW5pdGlhbCBhbmFseXNpcyBpcyBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYC4gTGV0JiMzOTtzIGFsc28gaW52ZXN0aWdhdGUgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIGluIHRoZSBhcmVhLiBQZXJoYXBzIGBrdm1fY3B1X2dldF9pbnRlcnJ1cHRgIG1pZ2h0IG9mZmVyIHJlbGF0ZWQgaW5zaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fY3B1X2dldF9pbnRlcnJ1cHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9pcnEuYz0xNTE9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9jcHVfZ2V0X2V4dGludCk7XG4tLVxuYXJjaC94ODYva3ZtL2lycS5jLTE1NS0gKi9cbmFyY2gveDg2L2t2bS9pcnEuYzoxNTY6aW50IGt2bV9jcHVfZ2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMTU3LXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA2MzM9c3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDc5Ny1cdFx0aWYgKHIpIHtcbmFyY2gveDg2L2t2bS94ODYuYzoxMDc5ODpcdFx0XHRpbnQgaXJxID0ga3ZtX2NwdV9nZXRfaW50ZXJydXB0KHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNzk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MDgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYGt2bV9jcHVfZ2V0X2ludGVycnVwdGA6CgoqKkRpdmluZyBpbnRvIEludGVycnVwdCBSZXRyaWV2YWwgd2l0aCBga3ZtX2NwdV9nZXRfaW50ZXJydXB0YCoqCgpBbHJpZ2h0LCBzbyB0aGUgZnVuY3Rpb24gbmFtZSwgYGt2bV9jcHVfZ2V0X2ludGVycnVwdGAsIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaW50ZXJydXB0IGhhbmRsaW5nIHdpdGhpbiB0aGUgS1ZNIChLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lKSBjb250ZXh0LiBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoaXMgcHJvYmFibHkgaW52b2x2ZXMgcXVlcnlpbmcgdGhlIHN0YXRlIG9mIHBlbmRpbmcgaW50ZXJydXB0cyBmb3IgYSBzcGVjaWZpYyB2aXJ0dWFsIENQVSAodkNQVSkuIEkmIzM5O20gZ3Vlc3NpbmcgdGhlIGNvcmUgcHVycG9zZSBpcyB0byBkZXRlcm1pbmUgaWYgYSBwYXJ0aWN1bGFyIHZDUFUgaGFzIGFuIGludGVycnVwdCB3YWl0aW5nIHRvIGJlIGRlbGl2ZXJlZCwgbGlrZWx5IGZvciBlbXVsYXRpbmcgaGFyZHdhcmUgYmVoYXZpb3Igb3IgaGFuZGxpbmcgdmlydHVhbCBkZXZpY2UgZXZlbnRzLgoKSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gSXQmIzM5O3MgbGlrZWx5IGludGVyYWN0aW5nIHdpdGggc29tZSBzb3J0IG9mIHBlci12Q1BVIGludGVycnVwdCBxdWV1ZSBvciBzaGFkb3cgcmVnaXN0ZXIuIFRoZXJlJiMzOTtzIHByb2JhYmx5IGEgbXV0ZXggb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSBpbiBwbGF5IHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5LCBlc3BlY2lhbGx5IHNpbmNlIG11bHRpcGxlIHRocmVhZHMgd2l0aGluIHRoZSBob3N0IGtlcm5lbCBjYW4gcG90ZW50aWFsbHkgaW50ZXJhY3Qgd2l0aCBhIHZDUFUmIzM5O3MgaW50ZXJydXB0IHN0YXRlLiBUaGUgZnVuY3Rpb24gaGFzIHRvIGJlIGF0b21pYyBhbmQgdGhyZWFkIHNhZmUsIGJlY2F1c2Ugb3RoZXIgdmlydHVhbCBDUFVzIG9yIHRoZSBob3N0IGtlcm5lbCBjb3VsZCBiZSBwb3RlbnRpYWxseSBtb2RpZnlpbmcgb3IgY2hlY2tpbmcgdGhhdCBpbnRlcnJ1cHQgYXQgdGhlIHNhbWUgdGltZS4KCkkgc3RhcnQgcnVubmluZyB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzLiBXaGF0IHR5cGUgb2YgaW50ZXJydXB0cyBhcmUgd2UgdGFsa2luZyBhYm91dD8gSGFyZHdhcmUgaW50ZXJydXB0cywgc29mdHdhcmUgaW50ZXJydXB0cywgaW50ZXItcHJvY2Vzc29yIGludGVycnVwdHMgKElQSXMpPyBUaGUgZGVzaWduIGhhcyB0byBiZSBnZW5lcmljIGVub3VnaCB0byBoYW5kbGUgYSByYW5nZSBvZiBpbnRlcnJ1cHQgc291cmNlcyByZWxldmFudCB0byB0aGUgZ3Vlc3QmIzM5O3MgZXhlY3V0aW9uLiBBcmUgd2UgcG90ZW50aWFsbHkgcmV0dXJuaW5nIGEgc3BlY2lmaWMgaW50ZXJydXB0IHZlY3Rvci9JRCwgb3IgaXMgaXQgbW9yZSBvZiBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBhbiBpbnRlcnJ1cHQ/CgpBbHNvLCBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSB2Q1BVIGlzIGluIGFuIGludmFsaWQgc3RhdGUsIG9yIGlmIHRoZXJlJiMzOTtzIGFuIGlzc3VlIGFjY2Vzc2luZyB0aGUgaW50ZXJydXB0IHN0YXRlPyBUaGUgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIHJldHVybiBzb21lIHNvcnQgb2YgZXJyb3IgY29kZSwgb3Igc2lnbmFsIGFuIGVycm9yIGNvbmRpdGlvbiwgd2hpY2ggdGhlIGNhbGxlciBuZWVkcyB0byBhcHByb3ByaWF0ZWx5IGhhbmRsZS4gSG93IGRvZXMgaXQgbWFuYWdlIHJhY2UgY29uZGl0aW9ucyBvciBhdm9pZCBkZWFkbG9jayBzaXR1YXRpb25zPwoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHRvby4gVGhpcyBpcyBwcm9iYWJseSBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgZnJlcXVlbnRseSBkdXJpbmcgdkNQVSBleGVjdXRpb24sIHNvIG1pbmltaXppbmcgb3ZlcmhlYWQgaXMgY3J1Y2lhbC4gQXJlIHRoZXJlIGFueSBvcHRpbWl6YXRpb25zIGluIHBsYWNlLCBzdWNoIGFzIHByZS1mZXRjaGluZyBpbnRlcnJ1cHQgZGF0YSBvciB1c2luZyBiaXRtYXNrcyB0byBxdWlja2x5IGNoZWNrIGludGVycnVwdCBzdGF0dXM/CgpVbHRpbWF0ZWx5LCBteSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gc2l0cyBhdCB0aGUgaGVhcnQgb2YgdGhlIHZpcnR1YWwgaW50ZXJydXB0IGRlbGl2ZXJ5IG1lY2hhbmlzbSwgYW5kIEkgbmVlZCB0byBzZWUgaG93IGl0IGZpdHMgd2l0aGluIHRoZSBsYXJnZXIgS1ZNIGFyY2hpdGVjdHVyZSBhbmQgaG93IGl0IGNvbm5lY3RzIHRvIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBlbXVsYXRpb24uIEkmIzM5O20ga2VlbiB0byBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBzZWUgaG93IHRoZXNlIGFzcGVjdHMgYXJlIGFjdHVhbGx5IGhhbmRsZWQgaW4gcHJhY3RpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lycS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHR9XG4gMTUxOlx0RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9jcHVfZ2V0X2V4dGludCk7XG4gMTUyOlx0XG4gMTUzOlx0LypcbiAxNTQ6XHQgKiBSZWFkIHBlbmRpbmcgaW50ZXJydXB0IHZlY3RvciBhbmQgaW50YWNrLlxuIDE1NTpcdCAqL1xuIDE1NjpcdGludCBrdm1fY3B1X2dldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KVxuIDE1NzpcdHtcbiAxNTg6XHRcdGludCB2ZWN0b3IgPSBrdm1fY3B1X2dldF9leHRpbnQodik7XG4gMTU5Olx0XHRpZiAodmVjdG9yICE9IC0xKVxuIDE2MDpcdFx0XHRyZXR1cm4gdmVjdG9yO1x0XHRcdC8qIFBJQyAqL1xuIDE2MTpcdFxuIDE2MjpcdFx0dmVjdG9yID0ga3ZtX2FwaWNfaGFzX2ludGVycnVwdCh2KTtcdC8qIEFQSUMgKi9cbiAxNjM6XHRcdGlmICh2ZWN0b3IgIT0gLTEpXG4gMTY0Olx0XHRcdGt2bV9hcGljX2Fja19pbnRlcnJ1cHQodiwgdmVjdG9yKTtcbiAxNjU6XHRcbiAxNjY6XHRcdHJldHVybiB2ZWN0b3I7XG4gMTY3Olx0fVxuIDE2ODpcdFxuIDE2OTpcdHZvaWQga3ZtX2luamVjdF9wZW5kaW5nX3RpbWVyX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjczCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFkZHJlc3NpbmcgYSBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb24gaW4gS1ZNIEludGVycnVwdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXJlJiMzOTtzIGEgcG9zc2libGUgaXNzdWUgd2l0aCBob3cgaW50ZXJydXB0cyBhcmUgYmVpbmcgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBga3ZtX2NwdV9nZXRfaW50ZXJydXB0YCBjYW4gcmV0dXJuIC0xLCBhbmQgdGhhdCYjMzk7cyBsaW5rZWQgdG8gd2hhdCBga3ZtX2FwaWNfaGFzX2ludGVycnVwdGAgcmVwb3J0cy4gVGhlIC0xIHJldHVybiBlc3NlbnRpYWxseSBpbmRpY2F0ZXMgdGhlcmUmIzM5O3Mgbm8gaW50ZXJydXB0IHBlbmRpbmcsIHdoaWNoIGlzIGV4cGVjdGVkIGJlaGF2aW9yIHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLgoKVGhlIGNydXggb2YgdGhlIHByb2JsZW0gbGllcyBpbiBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4gVGhlcmUmIzM5O3MgYSBzY2VuYXJpbyB3aGVyZSBga3ZtX2NwdV9oYXNfaW5qZWN0YWJsZV9pbnRyYCBtaWdodCBoYXZlIHJlcG9ydGVkIHRoYXQgYW4gaW50ZXJydXB0ICpjb3VsZCogYmUgaW5qZWN0ZWQsIGJ1dCB0aGVuLCBieSB0aGUgdGltZSBga3ZtX2NwdV9nZXRfaW50ZXJydXB0YCBpcyBjYWxsZWQsIHRoZXJlJiMzOTtzIG5vIGludGVycnVwdCBhY3R1YWxseSByZWFkeS4gVGhpcyBkaXNjcmVwYW5jeSDigJMgdGhhdCBib29sZWFuIGluZGljYXRpbmcgJiMzNDtpbmplY3RhYmxlJiMzNDsgYW5kIHRoZW4gYSAtMSBmcm9tIGBnZXRfaW50ZXJydXB0YCDigJMgc3VnZ2VzdHMgZWl0aGVyIGEgdGltaW5nIGlzc3VlIG9yLCBtb3JlIGNvbmNlcm5pbmdseSwgYW4gaW5jb25zaXN0ZW5jeSBpbiB0aGUgaW50ZXJuYWwgc3RhdGUuCgpUaGUgcGF0Y2ggSSYjMzk7bSBleGFtaW5pbmcgYWRkcmVzc2VzIHRoaXMgYnksIGlmIEkmIzM5O20gdW5kZXJzdGFuZGluZyBjb3JyZWN0bHksIGp1bXBpbmcgdG8gdGhlIGBvdXRgIGxhYmVsIGluIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8uIFRoZSBgb3V0YCBsYWJlbCBwcm9iYWJseSBpbnZvbHZlcyBzb21lIHNvcnQgb2YgY2xlYW4gdXAsIGFuZCByZXR1cm5zIGEgdmFsdWUgb2Ygc29tZSBraW5kLiBMZXQgbWUgcXVpY2tseSBjb25maXJtIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMgZXhhY3RseS4gSSYjMzk7bSBhc3N1bWluZyBpdCBoYW5kbGVzIGl0IGdyYWNlZnVsbHksIHByb2JhYmx5IHJldHVybmluZyBhIDAgb3IgZXF1aXZhbGVudCB0byBzaWduaWZ5IG5vIGludGVycnVwdCB3YXMgcHJvY2Vzc2VkLCBlZmZlY3RpdmVseSBzaWRlc3RlcHBpbmcgdGhlIGluY29uc2lzdGVuY3kuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgYXBwcm9hY2ggdG8gZW5zdXJlIHRoZSBzeXN0ZW0gcmVtYWlucyBzdGFibGUgYW5kIHByZWRpY3RhYmxlLCBldmVuIGluIHRoZSBmYWNlIG9mIHRoZXNlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MjU6XHRcdCAqIE1vZGUgZXZlbnRzIChzZWUga3ZtX2luamVjdF9yZWFsbW9kZV9pbnRlcnJ1cHQoKSkuXG4xMDgyNjpcdFx0ICovXG4xMDgyNzpcdFx0V0FSTl9PTl9PTkNFKHZjcHUtXHUwMDNlYXJjaC5leGNlcHRpb24ucGVuZGluZyB8fFxuMTA4Mjg6XHRcdFx0ICAgICB2Y3B1LVx1MDAzZWFyY2guZXhjZXB0aW9uX3ZtZXhpdC5wZW5kaW5nKTtcbjEwODI5Olx0XHRyZXR1cm4gMDtcbjEwODMwOlx0XG4xMDgzMTpcdG91dDpcbjEwODMyOlx0XHRpZiAociA9PSAtRUJVU1kpIHtcbjEwODMzOlx0XHRcdCpyZXFfaW1tZWRpYXRlX2V4aXQgPSB0cnVlO1xuMTA4MzQ6XHRcdFx0ciA9IDA7XG4xMDgzNTpcdFx0fVxuMTA4MzY6XHRcdHJldHVybiByO1xuMTA4Mzc6XHR9XG4xMDgzODpcdFxuMTA4Mzk6XHRzdGF0aWMgdm9pZCBwcm9jZXNzX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4xMDg0MDpcdHtcbjEwODQxOlx0XHR1bnNpZ25lZCBpbnQgbGltaXQ7XG4xMDg0MjpcdFxuMTA4NDM6XHRcdC8qXG4xMDg0NDpcdFx0ICogeDg2IGlzIGxpbWl0ZWQgdG8gb25lIE5NSSBwZW5kaW5nLCBidXQgYmVjYXVzZSBLVk0gY2FuJiMzOTt0IHJlYWN0IHRvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNTcKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZXR1cm4gVmFsdWUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJhY2tpbmcgdGhlIHZhcmlhYmxlIGByYC4gSXQgbG9va3MgbGlrZSBgcmAgaXMgaW5pdGlhbGx5IGFzc2lnbmVkIHRoZSB2YWx1ZSBvZiAxIGJlY2F1c2UgYGlmIChyKWAgZXZhbHVhdGVzIHRvIHRydWUuIEJ1dCB3YWl0LCBJIG5lZWQgdG8gYmFjayB1cCBhIHN0ZXAuIEl0IHNlZW1zIHRoYXQgYHJgIGlzIGFjdHVhbGx5IHNldCBieSB0aGUgcmVzdWx0IG9mIGEgZnVuY3Rpb24gY2FsbDogYGt2bV94ODZfY2FsbGAuIFNvLCBkZXBlbmRpbmcgb24gYGNhbl9pbmplY3RgLCBpdCBlaXRoZXIgZ2V0cyB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsIG9yIGlzIHNldCB0byBgLUVCVVNZYC4KCk5vdywgaWYgdGhpcyBgcmAgaXMgaW5kZWVkIDEsIHRoZW4gdGhlIGBnb3RvIG91dDtgIHN0YXRlbWVudCB3aWxsIGVuc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIDEuIEhtbSwgbGV0IG1lIGNvbmZpcm0uIFllcywgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gaXMgaW5kZWVkIGByYC4gU28sIHdoZW4gYHJgIGlzIDEsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDEuCgpJIGJldHRlciBjaGVjayB0aGUgY2FsbGVycyBvZiBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHJldHVybiB2YWx1ZSBhbmQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz0xMDU3NT1zdGF0aWMgdm9pZCBrdm1faW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNjMyLSAqL1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNjMzOnN0YXRpYyBpbnQga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDYzNC1cdFx0XHRcdCAgICAgICBib29sICpyZXFfaW1tZWRpYXRlX2V4aXQpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwODk0PXZvaWQgX19rdm1fdmNwdV91cGRhdGVfYXBpY3Yoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDkxOS1cdCAqIHN0aWxsIGFjdGl2ZSB3aGVuIHRoZSBpbnRlcnJ1cHQgZ290IGFjY2VwdGVkLiBNYWtlIHN1cmVcbmFyY2gveDg2L2t2bS94ODYuYzoxMDkyMDpcdCAqIGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cygpIGlzIGNhbGxlZCB0byBjaGVjayBmb3IgdGhhdC5cbmFyY2gveDg2L2t2bS94ODYuYy0xMDkyMS1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMTExMj1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTI5NS1cbmFyY2gveDg2L2t2bS94ODYuYzoxMTI5NjpcdFx0ciA9IGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyh2Y3B1LCBcdTAwMjZyZXFfaW1tZWRpYXRlX2V4aXQpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjk3LVx0XHRpZiAociBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODc5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIEV2ZW50IEluamVjdGlvbiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBzbmlwcGV0IGZyb20gYHZjcHVfZW50ZXJfZ3Vlc3RgIGFuZCB0cnlpbmcgdG8gZ3Jhc3AgdGhlIGludGVycnVwdCBpbmplY3Rpb24gZmxvdy4gSXQgc3RhcnRzIHdpdGggYSBjYWxsIHRvIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgLiBUaGUgcmV0dXJuIHZhbHVlLCBgcmAsIGlzIGtleSBoZXJlLiBJZiBgcmAgaXMgbGVzcyB0aGFuIHplcm8sIHRoZXJlJiMzOTtzIGFuIGVycm9yLCBhbmQgd2UganVtcCB0byBgY2FuY2VsX2luamVjdGlvbmAuIEJ1dCBpZiBgcmAgaXMgMSwgdGhlIGNvZGUgc2ltcGx5IGNvbnRpbnVlcy4gSG1tLCB3aHk/CgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBBIHZhbHVlIG9mIDEgZm9yIGByYCBtdXN0IG1lYW4gdGhhdCBgaW50ZXJydXB0X2FsbG93ZWRgIHJldHVybmVkIDEuIFNvLCBpZiB0aGlzIGNvbmRpdGlvbiBpcyBtZXQsIGFuZCBgcmAgcmVtYWlucyBhdCAxLCB0aGUgY29kZSBwcm9jZWVkcyBhbmQgdGhlbiBmaW5hbGx5IHJldHVybnMgMSBhcyB0aGUgb3ZlcmFsbCBmdW5jdGlvbiYjMzk7cyB2YWx1ZS4gSXMgdGhpcyBob3cgaXQgcmVhbGx5IHdvcmtzPyBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4KCkxldCYjMzk7cyB0cmFjZSB3aGF0IGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgICpub3JtYWxseSogcmV0dXJucy4gQXQgdGhlIGVuZCBvZiB0aGF0IGZ1bmN0aW9uLCBpZiBpdCByZWFjaGVzIHRoZSBlbmQgYW5kIG5vIGludGVycnVwdHMgYXJlIGluamVjdGVkLCBpdCByZXR1cm5zIDAuIEhvd2V2ZXIsIGlmIHRoZSBmdW5jdGlvbiBqdW1wcyB0byBgb3V0YCB3aXRoIGByYCBiZWluZyAxLCBpdCAqZGVmaW5pdGVseSogcmV0dXJucyAxLgoKSSB0aGluayBJIHNlZSBpdCBub3cuIFRoZSB2YWx1ZSBvZiBgcmAgZG9lc24mIzM5O3QgY2hhbmdlIGFmdGVyIGl0cyBpbml0aWFsIGFzc2lnbm1lbnQsIGJhc2VkIG9uIHRoYXQgdGVybmFyeS4gU28gYHJgIGlzIG9ubHkgc2V0IHRvIHZhbHVlcyBncmVhdGVyIHRoYW4gemVybywgb3IgbGVzcyB0aGFuIHplcm8uIExldCYjMzk7cyBzZWUgaWYgYHZjcHVfZW50ZXJfZ3Vlc3RgIGFjdHVhbGx5IGNhcmVzIGFib3V0IGByYCBiZWluZyBncmVhdGVyIHRoYW4gemVyby4gVGhhdCYjMzk7cyB0aGUgcGFydCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0byBjb25maXJtIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMjk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMjk1Olx0XG4xMTI5NjpcdFx0XHRyID0ga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzKHZjcHUsIFx1MDAyNnJlcV9pbW1lZGlhdGVfZXhpdCk7XG4xMTI5NzpcdFx0XHRpZiAociBcdTAwM2MgMCkge1xuMTEyOTg6XHRcdFx0XHRyID0gMDtcbjExMjk5Olx0XHRcdFx0Z290byBvdXQ7XG4xMTMwMDpcdFx0XHR9XG4xMTMwMTpcdFx0XHRpZiAocmVxX2ludF93aW4pXG4xMTMwMjpcdFx0XHRcdGt2bV94ODZfY2FsbChlbmFibGVfaXJxX3dpbmRvdykodmNwdSk7XG4xMTMwMzpcdFxuMTEzMDQ6XHRcdFx0aWYgKGt2bV9sYXBpY19lbmFibGVkKHZjcHUpKSB7XG4xMTMwNTpcdFx0XHRcdGt2bV9sYXBpY191cGRhdGVfY3I4X2ludGVyY2VwdCh2Y3B1KTtcbjExMzA2Olx0XHRcdFx0a3ZtX2xhcGljX3N5bmNfdG9fdmFwaWModmNwdSk7XG4xMTMwNzpcdFx0XHR9XG4xMTMwODpcdFx0fVxuMTEzMDk6XHRcbjExMzEwOlx0XHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4xMTMxMTpcdFx0aWYgKHVubGlrZWx5KHIpKSB7XG4xMTMxMjpcdFx0XHRnb3RvIGNhbmNlbF9pbmplY3Rpb247XG4xMTMxMzpcdFx0fVxuMTEzMTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgyMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIEJ1ZyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgS1ZNIGJ1ZyBhbmQgaG93IHRvIGJlc3QgZnV6eiBpdC4gVGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIGluIGB2Y3B1X2VudGVyX2d1ZXN0YCBpcyBjaGFuZ2VkLCBidXQgaXQgZG9lc24mIzM5O3QgKmRpcmVjdGx5KiBhZmZlY3QgdGhlIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yLiBUaGUgcmVhbCBpbXBhY3QgaXMgc2tpcHBpbmcgYGVuYWJsZV9pcnFfd2luZG93YCBhbmQgdGhlIHJlc3Qgb2YgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AuCgpTbywgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdCBzbyBmYXI6IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIG9idmlvdXNseS4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIGZvY3VzaW5nIGZ1enppbmcgb24gYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AsIGFzIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNoYW5nZSBhY3R1YWxseSAqZG9lcyogc29tZXRoaW5nLiBBbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGBLVk1gLiBJdCBzZWVtcyBsaWtlIGBLVk1gIGlzIGFsbCB0aGF0JiMzOTtzIHJlcXVpcmVkIGhlcmU7IG5vIG90aGVyIGNvbmZpZyBpcyBuZWVkZWQuCgpOb3csIHRoZSBxdWVzdGlvbiBpczogYXJlIHRoZXJlICpvdGhlciogZnVuY3Rpb25zIHdlIHNob3VsZCB0YXJnZXQ/IEkgY29uc2lkZXJlZCBga3ZtX2NwdV9nZXRfaW50ZXJydXB0YCwgYnV0IHRoZW4gSSByZWFsaXplZCBgdmNwdV9lbnRlcl9ndWVzdGAgYW5kIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIGFyZSBib3RoIGhvdC1wYXRoIGZ1bmN0aW9ucywgdGhhdCBpcywgdGhleSYjMzk7cmUgY2FsbGVkIGZyZXF1ZW50bHkuIElkZWFsbHksIHRoZSBmdXp6aW5nIHNob3VsZG4mIzM5O3QgYmUgc2tld2VkIGJ5IHBpY2tpbmcgaG90LXBhdGggZnVuY3Rpb25zLiBUaGUgcHJvbXB0IGRvZXMgc2F5IHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLgoKSG93ZXZlciwgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AgKmlzKiB0aGUgb25lIHRoYXQgd2FzIG1vZGlmaWVkLiBJdCYjMzk7cyBjYWxsZWQgb24gZXZlcnkgVk0gZW50cnksIG1ha2luZyBpdCBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgKnNwZWNpZmljKiB0byB0aGlzIGNoYW5nZS4gSSYjMzk7bSB0b3JuISBJcyBpdCB0b28gZ2VuZXJpYyBvciBub3Q/IFVsdGltYXRlbHksIEkgYmVsaWV2ZSBpdCBpcyBva2F5IHRvIGxpc3QgaXQgaW4gYEZvY3VzU3ltYm9sc2AuCgpUaGUgYnVnIGl0c2VsZiByZWxhdGVzIHRvIGFuIGBpcnEgPT0gLTFgIHNpdHVhdGlvbiB3aGVuIGBrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHJgIGlzIHRydWUsIHdoaWNoIGFyaXNlcyB3aGVuIHRoZXJlJiMzOTtzIGEgcGVuZGluZyBpbnRlcnJ1cHQgdGhhdCBkaXNhcHBlYXJzIG9yIGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uLiBTdGlsbCwgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb24gcmVtYWlucyBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYC4KClNvIEkmIzM5O3ZlIGRlY2lkZWQgdG8gbGlzdCBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCBpbiBgRm9jdXNTeW1ib2xzYCBhcyBpdCYjMzk7cyB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbiBpbiB0aGlzIGFuYWx5c2lzLCBldmVuIHRob3VnaCBpdCYjMzk7cyBhIGhvdCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjAzCgkJCQkJCQlvdXRwdXQ6IDE2OQoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIEludGVycnVwdCBJbmplY3Rpb24gUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgS1ZNIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGluZyB0byB0aGUgYEtWTWAgbW9kdWxlLCBhbmQgdGhhdCYjMzk7cyBnb2luZyB0byBiZSBrZXkgaW4gdGhlIGBFbmFibGVDb25maWdzYCBzZXR1cC4KClRoZSBoZWFydCBvZiB0aGUgY2hhbmdlIGxpZXMgd2l0aGluIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgLiBJdCBzZWVtcyB0aGF0IHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgc2NlbmFyaW8gd2hlcmUgYGt2bV9jcHVfZ2V0X2ludGVycnVwdGAgaXMgcmV0dXJuaW5nIC0xLCBpbmRpY2F0aW5nIG5vIHBlbmRpbmcgaW50ZXJydXB0LCBldmVuIHdoZW4gYGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cmAgc2F5cyB0aGVyZSAqc2hvdWxkKiBiZSBvbmUuIFRoYXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgZGlzY3JlcGFuY3kuIFRoZSBjb2RlJiMzOTtzIG9yaWdpbmFsIHJlc3BvbnNlIHdhcyB0byB1c2UgYFdBUk5fT05fT05DRWAsIGJ1dCB0aGF0JiMzOTtzIGJlaW5nIHJlcGxhY2VkIHdpdGggYSBgZ290byBvdXQ7YCwgZWZmZWN0aXZlbHkgc2tpcHBpbmcgdGhlIHN1YnNlcXVlbnQgaW50ZXJydXB0IGluamVjdGlvbiBzdGVwcywgc3BlY2lmaWNhbGx5IHRoZSBgZW5hYmxlX2lycV93aW5kb3dgIHBhcnQuCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBtb2RpZmljYXRpb24gdG8gS1ZNJiMzOTtzIGludGVycnVwdCBpbmplY3Rpb24gcGF0aC4gQSAqZnVuZGFtZW50YWwqIGNoYW5nZSBsaWtlIHRoaXMgd2FycmFudHMgc29tZSBzZXJpb3VzIHNjcnV0aW55LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIHNpZ25pZmljYW50IHNoaWZ0IGluIGhvdyBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciByZWdyZXNzaW9ucyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMgd2l0aCB0aGlzIGtpbmQgb2YgaW50ZXJydXB0IGludGVyYWN0aW9uLCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gc2V0IHVwIHNvbWUgZnV6emluZyB0byByZWFsbHkgc3RyZXNzLXRlc3QgdGhlIG5ldyBiZWhhdmlvci4gV2UmIzM5O2xsIG5lZWQgdG8gc2V0IHVwIHRob3NlIHRlc3QgcmVzdWx0cyBhbmQgcmV2aWV3IHRoZW0gY2xvc2VseS4gTGV0JiMzOTtzIGNhbGwgaXQgc2V0LXJlc3VsdHMgYW5kIGdldCBzdGFydGVkIG9uIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGBrdm1fY3B1X2dldF9pbnRlcnJ1cHRgIHJldHVybnMgLTEgKG5vIHBlbmRpbmcgaW50ZXJydXB0KSBkZXNwaXRlIGBrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHJgIHJldHVybmluZyB0cnVlLiBJdCByZXBsYWNlcyBhIGBXQVJOX09OX09OQ0VgIHdpdGggYSBgZ290byBvdXQ7YCwgc2tpcHBpbmcgdGhlIHJlc3Qgb2YgdGhlIGV2ZW50IGluamVjdGlvbiBsb2dpYyAobGlrZSBgZW5hYmxlX2lycV93aW5kb3dgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSYjMzk7cyBpbnRlcnJ1cHQgaW5qZWN0aW9uIHBhdGggYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYGt2bV9jcHVfZ2V0X2ludGVycnVwdGAgcmV0dXJucyAtMSAobm8gcGVuZGluZyBpbnRlcnJ1cHQpIGRlc3BpdGUgYGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cmAgcmV0dXJuaW5nIHRydWUuIEl0IHJlcGxhY2VzIGEgYFdBUk5fT05fT05DRWAgd2l0aCBhIGBnb3RvIG91dDtgLCBza2lwcGluZyB0aGUgcmVzdCBvZiB0aGUgZXZlbnQgaW5qZWN0aW9uIGxvZ2ljIChsaWtlIGBlbmFibGVfaXJxX3dpbmRvd2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNJiMzOTtzIGludGVycnVwdCBpbmplY3Rpb24gcGF0aCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjE2OjU1LjgzNTg5Mjk5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTQ3NjM3ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBga3ZtX2NwdV9nZXRfaW50ZXJydXB0YCByZXR1cm5zIC0xIChubyBwZW5kaW5nIGludGVycnVwdCkgZGVzcGl0ZSBga3ZtX2NwdV9oYXNfaW5qZWN0YWJsZV9pbnRyYCByZXR1cm5pbmcgdHJ1ZS4gSXQgcmVwbGFjZXMgYSBgV0FSTl9PTl9PTkNFYCB3aXRoIGEgYGdvdG8gb3V0O2AsIHNraXBwaW5nIHRoZSByZXN0IG9mIHRoZSBldmVudCBpbmplY3Rpb24gbG9naWMgKGxpa2UgYGVuYWJsZV9pcnFfd2luZG93YCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBLVk0ncyBpbnRlcnJ1cHQgaW5qZWN0aW9uIHBhdGggYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTY6NTUuODM1OTAzMTg1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUzMjU4MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhOGExODU1M2YwMWU4ODMxNmZlNWY1YzI0NDcyYTZhOTU5NDQzMzliXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gSnVsIDEyIDEzOjE2OjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbmluZGV4IGFmY2FjMTA0Mjk0N2E1Li4zNmJmNDc5YTExNjQ5OSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtMTA3OTcsMTEgKzEwNzk3LDExIEBAIHN0YXRpYyBpbnQga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0aWYgKHIpIHtcXG4gXFx0XFx0XFx0aW50IGlycSA9IGt2bV9jcHVfZ2V0X2ludGVycnVwdCh2Y3B1KTtcXG4gXFxuLVxcdFxcdFxcdGlmICghV0FSTl9PTl9PTkNFKGlycSA9PSAtMSkpIHtcXG4tXFx0XFx0XFx0XFx0a3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCBpcnEsIGZhbHNlKTtcXG4tXFx0XFx0XFx0XFx0a3ZtX3g4Nl9jYWxsKGluamVjdF9pcnEpKHZjcHUsIGZhbHNlKTtcXG4tXFx0XFx0XFx0XFx0V0FSTl9PTihrdm1feDg2X2NhbGwoaW50ZXJydXB0X2FsbG93ZWQpKHZjcHUsIHRydWUpIFxcdTAwM2MgMCk7XFxuLVxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKGlycSA9PSAtMSlcXG4rXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdGt2bV9xdWV1ZV9pbnRlcnJ1cHQodmNwdSwgaXJxLCBmYWxzZSk7XFxuK1xcdFxcdFxcdGt2bV94ODZfY2FsbChpbmplY3RfaXJxKSh2Y3B1LCBmYWxzZSk7XFxuK1xcdFxcdFxcdFdBUk5fT04oa3ZtX3g4Nl9jYWxsKGludGVycnVwdF9hbGxvd2VkKSh2Y3B1LCB0cnVlKSBcXHUwMDNjIDApO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHIodmNwdSkpXFxuIFxcdFxcdFxcdGt2bV94ODZfY2FsbChlbmFibGVfaXJxX3dpbmRvdykodmNwdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjE2OjU2LjQ1MTk2OTM0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzUzMTU0NTc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYGt2bV9jcHVfZ2V0X2ludGVycnVwdGAgcmV0dXJucyAtMSAobm8gcGVuZGluZyBpbnRlcnJ1cHQpIGRlc3BpdGUgYGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cmAgcmV0dXJuaW5nIHRydWUuIEl0IHJlcGxhY2VzIGEgYFdBUk5fT05fT05DRWAgd2l0aCBhIGBnb3RvIG91dDtgLCBza2lwcGluZyB0aGUgcmVzdCBvZiB0aGUgZXZlbnQgaW5qZWN0aW9uIGxvZ2ljIChsaWtlIGBlbmFibGVfaXJxX3dpbmRvd2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNJ3MgaW50ZXJydXB0IGluamVjdGlvbiBwYXRoIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYThhMTg1NTNmMDFlODgzMTZmZTVmNWMyNDQ3MmE2YTk1OTQ0MzM5YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDEyIDEzOjE2OjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCBhZmNhYzEwNDI5NDdhNS4uMzZiZjQ3OWExMTY0OTkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuY1xuQEAgLTEwNzk3LDExICsxMDc5NywxMSBAQCBzdGF0aWMgaW50IGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdGlmIChyKSB7XG4gXHRcdFx0aW50IGlycSA9IGt2bV9jcHVfZ2V0X2ludGVycnVwdCh2Y3B1KTtcbiBcbi1cdFx0XHRpZiAoIVdBUk5fT05fT05DRShpcnEgPT0gLTEpKSB7XG4tXHRcdFx0XHRrdm1fcXVldWVfaW50ZXJydXB0KHZjcHUsIGlycSwgZmFsc2UpO1xuLVx0XHRcdFx0a3ZtX3g4Nl9jYWxsKGluamVjdF9pcnEpKHZjcHUsIGZhbHNlKTtcbi1cdFx0XHRcdFdBUk5fT04oa3ZtX3g4Nl9jYWxsKGludGVycnVwdF9hbGxvd2VkKSh2Y3B1LCB0cnVlKSBcdTAwM2MgMCk7XG4tXHRcdFx0fVxuK1x0XHRcdGlmIChpcnEgPT0gLTEpXG4rXHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHRrdm1fcXVldWVfaW50ZXJydXB0KHZjcHUsIGlycSwgZmFsc2UpO1xuK1x0XHRcdGt2bV94ODZfY2FsbChpbmplY3RfaXJxKSh2Y3B1LCBmYWxzZSk7XG4rXHRcdFx0V0FSTl9PTihrdm1feDg2X2NhbGwoaW50ZXJydXB0X2FsbG93ZWQpKHZjcHUsIHRydWUpIFx1MDAzYyAwKTtcbiBcdFx0fVxuIFx0XHRpZiAoa3ZtX2NwdV9oYXNfaW5qZWN0YWJsZV9pbnRyKHZjcHUpKVxuIFx0XHRcdGt2bV94ODZfY2FsbChlbmFibGVfaXJxX3dpbmRvdykodmNwdSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxNjo1Ni40NTE5NzExOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NDQ3MTIzMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNIEludGVycnVwdCBJbmplY3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEtWTSBwYXRjaCwgYW5kIGl0J3MgbW9kaWZ5aW5nIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGlzOiB0aGV5J3ZlIHJlcGxhY2VkIGEgYFdBUk5fT05fT05DRShpcnEgPT0gLTEpYCB3aXRoIGEgZGlyZWN0IGBpZiAoaXJxID09IC0xKSBnb3RvIG91dDtgLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRoYXQgdGhpcyBpcyBtb3JlIHRoYW4ganVzdCBhIGNvc21ldGljIGNoYW5nZTsgaXQncyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIGJlY2F1c2UgaXQgYWx0ZXJzIHRoZSBjb250cm9sIGZsb3cuXG5cbkxldCBtZSBicmVhayBkb3duIHdoYXQncyBoYXBwZW5pbmcuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIGxvb2tlZCBsaWtlIHRoaXM6IGlmIGBpcnEgPT0gLTFgLCB0aGUgYGlmYCBibG9jayB3b3VsZCBiZSBza2lwcGVkIGFuZCB0aGUgZXhlY3V0aW9uIHdvdWxkIGNvbnRpbnVlIGFzIG5vcm1hbDpcbmBgYGNcblx0XHRcdGlmICghV0FSTl9PTl9PTkNFKGlycSA9PSAtMSkpIHtcblx0XHRcdFx0a3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCBpcnEsIGZhbHNlKTtcblx0XHRcdFx0a3ZtX3g4Nl9jYWxsKGluamVjdF9pcnEpKHZjcHUsIGZhbHNlKTtcblx0XHRcdFx0V0FSTl9PTihrdm1feDg2X2NhbGwoaW50ZXJydXB0X2FsbG93ZWQpKHZjcHUsIHRydWUpIFx1MDAzYyAwKTtcblx0XHRcdH1cbmBgYFxuSWYgYGlycSA9PSAtMWAgdGhlIGZvbGxvd2luZyBjb2RlIHdvdWxkIHN0aWxsIGJlIGV4ZWN1dGVkOlxuYGBgY1xuXHRcdGlmIChrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHIodmNwdSkpXG5cdFx0XHRrdm1feDg2X2NhbGwoZW5hYmxlX2lycV93aW5kb3cpKHZjcHUpO1xuYGBgXG5CdXQgbm93LCB3aXRoIHRoZSBwYXRjaCwgdGhlIGNvZGUgYmVjb21lczpcbmBgYGNcblx0XHRcdGlmIChpcnEgPT0gLTEpXG5cdFx0XHRcdGdvdG8gb3V0O1xuXHRcdFx0a3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCBpcnEsIGZhbHNlKTtcblx0XHRcdGt2bV94ODZfY2FsbChpbmplY3RfaXJxKSh2Y3B1LCBmYWxzZSk7XG5cdFx0XHRXQVJOX09OKGt2bV94ODZfY2FsbChpbnRlcnJ1cHRfYWxsb3dlZCkodmNwdSwgdHJ1ZSkgXHUwMDNjIDApO1xuYGBgXG5cbk5vdywgaWYgYGlycSA9PSAtMWAsIGl0IGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBvdXRgLiBUaGlzIG1lYW5zIGl0ICpza2lwcyogdGhlIGBrdm1fcXVldWVfaW50ZXJydXB0YCwgYGt2bV94ODZfY2FsbChpbmplY3RfaXJxKWAsIGBXQVJOX09OYCBjYWxscywgYW5kIGNydWNpYWxseSwgYW55IGNvZGUgKmFmdGVyKiB0aGF0LCBpbmNsdWRpbmcgdGhlIGBlbmFibGVfaXJxX3dpbmRvd2AgY2hlY2ssIHdoYXRldmVyIHRoYXQgZG9lcy5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGF0J3MgdGhlIHB1cnBvc2Ugb2YgYGVuYWJsZV9pcnFfd2luZG93YD8gV2h5IGlzIGl0IHNraXBwZWQgbm93IGlmIGBpcnEgPT0gLTFgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBvZiBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBjb3VsZCBiZSBhIHNpbXBsZSBvcHRpbWl6YXRpb24sIGJ1dCBpdCBjb3VsZCBhbHNvIGJlIGhpZGluZyBhIG1vcmUgc3VidGxlIGJ1ZyBvciBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZS9zZWN1cml0eSB0cmFkZS1vZmYuIExldCBtZSBjaGVjayB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyOSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjE3OjAzLjA5NjY4NTU0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQyODI2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9MTA1NzU9c3RhdGljIHZvaWQga3ZtX2luamVjdF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNjMyLSAqL1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDYzMzpzdGF0aWMgaW50IGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNjM0LVxcdFxcdFxcdFxcdCAgICAgICBib29sICpyZXFfaW1tZWRpYXRlX2V4aXQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA4OTQ9dm9pZCBfX2t2bV92Y3B1X3VwZGF0ZV9hcGljdihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA5MTktXFx0ICogc3RpbGwgYWN0aXZlIHdoZW4gdGhlIGludGVycnVwdCBnb3QgYWNjZXB0ZWQuIE1ha2Ugc3VyZVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDkyMDpcXHQgKiBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoKSBpcyBjYWxsZWQgdG8gY2hlY2sgZm9yIHRoYXQuXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwOTIxLVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMTEyPXN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEyOTUtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMjk2OlxcdFxcdHIgPSBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHModmNwdSwgXFx1MDAyNnJlcV9pbW1lZGlhdGVfZXhpdCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjk3LVxcdFxcdGlmIChyIFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxNzowMy4yNDA5NzI5MjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDg1NTcyNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCAtIEEgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgSSdtIGhlcmUsIEkgc2VlIHRoZSBjYWxsIHRvIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiBpbiB0aGUgS1ZNIGluZnJhc3RydWN0dXJlLCBhbmQgSSdtIGtlZW4gdG8gZXhhbWluZSB0aGUgcmVzdCBvZiBpdC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgZXZlbnRzIGFyZSBoYW5kbGVkIGFuZCBpbmplY3RlZCBpbnRvIHRoZSB2aXJ0dWFsIG1hY2hpbmUgZnJvbSB0aGlzIHBvaW50LiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyB2aXRhbCBmb3IgbWFuYWdpbmcgdGhpbmdzIGxpa2UgaW50ZXJydXB0cywgZXhjZXB0aW9ucywgYW5kIG90aGVyIHNpZ25hbHMgdGhhdCBuZWVkIHRvIHJlYWNoIHRoZSBndWVzdC4gVW5kZXJzdGFuZGluZyB0aGlzIGNvbXBsZXRlIHByb2Nlc3MgaXMgZXNzZW50aWFsLiBMZXQncyBzZWUgd2hhdCBtb3JlIGl0IGVudGFpbHMuLi4gbGV0J3Mgc2VlIHRoZSBmbG93LCB0aGUgY29uZGl0aW9ucywgYW5kIHRoZSBhY3R1YWwgaW5qZWN0aW9uIG1lY2hhbmlzbXMuIEtub3dpbmcgdGhlIGRldGFpbHMgaGVyZSBtZWFucyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgc3lzdGVtIHRoYXQgcnVucyBjb3JyZWN0bHkgYW5kIG9uZSB0aGF0IGRvZXNuJ3QuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxNzowNi4zMjY1NDc0NDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzkwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDc4MDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMDc4MTpcXHRcXHRcXHRpZiAocikge1xcbjEwNzgyOlxcdFxcdFxcdFxcdC0tdmNwdS1cXHUwMDNlYXJjaC5ubWlfcGVuZGluZztcXG4xMDc4MzpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLm5taV9pbmplY3RlZCA9IHRydWU7XFxuMTA3ODQ6XFx0XFx0XFx0XFx0a3ZtX3g4Nl9jYWxsKGluamVjdF9ubWkpKHZjcHUpO1xcbjEwNzg1OlxcdFxcdFxcdFxcdGNhbl9pbmplY3QgPSBmYWxzZTtcXG4xMDc4NjpcXHRcXHRcXHRcXHRXQVJOX09OKGt2bV94ODZfY2FsbChubWlfYWxsb3dlZCkodmNwdSwgdHJ1ZSkgXFx1MDAzYyAwKTtcXG4xMDc4NzpcXHRcXHRcXHR9XFxuMTA3ODg6XFx0XFx0XFx0aWYgKHZjcHUtXFx1MDAzZWFyY2gubm1pX3BlbmRpbmcpXFxuMTA3ODk6XFx0XFx0XFx0XFx0a3ZtX3g4Nl9jYWxsKGVuYWJsZV9ubWlfd2luZG93KSh2Y3B1KTtcXG4xMDc5MDpcXHRcXHR9XFxuMTA3OTE6XFx0XFxuMTA3OTI6XFx0XFx0aWYgKGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cih2Y3B1KSkge1xcbjEwNzkzOlxcdFxcdFxcdHIgPSBjYW5faW5qZWN0ID8ga3ZtX3g4Nl9jYWxsKGludGVycnVwdF9hbGxvd2VkKSh2Y3B1LCB0cnVlKSA6XFxuMTA3OTQ6XFx0XFx0XFx0XFx0XFx0IC1FQlVTWTtcXG4xMDc5NTpcXHRcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuMTA3OTY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTA3OTc6XFx0XFx0XFx0aWYgKHIpIHtcXG4xMDc5ODpcXHRcXHRcXHRcXHRpbnQgaXJxID0ga3ZtX2NwdV9nZXRfaW50ZXJydXB0KHZjcHUpO1xcbjEwNzk5OlxcdFxcbjEwODAwOlxcdFxcdFxcdFxcdGlmIChpcnEgPT0gLTEpXFxuMTA4MDE6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTA4MDI6XFx0XFx0XFx0XFx0a3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCBpcnEsIGZhbHNlKTtcXG4xMDgwMzpcXHRcXHRcXHRcXHRrdm1feDg2X2NhbGwoaW5qZWN0X2lycSkodmNwdSwgZmFsc2UpO1xcbjEwODA0OlxcdFxcdFxcdFxcdFdBUk5fT04oa3ZtX3g4Nl9jYWxsKGludGVycnVwdF9hbGxvd2VkKSh2Y3B1LCB0cnVlKSBcXHUwMDNjIDApO1xcbjEwODA1OlxcdFxcdFxcdH1cXG4xMDgwNjpcXHRcXHRcXHRpZiAoa3ZtX2NwdV9oYXNfaW5qZWN0YWJsZV9pbnRyKHZjcHUpKVxcbjEwODA3OlxcdFxcdFxcdFxcdGt2bV94ODZfY2FsbChlbmFibGVfaXJxX3dpbmRvdykodmNwdSk7XFxuMTA4MDg6XFx0XFx0fVxcbjEwODA5OlxcdFxcbjEwODEwOlxcdFxcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuMTA4MTE6XFx0XFx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWhhc19ldmVudHMgXFx1MDAyNlxcdTAwMjZcXG4xMDgxMjpcXHRcXHQgICAga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlaGFzX2V2ZW50cyh2Y3B1LCB0cnVlKSlcXG4xMDgxMzpcXHRcXHRcXHQqcmVxX2ltbWVkaWF0ZV9leGl0ID0gdHJ1ZTtcXG4xMDgxNDpcXHRcXG4xMDgxNTpcXHRcXHQvKlxcbjEwODE2OlxcdFxcdCAqIEtWTSBtdXN0IG5ldmVyIHF1ZXVlIGEgbmV3IGV4Y2VwdGlvbiB3aGlsZSBpbmplY3RpbmcgYW4gZXZlbnQ7IEtWTVxcbjEwODE3OlxcdFxcdCAqIGlzIGRvbmUgZW11bGF0aW5nIGFuZCBzaG91bGQgb25seSBwcm9wYWdhdGUgdGhlIHRvLWJlLWluamVjdGVkIGV2ZW50XFxuMTA4MTg6XFx0XFx0ICogdG8gdGhlIFZNQ1MvVk1DQi4gIFF1ZXVlaW5nIGEgbmV3IGV4Y2VwdGlvbiBjYW4gcHV0IHRoZSB2Q1BVIGludG8gYW5cXG4xMDgxOTpcXHRcXHQgKiBpbmZpbml0ZSBsb29wIGFzIEtWTSB3aWxsIGJhaWwgZnJvbSBWTS1FbnRlciB0byBpbmplY3QgdGhlIHBlbmRpbmdcXG4xMDgyMDpcXHRcXHQgKiBleGNlcHRpb24gYW5kIHN0YXJ0IHRoZSBjeWNsZSBhbGwgb3Zlci5cXG4xMDgyMTpcXHRcXHQgKlxcbjEwODIyOlxcdFxcdCAqIEV4ZW1wdCB0cmlwbGUgZmF1bHRzIGFzIHRoZXkgaGF2ZSBzcGVjaWFsIGhhbmRsaW5nIGFuZCB3b24ndCBwdXQgdGhlXFxuMTA4MjM6XFx0XFx0ICogdkNQVSBpbnRvIGFuIGluZmluaXRlIGxvb3AuICBUcmlwbGUgZmF1bHQgY2FuIGJlIHF1ZXVlZCB3aGVuIHJ1bm5pbmdcXG4xMDgyNDpcXHRcXHQgKiBWTVggd2l0aG91dCB1bnJlc3RyaWN0ZWQgZ3Vlc3QsIGFzIHRoYXQgcmVxdWlyZXMgS1ZNIHRvIGVtdWxhdGUgUmVhbFxcbjEwODI1OlxcdFxcdCAqIE1vZGUgZXZlbnRzIChzZWUga3ZtX2luamVjdF9yZWFsbW9kZV9pbnRlcnJ1cHQoKSkuXFxuMTA4MjY6XFx0XFx0ICovXFxuMTA4Mjc6XFx0XFx0V0FSTl9PTl9PTkNFKHZjcHUtXFx1MDAzZWFyY2guZXhjZXB0aW9uLnBlbmRpbmcgfHxcXG4xMDgyODpcXHRcXHRcXHQgICAgIHZjcHUtXFx1MDAzZWFyY2guZXhjZXB0aW9uX3ZtZXhpdC5wZW5kaW5nKTtcXG4xMDgyOTpcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6MDYuMzI3MTI5NDY0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4ODg2NzI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0geDg2IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIGZ1bmN0aW9uJ3MgYmVoYXZpb3Igd2hlbiB0aGUgaW50ZXJydXB0IHJlcXVlc3QgKGBpcnFgKSBpcyBzZXQgdG8gLTEuIEN1cnJlbnRseSwgaXQncyBwcmV2ZW50aW5nIHRoZSB3YXJuaW5nIHdpdGggYFdBUk5fT05fT05DRWAgYW5kIHNpbXBseSBqdW1wcyB0byBgb3V0O2AuIEkgc2VlLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBpdCBieXBhc3NlcyBgZW5hYmxlX2lycV93aW5kb3dgIGFuZCB0aGUgc3Vic2VxdWVudCBjb2RlIHdpdGhpbiB0aGUgZnVuY3Rpb24uIFRoaXMgaXMgd29ydGggYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSB3aXRoIGZ1enppbmcgaW4gbWluZC4gU2luY2UgdGhpcyBpcyBpbiBLVk0geDg2IGFuZCBkZWFscyB3aXRoIGludGVycnVwdCBpbmplY3Rpb24sIGl0IGNvdWxkIGJlIGEgc3BvdCBmb3Igc3VidGxlIHNlY3VyaXR5IGZsYXdzIG9yIGVkZ2UgY2FzZSBmYWlsdXJlcy4gSSBzaG91bGQgY2hlY2sgdGhhdCBgS1ZNYCBjb25maWcgaXMgZGVmaW5pdGVseSBlbmFibGVkLiBUaGUgcHJpbWFyeSBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIHRoaXMgaW5pdGlhbCBhbmFseXNpcyBpcyBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYC4gTGV0J3MgYWxzbyBpbnZlc3RpZ2F0ZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgaW4gdGhlIGFyZWEuIFBlcmhhcHMgYGt2bV9jcHVfZ2V0X2ludGVycnVwdGAgbWlnaHQgb2ZmZXIgcmVsYXRlZCBpbnNpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzUwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6MTAuMTE1OTk4ODE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MjI3NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9jcHVfZ2V0X2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9pcnEuYz0xNTE9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9jcHVfZ2V0X2V4dGludCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMTU1LSAqL1xcbmFyY2gveDg2L2t2bS9pcnEuYzoxNTY6aW50IGt2bV9jcHVfZ2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXFxuYXJjaC94ODYva3ZtL2lycS5jLTE1Ny17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA2MzM9c3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNzk3LVxcdFxcdGlmIChyKSB7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNzk4OlxcdFxcdFxcdGludCBpcnEgPSBrdm1fY3B1X2dldF9pbnRlcnJ1cHQodmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNzk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxNzoxMC4xOTUyMzIzMjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTYzNzc4NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYGt2bV9jcHVfZ2V0X2ludGVycnVwdGA6XG5cbioqRGl2aW5nIGludG8gSW50ZXJydXB0IFJldHJpZXZhbCB3aXRoIGBrdm1fY3B1X2dldF9pbnRlcnJ1cHRgKipcblxuQWxyaWdodCwgc28gdGhlIGZ1bmN0aW9uIG5hbWUsIGBrdm1fY3B1X2dldF9pbnRlcnJ1cHRgLCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggaW50ZXJydXB0IGhhbmRsaW5nIHdpdGhpbiB0aGUgS1ZNIChLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lKSBjb250ZXh0LiBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoaXMgcHJvYmFibHkgaW52b2x2ZXMgcXVlcnlpbmcgdGhlIHN0YXRlIG9mIHBlbmRpbmcgaW50ZXJydXB0cyBmb3IgYSBzcGVjaWZpYyB2aXJ0dWFsIENQVSAodkNQVSkuIEknbSBndWVzc2luZyB0aGUgY29yZSBwdXJwb3NlIGlzIHRvIGRldGVybWluZSBpZiBhIHBhcnRpY3VsYXIgdkNQVSBoYXMgYW4gaW50ZXJydXB0IHdhaXRpbmcgdG8gYmUgZGVsaXZlcmVkLCBsaWtlbHkgZm9yIGVtdWxhdGluZyBoYXJkd2FyZSBiZWhhdmlvciBvciBoYW5kbGluZyB2aXJ0dWFsIGRldmljZSBldmVudHMuXG5cbkkgaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIEl0J3MgbGlrZWx5IGludGVyYWN0aW5nIHdpdGggc29tZSBzb3J0IG9mIHBlci12Q1BVIGludGVycnVwdCBxdWV1ZSBvciBzaGFkb3cgcmVnaXN0ZXIuIFRoZXJlJ3MgcHJvYmFibHkgYSBtdXRleCBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIGluIHBsYXkgdG8gZW5zdXJlIHRocmVhZCBzYWZldHksIGVzcGVjaWFsbHkgc2luY2UgbXVsdGlwbGUgdGhyZWFkcyB3aXRoaW4gdGhlIGhvc3Qga2VybmVsIGNhbiBwb3RlbnRpYWxseSBpbnRlcmFjdCB3aXRoIGEgdkNQVSdzIGludGVycnVwdCBzdGF0ZS4gVGhlIGZ1bmN0aW9uIGhhcyB0byBiZSBhdG9taWMgYW5kIHRocmVhZCBzYWZlLCBiZWNhdXNlIG90aGVyIHZpcnR1YWwgQ1BVcyBvciB0aGUgaG9zdCBrZXJuZWwgY291bGQgYmUgcG90ZW50aWFsbHkgbW9kaWZ5aW5nIG9yIGNoZWNraW5nIHRoYXQgaW50ZXJydXB0IGF0IHRoZSBzYW1lIHRpbWUuXG5cbkkgc3RhcnQgcnVubmluZyB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzLiBXaGF0IHR5cGUgb2YgaW50ZXJydXB0cyBhcmUgd2UgdGFsa2luZyBhYm91dD8gSGFyZHdhcmUgaW50ZXJydXB0cywgc29mdHdhcmUgaW50ZXJydXB0cywgaW50ZXItcHJvY2Vzc29yIGludGVycnVwdHMgKElQSXMpPyBUaGUgZGVzaWduIGhhcyB0byBiZSBnZW5lcmljIGVub3VnaCB0byBoYW5kbGUgYSByYW5nZSBvZiBpbnRlcnJ1cHQgc291cmNlcyByZWxldmFudCB0byB0aGUgZ3Vlc3QncyBleGVjdXRpb24uIEFyZSB3ZSBwb3RlbnRpYWxseSByZXR1cm5pbmcgYSBzcGVjaWZpYyBpbnRlcnJ1cHQgdmVjdG9yL0lELCBvciBpcyBpdCBtb3JlIG9mIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGFuIGludGVycnVwdD9cblxuQWxzbywgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGUgdkNQVSBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLCBvciBpZiB0aGVyZSdzIGFuIGlzc3VlIGFjY2Vzc2luZyB0aGUgaW50ZXJydXB0IHN0YXRlPyBUaGUgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIHJldHVybiBzb21lIHNvcnQgb2YgZXJyb3IgY29kZSwgb3Igc2lnbmFsIGFuIGVycm9yIGNvbmRpdGlvbiwgd2hpY2ggdGhlIGNhbGxlciBuZWVkcyB0byBhcHByb3ByaWF0ZWx5IGhhbmRsZS4gSG93IGRvZXMgaXQgbWFuYWdlIHJhY2UgY29uZGl0aW9ucyBvciBhdm9pZCBkZWFkbG9jayBzaXR1YXRpb25zP1xuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB0b28uIFRoaXMgaXMgcHJvYmFibHkgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGZyZXF1ZW50bHkgZHVyaW5nIHZDUFUgZXhlY3V0aW9uLCBzbyBtaW5pbWl6aW5nIG92ZXJoZWFkIGlzIGNydWNpYWwuIEFyZSB0aGVyZSBhbnkgb3B0aW1pemF0aW9ucyBpbiBwbGFjZSwgc3VjaCBhcyBwcmUtZmV0Y2hpbmcgaW50ZXJydXB0IGRhdGEgb3IgdXNpbmcgYml0bWFza3MgdG8gcXVpY2tseSBjaGVjayBpbnRlcnJ1cHQgc3RhdHVzP1xuXG5VbHRpbWF0ZWx5LCBteSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gc2l0cyBhdCB0aGUgaGVhcnQgb2YgdGhlIHZpcnR1YWwgaW50ZXJydXB0IGRlbGl2ZXJ5IG1lY2hhbmlzbSwgYW5kIEkgbmVlZCB0byBzZWUgaG93IGl0IGZpdHMgd2l0aGluIHRoZSBsYXJnZXIgS1ZNIGFyY2hpdGVjdHVyZSBhbmQgaG93IGl0IGNvbm5lY3RzIHRvIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBlbXVsYXRpb24uIEknbSBrZWVuIHRvIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIHRvIHNlZSBob3cgdGhlc2UgYXNwZWN0cyBhcmUgYWN0dWFsbHkgaGFuZGxlZCBpbiBwcmFjdGljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQwOCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjE3OjE2LjE1OTAxMzEwMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL2lycS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1MDpcXHR9XFxuIDE1MTpcXHRFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2NwdV9nZXRfZXh0aW50KTtcXG4gMTUyOlxcdFxcbiAxNTM6XFx0LypcXG4gMTU0OlxcdCAqIFJlYWQgcGVuZGluZyBpbnRlcnJ1cHQgdmVjdG9yIGFuZCBpbnRhY2suXFxuIDE1NTpcXHQgKi9cXG4gMTU2OlxcdGludCBrdm1fY3B1X2dldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KVxcbiAxNTc6XFx0e1xcbiAxNTg6XFx0XFx0aW50IHZlY3RvciA9IGt2bV9jcHVfZ2V0X2V4dGludCh2KTtcXG4gMTU5OlxcdFxcdGlmICh2ZWN0b3IgIT0gLTEpXFxuIDE2MDpcXHRcXHRcXHRyZXR1cm4gdmVjdG9yO1xcdFxcdFxcdC8qIFBJQyAqL1xcbiAxNjE6XFx0XFxuIDE2MjpcXHRcXHR2ZWN0b3IgPSBrdm1fYXBpY19oYXNfaW50ZXJydXB0KHYpO1xcdC8qIEFQSUMgKi9cXG4gMTYzOlxcdFxcdGlmICh2ZWN0b3IgIT0gLTEpXFxuIDE2NDpcXHRcXHRcXHRrdm1fYXBpY19hY2tfaW50ZXJydXB0KHYsIHZlY3Rvcik7XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdHJldHVybiB2ZWN0b3I7XFxuIDE2NzpcXHR9XFxuIDE2ODpcXHRcXG4gMTY5OlxcdHZvaWQga3ZtX2luamVjdF9wZW5kaW5nX3RpbWVyX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxNzoxNi4xNTkxNTQ2ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4NjU2MjQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBZGRyZXNzaW5nIGEgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9uIGluIEtWTSBJbnRlcnJ1cHQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUgYW5kIGl0IHNlZW1zIGxpa2UgdGhlcmUncyBhIHBvc3NpYmxlIGlzc3VlIHdpdGggaG93IGludGVycnVwdHMgYXJlIGJlaW5nIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgYGt2bV9jcHVfZ2V0X2ludGVycnVwdGAgY2FuIHJldHVybiAtMSwgYW5kIHRoYXQncyBsaW5rZWQgdG8gd2hhdCBga3ZtX2FwaWNfaGFzX2ludGVycnVwdGAgcmVwb3J0cy4gVGhlIC0xIHJldHVybiBlc3NlbnRpYWxseSBpbmRpY2F0ZXMgdGhlcmUncyBubyBpbnRlcnJ1cHQgcGVuZGluZywgd2hpY2ggaXMgZXhwZWN0ZWQgYmVoYXZpb3IgdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMuXG5cblRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtIGxpZXMgaW4gYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24uIFRoZXJlJ3MgYSBzY2VuYXJpbyB3aGVyZSBga3ZtX2NwdV9oYXNfaW5qZWN0YWJsZV9pbnRyYCBtaWdodCBoYXZlIHJlcG9ydGVkIHRoYXQgYW4gaW50ZXJydXB0ICpjb3VsZCogYmUgaW5qZWN0ZWQsIGJ1dCB0aGVuLCBieSB0aGUgdGltZSBga3ZtX2NwdV9nZXRfaW50ZXJydXB0YCBpcyBjYWxsZWQsIHRoZXJlJ3Mgbm8gaW50ZXJydXB0IGFjdHVhbGx5IHJlYWR5LiBUaGlzIGRpc2NyZXBhbmN5IOKAkyB0aGF0IGJvb2xlYW4gaW5kaWNhdGluZyBcImluamVjdGFibGVcIiBhbmQgdGhlbiBhIC0xIGZyb20gYGdldF9pbnRlcnJ1cHRgIOKAkyBzdWdnZXN0cyBlaXRoZXIgYSB0aW1pbmcgaXNzdWUgb3IsIG1vcmUgY29uY2VybmluZ2x5LCBhbiBpbmNvbnNpc3RlbmN5IGluIHRoZSBpbnRlcm5hbCBzdGF0ZS5cblxuVGhlIHBhdGNoIEknbSBleGFtaW5pbmcgYWRkcmVzc2VzIHRoaXMgYnksIGlmIEknbSB1bmRlcnN0YW5kaW5nIGNvcnJlY3RseSwganVtcGluZyB0byB0aGUgYG91dGAgbGFiZWwgaW4gdGhpcyBzcGVjaWZpYyBzY2VuYXJpby4gVGhlIGBvdXRgIGxhYmVsIHByb2JhYmx5IGludm9sdmVzIHNvbWUgc29ydCBvZiBjbGVhbiB1cCwgYW5kIHJldHVybnMgYSB2YWx1ZSBvZiBzb21lIGtpbmQuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gd2hhdCB0aGUgZnVuY3Rpb24gZG9lcyBleGFjdGx5LiBJJ20gYXNzdW1pbmcgaXQgaGFuZGxlcyBpdCBncmFjZWZ1bGx5LCBwcm9iYWJseSByZXR1cm5pbmcgYSAwIG9yIGVxdWl2YWxlbnQgdG8gc2lnbmlmeSBubyBpbnRlcnJ1cHQgd2FzIHByb2Nlc3NlZCwgZWZmZWN0aXZlbHkgc2lkZXN0ZXBwaW5nIHRoZSBpbmNvbnNpc3RlbmN5LiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFwcHJvYWNoIHRvIGVuc3VyZSB0aGUgc3lzdGVtIHJlbWFpbnMgc3RhYmxlIGFuZCBwcmVkaWN0YWJsZSwgZXZlbiBpbiB0aGUgZmFjZSBvZiB0aGVzZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjczLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6MjAuNDQ1NzIwMTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE5MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgyNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4MjU6XFx0XFx0ICogTW9kZSBldmVudHMgKHNlZSBrdm1faW5qZWN0X3JlYWxtb2RlX2ludGVycnVwdCgpKS5cXG4xMDgyNjpcXHRcXHQgKi9cXG4xMDgyNzpcXHRcXHRXQVJOX09OX09OQ0UodmNwdS1cXHUwMDNlYXJjaC5leGNlcHRpb24ucGVuZGluZyB8fFxcbjEwODI4OlxcdFxcdFxcdCAgICAgdmNwdS1cXHUwMDNlYXJjaC5leGNlcHRpb25fdm1leGl0LnBlbmRpbmcpO1xcbjEwODI5OlxcdFxcdHJldHVybiAwO1xcbjEwODMwOlxcdFxcbjEwODMxOlxcdG91dDpcXG4xMDgzMjpcXHRcXHRpZiAociA9PSAtRUJVU1kpIHtcXG4xMDgzMzpcXHRcXHRcXHQqcmVxX2ltbWVkaWF0ZV9leGl0ID0gdHJ1ZTtcXG4xMDgzNDpcXHRcXHRcXHRyID0gMDtcXG4xMDgzNTpcXHRcXHR9XFxuMTA4MzY6XFx0XFx0cmV0dXJuIHI7XFxuMTA4Mzc6XFx0fVxcbjEwODM4OlxcdFxcbjEwODM5OlxcdHN0YXRpYyB2b2lkIHByb2Nlc3Nfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4xMDg0MDpcXHR7XFxuMTA4NDE6XFx0XFx0dW5zaWduZWQgaW50IGxpbWl0O1xcbjEwODQyOlxcdFxcbjEwODQzOlxcdFxcdC8qXFxuMTA4NDQ6XFx0XFx0ICogeDg2IGlzIGxpbWl0ZWQgdG8gb25lIE5NSSBwZW5kaW5nLCBidXQgYmVjYXVzZSBLVk0gY2FuJ3QgcmVhY3QgdG9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6MjAuNDQ2NjQyNTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMTgzOTUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJldHVybiBWYWx1ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJhY2tpbmcgdGhlIHZhcmlhYmxlIGByYC4gSXQgbG9va3MgbGlrZSBgcmAgaXMgaW5pdGlhbGx5IGFzc2lnbmVkIHRoZSB2YWx1ZSBvZiAxIGJlY2F1c2UgYGlmIChyKWAgZXZhbHVhdGVzIHRvIHRydWUuIEJ1dCB3YWl0LCBJIG5lZWQgdG8gYmFjayB1cCBhIHN0ZXAuIEl0IHNlZW1zIHRoYXQgYHJgIGlzIGFjdHVhbGx5IHNldCBieSB0aGUgcmVzdWx0IG9mIGEgZnVuY3Rpb24gY2FsbDogYGt2bV94ODZfY2FsbGAuIFNvLCBkZXBlbmRpbmcgb24gYGNhbl9pbmplY3RgLCBpdCBlaXRoZXIgZ2V0cyB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsIG9yIGlzIHNldCB0byBgLUVCVVNZYC5cblxuTm93LCBpZiB0aGlzIGByYCBpcyBpbmRlZWQgMSwgdGhlbiB0aGUgYGdvdG8gb3V0O2Agc3RhdGVtZW50IHdpbGwgZW5zdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgMS4gSG1tLCBsZXQgbWUgY29uZmlybS4gWWVzLCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBpcyBpbmRlZWQgYHJgLiBTbywgd2hlbiBgcmAgaXMgMSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgMS5cblxuSSBiZXR0ZXIgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyByZXR1cm4gdmFsdWUgYW5kIHdoZXJlIGl0J3MgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjE3OjI0LjI2ODQ4NDUzM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNzUyOTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTEwNTc1PXN0YXRpYyB2b2lkIGt2bV9pbmplY3RfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDYzMi0gKi9cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA2MzM6c3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDYzNC1cXHRcXHRcXHRcXHQgICAgICAgYm9vbCAqcmVxX2ltbWVkaWF0ZV9leGl0KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwODk0PXZvaWQgX19rdm1fdmNwdV91cGRhdGVfYXBpY3Yoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwOTE5LVxcdCAqIHN0aWxsIGFjdGl2ZSB3aGVuIHRoZSBpbnRlcnJ1cHQgZ290IGFjY2VwdGVkLiBNYWtlIHN1cmVcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA5MjA6XFx0ICoga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzKCkgaXMgY2FsbGVkIHRvIGNoZWNrIGZvciB0aGF0LlxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDkyMS1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMTExMj1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjk1LVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMTI5NjpcXHRcXHRyID0ga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzKHZjcHUsIFxcdTAwMjZyZXFfaW1tZWRpYXRlX2V4aXQpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMTI5Ny1cXHRcXHRpZiAociBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6MjQuMzgwMjQzNTc1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNzgwODk4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gRXZlbnQgSW5qZWN0aW9uIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBzbmlwcGV0IGZyb20gYHZjcHVfZW50ZXJfZ3Vlc3RgIGFuZCB0cnlpbmcgdG8gZ3Jhc3AgdGhlIGludGVycnVwdCBpbmplY3Rpb24gZmxvdy4gSXQgc3RhcnRzIHdpdGggYSBjYWxsIHRvIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgLiBUaGUgcmV0dXJuIHZhbHVlLCBgcmAsIGlzIGtleSBoZXJlLiBJZiBgcmAgaXMgbGVzcyB0aGFuIHplcm8sIHRoZXJlJ3MgYW4gZXJyb3IsIGFuZCB3ZSBqdW1wIHRvIGBjYW5jZWxfaW5qZWN0aW9uYC4gQnV0IGlmIGByYCBpcyAxLCB0aGUgY29kZSBzaW1wbHkgY29udGludWVzLiBIbW0sIHdoeT9cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBBIHZhbHVlIG9mIDEgZm9yIGByYCBtdXN0IG1lYW4gdGhhdCBgaW50ZXJydXB0X2FsbG93ZWRgIHJldHVybmVkIDEuIFNvLCBpZiB0aGlzIGNvbmRpdGlvbiBpcyBtZXQsIGFuZCBgcmAgcmVtYWlucyBhdCAxLCB0aGUgY29kZSBwcm9jZWVkcyBhbmQgdGhlbiBmaW5hbGx5IHJldHVybnMgMSBhcyB0aGUgb3ZlcmFsbCBmdW5jdGlvbidzIHZhbHVlLiBJcyB0aGlzIGhvdyBpdCByZWFsbHkgd29ya3M/IEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLlxuXG5MZXQncyB0cmFjZSB3aGF0IGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgICpub3JtYWxseSogcmV0dXJucy4gQXQgdGhlIGVuZCBvZiB0aGF0IGZ1bmN0aW9uLCBpZiBpdCByZWFjaGVzIHRoZSBlbmQgYW5kIG5vIGludGVycnVwdHMgYXJlIGluamVjdGVkLCBpdCByZXR1cm5zIDAuIEhvd2V2ZXIsIGlmIHRoZSBmdW5jdGlvbiBqdW1wcyB0byBgb3V0YCB3aXRoIGByYCBiZWluZyAxLCBpdCAqZGVmaW5pdGVseSogcmV0dXJucyAxLlxuXG5JIHRoaW5rIEkgc2VlIGl0IG5vdy4gVGhlIHZhbHVlIG9mIGByYCBkb2Vzbid0IGNoYW5nZSBhZnRlciBpdHMgaW5pdGlhbCBhc3NpZ25tZW50LCBiYXNlZCBvbiB0aGF0IHRlcm5hcnkuIFNvIGByYCBpcyBvbmx5IHNldCB0byB2YWx1ZXMgZ3JlYXRlciB0aGFuIHplcm8sIG9yIGxlc3MgdGhhbiB6ZXJvLiBMZXQncyBzZWUgaWYgYHZjcHVfZW50ZXJfZ3Vlc3RgIGFjdHVhbGx5IGNhcmVzIGFib3V0IGByYCBiZWluZyBncmVhdGVyIHRoYW4gemVyby4gVGhhdCdzIHRoZSBwYXJ0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRvIGNvbmZpcm0gbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NzksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6MjkuNDU4MzM2MDM3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMTc3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMjk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTI5NTpcXHRcXG4xMTI5NjpcXHRcXHRcXHRyID0ga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzKHZjcHUsIFxcdTAwMjZyZXFfaW1tZWRpYXRlX2V4aXQpO1xcbjExMjk3OlxcdFxcdFxcdGlmIChyIFxcdTAwM2MgMCkge1xcbjExMjk4OlxcdFxcdFxcdFxcdHIgPSAwO1xcbjExMjk5OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjExMzAwOlxcdFxcdFxcdH1cXG4xMTMwMTpcXHRcXHRcXHRpZiAocmVxX2ludF93aW4pXFxuMTEzMDI6XFx0XFx0XFx0XFx0a3ZtX3g4Nl9jYWxsKGVuYWJsZV9pcnFfd2luZG93KSh2Y3B1KTtcXG4xMTMwMzpcXHRcXG4xMTMwNDpcXHRcXHRcXHRpZiAoa3ZtX2xhcGljX2VuYWJsZWQodmNwdSkpIHtcXG4xMTMwNTpcXHRcXHRcXHRcXHRrdm1fbGFwaWNfdXBkYXRlX2NyOF9pbnRlcmNlcHQodmNwdSk7XFxuMTEzMDY6XFx0XFx0XFx0XFx0a3ZtX2xhcGljX3N5bmNfdG9fdmFwaWModmNwdSk7XFxuMTEzMDc6XFx0XFx0XFx0fVxcbjExMzA4OlxcdFxcdH1cXG4xMTMwOTpcXHRcXG4xMTMxMDpcXHRcXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XFxuMTEzMTE6XFx0XFx0aWYgKHVubGlrZWx5KHIpKSB7XFxuMTEzMTI6XFx0XFx0XFx0Z290byBjYW5jZWxfaW5qZWN0aW9uO1xcbjExMzEzOlxcdFxcdH1cXG4xMTMxNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6MjkuNDYxNDU5NzI2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NjQxNDU0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBCdWcgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBLVk0gYnVnIGFuZCBob3cgdG8gYmVzdCBmdXp6IGl0LiBUaGUgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSByZXR1cm4gdmFsdWUgaW4gYHZjcHVfZW50ZXJfZ3Vlc3RgIGlzIGNoYW5nZWQsIGJ1dCBpdCBkb2Vzbid0ICpkaXJlY3RseSogYWZmZWN0IHRoZSBmdW5jdGlvbidzIGJlaGF2aW9yLiBUaGUgcmVhbCBpbXBhY3QgaXMgc2tpcHBpbmcgYGVuYWJsZV9pcnFfd2luZG93YCBhbmQgdGhlIHJlc3Qgb2YgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AuXG5cblNvLCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdCBzbyBmYXI6IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIG9idmlvdXNseS4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIGZvY3VzaW5nIGZ1enppbmcgb24gYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AsIGFzIHRoYXQncyB3aGVyZSB0aGUgY2hhbmdlIGFjdHVhbGx5ICpkb2VzKiBzb21ldGhpbmcuIEFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYEtWTWAuIEl0IHNlZW1zIGxpa2UgYEtWTWAgaXMgYWxsIHRoYXQncyByZXF1aXJlZCBoZXJlOyBubyBvdGhlciBjb25maWcgaXMgbmVlZGVkLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpczogYXJlIHRoZXJlICpvdGhlciogZnVuY3Rpb25zIHdlIHNob3VsZCB0YXJnZXQ/IEkgY29uc2lkZXJlZCBga3ZtX2NwdV9nZXRfaW50ZXJydXB0YCwgYnV0IHRoZW4gSSByZWFsaXplZCBgdmNwdV9lbnRlcl9ndWVzdGAgYW5kIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIGFyZSBib3RoIGhvdC1wYXRoIGZ1bmN0aW9ucywgdGhhdCBpcywgdGhleSdyZSBjYWxsZWQgZnJlcXVlbnRseS4gSWRlYWxseSwgdGhlIGZ1enppbmcgc2hvdWxkbid0IGJlIHNrZXdlZCBieSBwaWNraW5nIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhlIHByb21wdCBkb2VzIHNheSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy5cblxuSG93ZXZlciwgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AgKmlzKiB0aGUgb25lIHRoYXQgd2FzIG1vZGlmaWVkLiBJdCdzIGNhbGxlZCBvbiBldmVyeSBWTSBlbnRyeSwgbWFraW5nIGl0IGEgaG90LXBhdGggZnVuY3Rpb24sIGJ1dCBpdCdzICpzcGVjaWZpYyogdG8gdGhpcyBjaGFuZ2UuIEknbSB0b3JuISBJcyBpdCB0b28gZ2VuZXJpYyBvciBub3Q/IFVsdGltYXRlbHksIEkgYmVsaWV2ZSBpdCBpcyBva2F5IHRvIGxpc3QgaXQgaW4gYEZvY3VzU3ltYm9sc2AuXG5cblRoZSBidWcgaXRzZWxmIHJlbGF0ZXMgdG8gYW4gYGlycSA9PSAtMWAgc2l0dWF0aW9uIHdoZW4gYGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cmAgaXMgdHJ1ZSwgd2hpY2ggYXJpc2VzIHdoZW4gdGhlcmUncyBhIHBlbmRpbmcgaW50ZXJydXB0IHRoYXQgZGlzYXBwZWFycyBvciBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbi4gU3RpbGwsIHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9uIHJlbWFpbnMgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AuXG5cblNvIEkndmUgZGVjaWRlZCB0byBsaXN0IGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIGluIGBGb2N1c1N5bWJvbHNgIGFzIGl0J3MgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb24gaW4gdGhpcyBhbmFseXNpcywgZXZlbiB0aG91Z2ggaXQncyBhIGhvdCBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODIzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6MzguMDI1NjA5OTY1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTE2NjYxNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxNzozOC44MTcyODYzMDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwNDE3NzcyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIEludGVycnVwdCBJbmplY3Rpb24gUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgd2UncmUgZGVhbGluZyB3aXRoIGEgS1ZNIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGluZyB0byB0aGUgYEtWTWAgbW9kdWxlLCBhbmQgdGhhdCdzIGdvaW5nIHRvIGJlIGtleSBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNldHVwLlxuXG5UaGUgaGVhcnQgb2YgdGhlIGNoYW5nZSBsaWVzIHdpdGhpbiBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYC4gSXQgc2VlbXMgdGhhdCB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHNjZW5hcmlvIHdoZXJlIGBrdm1fY3B1X2dldF9pbnRlcnJ1cHRgIGlzIHJldHVybmluZyAtMSwgaW5kaWNhdGluZyBubyBwZW5kaW5nIGludGVycnVwdCwgZXZlbiB3aGVuIGBrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHJgIHNheXMgdGhlcmUgKnNob3VsZCogYmUgb25lLiBUaGF0J3MgYW4gaW50ZXJlc3RpbmcgZGlzY3JlcGFuY3kuIFRoZSBjb2RlJ3Mgb3JpZ2luYWwgcmVzcG9uc2Ugd2FzIHRvIHVzZSBgV0FSTl9PTl9PTkNFYCwgYnV0IHRoYXQncyBiZWluZyByZXBsYWNlZCB3aXRoIGEgYGdvdG8gb3V0O2AsIGVmZmVjdGl2ZWx5IHNraXBwaW5nIHRoZSBzdWJzZXF1ZW50IGludGVycnVwdCBpbmplY3Rpb24gc3RlcHMsIHNwZWNpZmljYWxseSB0aGUgYGVuYWJsZV9pcnFfd2luZG93YCBwYXJ0LlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBtb2RpZmljYXRpb24gdG8gS1ZNJ3MgaW50ZXJydXB0IGluamVjdGlvbiBwYXRoLiBBICpmdW5kYW1lbnRhbCogY2hhbmdlIGxpa2UgdGhpcyB3YXJyYW50cyBzb21lIHNlcmlvdXMgc2NydXRpbnkuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgaW50ZXJydXB0cyBhcmUgaGFuZGxlZC4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgcmVncmVzc2lvbnMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzIHdpdGggdGhpcyBraW5kIG9mIGludGVycnVwdCBpbnRlcmFjdGlvbiwgSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gc2V0IHVwIHNvbWUgZnV6emluZyB0byByZWFsbHkgc3RyZXNzLXRlc3QgdGhlIG5ldyBiZWhhdmlvci4gV2UnbGwgbmVlZCB0byBzZXQgdXAgdGhvc2UgdGVzdCByZXN1bHRzIGFuZCByZXZpZXcgdGhlbSBjbG9zZWx5LiBMZXQncyBjYWxsIGl0IHNldC1yZXN1bHRzIGFuZCBnZXQgc3RhcnRlZCBvbiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIwMywiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6NDMuODIxNDY4NDY1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMDMzNDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYGt2bV9jcHVfZ2V0X2ludGVycnVwdGAgcmV0dXJucyAtMSAobm8gcGVuZGluZyBpbnRlcnJ1cHQpIGRlc3BpdGUgYGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cmAgcmV0dXJuaW5nIHRydWUuIEl0IHJlcGxhY2VzIGEgYFdBUk5fT05fT05DRWAgd2l0aCBhIGBnb3RvIG91dDtgLCBza2lwcGluZyB0aGUgcmVzdCBvZiB0aGUgZXZlbnQgaW5qZWN0aW9uIGxvZ2ljIChsaWtlIGBlbmFibGVfaXJxX3dpbmRvd2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNJ3MgaW50ZXJydXB0IGluamVjdGlvbiBwYXRoIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGBrdm1fY3B1X2dldF9pbnRlcnJ1cHRgIHJldHVybnMgLTEgKG5vIHBlbmRpbmcgaW50ZXJydXB0KSBkZXNwaXRlIGBrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHJgIHJldHVybmluZyB0cnVlLiBJdCByZXBsYWNlcyBhIGBXQVJOX09OX09OQ0VgIHdpdGggYSBgZ290byBvdXQ7YCwgc2tpcHBpbmcgdGhlIHJlc3Qgb2YgdGhlIGV2ZW50IGluamVjdGlvbiBsb2dpYyAobGlrZSBgZW5hYmxlX2lycV93aW5kb3dgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSdzIGludGVycnVwdCBpbmplY3Rpb24gcGF0aCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowtq9cs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-12 12:54:46 +0000 UTC FinishedAt: 2026-07-12 13:17:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "8964811b-89a7-4adf-8d0a-c8256dc048e8" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_check_and_inject_events" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYGt2bV9jcHVfZ2V0X2ludGVycnVwdGAgcmV0dXJucyAtMSAobm8gcGVuZGluZyBpbnRlcnJ1cHQpIGRlc3BpdGUgYGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cmAgcmV0dXJuaW5nIHRydWUuIEl0IHJlcGxhY2VzIGEgYFdBUk5fT05fT05DRWAgd2l0aCBhIGBnb3RvIG91dDtgLCBza2lwcGluZyB0aGUgcmVzdCBvZiB0aGUgZXZlbnQgaW5qZWN0aW9uIGxvZ2ljIChsaWtlIGBlbmFibGVfaXJxX3dpbmRvd2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNJiMzOTtzIGludGVycnVwdCBpbmplY3Rpb24gcGF0aCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE4YTE4NTUzZjAxZTg4MzE2ZmU1ZjVjMjQ0NzJhNmE5NTk0NDMzOWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAxMzoxNjo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IGFmY2FjMTA0Mjk0N2E1Li4zNmJmNDc5YTExNjQ5OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtMTA3OTcsMTEgJiM0MzsxMDc5NywxMSBAQCBzdGF0aWMgaW50IGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdGlmIChyKSB7XG4gXHRcdFx0aW50IGlycSA9IGt2bV9jcHVfZ2V0X2ludGVycnVwdCh2Y3B1KTtcbiBcbi1cdFx0XHRpZiAoIVdBUk5fT05fT05DRShpcnEgPT0gLTEpKSB7XG4tXHRcdFx0XHRrdm1fcXVldWVfaW50ZXJydXB0KHZjcHUsIGlycSwgZmFsc2UpO1xuLVx0XHRcdFx0a3ZtX3g4Nl9jYWxsKGluamVjdF9pcnEpKHZjcHUsIGZhbHNlKTtcbi1cdFx0XHRcdFdBUk5fT04oa3ZtX3g4Nl9jYWxsKGludGVycnVwdF9hbGxvd2VkKSh2Y3B1LCB0cnVlKSBcdTAwM2MgMCk7XG4tXHRcdFx0fVxuJiM0MztcdFx0XHRpZiAoaXJxID09IC0xKVxuJiM0MztcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRrdm1fcXVldWVfaW50ZXJydXB0KHZjcHUsIGlycSwgZmFsc2UpO1xuJiM0MztcdFx0XHRrdm1feDg2X2NhbGwoaW5qZWN0X2lycSkodmNwdSwgZmFsc2UpO1xuJiM0MztcdFx0XHRXQVJOX09OKGt2bV94ODZfY2FsbChpbnRlcnJ1cHRfYWxsb3dlZCkodmNwdSwgdHJ1ZSkgXHUwMDNjIDApO1xuIFx0XHR9XG4gXHRcdGlmIChrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHIodmNwdSkpXG4gXHRcdFx0a3ZtX3g4Nl9jYWxsKGVuYWJsZV9pcnFfd2luZG93KSh2Y3B1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGBrdm1fY3B1X2dldF9pbnRlcnJ1cHRgIHJldHVybnMgLTEgKG5vIHBlbmRpbmcgaW50ZXJydXB0KSBkZXNwaXRlIGBrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHJgIHJldHVybmluZyB0cnVlLiBJdCByZXBsYWNlcyBhIGBXQVJOX09OX09OQ0VgIHdpdGggYSBgZ290byBvdXQ7YCwgc2tpcHBpbmcgdGhlIHJlc3Qgb2YgdGhlIGV2ZW50IGluamVjdGlvbiBsb2dpYyAobGlrZSBgZW5hYmxlX2lycV93aW5kb3dgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSYjMzk7cyBpbnRlcnJ1cHQgaW5qZWN0aW9uIHBhdGggYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE4YTE4NTUzZjAxZTg4MzE2ZmU1ZjVjMjQ0NzJhNmE5NTk0NDMzOWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCAxMiAxMzoxNjo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCBhZmNhYzEwNDI5NDdhNS4uMzZiZjQ3OWExMTY0OTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTEwNzk3LDExICYjNDM7MTA3OTcsMTEgQEAgc3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQlpZiAocikgewogCQkJaW50IGlycSA9IGt2bV9jcHVfZ2V0X2ludGVycnVwdCh2Y3B1KTsKIAotCQkJaWYgKCFXQVJOX09OX09OQ0UoaXJxID09IC0xKSkgewotCQkJCWt2bV9xdWV1ZV9pbnRlcnJ1cHQodmNwdSwgaXJxLCBmYWxzZSk7Ci0JCQkJa3ZtX3g4Nl9jYWxsKGluamVjdF9pcnEpKHZjcHUsIGZhbHNlKTsKLQkJCQlXQVJOX09OKGt2bV94ODZfY2FsbChpbnRlcnJ1cHRfYWxsb3dlZCkodmNwdSwgdHJ1ZSkgJmx0OyAwKTsKLQkJCX0KJiM0MzsJCQlpZiAoaXJxID09IC0xKQomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsJCQlrdm1fcXVldWVfaW50ZXJydXB0KHZjcHUsIGlycSwgZmFsc2UpOwomIzQzOwkJCWt2bV94ODZfY2FsbChpbmplY3RfaXJxKSh2Y3B1LCBmYWxzZSk7CiYjNDM7CQkJV0FSTl9PTihrdm1feDg2X2NhbGwoaW50ZXJydXB0X2FsbG93ZWQpKHZjcHUsIHRydWUpICZsdDsgMCk7CiAJCX0KIAkJaWYgKGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cih2Y3B1KSkKIAkJCWt2bV94ODZfY2FsbChlbmFibGVfaXJxX3dpbmRvdykodmNwdSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIEludGVycnVwdCBJbmplY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgS1ZNIHBhdGNoLCBhbmQgaXQmIzM5O3MgbW9kaWZ5aW5nIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGlzOiB0aGV5JiMzOTt2ZSByZXBsYWNlZCBhIGBXQVJOX09OX09OQ0UoaXJxID09IC0xKWAgd2l0aCBhIGRpcmVjdCBgaWYgKGlycSA9PSAtMSkgZ290byBvdXQ7YC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2U7IGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gYmVjYXVzZSBpdCBhbHRlcnMgdGhlIGNvbnRyb2wgZmxvdy4KCkxldCBtZSBicmVhayBkb3duIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSBsb29rZWQgbGlrZSB0aGlzOiBpZiBgaXJxID09IC0xYCwgdGhlIGBpZmAgYmxvY2sgd291bGQgYmUgc2tpcHBlZCBhbmQgdGhlIGV4ZWN1dGlvbiB3b3VsZCBjb250aW51ZSBhcyBub3JtYWw6CmBgYGMKCQkJaWYgKCFXQVJOX09OX09OQ0UoaXJxID09IC0xKSkgewoJCQkJa3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCBpcnEsIGZhbHNlKTsKCQkJCWt2bV94ODZfY2FsbChpbmplY3RfaXJxKSh2Y3B1LCBmYWxzZSk7CgkJCQlXQVJOX09OKGt2bV94ODZfY2FsbChpbnRlcnJ1cHRfYWxsb3dlZCkodmNwdSwgdHJ1ZSkgJmx0OyAwKTsKCQkJfQpgYGAKSWYgYGlycSA9PSAtMWAgdGhlIGZvbGxvd2luZyBjb2RlIHdvdWxkIHN0aWxsIGJlIGV4ZWN1dGVkOgpgYGBjCgkJaWYgKGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cih2Y3B1KSkKCQkJa3ZtX3g4Nl9jYWxsKGVuYWJsZV9pcnFfd2luZG93KSh2Y3B1KTsKYGBgCkJ1dCBub3csIHdpdGggdGhlIHBhdGNoLCB0aGUgY29kZSBiZWNvbWVzOgpgYGBjCgkJCWlmIChpcnEgPT0gLTEpCgkJCQlnb3RvIG91dDsKCQkJa3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCBpcnEsIGZhbHNlKTsKCQkJa3ZtX3g4Nl9jYWxsKGluamVjdF9pcnEpKHZjcHUsIGZhbHNlKTsKCQkJV0FSTl9PTihrdm1feDg2X2NhbGwoaW50ZXJydXB0X2FsbG93ZWQpKHZjcHUsIHRydWUpICZsdDsgMCk7CmBgYAoKTm93LCBpZiBgaXJxID09IC0xYCwgaXQgaW1tZWRpYXRlbHkganVtcHMgdG8gYG91dGAuIFRoaXMgbWVhbnMgaXQgKnNraXBzKiB0aGUgYGt2bV9xdWV1ZV9pbnRlcnJ1cHRgLCBga3ZtX3g4Nl9jYWxsKGluamVjdF9pcnEpYCwgYFdBUk5fT05gIGNhbGxzLCBhbmQgY3J1Y2lhbGx5LCBhbnkgY29kZSAqYWZ0ZXIqIHRoYXQsIGluY2x1ZGluZyB0aGUgYGVuYWJsZV9pcnFfd2luZG93YCBjaGVjaywgd2hhdGV2ZXIgdGhhdCBkb2VzLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGF0JiMzOTtzIHRoZSBwdXJwb3NlIG9mIGBlbmFibGVfaXJxX3dpbmRvd2A/IFdoeSBpcyBpdCBza2lwcGVkIG5vdyBpZiBgaXJxID09IC0xYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgY291bGQgYmUgYSBzaW1wbGUgb3B0aW1pemF0aW9uLCBidXQgaXQgY291bGQgYWxzbyBiZSBoaWRpbmcgYSBtb3JlIHN1YnRsZSBidWcgb3IgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Uvc2VjdXJpdHkgdHJhZGUtb2ZmLiBMZXQgbWUgY2hlY2sgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz0xMDU3NT1zdGF0aWMgdm9pZCBrdm1faW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNjMyLSAqL1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNjMzOnN0YXRpYyBpbnQga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDYzNC1cdFx0XHRcdCAgICAgICBib29sICpyZXFfaW1tZWRpYXRlX2V4aXQpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwODk0PXZvaWQgX19rdm1fdmNwdV91cGRhdGVfYXBpY3Yoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDkxOS1cdCAqIHN0aWxsIGFjdGl2ZSB3aGVuIHRoZSBpbnRlcnJ1cHQgZ290IGFjY2VwdGVkLiBNYWtlIHN1cmVcbmFyY2gveDg2L2t2bS94ODYuYzoxMDkyMDpcdCAqIGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cygpIGlzIGNhbGxlZCB0byBjaGVjayBmb3IgdGhhdC5cbmFyY2gveDg2L2t2bS94ODYuYy0xMDkyMS1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMTExMj1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTI5NS1cbmFyY2gveDg2L2t2bS94ODYuYzoxMTI5NjpcdFx0ciA9IGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyh2Y3B1LCBcdTAwMjZyZXFfaW1tZWRpYXRlX2V4aXQpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjk3LVx0XHRpZiAociBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIC0gQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgSSYjMzk7bSBoZXJlLCBJIHNlZSB0aGUgY2FsbCB0byBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYC4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24gaW4gdGhlIEtWTSBpbmZyYXN0cnVjdHVyZSwgYW5kIEkmIzM5O20ga2VlbiB0byBleGFtaW5lIHRoZSByZXN0IG9mIGl0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBldmVudHMgYXJlIGhhbmRsZWQgYW5kIGluamVjdGVkIGludG8gdGhlIHZpcnR1YWwgbWFjaGluZSBmcm9tIHRoaXMgcG9pbnQuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIHZpdGFsIGZvciBtYW5hZ2luZyB0aGluZ3MgbGlrZSBpbnRlcnJ1cHRzLCBleGNlcHRpb25zLCBhbmQgb3RoZXIgc2lnbmFscyB0aGF0IG5lZWQgdG8gcmVhY2ggdGhlIGd1ZXN0LiBVbmRlcnN0YW5kaW5nIHRoaXMgY29tcGxldGUgcHJvY2VzcyBpcyBlc3NlbnRpYWwuIExldCYjMzk7cyBzZWUgd2hhdCBtb3JlIGl0IGVudGFpbHMuLi4gbGV0JiMzOTtzIHNlZSB0aGUgZmxvdywgdGhlIGNvbmRpdGlvbnMsIGFuZCB0aGUgYWN0dWFsIGluamVjdGlvbiBtZWNoYW5pc21zLiBLbm93aW5nIHRoZSBkZXRhaWxzIGhlcmUgbWVhbnMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIHN5c3RlbSB0aGF0IHJ1bnMgY29ycmVjdGx5IGFuZCBvbmUgdGhhdCBkb2VzbiYjMzk7dC4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzgwOlx0XHRcdFx0Z290byBvdXQ7XG4xMDc4MTpcdFx0XHRpZiAocikge1xuMTA3ODI6XHRcdFx0XHQtLXZjcHUtXHUwMDNlYXJjaC5ubWlfcGVuZGluZztcbjEwNzgzOlx0XHRcdFx0dmNwdS1cdTAwM2VhcmNoLm5taV9pbmplY3RlZCA9IHRydWU7XG4xMDc4NDpcdFx0XHRcdGt2bV94ODZfY2FsbChpbmplY3Rfbm1pKSh2Y3B1KTtcbjEwNzg1Olx0XHRcdFx0Y2FuX2luamVjdCA9IGZhbHNlO1xuMTA3ODY6XHRcdFx0XHRXQVJOX09OKGt2bV94ODZfY2FsbChubWlfYWxsb3dlZCkodmNwdSwgdHJ1ZSkgXHUwMDNjIDApO1xuMTA3ODc6XHRcdFx0fVxuMTA3ODg6XHRcdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5ubWlfcGVuZGluZylcbjEwNzg5Olx0XHRcdFx0a3ZtX3g4Nl9jYWxsKGVuYWJsZV9ubWlfd2luZG93KSh2Y3B1KTtcbjEwNzkwOlx0XHR9XG4xMDc5MTpcdFxuMTA3OTI6XHRcdGlmIChrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHIodmNwdSkpIHtcbjEwNzkzOlx0XHRcdHIgPSBjYW5faW5qZWN0ID8ga3ZtX3g4Nl9jYWxsKGludGVycnVwdF9hbGxvd2VkKSh2Y3B1LCB0cnVlKSA6XG4xMDc5NDpcdFx0XHRcdFx0IC1FQlVTWTtcbjEwNzk1Olx0XHRcdGlmIChyIFx1MDAzYyAwKVxuMTA3OTY6XHRcdFx0XHRnb3RvIG91dDtcbjEwNzk3Olx0XHRcdGlmIChyKSB7XG4xMDc5ODpcdFx0XHRcdGludCBpcnEgPSBrdm1fY3B1X2dldF9pbnRlcnJ1cHQodmNwdSk7XG4xMDc5OTpcdFxuMTA4MDA6XHRcdFx0XHRpZiAoaXJxID09IC0xKVxuMTA4MDE6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMTA4MDI6XHRcdFx0XHRrdm1fcXVldWVfaW50ZXJydXB0KHZjcHUsIGlycSwgZmFsc2UpO1xuMTA4MDM6XHRcdFx0XHRrdm1feDg2X2NhbGwoaW5qZWN0X2lycSkodmNwdSwgZmFsc2UpO1xuMTA4MDQ6XHRcdFx0XHRXQVJOX09OKGt2bV94ODZfY2FsbChpbnRlcnJ1cHRfYWxsb3dlZCkodmNwdSwgdHJ1ZSkgXHUwMDNjIDApO1xuMTA4MDU6XHRcdFx0fVxuMTA4MDY6XHRcdFx0aWYgKGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cih2Y3B1KSlcbjEwODA3Olx0XHRcdFx0a3ZtX3g4Nl9jYWxsKGVuYWJsZV9pcnFfd2luZG93KSh2Y3B1KTtcbjEwODA4Olx0XHR9XG4xMDgwOTpcdFxuMTA4MTA6XHRcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNlxuMTA4MTE6XHRcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWhhc19ldmVudHMgXHUwMDI2XHUwMDI2XG4xMDgxMjpcdFx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlaGFzX2V2ZW50cyh2Y3B1LCB0cnVlKSlcbjEwODEzOlx0XHRcdCpyZXFfaW1tZWRpYXRlX2V4aXQgPSB0cnVlO1xuMTA4MTQ6XHRcbjEwODE1Olx0XHQvKlxuMTA4MTY6XHRcdCAqIEtWTSBtdXN0IG5ldmVyIHF1ZXVlIGEgbmV3IGV4Y2VwdGlvbiB3aGlsZSBpbmplY3RpbmcgYW4gZXZlbnQ7IEtWTVxuMTA4MTc6XHRcdCAqIGlzIGRvbmUgZW11bGF0aW5nIGFuZCBzaG91bGQgb25seSBwcm9wYWdhdGUgdGhlIHRvLWJlLWluamVjdGVkIGV2ZW50XG4xMDgxODpcdFx0ICogdG8gdGhlIFZNQ1MvVk1DQi4gIFF1ZXVlaW5nIGEgbmV3IGV4Y2VwdGlvbiBjYW4gcHV0IHRoZSB2Q1BVIGludG8gYW5cbjEwODE5Olx0XHQgKiBpbmZpbml0ZSBsb29wIGFzIEtWTSB3aWxsIGJhaWwgZnJvbSBWTS1FbnRlciB0byBpbmplY3QgdGhlIHBlbmRpbmdcbjEwODIwOlx0XHQgKiBleGNlcHRpb24gYW5kIHN0YXJ0IHRoZSBjeWNsZSBhbGwgb3Zlci5cbjEwODIxOlx0XHQgKlxuMTA4MjI6XHRcdCAqIEV4ZW1wdCB0cmlwbGUgZmF1bHRzIGFzIHRoZXkgaGF2ZSBzcGVjaWFsIGhhbmRsaW5nIGFuZCB3b24mIzM5O3QgcHV0IHRoZVxuMTA4MjM6XHRcdCAqIHZDUFUgaW50byBhbiBpbmZpbml0ZSBsb29wLiAgVHJpcGxlIGZhdWx0IGNhbiBiZSBxdWV1ZWQgd2hlbiBydW5uaW5nXG4xMDgyNDpcdFx0ICogVk1YIHdpdGhvdXQgdW5yZXN0cmljdGVkIGd1ZXN0LCBhcyB0aGF0IHJlcXVpcmVzIEtWTSB0byBlbXVsYXRlIFJlYWxcbjEwODI1Olx0XHQgKiBNb2RlIGV2ZW50cyAoc2VlIGt2bV9pbmplY3RfcmVhbG1vZGVfaW50ZXJydXB0KCkpLlxuMTA4MjY6XHRcdCAqL1xuMTA4Mjc6XHRcdFdBUk5fT05fT05DRSh2Y3B1LVx1MDAzZWFyY2guZXhjZXB0aW9uLnBlbmRpbmcgfHxcbjEwODI4Olx0XHRcdCAgICAgdmNwdS1cdTAwM2VhcmNoLmV4Y2VwdGlvbl92bWV4aXQucGVuZGluZyk7XG4xMDgyOTpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLVk0geDg2IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvciB3aGVuIHRoZSBpbnRlcnJ1cHQgcmVxdWVzdCAoYGlycWApIGlzIHNldCB0byAtMS4gQ3VycmVudGx5LCBpdCYjMzk7cyBwcmV2ZW50aW5nIHRoZSB3YXJuaW5nIHdpdGggYFdBUk5fT05fT05DRWAgYW5kIHNpbXBseSBqdW1wcyB0byBgb3V0O2AuIEkgc2VlLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBpdCBieXBhc3NlcyBgZW5hYmxlX2lycV93aW5kb3dgIGFuZCB0aGUgc3Vic2VxdWVudCBjb2RlIHdpdGhpbiB0aGUgZnVuY3Rpb24uIFRoaXMgaXMgd29ydGggYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSB3aXRoIGZ1enppbmcgaW4gbWluZC4gU2luY2UgdGhpcyBpcyBpbiBLVk0geDg2IGFuZCBkZWFscyB3aXRoIGludGVycnVwdCBpbmplY3Rpb24sIGl0IGNvdWxkIGJlIGEgc3BvdCBmb3Igc3VidGxlIHNlY3VyaXR5IGZsYXdzIG9yIGVkZ2UgY2FzZSBmYWlsdXJlcy4gSSBzaG91bGQgY2hlY2sgdGhhdCBgS1ZNYCBjb25maWcgaXMgZGVmaW5pdGVseSBlbmFibGVkLiBUaGUgcHJpbWFyeSBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIHRoaXMgaW5pdGlhbCBhbmFseXNpcyBpcyBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYC4gTGV0JiMzOTtzIGFsc28gaW52ZXN0aWdhdGUgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIGluIHRoZSBhcmVhLiBQZXJoYXBzIGBrdm1fY3B1X2dldF9pbnRlcnJ1cHRgIG1pZ2h0IG9mZmVyIHJlbGF0ZWQgaW5zaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fY3B1X2dldF9pbnRlcnJ1cHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9pcnEuYz0xNTE9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9jcHVfZ2V0X2V4dGludCk7XG4tLVxuYXJjaC94ODYva3ZtL2lycS5jLTE1NS0gKi9cbmFyY2gveDg2L2t2bS9pcnEuYzoxNTY6aW50IGt2bV9jcHVfZ2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMTU3LXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA2MzM9c3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDc5Ny1cdFx0aWYgKHIpIHtcbmFyY2gveDg2L2t2bS94ODYuYzoxMDc5ODpcdFx0XHRpbnQgaXJxID0ga3ZtX2NwdV9nZXRfaW50ZXJydXB0KHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNzk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MDgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYGt2bV9jcHVfZ2V0X2ludGVycnVwdGA6CgoqKkRpdmluZyBpbnRvIEludGVycnVwdCBSZXRyaWV2YWwgd2l0aCBga3ZtX2NwdV9nZXRfaW50ZXJydXB0YCoqCgpBbHJpZ2h0LCBzbyB0aGUgZnVuY3Rpb24gbmFtZSwgYGt2bV9jcHVfZ2V0X2ludGVycnVwdGAsIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaW50ZXJydXB0IGhhbmRsaW5nIHdpdGhpbiB0aGUgS1ZNIChLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lKSBjb250ZXh0LiBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoaXMgcHJvYmFibHkgaW52b2x2ZXMgcXVlcnlpbmcgdGhlIHN0YXRlIG9mIHBlbmRpbmcgaW50ZXJydXB0cyBmb3IgYSBzcGVjaWZpYyB2aXJ0dWFsIENQVSAodkNQVSkuIEkmIzM5O20gZ3Vlc3NpbmcgdGhlIGNvcmUgcHVycG9zZSBpcyB0byBkZXRlcm1pbmUgaWYgYSBwYXJ0aWN1bGFyIHZDUFUgaGFzIGFuIGludGVycnVwdCB3YWl0aW5nIHRvIGJlIGRlbGl2ZXJlZCwgbGlrZWx5IGZvciBlbXVsYXRpbmcgaGFyZHdhcmUgYmVoYXZpb3Igb3IgaGFuZGxpbmcgdmlydHVhbCBkZXZpY2UgZXZlbnRzLgoKSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gSXQmIzM5O3MgbGlrZWx5IGludGVyYWN0aW5nIHdpdGggc29tZSBzb3J0IG9mIHBlci12Q1BVIGludGVycnVwdCBxdWV1ZSBvciBzaGFkb3cgcmVnaXN0ZXIuIFRoZXJlJiMzOTtzIHByb2JhYmx5IGEgbXV0ZXggb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSBpbiBwbGF5IHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5LCBlc3BlY2lhbGx5IHNpbmNlIG11bHRpcGxlIHRocmVhZHMgd2l0aGluIHRoZSBob3N0IGtlcm5lbCBjYW4gcG90ZW50aWFsbHkgaW50ZXJhY3Qgd2l0aCBhIHZDUFUmIzM5O3MgaW50ZXJydXB0IHN0YXRlLiBUaGUgZnVuY3Rpb24gaGFzIHRvIGJlIGF0b21pYyBhbmQgdGhyZWFkIHNhZmUsIGJlY2F1c2Ugb3RoZXIgdmlydHVhbCBDUFVzIG9yIHRoZSBob3N0IGtlcm5lbCBjb3VsZCBiZSBwb3RlbnRpYWxseSBtb2RpZnlpbmcgb3IgY2hlY2tpbmcgdGhhdCBpbnRlcnJ1cHQgYXQgdGhlIHNhbWUgdGltZS4KCkkgc3RhcnQgcnVubmluZyB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzLiBXaGF0IHR5cGUgb2YgaW50ZXJydXB0cyBhcmUgd2UgdGFsa2luZyBhYm91dD8gSGFyZHdhcmUgaW50ZXJydXB0cywgc29mdHdhcmUgaW50ZXJydXB0cywgaW50ZXItcHJvY2Vzc29yIGludGVycnVwdHMgKElQSXMpPyBUaGUgZGVzaWduIGhhcyB0byBiZSBnZW5lcmljIGVub3VnaCB0byBoYW5kbGUgYSByYW5nZSBvZiBpbnRlcnJ1cHQgc291cmNlcyByZWxldmFudCB0byB0aGUgZ3Vlc3QmIzM5O3MgZXhlY3V0aW9uLiBBcmUgd2UgcG90ZW50aWFsbHkgcmV0dXJuaW5nIGEgc3BlY2lmaWMgaW50ZXJydXB0IHZlY3Rvci9JRCwgb3IgaXMgaXQgbW9yZSBvZiBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBhbiBpbnRlcnJ1cHQ/CgpBbHNvLCBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSB2Q1BVIGlzIGluIGFuIGludmFsaWQgc3RhdGUsIG9yIGlmIHRoZXJlJiMzOTtzIGFuIGlzc3VlIGFjY2Vzc2luZyB0aGUgaW50ZXJydXB0IHN0YXRlPyBUaGUgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIHJldHVybiBzb21lIHNvcnQgb2YgZXJyb3IgY29kZSwgb3Igc2lnbmFsIGFuIGVycm9yIGNvbmRpdGlvbiwgd2hpY2ggdGhlIGNhbGxlciBuZWVkcyB0byBhcHByb3ByaWF0ZWx5IGhhbmRsZS4gSG93IGRvZXMgaXQgbWFuYWdlIHJhY2UgY29uZGl0aW9ucyBvciBhdm9pZCBkZWFkbG9jayBzaXR1YXRpb25zPwoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHRvby4gVGhpcyBpcyBwcm9iYWJseSBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgZnJlcXVlbnRseSBkdXJpbmcgdkNQVSBleGVjdXRpb24sIHNvIG1pbmltaXppbmcgb3ZlcmhlYWQgaXMgY3J1Y2lhbC4gQXJlIHRoZXJlIGFueSBvcHRpbWl6YXRpb25zIGluIHBsYWNlLCBzdWNoIGFzIHByZS1mZXRjaGluZyBpbnRlcnJ1cHQgZGF0YSBvciB1c2luZyBiaXRtYXNrcyB0byBxdWlja2x5IGNoZWNrIGludGVycnVwdCBzdGF0dXM/CgpVbHRpbWF0ZWx5LCBteSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gc2l0cyBhdCB0aGUgaGVhcnQgb2YgdGhlIHZpcnR1YWwgaW50ZXJydXB0IGRlbGl2ZXJ5IG1lY2hhbmlzbSwgYW5kIEkgbmVlZCB0byBzZWUgaG93IGl0IGZpdHMgd2l0aGluIHRoZSBsYXJnZXIgS1ZNIGFyY2hpdGVjdHVyZSBhbmQgaG93IGl0IGNvbm5lY3RzIHRvIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBlbXVsYXRpb24uIEkmIzM5O20ga2VlbiB0byBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBzZWUgaG93IHRoZXNlIGFzcGVjdHMgYXJlIGFjdHVhbGx5IGhhbmRsZWQgaW4gcHJhY3RpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lycS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHR9XG4gMTUxOlx0RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9jcHVfZ2V0X2V4dGludCk7XG4gMTUyOlx0XG4gMTUzOlx0LypcbiAxNTQ6XHQgKiBSZWFkIHBlbmRpbmcgaW50ZXJydXB0IHZlY3RvciBhbmQgaW50YWNrLlxuIDE1NTpcdCAqL1xuIDE1NjpcdGludCBrdm1fY3B1X2dldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KVxuIDE1NzpcdHtcbiAxNTg6XHRcdGludCB2ZWN0b3IgPSBrdm1fY3B1X2dldF9leHRpbnQodik7XG4gMTU5Olx0XHRpZiAodmVjdG9yICE9IC0xKVxuIDE2MDpcdFx0XHRyZXR1cm4gdmVjdG9yO1x0XHRcdC8qIFBJQyAqL1xuIDE2MTpcdFxuIDE2MjpcdFx0dmVjdG9yID0ga3ZtX2FwaWNfaGFzX2ludGVycnVwdCh2KTtcdC8qIEFQSUMgKi9cbiAxNjM6XHRcdGlmICh2ZWN0b3IgIT0gLTEpXG4gMTY0Olx0XHRcdGt2bV9hcGljX2Fja19pbnRlcnJ1cHQodiwgdmVjdG9yKTtcbiAxNjU6XHRcbiAxNjY6XHRcdHJldHVybiB2ZWN0b3I7XG4gMTY3Olx0fVxuIDE2ODpcdFxuIDE2OTpcdHZvaWQga3ZtX2luamVjdF9wZW5kaW5nX3RpbWVyX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjczCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFkZHJlc3NpbmcgYSBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb24gaW4gS1ZNIEludGVycnVwdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXJlJiMzOTtzIGEgcG9zc2libGUgaXNzdWUgd2l0aCBob3cgaW50ZXJydXB0cyBhcmUgYmVpbmcgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBga3ZtX2NwdV9nZXRfaW50ZXJydXB0YCBjYW4gcmV0dXJuIC0xLCBhbmQgdGhhdCYjMzk7cyBsaW5rZWQgdG8gd2hhdCBga3ZtX2FwaWNfaGFzX2ludGVycnVwdGAgcmVwb3J0cy4gVGhlIC0xIHJldHVybiBlc3NlbnRpYWxseSBpbmRpY2F0ZXMgdGhlcmUmIzM5O3Mgbm8gaW50ZXJydXB0IHBlbmRpbmcsIHdoaWNoIGlzIGV4cGVjdGVkIGJlaGF2aW9yIHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLgoKVGhlIGNydXggb2YgdGhlIHByb2JsZW0gbGllcyBpbiBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4gVGhlcmUmIzM5O3MgYSBzY2VuYXJpbyB3aGVyZSBga3ZtX2NwdV9oYXNfaW5qZWN0YWJsZV9pbnRyYCBtaWdodCBoYXZlIHJlcG9ydGVkIHRoYXQgYW4gaW50ZXJydXB0ICpjb3VsZCogYmUgaW5qZWN0ZWQsIGJ1dCB0aGVuLCBieSB0aGUgdGltZSBga3ZtX2NwdV9nZXRfaW50ZXJydXB0YCBpcyBjYWxsZWQsIHRoZXJlJiMzOTtzIG5vIGludGVycnVwdCBhY3R1YWxseSByZWFkeS4gVGhpcyBkaXNjcmVwYW5jeSDigJMgdGhhdCBib29sZWFuIGluZGljYXRpbmcgJiMzNDtpbmplY3RhYmxlJiMzNDsgYW5kIHRoZW4gYSAtMSBmcm9tIGBnZXRfaW50ZXJydXB0YCDigJMgc3VnZ2VzdHMgZWl0aGVyIGEgdGltaW5nIGlzc3VlIG9yLCBtb3JlIGNvbmNlcm5pbmdseSwgYW4gaW5jb25zaXN0ZW5jeSBpbiB0aGUgaW50ZXJuYWwgc3RhdGUuCgpUaGUgcGF0Y2ggSSYjMzk7bSBleGFtaW5pbmcgYWRkcmVzc2VzIHRoaXMgYnksIGlmIEkmIzM5O20gdW5kZXJzdGFuZGluZyBjb3JyZWN0bHksIGp1bXBpbmcgdG8gdGhlIGBvdXRgIGxhYmVsIGluIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8uIFRoZSBgb3V0YCBsYWJlbCBwcm9iYWJseSBpbnZvbHZlcyBzb21lIHNvcnQgb2YgY2xlYW4gdXAsIGFuZCByZXR1cm5zIGEgdmFsdWUgb2Ygc29tZSBraW5kLiBMZXQgbWUgcXVpY2tseSBjb25maXJtIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMgZXhhY3RseS4gSSYjMzk7bSBhc3N1bWluZyBpdCBoYW5kbGVzIGl0IGdyYWNlZnVsbHksIHByb2JhYmx5IHJldHVybmluZyBhIDAgb3IgZXF1aXZhbGVudCB0byBzaWduaWZ5IG5vIGludGVycnVwdCB3YXMgcHJvY2Vzc2VkLCBlZmZlY3RpdmVseSBzaWRlc3RlcHBpbmcgdGhlIGluY29uc2lzdGVuY3kuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgYXBwcm9hY2ggdG8gZW5zdXJlIHRoZSBzeXN0ZW0gcmVtYWlucyBzdGFibGUgYW5kIHByZWRpY3RhYmxlLCBldmVuIGluIHRoZSBmYWNlIG9mIHRoZXNlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MjU6XHRcdCAqIE1vZGUgZXZlbnRzIChzZWUga3ZtX2luamVjdF9yZWFsbW9kZV9pbnRlcnJ1cHQoKSkuXG4xMDgyNjpcdFx0ICovXG4xMDgyNzpcdFx0V0FSTl9PTl9PTkNFKHZjcHUtXHUwMDNlYXJjaC5leGNlcHRpb24ucGVuZGluZyB8fFxuMTA4Mjg6XHRcdFx0ICAgICB2Y3B1LVx1MDAzZWFyY2guZXhjZXB0aW9uX3ZtZXhpdC5wZW5kaW5nKTtcbjEwODI5Olx0XHRyZXR1cm4gMDtcbjEwODMwOlx0XG4xMDgzMTpcdG91dDpcbjEwODMyOlx0XHRpZiAociA9PSAtRUJVU1kpIHtcbjEwODMzOlx0XHRcdCpyZXFfaW1tZWRpYXRlX2V4aXQgPSB0cnVlO1xuMTA4MzQ6XHRcdFx0ciA9IDA7XG4xMDgzNTpcdFx0fVxuMTA4MzY6XHRcdHJldHVybiByO1xuMTA4Mzc6XHR9XG4xMDgzODpcdFxuMTA4Mzk6XHRzdGF0aWMgdm9pZCBwcm9jZXNzX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4xMDg0MDpcdHtcbjEwODQxOlx0XHR1bnNpZ25lZCBpbnQgbGltaXQ7XG4xMDg0MjpcdFxuMTA4NDM6XHRcdC8qXG4xMDg0NDpcdFx0ICogeDg2IGlzIGxpbWl0ZWQgdG8gb25lIE5NSSBwZW5kaW5nLCBidXQgYmVjYXVzZSBLVk0gY2FuJiMzOTt0IHJlYWN0IHRvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNTcKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZXR1cm4gVmFsdWUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJhY2tpbmcgdGhlIHZhcmlhYmxlIGByYC4gSXQgbG9va3MgbGlrZSBgcmAgaXMgaW5pdGlhbGx5IGFzc2lnbmVkIHRoZSB2YWx1ZSBvZiAxIGJlY2F1c2UgYGlmIChyKWAgZXZhbHVhdGVzIHRvIHRydWUuIEJ1dCB3YWl0LCBJIG5lZWQgdG8gYmFjayB1cCBhIHN0ZXAuIEl0IHNlZW1zIHRoYXQgYHJgIGlzIGFjdHVhbGx5IHNldCBieSB0aGUgcmVzdWx0IG9mIGEgZnVuY3Rpb24gY2FsbDogYGt2bV94ODZfY2FsbGAuIFNvLCBkZXBlbmRpbmcgb24gYGNhbl9pbmplY3RgLCBpdCBlaXRoZXIgZ2V0cyB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsIG9yIGlzIHNldCB0byBgLUVCVVNZYC4KCk5vdywgaWYgdGhpcyBgcmAgaXMgaW5kZWVkIDEsIHRoZW4gdGhlIGBnb3RvIG91dDtgIHN0YXRlbWVudCB3aWxsIGVuc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIDEuIEhtbSwgbGV0IG1lIGNvbmZpcm0uIFllcywgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gaXMgaW5kZWVkIGByYC4gU28sIHdoZW4gYHJgIGlzIDEsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDEuCgpJIGJldHRlciBjaGVjayB0aGUgY2FsbGVycyBvZiBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHJldHVybiB2YWx1ZSBhbmQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz0xMDU3NT1zdGF0aWMgdm9pZCBrdm1faW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNjMyLSAqL1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNjMzOnN0YXRpYyBpbnQga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDYzNC1cdFx0XHRcdCAgICAgICBib29sICpyZXFfaW1tZWRpYXRlX2V4aXQpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwODk0PXZvaWQgX19rdm1fdmNwdV91cGRhdGVfYXBpY3Yoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDkxOS1cdCAqIHN0aWxsIGFjdGl2ZSB3aGVuIHRoZSBpbnRlcnJ1cHQgZ290IGFjY2VwdGVkLiBNYWtlIHN1cmVcbmFyY2gveDg2L2t2bS94ODYuYzoxMDkyMDpcdCAqIGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cygpIGlzIGNhbGxlZCB0byBjaGVjayBmb3IgdGhhdC5cbmFyY2gveDg2L2t2bS94ODYuYy0xMDkyMS1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMTExMj1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTI5NS1cbmFyY2gveDg2L2t2bS94ODYuYzoxMTI5NjpcdFx0ciA9IGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyh2Y3B1LCBcdTAwMjZyZXFfaW1tZWRpYXRlX2V4aXQpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjk3LVx0XHRpZiAociBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODc5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIEV2ZW50IEluamVjdGlvbiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBzbmlwcGV0IGZyb20gYHZjcHVfZW50ZXJfZ3Vlc3RgIGFuZCB0cnlpbmcgdG8gZ3Jhc3AgdGhlIGludGVycnVwdCBpbmplY3Rpb24gZmxvdy4gSXQgc3RhcnRzIHdpdGggYSBjYWxsIHRvIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgLiBUaGUgcmV0dXJuIHZhbHVlLCBgcmAsIGlzIGtleSBoZXJlLiBJZiBgcmAgaXMgbGVzcyB0aGFuIHplcm8sIHRoZXJlJiMzOTtzIGFuIGVycm9yLCBhbmQgd2UganVtcCB0byBgY2FuY2VsX2luamVjdGlvbmAuIEJ1dCBpZiBgcmAgaXMgMSwgdGhlIGNvZGUgc2ltcGx5IGNvbnRpbnVlcy4gSG1tLCB3aHk/CgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBBIHZhbHVlIG9mIDEgZm9yIGByYCBtdXN0IG1lYW4gdGhhdCBgaW50ZXJydXB0X2FsbG93ZWRgIHJldHVybmVkIDEuIFNvLCBpZiB0aGlzIGNvbmRpdGlvbiBpcyBtZXQsIGFuZCBgcmAgcmVtYWlucyBhdCAxLCB0aGUgY29kZSBwcm9jZWVkcyBhbmQgdGhlbiBmaW5hbGx5IHJldHVybnMgMSBhcyB0aGUgb3ZlcmFsbCBmdW5jdGlvbiYjMzk7cyB2YWx1ZS4gSXMgdGhpcyBob3cgaXQgcmVhbGx5IHdvcmtzPyBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4KCkxldCYjMzk7cyB0cmFjZSB3aGF0IGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgICpub3JtYWxseSogcmV0dXJucy4gQXQgdGhlIGVuZCBvZiB0aGF0IGZ1bmN0aW9uLCBpZiBpdCByZWFjaGVzIHRoZSBlbmQgYW5kIG5vIGludGVycnVwdHMgYXJlIGluamVjdGVkLCBpdCByZXR1cm5zIDAuIEhvd2V2ZXIsIGlmIHRoZSBmdW5jdGlvbiBqdW1wcyB0byBgb3V0YCB3aXRoIGByYCBiZWluZyAxLCBpdCAqZGVmaW5pdGVseSogcmV0dXJucyAxLgoKSSB0aGluayBJIHNlZSBpdCBub3cuIFRoZSB2YWx1ZSBvZiBgcmAgZG9lc24mIzM5O3QgY2hhbmdlIGFmdGVyIGl0cyBpbml0aWFsIGFzc2lnbm1lbnQsIGJhc2VkIG9uIHRoYXQgdGVybmFyeS4gU28gYHJgIGlzIG9ubHkgc2V0IHRvIHZhbHVlcyBncmVhdGVyIHRoYW4gemVybywgb3IgbGVzcyB0aGFuIHplcm8uIExldCYjMzk7cyBzZWUgaWYgYHZjcHVfZW50ZXJfZ3Vlc3RgIGFjdHVhbGx5IGNhcmVzIGFib3V0IGByYCBiZWluZyBncmVhdGVyIHRoYW4gemVyby4gVGhhdCYjMzk7cyB0aGUgcGFydCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0byBjb25maXJtIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMjk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMjk1Olx0XG4xMTI5NjpcdFx0XHRyID0ga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzKHZjcHUsIFx1MDAyNnJlcV9pbW1lZGlhdGVfZXhpdCk7XG4xMTI5NzpcdFx0XHRpZiAociBcdTAwM2MgMCkge1xuMTEyOTg6XHRcdFx0XHRyID0gMDtcbjExMjk5Olx0XHRcdFx0Z290byBvdXQ7XG4xMTMwMDpcdFx0XHR9XG4xMTMwMTpcdFx0XHRpZiAocmVxX2ludF93aW4pXG4xMTMwMjpcdFx0XHRcdGt2bV94ODZfY2FsbChlbmFibGVfaXJxX3dpbmRvdykodmNwdSk7XG4xMTMwMzpcdFxuMTEzMDQ6XHRcdFx0aWYgKGt2bV9sYXBpY19lbmFibGVkKHZjcHUpKSB7XG4xMTMwNTpcdFx0XHRcdGt2bV9sYXBpY191cGRhdGVfY3I4X2ludGVyY2VwdCh2Y3B1KTtcbjExMzA2Olx0XHRcdFx0a3ZtX2xhcGljX3N5bmNfdG9fdmFwaWModmNwdSk7XG4xMTMwNzpcdFx0XHR9XG4xMTMwODpcdFx0fVxuMTEzMDk6XHRcbjExMzEwOlx0XHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4xMTMxMTpcdFx0aWYgKHVubGlrZWx5KHIpKSB7XG4xMTMxMjpcdFx0XHRnb3RvIGNhbmNlbF9pbmplY3Rpb247XG4xMTMxMzpcdFx0fVxuMTEzMTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgyMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIEJ1ZyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgS1ZNIGJ1ZyBhbmQgaG93IHRvIGJlc3QgZnV6eiBpdC4gVGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIGluIGB2Y3B1X2VudGVyX2d1ZXN0YCBpcyBjaGFuZ2VkLCBidXQgaXQgZG9lc24mIzM5O3QgKmRpcmVjdGx5KiBhZmZlY3QgdGhlIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yLiBUaGUgcmVhbCBpbXBhY3QgaXMgc2tpcHBpbmcgYGVuYWJsZV9pcnFfd2luZG93YCBhbmQgdGhlIHJlc3Qgb2YgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AuCgpTbywgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdCBzbyBmYXI6IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIG9idmlvdXNseS4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIGZvY3VzaW5nIGZ1enppbmcgb24gYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AsIGFzIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNoYW5nZSBhY3R1YWxseSAqZG9lcyogc29tZXRoaW5nLiBBbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGBLVk1gLiBJdCBzZWVtcyBsaWtlIGBLVk1gIGlzIGFsbCB0aGF0JiMzOTtzIHJlcXVpcmVkIGhlcmU7IG5vIG90aGVyIGNvbmZpZyBpcyBuZWVkZWQuCgpOb3csIHRoZSBxdWVzdGlvbiBpczogYXJlIHRoZXJlICpvdGhlciogZnVuY3Rpb25zIHdlIHNob3VsZCB0YXJnZXQ/IEkgY29uc2lkZXJlZCBga3ZtX2NwdV9nZXRfaW50ZXJydXB0YCwgYnV0IHRoZW4gSSByZWFsaXplZCBgdmNwdV9lbnRlcl9ndWVzdGAgYW5kIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIGFyZSBib3RoIGhvdC1wYXRoIGZ1bmN0aW9ucywgdGhhdCBpcywgdGhleSYjMzk7cmUgY2FsbGVkIGZyZXF1ZW50bHkuIElkZWFsbHksIHRoZSBmdXp6aW5nIHNob3VsZG4mIzM5O3QgYmUgc2tld2VkIGJ5IHBpY2tpbmcgaG90LXBhdGggZnVuY3Rpb25zLiBUaGUgcHJvbXB0IGRvZXMgc2F5IHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLgoKSG93ZXZlciwgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AgKmlzKiB0aGUgb25lIHRoYXQgd2FzIG1vZGlmaWVkLiBJdCYjMzk7cyBjYWxsZWQgb24gZXZlcnkgVk0gZW50cnksIG1ha2luZyBpdCBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgKnNwZWNpZmljKiB0byB0aGlzIGNoYW5nZS4gSSYjMzk7bSB0b3JuISBJcyBpdCB0b28gZ2VuZXJpYyBvciBub3Q/IFVsdGltYXRlbHksIEkgYmVsaWV2ZSBpdCBpcyBva2F5IHRvIGxpc3QgaXQgaW4gYEZvY3VzU3ltYm9sc2AuCgpUaGUgYnVnIGl0c2VsZiByZWxhdGVzIHRvIGFuIGBpcnEgPT0gLTFgIHNpdHVhdGlvbiB3aGVuIGBrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHJgIGlzIHRydWUsIHdoaWNoIGFyaXNlcyB3aGVuIHRoZXJlJiMzOTtzIGEgcGVuZGluZyBpbnRlcnJ1cHQgdGhhdCBkaXNhcHBlYXJzIG9yIGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uLiBTdGlsbCwgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb24gcmVtYWlucyBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYC4KClNvIEkmIzM5O3ZlIGRlY2lkZWQgdG8gbGlzdCBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCBpbiBgRm9jdXNTeW1ib2xzYCBhcyBpdCYjMzk7cyB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbiBpbiB0aGlzIGFuYWx5c2lzLCBldmVuIHRob3VnaCBpdCYjMzk7cyBhIGhvdCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjAzCgkJCQkJCQlvdXRwdXQ6IDE2OQoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIEludGVycnVwdCBJbmplY3Rpb24gUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgS1ZNIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGluZyB0byB0aGUgYEtWTWAgbW9kdWxlLCBhbmQgdGhhdCYjMzk7cyBnb2luZyB0byBiZSBrZXkgaW4gdGhlIGBFbmFibGVDb25maWdzYCBzZXR1cC4KClRoZSBoZWFydCBvZiB0aGUgY2hhbmdlIGxpZXMgd2l0aGluIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgLiBJdCBzZWVtcyB0aGF0IHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgc2NlbmFyaW8gd2hlcmUgYGt2bV9jcHVfZ2V0X2ludGVycnVwdGAgaXMgcmV0dXJuaW5nIC0xLCBpbmRpY2F0aW5nIG5vIHBlbmRpbmcgaW50ZXJydXB0LCBldmVuIHdoZW4gYGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cmAgc2F5cyB0aGVyZSAqc2hvdWxkKiBiZSBvbmUuIFRoYXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgZGlzY3JlcGFuY3kuIFRoZSBjb2RlJiMzOTtzIG9yaWdpbmFsIHJlc3BvbnNlIHdhcyB0byB1c2UgYFdBUk5fT05fT05DRWAsIGJ1dCB0aGF0JiMzOTtzIGJlaW5nIHJlcGxhY2VkIHdpdGggYSBgZ290byBvdXQ7YCwgZWZmZWN0aXZlbHkgc2tpcHBpbmcgdGhlIHN1YnNlcXVlbnQgaW50ZXJydXB0IGluamVjdGlvbiBzdGVwcywgc3BlY2lmaWNhbGx5IHRoZSBgZW5hYmxlX2lycV93aW5kb3dgIHBhcnQuCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBtb2RpZmljYXRpb24gdG8gS1ZNJiMzOTtzIGludGVycnVwdCBpbmplY3Rpb24gcGF0aC4gQSAqZnVuZGFtZW50YWwqIGNoYW5nZSBsaWtlIHRoaXMgd2FycmFudHMgc29tZSBzZXJpb3VzIHNjcnV0aW55LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIHNpZ25pZmljYW50IHNoaWZ0IGluIGhvdyBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciByZWdyZXNzaW9ucyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMgd2l0aCB0aGlzIGtpbmQgb2YgaW50ZXJydXB0IGludGVyYWN0aW9uLCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gc2V0IHVwIHNvbWUgZnV6emluZyB0byByZWFsbHkgc3RyZXNzLXRlc3QgdGhlIG5ldyBiZWhhdmlvci4gV2UmIzM5O2xsIG5lZWQgdG8gc2V0IHVwIHRob3NlIHRlc3QgcmVzdWx0cyBhbmQgcmV2aWV3IHRoZW0gY2xvc2VseS4gTGV0JiMzOTtzIGNhbGwgaXQgc2V0LXJlc3VsdHMgYW5kIGdldCBzdGFydGVkIG9uIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGBrdm1fY3B1X2dldF9pbnRlcnJ1cHRgIHJldHVybnMgLTEgKG5vIHBlbmRpbmcgaW50ZXJydXB0KSBkZXNwaXRlIGBrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHJgIHJldHVybmluZyB0cnVlLiBJdCByZXBsYWNlcyBhIGBXQVJOX09OX09OQ0VgIHdpdGggYSBgZ290byBvdXQ7YCwgc2tpcHBpbmcgdGhlIHJlc3Qgb2YgdGhlIGV2ZW50IGluamVjdGlvbiBsb2dpYyAobGlrZSBgZW5hYmxlX2lycV93aW5kb3dgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSYjMzk7cyBpbnRlcnJ1cHQgaW5qZWN0aW9uIHBhdGggYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYGt2bV9jcHVfZ2V0X2ludGVycnVwdGAgcmV0dXJucyAtMSAobm8gcGVuZGluZyBpbnRlcnJ1cHQpIGRlc3BpdGUgYGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cmAgcmV0dXJuaW5nIHRydWUuIEl0IHJlcGxhY2VzIGEgYFdBUk5fT05fT05DRWAgd2l0aCBhIGBnb3RvIG91dDtgLCBza2lwcGluZyB0aGUgcmVzdCBvZiB0aGUgZXZlbnQgaW5qZWN0aW9uIGxvZ2ljIChsaWtlIGBlbmFibGVfaXJxX3dpbmRvd2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNJiMzOTtzIGludGVycnVwdCBpbmplY3Rpb24gcGF0aCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjE2OjU1LjgzNTg5Mjk5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTQ3NjM3ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBga3ZtX2NwdV9nZXRfaW50ZXJydXB0YCByZXR1cm5zIC0xIChubyBwZW5kaW5nIGludGVycnVwdCkgZGVzcGl0ZSBga3ZtX2NwdV9oYXNfaW5qZWN0YWJsZV9pbnRyYCByZXR1cm5pbmcgdHJ1ZS4gSXQgcmVwbGFjZXMgYSBgV0FSTl9PTl9PTkNFYCB3aXRoIGEgYGdvdG8gb3V0O2AsIHNraXBwaW5nIHRoZSByZXN0IG9mIHRoZSBldmVudCBpbmplY3Rpb24gbG9naWMgKGxpa2UgYGVuYWJsZV9pcnFfd2luZG93YCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBLVk0ncyBpbnRlcnJ1cHQgaW5qZWN0aW9uIHBhdGggYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTY6NTUuODM1OTAzMTg1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUzMjU4MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhOGExODU1M2YwMWU4ODMxNmZlNWY1YzI0NDcyYTZhOTU5NDQzMzliXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gSnVsIDEyIDEzOjE2OjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbmluZGV4IGFmY2FjMTA0Mjk0N2E1Li4zNmJmNDc5YTExNjQ5OSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtMTA3OTcsMTEgKzEwNzk3LDExIEBAIHN0YXRpYyBpbnQga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0aWYgKHIpIHtcXG4gXFx0XFx0XFx0aW50IGlycSA9IGt2bV9jcHVfZ2V0X2ludGVycnVwdCh2Y3B1KTtcXG4gXFxuLVxcdFxcdFxcdGlmICghV0FSTl9PTl9PTkNFKGlycSA9PSAtMSkpIHtcXG4tXFx0XFx0XFx0XFx0a3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCBpcnEsIGZhbHNlKTtcXG4tXFx0XFx0XFx0XFx0a3ZtX3g4Nl9jYWxsKGluamVjdF9pcnEpKHZjcHUsIGZhbHNlKTtcXG4tXFx0XFx0XFx0XFx0V0FSTl9PTihrdm1feDg2X2NhbGwoaW50ZXJydXB0X2FsbG93ZWQpKHZjcHUsIHRydWUpIFxcdTAwM2MgMCk7XFxuLVxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKGlycSA9PSAtMSlcXG4rXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdGt2bV9xdWV1ZV9pbnRlcnJ1cHQodmNwdSwgaXJxLCBmYWxzZSk7XFxuK1xcdFxcdFxcdGt2bV94ODZfY2FsbChpbmplY3RfaXJxKSh2Y3B1LCBmYWxzZSk7XFxuK1xcdFxcdFxcdFdBUk5fT04oa3ZtX3g4Nl9jYWxsKGludGVycnVwdF9hbGxvd2VkKSh2Y3B1LCB0cnVlKSBcXHUwMDNjIDApO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHIodmNwdSkpXFxuIFxcdFxcdFxcdGt2bV94ODZfY2FsbChlbmFibGVfaXJxX3dpbmRvdykodmNwdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjE2OjU2LjQ1MTk2OTM0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzUzMTU0NTc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYGt2bV9jcHVfZ2V0X2ludGVycnVwdGAgcmV0dXJucyAtMSAobm8gcGVuZGluZyBpbnRlcnJ1cHQpIGRlc3BpdGUgYGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cmAgcmV0dXJuaW5nIHRydWUuIEl0IHJlcGxhY2VzIGEgYFdBUk5fT05fT05DRWAgd2l0aCBhIGBnb3RvIG91dDtgLCBza2lwcGluZyB0aGUgcmVzdCBvZiB0aGUgZXZlbnQgaW5qZWN0aW9uIGxvZ2ljIChsaWtlIGBlbmFibGVfaXJxX3dpbmRvd2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNJ3MgaW50ZXJydXB0IGluamVjdGlvbiBwYXRoIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYThhMTg1NTNmMDFlODgzMTZmZTVmNWMyNDQ3MmE2YTk1OTQ0MzM5YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDEyIDEzOjE2OjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCBhZmNhYzEwNDI5NDdhNS4uMzZiZjQ3OWExMTY0OTkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuY1xuQEAgLTEwNzk3LDExICsxMDc5NywxMSBAQCBzdGF0aWMgaW50IGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdGlmIChyKSB7XG4gXHRcdFx0aW50IGlycSA9IGt2bV9jcHVfZ2V0X2ludGVycnVwdCh2Y3B1KTtcbiBcbi1cdFx0XHRpZiAoIVdBUk5fT05fT05DRShpcnEgPT0gLTEpKSB7XG4tXHRcdFx0XHRrdm1fcXVldWVfaW50ZXJydXB0KHZjcHUsIGlycSwgZmFsc2UpO1xuLVx0XHRcdFx0a3ZtX3g4Nl9jYWxsKGluamVjdF9pcnEpKHZjcHUsIGZhbHNlKTtcbi1cdFx0XHRcdFdBUk5fT04oa3ZtX3g4Nl9jYWxsKGludGVycnVwdF9hbGxvd2VkKSh2Y3B1LCB0cnVlKSBcdTAwM2MgMCk7XG4tXHRcdFx0fVxuK1x0XHRcdGlmIChpcnEgPT0gLTEpXG4rXHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHRrdm1fcXVldWVfaW50ZXJydXB0KHZjcHUsIGlycSwgZmFsc2UpO1xuK1x0XHRcdGt2bV94ODZfY2FsbChpbmplY3RfaXJxKSh2Y3B1LCBmYWxzZSk7XG4rXHRcdFx0V0FSTl9PTihrdm1feDg2X2NhbGwoaW50ZXJydXB0X2FsbG93ZWQpKHZjcHUsIHRydWUpIFx1MDAzYyAwKTtcbiBcdFx0fVxuIFx0XHRpZiAoa3ZtX2NwdV9oYXNfaW5qZWN0YWJsZV9pbnRyKHZjcHUpKVxuIFx0XHRcdGt2bV94ODZfY2FsbChlbmFibGVfaXJxX3dpbmRvdykodmNwdSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxNjo1Ni40NTE5NzExOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NDQ3MTIzMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNIEludGVycnVwdCBJbmplY3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEtWTSBwYXRjaCwgYW5kIGl0J3MgbW9kaWZ5aW5nIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGlzOiB0aGV5J3ZlIHJlcGxhY2VkIGEgYFdBUk5fT05fT05DRShpcnEgPT0gLTEpYCB3aXRoIGEgZGlyZWN0IGBpZiAoaXJxID09IC0xKSBnb3RvIG91dDtgLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRoYXQgdGhpcyBpcyBtb3JlIHRoYW4ganVzdCBhIGNvc21ldGljIGNoYW5nZTsgaXQncyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIGJlY2F1c2UgaXQgYWx0ZXJzIHRoZSBjb250cm9sIGZsb3cuXG5cbkxldCBtZSBicmVhayBkb3duIHdoYXQncyBoYXBwZW5pbmcuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIGxvb2tlZCBsaWtlIHRoaXM6IGlmIGBpcnEgPT0gLTFgLCB0aGUgYGlmYCBibG9jayB3b3VsZCBiZSBza2lwcGVkIGFuZCB0aGUgZXhlY3V0aW9uIHdvdWxkIGNvbnRpbnVlIGFzIG5vcm1hbDpcbmBgYGNcblx0XHRcdGlmICghV0FSTl9PTl9PTkNFKGlycSA9PSAtMSkpIHtcblx0XHRcdFx0a3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCBpcnEsIGZhbHNlKTtcblx0XHRcdFx0a3ZtX3g4Nl9jYWxsKGluamVjdF9pcnEpKHZjcHUsIGZhbHNlKTtcblx0XHRcdFx0V0FSTl9PTihrdm1feDg2X2NhbGwoaW50ZXJydXB0X2FsbG93ZWQpKHZjcHUsIHRydWUpIFx1MDAzYyAwKTtcblx0XHRcdH1cbmBgYFxuSWYgYGlycSA9PSAtMWAgdGhlIGZvbGxvd2luZyBjb2RlIHdvdWxkIHN0aWxsIGJlIGV4ZWN1dGVkOlxuYGBgY1xuXHRcdGlmIChrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHIodmNwdSkpXG5cdFx0XHRrdm1feDg2X2NhbGwoZW5hYmxlX2lycV93aW5kb3cpKHZjcHUpO1xuYGBgXG5CdXQgbm93LCB3aXRoIHRoZSBwYXRjaCwgdGhlIGNvZGUgYmVjb21lczpcbmBgYGNcblx0XHRcdGlmIChpcnEgPT0gLTEpXG5cdFx0XHRcdGdvdG8gb3V0O1xuXHRcdFx0a3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCBpcnEsIGZhbHNlKTtcblx0XHRcdGt2bV94ODZfY2FsbChpbmplY3RfaXJxKSh2Y3B1LCBmYWxzZSk7XG5cdFx0XHRXQVJOX09OKGt2bV94ODZfY2FsbChpbnRlcnJ1cHRfYWxsb3dlZCkodmNwdSwgdHJ1ZSkgXHUwMDNjIDApO1xuYGBgXG5cbk5vdywgaWYgYGlycSA9PSAtMWAsIGl0IGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBvdXRgLiBUaGlzIG1lYW5zIGl0ICpza2lwcyogdGhlIGBrdm1fcXVldWVfaW50ZXJydXB0YCwgYGt2bV94ODZfY2FsbChpbmplY3RfaXJxKWAsIGBXQVJOX09OYCBjYWxscywgYW5kIGNydWNpYWxseSwgYW55IGNvZGUgKmFmdGVyKiB0aGF0LCBpbmNsdWRpbmcgdGhlIGBlbmFibGVfaXJxX3dpbmRvd2AgY2hlY2ssIHdoYXRldmVyIHRoYXQgZG9lcy5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGF0J3MgdGhlIHB1cnBvc2Ugb2YgYGVuYWJsZV9pcnFfd2luZG93YD8gV2h5IGlzIGl0IHNraXBwZWQgbm93IGlmIGBpcnEgPT0gLTFgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBvZiBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBjb3VsZCBiZSBhIHNpbXBsZSBvcHRpbWl6YXRpb24sIGJ1dCBpdCBjb3VsZCBhbHNvIGJlIGhpZGluZyBhIG1vcmUgc3VidGxlIGJ1ZyBvciBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZS9zZWN1cml0eSB0cmFkZS1vZmYuIExldCBtZSBjaGVjayB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyOSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjE3OjAzLjA5NjY4NTU0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQyODI2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9MTA1NzU9c3RhdGljIHZvaWQga3ZtX2luamVjdF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNjMyLSAqL1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDYzMzpzdGF0aWMgaW50IGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNjM0LVxcdFxcdFxcdFxcdCAgICAgICBib29sICpyZXFfaW1tZWRpYXRlX2V4aXQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA4OTQ9dm9pZCBfX2t2bV92Y3B1X3VwZGF0ZV9hcGljdihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA5MTktXFx0ICogc3RpbGwgYWN0aXZlIHdoZW4gdGhlIGludGVycnVwdCBnb3QgYWNjZXB0ZWQuIE1ha2Ugc3VyZVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDkyMDpcXHQgKiBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoKSBpcyBjYWxsZWQgdG8gY2hlY2sgZm9yIHRoYXQuXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwOTIxLVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMTEyPXN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEyOTUtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMjk2OlxcdFxcdHIgPSBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHModmNwdSwgXFx1MDAyNnJlcV9pbW1lZGlhdGVfZXhpdCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjk3LVxcdFxcdGlmIChyIFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxNzowMy4yNDA5NzI5MjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDg1NTcyNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCAtIEEgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgSSdtIGhlcmUsIEkgc2VlIHRoZSBjYWxsIHRvIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiBpbiB0aGUgS1ZNIGluZnJhc3RydWN0dXJlLCBhbmQgSSdtIGtlZW4gdG8gZXhhbWluZSB0aGUgcmVzdCBvZiBpdC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgZXZlbnRzIGFyZSBoYW5kbGVkIGFuZCBpbmplY3RlZCBpbnRvIHRoZSB2aXJ0dWFsIG1hY2hpbmUgZnJvbSB0aGlzIHBvaW50LiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyB2aXRhbCBmb3IgbWFuYWdpbmcgdGhpbmdzIGxpa2UgaW50ZXJydXB0cywgZXhjZXB0aW9ucywgYW5kIG90aGVyIHNpZ25hbHMgdGhhdCBuZWVkIHRvIHJlYWNoIHRoZSBndWVzdC4gVW5kZXJzdGFuZGluZyB0aGlzIGNvbXBsZXRlIHByb2Nlc3MgaXMgZXNzZW50aWFsLiBMZXQncyBzZWUgd2hhdCBtb3JlIGl0IGVudGFpbHMuLi4gbGV0J3Mgc2VlIHRoZSBmbG93LCB0aGUgY29uZGl0aW9ucywgYW5kIHRoZSBhY3R1YWwgaW5qZWN0aW9uIG1lY2hhbmlzbXMuIEtub3dpbmcgdGhlIGRldGFpbHMgaGVyZSBtZWFucyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgc3lzdGVtIHRoYXQgcnVucyBjb3JyZWN0bHkgYW5kIG9uZSB0aGF0IGRvZXNuJ3QuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxNzowNi4zMjY1NDc0NDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzkwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDc4MDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMDc4MTpcXHRcXHRcXHRpZiAocikge1xcbjEwNzgyOlxcdFxcdFxcdFxcdC0tdmNwdS1cXHUwMDNlYXJjaC5ubWlfcGVuZGluZztcXG4xMDc4MzpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLm5taV9pbmplY3RlZCA9IHRydWU7XFxuMTA3ODQ6XFx0XFx0XFx0XFx0a3ZtX3g4Nl9jYWxsKGluamVjdF9ubWkpKHZjcHUpO1xcbjEwNzg1OlxcdFxcdFxcdFxcdGNhbl9pbmplY3QgPSBmYWxzZTtcXG4xMDc4NjpcXHRcXHRcXHRcXHRXQVJOX09OKGt2bV94ODZfY2FsbChubWlfYWxsb3dlZCkodmNwdSwgdHJ1ZSkgXFx1MDAzYyAwKTtcXG4xMDc4NzpcXHRcXHRcXHR9XFxuMTA3ODg6XFx0XFx0XFx0aWYgKHZjcHUtXFx1MDAzZWFyY2gubm1pX3BlbmRpbmcpXFxuMTA3ODk6XFx0XFx0XFx0XFx0a3ZtX3g4Nl9jYWxsKGVuYWJsZV9ubWlfd2luZG93KSh2Y3B1KTtcXG4xMDc5MDpcXHRcXHR9XFxuMTA3OTE6XFx0XFxuMTA3OTI6XFx0XFx0aWYgKGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cih2Y3B1KSkge1xcbjEwNzkzOlxcdFxcdFxcdHIgPSBjYW5faW5qZWN0ID8ga3ZtX3g4Nl9jYWxsKGludGVycnVwdF9hbGxvd2VkKSh2Y3B1LCB0cnVlKSA6XFxuMTA3OTQ6XFx0XFx0XFx0XFx0XFx0IC1FQlVTWTtcXG4xMDc5NTpcXHRcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuMTA3OTY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTA3OTc6XFx0XFx0XFx0aWYgKHIpIHtcXG4xMDc5ODpcXHRcXHRcXHRcXHRpbnQgaXJxID0ga3ZtX2NwdV9nZXRfaW50ZXJydXB0KHZjcHUpO1xcbjEwNzk5OlxcdFxcbjEwODAwOlxcdFxcdFxcdFxcdGlmIChpcnEgPT0gLTEpXFxuMTA4MDE6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTA4MDI6XFx0XFx0XFx0XFx0a3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCBpcnEsIGZhbHNlKTtcXG4xMDgwMzpcXHRcXHRcXHRcXHRrdm1feDg2X2NhbGwoaW5qZWN0X2lycSkodmNwdSwgZmFsc2UpO1xcbjEwODA0OlxcdFxcdFxcdFxcdFdBUk5fT04oa3ZtX3g4Nl9jYWxsKGludGVycnVwdF9hbGxvd2VkKSh2Y3B1LCB0cnVlKSBcXHUwMDNjIDApO1xcbjEwODA1OlxcdFxcdFxcdH1cXG4xMDgwNjpcXHRcXHRcXHRpZiAoa3ZtX2NwdV9oYXNfaW5qZWN0YWJsZV9pbnRyKHZjcHUpKVxcbjEwODA3OlxcdFxcdFxcdFxcdGt2bV94ODZfY2FsbChlbmFibGVfaXJxX3dpbmRvdykodmNwdSk7XFxuMTA4MDg6XFx0XFx0fVxcbjEwODA5OlxcdFxcbjEwODEwOlxcdFxcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuMTA4MTE6XFx0XFx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWhhc19ldmVudHMgXFx1MDAyNlxcdTAwMjZcXG4xMDgxMjpcXHRcXHQgICAga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlaGFzX2V2ZW50cyh2Y3B1LCB0cnVlKSlcXG4xMDgxMzpcXHRcXHRcXHQqcmVxX2ltbWVkaWF0ZV9leGl0ID0gdHJ1ZTtcXG4xMDgxNDpcXHRcXG4xMDgxNTpcXHRcXHQvKlxcbjEwODE2OlxcdFxcdCAqIEtWTSBtdXN0IG5ldmVyIHF1ZXVlIGEgbmV3IGV4Y2VwdGlvbiB3aGlsZSBpbmplY3RpbmcgYW4gZXZlbnQ7IEtWTVxcbjEwODE3OlxcdFxcdCAqIGlzIGRvbmUgZW11bGF0aW5nIGFuZCBzaG91bGQgb25seSBwcm9wYWdhdGUgdGhlIHRvLWJlLWluamVjdGVkIGV2ZW50XFxuMTA4MTg6XFx0XFx0ICogdG8gdGhlIFZNQ1MvVk1DQi4gIFF1ZXVlaW5nIGEgbmV3IGV4Y2VwdGlvbiBjYW4gcHV0IHRoZSB2Q1BVIGludG8gYW5cXG4xMDgxOTpcXHRcXHQgKiBpbmZpbml0ZSBsb29wIGFzIEtWTSB3aWxsIGJhaWwgZnJvbSBWTS1FbnRlciB0byBpbmplY3QgdGhlIHBlbmRpbmdcXG4xMDgyMDpcXHRcXHQgKiBleGNlcHRpb24gYW5kIHN0YXJ0IHRoZSBjeWNsZSBhbGwgb3Zlci5cXG4xMDgyMTpcXHRcXHQgKlxcbjEwODIyOlxcdFxcdCAqIEV4ZW1wdCB0cmlwbGUgZmF1bHRzIGFzIHRoZXkgaGF2ZSBzcGVjaWFsIGhhbmRsaW5nIGFuZCB3b24ndCBwdXQgdGhlXFxuMTA4MjM6XFx0XFx0ICogdkNQVSBpbnRvIGFuIGluZmluaXRlIGxvb3AuICBUcmlwbGUgZmF1bHQgY2FuIGJlIHF1ZXVlZCB3aGVuIHJ1bm5pbmdcXG4xMDgyNDpcXHRcXHQgKiBWTVggd2l0aG91dCB1bnJlc3RyaWN0ZWQgZ3Vlc3QsIGFzIHRoYXQgcmVxdWlyZXMgS1ZNIHRvIGVtdWxhdGUgUmVhbFxcbjEwODI1OlxcdFxcdCAqIE1vZGUgZXZlbnRzIChzZWUga3ZtX2luamVjdF9yZWFsbW9kZV9pbnRlcnJ1cHQoKSkuXFxuMTA4MjY6XFx0XFx0ICovXFxuMTA4Mjc6XFx0XFx0V0FSTl9PTl9PTkNFKHZjcHUtXFx1MDAzZWFyY2guZXhjZXB0aW9uLnBlbmRpbmcgfHxcXG4xMDgyODpcXHRcXHRcXHQgICAgIHZjcHUtXFx1MDAzZWFyY2guZXhjZXB0aW9uX3ZtZXhpdC5wZW5kaW5nKTtcXG4xMDgyOTpcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6MDYuMzI3MTI5NDY0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4ODg2NzI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0geDg2IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIGZ1bmN0aW9uJ3MgYmVoYXZpb3Igd2hlbiB0aGUgaW50ZXJydXB0IHJlcXVlc3QgKGBpcnFgKSBpcyBzZXQgdG8gLTEuIEN1cnJlbnRseSwgaXQncyBwcmV2ZW50aW5nIHRoZSB3YXJuaW5nIHdpdGggYFdBUk5fT05fT05DRWAgYW5kIHNpbXBseSBqdW1wcyB0byBgb3V0O2AuIEkgc2VlLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBpdCBieXBhc3NlcyBgZW5hYmxlX2lycV93aW5kb3dgIGFuZCB0aGUgc3Vic2VxdWVudCBjb2RlIHdpdGhpbiB0aGUgZnVuY3Rpb24uIFRoaXMgaXMgd29ydGggYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSB3aXRoIGZ1enppbmcgaW4gbWluZC4gU2luY2UgdGhpcyBpcyBpbiBLVk0geDg2IGFuZCBkZWFscyB3aXRoIGludGVycnVwdCBpbmplY3Rpb24sIGl0IGNvdWxkIGJlIGEgc3BvdCBmb3Igc3VidGxlIHNlY3VyaXR5IGZsYXdzIG9yIGVkZ2UgY2FzZSBmYWlsdXJlcy4gSSBzaG91bGQgY2hlY2sgdGhhdCBgS1ZNYCBjb25maWcgaXMgZGVmaW5pdGVseSBlbmFibGVkLiBUaGUgcHJpbWFyeSBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIHRoaXMgaW5pdGlhbCBhbmFseXNpcyBpcyBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYC4gTGV0J3MgYWxzbyBpbnZlc3RpZ2F0ZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgaW4gdGhlIGFyZWEuIFBlcmhhcHMgYGt2bV9jcHVfZ2V0X2ludGVycnVwdGAgbWlnaHQgb2ZmZXIgcmVsYXRlZCBpbnNpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzUwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6MTAuMTE1OTk4ODE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MjI3NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9jcHVfZ2V0X2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9pcnEuYz0xNTE9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9jcHVfZ2V0X2V4dGludCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMTU1LSAqL1xcbmFyY2gveDg2L2t2bS9pcnEuYzoxNTY6aW50IGt2bV9jcHVfZ2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXFxuYXJjaC94ODYva3ZtL2lycS5jLTE1Ny17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA2MzM9c3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNzk3LVxcdFxcdGlmIChyKSB7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNzk4OlxcdFxcdFxcdGludCBpcnEgPSBrdm1fY3B1X2dldF9pbnRlcnJ1cHQodmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNzk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxNzoxMC4xOTUyMzIzMjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTYzNzc4NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYGt2bV9jcHVfZ2V0X2ludGVycnVwdGA6XG5cbioqRGl2aW5nIGludG8gSW50ZXJydXB0IFJldHJpZXZhbCB3aXRoIGBrdm1fY3B1X2dldF9pbnRlcnJ1cHRgKipcblxuQWxyaWdodCwgc28gdGhlIGZ1bmN0aW9uIG5hbWUsIGBrdm1fY3B1X2dldF9pbnRlcnJ1cHRgLCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggaW50ZXJydXB0IGhhbmRsaW5nIHdpdGhpbiB0aGUgS1ZNIChLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lKSBjb250ZXh0LiBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoaXMgcHJvYmFibHkgaW52b2x2ZXMgcXVlcnlpbmcgdGhlIHN0YXRlIG9mIHBlbmRpbmcgaW50ZXJydXB0cyBmb3IgYSBzcGVjaWZpYyB2aXJ0dWFsIENQVSAodkNQVSkuIEknbSBndWVzc2luZyB0aGUgY29yZSBwdXJwb3NlIGlzIHRvIGRldGVybWluZSBpZiBhIHBhcnRpY3VsYXIgdkNQVSBoYXMgYW4gaW50ZXJydXB0IHdhaXRpbmcgdG8gYmUgZGVsaXZlcmVkLCBsaWtlbHkgZm9yIGVtdWxhdGluZyBoYXJkd2FyZSBiZWhhdmlvciBvciBoYW5kbGluZyB2aXJ0dWFsIGRldmljZSBldmVudHMuXG5cbkkgaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIEl0J3MgbGlrZWx5IGludGVyYWN0aW5nIHdpdGggc29tZSBzb3J0IG9mIHBlci12Q1BVIGludGVycnVwdCBxdWV1ZSBvciBzaGFkb3cgcmVnaXN0ZXIuIFRoZXJlJ3MgcHJvYmFibHkgYSBtdXRleCBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIGluIHBsYXkgdG8gZW5zdXJlIHRocmVhZCBzYWZldHksIGVzcGVjaWFsbHkgc2luY2UgbXVsdGlwbGUgdGhyZWFkcyB3aXRoaW4gdGhlIGhvc3Qga2VybmVsIGNhbiBwb3RlbnRpYWxseSBpbnRlcmFjdCB3aXRoIGEgdkNQVSdzIGludGVycnVwdCBzdGF0ZS4gVGhlIGZ1bmN0aW9uIGhhcyB0byBiZSBhdG9taWMgYW5kIHRocmVhZCBzYWZlLCBiZWNhdXNlIG90aGVyIHZpcnR1YWwgQ1BVcyBvciB0aGUgaG9zdCBrZXJuZWwgY291bGQgYmUgcG90ZW50aWFsbHkgbW9kaWZ5aW5nIG9yIGNoZWNraW5nIHRoYXQgaW50ZXJydXB0IGF0IHRoZSBzYW1lIHRpbWUuXG5cbkkgc3RhcnQgcnVubmluZyB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzLiBXaGF0IHR5cGUgb2YgaW50ZXJydXB0cyBhcmUgd2UgdGFsa2luZyBhYm91dD8gSGFyZHdhcmUgaW50ZXJydXB0cywgc29mdHdhcmUgaW50ZXJydXB0cywgaW50ZXItcHJvY2Vzc29yIGludGVycnVwdHMgKElQSXMpPyBUaGUgZGVzaWduIGhhcyB0byBiZSBnZW5lcmljIGVub3VnaCB0byBoYW5kbGUgYSByYW5nZSBvZiBpbnRlcnJ1cHQgc291cmNlcyByZWxldmFudCB0byB0aGUgZ3Vlc3QncyBleGVjdXRpb24uIEFyZSB3ZSBwb3RlbnRpYWxseSByZXR1cm5pbmcgYSBzcGVjaWZpYyBpbnRlcnJ1cHQgdmVjdG9yL0lELCBvciBpcyBpdCBtb3JlIG9mIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGFuIGludGVycnVwdD9cblxuQWxzbywgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGUgdkNQVSBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLCBvciBpZiB0aGVyZSdzIGFuIGlzc3VlIGFjY2Vzc2luZyB0aGUgaW50ZXJydXB0IHN0YXRlPyBUaGUgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIHJldHVybiBzb21lIHNvcnQgb2YgZXJyb3IgY29kZSwgb3Igc2lnbmFsIGFuIGVycm9yIGNvbmRpdGlvbiwgd2hpY2ggdGhlIGNhbGxlciBuZWVkcyB0byBhcHByb3ByaWF0ZWx5IGhhbmRsZS4gSG93IGRvZXMgaXQgbWFuYWdlIHJhY2UgY29uZGl0aW9ucyBvciBhdm9pZCBkZWFkbG9jayBzaXR1YXRpb25zP1xuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB0b28uIFRoaXMgaXMgcHJvYmFibHkgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGZyZXF1ZW50bHkgZHVyaW5nIHZDUFUgZXhlY3V0aW9uLCBzbyBtaW5pbWl6aW5nIG92ZXJoZWFkIGlzIGNydWNpYWwuIEFyZSB0aGVyZSBhbnkgb3B0aW1pemF0aW9ucyBpbiBwbGFjZSwgc3VjaCBhcyBwcmUtZmV0Y2hpbmcgaW50ZXJydXB0IGRhdGEgb3IgdXNpbmcgYml0bWFza3MgdG8gcXVpY2tseSBjaGVjayBpbnRlcnJ1cHQgc3RhdHVzP1xuXG5VbHRpbWF0ZWx5LCBteSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gc2l0cyBhdCB0aGUgaGVhcnQgb2YgdGhlIHZpcnR1YWwgaW50ZXJydXB0IGRlbGl2ZXJ5IG1lY2hhbmlzbSwgYW5kIEkgbmVlZCB0byBzZWUgaG93IGl0IGZpdHMgd2l0aGluIHRoZSBsYXJnZXIgS1ZNIGFyY2hpdGVjdHVyZSBhbmQgaG93IGl0IGNvbm5lY3RzIHRvIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBlbXVsYXRpb24uIEknbSBrZWVuIHRvIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIHRvIHNlZSBob3cgdGhlc2UgYXNwZWN0cyBhcmUgYWN0dWFsbHkgaGFuZGxlZCBpbiBwcmFjdGljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQwOCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjE3OjE2LjE1OTAxMzEwMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL2lycS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1MDpcXHR9XFxuIDE1MTpcXHRFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2NwdV9nZXRfZXh0aW50KTtcXG4gMTUyOlxcdFxcbiAxNTM6XFx0LypcXG4gMTU0OlxcdCAqIFJlYWQgcGVuZGluZyBpbnRlcnJ1cHQgdmVjdG9yIGFuZCBpbnRhY2suXFxuIDE1NTpcXHQgKi9cXG4gMTU2OlxcdGludCBrdm1fY3B1X2dldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KVxcbiAxNTc6XFx0e1xcbiAxNTg6XFx0XFx0aW50IHZlY3RvciA9IGt2bV9jcHVfZ2V0X2V4dGludCh2KTtcXG4gMTU5OlxcdFxcdGlmICh2ZWN0b3IgIT0gLTEpXFxuIDE2MDpcXHRcXHRcXHRyZXR1cm4gdmVjdG9yO1xcdFxcdFxcdC8qIFBJQyAqL1xcbiAxNjE6XFx0XFxuIDE2MjpcXHRcXHR2ZWN0b3IgPSBrdm1fYXBpY19oYXNfaW50ZXJydXB0KHYpO1xcdC8qIEFQSUMgKi9cXG4gMTYzOlxcdFxcdGlmICh2ZWN0b3IgIT0gLTEpXFxuIDE2NDpcXHRcXHRcXHRrdm1fYXBpY19hY2tfaW50ZXJydXB0KHYsIHZlY3Rvcik7XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdHJldHVybiB2ZWN0b3I7XFxuIDE2NzpcXHR9XFxuIDE2ODpcXHRcXG4gMTY5OlxcdHZvaWQga3ZtX2luamVjdF9wZW5kaW5nX3RpbWVyX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxNzoxNi4xNTkxNTQ2ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4NjU2MjQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBZGRyZXNzaW5nIGEgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9uIGluIEtWTSBJbnRlcnJ1cHQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUgYW5kIGl0IHNlZW1zIGxpa2UgdGhlcmUncyBhIHBvc3NpYmxlIGlzc3VlIHdpdGggaG93IGludGVycnVwdHMgYXJlIGJlaW5nIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgYGt2bV9jcHVfZ2V0X2ludGVycnVwdGAgY2FuIHJldHVybiAtMSwgYW5kIHRoYXQncyBsaW5rZWQgdG8gd2hhdCBga3ZtX2FwaWNfaGFzX2ludGVycnVwdGAgcmVwb3J0cy4gVGhlIC0xIHJldHVybiBlc3NlbnRpYWxseSBpbmRpY2F0ZXMgdGhlcmUncyBubyBpbnRlcnJ1cHQgcGVuZGluZywgd2hpY2ggaXMgZXhwZWN0ZWQgYmVoYXZpb3IgdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMuXG5cblRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtIGxpZXMgaW4gYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24uIFRoZXJlJ3MgYSBzY2VuYXJpbyB3aGVyZSBga3ZtX2NwdV9oYXNfaW5qZWN0YWJsZV9pbnRyYCBtaWdodCBoYXZlIHJlcG9ydGVkIHRoYXQgYW4gaW50ZXJydXB0ICpjb3VsZCogYmUgaW5qZWN0ZWQsIGJ1dCB0aGVuLCBieSB0aGUgdGltZSBga3ZtX2NwdV9nZXRfaW50ZXJydXB0YCBpcyBjYWxsZWQsIHRoZXJlJ3Mgbm8gaW50ZXJydXB0IGFjdHVhbGx5IHJlYWR5LiBUaGlzIGRpc2NyZXBhbmN5IOKAkyB0aGF0IGJvb2xlYW4gaW5kaWNhdGluZyBcImluamVjdGFibGVcIiBhbmQgdGhlbiBhIC0xIGZyb20gYGdldF9pbnRlcnJ1cHRgIOKAkyBzdWdnZXN0cyBlaXRoZXIgYSB0aW1pbmcgaXNzdWUgb3IsIG1vcmUgY29uY2VybmluZ2x5LCBhbiBpbmNvbnNpc3RlbmN5IGluIHRoZSBpbnRlcm5hbCBzdGF0ZS5cblxuVGhlIHBhdGNoIEknbSBleGFtaW5pbmcgYWRkcmVzc2VzIHRoaXMgYnksIGlmIEknbSB1bmRlcnN0YW5kaW5nIGNvcnJlY3RseSwganVtcGluZyB0byB0aGUgYG91dGAgbGFiZWwgaW4gdGhpcyBzcGVjaWZpYyBzY2VuYXJpby4gVGhlIGBvdXRgIGxhYmVsIHByb2JhYmx5IGludm9sdmVzIHNvbWUgc29ydCBvZiBjbGVhbiB1cCwgYW5kIHJldHVybnMgYSB2YWx1ZSBvZiBzb21lIGtpbmQuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gd2hhdCB0aGUgZnVuY3Rpb24gZG9lcyBleGFjdGx5LiBJJ20gYXNzdW1pbmcgaXQgaGFuZGxlcyBpdCBncmFjZWZ1bGx5LCBwcm9iYWJseSByZXR1cm5pbmcgYSAwIG9yIGVxdWl2YWxlbnQgdG8gc2lnbmlmeSBubyBpbnRlcnJ1cHQgd2FzIHByb2Nlc3NlZCwgZWZmZWN0aXZlbHkgc2lkZXN0ZXBwaW5nIHRoZSBpbmNvbnNpc3RlbmN5LiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFwcHJvYWNoIHRvIGVuc3VyZSB0aGUgc3lzdGVtIHJlbWFpbnMgc3RhYmxlIGFuZCBwcmVkaWN0YWJsZSwgZXZlbiBpbiB0aGUgZmFjZSBvZiB0aGVzZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjczLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6MjAuNDQ1NzIwMTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE5MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgyNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4MjU6XFx0XFx0ICogTW9kZSBldmVudHMgKHNlZSBrdm1faW5qZWN0X3JlYWxtb2RlX2ludGVycnVwdCgpKS5cXG4xMDgyNjpcXHRcXHQgKi9cXG4xMDgyNzpcXHRcXHRXQVJOX09OX09OQ0UodmNwdS1cXHUwMDNlYXJjaC5leGNlcHRpb24ucGVuZGluZyB8fFxcbjEwODI4OlxcdFxcdFxcdCAgICAgdmNwdS1cXHUwMDNlYXJjaC5leGNlcHRpb25fdm1leGl0LnBlbmRpbmcpO1xcbjEwODI5OlxcdFxcdHJldHVybiAwO1xcbjEwODMwOlxcdFxcbjEwODMxOlxcdG91dDpcXG4xMDgzMjpcXHRcXHRpZiAociA9PSAtRUJVU1kpIHtcXG4xMDgzMzpcXHRcXHRcXHQqcmVxX2ltbWVkaWF0ZV9leGl0ID0gdHJ1ZTtcXG4xMDgzNDpcXHRcXHRcXHRyID0gMDtcXG4xMDgzNTpcXHRcXHR9XFxuMTA4MzY6XFx0XFx0cmV0dXJuIHI7XFxuMTA4Mzc6XFx0fVxcbjEwODM4OlxcdFxcbjEwODM5OlxcdHN0YXRpYyB2b2lkIHByb2Nlc3Nfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4xMDg0MDpcXHR7XFxuMTA4NDE6XFx0XFx0dW5zaWduZWQgaW50IGxpbWl0O1xcbjEwODQyOlxcdFxcbjEwODQzOlxcdFxcdC8qXFxuMTA4NDQ6XFx0XFx0ICogeDg2IGlzIGxpbWl0ZWQgdG8gb25lIE5NSSBwZW5kaW5nLCBidXQgYmVjYXVzZSBLVk0gY2FuJ3QgcmVhY3QgdG9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6MjAuNDQ2NjQyNTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMTgzOTUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJldHVybiBWYWx1ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJhY2tpbmcgdGhlIHZhcmlhYmxlIGByYC4gSXQgbG9va3MgbGlrZSBgcmAgaXMgaW5pdGlhbGx5IGFzc2lnbmVkIHRoZSB2YWx1ZSBvZiAxIGJlY2F1c2UgYGlmIChyKWAgZXZhbHVhdGVzIHRvIHRydWUuIEJ1dCB3YWl0LCBJIG5lZWQgdG8gYmFjayB1cCBhIHN0ZXAuIEl0IHNlZW1zIHRoYXQgYHJgIGlzIGFjdHVhbGx5IHNldCBieSB0aGUgcmVzdWx0IG9mIGEgZnVuY3Rpb24gY2FsbDogYGt2bV94ODZfY2FsbGAuIFNvLCBkZXBlbmRpbmcgb24gYGNhbl9pbmplY3RgLCBpdCBlaXRoZXIgZ2V0cyB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsIG9yIGlzIHNldCB0byBgLUVCVVNZYC5cblxuTm93LCBpZiB0aGlzIGByYCBpcyBpbmRlZWQgMSwgdGhlbiB0aGUgYGdvdG8gb3V0O2Agc3RhdGVtZW50IHdpbGwgZW5zdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgMS4gSG1tLCBsZXQgbWUgY29uZmlybS4gWWVzLCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBpcyBpbmRlZWQgYHJgLiBTbywgd2hlbiBgcmAgaXMgMSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgMS5cblxuSSBiZXR0ZXIgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyByZXR1cm4gdmFsdWUgYW5kIHdoZXJlIGl0J3MgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjE3OjI0LjI2ODQ4NDUzM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNzUyOTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTEwNTc1PXN0YXRpYyB2b2lkIGt2bV9pbmplY3RfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDYzMi0gKi9cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA2MzM6c3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDYzNC1cXHRcXHRcXHRcXHQgICAgICAgYm9vbCAqcmVxX2ltbWVkaWF0ZV9leGl0KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwODk0PXZvaWQgX19rdm1fdmNwdV91cGRhdGVfYXBpY3Yoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwOTE5LVxcdCAqIHN0aWxsIGFjdGl2ZSB3aGVuIHRoZSBpbnRlcnJ1cHQgZ290IGFjY2VwdGVkLiBNYWtlIHN1cmVcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA5MjA6XFx0ICoga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzKCkgaXMgY2FsbGVkIHRvIGNoZWNrIGZvciB0aGF0LlxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDkyMS1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMTExMj1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMjk1LVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMTI5NjpcXHRcXHRyID0ga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzKHZjcHUsIFxcdTAwMjZyZXFfaW1tZWRpYXRlX2V4aXQpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMTI5Ny1cXHRcXHRpZiAociBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6MjQuMzgwMjQzNTc1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNzgwODk4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gRXZlbnQgSW5qZWN0aW9uIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBzbmlwcGV0IGZyb20gYHZjcHVfZW50ZXJfZ3Vlc3RgIGFuZCB0cnlpbmcgdG8gZ3Jhc3AgdGhlIGludGVycnVwdCBpbmplY3Rpb24gZmxvdy4gSXQgc3RhcnRzIHdpdGggYSBjYWxsIHRvIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgLiBUaGUgcmV0dXJuIHZhbHVlLCBgcmAsIGlzIGtleSBoZXJlLiBJZiBgcmAgaXMgbGVzcyB0aGFuIHplcm8sIHRoZXJlJ3MgYW4gZXJyb3IsIGFuZCB3ZSBqdW1wIHRvIGBjYW5jZWxfaW5qZWN0aW9uYC4gQnV0IGlmIGByYCBpcyAxLCB0aGUgY29kZSBzaW1wbHkgY29udGludWVzLiBIbW0sIHdoeT9cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBBIHZhbHVlIG9mIDEgZm9yIGByYCBtdXN0IG1lYW4gdGhhdCBgaW50ZXJydXB0X2FsbG93ZWRgIHJldHVybmVkIDEuIFNvLCBpZiB0aGlzIGNvbmRpdGlvbiBpcyBtZXQsIGFuZCBgcmAgcmVtYWlucyBhdCAxLCB0aGUgY29kZSBwcm9jZWVkcyBhbmQgdGhlbiBmaW5hbGx5IHJldHVybnMgMSBhcyB0aGUgb3ZlcmFsbCBmdW5jdGlvbidzIHZhbHVlLiBJcyB0aGlzIGhvdyBpdCByZWFsbHkgd29ya3M/IEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLlxuXG5MZXQncyB0cmFjZSB3aGF0IGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgICpub3JtYWxseSogcmV0dXJucy4gQXQgdGhlIGVuZCBvZiB0aGF0IGZ1bmN0aW9uLCBpZiBpdCByZWFjaGVzIHRoZSBlbmQgYW5kIG5vIGludGVycnVwdHMgYXJlIGluamVjdGVkLCBpdCByZXR1cm5zIDAuIEhvd2V2ZXIsIGlmIHRoZSBmdW5jdGlvbiBqdW1wcyB0byBgb3V0YCB3aXRoIGByYCBiZWluZyAxLCBpdCAqZGVmaW5pdGVseSogcmV0dXJucyAxLlxuXG5JIHRoaW5rIEkgc2VlIGl0IG5vdy4gVGhlIHZhbHVlIG9mIGByYCBkb2Vzbid0IGNoYW5nZSBhZnRlciBpdHMgaW5pdGlhbCBhc3NpZ25tZW50LCBiYXNlZCBvbiB0aGF0IHRlcm5hcnkuIFNvIGByYCBpcyBvbmx5IHNldCB0byB2YWx1ZXMgZ3JlYXRlciB0aGFuIHplcm8sIG9yIGxlc3MgdGhhbiB6ZXJvLiBMZXQncyBzZWUgaWYgYHZjcHVfZW50ZXJfZ3Vlc3RgIGFjdHVhbGx5IGNhcmVzIGFib3V0IGByYCBiZWluZyBncmVhdGVyIHRoYW4gemVyby4gVGhhdCdzIHRoZSBwYXJ0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRvIGNvbmZpcm0gbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NzksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6MjkuNDU4MzM2MDM3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMTc3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMjk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTI5NTpcXHRcXG4xMTI5NjpcXHRcXHRcXHRyID0ga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzKHZjcHUsIFxcdTAwMjZyZXFfaW1tZWRpYXRlX2V4aXQpO1xcbjExMjk3OlxcdFxcdFxcdGlmIChyIFxcdTAwM2MgMCkge1xcbjExMjk4OlxcdFxcdFxcdFxcdHIgPSAwO1xcbjExMjk5OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjExMzAwOlxcdFxcdFxcdH1cXG4xMTMwMTpcXHRcXHRcXHRpZiAocmVxX2ludF93aW4pXFxuMTEzMDI6XFx0XFx0XFx0XFx0a3ZtX3g4Nl9jYWxsKGVuYWJsZV9pcnFfd2luZG93KSh2Y3B1KTtcXG4xMTMwMzpcXHRcXG4xMTMwNDpcXHRcXHRcXHRpZiAoa3ZtX2xhcGljX2VuYWJsZWQodmNwdSkpIHtcXG4xMTMwNTpcXHRcXHRcXHRcXHRrdm1fbGFwaWNfdXBkYXRlX2NyOF9pbnRlcmNlcHQodmNwdSk7XFxuMTEzMDY6XFx0XFx0XFx0XFx0a3ZtX2xhcGljX3N5bmNfdG9fdmFwaWModmNwdSk7XFxuMTEzMDc6XFx0XFx0XFx0fVxcbjExMzA4OlxcdFxcdH1cXG4xMTMwOTpcXHRcXG4xMTMxMDpcXHRcXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XFxuMTEzMTE6XFx0XFx0aWYgKHVubGlrZWx5KHIpKSB7XFxuMTEzMTI6XFx0XFx0XFx0Z290byBjYW5jZWxfaW5qZWN0aW9uO1xcbjExMzEzOlxcdFxcdH1cXG4xMTMxNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6MjkuNDYxNDU5NzI2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NjQxNDU0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBCdWcgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBLVk0gYnVnIGFuZCBob3cgdG8gYmVzdCBmdXp6IGl0LiBUaGUgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSByZXR1cm4gdmFsdWUgaW4gYHZjcHVfZW50ZXJfZ3Vlc3RgIGlzIGNoYW5nZWQsIGJ1dCBpdCBkb2Vzbid0ICpkaXJlY3RseSogYWZmZWN0IHRoZSBmdW5jdGlvbidzIGJlaGF2aW9yLiBUaGUgcmVhbCBpbXBhY3QgaXMgc2tpcHBpbmcgYGVuYWJsZV9pcnFfd2luZG93YCBhbmQgdGhlIHJlc3Qgb2YgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AuXG5cblNvLCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdCBzbyBmYXI6IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIG9idmlvdXNseS4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIGZvY3VzaW5nIGZ1enppbmcgb24gYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AsIGFzIHRoYXQncyB3aGVyZSB0aGUgY2hhbmdlIGFjdHVhbGx5ICpkb2VzKiBzb21ldGhpbmcuIEFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYEtWTWAuIEl0IHNlZW1zIGxpa2UgYEtWTWAgaXMgYWxsIHRoYXQncyByZXF1aXJlZCBoZXJlOyBubyBvdGhlciBjb25maWcgaXMgbmVlZGVkLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpczogYXJlIHRoZXJlICpvdGhlciogZnVuY3Rpb25zIHdlIHNob3VsZCB0YXJnZXQ/IEkgY29uc2lkZXJlZCBga3ZtX2NwdV9nZXRfaW50ZXJydXB0YCwgYnV0IHRoZW4gSSByZWFsaXplZCBgdmNwdV9lbnRlcl9ndWVzdGAgYW5kIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIGFyZSBib3RoIGhvdC1wYXRoIGZ1bmN0aW9ucywgdGhhdCBpcywgdGhleSdyZSBjYWxsZWQgZnJlcXVlbnRseS4gSWRlYWxseSwgdGhlIGZ1enppbmcgc2hvdWxkbid0IGJlIHNrZXdlZCBieSBwaWNraW5nIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhlIHByb21wdCBkb2VzIHNheSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy5cblxuSG93ZXZlciwgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AgKmlzKiB0aGUgb25lIHRoYXQgd2FzIG1vZGlmaWVkLiBJdCdzIGNhbGxlZCBvbiBldmVyeSBWTSBlbnRyeSwgbWFraW5nIGl0IGEgaG90LXBhdGggZnVuY3Rpb24sIGJ1dCBpdCdzICpzcGVjaWZpYyogdG8gdGhpcyBjaGFuZ2UuIEknbSB0b3JuISBJcyBpdCB0b28gZ2VuZXJpYyBvciBub3Q/IFVsdGltYXRlbHksIEkgYmVsaWV2ZSBpdCBpcyBva2F5IHRvIGxpc3QgaXQgaW4gYEZvY3VzU3ltYm9sc2AuXG5cblRoZSBidWcgaXRzZWxmIHJlbGF0ZXMgdG8gYW4gYGlycSA9PSAtMWAgc2l0dWF0aW9uIHdoZW4gYGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cmAgaXMgdHJ1ZSwgd2hpY2ggYXJpc2VzIHdoZW4gdGhlcmUncyBhIHBlbmRpbmcgaW50ZXJydXB0IHRoYXQgZGlzYXBwZWFycyBvciBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbi4gU3RpbGwsIHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9uIHJlbWFpbnMgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AuXG5cblNvIEkndmUgZGVjaWRlZCB0byBsaXN0IGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIGluIGBGb2N1c1N5bWJvbHNgIGFzIGl0J3MgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb24gaW4gdGhpcyBhbmFseXNpcywgZXZlbiB0aG91Z2ggaXQncyBhIGhvdCBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODIzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6MzguMDI1NjA5OTY1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTE2NjYxNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxNzozOC44MTcyODYzMDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwNDE3NzcyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIEludGVycnVwdCBJbmplY3Rpb24gUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgd2UncmUgZGVhbGluZyB3aXRoIGEgS1ZNIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGluZyB0byB0aGUgYEtWTWAgbW9kdWxlLCBhbmQgdGhhdCdzIGdvaW5nIHRvIGJlIGtleSBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNldHVwLlxuXG5UaGUgaGVhcnQgb2YgdGhlIGNoYW5nZSBsaWVzIHdpdGhpbiBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYC4gSXQgc2VlbXMgdGhhdCB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHNjZW5hcmlvIHdoZXJlIGBrdm1fY3B1X2dldF9pbnRlcnJ1cHRgIGlzIHJldHVybmluZyAtMSwgaW5kaWNhdGluZyBubyBwZW5kaW5nIGludGVycnVwdCwgZXZlbiB3aGVuIGBrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHJgIHNheXMgdGhlcmUgKnNob3VsZCogYmUgb25lLiBUaGF0J3MgYW4gaW50ZXJlc3RpbmcgZGlzY3JlcGFuY3kuIFRoZSBjb2RlJ3Mgb3JpZ2luYWwgcmVzcG9uc2Ugd2FzIHRvIHVzZSBgV0FSTl9PTl9PTkNFYCwgYnV0IHRoYXQncyBiZWluZyByZXBsYWNlZCB3aXRoIGEgYGdvdG8gb3V0O2AsIGVmZmVjdGl2ZWx5IHNraXBwaW5nIHRoZSBzdWJzZXF1ZW50IGludGVycnVwdCBpbmplY3Rpb24gc3RlcHMsIHNwZWNpZmljYWxseSB0aGUgYGVuYWJsZV9pcnFfd2luZG93YCBwYXJ0LlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBtb2RpZmljYXRpb24gdG8gS1ZNJ3MgaW50ZXJydXB0IGluamVjdGlvbiBwYXRoLiBBICpmdW5kYW1lbnRhbCogY2hhbmdlIGxpa2UgdGhpcyB3YXJyYW50cyBzb21lIHNlcmlvdXMgc2NydXRpbnkuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgaW50ZXJydXB0cyBhcmUgaGFuZGxlZC4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgcmVncmVzc2lvbnMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzIHdpdGggdGhpcyBraW5kIG9mIGludGVycnVwdCBpbnRlcmFjdGlvbiwgSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gc2V0IHVwIHNvbWUgZnV6emluZyB0byByZWFsbHkgc3RyZXNzLXRlc3QgdGhlIG5ldyBiZWhhdmlvci4gV2UnbGwgbmVlZCB0byBzZXQgdXAgdGhvc2UgdGVzdCByZXN1bHRzIGFuZCByZXZpZXcgdGhlbSBjbG9zZWx5LiBMZXQncyBjYWxsIGl0IHNldC1yZXN1bHRzIGFuZCBnZXQgc3RhcnRlZCBvbiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIwMywiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTc6NDMuODIxNDY4NDY1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMDMzNDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYGt2bV9jcHVfZ2V0X2ludGVycnVwdGAgcmV0dXJucyAtMSAobm8gcGVuZGluZyBpbnRlcnJ1cHQpIGRlc3BpdGUgYGt2bV9jcHVfaGFzX2luamVjdGFibGVfaW50cmAgcmV0dXJuaW5nIHRydWUuIEl0IHJlcGxhY2VzIGEgYFdBUk5fT05fT05DRWAgd2l0aCBhIGBnb3RvIG91dDtgLCBza2lwcGluZyB0aGUgcmVzdCBvZiB0aGUgZXZlbnQgaW5qZWN0aW9uIGxvZ2ljIChsaWtlIGBlbmFibGVfaXJxX3dpbmRvd2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNJ3MgaW50ZXJydXB0IGluamVjdGlvbiBwYXRoIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50c2AgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGBrdm1fY3B1X2dldF9pbnRlcnJ1cHRgIHJldHVybnMgLTEgKG5vIHBlbmRpbmcgaW50ZXJydXB0KSBkZXNwaXRlIGBrdm1fY3B1X2hhc19pbmplY3RhYmxlX2ludHJgIHJldHVybmluZyB0cnVlLiBJdCByZXBsYWNlcyBhIGBXQVJOX09OX09OQ0VgIHdpdGggYSBgZ290byBvdXQ7YCwgc2tpcHBpbmcgdGhlIHJlc3Qgb2YgdGhlIGV2ZW50IGluamVjdGlvbiBsb2dpYyAobGlrZSBgZW5hYmxlX2lycV93aW5kb3dgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSdzIGludGVycnVwdCBpbmplY3Rpb24gcGF0aCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowtq9cs[1] Phase: Succeeded StartedAt: 2026-07-12 13:17:56 +0000 UTC FinishedAt: 2026-07-12 13:17:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-12 13:17:56 +0000 UTC FinishedAt: 2026-07-12 13:17:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2] Phase: Succeeded StartedAt: 2026-07-12 13:17:56 +0000 UTC FinishedAt: 2026-07-12 17:55:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-12 13:17:56 +0000 UTC FinishedAt: 2026-07-12 17:55:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-12 13:17:56 +0000 UTC FinishedAt: 2026-07-12 13:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-12 13:17:56 +0000 UTC FinishedAt: 2026-07-12 13:18:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowtq9cs/series-workflowtq9cs-convert-artifact-48297416/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-12 13:18:48 +0000 UTC FinishedAt: 2026-07-12 13:55:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-12 13:18:48 +0000 UTC FinishedAt: 2026-07-12 13:55:53 +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:*39df6854-cba6-4b46-8de5-bb4d2387ddc8,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-workflowtq9cs/series-workflowtq9cs-convert-artifact-48297416/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": "d1f8a064-cf5f-467f-a194-7be5672e465f", "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-workflowtq9cs/series-workflowtq9cs-build-action-1472127550/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-12 13:18:48 +0000 UTC FinishedAt: 2026-07-12 13:55:43 +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:*39df6854-cba6-4b46-8de5-bb4d2387ddc8,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-workflowtq9cs/series-workflowtq9cs-convert-artifact-48297416/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": "d1f8a064-cf5f-467f-a194-7be5672e465f", "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-workflowtq9cs/series-workflowtq9cs-build-action-1472127550/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-12 13:55:53 +0000 UTC FinishedAt: 2026-07-12 13:55:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-12 13:55:53 +0000 UTC FinishedAt: 2026-07-12 13:55:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-12 13:55:53 +0000 UTC FinishedAt: 2026-07-12 13:56:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-12 13:55:53 +0000 UTC FinishedAt: 2026-07-12 13:55:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowtq9cs/series-workflowtq9cs-convert-artifact-1375479471/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-12 13:56:04 +0000 UTC FinishedAt: 2026-07-12 13:58:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-12 13:56:04 +0000 UTC FinishedAt: 2026-07-12 13:58:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d1f8a064-cf5f-467f-a194-7be5672e465f,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-workflowtq9cs/series-workflowtq9cs-build-action-1472127550/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-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-12 13:58:39 +0000 UTC FinishedAt: 2026-07-12 13:58:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-12 13:58:39 +0000 UTC FinishedAt: 2026-07-12 13:58:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-12 13:58:39 +0000 UTC FinishedAt: 2026-07-12 14:51:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-12 13:58:39 +0000 UTC FinishedAt: 2026-07-12 14:51:43 +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:*39df6854-cba6-4b46-8de5-bb4d2387ddc8,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-workflowtq9cs/series-workflowtq9cs-convert-artifact-1375479471/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": "97144cf4-663b-47aa-ae52-a9c4c4228f7c", "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-workflowtq9cs/series-workflowtq9cs-build-action-1812722243/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-12 13:58:39 +0000 UTC FinishedAt: 2026-07-12 14:51:33 +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:*39df6854-cba6-4b46-8de5-bb4d2387ddc8,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-workflowtq9cs/series-workflowtq9cs-convert-artifact-1375479471/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": "97144cf4-663b-47aa-ae52-a9c4c4228f7c", "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-workflowtq9cs/series-workflowtq9cs-build-action-1812722243/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-12 14:51:43 +0000 UTC FinishedAt: 2026-07-12 14:51:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-12 14:51:43 +0000 UTC FinishedAt: 2026-07-12 14:51:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-12 14:51:43 +0000 UTC FinishedAt: 2026-07-12 14:54:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-12 14:51:43 +0000 UTC FinishedAt: 2026-07-12 14:53:52 +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:*97144cf4-663b-47aa-ae52-a9c4c4228f7c,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-workflowtq9cs/series-workflowtq9cs-build-action-1812722243/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-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-12 14:54:02 +0000 UTC FinishedAt: 2026-07-12 17:55:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-12 14:54:02 +0000 UTC FinishedAt: 2026-07-12 17:55:22 +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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"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:*d1f8a064-cf5f-467f-a194-7be5672e465f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*97144cf4-663b-47aa-ae52-a9c4c4228f7c,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-workflowtq9cs/series-workflowtq9cs-build-action-1472127550/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-workflowtq9cs/series-workflowtq9cs-build-action-1812722243/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-12 14:54:02 +0000 UTC FinishedAt: 2026-07-12 14:54:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-12 14:54:02 +0000 UTC FinishedAt: 2026-07-12 14:54:06 +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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"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-workflowtq9cs/series-workflowtq9cs-convert-artifact-1630876008/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-12 14:54:02 +0000 UTC FinishedAt: 2026-07-12 14:54:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-12 14:54:02 +0000 UTC FinishedAt: 2026-07-12 14:54:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-12 14:54:02 +0000 UTC FinishedAt: 2026-07-12 14:54:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-12 14:54:12 +0000 UTC FinishedAt: 2026-07-12 17:55:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtq9cs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_check_and_inject_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8964811b-89a7-4adf-8d0a-c8256dc048e8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-12 14:54:12 +0000 UTC FinishedAt: 2026-07-12 17:55:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d1f8a064-cf5f-467f-a194-7be5672e465f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*97144cf4-663b-47aa-ae52-a9c4c4228f7c,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-workflowtq9cs/series-workflowtq9cs-build-action-1472127550/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-workflowtq9cs/series-workflowtq9cs-build-action-1812722243/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-workflowtq9cs/series-workflowtq9cs-convert-artifact-1630876008/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,}