Name: series-workflow6rmm6 Phase: Succeeded StartedAt: 2026-08-18 20:38:21 +0000 UTC FinishedAt: 2026-08-19 00:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[0] Phase: Succeeded StartedAt: 2026-08-18 20:38:21 +0000 UTC FinishedAt: 2026-08-18 20:56:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 20:38:21 +0000 UTC FinishedAt: 2026-08-18 20:56:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS", "NET" ], "series_id": "52953883-05ad-4b07-8f5f-e03880c5caeb" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sock_from_file" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZnJvbV9maWxlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayB0byBgYnBmX3NvY2tfZnJvbV9maWxlYCBiZWZvcmUgY2FsbGluZyBgc29ja19mcm9tX2ZpbGUoKWAuIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIHRvIHRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBCUEYgaGVscGVyIGZ1bmN0aW9uIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gY2FsbGVkIGZyb20gYSBCUEYgcHJvZ3JhbSB3aXRoIGEgTlVMTCBmaWxlIHBvaW50ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmOWE4NDEwNDc4YmY3M2UwZmQ4ZDVhYjNjNGVkZTY1MDA0OGY4NTMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMjA6NTU6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMTY4NDU5ODdiMjQ0OS4uN2MzY2FhZTRiYWZjMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTEyMTgyLDcgJiM0MzsxMjE4MiwxMCBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xuIFxuIEJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxuIHtcbi1cdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbiYjNDM7XHRpZiAoZmlsZSlcbiYjNDM7XHRcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7XG4gfVxuIFxuIEJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9zb2NrX2Zyb21fZmlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGNhbGxlZCBmcm9tIGEgQlBGIHByb2dyYW0gd2l0aCBhIE5VTEwgZmlsZSBwb2ludGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjlhODQxMDQ3OGJmNzNlMGZkOGQ1YWIzYzRlZGU2NTAwNDhmODUzMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDIwOjU1OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCAxNjg0NTk4N2IyNDQ5Li43YzNjYWFlNGJhZmMzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMTIxODIsNyAmIzQzOzEyMTgyLDEwIEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX21wdGNwX3NvY2tfcHJvdG8gPSB7CiAKIEJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKQogewotCXJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTsKJiM0MzsJaWYgKGZpbGUpCiYjNDM7CQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7CiYjNDM7CiYjNDM7CXJldHVybiAodW5zaWduZWQgbG9uZylOVUxMOwogfQogCiBCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgSGVscGVyIEZ1bmN0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGJwZl9zb2NrX2Zyb21fZmlsZWAgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFRoYXQgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uIGJlY2F1c2UgQlBGIGhlbHBlciBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsIGZvciBCUEYgcHJvZ3JhbSBmdW5jdGlvbmFsaXR5LCBhbmQgYW55IGNoYW5nZSBoZXJlIGlzIHBvdGVudGlhbGx5IGltcGFjdGZ1bC4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBhIE5VTEwgY2hlY2sgb24gdGhlIGBmaWxlYCBhcmd1bWVudCBiZWZvcmUgaXQmIzM5O3MgcGFzc2VkIHRvIGBzb2NrX2Zyb21fZmlsZWAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGRlZmVuc2l2ZSBtZWFzdXJlLCBwcmVzdW1hYmx5LgoKTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIGBicGZfc29ja19mcm9tX2ZpbGVgIGlzIGEgQlBGICpoZWxwZXIqLCBtZWFuaW5nIEJQRiBwcm9ncmFtcyBkaXJlY3RseSBjYWxsIGl0LiBJdCYjMzk7cyBhbG1vc3QgZ3VhcmFudGVlZCB0byBiZSByZWFjaGFibGUgY29kZSwgYW5kIHRoYXQgbWVhbnMgaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgYW5kIHZ1bG5lcmFiaWxpdHkgYW5hbHlzaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMuCgpTbywgbGV0JiMzOTtzIG5haWwgZG93biBhIGZldyB0aGluZ3MuIEkmIzM5O2xsIHNlYXJjaCBmb3IgY29uZmlnIG9wdGlvbnMgYW5kIGZvY3VzIG15IGF0dGVudGlvbiBvbiByZWxldmFudCBzeW1ib2xzIGxpa2UgdGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmLiBJJiMzOTttIGdvaW5nIHRvIGdyZXAgZm9yIGBicGZfc29ja19mcm9tX2ZpbGVgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGF0IGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc29ja19mcm9tX2ZpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjE3NT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTgyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxODM6QlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE4NC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTAtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5MTpCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcylcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkyLUJURl9JRChzdHJ1Y3QsIHNvY2tldClcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NjpcdC5mdW5jXHRcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTctXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5OC1cdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTk6XHQucmV0X2J0Zl9pZFx0PSBcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkc1swXSxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAwLVx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjAxOlx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzFdLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMDItfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTY5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAqKgoKT2theSwgc28gYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgZmxhZ2dlZCBhcyBhIEJQRiBoZWxwZXIuIFJpZ2h0LCB0aGF0JiMzOTtzIGltcG9ydGFudCBjb250ZXh0LiBUaGF0IG1lYW5zIGl0JiMzOTtzIGEga2VybmVsIGZ1bmN0aW9uIGF2YWlsYWJsZSB3aXRoaW4gYSBCUEYgcHJvZ3JhbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyBsZXZlcmFnZWQgaW4gdGhlIHN5c3RlbS4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGV2ZXJ5d2hlcmUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgYWN0dWFsbHkgKnVzZWQqLiBJJiMzOTtsbCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG9gIGZ1bmN0aW9uIGZvciBub3csIHRvIG5hcnJvdyB0aGUgc2NvcGUgb2YgdGhlIHNlYXJjaC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoZXJlIHdlIGZpbmQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTIxOTM9QlRGX0lEKHN0cnVjdCwgZmlsZSlcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk0LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk2LVx0LmZ1bmNcdFx0PSBicGZfc29ja19mcm9tX2ZpbGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMyMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvYCBpbiB0aGUgS2VybmVsIFNvdXJjZSoqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoZXJlIGBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG9gIGlzIHVzZWQgYWNyb3NzIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIFRoaXMgZnVuY3Rpb24gc2VlbXMgcG90ZW50aWFsbHkgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHNvY2tldC1yZWxhdGVkIEJQRiBwcm9ncmFtcyBhbmQgaW50ZXJhY3Rpb25zLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBzY2FuIGV2ZXJ5dGhpbmcuIEkmIzM5O2xsIG5lZWQgYSBjb21wcmVoZW5zaXZlIHNlYXJjaCwgc28gSSYjMzk7bGwgYmUgc3VyZSB0aGUgc2VhcmNoIHN0YXJ0cyBhdCB0aGUgcm9vdCwgc28gSSB3aWxsIGxpa2VseSB1c2UgYGdyZXAgLXIgJiMzNDticGZfc29ja19mcm9tX2ZpbGVfcHJvdG8mIzM0OyAuYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHBpY3R1cmUsIHBpbnBvaW50aW5nIGFsbCBvY2N1cnJlbmNlcy4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZHJhdyBzb21lIGNvbmNsdXNpb25zIGFib3V0IHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIHByb2JhYmx5IGJlIG1vc3QgaW50ZXJlc3RlZCBpbiBob3cgaXQmIzM5O3MgdXNlZCB3aXRoIEJQRiBoZWxwZXJzIG9yIGluIG5ldHdvcmtpbmcgY29kZSwgZGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLiBUaGUgY29udGV4dCB3aWxsIHRlbGwgbWUgZXZlcnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc29ja19mcm9tX2ZpbGVfcHJvdG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD0zOTI1PWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2t0aW1lX2dldF9jb2Fyc2VfbnNfcHJvdG87XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM5MjY6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG87XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM5MjctZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3NvY2tldF9wdHJfY29va2llX3Byb3RvO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzI2PXRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzU0LVx0Y2FzZSBCUEZfRlVOQ19zb2NrX2Zyb21fZmlsZTpcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNzU1Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3NTYtXHRjYXNlIEJQRl9GVU5DX2dldF9zb2NrZXRfY29va2llOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Ni1cdC5mdW5jXHRcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb246CgoqKlRyYWNpbmcgYW5kIEJQRiBBdmFpbGFiaWxpdHkqKgoKT2theSwgc28gdGhpcyBjb25zdHJ1Y3QsIHdoYXRldmVyICYjMzQ7aXQmIzM0OyBpcywgaXMgY2xlYXJseSBkZWVwbHkgaW50ZWdyYXRlZCB3aXRoIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgYW5kIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGB0cmFjaW5nX3Byb2dfZnVuY19wcm90b2AgaW5zdGFudGx5IHNpZ25hbHMgdGhhdCBpdCYjMzk7cyBhIGtleSBjb21wb25lbnQgZm9yIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byB0YXAgaW50byBhbmQgb2JzZXJ2ZSBrZXJuZWwgZXZlbnRzLiBUaGF04oCZcyBhIGNyaXRpY2FsIGxpbmsgZm9yIGRlYnVnZ2luZywgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGFuZCBzZWN1cml0eS4KCkkgbmVlZCB0byBjb25maXJtIGl0cyBlbmFibGluZyBwcmVyZXF1aXNpdGVzLCB3aGljaCBpcyB3aGF0IHRoZSBjb25maWcgb3B0aW9ucyBpbXBseTogYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfQlBGX0VWRU5UU2AsIGFuZCBgQ09ORklHX05FVGAuIFRob3NlIG1ha2UgcGVyZmVjdCBzZW5zZS4gQlBGIHN5c2NhbGwgc3VwcG9ydCBwcm92aWRlcyB0aGUgaW50ZXJmYWNlLCBldmVudHMgZW5hYmxlcyB0aGUgaG9va3MsIGFuZCBuZXR3b3JrIHN1cHBvcnQgaXMgdmVyeSBvZnRlbiB3aGF04oCZcyBiZWluZyB0cmFjZWQuIFRoZSBuZXR3b3JrIGlzIHVzdWFsbHkgaW52b2x2ZWQgc29tZWhvdy4KCk5vdyBJIG5lZWQgdG8gcGl2b3QgYW5kIGRvdWJsZS1jaGVjayBob3cgbmV0d29ya2luZyBpcyBob29rZWQgdXAgZm9yIEJQRi4gU3BlY2lmaWNhbGx5IEkgbmVlZCB0byBsb29rIGF0IGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggdGhlIG5ldHdvcmsgc3RhY2suIEkgYW50aWNpcGF0ZSB0aGlzIGlzIHdoZXJlIHRoZSBsb3dlci1sZXZlbCBwYWNrZXQgZmlsdGVyaW5nIGFuZCBldmVudCBob29raW5nIGlzIGxpa2VseSBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsdGVyLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVx0XHQgICAgICYjNDM7PSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZToxMzpcdFx0XHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXHRcdFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDM2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLZXJuZWwgQlBGIEludGVncmF0aW9uKioKCk9rYXksIHNvIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgZGVmaW5pdGVseSBhIGNvcmUgY29tcG9uZW50IGlmIG5ldHdvcmtpbmcgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBkZWZpbml0aW9uIG9mIGBicGZfc29ja19mcm9tX2ZpbGVgLCBhbmQgYSBodW5jaCBqdXN0IGhpdCBtZSDigJMgc2luY2UgaXQgZGVhbHMgd2l0aCBmaWxlIGRlc2NyaXB0b3JzIGFuZCBCUEYsIGl0JiMzOTtzIHByb2JhYmx5IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIElzIGl0IGhpZGRlbiBiZWhpbmQgYSBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgZ3VhcmQgb3Igc29tZXRoaW5nIHNpbWlsYXI/IEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBMZXQmIzM5O3MganVtcCBvdmVyIHRvIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDEyMTgyLiBUaGF0IHNob3VsZCBwdXQgbWUgcmlnaHQgaW4gdGhlIHZpY2luaXR5IG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBkZWNsYXJhdGlvbiBvciBkZWZpbml0aW9uIGFuZCBjbGFyaWZ5IHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjE1MDpcdHtcbjEyMTUxOlx0XHQvKiB1bml4X3NvY2sgdHlwZSBpcyBub3QgZ2VuZXJhdGVkIGluIGR3YXJmIGFuZCBoZW5jZSBidGYsXG4xMjE1MjpcdFx0ICogdHJpZ2dlciBhbiBleHBsaWNpdCB0eXBlIGdlbmVyYXRpb24gaGVyZS5cbjEyMTUzOlx0XHQgKi9cbjEyMTU0Olx0XHRCVEZfVFlQRV9FTUlUKHN0cnVjdCB1bml4X3NvY2spO1xuMTIxNTU6XHRcdGlmIChzayBcdTAwMjZcdTAwMjYgc2tfaXNfdW5peChzaykpXG4xMjE1NjpcdFx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc2s7XG4xMjE1NzpcdFxuMTIxNTg6XHRcdHJldHVybiAodW5zaWduZWQgbG9uZylOVUxMO1xuMTIxNTk6XHR9XG4xMjE2MDpcdFxuMTIxNjE6XHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b191bml4X3NvY2tfcHJvdG8gPSB7XG4xMjE2MjpcdFx0LmZ1bmNcdFx0XHQ9IGJwZl9za2NfdG9fdW5peF9zb2NrLFxuMTIxNjM6XHRcdC5ncGxfb25seVx0XHQ9IGZhbHNlLFxuMTIxNjQ6XHRcdC5yZXRfdHlwZVx0XHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXG4xMjE2NTpcdFx0LmFyZzFfdHlwZVx0XHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxuMTIxNjY6XHRcdC5yZXRfYnRmX2lkXHRcdD0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVU5JWF0sXG4xMjE2NzpcdH07XG4xMjE2ODpcdFxuMTIxNjk6XHRCUEZfQ0FMTF8xKGJwZl9za2NfdG9fbXB0Y3Bfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXG4xMjE3MDpcdHtcbjEyMTcxOlx0XHRCVEZfVFlQRV9FTUlUKHN0cnVjdCBtcHRjcF9zb2NrKTtcbjEyMTcyOlx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYnBmX21wdGNwX3NvY2tfZnJvbV9zdWJmbG93KHNrKTtcbjEyMTczOlx0fVxuMTIxNzQ6XHRcbjEyMTc1Olx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHtcbjEyMTc2Olx0XHQuZnVuY1x0XHQ9IGJwZl9za2NfdG9fbXB0Y3Bfc29jayxcbjEyMTc3Olx0XHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4xMjE3ODpcdFx0LnJldF90eXBlXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXG4xMjE3OTpcdFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1NPQ0tfQ09NTU9OLFxuMTIxODA6XHRcdC5yZXRfYnRmX2lkXHQ9IFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX01QVENQXSxcbjEyMTgxOlx0fTtcbjEyMTgyOlx0XG4xMjE4MzpcdEJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxuMTIxODQ6XHR7XG4xMjE4NTpcdFx0aWYgKGZpbGUpXG4xMjE4NjpcdFx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7XG4xMjE4NzpcdFxuMTIxODg6XHRcdHJldHVybiAodW5zaWduZWQgbG9uZylOVUxMO1xuMTIxODk6XHR9XG4xMjE5MDpcdFxuMTIxOTE6XHRCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcylcbjEyMTkyOlx0QlRGX0lEKHN0cnVjdCwgc29ja2V0KVxuMTIxOTM6XHRCVEZfSUQoc3RydWN0LCBmaWxlKVxuMTIxOTQ6XHRcbjEyMTk1Olx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcbjEyMTk2Olx0XHQuZnVuY1x0XHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcbjEyMTk3Olx0XHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4xMjE5ODpcdFx0LnJldF90eXBlXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXG4xMjE5OTpcdFx0LnJldF9idGZfaWRcdD0gXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMF0sXG4xMjIwMDpcdFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbjEyMjAxOlx0XHQuYXJnMV9idGZfaWRcdD0gXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMV0sXG4xMjIwMjpcdH07XG4xMjIwMzpcdFxuMTIyMDQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbjEyMjA1Olx0YnBmX3NrX2Jhc2VfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbjEyMjA2Olx0e1xuMTIyMDc6XHRcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZnVuYztcbjEyMjA4Olx0XG4xMjIwOTpcdFx0c3dpdGNoIChmdW5jX2lkKSB7XG4xMjIxMDpcdFx0Y2FzZSBCUEZfRlVOQ19za2NfdG9fdGNwNl9zb2NrOlxuMTIyMTE6XHRcdFx0ZnVuYyA9IFx1MDAyNmJwZl9za2NfdG9fdGNwNl9zb2NrX3Byb3RvO1xuMTIyMTI6XHRcdFx0YnJlYWs7XG4xMjIxMzpcdFx0Y2FzZSBCUEZfRlVOQ19za2NfdG9fdGNwX3NvY2s6XG4xMjIxNDpcdFx0XHRmdW5jID0gXHUwMDI2YnBmX3NrY190b190Y3Bfc29ja19wcm90bztcbjEyMjE1Olx0XHRcdGJyZWFrO1xuMTIyMTY6XHRcdGNhc2UgQlBGX0ZVTkNfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrOlxuMTIyMTc6XHRcdFx0ZnVuYyA9IFx1MDAyNmJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2tfcHJvdG87XG4xMjIxODpcdFx0XHRicmVhaztcbjEyMjE5Olx0XHRjYXNlIEJQRl9GVU5DX3NrY190b190Y3BfcmVxdWVzdF9zb2NrOlxuMTIyMjA6XHRcdFx0ZnVuYyA9IFx1MDAyNmJwZl9za2NfdG9fdGNwX3JlcXVlc3Rfc29ja19wcm90bztcbjEyMjIxOlx0XHRcdGJyZWFrO1xuMTIyMjI6XHRcdGNhc2UgQlBGX0ZVTkNfc2tjX3RvX3VkcDZfc29jazpcbjEyMjIzOlx0XHRcdGZ1bmMgPSBcdTAwMjZicGZfc2tjX3RvX3VkcDZfc29ja19wcm90bztcbjEyMjI0Olx0XHRcdGJyZWFrO1xuMTIyMjU6XHRcdGNhc2UgQlBGX0ZVTkNfc2tjX3RvX3VuaXhfc29jazpcbjEyMjI2Olx0XHRcdGZ1bmMgPSBcdTAwMjZicGZfc2tjX3RvX3VuaXhfc29ja19wcm90bztcbjEyMjI3Olx0XHRcdGJyZWFrO1xuMTIyMjg6XHRcdGNhc2UgQlBGX0ZVTkNfc2tjX3RvX21wdGNwX3NvY2s6XG4xMjIyOTpcdFx0XHRmdW5jID0gXHUwMDI2YnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvO1xuMTIyMzA6XHRcdFx0YnJlYWs7XG4xMjIzMTpcdFx0Y2FzZSBCUEZfRlVOQ19rdGltZV9nZXRfY29hcnNlX25zOlxuMTIyMzI6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9rdGltZV9nZXRfY29hcnNlX25zX3Byb3RvO1xuMTIyMzM6XHRcdGRlZmF1bHQ6XG4xMjIzNDpcdFx0XHRyZXR1cm4gYnBmX2Jhc2VfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcbjEyMjM1Olx0XHR9XG4xMjIzNjpcdFxuMTIyMzc6XHRcdGlmICghYnBmX3Rva2VuX2NhcGFibGUocHJvZy1cdTAwM2VhdXgtXHUwMDNldG9rZW4sIENBUF9QRVJGTU9OKSlcbjEyMjM4Olx0XHRcdHJldHVybiBOVUxMO1xuMTIyMzk6XHRcbjEyMjQwOlx0XHRyZXR1cm4gZnVuYztcbjEyMjQxOlx0fVxuMTIyNDI6XHRcbjEyMjQzOlx0LyoqXG4xMjI0NDpcdCAqIGJwZl9za2JfbWV0YV9wb2ludGVyKCkgLSBHZXRzIGEgbXV0YWJsZSBwb2ludGVyIHdpdGhpbiB0aGUgc2tiIG1ldGFkYXRhIGFyZWEuXG4xMjI0NTpcdCAqIEBza2I6IHNvY2tldCBidWZmZXIgY2FycnlpbmcgdGhlIG1ldGFkYXRhXG4xMjI0NjpcdCAqIEBvZmZzZXQ6IG9mZnNldCBpbnRvIHRoZSBtZXRhZGF0YSBhcmVhLCBtdXN0IGJlIFx1MDAzYz0gc2tiX21ldGFkYXRhX2xlbigpXG4xMjI0NzpcdCAqL1xuMTIyNDg6XHR2b2lkICpicGZfc2tiX21ldGFfcG9pbnRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2Zmc2V0KVxuMTIyNDk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1OTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBCUEYgRnVuY3Rpb24gQXZhaWxhYmlsaXR5KioKCk9rYXksIHNvIHRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBmdW5jdGlvbiwgcmlnaHQsIHRoYXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBObyBiaWcgZGVhbC4gQnV0LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyBlbnRpcmUgKmZpbGUqLCBgbmV0L2NvcmUvZmlsdGVyLmNgLCBldmVuICpjb21waWxlZCogaW50byB0aGUga2VybmVsIHdlJiMzOTtyZSB3b3JraW5nIHdpdGg/IFNwZWNpZmljYWxseSwgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAgZW5hYmxlZD8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byB2ZXJpZnkuIFRpbWUgdG8gZ28gYmFjayBhbmQgY3Jvc3MtcmVmZXJlbmNlIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgIGFnYWluLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGRlcGVuZGVuY3kgZXhwbGljaXRseS4gR290dGEgbWFrZSBzdXJlIHdlJiMzOTt2ZSBhY3R1YWxseSBnb3QgdGhlIEJQRiBzeXNjYWxsIHN1cHBvcnQgYnVpbHQgaW4gYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBhbnkgZGVlcGVyIGludG8gdGhpcyBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbHRlci5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcdFx0ICAgICAmIzQzOz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk1NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkV4YW1pbmluZyB0aGUgQlBGIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgY29kZSwgYW5kIGl0JiMzOTtzIGNsZWFyIGl0JiMzOTtzIGFsd2F5cyBjb21waWxlZC4gQnV0IGhvbGQgb24sIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYGJwZl9zb2NrX2Zyb21fZmlsZWAsIHdoaWNoIGlzIGEgQlBGIGhlbHBlciBmdW5jdGlvbiwgYW5kIHRoYXQgbWVhbnMgaXQgaW5oZXJlbnRseSByZWxpZXMgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAgdG8gYmUgdHJ1bHkgZnVuY3Rpb25hbC4gSXQmIzM5O3MgdGhlIGx5bmNocGluLgoKSG1tLCB3YWl0IGEgbWludXRlLi4uIEkgcmVjYWxsIHNlZWluZyBgYnBmX3NvY2tfZnJvbV9maWxlYCB1c2VkIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIHNob3VsZCB2ZXJpZnkgdGhhdC4KCk9rYXksIHRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcgaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIEkgbmVlZCB0byBjb25maXJtIGhvdyB0aGUgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGF0IHNwZWNpZmljIHRyYWNlIGZpbGUuIEkgbmVlZCB0byBrbm93IHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhY2UubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvTWFrZWZpbGU9NTQ9S0NPVl9JTlNUUlVNRU5UX3RyYWNlX2lycXNvZmYubyA6PSBuXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTUtXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6NTY6Q0ZMQUdTX2JwZl90cmFjZS5vIDo9IC1JJChzcmMpXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTctXG4tLVxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICYjNDM7PSB0cmFjZV9ldmVudHNfdXNlci5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSAmIzQzOz0gYnBmX3RyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICYjNDM7PSB0cmFjZV9rcHJvYmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDQxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkNoZWNraW5nIEJQRiBFdmVudCBDb25maWd1cmF0aW9uIGZvciBUcmFjaW5nKioKClJpZ2h0LCBzbyBJIGtub3cgSSBuZWVkIGBDT05GSUdfQlBGX0VWRU5UU2AuIFRoYXQgbXVjaCBpcyBjbGVhci4gQW5kLCBvZiBjb3Vyc2UsIHRvIGFjdHVhbGx5ICpkbyogYW55dGhpbmcgd2l0aCBCUEYsIHNwZWNpZmljYWxseSBsb2FkaW5nIHByb2dyYW1zLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXMgd2VsbC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdHJhY2luZyBpcyB1c2luZyB0aGlzIGZ1bmN0aW9uYWxpdHkuICBJJiMzOTttIGdvaW5nIHRvIGdvIHN0cmFpZ2h0IHRvIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGJlY2F1c2UgdGhhdCBzb3VuZHMgbGlrZSB0aGUgcmlnaHQgc3BvdC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgYHRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvYCBkZWNsYXJhdGlvbi4gSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgQlBGIGVsZW1lbnRzIGFyZSBiZWluZyBpbnRlZ3JhdGVkIGludG8gdGhlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUsIGVzcGVjaWFsbHkgc2luY2UgdGhlIGNvZGUgcmVmZXJlbmNlcyBldmVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYWNpbmdfcHJvZ19mdW5jX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzI1PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTcyNjp0cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzI3LXtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTgzND1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyB0cmFjaW5nX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxODM1Olx0LmdldF9mdW5jX3Byb3RvICA9IHRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvLFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4MzYtXHQuaXNfdmFsaWRfYWNjZXNzID0gdHJhY2luZ19wcm9nX2lzX3ZhbGlkX2FjY2VzcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkyMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgYnBmX3NvY2tfZnJvbV9maWxlYCBmb3IgVHJhY2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgYGJwZl9zb2NrX2Zyb21fZmlsZWAgcmVsYXRlcyB0byB0cmFjaW5nLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBgdHJhY2luZ192ZXJpZmllcl9vcHNgLiBJdCBsb29rcyBsaWtlIGB0cmFjaW5nX3Byb2dfZnVuY19wcm90b2AgaXMgdGhlIGtleSBoZXJlIOKAkyB0aGF0JiMzOTtzIHRoZSBicmlkZ2UuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBUaGVyZWZvcmUsIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgYXJlIGBDT05GSUdfQlBGX0VWRU5UU2AgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpCdXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBgQ09ORklHX05FVGAgaXMgYWxtb3N0IGFsd2F5cyBlbmFibGVkLCBzbyBsZXQmIzM5O3MgaW5jbHVkZSBpdCBpbiBvdXIgY29uc2lkZXJhdGlvbnMganVzdCB0byBiZSBzYWZlLiBOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgZGV0YWlsczogSSBzaG91bGQgY2hlY2sgdGhlIHNvdXJjZSBmaWxlIHdoZXJlIGBicGZfc29ja19mcm9tX2ZpbGVgIGlzIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGlmIGl0JiMzOTtzIHBvdGVudGlhbGx5IGNvbmRpdGlvbmFsIGJhc2VkIG9uIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0IHdpbGwgcmV2ZWFsIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgaW5mbHVlbmNpbmcgaXRzIGF2YWlsYWJpbGl0eSBhbmQgdXNlIGZvciB0cmFjaW5nLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc29ja19mcm9tX2ZpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjE3NT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTgyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxODM6QlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE4NC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTAtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5MTpCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcylcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkyLUJURl9JRChzdHJ1Y3QsIHNvY2tldClcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NjpcdC5mdW5jXHRcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTctXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5OC1cdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTk6XHQucmV0X2J0Zl9pZFx0PSBcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkc1swXSxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAwLVx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjAxOlx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzFdLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMDItfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgxMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgbmV0L2NvcmUvZmlsdGVyLmNgKioKCk9rYXksIHRpbWUgdG8gemVybyBpbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgI2lmZGVmYCBibG9ja3MsIHNwZWNpZmljYWxseSB0aG9zZSBhcm91bmQgbGluZSAxMjE4MyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0IGZpbGUmIzM5O3MgYSBjcml0aWNhbCBjb21wb25lbnQsIHNvIHRoZSBjb250ZXh0IGFyb3VuZCB0aGUgZmlsdGVyIGNvZGUgaXMga2V5LiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgc3BlY2lmaWMgbGluZSBpcyB0aGUgZW50cnkgcG9pbnQsIG9yIG1heWJlIHBhcnQgb2YgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzZWN0aW9uIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBmZWF0dXJlIG9yIHBsYXRmb3JtLiBMZXQmIzM5O3Mgc3RhcnQgYnkgdW5kZXJzdGFuZGluZyB3aGF0JiMzOTtzIGJlaW5nIGNvbmRpdGlvbmFsbHkgaW5jbHVkZWQgb3IgZXhjbHVkZWQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHdoYXQgdGhlIGRlZmluZWQgbWFjcm9zIGFyZSBhbmQgd2hhdCBpbXBhY3QgdGhleSBoYXZlIG9uIHRoZSBiZWhhdmlvciBvZiB0aGF0IGNvZGUgYmxvY2suIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgYmFzZWQgb24gaG93IHRoZSBjb2RlIGlzIGNvbXBpbGVkLCBhbmQgdGhlIGdvYWwgd2lsbCBiZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgZGlmZmVyZW5jZXMgb24gdGhlIG92ZXJhbGwgZmlsdGVyaW5nIG1lY2hhbmlzbS4gSSBtaWdodCBhbHNvIGJlIGFudGljaXBhdGluZyBhIGRlYnVnZ2luZyBzY2VuYXJpbyBoZXJlLCBzbyBJJiMzOTtsbCBiZSBvbiB0aGUgbG9va291dCBmb3IgYW55IGNsdWVzIHRvIHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIxMDA6XHRcdC5yZXRfdHlwZVx0XHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXG4xMjEwMTpcdFx0LmFyZzFfdHlwZVx0XHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxuMTIxMDI6XHRcdC5yZXRfYnRmX2lkXHRcdD0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVENQX1RXXSxcbjEyMTAzOlx0fTtcbjEyMTA0Olx0XG4xMjEwNTpcdEJQRl9DQUxMXzEoYnBmX3NrY190b190Y3BfcmVxdWVzdF9zb2NrLCBzdHJ1Y3Qgc29jayAqLCBzaylcbjEyMTA2Olx0e1xuMTIxMDc6XHQjaWZkZWYgQ09ORklHX0lORVRcbjEyMTA4Olx0XHRpZiAoc2sgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3Byb3QgPT0gXHUwMDI2dGNwX3Byb3QgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpXG4xMjEwOTpcdFx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc2s7XG4xMjExMDpcdCNlbmRpZlxuMTIxMTE6XHRcbjEyMTEyOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4xMjExMzpcdFx0aWYgKHNrIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19wcm90ID09IFx1MDAyNnRjcHY2X3Byb3QgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpXG4xMjExNDpcdFx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc2s7XG4xMjExNTpcdCNlbmRpZlxuMTIxMTY6XHRcbjEyMTE3Olx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpTlVMTDtcbjEyMTE4Olx0fVxuMTIxMTk6XHRcbjEyMTIwOlx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fdGNwX3JlcXVlc3Rfc29ja19wcm90byA9IHtcbjEyMTIxOlx0XHQuZnVuY1x0XHRcdD0gYnBmX3NrY190b190Y3BfcmVxdWVzdF9zb2NrLFxuMTIxMjI6XHRcdC5ncGxfb25seVx0XHQ9IGZhbHNlLFxuMTIxMjM6XHRcdC5yZXRfdHlwZVx0XHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXG4xMjEyNDpcdFx0LmFyZzFfdHlwZVx0XHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxuMTIxMjU6XHRcdC5yZXRfYnRmX2lkXHRcdD0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVENQX1JFUV0sXG4xMjEyNjpcdH07XG4xMjEyNzpcdFxuMTIxMjg6XHRCUEZfQ0FMTF8xKGJwZl9za2NfdG9fdWRwNl9zb2NrLCBzdHJ1Y3Qgc29jayAqLCBzaylcbjEyMTI5Olx0e1xuMTIxMzA6XHRcdC8qIHVkcDZfc29jayB0eXBlIGlzIG5vdCBnZW5lcmF0ZWQgaW4gZHdhcmYgYW5kIGhlbmNlIGJ0ZixcbjEyMTMxOlx0XHQgKiB0cmlnZ2VyIGFuIGV4cGxpY2l0IHR5cGUgZ2VuZXJhdGlvbiBoZXJlLlxuMTIxMzI6XHRcdCAqL1xuMTIxMzM6XHRcdEJURl9UWVBFX0VNSVQoc3RydWN0IHVkcDZfc29jayk7XG4xMjEzNDpcdFx0aWYgKHNrIFx1MDAyNlx1MDAyNiBza19mdWxsc29jayhzaykgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQIFx1MDAyNlx1MDAyNlxuMTIxMzU6XHRcdCAgICBzay1cdTAwM2Vza190eXBlID09IFNPQ0tfREdSQU0gXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcbjEyMTM2Olx0XHRcdHJldHVybiAodW5zaWduZWQgbG9uZylzaztcbjEyMTM3Olx0XG4xMjEzODpcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7XG4xMjEzOTpcdH1cbjEyMTQwOlx0XG4xMjE0MTpcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX3VkcDZfc29ja19wcm90byA9IHtcbjEyMTQyOlx0XHQuZnVuY1x0XHRcdD0gYnBmX3NrY190b191ZHA2X3NvY2ssXG4xMjE0MzpcdFx0LmdwbF9vbmx5XHRcdD0gZmFsc2UsXG4xMjE0NDpcdFx0LnJldF90eXBlXHRcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcbjEyMTQ1Olx0XHQuYXJnMV90eXBlXHRcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXG4xMjE0NjpcdFx0LnJldF9idGZfaWRcdFx0PSBcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9VRFA2XSxcbjEyMTQ3Olx0fTtcbjEyMTQ4Olx0XG4xMjE0OTpcdEJQRl9DQUxMXzEoYnBmX3NrY190b191bml4X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxuMTIxNTA6XHR7XG4xMjE1MTpcdFx0LyogdW5peF9zb2NrIHR5cGUgaXMgbm90IGdlbmVyYXRlZCBpbiBkd2FyZiBhbmQgaGVuY2UgYnRmLFxuMTIxNTI6XHRcdCAqIHRyaWdnZXIgYW4gZXhwbGljaXQgdHlwZSBnZW5lcmF0aW9uIGhlcmUuXG4xMjE1MzpcdFx0ICovXG4xMjE1NDpcdFx0QlRGX1RZUEVfRU1JVChzdHJ1Y3QgdW5peF9zb2NrKTtcbjEyMTU1Olx0XHRpZiAoc2sgXHUwMDI2XHUwMDI2IHNrX2lzX3VuaXgoc2spKVxuMTIxNTY6XHRcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXNrO1xuMTIxNTc6XHRcbjEyMTU4Olx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpTlVMTDtcbjEyMTU5Olx0fVxuMTIxNjA6XHRcbjEyMTYxOlx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fdW5peF9zb2NrX3Byb3RvID0ge1xuMTIxNjI6XHRcdC5mdW5jXHRcdFx0PSBicGZfc2tjX3RvX3VuaXhfc29jayxcbjEyMTYzOlx0XHQuZ3BsX29ubHlcdFx0PSBmYWxzZSxcbjEyMTY0Olx0XHQucmV0X3R5cGVcdFx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxuMTIxNjU6XHRcdC5hcmcxX3R5cGVcdFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcbjEyMTY2Olx0XHQucmV0X2J0Zl9pZFx0XHQ9IFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1VOSVhdLFxuMTIxNjc6XHR9O1xuMTIxNjg6XHRcbjEyMTY5Olx0QlBGX0NBTExfMShicGZfc2tjX3RvX21wdGNwX3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxuMTIxNzA6XHR7XG4xMjE3MTpcdFx0QlRGX1RZUEVfRU1JVChzdHJ1Y3QgbXB0Y3Bfc29jayk7XG4xMjE3MjpcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKWJwZl9tcHRjcF9zb2NrX2Zyb21fc3ViZmxvdyhzayk7XG4xMjE3MzpcdH1cbjEyMTc0Olx0XG4xMjE3NTpcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX21wdGNwX3NvY2tfcHJvdG8gPSB7XG4xMjE3NjpcdFx0LmZ1bmNcdFx0PSBicGZfc2tjX3RvX21wdGNwX3NvY2ssXG4xMjE3NzpcdFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuMTIxNzg6XHRcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxuMTIxNzk6XHRcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19TT0NLX0NPTU1PTixcbjEyMTgwOlx0XHQucmV0X2J0Zl9pZFx0PSBcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9NUFRDUF0sXG4xMjE4MTpcdH07XG4xMjE4MjpcdFxuMTIxODM6XHRCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgc3RydWN0IGZpbGUgKiwgZmlsZSlcbjEyMTg0Olx0e1xuMTIxODU6XHRcdGlmIChmaWxlKVxuMTIxODY6XHRcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXNvY2tfZnJvbV9maWxlKGZpbGUpO1xuMTIxODc6XHRcbjEyMTg4Olx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpTlVMTDtcbjEyMTg5Olx0fVxuMTIxOTA6XHRcbjEyMTkxOlx0QlRGX0lEX0xJU1QoYnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHMpXG4xMjE5MjpcdEJURl9JRChzdHJ1Y3QsIHNvY2tldClcbjEyMTkzOlx0QlRGX0lEKHN0cnVjdCwgZmlsZSlcbjEyMTk0Olx0XG4xMjE5NTpcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XG4xMjE5NjpcdFx0LmZ1bmNcdFx0PSBicGZfc29ja19mcm9tX2ZpbGUsXG4xMjE5NzpcdFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuMTIxOTg6XHRcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxuMTIxOTk6XHRcdC5yZXRfYnRmX2lkXHQ9IFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzBdLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA0OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMsIGFuZCBpdCYjMzk7cyBub3QgZ3VhcmRlZCBieSBhbnkgYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIFRoYXQgbWFrZXMgdGhpbmdzIGEgYml0IHNpbXBsZXIuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCBJIG9ubHkgbmVlZCB0byBjb25zaWRlciBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19CUEZfRVZFTlRTYC4gVGhlIGNyaXRpY2FsIHBhcnQgaGVyZSBpcyBgYnBmX3NvY2tfZnJvbV9maWxlYC4KCkhhbmcgb24sIGl0IGxvb2tzIGxpa2UgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgZGVmaW5lZCB1c2luZyBgQlBGX0NBTExfMWAuIFJpZ2h0LCBzbyB0aGUgYWN0dWFsIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzICpqdXN0KiBgYnBmX3NvY2tfZnJvbV9maWxlYC4gSSBzaG91bGQgY29uZmlybSB0aGF0IGBicGZfc29ja19mcm9tX2ZpbGVgICppcyogdGhlIGFjdHVhbCwgZmluYWwgc3ltYm9sIG5hbWUgdGhhdCBnZXRzIGV4cG9zZWQuIE9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vay4gWWVwLCBgQlBGX0NBTExfMWAgKmRvZXMqIHNlZW0gdG8gYmUgZXhwYW5kaW5nIHRvIGBicGZfc29ja19mcm9tX2ZpbGVgIGFzIEkgZXhwZWN0ZWQuCgpXYWl0IGEgc2Vjb25kLiBOb3cgdGhhdCBJ4oCZbSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgQlBGX0NBTExfMWAsIGl0IGV4cGFuZHMgdG8gKmJvdGgqIGBfX19fYnBmX3NvY2tfZnJvbV9maWxlYCBhbmQgYGJwZl9zb2NrX2Zyb21fZmlsZWAuIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBCUEZfQ0FMTF8xYCBtYWNybyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBkdWFsIG5hbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBCUEZfQ0FMTF8xJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI2MD1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjI0LSNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjI1OiNkZWZpbmUgQlBGX0NBTExfMShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDEsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjI2LSNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDIsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBCUEYgRnVuY3Rpb24gQ2FsbHMqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCwgJiMzNDtMZXQmIzM5O3MgY2hlY2sgYEJQRl9DQUxMX3hgLCYjMzQ7IGltbWVkaWF0ZWx5IGhpZ2hsaWdodHMgYSBjcml0aWNhbCBwb2ludDogSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqdGhhdCogcGFydGljdWxhciBCUEYgY2FsbC4gSXQgaW1wbGllcyBhIGRlZXBlciBpbnZlc3RpZ2F0aW9uIGlzIHJlcXVpcmVkIOKAkyB3aGV0aGVyIGl0JiMzOTtzIGEgc3BlY2lmaWMgZnVuY3Rpb24gbnVtYmVyLCBhIHNldCBvZiByZWxhdGVkIGZ1bmN0aW9ucywgb3IgbWF5YmUgZXZlbiBhIHNwZWNpZmljIHVzZS1jYXNlIEkgaGF2ZSBpbiBtaW5kLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgdGhpcyBjYWxsIHByb3ZpZGVzIGFuZCBob3cgaXQgY2FuIGJlIHVzZWQgd2l0aGluIHRoZSBmcmFtZXdvcmsgb2YgQlBGLiBUaGUgJiMzNDt4JiMzNDsgaXMgdGhlIHZhcmlhYmxlOiB3aGF0IGRvZXMgdGhlICYjMzQ7eCYjMzQ7IHJlcHJlc2VudD8gQW4gaW5kZXg/IEEgd2lsZGNhcmQgZm9yIGRpZmZlcmVudCBjYWxscz8gSXRzIHNwZWNpZmljIG1lYW5pbmcgaXMgKmNydWNpYWwqIHRvIHRoZSBuZXh0IHN0ZXBzLiBHb3R0YSBmaWd1cmUgdGhpcyBvdXQgYW5kIGNvbmZpcm0gbXkgYmFzZSB1bmRlcnN0YW5kaW5nLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgQlBGX0NBTExfeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD0yNjA9c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYxMC1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjExOiNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXHRcdFx0XHRcdCAgICAgICBcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MTItXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBCUEYgRmlsdGVyaW5nIFN0cnVjdHVyZXMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIEJQRiBmaWx0ZXJpbmcgaW1wbGVtZW50YXRpb24uIEkgdGhpbmsgSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNjExLiBJIGhhdmUgYSBodW5jaCB0aGF0JiMzOTtzIHdoZXJlIEkgY2FuIGZpbmQgdGhlIGNydWNpYWwgc3RydWN0dXJlcyB0aGF0IGRlZmluZSBob3cgdGhlc2UgZmlsdGVycyBhcmUgb3JnYW5pemVkIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGRhdGEgc3RydWN0dXJlcyB0byBmaWd1cmUgb3V0IGhvdyB0byBkZWJ1ZyB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBCUEYgcHJvZ3JhbSByZXByZXNlbnRhdGlvbiwgdGhlIGNvbnRleHQgc3RydWN0dXJlcywgYW5kIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhLiBLbm93aW5nIGhvdyB0aGVzZSB0aGluZ3MgYXJlIGxhaWQgb3V0IGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhleSBhbGwgd29yayB0b2dldGhlci4gTGV0JiMzOTtzIGdldCByZWFkaW5nIGFuZCBzZWUgd2hhdCB3ZSB1bmNvdmVyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMDpcdFx0XHRcdFx0ICAgICAgKHVuc2lnbmVkIGxvbmcpMCwgKHQpMCkpKSBhXG4gNjAxOlx0I2RlZmluZSBfX0JQRl9WIHZvaWRcbiA2MDI6XHQjZGVmaW5lIF9fQlBGX05cbiA2MDM6XHRcbiA2MDQ6XHQjZGVmaW5lIF9fQlBGX0RFQ0xfQVJHUyh0LCBhKSB0ICAgYVxuIDYwNTpcdCNkZWZpbmUgX19CUEZfREVDTF9SRUdTKHQsIGEpIHU2NCBhXG4gNjA2Olx0XG4gNjA3Olx0I2RlZmluZSBfX0JQRl9QQUQobilcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYwODpcdFx0X19CUEZfTUFQKG4sIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfTiwgdTY0LCBfX3VyXzEsIHU2NCwgX191cl8yLCAgICAgICBcXFxuIDYwOTpcdFx0XHQgIHU2NCwgX191cl8zLCB1NjQsIF9fdXJfNCwgdTY0LCBfX3VyXzUpXG4gNjEwOlx0XG4gNjExOlx0I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjEyOlx0XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjEzOlx0XHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyAgIFxcXG4gNjE0Olx0XHR0eXBlZGVmIHU2NCAoKmJ0Zl8jI25hbWUpKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7IFxcXG4gNjE1Olx0XHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSk7ICAgIFxcXG4gNjE2Olx0XHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSkgICAgIFxcXG4gNjE3Olx0XHR7XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYxODpcdFx0XHRyZXR1cm4gKChidGZfIyNuYW1lKV9fX18jI25hbWUpKF9fQlBGX01BUCh4LF9fQlBGX0NBU1QsX19CUEZfTixfX1ZBX0FSR1NfXykpO1xcXG4gNjE5Olx0XHR9XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYyMDpcdFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYyMTpcdFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKVxuIDYyMjpcdFxuIDYyMzpcdCNkZWZpbmUgX19OT0FUVFJcbiA2MjQ6XHQjZGVmaW5lIEJQRl9DQUxMXzAobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjI1Olx0I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDYyNjpcdCNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDIsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2Mjc6XHQjZGVmaW5lIEJQRl9DQUxMXzMobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjI4Olx0I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDYyOTpcdCNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTaWduaWZpY2FuY2Ugb2YgYGJwZl9zb2NrX2Zyb21fZmlsZWAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgZnVuY3Rpb24gaGVyZSBpcyBgYnBmX3NvY2tfZnJvbV9maWxlYCwgd2hpY2ggaXMgdGhlIGFjdHVhbCAqc3ltYm9sIG5hbWUqLiBBbmQsIGZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYF9fX19icGZfc29ja19mcm9tX2ZpbGVgIGlzIGFuIGlubGluZSB2ZXJzaW9uLCBtYWtpbmcgYGJwZl9zb2NrX2Zyb21fZmlsZWAgdGhlIGNhbGxhYmxlIGZ1bmN0aW9uLgoKU2luY2UgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgYSBCUEYgaGVscGVyLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBCUEYgcHJvZ3JhbXMsIG1ha2luZyBpdCB0aGUgcmlnaHQgc3BvdCB0byBmb2N1cyBvbi4gRm9yZ2V0IGBzb2NrX2Zyb21fZmlsZWAg4oCTIHRoYXQmIzM5O3Mgd2F5IHRvbyBnZW5lcmljLiBUaGlzIGlzIHNwZWNpZmljYWxseSB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLCBhbmQgdGhhdCYjMzk7cyB0aGUga2V5LgoKTGV0IG1lIHN1bW1hcml6ZSBteSBjdXJyZW50IHVuZGVyc3RhbmRpbmc6IFRoaXMgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgdG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAsIHRvIGF2b2lkIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpZiBhIEJQRiBwcm9ncmFtIHBhc3NlcyBpdCBhIE5VTEwgZmlsZSBwb2ludGVyLiBTbywgYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLiBUaGUgYFJlYXNvbmluZ2AgaXMgc29saWQ6IHByZXZlbnRpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgaXMgZGVmaW5pdGVseSBgYnBmX3NvY2tfZnJvbV9maWxlYC4gQXMgZm9yIGBFbmFibGVDb25maWdzYCwgaXQgbG9va3MgbGlrZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0VWRU5UU2AgYXJlIG5lY2Vzc2FyeS4KCkJ1dCwgSSBzaG91bGQgZG91YmxlLWNoZWNrOiBpcyBgYnBmX3NvY2tfZnJvbV9maWxlYCBleHBvcnRlZCBvciBzdGF0aWM/IEFoLCBmb3VuZCBpdCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgOiBJdCYjMzk7cyBkZWZpbmVkIHVzaW5nIGBCUEZfQ0FMTF8xYC4gRXhwYW5kaW5nIHRoYXQgc2hvd3MgaXQgcmVzb2x2ZXMgdG8gYHU2NCBicGZfc29ja19mcm9tX2ZpbGUodTY0IGZpbGUpYCwgd2hpY2ggaXMgbm90IHN0YXRpYyDigJMgaXQmIzM5O3MgYSBnbG9iYWwgc3ltYm9sLiBUaGF0IGNvbmZpcm1zIHRoZSBhbmFseXNpcy4KCkxldCBtZSB0aGluayBhZ2Fpbi4gQXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfRVZFTlRTYCBzdWZmaWNpZW50PyBNYWtlcyBzZW5zZS4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBtdXN0LCBzaW5jZSBpdCYjMzk7cyBuZWVkZWQgZm9yIHRoZSBgYnBmKClgIHN5c2NhbGwgaXRzZWxmLiBBbmQgYENPTkZJR19CUEZfRVZFTlRTYCBpcyBhbHNvIHJlcXVpcmVkIGJlY2F1c2Ugb2YgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgcmVnaXN0ZXJpbmcgYGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90b2AuIE9rYXksIHNlZW1zIGZpbmUsIGJ1dCBhcmUgdGhlcmUgYW55ICpvdGhlciogdXNlcyBvZiBgYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvYCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQmVzdCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MzkyNT1leHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9rdGltZV9nZXRfY29hcnNlX25zX3Byb3RvO1xuaW5jbHVkZS9saW51eC9icGYuaDozOTI2OmV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvO1xuaW5jbHVkZS9saW51eC9icGYuaC0zOTI3LWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zb2NrZXRfcHRyX2Nvb2tpZV9wcm90bztcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcyNj10cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTc1NC1cdGNhc2UgQlBGX0ZVTkNfc29ja19mcm9tX2ZpbGU6XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTc1NTpcdFx0cmV0dXJuIFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9wcm90bztcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzU2LVx0Y2FzZSBCUEZfRlVOQ19nZXRfc29ja2V0X2Nvb2tpZTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjE5Mz1CVEZfSUQoc3RydWN0LCBmaWxlKVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTQtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTYtXHQuZnVuY1x0XHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NzcKCQkJCQkJCW91dHB1dDogMTAzCgkJCQkJCQl0aG91Z2h0czogMjIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKgoKT2theSwgc28gdGhpcyBsb29rcyBsaWtlIGl0JiMzOTtzIGFsbCBjZW50ZXJlZCBhcm91bmQgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIFRoYXQgbmFycm93cyB0aGUgZm9jdXMgY29uc2lkZXJhYmx5LiBJIHNlZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGBDT05GSUdfQlBGX0VWRU5UU2AsIHdoaWNoIG1ha2VzIHNlbnNlIGluIHRoaXMgY29udGV4dC4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0IGBDT05GSUdfTkVUYC4gWWVwLCBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIGludm9sdmVkLCBhbmQgdGhhdCYjMzk7cyBjb21waWxlZCB3aXRoIGBDT05GSUdfTkVUYC4gSXQmIzM5O3MgcHJldHR5IG11Y2ggYSBnaXZlbiB0aGF0IGBDT05GSUdfTkVUYCBpcyBlbmFibGVkIG9uIG1vc3Qgc3lzdGVtcywgc28gaW5jbHVkaW5nIGl0IGlzbiYjMzk7dCBnb2luZyB0byBiZSBhIHByb2JsZW0uIE5vIGhhcm0sIG5vIGZvdWwuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoaXMgcGF0Y2ggaXMgbGFzZXItZm9jdXNlZC4gSXQgc2VlbXMgdG8gYmUgb25seSBtb2RpZnlpbmcgYGJwZl9zb2NrX2Zyb21fZmlsZWAsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuCgpCYXNlZCBvbiBhbGwgdGhpcywgSSYjMzk7ZCBzYXkgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBhZGRpbmcgYSBOVUxMIGNoZWNrIHRvIGBicGZfc29ja19mcm9tX2ZpbGVgIHRvIGd1YXJkIGFnYWluc3QgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGEgY2xhc3NpYyBmdXp6aW5nIHRhcmdldC4gVGhlIEJQRiBoZWxwZXIgaXMgdGhlIHNvbGUgbW9kaWZpZWQgc3ltYm9sLgoKVGhlcmVmb3JlOgoKKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlKioKKiAgICoqUmVhc29uaW5nOiBUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgdG8gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIEJQRiBoZWxwZXIgZnVuY3Rpb24gdG8gcHJldmVudCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBjYWxsZWQgZnJvbSBhIEJQRiBwcm9ncmFtIHdpdGggYSBOVUxMIGZpbGUgcG9pbnRlci4qKgoqICAgKipGb2N1c1N5bWJvbHM6IFsmIzM0O2JwZl9zb2NrX2Zyb21fZmlsZSYjMzQ7XSoqCiogICAqKkVuYWJsZUNvbmZpZ3M6IFsmIzM0O0JQRl9TWVNDQUxMJiMzNDssICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LCAmIzM0O05FVCYjMzQ7XSoqCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9zb2NrX2Zyb21fZmlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGNhbGxlZCBmcm9tIGEgQlBGIHByb2dyYW0gd2l0aCBhIE5VTEwgZmlsZSBwb2ludGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9zb2NrX2Zyb21fZmlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGNhbGxlZCBmcm9tIGEgQlBGIHByb2dyYW0gd2l0aCBhIE5VTEwgZmlsZSBwb2ludGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAgYmVmb3JlIGNhbGxpbmcgYHNvY2tfZnJvbV9maWxlKClgLiBUaGlzIHByZXZlbnRzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBhIG1lbW9yeSBzYWZldHkgaXNzdWUgdGhhdCBpcyBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHRzIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmOWE4NDEwNDc4YmY3M2UwZmQ4ZDVhYjNjNGVkZTY1MDA0OGY4NTMxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMjA6NTU6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDE2ODQ1OTg3YjI0NDkuLjdjM2NhYWU0YmFmYzMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC0xMjE4Miw3ICYjNDM7MTIxODIsMTAgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHsKIAogQlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpCiB7Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nKXNvY2tfZnJvbV9maWxlKGZpbGUpOwomIzQzOwlpZiAoZmlsZSkKJiM0MzsJCXJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTsKJiM0MzsKJiM0MzsJcmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7CiB9CiAKIEJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMQoJCQkJCQkJb3V0cHV0OiAxMjEKCQkJCQkJCXRob3VnaHRzOiAyOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBtb2RpZmljYXRpb24gdG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkgc2VlIGl0JiMzOTtzIGFkZGluZyBhIE5VTEwgY2hlY2sgZm9yIHRoZSBgZmlsZWAgcG9pbnRlciBiZWZvcmUgY2FsbGluZyBgc29ja19mcm9tX2ZpbGVgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyB0ZWNobmlxdWUg4oCTIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgY2hhbmdlIGl0c2VsZiBpcyBzaW1wbGU6IGlmIGBmaWxlYCBpcyBOVUxMLCByZXR1cm4gTlVMTC4KClRoZSBnb29kIHRoaW5nIGlzIHRoaXMga2luZCBvZiBlcnJvciB3b3VsZCBiZSBjYXVnaHQgYnkgdGhlIHVzdWFsIGtlcm5lbCBtZWNoYW5pc21zIOKAkyBhIHBhZ2UgZmF1bHQgb3IgS0FTQU4gd291bGQgaW1tZWRpYXRlbHkgZmxhZyB0aGUgaXNzdWUuIFdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBhbnkgbmV3IGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQgaGVyZSwgb3IgZXZlbiBtb2RpZnlpbmcgYW55IGV4aXN0aW5nIG9uZXMuIEl0JiMzOTtzIGEgY2xlYW4gZml4LgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2gsIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlIGBmaWxlYCBwb2ludGVyIGNvbWVzIGluIGFzIGFuIGFyZ3VtZW50LCBhbmQgYHNvY2tfZnJvbV9maWxlYCBkZWZpbml0ZWx5IGV4cGVjdHMgYSBgc3RydWN0IGZpbGUgKmAuIFdpdGhvdXQgdGhlIGNoZWNrLCBhIE5VTEwgYGZpbGVgIHdvdWxkIGxlYWQgdG8gdGhlIGZ1bmN0aW9uIGRlcmVmZXJlbmNpbmcgdGhlIHBvaW50ZXIsIGFuZCB0aGF0JiMzOTtzIHByZWNpc2VseSB3aGF0IHdlJiMzOTtyZSBhdm9pZGluZy4gV2l0aCB0aGlzIHBhdGNoLCBpZiBgZmlsZWAgaXMgTlVMTCwgd2UganVzdCByZXR1cm4gTlVMTC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZW1lbnQgaGVyZS4KClRoZXJlZm9yZSwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4IGFuZCBsYWNrIG9mIGFueSBLTVNBTi1yZWxhdGVkIGNvbmNlcm5zLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOYCB0byBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayB0byBgYnBmX3NvY2tfZnJvbV9maWxlYCBiZWZvcmUgY2FsbGluZyBgc29ja19mcm9tX2ZpbGUoKWAuIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIHRvIGBicGZfc29ja19mcm9tX2ZpbGVgIGJlZm9yZSBjYWxsaW5nIGBzb2NrX2Zyb21fZmlsZSgpYC4gVGhpcyBwcmV2ZW50cyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgYSBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgaXMgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0cyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMjA6NTU6MTMuMzU5MzM1NTc2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgzNjkyOTI2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9FVkVOVFNcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Zyb21fZmlsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayB0byBgYnBmX3NvY2tfZnJvbV9maWxlYCBiZWZvcmUgY2FsbGluZyBgc29ja19mcm9tX2ZpbGUoKWAuIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgdG8gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIEJQRiBoZWxwZXIgZnVuY3Rpb24gdG8gcHJldmVudCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBjYWxsZWQgZnJvbSBhIEJQRiBwcm9ncmFtIHdpdGggYSBOVUxMIGZpbGUgcG9pbnRlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjA6NTU6MTMuMzU5MzQxMDg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY0ODA3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmOWE4NDEwNDc4YmY3M2UwZmQ4ZDVhYjNjNGVkZTY1MDA0OGY4NTMxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDIwOjU1OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5pbmRleCAxNjg0NTk4N2IyNDQ5Li43YzNjYWFlNGJhZmMzIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXFxuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5AQCAtMTIxODIsNyArMTIxODIsMTAgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHtcXG4gXFxuIEJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxcbiB7XFxuLVxcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcXG4rXFx0aWYgKGZpbGUpXFxuK1xcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcXG4rXFxuK1xcdHJldHVybiAodW5zaWduZWQgbG9uZylOVUxMO1xcbiB9XFxuIFxcbiBCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjA6NTU6MTMuODY2NzQ3MTExWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzEyMDYyNjE5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9FVkVOVFNcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Zyb21fZmlsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIHRvIHRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBCUEYgaGVscGVyIGZ1bmN0aW9uIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gY2FsbGVkIGZyb20gYSBCUEYgcHJvZ3JhbSB3aXRoIGEgTlVMTCBmaWxlIHBvaW50ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY5YTg0MTA0NzhiZjczZTBmZDhkNWFiM2M0ZWRlNjUwMDQ4Zjg1MzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAyMDo1NToxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDE2ODQ1OTg3YjI0NDkuLjdjM2NhYWU0YmFmYzMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0xMjE4Miw3ICsxMjE4MiwxMCBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xuIFxuIEJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxuIHtcbi1cdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbitcdGlmIChmaWxlKVxuK1x0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7XG4rXG4rXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpTlVMTDtcbiB9XG4gXG4gQlRGX0lEX0xJU1QoYnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHMpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NToxMy44NjY3NDg1ODFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU1MDkxMDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBIZWxwZXIgRnVuY3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBicGZfc29ja19mcm9tX2ZpbGVgIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0IGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbiBiZWNhdXNlIEJQRiBoZWxwZXIgZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBmb3IgQlBGIHByb2dyYW0gZnVuY3Rpb25hbGl0eSwgYW5kIGFueSBjaGFuZ2UgaGVyZSBpcyBwb3RlbnRpYWxseSBpbXBhY3RmdWwuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBhIE5VTEwgY2hlY2sgb24gdGhlIGBmaWxlYCBhcmd1bWVudCBiZWZvcmUgaXQncyBwYXNzZWQgdG8gYHNvY2tfZnJvbV9maWxlYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgZGVmZW5zaXZlIG1lYXN1cmUsIHByZXN1bWFibHkuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBgYnBmX3NvY2tfZnJvbV9maWxlYCBpcyBhIEJQRiAqaGVscGVyKiwgbWVhbmluZyBCUEYgcHJvZ3JhbXMgZGlyZWN0bHkgY2FsbCBpdC4gSXQncyBhbG1vc3QgZ3VhcmFudGVlZCB0byBiZSByZWFjaGFibGUgY29kZSwgYW5kIHRoYXQgbWVhbnMgaXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBhbmQgdnVsbmVyYWJpbGl0eSBhbmFseXNpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy5cblxuU28sIGxldCdzIG5haWwgZG93biBhIGZldyB0aGluZ3MuIEknbGwgc2VhcmNoIGZvciBjb25maWcgb3B0aW9ucyBhbmQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHJlbGV2YW50IHN5bWJvbHMgbGlrZSB0aGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYuIEknbSBnb2luZyB0byBncmVwIGZvciBgYnBmX3NvY2tfZnJvbV9maWxlYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHNlZSBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGF0IGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjE3LjkyMTg0MzQxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ5MzgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc29ja19mcm9tX2ZpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTIxNzU9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTgyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTgzOkJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTg0LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTkxOkJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkyLUJURl9JRChzdHJ1Y3QsIHNvY2tldClcXG5uZXQvY29yZS9maWx0ZXIuYz0xMjE5Mz1CVEZfSUQoc3RydWN0LCBmaWxlKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTY6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Ny1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk4LVxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5OTpcXHQucmV0X2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzBdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAwLVxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjAxOlxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzFdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAyLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjE3Ljk4MDM0NDA1N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzcyMzk0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBicGZfc29ja19mcm9tX2ZpbGVgKipcblxuT2theSwgc28gYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgZmxhZ2dlZCBhcyBhIEJQRiBoZWxwZXIuIFJpZ2h0LCB0aGF0J3MgaW1wb3J0YW50IGNvbnRleHQuIFRoYXQgbWVhbnMgaXQncyBhIGtlcm5lbCBmdW5jdGlvbiBhdmFpbGFibGUgd2l0aGluIGEgQlBGIHByb2dyYW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQncyBiZWluZyBsZXZlcmFnZWQgaW4gdGhlIHN5c3RlbS4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGV2ZXJ5d2hlcmUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgYWN0dWFsbHkgKnVzZWQqLiBJJ2xsIHNwZWNpZmljYWxseSBmb2N1cyBvbiB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90b2AgZnVuY3Rpb24gZm9yIG5vdywgdG8gbmFycm93IHRoZSBzY29wZSBvZiB0aGUgc2VhcmNoLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGVyZSB3ZSBmaW5kIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTY5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjA6NTU6MjEuMjE3NTg2MjI5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDk1OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zb2NrX2Zyb21fZmlsZV9wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMjE5Mz1CVEZfSUQoc3RydWN0LCBmaWxlKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTYtXFx0LmZ1bmNcXHRcXHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjA6NTU6MjEuMjY5MDg4NDE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0MTgzMTgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG9gIGluIHRoZSBLZXJuZWwgU291cmNlKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGVyZSBgYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvYCBpcyB1c2VkIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHBvdGVudGlhbGx5IGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBzb2NrZXQtcmVsYXRlZCBCUEYgcHJvZ3JhbXMgYW5kIGludGVyYWN0aW9ucy4gTXkgZmlyc3QgbW92ZSBpcyB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgc2NhbiBldmVyeXRoaW5nLiBJJ2xsIG5lZWQgYSBjb21wcmVoZW5zaXZlIHNlYXJjaCwgc28gSSdsbCBiZSBzdXJlIHRoZSBzZWFyY2ggc3RhcnRzIGF0IHRoZSByb290LCBzbyBJIHdpbGwgbGlrZWx5IHVzZSBgZ3JlcCAtciBcImJwZl9zb2NrX2Zyb21fZmlsZV9wcm90b1wiIC5gLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgY29tcGxldGUgcGljdHVyZSwgcGlucG9pbnRpbmcgYWxsIG9jY3VycmVuY2VzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBkcmF3IHNvbWUgY29uY2x1c2lvbnMgYWJvdXQgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbi4gSSdsbCBwcm9iYWJseSBiZSBtb3N0IGludGVyZXN0ZWQgaW4gaG93IGl0J3MgdXNlZCB3aXRoIEJQRiBoZWxwZXJzIG9yIGluIG5ldHdvcmtpbmcgY29kZSwgZGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLiBUaGUgY29udGV4dCB3aWxsIHRlbGwgbWUgZXZlcnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjI1LjMxMDkyMzIyNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA3MDI4MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zb2NrX2Zyb21fZmlsZV9wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0zOTI1PWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2t0aW1lX2dldF9jb2Fyc2VfbnNfcHJvdG87XFxuaW5jbHVkZS9saW51eC9icGYuaDozOTI2OmV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkyNy1leHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc29ja2V0X3B0cl9jb29raWVfcHJvdG87XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcyNj10cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzU0LVxcdGNhc2UgQlBGX0ZVTkNfc29ja19mcm9tX2ZpbGU6XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3NTU6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfcHJvdG87XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3NTYtXFx0Y2FzZSBCUEZfRlVOQ19nZXRfc29ja2V0X2Nvb2tpZTpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTQtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Ni1cXHQuZnVuY1xcdFxcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NToyNy4zMTc5NTk4NzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQyMjQ5NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKlRyYWNpbmcgYW5kIEJQRiBBdmFpbGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIGNvbnN0cnVjdCwgd2hhdGV2ZXIgXCJpdFwiIGlzLCBpcyBjbGVhcmx5IGRlZXBseSBpbnRlZ3JhdGVkIHdpdGggdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gVGhlIGZhY3QgdGhhdCBpdCdzIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGFuZCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgdHJhY2luZ19wcm9nX2Z1bmNfcHJvdG9gIGluc3RhbnRseSBzaWduYWxzIHRoYXQgaXQncyBhIGtleSBjb21wb25lbnQgZm9yIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byB0YXAgaW50byBhbmQgb2JzZXJ2ZSBrZXJuZWwgZXZlbnRzLiBUaGF04oCZcyBhIGNyaXRpY2FsIGxpbmsgZm9yIGRlYnVnZ2luZywgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGFuZCBzZWN1cml0eS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGVuYWJsaW5nIHByZXJlcXVpc2l0ZXMsIHdoaWNoIGlzIHdoYXQgdGhlIGNvbmZpZyBvcHRpb25zIGltcGx5OiBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19CUEZfRVZFTlRTYCwgYW5kIGBDT05GSUdfTkVUYC4gVGhvc2UgbWFrZSBwZXJmZWN0IHNlbnNlLiBCUEYgc3lzY2FsbCBzdXBwb3J0IHByb3ZpZGVzIHRoZSBpbnRlcmZhY2UsIGV2ZW50cyBlbmFibGVzIHRoZSBob29rcywgYW5kIG5ldHdvcmsgc3VwcG9ydCBpcyB2ZXJ5IG9mdGVuIHdoYXTigJlzIGJlaW5nIHRyYWNlZC4gVGhlIG5ldHdvcmsgaXMgdXN1YWxseSBpbnZvbHZlZCBzb21laG93LlxuXG5Ob3cgSSBuZWVkIHRvIHBpdm90IGFuZCBkb3VibGUtY2hlY2sgaG93IG5ldHdvcmtpbmcgaXMgaG9va2VkIHVwIGZvciBCUEYuIFNwZWNpZmljYWxseSBJIG5lZWQgdG8gbG9vayBhdCBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHNlZSBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGggdGhlIG5ldHdvcmsgc3RhY2suIEkgYW50aWNpcGF0ZSB0aGlzIGlzIHdoZXJlIHRoZSBsb3dlci1sZXZlbCBwYWNrZXQgZmlsdGVyaW5nIGFuZCBldmVudCBob29raW5nIGlzIGxpa2VseSBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjMxLjU2MDIxMjc1NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyMzgzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsdGVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlxcdFxcdFxcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cXHRcXHRcXHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjA6NTU6MzEuNjA5NDYxNjAzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTA4NjQxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBLZXJuZWwgQlBGIEludGVncmF0aW9uKipcblxuT2theSwgc28gYG5ldC9jb3JlL2ZpbHRlci5jYCBpcyBkZWZpbml0ZWx5IGEgY29yZSBjb21wb25lbnQgaWYgbmV0d29ya2luZyBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gSSdtIHRyeWluZyB0byB0cmFjZSB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX3NvY2tfZnJvbV9maWxlYCwgYW5kIGEgaHVuY2gganVzdCBoaXQgbWUg4oCTIHNpbmNlIGl0IGRlYWxzIHdpdGggZmlsZSBkZXNjcmlwdG9ycyBhbmQgQlBGLCBpdCdzIHByb2JhYmx5IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIElzIGl0IGhpZGRlbiBiZWhpbmQgYSBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgZ3VhcmQgb3Igc29tZXRoaW5nIHNpbWlsYXI/IEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBMZXQncyBqdW1wIG92ZXIgdG8gYG5ldC9jb3JlL2ZpbHRlci5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgMTIxODIuIFRoYXQgc2hvdWxkIHB1dCBtZSByaWdodCBpbiB0aGUgdmljaW5pdHkgb2YgdGhlIGZ1bmN0aW9uJ3MgZGVjbGFyYXRpb24gb3IgZGVmaW5pdGlvbiBhbmQgY2xhcmlmeSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NTozNS41MjAzMjk3MjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQyNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMTUwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIxNTA6XFx0e1xcbjEyMTUxOlxcdFxcdC8qIHVuaXhfc29jayB0eXBlIGlzIG5vdCBnZW5lcmF0ZWQgaW4gZHdhcmYgYW5kIGhlbmNlIGJ0ZixcXG4xMjE1MjpcXHRcXHQgKiB0cmlnZ2VyIGFuIGV4cGxpY2l0IHR5cGUgZ2VuZXJhdGlvbiBoZXJlLlxcbjEyMTUzOlxcdFxcdCAqL1xcbjEyMTU0OlxcdFxcdEJURl9UWVBFX0VNSVQoc3RydWN0IHVuaXhfc29jayk7XFxuMTIxNTU6XFx0XFx0aWYgKHNrIFxcdTAwMjZcXHUwMDI2IHNrX2lzX3VuaXgoc2spKVxcbjEyMTU2OlxcdFxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZylzaztcXG4xMjE1NzpcXHRcXG4xMjE1ODpcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpTlVMTDtcXG4xMjE1OTpcXHR9XFxuMTIxNjA6XFx0XFxuMTIxNjE6XFx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fdW5peF9zb2NrX3Byb3RvID0ge1xcbjEyMTYyOlxcdFxcdC5mdW5jXFx0XFx0XFx0PSBicGZfc2tjX3RvX3VuaXhfc29jayxcXG4xMjE2MzpcXHRcXHQuZ3BsX29ubHlcXHRcXHQ9IGZhbHNlLFxcbjEyMTY0OlxcdFxcdC5yZXRfdHlwZVxcdFxcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcXG4xMjE2NTpcXHRcXHQuYXJnMV90eXBlXFx0XFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcXG4xMjE2NjpcXHRcXHQucmV0X2J0Zl9pZFxcdFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1VOSVhdLFxcbjEyMTY3OlxcdH07XFxuMTIxNjg6XFx0XFxuMTIxNjk6XFx0QlBGX0NBTExfMShicGZfc2tjX3RvX21wdGNwX3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxcbjEyMTcwOlxcdHtcXG4xMjE3MTpcXHRcXHRCVEZfVFlQRV9FTUlUKHN0cnVjdCBtcHRjcF9zb2NrKTtcXG4xMjE3MjpcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYnBmX21wdGNwX3NvY2tfZnJvbV9zdWJmbG93KHNrKTtcXG4xMjE3MzpcXHR9XFxuMTIxNzQ6XFx0XFxuMTIxNzU6XFx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHtcXG4xMjE3NjpcXHRcXHQuZnVuY1xcdFxcdD0gYnBmX3NrY190b19tcHRjcF9zb2NrLFxcbjEyMTc3OlxcdFxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuMTIxNzg6XFx0XFx0LnJldF90eXBlXFx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxcbjEyMTc5OlxcdFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fU09DS19DT01NT04sXFxuMTIxODA6XFx0XFx0LnJldF9idGZfaWRcXHQ9IFxcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9NUFRDUF0sXFxuMTIxODE6XFx0fTtcXG4xMjE4MjpcXHRcXG4xMjE4MzpcXHRCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgc3RydWN0IGZpbGUgKiwgZmlsZSlcXG4xMjE4NDpcXHR7XFxuMTIxODU6XFx0XFx0aWYgKGZpbGUpXFxuMTIxODY6XFx0XFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXNvY2tfZnJvbV9maWxlKGZpbGUpO1xcbjEyMTg3OlxcdFxcbjEyMTg4OlxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZylOVUxMO1xcbjEyMTg5OlxcdH1cXG4xMjE5MDpcXHRcXG4xMjE5MTpcXHRCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcylcXG4xMjE5MjpcXHRCVEZfSUQoc3RydWN0LCBzb2NrZXQpXFxuMTIxOTM6XFx0QlRGX0lEKHN0cnVjdCwgZmlsZSlcXG4xMjE5NDpcXHRcXG4xMjE5NTpcXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvID0ge1xcbjEyMTk2OlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfc29ja19mcm9tX2ZpbGUsXFxuMTIxOTc6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4xMjE5ODpcXHRcXHQucmV0X3R5cGVcXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXFxuMTIxOTk6XFx0XFx0LnJldF9idGZfaWRcXHQ9IFxcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkc1swXSxcXG4xMjIwMDpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0JURl9JRCxcXG4xMjIwMTpcXHRcXHQuYXJnMV9idGZfaWRcXHQ9IFxcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkc1sxXSxcXG4xMjIwMjpcXHR9O1xcbjEyMjAzOlxcdFxcbjEyMjA0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbjEyMjA1OlxcdGJwZl9za19iYXNlX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuMTIyMDY6XFx0e1xcbjEyMjA3OlxcdFxcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZnVuYztcXG4xMjIwODpcXHRcXG4xMjIwOTpcXHRcXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcXG4xMjIxMDpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrY190b190Y3A2X3NvY2s6XFxuMTIyMTE6XFx0XFx0XFx0ZnVuYyA9IFxcdTAwMjZicGZfc2tjX3RvX3RjcDZfc29ja19wcm90bztcXG4xMjIxMjpcXHRcXHRcXHRicmVhaztcXG4xMjIxMzpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrY190b190Y3Bfc29jazpcXG4xMjIxNDpcXHRcXHRcXHRmdW5jID0gXFx1MDAyNmJwZl9za2NfdG9fdGNwX3NvY2tfcHJvdG87XFxuMTIyMTU6XFx0XFx0XFx0YnJlYWs7XFxuMTIyMTY6XFx0XFx0Y2FzZSBCUEZfRlVOQ19za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2s6XFxuMTIyMTc6XFx0XFx0XFx0ZnVuYyA9IFxcdTAwMjZicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrX3Byb3RvO1xcbjEyMjE4OlxcdFxcdFxcdGJyZWFrO1xcbjEyMjE5OlxcdFxcdGNhc2UgQlBGX0ZVTkNfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2s6XFxuMTIyMjA6XFx0XFx0XFx0ZnVuYyA9IFxcdTAwMjZicGZfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2tfcHJvdG87XFxuMTIyMjE6XFx0XFx0XFx0YnJlYWs7XFxuMTIyMjI6XFx0XFx0Y2FzZSBCUEZfRlVOQ19za2NfdG9fdWRwNl9zb2NrOlxcbjEyMjIzOlxcdFxcdFxcdGZ1bmMgPSBcXHUwMDI2YnBmX3NrY190b191ZHA2X3NvY2tfcHJvdG87XFxuMTIyMjQ6XFx0XFx0XFx0YnJlYWs7XFxuMTIyMjU6XFx0XFx0Y2FzZSBCUEZfRlVOQ19za2NfdG9fdW5peF9zb2NrOlxcbjEyMjI2OlxcdFxcdFxcdGZ1bmMgPSBcXHUwMDI2YnBmX3NrY190b191bml4X3NvY2tfcHJvdG87XFxuMTIyMjc6XFx0XFx0XFx0YnJlYWs7XFxuMTIyMjg6XFx0XFx0Y2FzZSBCUEZfRlVOQ19za2NfdG9fbXB0Y3Bfc29jazpcXG4xMjIyOTpcXHRcXHRcXHRmdW5jID0gXFx1MDAyNmJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90bztcXG4xMjIzMDpcXHRcXHRcXHRicmVhaztcXG4xMjIzMTpcXHRcXHRjYXNlIEJQRl9GVU5DX2t0aW1lX2dldF9jb2Fyc2VfbnM6XFxuMTIyMzI6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfa3RpbWVfZ2V0X2NvYXJzZV9uc19wcm90bztcXG4xMjIzMzpcXHRcXHRkZWZhdWx0OlxcbjEyMjM0OlxcdFxcdFxcdHJldHVybiBicGZfYmFzZV9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xcbjEyMjM1OlxcdFxcdH1cXG4xMjIzNjpcXHRcXG4xMjIzNzpcXHRcXHRpZiAoIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNldG9rZW4sIENBUF9QRVJGTU9OKSlcXG4xMjIzODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMjIzOTpcXHRcXG4xMjI0MDpcXHRcXHRyZXR1cm4gZnVuYztcXG4xMjI0MTpcXHR9XFxuMTIyNDI6XFx0XFxuMTIyNDM6XFx0LyoqXFxuMTIyNDQ6XFx0ICogYnBmX3NrYl9tZXRhX3BvaW50ZXIoKSAtIEdldHMgYSBtdXRhYmxlIHBvaW50ZXIgd2l0aGluIHRoZSBza2IgbWV0YWRhdGEgYXJlYS5cXG4xMjI0NTpcXHQgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIGNhcnJ5aW5nIHRoZSBtZXRhZGF0YVxcbjEyMjQ2OlxcdCAqIEBvZmZzZXQ6IG9mZnNldCBpbnRvIHRoZSBtZXRhZGF0YSBhcmVhLCBtdXN0IGJlIFxcdTAwM2M9IHNrYl9tZXRhZGF0YV9sZW4oKVxcbjEyMjQ3OlxcdCAqL1xcbjEyMjQ4OlxcdHZvaWQgKmJwZl9za2JfbWV0YV9wb2ludGVyKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmZzZXQpXFxuMTIyNDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NTozNS41MjA5NzM4OTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5MzM3NjI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBCUEYgRnVuY3Rpb24gQXZhaWxhYmlsaXR5KipcblxuT2theSwgc28gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIGZ1bmN0aW9uLCByaWdodCwgdGhhdCdzIGRlZmluZWQgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gTm8gYmlnIGRlYWwuIEJ1dCwgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZW50aXJlICpmaWxlKiwgYG5ldC9jb3JlL2ZpbHRlci5jYCwgZXZlbiAqY29tcGlsZWQqIGludG8gdGhlIGtlcm5lbCB3ZSdyZSB3b3JraW5nIHdpdGg/IFNwZWNpZmljYWxseSwgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAgZW5hYmxlZD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIHZlcmlmeS4gVGltZSB0byBnbyBiYWNrIGFuZCBjcm9zcy1yZWZlcmVuY2UgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgYWdhaW4uIEkgbmVlZCB0byBjb25maXJtIHRoYXQgZGVwZW5kZW5jeSBleHBsaWNpdGx5LiBHb3R0YSBtYWtlIHN1cmUgd2UndmUgYWN0dWFsbHkgZ290IHRoZSBCUEYgc3lzY2FsbCBzdXBwb3J0IGJ1aWx0IGluIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgYW55IGRlZXBlciBpbnRvIHRoaXMgZnVuY3Rpb24ncyBiZWhhdmlvdXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1OTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjM5LjYxNDM1OTI0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTE1ODgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWx0ZXIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NTozOS42NjU1MjU1NThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1MDQ4MjU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRXhhbWluaW5nIHRoZSBCUEYgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY29kZSwgYW5kIGl0J3MgY2xlYXIgaXQncyBhbHdheXMgY29tcGlsZWQuIEJ1dCBob2xkIG9uLCB3ZSdyZSBkZWFsaW5nIHdpdGggYGJwZl9zb2NrX2Zyb21fZmlsZWAsIHdoaWNoIGlzIGEgQlBGIGhlbHBlciBmdW5jdGlvbiwgYW5kIHRoYXQgbWVhbnMgaXQgaW5oZXJlbnRseSByZWxpZXMgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAgdG8gYmUgdHJ1bHkgZnVuY3Rpb25hbC4gSXQncyB0aGUgbHluY2hwaW4uXG5cbkhtbSwgd2FpdCBhIG1pbnV0ZS4uLiBJIHJlY2FsbCBzZWVpbmcgYGJwZl9zb2NrX2Zyb21fZmlsZWAgdXNlZCBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gVGhhdCdzIGludGVyZXN0aW5nLiBJIHNob3VsZCB2ZXJpZnkgdGhhdC5cblxuT2theSwgdGltZSB0byBjaGVjayB0aGUgS2NvbmZpZyBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gSSBuZWVkIHRvIGNvbmZpcm0gaG93IHRoZSBjb25maWd1cmF0aW9uIGludGVyYWN0cyB3aXRoIHRoYXQgc3BlY2lmaWMgdHJhY2UgZmlsZS4gSSBuZWVkIHRvIGtub3cgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGluIHBsYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NTo0NC4wMTYwMTA5OTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTUzNTIwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhY2Uub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6NTY6Q0ZMQUdTX2JwZl90cmFjZS5vIDo9IC1JJChzcmMpXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICs9IHRyYWNlX2V2ZW50c191c2VyLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSArPSBicGZfdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICs9IHRyYWNlX2twcm9iZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjQ0LjQ0NTU1MjM1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODcwMTgwNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQ2hlY2tpbmcgQlBGIEV2ZW50IENvbmZpZ3VyYXRpb24gZm9yIFRyYWNpbmcqKlxuXG5SaWdodCwgc28gSSBrbm93IEkgbmVlZCBgQ09ORklHX0JQRl9FVkVOVFNgLiBUaGF0IG11Y2ggaXMgY2xlYXIuIEFuZCwgb2YgY291cnNlLCB0byBhY3R1YWxseSAqZG8qIGFueXRoaW5nIHdpdGggQlBGLCBzcGVjaWZpY2FsbHkgbG9hZGluZyBwcm9ncmFtcywgSSdtIGdvaW5nIHRvIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXMgd2VsbC4gVGhhdCdzIGEgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRyYWNpbmcgaXMgdXNpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiAgSSdtIGdvaW5nIHRvIGdvIHN0cmFpZ2h0IHRvIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGJlY2F1c2UgdGhhdCBzb3VuZHMgbGlrZSB0aGUgcmlnaHQgc3BvdC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBgdHJhY2luZ19wcm9nX2Z1bmNfcHJvdG9gIGRlY2xhcmF0aW9uLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBCUEYgZWxlbWVudHMgYXJlIGJlaW5nIGludGVncmF0ZWQgaW50byB0aGUgdHJhY2luZyBpbmZyYXN0cnVjdHVyZSwgZXNwZWNpYWxseSBzaW5jZSB0aGUgY29kZSByZWZlcmVuY2VzIGV2ZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ0MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjQ4LjMxNTczNTk5NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyMDExNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJhY2luZ19wcm9nX2Z1bmNfcHJvdG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzI1PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3MjY6dHJhY2luZ19wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3Mjcte1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE4MzQ9Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgdHJhY2luZ192ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE4MzU6XFx0LmdldF9mdW5jX3Byb3RvICA9IHRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvLFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODM2LVxcdC5pc192YWxpZF9hY2Nlc3MgPSB0cmFjaW5nX3Byb2dfaXNfdmFsaWRfYWNjZXNzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NTo0OC4zNjU5NDk3MDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2MzczOTc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgYnBmX3NvY2tfZnJvbV9maWxlYCBmb3IgVHJhY2luZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IGBicGZfc29ja19mcm9tX2ZpbGVgIHJlbGF0ZXMgdG8gdHJhY2luZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYHRyYWNpbmdfdmVyaWZpZXJfb3BzYC4gSXQgbG9va3MgbGlrZSBgdHJhY2luZ19wcm9nX2Z1bmNfcHJvdG9gIGlzIHRoZSBrZXkgaGVyZSDigJMgdGhhdCdzIHRoZSBicmlkZ2UuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBUaGVyZWZvcmUsIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgYXJlIGBDT05GSUdfQlBGX0VWRU5UU2AgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiBObyBzdXJwcmlzZXMgdGhlcmUuXG5cbkJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmcuIGBDT05GSUdfTkVUYCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQsIHNvIGxldCdzIGluY2x1ZGUgaXQgaW4gb3VyIGNvbnNpZGVyYXRpb25zIGp1c3QgdG8gYmUgc2FmZS4gTm93LCBsZXQncyBnZXQgaW50byB0aGUgZGV0YWlsczogSSBzaG91bGQgY2hlY2sgdGhlIHNvdXJjZSBmaWxlIHdoZXJlIGBicGZfc29ja19mcm9tX2ZpbGVgIGlzIGRlZmluZWQuIEknbGwgbmVlZCB0byBzZWUgaWYgaXQncyBwb3RlbnRpYWxseSBjb25kaXRpb25hbCBiYXNlZCBvbiBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcyB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCB3aWxsIHJldmVhbCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIGluZmx1ZW5jaW5nIGl0cyBhdmFpbGFiaWxpdHkgYW5kIHVzZSBmb3IgdHJhY2luZy4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkyMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NTo1Mi43Mjk2OTI1MjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxODE1OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zb2NrX2Zyb21fZmlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMjE3NT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxODItXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxODM6QlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxODQte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTAtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTE6QlRGX0lEX0xJU1QoYnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHMpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTItQlRGX0lEKHN0cnVjdCwgc29ja2V0KVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTQtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NjpcXHQuZnVuY1xcdFxcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk3LVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTgtXFx0LnJldF90eXBlXFx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk5OlxcdC5yZXRfYnRmX2lkXFx0PSBcXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMF0sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMDAtXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19CVEZfSUQsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIyMDE6XFx0LmFyZzFfYnRmX2lkXFx0PSBcXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMV0sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMDItfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjA6NTU6NTIuNzgxNTE0OTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNDk1MzAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYCoqXG5cbk9rYXksIHRpbWUgdG8gemVybyBpbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgI2lmZGVmYCBibG9ja3MsIHNwZWNpZmljYWxseSB0aG9zZSBhcm91bmQgbGluZSAxMjE4MyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0IGZpbGUncyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgc28gdGhlIGNvbnRleHQgYXJvdW5kIHRoZSBmaWx0ZXIgY29kZSBpcyBrZXkuIEknbSBndWVzc2luZyB0aGF0IHNwZWNpZmljIGxpbmUgaXMgdGhlIGVudHJ5IHBvaW50LCBvciBtYXliZSBwYXJ0IG9mIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2VjdGlvbiByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZmVhdHVyZSBvciBwbGF0Zm9ybS4gTGV0J3Mgc3RhcnQgYnkgdW5kZXJzdGFuZGluZyB3aGF0J3MgYmVpbmcgY29uZGl0aW9uYWxseSBpbmNsdWRlZCBvciBleGNsdWRlZC4gSSdsbCBuZWVkIHRvIHNlZSB3aGF0IHRoZSBkZWZpbmVkIG1hY3JvcyBhcmUgYW5kIHdoYXQgaW1wYWN0IHRoZXkgaGF2ZSBvbiB0aGUgYmVoYXZpb3Igb2YgdGhhdCBjb2RlIGJsb2NrLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgYmFzZWQgb24gaG93IHRoZSBjb2RlIGlzIGNvbXBpbGVkLCBhbmQgdGhlIGdvYWwgd2lsbCBiZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgZGlmZmVyZW5jZXMgb24gdGhlIG92ZXJhbGwgZmlsdGVyaW5nIG1lY2hhbmlzbS4gSSBtaWdodCBhbHNvIGJlIGFudGljaXBhdGluZyBhIGRlYnVnZ2luZyBzY2VuYXJpbyBoZXJlLCBzbyBJJ2xsIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgY2x1ZXMgdG8gcG90ZW50aWFsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgxMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjU2LjUwNjQ3MTY4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzE1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIxMDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjEwMDpcXHRcXHQucmV0X3R5cGVcXHRcXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXFxuMTIxMDE6XFx0XFx0LmFyZzFfdHlwZVxcdFxcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXFxuMTIxMDI6XFx0XFx0LnJldF9idGZfaWRcXHRcXHQ9IFxcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9UQ1BfVFddLFxcbjEyMTAzOlxcdH07XFxuMTIxMDQ6XFx0XFxuMTIxMDU6XFx0QlBGX0NBTExfMShicGZfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxcbjEyMTA2OlxcdHtcXG4xMjEwNzpcXHQjaWZkZWYgQ09ORklHX0lORVRcXG4xMjEwODpcXHRcXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcF9wcm90IFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxcbjEyMTA5OlxcdFxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZylzaztcXG4xMjExMDpcXHQjZW5kaWZcXG4xMjExMTpcXHRcXG4xMjExMjpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4xMjExMzpcXHRcXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcHY2X3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpXFxuMTIxMTQ6XFx0XFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXNrO1xcbjEyMTE1OlxcdCNlbmRpZlxcbjEyMTE2OlxcdFxcbjEyMTE3OlxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZylOVUxMO1xcbjEyMTE4OlxcdH1cXG4xMjExOTpcXHRcXG4xMjEyMDpcXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b190Y3BfcmVxdWVzdF9zb2NrX3Byb3RvID0ge1xcbjEyMTIxOlxcdFxcdC5mdW5jXFx0XFx0XFx0PSBicGZfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2ssXFxuMTIxMjI6XFx0XFx0LmdwbF9vbmx5XFx0XFx0PSBmYWxzZSxcXG4xMjEyMzpcXHRcXHQucmV0X3R5cGVcXHRcXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXFxuMTIxMjQ6XFx0XFx0LmFyZzFfdHlwZVxcdFxcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXFxuMTIxMjU6XFx0XFx0LnJldF9idGZfaWRcXHRcXHQ9IFxcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9UQ1BfUkVRXSxcXG4xMjEyNjpcXHR9O1xcbjEyMTI3OlxcdFxcbjEyMTI4OlxcdEJQRl9DQUxMXzEoYnBmX3NrY190b191ZHA2X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxcbjEyMTI5OlxcdHtcXG4xMjEzMDpcXHRcXHQvKiB1ZHA2X3NvY2sgdHlwZSBpcyBub3QgZ2VuZXJhdGVkIGluIGR3YXJmIGFuZCBoZW5jZSBidGYsXFxuMTIxMzE6XFx0XFx0ICogdHJpZ2dlciBhbiBleHBsaWNpdCB0eXBlIGdlbmVyYXRpb24gaGVyZS5cXG4xMjEzMjpcXHRcXHQgKi9cXG4xMjEzMzpcXHRcXHRCVEZfVFlQRV9FTUlUKHN0cnVjdCB1ZHA2X3NvY2spO1xcbjEyMTM0OlxcdFxcdGlmIChzayBcXHUwMDI2XFx1MDAyNiBza19mdWxsc29jayhzaykgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQIFxcdTAwMjZcXHUwMDI2XFxuMTIxMzU6XFx0XFx0ICAgIHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfREdSQU0gXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4xMjEzNjpcXHRcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc2s7XFxuMTIxMzc6XFx0XFxuMTIxMzg6XFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7XFxuMTIxMzk6XFx0fVxcbjEyMTQwOlxcdFxcbjEyMTQxOlxcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX3VkcDZfc29ja19wcm90byA9IHtcXG4xMjE0MjpcXHRcXHQuZnVuY1xcdFxcdFxcdD0gYnBmX3NrY190b191ZHA2X3NvY2ssXFxuMTIxNDM6XFx0XFx0LmdwbF9vbmx5XFx0XFx0PSBmYWxzZSxcXG4xMjE0NDpcXHRcXHQucmV0X3R5cGVcXHRcXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXFxuMTIxNDU6XFx0XFx0LmFyZzFfdHlwZVxcdFxcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXFxuMTIxNDY6XFx0XFx0LnJldF9idGZfaWRcXHRcXHQ9IFxcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9VRFA2XSxcXG4xMjE0NzpcXHR9O1xcbjEyMTQ4OlxcdFxcbjEyMTQ5OlxcdEJQRl9DQUxMXzEoYnBmX3NrY190b191bml4X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxcbjEyMTUwOlxcdHtcXG4xMjE1MTpcXHRcXHQvKiB1bml4X3NvY2sgdHlwZSBpcyBub3QgZ2VuZXJhdGVkIGluIGR3YXJmIGFuZCBoZW5jZSBidGYsXFxuMTIxNTI6XFx0XFx0ICogdHJpZ2dlciBhbiBleHBsaWNpdCB0eXBlIGdlbmVyYXRpb24gaGVyZS5cXG4xMjE1MzpcXHRcXHQgKi9cXG4xMjE1NDpcXHRcXHRCVEZfVFlQRV9FTUlUKHN0cnVjdCB1bml4X3NvY2spO1xcbjEyMTU1OlxcdFxcdGlmIChzayBcXHUwMDI2XFx1MDAyNiBza19pc191bml4KHNrKSlcXG4xMjE1NjpcXHRcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc2s7XFxuMTIxNTc6XFx0XFxuMTIxNTg6XFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7XFxuMTIxNTk6XFx0fVxcbjEyMTYwOlxcdFxcbjEyMTYxOlxcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX3VuaXhfc29ja19wcm90byA9IHtcXG4xMjE2MjpcXHRcXHQuZnVuY1xcdFxcdFxcdD0gYnBmX3NrY190b191bml4X3NvY2ssXFxuMTIxNjM6XFx0XFx0LmdwbF9vbmx5XFx0XFx0PSBmYWxzZSxcXG4xMjE2NDpcXHRcXHQucmV0X3R5cGVcXHRcXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXFxuMTIxNjU6XFx0XFx0LmFyZzFfdHlwZVxcdFxcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXFxuMTIxNjY6XFx0XFx0LnJldF9idGZfaWRcXHRcXHQ9IFxcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9VTklYXSxcXG4xMjE2NzpcXHR9O1xcbjEyMTY4OlxcdFxcbjEyMTY5OlxcdEJQRl9DQUxMXzEoYnBmX3NrY190b19tcHRjcF9zb2NrLCBzdHJ1Y3Qgc29jayAqLCBzaylcXG4xMjE3MDpcXHR7XFxuMTIxNzE6XFx0XFx0QlRGX1RZUEVfRU1JVChzdHJ1Y3QgbXB0Y3Bfc29jayk7XFxuMTIxNzI6XFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKWJwZl9tcHRjcF9zb2NrX2Zyb21fc3ViZmxvdyhzayk7XFxuMTIxNzM6XFx0fVxcbjEyMTc0OlxcdFxcbjEyMTc1OlxcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX21wdGNwX3NvY2tfcHJvdG8gPSB7XFxuMTIxNzY6XFx0XFx0LmZ1bmNcXHRcXHQ9IGJwZl9za2NfdG9fbXB0Y3Bfc29jayxcXG4xMjE3NzpcXHRcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbjEyMTc4OlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcXG4xMjE3OTpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX1NPQ0tfQ09NTU9OLFxcbjEyMTgwOlxcdFxcdC5yZXRfYnRmX2lkXFx0PSBcXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfTVBUQ1BdLFxcbjEyMTgxOlxcdH07XFxuMTIxODI6XFx0XFxuMTIxODM6XFx0QlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXFxuMTIxODQ6XFx0e1xcbjEyMTg1OlxcdFxcdGlmIChmaWxlKVxcbjEyMTg2OlxcdFxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcXG4xMjE4NzpcXHRcXG4xMjE4ODpcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpTlVMTDtcXG4xMjE4OTpcXHR9XFxuMTIxOTA6XFx0XFxuMTIxOTE6XFx0QlRGX0lEX0xJU1QoYnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHMpXFxuMTIxOTI6XFx0QlRGX0lEKHN0cnVjdCwgc29ja2V0KVxcbjEyMTkzOlxcdEJURl9JRChzdHJ1Y3QsIGZpbGUpXFxuMTIxOTQ6XFx0XFxuMTIxOTU6XFx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcXG4xMjE5NjpcXHRcXHQuZnVuY1xcdFxcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxcbjEyMTk3OlxcdFxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuMTIxOTg6XFx0XFx0LnJldF90eXBlXFx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxcbjEyMTk5OlxcdFxcdC5yZXRfYnRmX2lkXFx0PSBcXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMF0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjU2LjUwNjkwNTI1N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjI3MTUwODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMsIGFuZCBpdCdzIG5vdCBndWFyZGVkIGJ5IGFueSBgI2lmZGVmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gVGhhdCBtYWtlcyB0aGluZ3MgYSBiaXQgc2ltcGxlci4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIEkgb25seSBuZWVkIHRvIGNvbnNpZGVyIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0JQRl9FVkVOVFNgLiBUaGUgY3JpdGljYWwgcGFydCBoZXJlIGlzIGBicGZfc29ja19mcm9tX2ZpbGVgLlxuXG5IYW5nIG9uLCBpdCBsb29rcyBsaWtlIGBicGZfc29ja19mcm9tX2ZpbGVgIGlzIGRlZmluZWQgdXNpbmcgYEJQRl9DQUxMXzFgLiBSaWdodCwgc28gdGhlIGFjdHVhbCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyAqanVzdCogYGJwZl9zb2NrX2Zyb21fZmlsZWAuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgYnBmX3NvY2tfZnJvbV9maWxlYCAqaXMqIHRoZSBhY3R1YWwsIGZpbmFsIHN5bWJvbCBuYW1lIHRoYXQgZ2V0cyBleHBvc2VkLiBPa2F5LCBsZXQncyB0YWtlIGEgbG9vay4gWWVwLCBgQlBGX0NBTExfMWAgKmRvZXMqIHNlZW0gdG8gYmUgZXhwYW5kaW5nIHRvIGBicGZfc29ja19mcm9tX2ZpbGVgIGFzIEkgZXhwZWN0ZWQuXG5cbldhaXQgYSBzZWNvbmQuIE5vdyB0aGF0IEnigJltIHRha2luZyBhIGNsb3NlciBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBCUEZfQ0FMTF8xYCwgaXQgZXhwYW5kcyB0byAqYm90aCogYF9fX19icGZfc29ja19mcm9tX2ZpbGVgIGFuZCBgYnBmX3NvY2tfZnJvbV9maWxlYC4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYEJQRl9DQUxMXzFgIG1hY3JvIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGR1YWwgbmFtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NjowMS43MzQwNjAzNjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjY2MzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBCUEZfQ0FMTF8xXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD0yNjA9c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjI0LSNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MjU6I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDEsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYyNi0jZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NjowMS43ODQzMzI2NzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxMzcyNzk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gQlBGIEZ1bmN0aW9uIENhbGxzKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCwgXCJMZXQncyBjaGVjayBgQlBGX0NBTExfeGAsXCIgaW1tZWRpYXRlbHkgaGlnaGxpZ2h0cyBhIGNyaXRpY2FsIHBvaW50OiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mICp0aGF0KiBwYXJ0aWN1bGFyIEJQRiBjYWxsLiBJdCBpbXBsaWVzIGEgZGVlcGVyIGludmVzdGlnYXRpb24gaXMgcmVxdWlyZWQg4oCTIHdoZXRoZXIgaXQncyBhIHNwZWNpZmljIGZ1bmN0aW9uIG51bWJlciwgYSBzZXQgb2YgcmVsYXRlZCBmdW5jdGlvbnMsIG9yIG1heWJlIGV2ZW4gYSBzcGVjaWZpYyB1c2UtY2FzZSBJIGhhdmUgaW4gbWluZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IHRoaXMgY2FsbCBwcm92aWRlcyBhbmQgaG93IGl0IGNhbiBiZSB1c2VkIHdpdGhpbiB0aGUgZnJhbWV3b3JrIG9mIEJQRi4gVGhlIFwieFwiIGlzIHRoZSB2YXJpYWJsZTogd2hhdCBkb2VzIHRoZSBcInhcIiByZXByZXNlbnQ/IEFuIGluZGV4PyBBIHdpbGRjYXJkIGZvciBkaWZmZXJlbnQgY2FsbHM/IEl0cyBzcGVjaWZpYyBtZWFuaW5nIGlzICpjcnVjaWFsKiB0byB0aGUgbmV4dCBzdGVwcy4gR290dGEgZmlndXJlIHRoaXMgb3V0IGFuZCBjb25maXJtIG15IGJhc2UgdW5kZXJzdGFuZGluZy4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTczNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU2OjA1LjQ5ODA2NDQyM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0NTkxNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIEJQRl9DQUxMX3hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI2MD1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MTAtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MTE6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjEyLVxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NjowNS41NDg1MjkxOTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1MDY1NTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBCUEYgRmlsdGVyaW5nIFN0cnVjdHVyZXMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBCUEYgZmlsdGVyaW5nIGltcGxlbWVudGF0aW9uLiBJIHRoaW5rIEknbGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNjExLiBJIGhhdmUgYSBodW5jaCB0aGF0J3Mgd2hlcmUgSSBjYW4gZmluZCB0aGUgY3J1Y2lhbCBzdHJ1Y3R1cmVzIHRoYXQgZGVmaW5lIGhvdyB0aGVzZSBmaWx0ZXJzIGFyZSBvcmdhbml6ZWQgYW5kIG1hbmFnZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGRlYnVnIHRoaXMgcGFydGljdWxhciBpc3N1ZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgQlBGIHByb2dyYW0gcmVwcmVzZW50YXRpb24sIHRoZSBjb250ZXh0IHN0cnVjdHVyZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBtZXRhZGF0YS4gS25vd2luZyBob3cgdGhlc2UgdGhpbmdzIGFyZSBsYWlkIG91dCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXkgYWxsIHdvcmsgdG9nZXRoZXIuIExldCdzIGdldCByZWFkaW5nIGFuZCBzZWUgd2hhdCB3ZSB1bmNvdmVyIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA5NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU2OjA5LjQ5OTE4NzgxMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2MDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MDA6XFx0XFx0XFx0XFx0XFx0ICAgICAgKHVuc2lnbmVkIGxvbmcpMCwgKHQpMCkpKSBhXFxuIDYwMTpcXHQjZGVmaW5lIF9fQlBGX1Ygdm9pZFxcbiA2MDI6XFx0I2RlZmluZSBfX0JQRl9OXFxuIDYwMzpcXHRcXG4gNjA0OlxcdCNkZWZpbmUgX19CUEZfREVDTF9BUkdTKHQsIGEpIHQgICBhXFxuIDYwNTpcXHQjZGVmaW5lIF9fQlBGX0RFQ0xfUkVHUyh0LCBhKSB1NjQgYVxcbiA2MDY6XFx0XFxuIDYwNzpcXHQjZGVmaW5lIF9fQlBGX1BBRChuKVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYwODpcXHRcXHRfX0JQRl9NQVAobiwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9OLCB1NjQsIF9fdXJfMSwgdTY0LCBfX3VyXzIsICAgICAgIFxcXFxcXG4gNjA5OlxcdFxcdFxcdCAgdTY0LCBfX3VyXzMsIHU2NCwgX191cl80LCB1NjQsIF9fdXJfNSlcXG4gNjEwOlxcdFxcbiA2MTE6XFx0I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MTI6XFx0XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYxMzpcXHRcXHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyAgIFxcXFxcXG4gNjE0OlxcdFxcdHR5cGVkZWYgdTY0ICgqYnRmXyMjbmFtZSkoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgXFxcXFxcbiA2MTU6XFx0XFx0YXR0ciB1NjQgbmFtZShfX0JQRl9SRUcoeCwgX19CUEZfREVDTF9SRUdTLCBfX0JQRl9OLCBfX1ZBX0FSR1NfXykpOyAgICBcXFxcXFxuIDYxNjpcXHRcXHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSkgICAgIFxcXFxcXG4gNjE3OlxcdFxcdHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MTg6XFx0XFx0XFx0cmV0dXJuICgoYnRmXyMjbmFtZSlfX19fIyNuYW1lKShfX0JQRl9NQVAoeCxfX0JQRl9DQVNULF9fQlBGX04sX19WQV9BUkdTX18pKTtcXFxcXFxuIDYxOTpcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjIwOlxcdFxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MjE6XFx0XFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKVxcbiA2MjI6XFx0XFxuIDYyMzpcXHQjZGVmaW5lIF9fTk9BVFRSXFxuIDYyNDpcXHQjZGVmaW5lIEJQRl9DQUxMXzAobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2MjU6XFx0I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDEsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjI2OlxcdCNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgyLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDYyNzpcXHQjZGVmaW5lIEJQRl9DQUxMXzMobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMywgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2Mjg6XFx0I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDQsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjI5OlxcdCNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg1LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU2OjA5LjQ5OTM2MDQzMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTM1ODY1OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2lnbmlmaWNhbmNlIG9mIGBicGZfc29ja19mcm9tX2ZpbGVgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBmdW5jdGlvbiBoZXJlIGlzIGBicGZfc29ja19mcm9tX2ZpbGVgLCB3aGljaCBpcyB0aGUgYWN0dWFsICpzeW1ib2wgbmFtZSouIEFuZCwgZnJvbSB3aGF0IEknbSBzZWVpbmcsIGBfX19fYnBmX3NvY2tfZnJvbV9maWxlYCBpcyBhbiBpbmxpbmUgdmVyc2lvbiwgbWFraW5nIGBicGZfc29ja19mcm9tX2ZpbGVgIHRoZSBjYWxsYWJsZSBmdW5jdGlvbi5cblxuU2luY2UgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgYSBCUEYgaGVscGVyLCBpdCdzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgY2FsbGVkIGZyb20gd2l0aGluIEJQRiBwcm9ncmFtcywgbWFraW5nIGl0IHRoZSByaWdodCBzcG90IHRvIGZvY3VzIG9uLiBGb3JnZXQgYHNvY2tfZnJvbV9maWxlYCDigJMgdGhhdCdzIHdheSB0b28gZ2VuZXJpYy4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkLCBhbmQgdGhhdCdzIHRoZSBrZXkuXG5cbkxldCBtZSBzdW1tYXJpemUgbXkgY3VycmVudCB1bmRlcnN0YW5kaW5nOiBUaGlzIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIHRvIGBicGZfc29ja19mcm9tX2ZpbGVgLCB0byBhdm9pZCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaWYgYSBCUEYgcHJvZ3JhbSBwYXNzZXMgaXQgYSBOVUxMIGZpbGUgcG9pbnRlci4gU28sIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC4gVGhlIGBSZWFzb25pbmdgIGlzIHNvbGlkOiBwcmV2ZW50aW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBBbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGlzIGRlZmluaXRlbHkgYGJwZl9zb2NrX2Zyb21fZmlsZWAuIEFzIGZvciBgRW5hYmxlQ29uZmlnc2AsIGl0IGxvb2tzIGxpa2UgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9FVkVOVFNgIGFyZSBuZWNlc3NhcnkuXG5cbkJ1dCwgSSBzaG91bGQgZG91YmxlLWNoZWNrOiBpcyBgYnBmX3NvY2tfZnJvbV9maWxlYCBleHBvcnRlZCBvciBzdGF0aWM/IEFoLCBmb3VuZCBpdCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgOiBJdCdzIGRlZmluZWQgdXNpbmcgYEJQRl9DQUxMXzFgLiBFeHBhbmRpbmcgdGhhdCBzaG93cyBpdCByZXNvbHZlcyB0byBgdTY0IGJwZl9zb2NrX2Zyb21fZmlsZSh1NjQgZmlsZSlgLCB3aGljaCBpcyBub3Qgc3RhdGljIOKAkyBpdCdzIGEgZ2xvYmFsIHN5bWJvbC4gVGhhdCBjb25maXJtcyB0aGUgYW5hbHlzaXMuXG5cbkxldCBtZSB0aGluayBhZ2Fpbi4gQXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfRVZFTlRTYCBzdWZmaWNpZW50PyBNYWtlcyBzZW5zZS4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBtdXN0LCBzaW5jZSBpdCdzIG5lZWRlZCBmb3IgdGhlIGBicGYoKWAgc3lzY2FsbCBpdHNlbGYuIEFuZCBgQ09ORklHX0JQRl9FVkVOVFNgIGlzIGFsc28gcmVxdWlyZWQgYmVjYXVzZSBvZiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCByZWdpc3RlcmluZyBgYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvYC4gT2theSwgc2VlbXMgZmluZSwgYnV0IGFyZSB0aGVyZSBhbnkgKm90aGVyKiB1c2VzIG9mIGBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG9gIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGJlIHRob3JvdWdoLiBJJ2xsIG5lZWQgdG8gY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjA6NTY6MTcuMDM1MjI5MzYyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk2OTYyODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zb2NrX2Zyb21fZmlsZV9wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0zOTI1PWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2t0aW1lX2dldF9jb2Fyc2VfbnNfcHJvdG87XFxuaW5jbHVkZS9saW51eC9icGYuaDozOTI2OmV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkyNy1leHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc29ja2V0X3B0cl9jb29raWVfcHJvdG87XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcyNj10cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzU0LVxcdGNhc2UgQlBGX0ZVTkNfc29ja19mcm9tX2ZpbGU6XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3NTU6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfcHJvdG87XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3NTYtXFx0Y2FzZSBCUEZfRlVOQ19nZXRfc29ja2V0X2Nvb2tpZTpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTQtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Ni1cXHQuZnVuY1xcdFxcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NjoxOS4wMzIyMDE4MjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk1NDY3NDQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gdGhpcyBsb29rcyBsaWtlIGl0J3MgYWxsIGNlbnRlcmVkIGFyb3VuZCBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gVGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBjb25zaWRlcmFibHkuIEkgc2VlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYENPTkZJR19CUEZfRVZFTlRTYCwgd2hpY2ggbWFrZXMgc2Vuc2UgaW4gdGhpcyBjb250ZXh0LlxuXG5Ob3csIGxldCdzIHNlZSBpZiB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0IGBDT05GSUdfTkVUYC4gWWVwLCBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIGludm9sdmVkLCBhbmQgdGhhdCdzIGNvbXBpbGVkIHdpdGggYENPTkZJR19ORVRgLiBJdCdzIHByZXR0eSBtdWNoIGEgZ2l2ZW4gdGhhdCBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCBvbiBtb3N0IHN5c3RlbXMsIHNvIGluY2x1ZGluZyBpdCBpc24ndCBnb2luZyB0byBiZSBhIHByb2JsZW0uIE5vIGhhcm0sIG5vIGZvdWwuXG5cbkFscmlnaHQsIGxldCdzIG1ha2Ugc3VyZSB0aGlzIHBhdGNoIGlzIGxhc2VyLWZvY3VzZWQuIEl0IHNlZW1zIHRvIGJlIG9ubHkgbW9kaWZ5aW5nIGBicGZfc29ja19mcm9tX2ZpbGVgLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkLlxuXG5CYXNlZCBvbiBhbGwgdGhpcywgSSdkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIGFkZGluZyBhIE5VTEwgY2hlY2sgdG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAgdG8gZ3VhcmQgYWdhaW5zdCBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSwgYSBjbGFzc2ljIGZ1enppbmcgdGFyZ2V0LiBUaGUgQlBGIGhlbHBlciBpcyB0aGUgc29sZSBtb2RpZmllZCBzeW1ib2wuXG5cblRoZXJlZm9yZTpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlKipcbiogICAqKlJlYXNvbmluZzogVGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIHRvIHRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBCUEYgaGVscGVyIGZ1bmN0aW9uIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gY2FsbGVkIGZyb20gYSBCUEYgcHJvZ3JhbSB3aXRoIGEgTlVMTCBmaWxlIHBvaW50ZXIuKipcbiogICAqKkZvY3VzU3ltYm9sczogW1wiYnBmX3NvY2tfZnJvbV9maWxlXCJdKipcbiogICAqKkVuYWJsZUNvbmZpZ3M6IFtcIkJQRl9TWVNDQUxMXCIsIFwiQlBGX0VWRU5UU1wiLCBcIk5FVFwiXSoqXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDc3LCJPdXRwdXRUb2tlbnMiOjEwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NjoyNC45ODY4Nzk1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYxMjU3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc29ja19mcm9tX2ZpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGNhbGxlZCBmcm9tIGEgQlBGIHByb2dyYW0gd2l0aCBhIE5VTEwgZmlsZSBwb2ludGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc29ja19mcm9tX2ZpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGNhbGxlZCBmcm9tIGEgQlBGIHByb2dyYW0gd2l0aCBhIE5VTEwgZmlsZSBwb2ludGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NjoyNS4wNzMwMTI4MzdaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NTU2MDI3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NjoyNS4wNzM2NzEyNDdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjY1NDkzOTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayB0byBgYnBmX3NvY2tfZnJvbV9maWxlYCBiZWZvcmUgY2FsbGluZyBgc29ja19mcm9tX2ZpbGUoKWAuIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjlhODQxMDQ3OGJmNzNlMGZkOGQ1YWIzYzRlZGU2NTAwNDhmODUzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDIwOjU1OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMTY4NDU5ODdiMjQ0OS4uN2MzY2FhZTRiYWZjMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTEyMTgyLDcgKzEyMTgyLDEwIEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX21wdGNwX3NvY2tfcHJvdG8gPSB7XG4gXG4gQlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXG4ge1xuLVx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXNvY2tfZnJvbV9maWxlKGZpbGUpO1xuK1x0aWYgKGZpbGUpXG4rXHRcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbitcbitcdHJldHVybiAodW5zaWduZWQgbG9uZylOVUxMO1xuIH1cbiBcbiBCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU2OjI1LjA3MzY3MjQ1N1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjU0OTA1NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBtb2RpZmljYXRpb24gdG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkgc2VlIGl0J3MgYWRkaW5nIGEgTlVMTCBjaGVjayBmb3IgdGhlIGBmaWxlYCBwb2ludGVyIGJlZm9yZSBjYWxsaW5nIGBzb2NrX2Zyb21fZmlsZWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVmZW5zaXZlIHByb2dyYW1taW5nIHRlY2huaXF1ZSDigJMgcHJldmVudGluZyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBjaGFuZ2UgaXRzZWxmIGlzIHNpbXBsZTogaWYgYGZpbGVgIGlzIE5VTEwsIHJldHVybiBOVUxMLlxuXG5UaGUgZ29vZCB0aGluZyBpcyB0aGlzIGtpbmQgb2YgZXJyb3Igd291bGQgYmUgY2F1Z2h0IGJ5IHRoZSB1c3VhbCBrZXJuZWwgbWVjaGFuaXNtcyDigJMgYSBwYWdlIGZhdWx0IG9yIEtBU0FOIHdvdWxkIGltbWVkaWF0ZWx5IGZsYWcgdGhlIGlzc3VlLiBXZSdyZSBub3QgZGVhbGluZyB3aXRoIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBhbnkgbmV3IGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQgaGVyZSwgb3IgZXZlbiBtb2RpZnlpbmcgYW55IGV4aXN0aW5nIG9uZXMuIEl0J3MgYSBjbGVhbiBmaXguXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgdGhvdWdoLCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoZSBgZmlsZWAgcG9pbnRlciBjb21lcyBpbiBhcyBhbiBhcmd1bWVudCwgYW5kIGBzb2NrX2Zyb21fZmlsZWAgZGVmaW5pdGVseSBleHBlY3RzIGEgYHN0cnVjdCBmaWxlICpgLiBXaXRob3V0IHRoZSBjaGVjaywgYSBOVUxMIGBmaWxlYCB3b3VsZCBsZWFkIHRvIHRoZSBmdW5jdGlvbiBkZXJlZmVyZW5jaW5nIHRoZSBwb2ludGVyLCBhbmQgdGhhdCdzIHByZWNpc2VseSB3aGF0IHdlJ3JlIGF2b2lkaW5nLiBXaXRoIHRoaXMgcGF0Y2gsIGlmIGBmaWxlYCBpcyBOVUxMLCB3ZSBqdXN0IHJldHVybiBOVUxMLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlbWVudCBoZXJlLlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCBhbmQgbGFjayBvZiBhbnkgS01TQU4tcmVsYXRlZCBjb25jZXJucywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOYCB0byBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMSwiT3V0cHV0VG9rZW5zIjoxMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NjozMS43Mjg1ODE5NTVaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAgYmVmb3JlIGNhbGxpbmcgYHNvY2tfZnJvbV9maWxlKClgLiBUaGlzIHByZXZlbnRzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBhIG1lbW9yeSBzYWZldHkgaXNzdWUgdGhhdCBpcyBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHRzIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAgYmVmb3JlIGNhbGxpbmcgYHNvY2tfZnJvbV9maWxlKClgLiBUaGlzIHByZXZlbnRzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBhIG1lbW9yeSBzYWZldHkgaXNzdWUgdGhhdCBpcyBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHRzIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow6rmm6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 20:38:21 +0000 UTC FinishedAt: 2026-08-18 20:56:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS", "NET" ], "series_id": "52953883-05ad-4b07-8f5f-e03880c5caeb" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sock_from_file" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZnJvbV9maWxlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayB0byBgYnBmX3NvY2tfZnJvbV9maWxlYCBiZWZvcmUgY2FsbGluZyBgc29ja19mcm9tX2ZpbGUoKWAuIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIHRvIHRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBCUEYgaGVscGVyIGZ1bmN0aW9uIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gY2FsbGVkIGZyb20gYSBCUEYgcHJvZ3JhbSB3aXRoIGEgTlVMTCBmaWxlIHBvaW50ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmOWE4NDEwNDc4YmY3M2UwZmQ4ZDVhYjNjNGVkZTY1MDA0OGY4NTMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMjA6NTU6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMTY4NDU5ODdiMjQ0OS4uN2MzY2FhZTRiYWZjMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTEyMTgyLDcgJiM0MzsxMjE4MiwxMCBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xuIFxuIEJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxuIHtcbi1cdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbiYjNDM7XHRpZiAoZmlsZSlcbiYjNDM7XHRcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7XG4gfVxuIFxuIEJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9zb2NrX2Zyb21fZmlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGNhbGxlZCBmcm9tIGEgQlBGIHByb2dyYW0gd2l0aCBhIE5VTEwgZmlsZSBwb2ludGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjlhODQxMDQ3OGJmNzNlMGZkOGQ1YWIzYzRlZGU2NTAwNDhmODUzMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDIwOjU1OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCAxNjg0NTk4N2IyNDQ5Li43YzNjYWFlNGJhZmMzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMTIxODIsNyAmIzQzOzEyMTgyLDEwIEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX21wdGNwX3NvY2tfcHJvdG8gPSB7CiAKIEJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKQogewotCXJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTsKJiM0MzsJaWYgKGZpbGUpCiYjNDM7CQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7CiYjNDM7CiYjNDM7CXJldHVybiAodW5zaWduZWQgbG9uZylOVUxMOwogfQogCiBCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgSGVscGVyIEZ1bmN0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGJwZl9zb2NrX2Zyb21fZmlsZWAgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFRoYXQgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uIGJlY2F1c2UgQlBGIGhlbHBlciBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsIGZvciBCUEYgcHJvZ3JhbSBmdW5jdGlvbmFsaXR5LCBhbmQgYW55IGNoYW5nZSBoZXJlIGlzIHBvdGVudGlhbGx5IGltcGFjdGZ1bC4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBhIE5VTEwgY2hlY2sgb24gdGhlIGBmaWxlYCBhcmd1bWVudCBiZWZvcmUgaXQmIzM5O3MgcGFzc2VkIHRvIGBzb2NrX2Zyb21fZmlsZWAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGRlZmVuc2l2ZSBtZWFzdXJlLCBwcmVzdW1hYmx5LgoKTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIGBicGZfc29ja19mcm9tX2ZpbGVgIGlzIGEgQlBGICpoZWxwZXIqLCBtZWFuaW5nIEJQRiBwcm9ncmFtcyBkaXJlY3RseSBjYWxsIGl0LiBJdCYjMzk7cyBhbG1vc3QgZ3VhcmFudGVlZCB0byBiZSByZWFjaGFibGUgY29kZSwgYW5kIHRoYXQgbWVhbnMgaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgYW5kIHZ1bG5lcmFiaWxpdHkgYW5hbHlzaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMuCgpTbywgbGV0JiMzOTtzIG5haWwgZG93biBhIGZldyB0aGluZ3MuIEkmIzM5O2xsIHNlYXJjaCBmb3IgY29uZmlnIG9wdGlvbnMgYW5kIGZvY3VzIG15IGF0dGVudGlvbiBvbiByZWxldmFudCBzeW1ib2xzIGxpa2UgdGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmLiBJJiMzOTttIGdvaW5nIHRvIGdyZXAgZm9yIGBicGZfc29ja19mcm9tX2ZpbGVgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGF0IGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc29ja19mcm9tX2ZpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjE3NT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTgyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxODM6QlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE4NC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTAtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5MTpCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcylcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkyLUJURl9JRChzdHJ1Y3QsIHNvY2tldClcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NjpcdC5mdW5jXHRcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTctXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5OC1cdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTk6XHQucmV0X2J0Zl9pZFx0PSBcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkc1swXSxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAwLVx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjAxOlx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzFdLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMDItfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTY5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAqKgoKT2theSwgc28gYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgZmxhZ2dlZCBhcyBhIEJQRiBoZWxwZXIuIFJpZ2h0LCB0aGF0JiMzOTtzIGltcG9ydGFudCBjb250ZXh0LiBUaGF0IG1lYW5zIGl0JiMzOTtzIGEga2VybmVsIGZ1bmN0aW9uIGF2YWlsYWJsZSB3aXRoaW4gYSBCUEYgcHJvZ3JhbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyBsZXZlcmFnZWQgaW4gdGhlIHN5c3RlbS4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGV2ZXJ5d2hlcmUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgYWN0dWFsbHkgKnVzZWQqLiBJJiMzOTtsbCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG9gIGZ1bmN0aW9uIGZvciBub3csIHRvIG5hcnJvdyB0aGUgc2NvcGUgb2YgdGhlIHNlYXJjaC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoZXJlIHdlIGZpbmQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTIxOTM9QlRGX0lEKHN0cnVjdCwgZmlsZSlcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk0LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk2LVx0LmZ1bmNcdFx0PSBicGZfc29ja19mcm9tX2ZpbGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMyMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvYCBpbiB0aGUgS2VybmVsIFNvdXJjZSoqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoZXJlIGBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG9gIGlzIHVzZWQgYWNyb3NzIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIFRoaXMgZnVuY3Rpb24gc2VlbXMgcG90ZW50aWFsbHkgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHNvY2tldC1yZWxhdGVkIEJQRiBwcm9ncmFtcyBhbmQgaW50ZXJhY3Rpb25zLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBzY2FuIGV2ZXJ5dGhpbmcuIEkmIzM5O2xsIG5lZWQgYSBjb21wcmVoZW5zaXZlIHNlYXJjaCwgc28gSSYjMzk7bGwgYmUgc3VyZSB0aGUgc2VhcmNoIHN0YXJ0cyBhdCB0aGUgcm9vdCwgc28gSSB3aWxsIGxpa2VseSB1c2UgYGdyZXAgLXIgJiMzNDticGZfc29ja19mcm9tX2ZpbGVfcHJvdG8mIzM0OyAuYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHBpY3R1cmUsIHBpbnBvaW50aW5nIGFsbCBvY2N1cnJlbmNlcy4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZHJhdyBzb21lIGNvbmNsdXNpb25zIGFib3V0IHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIHByb2JhYmx5IGJlIG1vc3QgaW50ZXJlc3RlZCBpbiBob3cgaXQmIzM5O3MgdXNlZCB3aXRoIEJQRiBoZWxwZXJzIG9yIGluIG5ldHdvcmtpbmcgY29kZSwgZGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLiBUaGUgY29udGV4dCB3aWxsIHRlbGwgbWUgZXZlcnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc29ja19mcm9tX2ZpbGVfcHJvdG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD0zOTI1PWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2t0aW1lX2dldF9jb2Fyc2VfbnNfcHJvdG87XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM5MjY6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG87XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM5MjctZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3NvY2tldF9wdHJfY29va2llX3Byb3RvO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzI2PXRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzU0LVx0Y2FzZSBCUEZfRlVOQ19zb2NrX2Zyb21fZmlsZTpcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNzU1Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3NTYtXHRjYXNlIEJQRl9GVU5DX2dldF9zb2NrZXRfY29va2llOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Ni1cdC5mdW5jXHRcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb246CgoqKlRyYWNpbmcgYW5kIEJQRiBBdmFpbGFiaWxpdHkqKgoKT2theSwgc28gdGhpcyBjb25zdHJ1Y3QsIHdoYXRldmVyICYjMzQ7aXQmIzM0OyBpcywgaXMgY2xlYXJseSBkZWVwbHkgaW50ZWdyYXRlZCB3aXRoIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgYW5kIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGB0cmFjaW5nX3Byb2dfZnVuY19wcm90b2AgaW5zdGFudGx5IHNpZ25hbHMgdGhhdCBpdCYjMzk7cyBhIGtleSBjb21wb25lbnQgZm9yIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byB0YXAgaW50byBhbmQgb2JzZXJ2ZSBrZXJuZWwgZXZlbnRzLiBUaGF04oCZcyBhIGNyaXRpY2FsIGxpbmsgZm9yIGRlYnVnZ2luZywgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGFuZCBzZWN1cml0eS4KCkkgbmVlZCB0byBjb25maXJtIGl0cyBlbmFibGluZyBwcmVyZXF1aXNpdGVzLCB3aGljaCBpcyB3aGF0IHRoZSBjb25maWcgb3B0aW9ucyBpbXBseTogYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfQlBGX0VWRU5UU2AsIGFuZCBgQ09ORklHX05FVGAuIFRob3NlIG1ha2UgcGVyZmVjdCBzZW5zZS4gQlBGIHN5c2NhbGwgc3VwcG9ydCBwcm92aWRlcyB0aGUgaW50ZXJmYWNlLCBldmVudHMgZW5hYmxlcyB0aGUgaG9va3MsIGFuZCBuZXR3b3JrIHN1cHBvcnQgaXMgdmVyeSBvZnRlbiB3aGF04oCZcyBiZWluZyB0cmFjZWQuIFRoZSBuZXR3b3JrIGlzIHVzdWFsbHkgaW52b2x2ZWQgc29tZWhvdy4KCk5vdyBJIG5lZWQgdG8gcGl2b3QgYW5kIGRvdWJsZS1jaGVjayBob3cgbmV0d29ya2luZyBpcyBob29rZWQgdXAgZm9yIEJQRi4gU3BlY2lmaWNhbGx5IEkgbmVlZCB0byBsb29rIGF0IGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggdGhlIG5ldHdvcmsgc3RhY2suIEkgYW50aWNpcGF0ZSB0aGlzIGlzIHdoZXJlIHRoZSBsb3dlci1sZXZlbCBwYWNrZXQgZmlsdGVyaW5nIGFuZCBldmVudCBob29raW5nIGlzIGxpa2VseSBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsdGVyLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVx0XHQgICAgICYjNDM7PSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZToxMzpcdFx0XHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXHRcdFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDM2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLZXJuZWwgQlBGIEludGVncmF0aW9uKioKCk9rYXksIHNvIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgZGVmaW5pdGVseSBhIGNvcmUgY29tcG9uZW50IGlmIG5ldHdvcmtpbmcgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBkZWZpbml0aW9uIG9mIGBicGZfc29ja19mcm9tX2ZpbGVgLCBhbmQgYSBodW5jaCBqdXN0IGhpdCBtZSDigJMgc2luY2UgaXQgZGVhbHMgd2l0aCBmaWxlIGRlc2NyaXB0b3JzIGFuZCBCUEYsIGl0JiMzOTtzIHByb2JhYmx5IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIElzIGl0IGhpZGRlbiBiZWhpbmQgYSBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgZ3VhcmQgb3Igc29tZXRoaW5nIHNpbWlsYXI/IEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBMZXQmIzM5O3MganVtcCBvdmVyIHRvIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDEyMTgyLiBUaGF0IHNob3VsZCBwdXQgbWUgcmlnaHQgaW4gdGhlIHZpY2luaXR5IG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBkZWNsYXJhdGlvbiBvciBkZWZpbml0aW9uIGFuZCBjbGFyaWZ5IHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjE1MDpcdHtcbjEyMTUxOlx0XHQvKiB1bml4X3NvY2sgdHlwZSBpcyBub3QgZ2VuZXJhdGVkIGluIGR3YXJmIGFuZCBoZW5jZSBidGYsXG4xMjE1MjpcdFx0ICogdHJpZ2dlciBhbiBleHBsaWNpdCB0eXBlIGdlbmVyYXRpb24gaGVyZS5cbjEyMTUzOlx0XHQgKi9cbjEyMTU0Olx0XHRCVEZfVFlQRV9FTUlUKHN0cnVjdCB1bml4X3NvY2spO1xuMTIxNTU6XHRcdGlmIChzayBcdTAwMjZcdTAwMjYgc2tfaXNfdW5peChzaykpXG4xMjE1NjpcdFx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc2s7XG4xMjE1NzpcdFxuMTIxNTg6XHRcdHJldHVybiAodW5zaWduZWQgbG9uZylOVUxMO1xuMTIxNTk6XHR9XG4xMjE2MDpcdFxuMTIxNjE6XHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b191bml4X3NvY2tfcHJvdG8gPSB7XG4xMjE2MjpcdFx0LmZ1bmNcdFx0XHQ9IGJwZl9za2NfdG9fdW5peF9zb2NrLFxuMTIxNjM6XHRcdC5ncGxfb25seVx0XHQ9IGZhbHNlLFxuMTIxNjQ6XHRcdC5yZXRfdHlwZVx0XHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXG4xMjE2NTpcdFx0LmFyZzFfdHlwZVx0XHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxuMTIxNjY6XHRcdC5yZXRfYnRmX2lkXHRcdD0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVU5JWF0sXG4xMjE2NzpcdH07XG4xMjE2ODpcdFxuMTIxNjk6XHRCUEZfQ0FMTF8xKGJwZl9za2NfdG9fbXB0Y3Bfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXG4xMjE3MDpcdHtcbjEyMTcxOlx0XHRCVEZfVFlQRV9FTUlUKHN0cnVjdCBtcHRjcF9zb2NrKTtcbjEyMTcyOlx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYnBmX21wdGNwX3NvY2tfZnJvbV9zdWJmbG93KHNrKTtcbjEyMTczOlx0fVxuMTIxNzQ6XHRcbjEyMTc1Olx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHtcbjEyMTc2Olx0XHQuZnVuY1x0XHQ9IGJwZl9za2NfdG9fbXB0Y3Bfc29jayxcbjEyMTc3Olx0XHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4xMjE3ODpcdFx0LnJldF90eXBlXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXG4xMjE3OTpcdFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1NPQ0tfQ09NTU9OLFxuMTIxODA6XHRcdC5yZXRfYnRmX2lkXHQ9IFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX01QVENQXSxcbjEyMTgxOlx0fTtcbjEyMTgyOlx0XG4xMjE4MzpcdEJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxuMTIxODQ6XHR7XG4xMjE4NTpcdFx0aWYgKGZpbGUpXG4xMjE4NjpcdFx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7XG4xMjE4NzpcdFxuMTIxODg6XHRcdHJldHVybiAodW5zaWduZWQgbG9uZylOVUxMO1xuMTIxODk6XHR9XG4xMjE5MDpcdFxuMTIxOTE6XHRCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcylcbjEyMTkyOlx0QlRGX0lEKHN0cnVjdCwgc29ja2V0KVxuMTIxOTM6XHRCVEZfSUQoc3RydWN0LCBmaWxlKVxuMTIxOTQ6XHRcbjEyMTk1Olx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcbjEyMTk2Olx0XHQuZnVuY1x0XHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcbjEyMTk3Olx0XHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4xMjE5ODpcdFx0LnJldF90eXBlXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXG4xMjE5OTpcdFx0LnJldF9idGZfaWRcdD0gXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMF0sXG4xMjIwMDpcdFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbjEyMjAxOlx0XHQuYXJnMV9idGZfaWRcdD0gXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMV0sXG4xMjIwMjpcdH07XG4xMjIwMzpcdFxuMTIyMDQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbjEyMjA1Olx0YnBmX3NrX2Jhc2VfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbjEyMjA2Olx0e1xuMTIyMDc6XHRcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZnVuYztcbjEyMjA4Olx0XG4xMjIwOTpcdFx0c3dpdGNoIChmdW5jX2lkKSB7XG4xMjIxMDpcdFx0Y2FzZSBCUEZfRlVOQ19za2NfdG9fdGNwNl9zb2NrOlxuMTIyMTE6XHRcdFx0ZnVuYyA9IFx1MDAyNmJwZl9za2NfdG9fdGNwNl9zb2NrX3Byb3RvO1xuMTIyMTI6XHRcdFx0YnJlYWs7XG4xMjIxMzpcdFx0Y2FzZSBCUEZfRlVOQ19za2NfdG9fdGNwX3NvY2s6XG4xMjIxNDpcdFx0XHRmdW5jID0gXHUwMDI2YnBmX3NrY190b190Y3Bfc29ja19wcm90bztcbjEyMjE1Olx0XHRcdGJyZWFrO1xuMTIyMTY6XHRcdGNhc2UgQlBGX0ZVTkNfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrOlxuMTIyMTc6XHRcdFx0ZnVuYyA9IFx1MDAyNmJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2tfcHJvdG87XG4xMjIxODpcdFx0XHRicmVhaztcbjEyMjE5Olx0XHRjYXNlIEJQRl9GVU5DX3NrY190b190Y3BfcmVxdWVzdF9zb2NrOlxuMTIyMjA6XHRcdFx0ZnVuYyA9IFx1MDAyNmJwZl9za2NfdG9fdGNwX3JlcXVlc3Rfc29ja19wcm90bztcbjEyMjIxOlx0XHRcdGJyZWFrO1xuMTIyMjI6XHRcdGNhc2UgQlBGX0ZVTkNfc2tjX3RvX3VkcDZfc29jazpcbjEyMjIzOlx0XHRcdGZ1bmMgPSBcdTAwMjZicGZfc2tjX3RvX3VkcDZfc29ja19wcm90bztcbjEyMjI0Olx0XHRcdGJyZWFrO1xuMTIyMjU6XHRcdGNhc2UgQlBGX0ZVTkNfc2tjX3RvX3VuaXhfc29jazpcbjEyMjI2Olx0XHRcdGZ1bmMgPSBcdTAwMjZicGZfc2tjX3RvX3VuaXhfc29ja19wcm90bztcbjEyMjI3Olx0XHRcdGJyZWFrO1xuMTIyMjg6XHRcdGNhc2UgQlBGX0ZVTkNfc2tjX3RvX21wdGNwX3NvY2s6XG4xMjIyOTpcdFx0XHRmdW5jID0gXHUwMDI2YnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvO1xuMTIyMzA6XHRcdFx0YnJlYWs7XG4xMjIzMTpcdFx0Y2FzZSBCUEZfRlVOQ19rdGltZV9nZXRfY29hcnNlX25zOlxuMTIyMzI6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9rdGltZV9nZXRfY29hcnNlX25zX3Byb3RvO1xuMTIyMzM6XHRcdGRlZmF1bHQ6XG4xMjIzNDpcdFx0XHRyZXR1cm4gYnBmX2Jhc2VfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcbjEyMjM1Olx0XHR9XG4xMjIzNjpcdFxuMTIyMzc6XHRcdGlmICghYnBmX3Rva2VuX2NhcGFibGUocHJvZy1cdTAwM2VhdXgtXHUwMDNldG9rZW4sIENBUF9QRVJGTU9OKSlcbjEyMjM4Olx0XHRcdHJldHVybiBOVUxMO1xuMTIyMzk6XHRcbjEyMjQwOlx0XHRyZXR1cm4gZnVuYztcbjEyMjQxOlx0fVxuMTIyNDI6XHRcbjEyMjQzOlx0LyoqXG4xMjI0NDpcdCAqIGJwZl9za2JfbWV0YV9wb2ludGVyKCkgLSBHZXRzIGEgbXV0YWJsZSBwb2ludGVyIHdpdGhpbiB0aGUgc2tiIG1ldGFkYXRhIGFyZWEuXG4xMjI0NTpcdCAqIEBza2I6IHNvY2tldCBidWZmZXIgY2FycnlpbmcgdGhlIG1ldGFkYXRhXG4xMjI0NjpcdCAqIEBvZmZzZXQ6IG9mZnNldCBpbnRvIHRoZSBtZXRhZGF0YSBhcmVhLCBtdXN0IGJlIFx1MDAzYz0gc2tiX21ldGFkYXRhX2xlbigpXG4xMjI0NzpcdCAqL1xuMTIyNDg6XHR2b2lkICpicGZfc2tiX21ldGFfcG9pbnRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2Zmc2V0KVxuMTIyNDk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1OTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBCUEYgRnVuY3Rpb24gQXZhaWxhYmlsaXR5KioKCk9rYXksIHNvIHRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBmdW5jdGlvbiwgcmlnaHQsIHRoYXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBObyBiaWcgZGVhbC4gQnV0LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyBlbnRpcmUgKmZpbGUqLCBgbmV0L2NvcmUvZmlsdGVyLmNgLCBldmVuICpjb21waWxlZCogaW50byB0aGUga2VybmVsIHdlJiMzOTtyZSB3b3JraW5nIHdpdGg/IFNwZWNpZmljYWxseSwgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAgZW5hYmxlZD8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byB2ZXJpZnkuIFRpbWUgdG8gZ28gYmFjayBhbmQgY3Jvc3MtcmVmZXJlbmNlIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgIGFnYWluLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGRlcGVuZGVuY3kgZXhwbGljaXRseS4gR290dGEgbWFrZSBzdXJlIHdlJiMzOTt2ZSBhY3R1YWxseSBnb3QgdGhlIEJQRiBzeXNjYWxsIHN1cHBvcnQgYnVpbHQgaW4gYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBhbnkgZGVlcGVyIGludG8gdGhpcyBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbHRlci5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcdFx0ICAgICAmIzQzOz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk1NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkV4YW1pbmluZyB0aGUgQlBGIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgY29kZSwgYW5kIGl0JiMzOTtzIGNsZWFyIGl0JiMzOTtzIGFsd2F5cyBjb21waWxlZC4gQnV0IGhvbGQgb24sIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYGJwZl9zb2NrX2Zyb21fZmlsZWAsIHdoaWNoIGlzIGEgQlBGIGhlbHBlciBmdW5jdGlvbiwgYW5kIHRoYXQgbWVhbnMgaXQgaW5oZXJlbnRseSByZWxpZXMgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAgdG8gYmUgdHJ1bHkgZnVuY3Rpb25hbC4gSXQmIzM5O3MgdGhlIGx5bmNocGluLgoKSG1tLCB3YWl0IGEgbWludXRlLi4uIEkgcmVjYWxsIHNlZWluZyBgYnBmX3NvY2tfZnJvbV9maWxlYCB1c2VkIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIHNob3VsZCB2ZXJpZnkgdGhhdC4KCk9rYXksIHRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcgaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIEkgbmVlZCB0byBjb25maXJtIGhvdyB0aGUgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGF0IHNwZWNpZmljIHRyYWNlIGZpbGUuIEkgbmVlZCB0byBrbm93IHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhY2UubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvTWFrZWZpbGU9NTQ9S0NPVl9JTlNUUlVNRU5UX3RyYWNlX2lycXNvZmYubyA6PSBuXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTUtXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6NTY6Q0ZMQUdTX2JwZl90cmFjZS5vIDo9IC1JJChzcmMpXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTctXG4tLVxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICYjNDM7PSB0cmFjZV9ldmVudHNfdXNlci5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSAmIzQzOz0gYnBmX3RyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICYjNDM7PSB0cmFjZV9rcHJvYmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDQxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkNoZWNraW5nIEJQRiBFdmVudCBDb25maWd1cmF0aW9uIGZvciBUcmFjaW5nKioKClJpZ2h0LCBzbyBJIGtub3cgSSBuZWVkIGBDT05GSUdfQlBGX0VWRU5UU2AuIFRoYXQgbXVjaCBpcyBjbGVhci4gQW5kLCBvZiBjb3Vyc2UsIHRvIGFjdHVhbGx5ICpkbyogYW55dGhpbmcgd2l0aCBCUEYsIHNwZWNpZmljYWxseSBsb2FkaW5nIHByb2dyYW1zLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXMgd2VsbC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdHJhY2luZyBpcyB1c2luZyB0aGlzIGZ1bmN0aW9uYWxpdHkuICBJJiMzOTttIGdvaW5nIHRvIGdvIHN0cmFpZ2h0IHRvIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGJlY2F1c2UgdGhhdCBzb3VuZHMgbGlrZSB0aGUgcmlnaHQgc3BvdC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgYHRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvYCBkZWNsYXJhdGlvbi4gSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgQlBGIGVsZW1lbnRzIGFyZSBiZWluZyBpbnRlZ3JhdGVkIGludG8gdGhlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUsIGVzcGVjaWFsbHkgc2luY2UgdGhlIGNvZGUgcmVmZXJlbmNlcyBldmVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYWNpbmdfcHJvZ19mdW5jX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzI1PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTcyNjp0cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzI3LXtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTgzND1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyB0cmFjaW5nX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxODM1Olx0LmdldF9mdW5jX3Byb3RvICA9IHRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvLFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4MzYtXHQuaXNfdmFsaWRfYWNjZXNzID0gdHJhY2luZ19wcm9nX2lzX3ZhbGlkX2FjY2VzcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkyMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgYnBmX3NvY2tfZnJvbV9maWxlYCBmb3IgVHJhY2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgYGJwZl9zb2NrX2Zyb21fZmlsZWAgcmVsYXRlcyB0byB0cmFjaW5nLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBgdHJhY2luZ192ZXJpZmllcl9vcHNgLiBJdCBsb29rcyBsaWtlIGB0cmFjaW5nX3Byb2dfZnVuY19wcm90b2AgaXMgdGhlIGtleSBoZXJlIOKAkyB0aGF0JiMzOTtzIHRoZSBicmlkZ2UuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBUaGVyZWZvcmUsIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgYXJlIGBDT05GSUdfQlBGX0VWRU5UU2AgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpCdXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBgQ09ORklHX05FVGAgaXMgYWxtb3N0IGFsd2F5cyBlbmFibGVkLCBzbyBsZXQmIzM5O3MgaW5jbHVkZSBpdCBpbiBvdXIgY29uc2lkZXJhdGlvbnMganVzdCB0byBiZSBzYWZlLiBOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgZGV0YWlsczogSSBzaG91bGQgY2hlY2sgdGhlIHNvdXJjZSBmaWxlIHdoZXJlIGBicGZfc29ja19mcm9tX2ZpbGVgIGlzIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGlmIGl0JiMzOTtzIHBvdGVudGlhbGx5IGNvbmRpdGlvbmFsIGJhc2VkIG9uIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0IHdpbGwgcmV2ZWFsIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgaW5mbHVlbmNpbmcgaXRzIGF2YWlsYWJpbGl0eSBhbmQgdXNlIGZvciB0cmFjaW5nLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc29ja19mcm9tX2ZpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjE3NT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTgyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxODM6QlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE4NC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTAtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5MTpCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcylcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkyLUJURl9JRChzdHJ1Y3QsIHNvY2tldClcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NjpcdC5mdW5jXHRcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTctXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5OC1cdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTk6XHQucmV0X2J0Zl9pZFx0PSBcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkc1swXSxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAwLVx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjAxOlx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzFdLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMDItfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgxMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgbmV0L2NvcmUvZmlsdGVyLmNgKioKCk9rYXksIHRpbWUgdG8gemVybyBpbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgI2lmZGVmYCBibG9ja3MsIHNwZWNpZmljYWxseSB0aG9zZSBhcm91bmQgbGluZSAxMjE4MyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0IGZpbGUmIzM5O3MgYSBjcml0aWNhbCBjb21wb25lbnQsIHNvIHRoZSBjb250ZXh0IGFyb3VuZCB0aGUgZmlsdGVyIGNvZGUgaXMga2V5LiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgc3BlY2lmaWMgbGluZSBpcyB0aGUgZW50cnkgcG9pbnQsIG9yIG1heWJlIHBhcnQgb2YgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzZWN0aW9uIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBmZWF0dXJlIG9yIHBsYXRmb3JtLiBMZXQmIzM5O3Mgc3RhcnQgYnkgdW5kZXJzdGFuZGluZyB3aGF0JiMzOTtzIGJlaW5nIGNvbmRpdGlvbmFsbHkgaW5jbHVkZWQgb3IgZXhjbHVkZWQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHdoYXQgdGhlIGRlZmluZWQgbWFjcm9zIGFyZSBhbmQgd2hhdCBpbXBhY3QgdGhleSBoYXZlIG9uIHRoZSBiZWhhdmlvciBvZiB0aGF0IGNvZGUgYmxvY2suIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgYmFzZWQgb24gaG93IHRoZSBjb2RlIGlzIGNvbXBpbGVkLCBhbmQgdGhlIGdvYWwgd2lsbCBiZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgZGlmZmVyZW5jZXMgb24gdGhlIG92ZXJhbGwgZmlsdGVyaW5nIG1lY2hhbmlzbS4gSSBtaWdodCBhbHNvIGJlIGFudGljaXBhdGluZyBhIGRlYnVnZ2luZyBzY2VuYXJpbyBoZXJlLCBzbyBJJiMzOTtsbCBiZSBvbiB0aGUgbG9va291dCBmb3IgYW55IGNsdWVzIHRvIHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIxMDA6XHRcdC5yZXRfdHlwZVx0XHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXG4xMjEwMTpcdFx0LmFyZzFfdHlwZVx0XHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxuMTIxMDI6XHRcdC5yZXRfYnRmX2lkXHRcdD0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVENQX1RXXSxcbjEyMTAzOlx0fTtcbjEyMTA0Olx0XG4xMjEwNTpcdEJQRl9DQUxMXzEoYnBmX3NrY190b190Y3BfcmVxdWVzdF9zb2NrLCBzdHJ1Y3Qgc29jayAqLCBzaylcbjEyMTA2Olx0e1xuMTIxMDc6XHQjaWZkZWYgQ09ORklHX0lORVRcbjEyMTA4Olx0XHRpZiAoc2sgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3Byb3QgPT0gXHUwMDI2dGNwX3Byb3QgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpXG4xMjEwOTpcdFx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc2s7XG4xMjExMDpcdCNlbmRpZlxuMTIxMTE6XHRcbjEyMTEyOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4xMjExMzpcdFx0aWYgKHNrIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19wcm90ID09IFx1MDAyNnRjcHY2X3Byb3QgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpXG4xMjExNDpcdFx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc2s7XG4xMjExNTpcdCNlbmRpZlxuMTIxMTY6XHRcbjEyMTE3Olx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpTlVMTDtcbjEyMTE4Olx0fVxuMTIxMTk6XHRcbjEyMTIwOlx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fdGNwX3JlcXVlc3Rfc29ja19wcm90byA9IHtcbjEyMTIxOlx0XHQuZnVuY1x0XHRcdD0gYnBmX3NrY190b190Y3BfcmVxdWVzdF9zb2NrLFxuMTIxMjI6XHRcdC5ncGxfb25seVx0XHQ9IGZhbHNlLFxuMTIxMjM6XHRcdC5yZXRfdHlwZVx0XHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXG4xMjEyNDpcdFx0LmFyZzFfdHlwZVx0XHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxuMTIxMjU6XHRcdC5yZXRfYnRmX2lkXHRcdD0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVENQX1JFUV0sXG4xMjEyNjpcdH07XG4xMjEyNzpcdFxuMTIxMjg6XHRCUEZfQ0FMTF8xKGJwZl9za2NfdG9fdWRwNl9zb2NrLCBzdHJ1Y3Qgc29jayAqLCBzaylcbjEyMTI5Olx0e1xuMTIxMzA6XHRcdC8qIHVkcDZfc29jayB0eXBlIGlzIG5vdCBnZW5lcmF0ZWQgaW4gZHdhcmYgYW5kIGhlbmNlIGJ0ZixcbjEyMTMxOlx0XHQgKiB0cmlnZ2VyIGFuIGV4cGxpY2l0IHR5cGUgZ2VuZXJhdGlvbiBoZXJlLlxuMTIxMzI6XHRcdCAqL1xuMTIxMzM6XHRcdEJURl9UWVBFX0VNSVQoc3RydWN0IHVkcDZfc29jayk7XG4xMjEzNDpcdFx0aWYgKHNrIFx1MDAyNlx1MDAyNiBza19mdWxsc29jayhzaykgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQIFx1MDAyNlx1MDAyNlxuMTIxMzU6XHRcdCAgICBzay1cdTAwM2Vza190eXBlID09IFNPQ0tfREdSQU0gXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcbjEyMTM2Olx0XHRcdHJldHVybiAodW5zaWduZWQgbG9uZylzaztcbjEyMTM3Olx0XG4xMjEzODpcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7XG4xMjEzOTpcdH1cbjEyMTQwOlx0XG4xMjE0MTpcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX3VkcDZfc29ja19wcm90byA9IHtcbjEyMTQyOlx0XHQuZnVuY1x0XHRcdD0gYnBmX3NrY190b191ZHA2X3NvY2ssXG4xMjE0MzpcdFx0LmdwbF9vbmx5XHRcdD0gZmFsc2UsXG4xMjE0NDpcdFx0LnJldF90eXBlXHRcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcbjEyMTQ1Olx0XHQuYXJnMV90eXBlXHRcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXG4xMjE0NjpcdFx0LnJldF9idGZfaWRcdFx0PSBcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9VRFA2XSxcbjEyMTQ3Olx0fTtcbjEyMTQ4Olx0XG4xMjE0OTpcdEJQRl9DQUxMXzEoYnBmX3NrY190b191bml4X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxuMTIxNTA6XHR7XG4xMjE1MTpcdFx0LyogdW5peF9zb2NrIHR5cGUgaXMgbm90IGdlbmVyYXRlZCBpbiBkd2FyZiBhbmQgaGVuY2UgYnRmLFxuMTIxNTI6XHRcdCAqIHRyaWdnZXIgYW4gZXhwbGljaXQgdHlwZSBnZW5lcmF0aW9uIGhlcmUuXG4xMjE1MzpcdFx0ICovXG4xMjE1NDpcdFx0QlRGX1RZUEVfRU1JVChzdHJ1Y3QgdW5peF9zb2NrKTtcbjEyMTU1Olx0XHRpZiAoc2sgXHUwMDI2XHUwMDI2IHNrX2lzX3VuaXgoc2spKVxuMTIxNTY6XHRcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXNrO1xuMTIxNTc6XHRcbjEyMTU4Olx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpTlVMTDtcbjEyMTU5Olx0fVxuMTIxNjA6XHRcbjEyMTYxOlx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fdW5peF9zb2NrX3Byb3RvID0ge1xuMTIxNjI6XHRcdC5mdW5jXHRcdFx0PSBicGZfc2tjX3RvX3VuaXhfc29jayxcbjEyMTYzOlx0XHQuZ3BsX29ubHlcdFx0PSBmYWxzZSxcbjEyMTY0Olx0XHQucmV0X3R5cGVcdFx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxuMTIxNjU6XHRcdC5hcmcxX3R5cGVcdFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcbjEyMTY2Olx0XHQucmV0X2J0Zl9pZFx0XHQ9IFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1VOSVhdLFxuMTIxNjc6XHR9O1xuMTIxNjg6XHRcbjEyMTY5Olx0QlBGX0NBTExfMShicGZfc2tjX3RvX21wdGNwX3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxuMTIxNzA6XHR7XG4xMjE3MTpcdFx0QlRGX1RZUEVfRU1JVChzdHJ1Y3QgbXB0Y3Bfc29jayk7XG4xMjE3MjpcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKWJwZl9tcHRjcF9zb2NrX2Zyb21fc3ViZmxvdyhzayk7XG4xMjE3MzpcdH1cbjEyMTc0Olx0XG4xMjE3NTpcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX21wdGNwX3NvY2tfcHJvdG8gPSB7XG4xMjE3NjpcdFx0LmZ1bmNcdFx0PSBicGZfc2tjX3RvX21wdGNwX3NvY2ssXG4xMjE3NzpcdFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuMTIxNzg6XHRcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxuMTIxNzk6XHRcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19TT0NLX0NPTU1PTixcbjEyMTgwOlx0XHQucmV0X2J0Zl9pZFx0PSBcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9NUFRDUF0sXG4xMjE4MTpcdH07XG4xMjE4MjpcdFxuMTIxODM6XHRCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgc3RydWN0IGZpbGUgKiwgZmlsZSlcbjEyMTg0Olx0e1xuMTIxODU6XHRcdGlmIChmaWxlKVxuMTIxODY6XHRcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXNvY2tfZnJvbV9maWxlKGZpbGUpO1xuMTIxODc6XHRcbjEyMTg4Olx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpTlVMTDtcbjEyMTg5Olx0fVxuMTIxOTA6XHRcbjEyMTkxOlx0QlRGX0lEX0xJU1QoYnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHMpXG4xMjE5MjpcdEJURl9JRChzdHJ1Y3QsIHNvY2tldClcbjEyMTkzOlx0QlRGX0lEKHN0cnVjdCwgZmlsZSlcbjEyMTk0Olx0XG4xMjE5NTpcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XG4xMjE5NjpcdFx0LmZ1bmNcdFx0PSBicGZfc29ja19mcm9tX2ZpbGUsXG4xMjE5NzpcdFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuMTIxOTg6XHRcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxuMTIxOTk6XHRcdC5yZXRfYnRmX2lkXHQ9IFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzBdLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA0OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMsIGFuZCBpdCYjMzk7cyBub3QgZ3VhcmRlZCBieSBhbnkgYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIFRoYXQgbWFrZXMgdGhpbmdzIGEgYml0IHNpbXBsZXIuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCBJIG9ubHkgbmVlZCB0byBjb25zaWRlciBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19CUEZfRVZFTlRTYC4gVGhlIGNyaXRpY2FsIHBhcnQgaGVyZSBpcyBgYnBmX3NvY2tfZnJvbV9maWxlYC4KCkhhbmcgb24sIGl0IGxvb2tzIGxpa2UgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgZGVmaW5lZCB1c2luZyBgQlBGX0NBTExfMWAuIFJpZ2h0LCBzbyB0aGUgYWN0dWFsIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzICpqdXN0KiBgYnBmX3NvY2tfZnJvbV9maWxlYC4gSSBzaG91bGQgY29uZmlybSB0aGF0IGBicGZfc29ja19mcm9tX2ZpbGVgICppcyogdGhlIGFjdHVhbCwgZmluYWwgc3ltYm9sIG5hbWUgdGhhdCBnZXRzIGV4cG9zZWQuIE9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vay4gWWVwLCBgQlBGX0NBTExfMWAgKmRvZXMqIHNlZW0gdG8gYmUgZXhwYW5kaW5nIHRvIGBicGZfc29ja19mcm9tX2ZpbGVgIGFzIEkgZXhwZWN0ZWQuCgpXYWl0IGEgc2Vjb25kLiBOb3cgdGhhdCBJ4oCZbSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgQlBGX0NBTExfMWAsIGl0IGV4cGFuZHMgdG8gKmJvdGgqIGBfX19fYnBmX3NvY2tfZnJvbV9maWxlYCBhbmQgYGJwZl9zb2NrX2Zyb21fZmlsZWAuIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBCUEZfQ0FMTF8xYCBtYWNybyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBkdWFsIG5hbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBCUEZfQ0FMTF8xJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI2MD1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjI0LSNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjI1OiNkZWZpbmUgQlBGX0NBTExfMShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDEsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjI2LSNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDIsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBCUEYgRnVuY3Rpb24gQ2FsbHMqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCwgJiMzNDtMZXQmIzM5O3MgY2hlY2sgYEJQRl9DQUxMX3hgLCYjMzQ7IGltbWVkaWF0ZWx5IGhpZ2hsaWdodHMgYSBjcml0aWNhbCBwb2ludDogSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqdGhhdCogcGFydGljdWxhciBCUEYgY2FsbC4gSXQgaW1wbGllcyBhIGRlZXBlciBpbnZlc3RpZ2F0aW9uIGlzIHJlcXVpcmVkIOKAkyB3aGV0aGVyIGl0JiMzOTtzIGEgc3BlY2lmaWMgZnVuY3Rpb24gbnVtYmVyLCBhIHNldCBvZiByZWxhdGVkIGZ1bmN0aW9ucywgb3IgbWF5YmUgZXZlbiBhIHNwZWNpZmljIHVzZS1jYXNlIEkgaGF2ZSBpbiBtaW5kLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgdGhpcyBjYWxsIHByb3ZpZGVzIGFuZCBob3cgaXQgY2FuIGJlIHVzZWQgd2l0aGluIHRoZSBmcmFtZXdvcmsgb2YgQlBGLiBUaGUgJiMzNDt4JiMzNDsgaXMgdGhlIHZhcmlhYmxlOiB3aGF0IGRvZXMgdGhlICYjMzQ7eCYjMzQ7IHJlcHJlc2VudD8gQW4gaW5kZXg/IEEgd2lsZGNhcmQgZm9yIGRpZmZlcmVudCBjYWxscz8gSXRzIHNwZWNpZmljIG1lYW5pbmcgaXMgKmNydWNpYWwqIHRvIHRoZSBuZXh0IHN0ZXBzLiBHb3R0YSBmaWd1cmUgdGhpcyBvdXQgYW5kIGNvbmZpcm0gbXkgYmFzZSB1bmRlcnN0YW5kaW5nLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgQlBGX0NBTExfeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD0yNjA9c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYxMC1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjExOiNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXHRcdFx0XHRcdCAgICAgICBcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MTItXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBCUEYgRmlsdGVyaW5nIFN0cnVjdHVyZXMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIEJQRiBmaWx0ZXJpbmcgaW1wbGVtZW50YXRpb24uIEkgdGhpbmsgSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNjExLiBJIGhhdmUgYSBodW5jaCB0aGF0JiMzOTtzIHdoZXJlIEkgY2FuIGZpbmQgdGhlIGNydWNpYWwgc3RydWN0dXJlcyB0aGF0IGRlZmluZSBob3cgdGhlc2UgZmlsdGVycyBhcmUgb3JnYW5pemVkIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGRhdGEgc3RydWN0dXJlcyB0byBmaWd1cmUgb3V0IGhvdyB0byBkZWJ1ZyB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBCUEYgcHJvZ3JhbSByZXByZXNlbnRhdGlvbiwgdGhlIGNvbnRleHQgc3RydWN0dXJlcywgYW5kIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhLiBLbm93aW5nIGhvdyB0aGVzZSB0aGluZ3MgYXJlIGxhaWQgb3V0IGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhleSBhbGwgd29yayB0b2dldGhlci4gTGV0JiMzOTtzIGdldCByZWFkaW5nIGFuZCBzZWUgd2hhdCB3ZSB1bmNvdmVyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMDpcdFx0XHRcdFx0ICAgICAgKHVuc2lnbmVkIGxvbmcpMCwgKHQpMCkpKSBhXG4gNjAxOlx0I2RlZmluZSBfX0JQRl9WIHZvaWRcbiA2MDI6XHQjZGVmaW5lIF9fQlBGX05cbiA2MDM6XHRcbiA2MDQ6XHQjZGVmaW5lIF9fQlBGX0RFQ0xfQVJHUyh0LCBhKSB0ICAgYVxuIDYwNTpcdCNkZWZpbmUgX19CUEZfREVDTF9SRUdTKHQsIGEpIHU2NCBhXG4gNjA2Olx0XG4gNjA3Olx0I2RlZmluZSBfX0JQRl9QQUQobilcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYwODpcdFx0X19CUEZfTUFQKG4sIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfTiwgdTY0LCBfX3VyXzEsIHU2NCwgX191cl8yLCAgICAgICBcXFxuIDYwOTpcdFx0XHQgIHU2NCwgX191cl8zLCB1NjQsIF9fdXJfNCwgdTY0LCBfX3VyXzUpXG4gNjEwOlx0XG4gNjExOlx0I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjEyOlx0XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjEzOlx0XHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyAgIFxcXG4gNjE0Olx0XHR0eXBlZGVmIHU2NCAoKmJ0Zl8jI25hbWUpKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7IFxcXG4gNjE1Olx0XHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSk7ICAgIFxcXG4gNjE2Olx0XHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSkgICAgIFxcXG4gNjE3Olx0XHR7XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYxODpcdFx0XHRyZXR1cm4gKChidGZfIyNuYW1lKV9fX18jI25hbWUpKF9fQlBGX01BUCh4LF9fQlBGX0NBU1QsX19CUEZfTixfX1ZBX0FSR1NfXykpO1xcXG4gNjE5Olx0XHR9XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYyMDpcdFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYyMTpcdFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKVxuIDYyMjpcdFxuIDYyMzpcdCNkZWZpbmUgX19OT0FUVFJcbiA2MjQ6XHQjZGVmaW5lIEJQRl9DQUxMXzAobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjI1Olx0I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDYyNjpcdCNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDIsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2Mjc6XHQjZGVmaW5lIEJQRl9DQUxMXzMobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjI4Olx0I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDYyOTpcdCNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTaWduaWZpY2FuY2Ugb2YgYGJwZl9zb2NrX2Zyb21fZmlsZWAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgZnVuY3Rpb24gaGVyZSBpcyBgYnBmX3NvY2tfZnJvbV9maWxlYCwgd2hpY2ggaXMgdGhlIGFjdHVhbCAqc3ltYm9sIG5hbWUqLiBBbmQsIGZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYF9fX19icGZfc29ja19mcm9tX2ZpbGVgIGlzIGFuIGlubGluZSB2ZXJzaW9uLCBtYWtpbmcgYGJwZl9zb2NrX2Zyb21fZmlsZWAgdGhlIGNhbGxhYmxlIGZ1bmN0aW9uLgoKU2luY2UgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgYSBCUEYgaGVscGVyLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBCUEYgcHJvZ3JhbXMsIG1ha2luZyBpdCB0aGUgcmlnaHQgc3BvdCB0byBmb2N1cyBvbi4gRm9yZ2V0IGBzb2NrX2Zyb21fZmlsZWAg4oCTIHRoYXQmIzM5O3Mgd2F5IHRvbyBnZW5lcmljLiBUaGlzIGlzIHNwZWNpZmljYWxseSB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLCBhbmQgdGhhdCYjMzk7cyB0aGUga2V5LgoKTGV0IG1lIHN1bW1hcml6ZSBteSBjdXJyZW50IHVuZGVyc3RhbmRpbmc6IFRoaXMgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgdG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAsIHRvIGF2b2lkIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpZiBhIEJQRiBwcm9ncmFtIHBhc3NlcyBpdCBhIE5VTEwgZmlsZSBwb2ludGVyLiBTbywgYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLiBUaGUgYFJlYXNvbmluZ2AgaXMgc29saWQ6IHByZXZlbnRpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgaXMgZGVmaW5pdGVseSBgYnBmX3NvY2tfZnJvbV9maWxlYC4gQXMgZm9yIGBFbmFibGVDb25maWdzYCwgaXQgbG9va3MgbGlrZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0VWRU5UU2AgYXJlIG5lY2Vzc2FyeS4KCkJ1dCwgSSBzaG91bGQgZG91YmxlLWNoZWNrOiBpcyBgYnBmX3NvY2tfZnJvbV9maWxlYCBleHBvcnRlZCBvciBzdGF0aWM/IEFoLCBmb3VuZCBpdCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgOiBJdCYjMzk7cyBkZWZpbmVkIHVzaW5nIGBCUEZfQ0FMTF8xYC4gRXhwYW5kaW5nIHRoYXQgc2hvd3MgaXQgcmVzb2x2ZXMgdG8gYHU2NCBicGZfc29ja19mcm9tX2ZpbGUodTY0IGZpbGUpYCwgd2hpY2ggaXMgbm90IHN0YXRpYyDigJMgaXQmIzM5O3MgYSBnbG9iYWwgc3ltYm9sLiBUaGF0IGNvbmZpcm1zIHRoZSBhbmFseXNpcy4KCkxldCBtZSB0aGluayBhZ2Fpbi4gQXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfRVZFTlRTYCBzdWZmaWNpZW50PyBNYWtlcyBzZW5zZS4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBtdXN0LCBzaW5jZSBpdCYjMzk7cyBuZWVkZWQgZm9yIHRoZSBgYnBmKClgIHN5c2NhbGwgaXRzZWxmLiBBbmQgYENPTkZJR19CUEZfRVZFTlRTYCBpcyBhbHNvIHJlcXVpcmVkIGJlY2F1c2Ugb2YgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgcmVnaXN0ZXJpbmcgYGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90b2AuIE9rYXksIHNlZW1zIGZpbmUsIGJ1dCBhcmUgdGhlcmUgYW55ICpvdGhlciogdXNlcyBvZiBgYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvYCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQmVzdCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MzkyNT1leHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9rdGltZV9nZXRfY29hcnNlX25zX3Byb3RvO1xuaW5jbHVkZS9saW51eC9icGYuaDozOTI2OmV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvO1xuaW5jbHVkZS9saW51eC9icGYuaC0zOTI3LWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zb2NrZXRfcHRyX2Nvb2tpZV9wcm90bztcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcyNj10cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTc1NC1cdGNhc2UgQlBGX0ZVTkNfc29ja19mcm9tX2ZpbGU6XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTc1NTpcdFx0cmV0dXJuIFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9wcm90bztcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzU2LVx0Y2FzZSBCUEZfRlVOQ19nZXRfc29ja2V0X2Nvb2tpZTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjE5Mz1CVEZfSUQoc3RydWN0LCBmaWxlKVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTQtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTYtXHQuZnVuY1x0XHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NzcKCQkJCQkJCW91dHB1dDogMTAzCgkJCQkJCQl0aG91Z2h0czogMjIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKgoKT2theSwgc28gdGhpcyBsb29rcyBsaWtlIGl0JiMzOTtzIGFsbCBjZW50ZXJlZCBhcm91bmQgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIFRoYXQgbmFycm93cyB0aGUgZm9jdXMgY29uc2lkZXJhYmx5LiBJIHNlZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGBDT05GSUdfQlBGX0VWRU5UU2AsIHdoaWNoIG1ha2VzIHNlbnNlIGluIHRoaXMgY29udGV4dC4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0IGBDT05GSUdfTkVUYC4gWWVwLCBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIGludm9sdmVkLCBhbmQgdGhhdCYjMzk7cyBjb21waWxlZCB3aXRoIGBDT05GSUdfTkVUYC4gSXQmIzM5O3MgcHJldHR5IG11Y2ggYSBnaXZlbiB0aGF0IGBDT05GSUdfTkVUYCBpcyBlbmFibGVkIG9uIG1vc3Qgc3lzdGVtcywgc28gaW5jbHVkaW5nIGl0IGlzbiYjMzk7dCBnb2luZyB0byBiZSBhIHByb2JsZW0uIE5vIGhhcm0sIG5vIGZvdWwuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoaXMgcGF0Y2ggaXMgbGFzZXItZm9jdXNlZC4gSXQgc2VlbXMgdG8gYmUgb25seSBtb2RpZnlpbmcgYGJwZl9zb2NrX2Zyb21fZmlsZWAsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuCgpCYXNlZCBvbiBhbGwgdGhpcywgSSYjMzk7ZCBzYXkgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBhZGRpbmcgYSBOVUxMIGNoZWNrIHRvIGBicGZfc29ja19mcm9tX2ZpbGVgIHRvIGd1YXJkIGFnYWluc3QgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGEgY2xhc3NpYyBmdXp6aW5nIHRhcmdldC4gVGhlIEJQRiBoZWxwZXIgaXMgdGhlIHNvbGUgbW9kaWZpZWQgc3ltYm9sLgoKVGhlcmVmb3JlOgoKKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlKioKKiAgICoqUmVhc29uaW5nOiBUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgdG8gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIEJQRiBoZWxwZXIgZnVuY3Rpb24gdG8gcHJldmVudCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBjYWxsZWQgZnJvbSBhIEJQRiBwcm9ncmFtIHdpdGggYSBOVUxMIGZpbGUgcG9pbnRlci4qKgoqICAgKipGb2N1c1N5bWJvbHM6IFsmIzM0O2JwZl9zb2NrX2Zyb21fZmlsZSYjMzQ7XSoqCiogICAqKkVuYWJsZUNvbmZpZ3M6IFsmIzM0O0JQRl9TWVNDQUxMJiMzNDssICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LCAmIzM0O05FVCYjMzQ7XSoqCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9zb2NrX2Zyb21fZmlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGNhbGxlZCBmcm9tIGEgQlBGIHByb2dyYW0gd2l0aCBhIE5VTEwgZmlsZSBwb2ludGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9zb2NrX2Zyb21fZmlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGNhbGxlZCBmcm9tIGEgQlBGIHByb2dyYW0gd2l0aCBhIE5VTEwgZmlsZSBwb2ludGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMDo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIwOjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAgYmVmb3JlIGNhbGxpbmcgYHNvY2tfZnJvbV9maWxlKClgLiBUaGlzIHByZXZlbnRzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBhIG1lbW9yeSBzYWZldHkgaXNzdWUgdGhhdCBpcyBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHRzIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmOWE4NDEwNDc4YmY3M2UwZmQ4ZDVhYjNjNGVkZTY1MDA0OGY4NTMxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMjA6NTU6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDE2ODQ1OTg3YjI0NDkuLjdjM2NhYWU0YmFmYzMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC0xMjE4Miw3ICYjNDM7MTIxODIsMTAgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHsKIAogQlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpCiB7Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nKXNvY2tfZnJvbV9maWxlKGZpbGUpOwomIzQzOwlpZiAoZmlsZSkKJiM0MzsJCXJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTsKJiM0MzsKJiM0MzsJcmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7CiB9CiAKIEJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMQoJCQkJCQkJb3V0cHV0OiAxMjEKCQkJCQkJCXRob3VnaHRzOiAyOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBtb2RpZmljYXRpb24gdG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkgc2VlIGl0JiMzOTtzIGFkZGluZyBhIE5VTEwgY2hlY2sgZm9yIHRoZSBgZmlsZWAgcG9pbnRlciBiZWZvcmUgY2FsbGluZyBgc29ja19mcm9tX2ZpbGVgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyB0ZWNobmlxdWUg4oCTIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgY2hhbmdlIGl0c2VsZiBpcyBzaW1wbGU6IGlmIGBmaWxlYCBpcyBOVUxMLCByZXR1cm4gTlVMTC4KClRoZSBnb29kIHRoaW5nIGlzIHRoaXMga2luZCBvZiBlcnJvciB3b3VsZCBiZSBjYXVnaHQgYnkgdGhlIHVzdWFsIGtlcm5lbCBtZWNoYW5pc21zIOKAkyBhIHBhZ2UgZmF1bHQgb3IgS0FTQU4gd291bGQgaW1tZWRpYXRlbHkgZmxhZyB0aGUgaXNzdWUuIFdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBhbnkgbmV3IGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQgaGVyZSwgb3IgZXZlbiBtb2RpZnlpbmcgYW55IGV4aXN0aW5nIG9uZXMuIEl0JiMzOTtzIGEgY2xlYW4gZml4LgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2gsIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlIGBmaWxlYCBwb2ludGVyIGNvbWVzIGluIGFzIGFuIGFyZ3VtZW50LCBhbmQgYHNvY2tfZnJvbV9maWxlYCBkZWZpbml0ZWx5IGV4cGVjdHMgYSBgc3RydWN0IGZpbGUgKmAuIFdpdGhvdXQgdGhlIGNoZWNrLCBhIE5VTEwgYGZpbGVgIHdvdWxkIGxlYWQgdG8gdGhlIGZ1bmN0aW9uIGRlcmVmZXJlbmNpbmcgdGhlIHBvaW50ZXIsIGFuZCB0aGF0JiMzOTtzIHByZWNpc2VseSB3aGF0IHdlJiMzOTtyZSBhdm9pZGluZy4gV2l0aCB0aGlzIHBhdGNoLCBpZiBgZmlsZWAgaXMgTlVMTCwgd2UganVzdCByZXR1cm4gTlVMTC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZW1lbnQgaGVyZS4KClRoZXJlZm9yZSwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4IGFuZCBsYWNrIG9mIGFueSBLTVNBTi1yZWxhdGVkIGNvbmNlcm5zLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOYCB0byBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayB0byBgYnBmX3NvY2tfZnJvbV9maWxlYCBiZWZvcmUgY2FsbGluZyBgc29ja19mcm9tX2ZpbGUoKWAuIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIHRvIGBicGZfc29ja19mcm9tX2ZpbGVgIGJlZm9yZSBjYWxsaW5nIGBzb2NrX2Zyb21fZmlsZSgpYC4gVGhpcyBwcmV2ZW50cyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgYSBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgaXMgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0cyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMjA6NTU6MTMuMzU5MzM1NTc2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgzNjkyOTI2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9FVkVOVFNcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Zyb21fZmlsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayB0byBgYnBmX3NvY2tfZnJvbV9maWxlYCBiZWZvcmUgY2FsbGluZyBgc29ja19mcm9tX2ZpbGUoKWAuIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgdG8gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIEJQRiBoZWxwZXIgZnVuY3Rpb24gdG8gcHJldmVudCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBjYWxsZWQgZnJvbSBhIEJQRiBwcm9ncmFtIHdpdGggYSBOVUxMIGZpbGUgcG9pbnRlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjA6NTU6MTMuMzU5MzQxMDg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY0ODA3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmOWE4NDEwNDc4YmY3M2UwZmQ4ZDVhYjNjNGVkZTY1MDA0OGY4NTMxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDIwOjU1OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5pbmRleCAxNjg0NTk4N2IyNDQ5Li43YzNjYWFlNGJhZmMzIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXFxuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5AQCAtMTIxODIsNyArMTIxODIsMTAgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHtcXG4gXFxuIEJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxcbiB7XFxuLVxcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcXG4rXFx0aWYgKGZpbGUpXFxuK1xcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcXG4rXFxuK1xcdHJldHVybiAodW5zaWduZWQgbG9uZylOVUxMO1xcbiB9XFxuIFxcbiBCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjA6NTU6MTMuODY2NzQ3MTExWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzEyMDYyNjE5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9FVkVOVFNcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Zyb21fZmlsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIHRvIHRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBCUEYgaGVscGVyIGZ1bmN0aW9uIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gY2FsbGVkIGZyb20gYSBCUEYgcHJvZ3JhbSB3aXRoIGEgTlVMTCBmaWxlIHBvaW50ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY5YTg0MTA0NzhiZjczZTBmZDhkNWFiM2M0ZWRlNjUwMDQ4Zjg1MzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAyMDo1NToxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDE2ODQ1OTg3YjI0NDkuLjdjM2NhYWU0YmFmYzMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0xMjE4Miw3ICsxMjE4MiwxMCBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xuIFxuIEJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxuIHtcbi1cdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbitcdGlmIChmaWxlKVxuK1x0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7XG4rXG4rXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpTlVMTDtcbiB9XG4gXG4gQlRGX0lEX0xJU1QoYnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHMpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NToxMy44NjY3NDg1ODFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU1MDkxMDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBIZWxwZXIgRnVuY3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBicGZfc29ja19mcm9tX2ZpbGVgIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0IGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbiBiZWNhdXNlIEJQRiBoZWxwZXIgZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBmb3IgQlBGIHByb2dyYW0gZnVuY3Rpb25hbGl0eSwgYW5kIGFueSBjaGFuZ2UgaGVyZSBpcyBwb3RlbnRpYWxseSBpbXBhY3RmdWwuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBhIE5VTEwgY2hlY2sgb24gdGhlIGBmaWxlYCBhcmd1bWVudCBiZWZvcmUgaXQncyBwYXNzZWQgdG8gYHNvY2tfZnJvbV9maWxlYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgZGVmZW5zaXZlIG1lYXN1cmUsIHByZXN1bWFibHkuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBgYnBmX3NvY2tfZnJvbV9maWxlYCBpcyBhIEJQRiAqaGVscGVyKiwgbWVhbmluZyBCUEYgcHJvZ3JhbXMgZGlyZWN0bHkgY2FsbCBpdC4gSXQncyBhbG1vc3QgZ3VhcmFudGVlZCB0byBiZSByZWFjaGFibGUgY29kZSwgYW5kIHRoYXQgbWVhbnMgaXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBhbmQgdnVsbmVyYWJpbGl0eSBhbmFseXNpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy5cblxuU28sIGxldCdzIG5haWwgZG93biBhIGZldyB0aGluZ3MuIEknbGwgc2VhcmNoIGZvciBjb25maWcgb3B0aW9ucyBhbmQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHJlbGV2YW50IHN5bWJvbHMgbGlrZSB0aGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYuIEknbSBnb2luZyB0byBncmVwIGZvciBgYnBmX3NvY2tfZnJvbV9maWxlYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHNlZSBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGF0IGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjE3LjkyMTg0MzQxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ5MzgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc29ja19mcm9tX2ZpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTIxNzU9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTgyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTgzOkJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTg0LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTkxOkJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkyLUJURl9JRChzdHJ1Y3QsIHNvY2tldClcXG5uZXQvY29yZS9maWx0ZXIuYz0xMjE5Mz1CVEZfSUQoc3RydWN0LCBmaWxlKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTY6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Ny1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk4LVxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5OTpcXHQucmV0X2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzBdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAwLVxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjAxOlxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzFdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAyLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjE3Ljk4MDM0NDA1N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzcyMzk0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBicGZfc29ja19mcm9tX2ZpbGVgKipcblxuT2theSwgc28gYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgZmxhZ2dlZCBhcyBhIEJQRiBoZWxwZXIuIFJpZ2h0LCB0aGF0J3MgaW1wb3J0YW50IGNvbnRleHQuIFRoYXQgbWVhbnMgaXQncyBhIGtlcm5lbCBmdW5jdGlvbiBhdmFpbGFibGUgd2l0aGluIGEgQlBGIHByb2dyYW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQncyBiZWluZyBsZXZlcmFnZWQgaW4gdGhlIHN5c3RlbS4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGV2ZXJ5d2hlcmUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgYWN0dWFsbHkgKnVzZWQqLiBJJ2xsIHNwZWNpZmljYWxseSBmb2N1cyBvbiB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90b2AgZnVuY3Rpb24gZm9yIG5vdywgdG8gbmFycm93IHRoZSBzY29wZSBvZiB0aGUgc2VhcmNoLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGVyZSB3ZSBmaW5kIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTY5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjA6NTU6MjEuMjE3NTg2MjI5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDk1OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zb2NrX2Zyb21fZmlsZV9wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMjE5Mz1CVEZfSUQoc3RydWN0LCBmaWxlKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTYtXFx0LmZ1bmNcXHRcXHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjA6NTU6MjEuMjY5MDg4NDE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0MTgzMTgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG9gIGluIHRoZSBLZXJuZWwgU291cmNlKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGVyZSBgYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvYCBpcyB1c2VkIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHBvdGVudGlhbGx5IGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBzb2NrZXQtcmVsYXRlZCBCUEYgcHJvZ3JhbXMgYW5kIGludGVyYWN0aW9ucy4gTXkgZmlyc3QgbW92ZSBpcyB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgc2NhbiBldmVyeXRoaW5nLiBJJ2xsIG5lZWQgYSBjb21wcmVoZW5zaXZlIHNlYXJjaCwgc28gSSdsbCBiZSBzdXJlIHRoZSBzZWFyY2ggc3RhcnRzIGF0IHRoZSByb290LCBzbyBJIHdpbGwgbGlrZWx5IHVzZSBgZ3JlcCAtciBcImJwZl9zb2NrX2Zyb21fZmlsZV9wcm90b1wiIC5gLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgY29tcGxldGUgcGljdHVyZSwgcGlucG9pbnRpbmcgYWxsIG9jY3VycmVuY2VzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBkcmF3IHNvbWUgY29uY2x1c2lvbnMgYWJvdXQgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbi4gSSdsbCBwcm9iYWJseSBiZSBtb3N0IGludGVyZXN0ZWQgaW4gaG93IGl0J3MgdXNlZCB3aXRoIEJQRiBoZWxwZXJzIG9yIGluIG5ldHdvcmtpbmcgY29kZSwgZGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLiBUaGUgY29udGV4dCB3aWxsIHRlbGwgbWUgZXZlcnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjI1LjMxMDkyMzIyNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA3MDI4MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zb2NrX2Zyb21fZmlsZV9wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0zOTI1PWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2t0aW1lX2dldF9jb2Fyc2VfbnNfcHJvdG87XFxuaW5jbHVkZS9saW51eC9icGYuaDozOTI2OmV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkyNy1leHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc29ja2V0X3B0cl9jb29raWVfcHJvdG87XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcyNj10cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzU0LVxcdGNhc2UgQlBGX0ZVTkNfc29ja19mcm9tX2ZpbGU6XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3NTU6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfcHJvdG87XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3NTYtXFx0Y2FzZSBCUEZfRlVOQ19nZXRfc29ja2V0X2Nvb2tpZTpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTQtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Ni1cXHQuZnVuY1xcdFxcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NToyNy4zMTc5NTk4NzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQyMjQ5NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKlRyYWNpbmcgYW5kIEJQRiBBdmFpbGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIGNvbnN0cnVjdCwgd2hhdGV2ZXIgXCJpdFwiIGlzLCBpcyBjbGVhcmx5IGRlZXBseSBpbnRlZ3JhdGVkIHdpdGggdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gVGhlIGZhY3QgdGhhdCBpdCdzIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGFuZCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgdHJhY2luZ19wcm9nX2Z1bmNfcHJvdG9gIGluc3RhbnRseSBzaWduYWxzIHRoYXQgaXQncyBhIGtleSBjb21wb25lbnQgZm9yIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byB0YXAgaW50byBhbmQgb2JzZXJ2ZSBrZXJuZWwgZXZlbnRzLiBUaGF04oCZcyBhIGNyaXRpY2FsIGxpbmsgZm9yIGRlYnVnZ2luZywgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGFuZCBzZWN1cml0eS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGVuYWJsaW5nIHByZXJlcXVpc2l0ZXMsIHdoaWNoIGlzIHdoYXQgdGhlIGNvbmZpZyBvcHRpb25zIGltcGx5OiBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19CUEZfRVZFTlRTYCwgYW5kIGBDT05GSUdfTkVUYC4gVGhvc2UgbWFrZSBwZXJmZWN0IHNlbnNlLiBCUEYgc3lzY2FsbCBzdXBwb3J0IHByb3ZpZGVzIHRoZSBpbnRlcmZhY2UsIGV2ZW50cyBlbmFibGVzIHRoZSBob29rcywgYW5kIG5ldHdvcmsgc3VwcG9ydCBpcyB2ZXJ5IG9mdGVuIHdoYXTigJlzIGJlaW5nIHRyYWNlZC4gVGhlIG5ldHdvcmsgaXMgdXN1YWxseSBpbnZvbHZlZCBzb21laG93LlxuXG5Ob3cgSSBuZWVkIHRvIHBpdm90IGFuZCBkb3VibGUtY2hlY2sgaG93IG5ldHdvcmtpbmcgaXMgaG9va2VkIHVwIGZvciBCUEYuIFNwZWNpZmljYWxseSBJIG5lZWQgdG8gbG9vayBhdCBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHNlZSBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGggdGhlIG5ldHdvcmsgc3RhY2suIEkgYW50aWNpcGF0ZSB0aGlzIGlzIHdoZXJlIHRoZSBsb3dlci1sZXZlbCBwYWNrZXQgZmlsdGVyaW5nIGFuZCBldmVudCBob29raW5nIGlzIGxpa2VseSBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjMxLjU2MDIxMjc1NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyMzgzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsdGVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlxcdFxcdFxcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cXHRcXHRcXHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjA6NTU6MzEuNjA5NDYxNjAzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTA4NjQxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBLZXJuZWwgQlBGIEludGVncmF0aW9uKipcblxuT2theSwgc28gYG5ldC9jb3JlL2ZpbHRlci5jYCBpcyBkZWZpbml0ZWx5IGEgY29yZSBjb21wb25lbnQgaWYgbmV0d29ya2luZyBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gSSdtIHRyeWluZyB0byB0cmFjZSB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX3NvY2tfZnJvbV9maWxlYCwgYW5kIGEgaHVuY2gganVzdCBoaXQgbWUg4oCTIHNpbmNlIGl0IGRlYWxzIHdpdGggZmlsZSBkZXNjcmlwdG9ycyBhbmQgQlBGLCBpdCdzIHByb2JhYmx5IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIElzIGl0IGhpZGRlbiBiZWhpbmQgYSBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgZ3VhcmQgb3Igc29tZXRoaW5nIHNpbWlsYXI/IEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBMZXQncyBqdW1wIG92ZXIgdG8gYG5ldC9jb3JlL2ZpbHRlci5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgMTIxODIuIFRoYXQgc2hvdWxkIHB1dCBtZSByaWdodCBpbiB0aGUgdmljaW5pdHkgb2YgdGhlIGZ1bmN0aW9uJ3MgZGVjbGFyYXRpb24gb3IgZGVmaW5pdGlvbiBhbmQgY2xhcmlmeSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NTozNS41MjAzMjk3MjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQyNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMTUwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIxNTA6XFx0e1xcbjEyMTUxOlxcdFxcdC8qIHVuaXhfc29jayB0eXBlIGlzIG5vdCBnZW5lcmF0ZWQgaW4gZHdhcmYgYW5kIGhlbmNlIGJ0ZixcXG4xMjE1MjpcXHRcXHQgKiB0cmlnZ2VyIGFuIGV4cGxpY2l0IHR5cGUgZ2VuZXJhdGlvbiBoZXJlLlxcbjEyMTUzOlxcdFxcdCAqL1xcbjEyMTU0OlxcdFxcdEJURl9UWVBFX0VNSVQoc3RydWN0IHVuaXhfc29jayk7XFxuMTIxNTU6XFx0XFx0aWYgKHNrIFxcdTAwMjZcXHUwMDI2IHNrX2lzX3VuaXgoc2spKVxcbjEyMTU2OlxcdFxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZylzaztcXG4xMjE1NzpcXHRcXG4xMjE1ODpcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpTlVMTDtcXG4xMjE1OTpcXHR9XFxuMTIxNjA6XFx0XFxuMTIxNjE6XFx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fdW5peF9zb2NrX3Byb3RvID0ge1xcbjEyMTYyOlxcdFxcdC5mdW5jXFx0XFx0XFx0PSBicGZfc2tjX3RvX3VuaXhfc29jayxcXG4xMjE2MzpcXHRcXHQuZ3BsX29ubHlcXHRcXHQ9IGZhbHNlLFxcbjEyMTY0OlxcdFxcdC5yZXRfdHlwZVxcdFxcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcXG4xMjE2NTpcXHRcXHQuYXJnMV90eXBlXFx0XFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcXG4xMjE2NjpcXHRcXHQucmV0X2J0Zl9pZFxcdFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1VOSVhdLFxcbjEyMTY3OlxcdH07XFxuMTIxNjg6XFx0XFxuMTIxNjk6XFx0QlBGX0NBTExfMShicGZfc2tjX3RvX21wdGNwX3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxcbjEyMTcwOlxcdHtcXG4xMjE3MTpcXHRcXHRCVEZfVFlQRV9FTUlUKHN0cnVjdCBtcHRjcF9zb2NrKTtcXG4xMjE3MjpcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYnBmX21wdGNwX3NvY2tfZnJvbV9zdWJmbG93KHNrKTtcXG4xMjE3MzpcXHR9XFxuMTIxNzQ6XFx0XFxuMTIxNzU6XFx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHtcXG4xMjE3NjpcXHRcXHQuZnVuY1xcdFxcdD0gYnBmX3NrY190b19tcHRjcF9zb2NrLFxcbjEyMTc3OlxcdFxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuMTIxNzg6XFx0XFx0LnJldF90eXBlXFx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxcbjEyMTc5OlxcdFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fU09DS19DT01NT04sXFxuMTIxODA6XFx0XFx0LnJldF9idGZfaWRcXHQ9IFxcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9NUFRDUF0sXFxuMTIxODE6XFx0fTtcXG4xMjE4MjpcXHRcXG4xMjE4MzpcXHRCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgc3RydWN0IGZpbGUgKiwgZmlsZSlcXG4xMjE4NDpcXHR7XFxuMTIxODU6XFx0XFx0aWYgKGZpbGUpXFxuMTIxODY6XFx0XFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXNvY2tfZnJvbV9maWxlKGZpbGUpO1xcbjEyMTg3OlxcdFxcbjEyMTg4OlxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZylOVUxMO1xcbjEyMTg5OlxcdH1cXG4xMjE5MDpcXHRcXG4xMjE5MTpcXHRCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcylcXG4xMjE5MjpcXHRCVEZfSUQoc3RydWN0LCBzb2NrZXQpXFxuMTIxOTM6XFx0QlRGX0lEKHN0cnVjdCwgZmlsZSlcXG4xMjE5NDpcXHRcXG4xMjE5NTpcXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvID0ge1xcbjEyMTk2OlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfc29ja19mcm9tX2ZpbGUsXFxuMTIxOTc6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4xMjE5ODpcXHRcXHQucmV0X3R5cGVcXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXFxuMTIxOTk6XFx0XFx0LnJldF9idGZfaWRcXHQ9IFxcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkc1swXSxcXG4xMjIwMDpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0JURl9JRCxcXG4xMjIwMTpcXHRcXHQuYXJnMV9idGZfaWRcXHQ9IFxcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkc1sxXSxcXG4xMjIwMjpcXHR9O1xcbjEyMjAzOlxcdFxcbjEyMjA0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbjEyMjA1OlxcdGJwZl9za19iYXNlX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuMTIyMDY6XFx0e1xcbjEyMjA3OlxcdFxcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZnVuYztcXG4xMjIwODpcXHRcXG4xMjIwOTpcXHRcXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcXG4xMjIxMDpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrY190b190Y3A2X3NvY2s6XFxuMTIyMTE6XFx0XFx0XFx0ZnVuYyA9IFxcdTAwMjZicGZfc2tjX3RvX3RjcDZfc29ja19wcm90bztcXG4xMjIxMjpcXHRcXHRcXHRicmVhaztcXG4xMjIxMzpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrY190b190Y3Bfc29jazpcXG4xMjIxNDpcXHRcXHRcXHRmdW5jID0gXFx1MDAyNmJwZl9za2NfdG9fdGNwX3NvY2tfcHJvdG87XFxuMTIyMTU6XFx0XFx0XFx0YnJlYWs7XFxuMTIyMTY6XFx0XFx0Y2FzZSBCUEZfRlVOQ19za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2s6XFxuMTIyMTc6XFx0XFx0XFx0ZnVuYyA9IFxcdTAwMjZicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrX3Byb3RvO1xcbjEyMjE4OlxcdFxcdFxcdGJyZWFrO1xcbjEyMjE5OlxcdFxcdGNhc2UgQlBGX0ZVTkNfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2s6XFxuMTIyMjA6XFx0XFx0XFx0ZnVuYyA9IFxcdTAwMjZicGZfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2tfcHJvdG87XFxuMTIyMjE6XFx0XFx0XFx0YnJlYWs7XFxuMTIyMjI6XFx0XFx0Y2FzZSBCUEZfRlVOQ19za2NfdG9fdWRwNl9zb2NrOlxcbjEyMjIzOlxcdFxcdFxcdGZ1bmMgPSBcXHUwMDI2YnBmX3NrY190b191ZHA2X3NvY2tfcHJvdG87XFxuMTIyMjQ6XFx0XFx0XFx0YnJlYWs7XFxuMTIyMjU6XFx0XFx0Y2FzZSBCUEZfRlVOQ19za2NfdG9fdW5peF9zb2NrOlxcbjEyMjI2OlxcdFxcdFxcdGZ1bmMgPSBcXHUwMDI2YnBmX3NrY190b191bml4X3NvY2tfcHJvdG87XFxuMTIyMjc6XFx0XFx0XFx0YnJlYWs7XFxuMTIyMjg6XFx0XFx0Y2FzZSBCUEZfRlVOQ19za2NfdG9fbXB0Y3Bfc29jazpcXG4xMjIyOTpcXHRcXHRcXHRmdW5jID0gXFx1MDAyNmJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90bztcXG4xMjIzMDpcXHRcXHRcXHRicmVhaztcXG4xMjIzMTpcXHRcXHRjYXNlIEJQRl9GVU5DX2t0aW1lX2dldF9jb2Fyc2VfbnM6XFxuMTIyMzI6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfa3RpbWVfZ2V0X2NvYXJzZV9uc19wcm90bztcXG4xMjIzMzpcXHRcXHRkZWZhdWx0OlxcbjEyMjM0OlxcdFxcdFxcdHJldHVybiBicGZfYmFzZV9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xcbjEyMjM1OlxcdFxcdH1cXG4xMjIzNjpcXHRcXG4xMjIzNzpcXHRcXHRpZiAoIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNldG9rZW4sIENBUF9QRVJGTU9OKSlcXG4xMjIzODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMjIzOTpcXHRcXG4xMjI0MDpcXHRcXHRyZXR1cm4gZnVuYztcXG4xMjI0MTpcXHR9XFxuMTIyNDI6XFx0XFxuMTIyNDM6XFx0LyoqXFxuMTIyNDQ6XFx0ICogYnBmX3NrYl9tZXRhX3BvaW50ZXIoKSAtIEdldHMgYSBtdXRhYmxlIHBvaW50ZXIgd2l0aGluIHRoZSBza2IgbWV0YWRhdGEgYXJlYS5cXG4xMjI0NTpcXHQgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIGNhcnJ5aW5nIHRoZSBtZXRhZGF0YVxcbjEyMjQ2OlxcdCAqIEBvZmZzZXQ6IG9mZnNldCBpbnRvIHRoZSBtZXRhZGF0YSBhcmVhLCBtdXN0IGJlIFxcdTAwM2M9IHNrYl9tZXRhZGF0YV9sZW4oKVxcbjEyMjQ3OlxcdCAqL1xcbjEyMjQ4OlxcdHZvaWQgKmJwZl9za2JfbWV0YV9wb2ludGVyKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmZzZXQpXFxuMTIyNDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NTozNS41MjA5NzM4OTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5MzM3NjI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBCUEYgRnVuY3Rpb24gQXZhaWxhYmlsaXR5KipcblxuT2theSwgc28gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIGZ1bmN0aW9uLCByaWdodCwgdGhhdCdzIGRlZmluZWQgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gTm8gYmlnIGRlYWwuIEJ1dCwgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZW50aXJlICpmaWxlKiwgYG5ldC9jb3JlL2ZpbHRlci5jYCwgZXZlbiAqY29tcGlsZWQqIGludG8gdGhlIGtlcm5lbCB3ZSdyZSB3b3JraW5nIHdpdGg/IFNwZWNpZmljYWxseSwgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAgZW5hYmxlZD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIHZlcmlmeS4gVGltZSB0byBnbyBiYWNrIGFuZCBjcm9zcy1yZWZlcmVuY2UgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgYWdhaW4uIEkgbmVlZCB0byBjb25maXJtIHRoYXQgZGVwZW5kZW5jeSBleHBsaWNpdGx5LiBHb3R0YSBtYWtlIHN1cmUgd2UndmUgYWN0dWFsbHkgZ290IHRoZSBCUEYgc3lzY2FsbCBzdXBwb3J0IGJ1aWx0IGluIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgYW55IGRlZXBlciBpbnRvIHRoaXMgZnVuY3Rpb24ncyBiZWhhdmlvdXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1OTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjM5LjYxNDM1OTI0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTE1ODgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWx0ZXIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NTozOS42NjU1MjU1NThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1MDQ4MjU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRXhhbWluaW5nIHRoZSBCUEYgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY29kZSwgYW5kIGl0J3MgY2xlYXIgaXQncyBhbHdheXMgY29tcGlsZWQuIEJ1dCBob2xkIG9uLCB3ZSdyZSBkZWFsaW5nIHdpdGggYGJwZl9zb2NrX2Zyb21fZmlsZWAsIHdoaWNoIGlzIGEgQlBGIGhlbHBlciBmdW5jdGlvbiwgYW5kIHRoYXQgbWVhbnMgaXQgaW5oZXJlbnRseSByZWxpZXMgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAgdG8gYmUgdHJ1bHkgZnVuY3Rpb25hbC4gSXQncyB0aGUgbHluY2hwaW4uXG5cbkhtbSwgd2FpdCBhIG1pbnV0ZS4uLiBJIHJlY2FsbCBzZWVpbmcgYGJwZl9zb2NrX2Zyb21fZmlsZWAgdXNlZCBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gVGhhdCdzIGludGVyZXN0aW5nLiBJIHNob3VsZCB2ZXJpZnkgdGhhdC5cblxuT2theSwgdGltZSB0byBjaGVjayB0aGUgS2NvbmZpZyBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gSSBuZWVkIHRvIGNvbmZpcm0gaG93IHRoZSBjb25maWd1cmF0aW9uIGludGVyYWN0cyB3aXRoIHRoYXQgc3BlY2lmaWMgdHJhY2UgZmlsZS4gSSBuZWVkIHRvIGtub3cgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGluIHBsYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NTo0NC4wMTYwMTA5OTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTUzNTIwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhY2Uub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6NTY6Q0ZMQUdTX2JwZl90cmFjZS5vIDo9IC1JJChzcmMpXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICs9IHRyYWNlX2V2ZW50c191c2VyLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSArPSBicGZfdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICs9IHRyYWNlX2twcm9iZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjQ0LjQ0NTU1MjM1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODcwMTgwNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQ2hlY2tpbmcgQlBGIEV2ZW50IENvbmZpZ3VyYXRpb24gZm9yIFRyYWNpbmcqKlxuXG5SaWdodCwgc28gSSBrbm93IEkgbmVlZCBgQ09ORklHX0JQRl9FVkVOVFNgLiBUaGF0IG11Y2ggaXMgY2xlYXIuIEFuZCwgb2YgY291cnNlLCB0byBhY3R1YWxseSAqZG8qIGFueXRoaW5nIHdpdGggQlBGLCBzcGVjaWZpY2FsbHkgbG9hZGluZyBwcm9ncmFtcywgSSdtIGdvaW5nIHRvIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXMgd2VsbC4gVGhhdCdzIGEgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRyYWNpbmcgaXMgdXNpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiAgSSdtIGdvaW5nIHRvIGdvIHN0cmFpZ2h0IHRvIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGJlY2F1c2UgdGhhdCBzb3VuZHMgbGlrZSB0aGUgcmlnaHQgc3BvdC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBgdHJhY2luZ19wcm9nX2Z1bmNfcHJvdG9gIGRlY2xhcmF0aW9uLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBCUEYgZWxlbWVudHMgYXJlIGJlaW5nIGludGVncmF0ZWQgaW50byB0aGUgdHJhY2luZyBpbmZyYXN0cnVjdHVyZSwgZXNwZWNpYWxseSBzaW5jZSB0aGUgY29kZSByZWZlcmVuY2VzIGV2ZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ0MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjQ4LjMxNTczNTk5NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyMDExNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJhY2luZ19wcm9nX2Z1bmNfcHJvdG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzI1PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3MjY6dHJhY2luZ19wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3Mjcte1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE4MzQ9Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgdHJhY2luZ192ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE4MzU6XFx0LmdldF9mdW5jX3Byb3RvICA9IHRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvLFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODM2LVxcdC5pc192YWxpZF9hY2Nlc3MgPSB0cmFjaW5nX3Byb2dfaXNfdmFsaWRfYWNjZXNzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NTo0OC4zNjU5NDk3MDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2MzczOTc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgYnBmX3NvY2tfZnJvbV9maWxlYCBmb3IgVHJhY2luZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IGBicGZfc29ja19mcm9tX2ZpbGVgIHJlbGF0ZXMgdG8gdHJhY2luZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYHRyYWNpbmdfdmVyaWZpZXJfb3BzYC4gSXQgbG9va3MgbGlrZSBgdHJhY2luZ19wcm9nX2Z1bmNfcHJvdG9gIGlzIHRoZSBrZXkgaGVyZSDigJMgdGhhdCdzIHRoZSBicmlkZ2UuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBUaGVyZWZvcmUsIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgYXJlIGBDT05GSUdfQlBGX0VWRU5UU2AgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiBObyBzdXJwcmlzZXMgdGhlcmUuXG5cbkJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmcuIGBDT05GSUdfTkVUYCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQsIHNvIGxldCdzIGluY2x1ZGUgaXQgaW4gb3VyIGNvbnNpZGVyYXRpb25zIGp1c3QgdG8gYmUgc2FmZS4gTm93LCBsZXQncyBnZXQgaW50byB0aGUgZGV0YWlsczogSSBzaG91bGQgY2hlY2sgdGhlIHNvdXJjZSBmaWxlIHdoZXJlIGBicGZfc29ja19mcm9tX2ZpbGVgIGlzIGRlZmluZWQuIEknbGwgbmVlZCB0byBzZWUgaWYgaXQncyBwb3RlbnRpYWxseSBjb25kaXRpb25hbCBiYXNlZCBvbiBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcyB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCB3aWxsIHJldmVhbCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIGluZmx1ZW5jaW5nIGl0cyBhdmFpbGFiaWxpdHkgYW5kIHVzZSBmb3IgdHJhY2luZy4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkyMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NTo1Mi43Mjk2OTI1MjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxODE1OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zb2NrX2Zyb21fZmlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMjE3NT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxODItXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxODM6QlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxODQte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTAtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTE6QlRGX0lEX0xJU1QoYnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHMpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTItQlRGX0lEKHN0cnVjdCwgc29ja2V0KVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTQtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NjpcXHQuZnVuY1xcdFxcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk3LVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTgtXFx0LnJldF90eXBlXFx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk5OlxcdC5yZXRfYnRmX2lkXFx0PSBcXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMF0sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMDAtXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19CVEZfSUQsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIyMDE6XFx0LmFyZzFfYnRmX2lkXFx0PSBcXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMV0sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMDItfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjA6NTU6NTIuNzgxNTE0OTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNDk1MzAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYCoqXG5cbk9rYXksIHRpbWUgdG8gemVybyBpbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgI2lmZGVmYCBibG9ja3MsIHNwZWNpZmljYWxseSB0aG9zZSBhcm91bmQgbGluZSAxMjE4MyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0IGZpbGUncyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgc28gdGhlIGNvbnRleHQgYXJvdW5kIHRoZSBmaWx0ZXIgY29kZSBpcyBrZXkuIEknbSBndWVzc2luZyB0aGF0IHNwZWNpZmljIGxpbmUgaXMgdGhlIGVudHJ5IHBvaW50LCBvciBtYXliZSBwYXJ0IG9mIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2VjdGlvbiByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZmVhdHVyZSBvciBwbGF0Zm9ybS4gTGV0J3Mgc3RhcnQgYnkgdW5kZXJzdGFuZGluZyB3aGF0J3MgYmVpbmcgY29uZGl0aW9uYWxseSBpbmNsdWRlZCBvciBleGNsdWRlZC4gSSdsbCBuZWVkIHRvIHNlZSB3aGF0IHRoZSBkZWZpbmVkIG1hY3JvcyBhcmUgYW5kIHdoYXQgaW1wYWN0IHRoZXkgaGF2ZSBvbiB0aGUgYmVoYXZpb3Igb2YgdGhhdCBjb2RlIGJsb2NrLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgYmFzZWQgb24gaG93IHRoZSBjb2RlIGlzIGNvbXBpbGVkLCBhbmQgdGhlIGdvYWwgd2lsbCBiZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgZGlmZmVyZW5jZXMgb24gdGhlIG92ZXJhbGwgZmlsdGVyaW5nIG1lY2hhbmlzbS4gSSBtaWdodCBhbHNvIGJlIGFudGljaXBhdGluZyBhIGRlYnVnZ2luZyBzY2VuYXJpbyBoZXJlLCBzbyBJJ2xsIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgY2x1ZXMgdG8gcG90ZW50aWFsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgxMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjU2LjUwNjQ3MTY4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzE1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIxMDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjEwMDpcXHRcXHQucmV0X3R5cGVcXHRcXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXFxuMTIxMDE6XFx0XFx0LmFyZzFfdHlwZVxcdFxcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXFxuMTIxMDI6XFx0XFx0LnJldF9idGZfaWRcXHRcXHQ9IFxcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9UQ1BfVFddLFxcbjEyMTAzOlxcdH07XFxuMTIxMDQ6XFx0XFxuMTIxMDU6XFx0QlBGX0NBTExfMShicGZfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxcbjEyMTA2OlxcdHtcXG4xMjEwNzpcXHQjaWZkZWYgQ09ORklHX0lORVRcXG4xMjEwODpcXHRcXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcF9wcm90IFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxcbjEyMTA5OlxcdFxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZylzaztcXG4xMjExMDpcXHQjZW5kaWZcXG4xMjExMTpcXHRcXG4xMjExMjpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4xMjExMzpcXHRcXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcHY2X3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpXFxuMTIxMTQ6XFx0XFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXNrO1xcbjEyMTE1OlxcdCNlbmRpZlxcbjEyMTE2OlxcdFxcbjEyMTE3OlxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZylOVUxMO1xcbjEyMTE4OlxcdH1cXG4xMjExOTpcXHRcXG4xMjEyMDpcXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b190Y3BfcmVxdWVzdF9zb2NrX3Byb3RvID0ge1xcbjEyMTIxOlxcdFxcdC5mdW5jXFx0XFx0XFx0PSBicGZfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2ssXFxuMTIxMjI6XFx0XFx0LmdwbF9vbmx5XFx0XFx0PSBmYWxzZSxcXG4xMjEyMzpcXHRcXHQucmV0X3R5cGVcXHRcXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXFxuMTIxMjQ6XFx0XFx0LmFyZzFfdHlwZVxcdFxcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXFxuMTIxMjU6XFx0XFx0LnJldF9idGZfaWRcXHRcXHQ9IFxcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9UQ1BfUkVRXSxcXG4xMjEyNjpcXHR9O1xcbjEyMTI3OlxcdFxcbjEyMTI4OlxcdEJQRl9DQUxMXzEoYnBmX3NrY190b191ZHA2X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxcbjEyMTI5OlxcdHtcXG4xMjEzMDpcXHRcXHQvKiB1ZHA2X3NvY2sgdHlwZSBpcyBub3QgZ2VuZXJhdGVkIGluIGR3YXJmIGFuZCBoZW5jZSBidGYsXFxuMTIxMzE6XFx0XFx0ICogdHJpZ2dlciBhbiBleHBsaWNpdCB0eXBlIGdlbmVyYXRpb24gaGVyZS5cXG4xMjEzMjpcXHRcXHQgKi9cXG4xMjEzMzpcXHRcXHRCVEZfVFlQRV9FTUlUKHN0cnVjdCB1ZHA2X3NvY2spO1xcbjEyMTM0OlxcdFxcdGlmIChzayBcXHUwMDI2XFx1MDAyNiBza19mdWxsc29jayhzaykgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQIFxcdTAwMjZcXHUwMDI2XFxuMTIxMzU6XFx0XFx0ICAgIHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfREdSQU0gXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4xMjEzNjpcXHRcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc2s7XFxuMTIxMzc6XFx0XFxuMTIxMzg6XFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7XFxuMTIxMzk6XFx0fVxcbjEyMTQwOlxcdFxcbjEyMTQxOlxcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX3VkcDZfc29ja19wcm90byA9IHtcXG4xMjE0MjpcXHRcXHQuZnVuY1xcdFxcdFxcdD0gYnBmX3NrY190b191ZHA2X3NvY2ssXFxuMTIxNDM6XFx0XFx0LmdwbF9vbmx5XFx0XFx0PSBmYWxzZSxcXG4xMjE0NDpcXHRcXHQucmV0X3R5cGVcXHRcXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXFxuMTIxNDU6XFx0XFx0LmFyZzFfdHlwZVxcdFxcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXFxuMTIxNDY6XFx0XFx0LnJldF9idGZfaWRcXHRcXHQ9IFxcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9VRFA2XSxcXG4xMjE0NzpcXHR9O1xcbjEyMTQ4OlxcdFxcbjEyMTQ5OlxcdEJQRl9DQUxMXzEoYnBmX3NrY190b191bml4X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxcbjEyMTUwOlxcdHtcXG4xMjE1MTpcXHRcXHQvKiB1bml4X3NvY2sgdHlwZSBpcyBub3QgZ2VuZXJhdGVkIGluIGR3YXJmIGFuZCBoZW5jZSBidGYsXFxuMTIxNTI6XFx0XFx0ICogdHJpZ2dlciBhbiBleHBsaWNpdCB0eXBlIGdlbmVyYXRpb24gaGVyZS5cXG4xMjE1MzpcXHRcXHQgKi9cXG4xMjE1NDpcXHRcXHRCVEZfVFlQRV9FTUlUKHN0cnVjdCB1bml4X3NvY2spO1xcbjEyMTU1OlxcdFxcdGlmIChzayBcXHUwMDI2XFx1MDAyNiBza19pc191bml4KHNrKSlcXG4xMjE1NjpcXHRcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc2s7XFxuMTIxNTc6XFx0XFxuMTIxNTg6XFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7XFxuMTIxNTk6XFx0fVxcbjEyMTYwOlxcdFxcbjEyMTYxOlxcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX3VuaXhfc29ja19wcm90byA9IHtcXG4xMjE2MjpcXHRcXHQuZnVuY1xcdFxcdFxcdD0gYnBmX3NrY190b191bml4X3NvY2ssXFxuMTIxNjM6XFx0XFx0LmdwbF9vbmx5XFx0XFx0PSBmYWxzZSxcXG4xMjE2NDpcXHRcXHQucmV0X3R5cGVcXHRcXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXFxuMTIxNjU6XFx0XFx0LmFyZzFfdHlwZVxcdFxcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXFxuMTIxNjY6XFx0XFx0LnJldF9idGZfaWRcXHRcXHQ9IFxcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9VTklYXSxcXG4xMjE2NzpcXHR9O1xcbjEyMTY4OlxcdFxcbjEyMTY5OlxcdEJQRl9DQUxMXzEoYnBmX3NrY190b19tcHRjcF9zb2NrLCBzdHJ1Y3Qgc29jayAqLCBzaylcXG4xMjE3MDpcXHR7XFxuMTIxNzE6XFx0XFx0QlRGX1RZUEVfRU1JVChzdHJ1Y3QgbXB0Y3Bfc29jayk7XFxuMTIxNzI6XFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKWJwZl9tcHRjcF9zb2NrX2Zyb21fc3ViZmxvdyhzayk7XFxuMTIxNzM6XFx0fVxcbjEyMTc0OlxcdFxcbjEyMTc1OlxcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX21wdGNwX3NvY2tfcHJvdG8gPSB7XFxuMTIxNzY6XFx0XFx0LmZ1bmNcXHRcXHQ9IGJwZl9za2NfdG9fbXB0Y3Bfc29jayxcXG4xMjE3NzpcXHRcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbjEyMTc4OlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcXG4xMjE3OTpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX1NPQ0tfQ09NTU9OLFxcbjEyMTgwOlxcdFxcdC5yZXRfYnRmX2lkXFx0PSBcXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfTVBUQ1BdLFxcbjEyMTgxOlxcdH07XFxuMTIxODI6XFx0XFxuMTIxODM6XFx0QlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXFxuMTIxODQ6XFx0e1xcbjEyMTg1OlxcdFxcdGlmIChmaWxlKVxcbjEyMTg2OlxcdFxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcXG4xMjE4NzpcXHRcXG4xMjE4ODpcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpTlVMTDtcXG4xMjE4OTpcXHR9XFxuMTIxOTA6XFx0XFxuMTIxOTE6XFx0QlRGX0lEX0xJU1QoYnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHMpXFxuMTIxOTI6XFx0QlRGX0lEKHN0cnVjdCwgc29ja2V0KVxcbjEyMTkzOlxcdEJURl9JRChzdHJ1Y3QsIGZpbGUpXFxuMTIxOTQ6XFx0XFxuMTIxOTU6XFx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcXG4xMjE5NjpcXHRcXHQuZnVuY1xcdFxcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxcbjEyMTk3OlxcdFxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuMTIxOTg6XFx0XFx0LnJldF90eXBlXFx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxcbjEyMTk5OlxcdFxcdC5yZXRfYnRmX2lkXFx0PSBcXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMF0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU1OjU2LjUwNjkwNTI1N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjI3MTUwODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMsIGFuZCBpdCdzIG5vdCBndWFyZGVkIGJ5IGFueSBgI2lmZGVmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gVGhhdCBtYWtlcyB0aGluZ3MgYSBiaXQgc2ltcGxlci4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIEkgb25seSBuZWVkIHRvIGNvbnNpZGVyIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0JQRl9FVkVOVFNgLiBUaGUgY3JpdGljYWwgcGFydCBoZXJlIGlzIGBicGZfc29ja19mcm9tX2ZpbGVgLlxuXG5IYW5nIG9uLCBpdCBsb29rcyBsaWtlIGBicGZfc29ja19mcm9tX2ZpbGVgIGlzIGRlZmluZWQgdXNpbmcgYEJQRl9DQUxMXzFgLiBSaWdodCwgc28gdGhlIGFjdHVhbCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyAqanVzdCogYGJwZl9zb2NrX2Zyb21fZmlsZWAuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgYnBmX3NvY2tfZnJvbV9maWxlYCAqaXMqIHRoZSBhY3R1YWwsIGZpbmFsIHN5bWJvbCBuYW1lIHRoYXQgZ2V0cyBleHBvc2VkLiBPa2F5LCBsZXQncyB0YWtlIGEgbG9vay4gWWVwLCBgQlBGX0NBTExfMWAgKmRvZXMqIHNlZW0gdG8gYmUgZXhwYW5kaW5nIHRvIGBicGZfc29ja19mcm9tX2ZpbGVgIGFzIEkgZXhwZWN0ZWQuXG5cbldhaXQgYSBzZWNvbmQuIE5vdyB0aGF0IEnigJltIHRha2luZyBhIGNsb3NlciBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBCUEZfQ0FMTF8xYCwgaXQgZXhwYW5kcyB0byAqYm90aCogYF9fX19icGZfc29ja19mcm9tX2ZpbGVgIGFuZCBgYnBmX3NvY2tfZnJvbV9maWxlYC4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYEJQRl9DQUxMXzFgIG1hY3JvIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGR1YWwgbmFtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NjowMS43MzQwNjAzNjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjY2MzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBCUEZfQ0FMTF8xXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD0yNjA9c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjI0LSNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MjU6I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDEsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYyNi0jZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NjowMS43ODQzMzI2NzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxMzcyNzk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gQlBGIEZ1bmN0aW9uIENhbGxzKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCwgXCJMZXQncyBjaGVjayBgQlBGX0NBTExfeGAsXCIgaW1tZWRpYXRlbHkgaGlnaGxpZ2h0cyBhIGNyaXRpY2FsIHBvaW50OiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mICp0aGF0KiBwYXJ0aWN1bGFyIEJQRiBjYWxsLiBJdCBpbXBsaWVzIGEgZGVlcGVyIGludmVzdGlnYXRpb24gaXMgcmVxdWlyZWQg4oCTIHdoZXRoZXIgaXQncyBhIHNwZWNpZmljIGZ1bmN0aW9uIG51bWJlciwgYSBzZXQgb2YgcmVsYXRlZCBmdW5jdGlvbnMsIG9yIG1heWJlIGV2ZW4gYSBzcGVjaWZpYyB1c2UtY2FzZSBJIGhhdmUgaW4gbWluZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IHRoaXMgY2FsbCBwcm92aWRlcyBhbmQgaG93IGl0IGNhbiBiZSB1c2VkIHdpdGhpbiB0aGUgZnJhbWV3b3JrIG9mIEJQRi4gVGhlIFwieFwiIGlzIHRoZSB2YXJpYWJsZTogd2hhdCBkb2VzIHRoZSBcInhcIiByZXByZXNlbnQ/IEFuIGluZGV4PyBBIHdpbGRjYXJkIGZvciBkaWZmZXJlbnQgY2FsbHM/IEl0cyBzcGVjaWZpYyBtZWFuaW5nIGlzICpjcnVjaWFsKiB0byB0aGUgbmV4dCBzdGVwcy4gR290dGEgZmlndXJlIHRoaXMgb3V0IGFuZCBjb25maXJtIG15IGJhc2UgdW5kZXJzdGFuZGluZy4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTczNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU2OjA1LjQ5ODA2NDQyM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0NTkxNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIEJQRl9DQUxMX3hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI2MD1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MTAtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MTE6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjEyLVxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NjowNS41NDg1MjkxOTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1MDY1NTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBCUEYgRmlsdGVyaW5nIFN0cnVjdHVyZXMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBCUEYgZmlsdGVyaW5nIGltcGxlbWVudGF0aW9uLiBJIHRoaW5rIEknbGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNjExLiBJIGhhdmUgYSBodW5jaCB0aGF0J3Mgd2hlcmUgSSBjYW4gZmluZCB0aGUgY3J1Y2lhbCBzdHJ1Y3R1cmVzIHRoYXQgZGVmaW5lIGhvdyB0aGVzZSBmaWx0ZXJzIGFyZSBvcmdhbml6ZWQgYW5kIG1hbmFnZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGRlYnVnIHRoaXMgcGFydGljdWxhciBpc3N1ZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgQlBGIHByb2dyYW0gcmVwcmVzZW50YXRpb24sIHRoZSBjb250ZXh0IHN0cnVjdHVyZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBtZXRhZGF0YS4gS25vd2luZyBob3cgdGhlc2UgdGhpbmdzIGFyZSBsYWlkIG91dCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXkgYWxsIHdvcmsgdG9nZXRoZXIuIExldCdzIGdldCByZWFkaW5nIGFuZCBzZWUgd2hhdCB3ZSB1bmNvdmVyIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA5NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU2OjA5LjQ5OTE4NzgxMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2MDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MDA6XFx0XFx0XFx0XFx0XFx0ICAgICAgKHVuc2lnbmVkIGxvbmcpMCwgKHQpMCkpKSBhXFxuIDYwMTpcXHQjZGVmaW5lIF9fQlBGX1Ygdm9pZFxcbiA2MDI6XFx0I2RlZmluZSBfX0JQRl9OXFxuIDYwMzpcXHRcXG4gNjA0OlxcdCNkZWZpbmUgX19CUEZfREVDTF9BUkdTKHQsIGEpIHQgICBhXFxuIDYwNTpcXHQjZGVmaW5lIF9fQlBGX0RFQ0xfUkVHUyh0LCBhKSB1NjQgYVxcbiA2MDY6XFx0XFxuIDYwNzpcXHQjZGVmaW5lIF9fQlBGX1BBRChuKVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYwODpcXHRcXHRfX0JQRl9NQVAobiwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9OLCB1NjQsIF9fdXJfMSwgdTY0LCBfX3VyXzIsICAgICAgIFxcXFxcXG4gNjA5OlxcdFxcdFxcdCAgdTY0LCBfX3VyXzMsIHU2NCwgX191cl80LCB1NjQsIF9fdXJfNSlcXG4gNjEwOlxcdFxcbiA2MTE6XFx0I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MTI6XFx0XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYxMzpcXHRcXHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyAgIFxcXFxcXG4gNjE0OlxcdFxcdHR5cGVkZWYgdTY0ICgqYnRmXyMjbmFtZSkoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgXFxcXFxcbiA2MTU6XFx0XFx0YXR0ciB1NjQgbmFtZShfX0JQRl9SRUcoeCwgX19CUEZfREVDTF9SRUdTLCBfX0JQRl9OLCBfX1ZBX0FSR1NfXykpOyAgICBcXFxcXFxuIDYxNjpcXHRcXHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSkgICAgIFxcXFxcXG4gNjE3OlxcdFxcdHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MTg6XFx0XFx0XFx0cmV0dXJuICgoYnRmXyMjbmFtZSlfX19fIyNuYW1lKShfX0JQRl9NQVAoeCxfX0JQRl9DQVNULF9fQlBGX04sX19WQV9BUkdTX18pKTtcXFxcXFxuIDYxOTpcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjIwOlxcdFxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MjE6XFx0XFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKVxcbiA2MjI6XFx0XFxuIDYyMzpcXHQjZGVmaW5lIF9fTk9BVFRSXFxuIDYyNDpcXHQjZGVmaW5lIEJQRl9DQUxMXzAobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2MjU6XFx0I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDEsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjI2OlxcdCNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgyLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDYyNzpcXHQjZGVmaW5lIEJQRl9DQUxMXzMobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMywgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2Mjg6XFx0I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDQsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjI5OlxcdCNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg1LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU2OjA5LjQ5OTM2MDQzMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTM1ODY1OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2lnbmlmaWNhbmNlIG9mIGBicGZfc29ja19mcm9tX2ZpbGVgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBmdW5jdGlvbiBoZXJlIGlzIGBicGZfc29ja19mcm9tX2ZpbGVgLCB3aGljaCBpcyB0aGUgYWN0dWFsICpzeW1ib2wgbmFtZSouIEFuZCwgZnJvbSB3aGF0IEknbSBzZWVpbmcsIGBfX19fYnBmX3NvY2tfZnJvbV9maWxlYCBpcyBhbiBpbmxpbmUgdmVyc2lvbiwgbWFraW5nIGBicGZfc29ja19mcm9tX2ZpbGVgIHRoZSBjYWxsYWJsZSBmdW5jdGlvbi5cblxuU2luY2UgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgYSBCUEYgaGVscGVyLCBpdCdzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgY2FsbGVkIGZyb20gd2l0aGluIEJQRiBwcm9ncmFtcywgbWFraW5nIGl0IHRoZSByaWdodCBzcG90IHRvIGZvY3VzIG9uLiBGb3JnZXQgYHNvY2tfZnJvbV9maWxlYCDigJMgdGhhdCdzIHdheSB0b28gZ2VuZXJpYy4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkLCBhbmQgdGhhdCdzIHRoZSBrZXkuXG5cbkxldCBtZSBzdW1tYXJpemUgbXkgY3VycmVudCB1bmRlcnN0YW5kaW5nOiBUaGlzIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIHRvIGBicGZfc29ja19mcm9tX2ZpbGVgLCB0byBhdm9pZCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaWYgYSBCUEYgcHJvZ3JhbSBwYXNzZXMgaXQgYSBOVUxMIGZpbGUgcG9pbnRlci4gU28sIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC4gVGhlIGBSZWFzb25pbmdgIGlzIHNvbGlkOiBwcmV2ZW50aW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBBbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGlzIGRlZmluaXRlbHkgYGJwZl9zb2NrX2Zyb21fZmlsZWAuIEFzIGZvciBgRW5hYmxlQ29uZmlnc2AsIGl0IGxvb2tzIGxpa2UgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9FVkVOVFNgIGFyZSBuZWNlc3NhcnkuXG5cbkJ1dCwgSSBzaG91bGQgZG91YmxlLWNoZWNrOiBpcyBgYnBmX3NvY2tfZnJvbV9maWxlYCBleHBvcnRlZCBvciBzdGF0aWM/IEFoLCBmb3VuZCBpdCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgOiBJdCdzIGRlZmluZWQgdXNpbmcgYEJQRl9DQUxMXzFgLiBFeHBhbmRpbmcgdGhhdCBzaG93cyBpdCByZXNvbHZlcyB0byBgdTY0IGJwZl9zb2NrX2Zyb21fZmlsZSh1NjQgZmlsZSlgLCB3aGljaCBpcyBub3Qgc3RhdGljIOKAkyBpdCdzIGEgZ2xvYmFsIHN5bWJvbC4gVGhhdCBjb25maXJtcyB0aGUgYW5hbHlzaXMuXG5cbkxldCBtZSB0aGluayBhZ2Fpbi4gQXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfRVZFTlRTYCBzdWZmaWNpZW50PyBNYWtlcyBzZW5zZS4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBtdXN0LCBzaW5jZSBpdCdzIG5lZWRlZCBmb3IgdGhlIGBicGYoKWAgc3lzY2FsbCBpdHNlbGYuIEFuZCBgQ09ORklHX0JQRl9FVkVOVFNgIGlzIGFsc28gcmVxdWlyZWQgYmVjYXVzZSBvZiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCByZWdpc3RlcmluZyBgYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvYC4gT2theSwgc2VlbXMgZmluZSwgYnV0IGFyZSB0aGVyZSBhbnkgKm90aGVyKiB1c2VzIG9mIGBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG9gIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGJlIHRob3JvdWdoLiBJJ2xsIG5lZWQgdG8gY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjA6NTY6MTcuMDM1MjI5MzYyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk2OTYyODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zb2NrX2Zyb21fZmlsZV9wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0zOTI1PWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2t0aW1lX2dldF9jb2Fyc2VfbnNfcHJvdG87XFxuaW5jbHVkZS9saW51eC9icGYuaDozOTI2OmV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkyNy1leHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc29ja2V0X3B0cl9jb29raWVfcHJvdG87XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcyNj10cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzU0LVxcdGNhc2UgQlBGX0ZVTkNfc29ja19mcm9tX2ZpbGU6XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3NTU6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfcHJvdG87XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3NTYtXFx0Y2FzZSBCUEZfRlVOQ19nZXRfc29ja2V0X2Nvb2tpZTpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTQtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Ni1cXHQuZnVuY1xcdFxcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NjoxOS4wMzIyMDE4MjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk1NDY3NDQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gdGhpcyBsb29rcyBsaWtlIGl0J3MgYWxsIGNlbnRlcmVkIGFyb3VuZCBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gVGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBjb25zaWRlcmFibHkuIEkgc2VlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYENPTkZJR19CUEZfRVZFTlRTYCwgd2hpY2ggbWFrZXMgc2Vuc2UgaW4gdGhpcyBjb250ZXh0LlxuXG5Ob3csIGxldCdzIHNlZSBpZiB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0IGBDT05GSUdfTkVUYC4gWWVwLCBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIGludm9sdmVkLCBhbmQgdGhhdCdzIGNvbXBpbGVkIHdpdGggYENPTkZJR19ORVRgLiBJdCdzIHByZXR0eSBtdWNoIGEgZ2l2ZW4gdGhhdCBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCBvbiBtb3N0IHN5c3RlbXMsIHNvIGluY2x1ZGluZyBpdCBpc24ndCBnb2luZyB0byBiZSBhIHByb2JsZW0uIE5vIGhhcm0sIG5vIGZvdWwuXG5cbkFscmlnaHQsIGxldCdzIG1ha2Ugc3VyZSB0aGlzIHBhdGNoIGlzIGxhc2VyLWZvY3VzZWQuIEl0IHNlZW1zIHRvIGJlIG9ubHkgbW9kaWZ5aW5nIGBicGZfc29ja19mcm9tX2ZpbGVgLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkLlxuXG5CYXNlZCBvbiBhbGwgdGhpcywgSSdkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIGFkZGluZyBhIE5VTEwgY2hlY2sgdG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAgdG8gZ3VhcmQgYWdhaW5zdCBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSwgYSBjbGFzc2ljIGZ1enppbmcgdGFyZ2V0LiBUaGUgQlBGIGhlbHBlciBpcyB0aGUgc29sZSBtb2RpZmllZCBzeW1ib2wuXG5cblRoZXJlZm9yZTpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlKipcbiogICAqKlJlYXNvbmluZzogVGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIHRvIHRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBCUEYgaGVscGVyIGZ1bmN0aW9uIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gY2FsbGVkIGZyb20gYSBCUEYgcHJvZ3JhbSB3aXRoIGEgTlVMTCBmaWxlIHBvaW50ZXIuKipcbiogICAqKkZvY3VzU3ltYm9sczogW1wiYnBmX3NvY2tfZnJvbV9maWxlXCJdKipcbiogICAqKkVuYWJsZUNvbmZpZ3M6IFtcIkJQRl9TWVNDQUxMXCIsIFwiQlBGX0VWRU5UU1wiLCBcIk5FVFwiXSoqXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDc3LCJPdXRwdXRUb2tlbnMiOjEwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NjoyNC45ODY4Nzk1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYxMjU3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc29ja19mcm9tX2ZpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGNhbGxlZCBmcm9tIGEgQlBGIHByb2dyYW0gd2l0aCBhIE5VTEwgZmlsZSBwb2ludGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc29ja19mcm9tX2ZpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGNhbGxlZCBmcm9tIGEgQlBGIHByb2dyYW0gd2l0aCBhIE5VTEwgZmlsZSBwb2ludGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NjoyNS4wNzMwMTI4MzdaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NTU2MDI3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NjoyNS4wNzM2NzEyNDdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjY1NDkzOTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayB0byBgYnBmX3NvY2tfZnJvbV9maWxlYCBiZWZvcmUgY2FsbGluZyBgc29ja19mcm9tX2ZpbGUoKWAuIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdHMgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjlhODQxMDQ3OGJmNzNlMGZkOGQ1YWIzYzRlZGU2NTAwNDhmODUzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDIwOjU1OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMTY4NDU5ODdiMjQ0OS4uN2MzY2FhZTRiYWZjMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTEyMTgyLDcgKzEyMTgyLDEwIEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX21wdGNwX3NvY2tfcHJvdG8gPSB7XG4gXG4gQlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXG4ge1xuLVx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXNvY2tfZnJvbV9maWxlKGZpbGUpO1xuK1x0aWYgKGZpbGUpXG4rXHRcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbitcbitcdHJldHVybiAodW5zaWduZWQgbG9uZylOVUxMO1xuIH1cbiBcbiBCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIwOjU2OjI1LjA3MzY3MjQ1N1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjU0OTA1NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBtb2RpZmljYXRpb24gdG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkgc2VlIGl0J3MgYWRkaW5nIGEgTlVMTCBjaGVjayBmb3IgdGhlIGBmaWxlYCBwb2ludGVyIGJlZm9yZSBjYWxsaW5nIGBzb2NrX2Zyb21fZmlsZWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVmZW5zaXZlIHByb2dyYW1taW5nIHRlY2huaXF1ZSDigJMgcHJldmVudGluZyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBjaGFuZ2UgaXRzZWxmIGlzIHNpbXBsZTogaWYgYGZpbGVgIGlzIE5VTEwsIHJldHVybiBOVUxMLlxuXG5UaGUgZ29vZCB0aGluZyBpcyB0aGlzIGtpbmQgb2YgZXJyb3Igd291bGQgYmUgY2F1Z2h0IGJ5IHRoZSB1c3VhbCBrZXJuZWwgbWVjaGFuaXNtcyDigJMgYSBwYWdlIGZhdWx0IG9yIEtBU0FOIHdvdWxkIGltbWVkaWF0ZWx5IGZsYWcgdGhlIGlzc3VlLiBXZSdyZSBub3QgZGVhbGluZyB3aXRoIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBhbnkgbmV3IGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQgaGVyZSwgb3IgZXZlbiBtb2RpZnlpbmcgYW55IGV4aXN0aW5nIG9uZXMuIEl0J3MgYSBjbGVhbiBmaXguXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgdGhvdWdoLCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoZSBgZmlsZWAgcG9pbnRlciBjb21lcyBpbiBhcyBhbiBhcmd1bWVudCwgYW5kIGBzb2NrX2Zyb21fZmlsZWAgZGVmaW5pdGVseSBleHBlY3RzIGEgYHN0cnVjdCBmaWxlICpgLiBXaXRob3V0IHRoZSBjaGVjaywgYSBOVUxMIGBmaWxlYCB3b3VsZCBsZWFkIHRvIHRoZSBmdW5jdGlvbiBkZXJlZmVyZW5jaW5nIHRoZSBwb2ludGVyLCBhbmQgdGhhdCdzIHByZWNpc2VseSB3aGF0IHdlJ3JlIGF2b2lkaW5nLiBXaXRoIHRoaXMgcGF0Y2gsIGlmIGBmaWxlYCBpcyBOVUxMLCB3ZSBqdXN0IHJldHVybiBOVUxMLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlbWVudCBoZXJlLlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCBhbmQgbGFjayBvZiBhbnkgS01TQU4tcmVsYXRlZCBjb25jZXJucywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOYCB0byBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMSwiT3V0cHV0VG9rZW5zIjoxMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMDo1NjozMS43Mjg1ODE5NTVaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAgYmVmb3JlIGNhbGxpbmcgYHNvY2tfZnJvbV9maWxlKClgLiBUaGlzIHByZXZlbnRzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBhIG1lbW9yeSBzYWZldHkgaXNzdWUgdGhhdCBpcyBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHRzIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAgYmVmb3JlIGNhbGxpbmcgYHNvY2tfZnJvbV9maWxlKClgLiBUaGlzIHByZXZlbnRzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBhIG1lbW9yeSBzYWZldHkgaXNzdWUgdGhhdCBpcyBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHRzIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow6rmm6[1] Phase: Succeeded StartedAt: 2026-08-18 20:56:42 +0000 UTC FinishedAt: 2026-08-18 20:56:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 20:56:42 +0000 UTC FinishedAt: 2026-08-18 20:56:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2] Phase: Succeeded StartedAt: 2026-08-18 20:56:42 +0000 UTC FinishedAt: 2026-08-19 00:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 20:56:42 +0000 UTC FinishedAt: 2026-08-19 00:37:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 20:56:42 +0000 UTC FinishedAt: 2026-08-18 20:56:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 20:56:42 +0000 UTC FinishedAt: 2026-08-18 20:56:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6rmm6/series-workflow6rmm6-convert-artifact-4095175508/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 20:56:52 +0000 UTC FinishedAt: 2026-08-18 21:12:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 20:56:52 +0000 UTC FinishedAt: 2026-08-18 21:12:59 +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:*3c00fa69-da06-4445-836a-bddaba1ab7d0,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-workflow6rmm6/series-workflow6rmm6-convert-artifact-4095175508/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": "69070a59-c388-4a72-9915-9c50f5813889", "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-workflow6rmm6/series-workflow6rmm6-build-action-1952425682/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 20:56:52 +0000 UTC FinishedAt: 2026-08-18 21:12:49 +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:*3c00fa69-da06-4445-836a-bddaba1ab7d0,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-workflow6rmm6/series-workflow6rmm6-convert-artifact-4095175508/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": "69070a59-c388-4a72-9915-9c50f5813889", "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-workflow6rmm6/series-workflow6rmm6-build-action-1952425682/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 21:12:59 +0000 UTC FinishedAt: 2026-08-18 21:12:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 21:12:59 +0000 UTC FinishedAt: 2026-08-18 21:12:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 21:12:59 +0000 UTC FinishedAt: 2026-08-18 21:13:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 21:12:59 +0000 UTC FinishedAt: 2026-08-18 21:13:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6rmm6/series-workflow6rmm6-convert-artifact-274318355/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 21:13:09 +0000 UTC FinishedAt: 2026-08-18 21:15:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 21:13:09 +0000 UTC FinishedAt: 2026-08-18 21:15:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*69070a59-c388-4a72-9915-9c50f5813889,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-workflow6rmm6/series-workflow6rmm6-build-action-1952425682/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-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 21:15:16 +0000 UTC FinishedAt: 2026-08-18 21:15:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 21:15:16 +0000 UTC FinishedAt: 2026-08-18 21:15:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 21:15:16 +0000 UTC FinishedAt: 2026-08-18 21:31:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 21:15:16 +0000 UTC FinishedAt: 2026-08-18 21:31:31 +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:*3c00fa69-da06-4445-836a-bddaba1ab7d0,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-workflow6rmm6/series-workflow6rmm6-convert-artifact-274318355/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": "0c12cd79-deb8-4ee2-b2d0-2646f0712d9c", "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-workflow6rmm6/series-workflow6rmm6-build-action-3929578055/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 21:15:16 +0000 UTC FinishedAt: 2026-08-18 21:31:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3c00fa69-da06-4445-836a-bddaba1ab7d0,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-workflow6rmm6/series-workflow6rmm6-convert-artifact-274318355/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": "0c12cd79-deb8-4ee2-b2d0-2646f0712d9c", "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-workflow6rmm6/series-workflow6rmm6-build-action-3929578055/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 21:31:31 +0000 UTC FinishedAt: 2026-08-18 21:31:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 21:31:31 +0000 UTC FinishedAt: 2026-08-18 21:31:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 21:31:31 +0000 UTC FinishedAt: 2026-08-18 21:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 21:31:31 +0000 UTC FinishedAt: 2026-08-18 21:33:17 +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:*0c12cd79-deb8-4ee2-b2d0-2646f0712d9c,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-workflow6rmm6/series-workflow6rmm6-build-action-3929578055/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-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 21:33:27 +0000 UTC FinishedAt: 2026-08-19 00:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 21:33:27 +0000 UTC FinishedAt: 2026-08-19 00:37:18 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"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:*69070a59-c388-4a72-9915-9c50f5813889,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0c12cd79-deb8-4ee2-b2d0-2646f0712d9c,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-workflow6rmm6/series-workflow6rmm6-build-action-1952425682/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-workflow6rmm6/series-workflow6rmm6-build-action-3929578055/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 21:33:27 +0000 UTC FinishedAt: 2026-08-18 21:33:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 21:33:27 +0000 UTC FinishedAt: 2026-08-18 21:33:32 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"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-workflow6rmm6/series-workflow6rmm6-convert-artifact-2738345868/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 21:33:27 +0000 UTC FinishedAt: 2026-08-18 21:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 21:33:27 +0000 UTC FinishedAt: 2026-08-18 21:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 21:33:27 +0000 UTC FinishedAt: 2026-08-18 21:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 21:33:37 +0000 UTC FinishedAt: 2026-08-19 00:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rmm6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25b00c01fe1062ef1f2aaa3c4ee6638ec9beb239","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","NET"],"series_id":"52953883-05ad-4b07-8f5f-e03880c5caeb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 21:33:37 +0000 UTC FinishedAt: 2026-08-19 00:37:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*69070a59-c388-4a72-9915-9c50f5813889,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0c12cd79-deb8-4ee2-b2d0-2646f0712d9c,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-workflow6rmm6/series-workflow6rmm6-build-action-1952425682/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-workflow6rmm6/series-workflow6rmm6-build-action-3929578055/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-workflow6rmm6/series-workflow6rmm6-convert-artifact-2738345868/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,}