Name: series-workflow7gz4b Phase: Succeeded StartedAt: 2026-07-10 18:04:35 +0000 UTC FinishedAt: 2026-07-10 22:56:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[0] Phase: Succeeded StartedAt: 2026-07-10 18:04:35 +0000 UTC FinishedAt: 2026-07-10 18:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 18:04:35 +0000 UTC FinishedAt: 2026-07-10 18:23:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "24c4c88259464d38b35c3fbaecb68675de64137d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "24c4c88259464d38b35c3fbaecb68675de64137d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP" ], "series_id": "466d63c9-f425-47fe-8e44-d28efe77afcf" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_checksum_common_check", "ip_vs_in_icmp_v6", "ip_vs_in_icmp", "handle_response_icmp", "tcp_csum_check", "udp_csum_check" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayYjMzQ7LAogICAgJiMzNDtpcF92c19pbl9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX2luX2ljbXAmIzM0OywKICAgICYjMzQ7aGFuZGxlX3Jlc3BvbnNlX2ljbXAmIzM0OywKICAgICYjMzQ7dGNwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dWRwX2NzdW1fY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gY2hlY2tzdW0gdmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgSVBWUyBhbmQgdXNlcyBpdCBhY3Jvc3MgVENQLCBVRFAsIGFuZCBJQ01QIHByb3RvY29scy4gSXQgYWxzbyBhZGRzIGNoZWNrc3VtIHZhbGlkYXRpb24gZm9yIGluY29taW5nIElDTVB2NiBwYWNrZXRzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjaGVja3N1bSB2YWxpZGF0aW9uIHBhdGhzIHRvIGVuc3VyZSB0aGV5IGNvcnJlY3RseSBoYW5kbGUgbWFsZm9ybWVkIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyZDBlNDE2ZGM1ZTUwMDg3OWUxM2I3ZTQ4ODkxMTgxMTUyZjBmYTk1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMTg6MjE6NDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbmluZGV4IDQxN2ZmNTFmNjJmYzhlLi5jZDY1ZGQzYTRhZDFmNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbkBAIC0yMDY2LDggJiM0MzsyMDY2LDYgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcbiAjZW5kaWZcbiBcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmY0KF9fYmUzMiBvbGQsIF9fYmUzMiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4ge1xuIFx0X19iZTMyIGRpZmZbMl0gPSB7IH5vbGQsIG5ldyB9O1xuQEAgLTIwOTMsNiAmIzQzOzIwOTEsOSBAQCBzdGF0aWMgaW5saW5lIF9fd3N1bSBpcF92c19jaGVja19kaWZmMihfX2JlMTYgb2xkLCBfX2JlMTYgbmV3LCBfX3dzdW0gb2xkc3VtKVxuIFx0cmV0dXJuIGNzdW1fcGFydGlhbChkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7XG4gfVxuIFxuJiM0Mztib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90byxcbiYjNDM7XHRcdFx0XHQgaW50IG9mZnNldCk7XG4mIzQzO1xuIC8qIEZvcmdldCBjdXJyZW50IGNvbm50cmFjayAodW5jb25maXJtZWQpIGFuZCBhdHRhY2ggbm90cmFjayBlbnRyeSAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19ub3RyYWNrKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5pbmRleCAzNWNiZTgyMWMyNTk2Ny4uNmNhZTRlYTQ1ZDU1YWIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5AQCAtODY3LDExICYjNDM7ODY3LDU2IEBAIHN0YXRpYyBpbnQgc3lzY3RsX25hdF9pY21wX3NlbmQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpIHsgcmV0dXJuIDA7IH1cbiBcbiAjZW5kaWZcbiBcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG4mIzQzO3N0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG4ge1xuIFx0cmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQsIDApKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2sgLSB2YWxpZGF0ZSBjaGVja3N1bSBmb3IgVENQL1VEUC9JQ01QXG4mIzQzOyAqIEBhZjogQUZfSU5FVC9BRl9JTkVUNlxuJiM0MzsgKiBAc2tiOiBzb2NrZXQgYnVmZmVyXG4mIzQzOyAqIEBwcm90bzogSVBQUk9UT194eHhcbiYjNDM7ICogQG9mZnNldDogb2Zmc2V0IG9mIHByb3RvY29sIGhlYWRlclxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8sXG4mIzQzO1x0XHRcdFx0IGludCBvZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRfX3dzdW0gY3N1bTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKSB7XG4mIzQzO1x0XHRjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpIHtcbiYjNDM7XHRcdC8qIElQVlMgd29ya3MgYXQgSVAgbGF5ZXIsIHNvIHNrYi1cdTAwM2Vjc3VtIGNvdmVycyBkYXRhIGZyb21cbiYjNDM7XHRcdCAqIElQIGhlYWRlciwgc3RyaXAgaXQgdXAgdG8gdGhlIHByb3RvY29sIGhlYWRlclxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjc3VtID0gY3N1bV9zdWIoc2tiLVx1MDAzZWNzdW0sIHNrYl9jaGVja3N1bShza2IsIDAsIG9mZnNldCwgMCkpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MzsjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiYjNDM7XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbiYjNDM7XHRcdGlmIChjc3VtX2lwdjZfbWFnaWMoXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbiYjNDM7XHRcdFx0XHQgICAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbiYjNDM7XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIG9mZnNldCwgcHJvdG8sXG4mIzQzO1x0XHRcdFx0ICAgIGNzdW0pKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fSBlbHNlXG4mIzQzOyNlbmRpZlxuJiM0MztcdFx0aWYgKHByb3RvID09IElQUFJPVE9fSUNNUClcbiYjNDM7XHRcdFx0cmV0dXJuICFjc3VtX2ZvbGQoY3N1bSk7XG4mIzQzO1x0XHRlbHNlIGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbiYjNDM7XHRcdFx0XHRcdCAgIGlwX2hkcihza2IpLVx1MDAzZWRhZGRyLFxuJiM0MztcdFx0XHRcdFx0ICAgc2tiLVx1MDAzZWxlbiAtIG9mZnNldCwgcHJvdG8sXG4mIzQzO1x0XHRcdFx0XHQgICBjc3VtKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGVudW0gaXBfZGVmcmFnX3VzZXJzIGlwX3ZzX2RlZnJhZ191c2VyKHVuc2lnbmVkIGludCBob29rbnVtKVxuIHtcbiBcdGlmIChORl9JTkVUX0xPQ0FMX0lOID09IGhvb2tudW0pXG5AQCAtMTAzOSwxMiAmIzQzOzEwODQsMTMgQEAgc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHR1bnNpZ25lZCBpbnQgaG9va251bSlcbiB7XG4gXHR1bnNpZ25lZCBpbnQgdmVyZGljdCA9IE5GX0RST1A7XG4mIzQzO1x0aW50IGlwcm90byA9IGFmID09IEFGX0lORVQ2ID8gSVBQUk9UT19JQ01QVjYgOiBJUFBST1RPX0lDTVA7XG4gXG4gXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpXG4gXHRcdGdvdG8gYWZ0ZXJfbmF0O1xuIFxuIFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4tXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXHUwMDI2XHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xuJiM0MztcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGFmLCBza2IsIGlwcm90bywgaWhsKSkge1xuIFx0XHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXG4gXHRcdElQX1ZTX0RCR19CVUYoMSwgXCYjMzQ7Rm9yd2FyZCBJQ01QOiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcyFcXG5cJiMzNDssXG4gXHRcdFx0ICAgICAgSVBfVlNfREJHX0FERFIoYWYsIHNuZXQpKTtcbkBAIC0xODk5LDcgJiM0MzsxOTQ1LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0dmVyZGljdCA9IE5GX0RST1A7XG4gXG4gXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cbi1cdGlmICghc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSBcdTAwMjZcdTAwMjYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7XG4mIzQzO1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soQUZfSU5FVCwgc2tiLCBJUFBST1RPX0lDTVAsIGlobCkpIHtcbiBcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuIFx0XHRJUF9WU19EQkcoMSwgXCYjMzQ7SW5jb21pbmcgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNCFcXG5cJiMzNDssXG4gXHRcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuQEAgLTIwNjUsNiAmIzQzOzIxMTEsMTcgQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiYjNDM7XHR2ZXJkaWN0ID0gTkZfRFJPUDtcbiYjNDM7XG4mIzQzO1x0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4mIzQzO1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soQUZfSU5FVDYsIHNrYiwgSVBQUk9UT19JQ01QVjYsXG4mIzQzO1x0XHRcdFx0XHQgaXBoLVx1MDAzZWxlbikpIHtcbiYjNDM7XHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbiYjNDM7XHRcdElQX1ZTX0RCRygxLCBcJiMzNDtJbmNvbWluZyBJQ01QdjY6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTZjIVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIGRvIHRoZSBzdGF0aXN0aWNzIGFuZCBwdXQgaXQgYmFjayAqL1xuIFx0aXBfdnNfaW5fc3RhdHMoY3AsIHNrYik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXG5pbmRleCBmODZiNzYzZWZjYzRkYy4uZThlNmFjYWY4MzAwOGEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xuQEAgLTMwNCwzOSAmIzQzOzMwNCwxMCBAQCBzdGF0aWMgaW50XG4gdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKVxuIHtcbi1cdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0Y2FzZSBDSEVDS1NVTV9OT05FOlxuLVx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLCAwKTtcbi1cdFx0ZmFsbHRocm91Z2g7XG4tXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxuLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuLVx0XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdCAgICBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIHRjcGhvZmYsXG4tXHRcdFx0XHRcdCAgICBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4tXHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZVxuLSNlbmRpZlxuLVx0XHRcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLFxuLVx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCxcbi1cdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLFxuLVx0XHRcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbi1cdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdH1cbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xuLVx0XHRicmVhaztcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhhZiwgc2tiLCBJUFBST1RPX1RDUCwgdGNwaG9mZikpIHtcbiYjNDM7XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsIFwmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3JcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHR9XG4tXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXG5pbmRleCA1OGY5ZTI1NTkyN2UyZS4uNGQxZDFmYzIzYzJkYjYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xuQEAgLTMwNiw0MCAmIzQzOzMwNiwxMSBAQCB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRpZiAodWggPT0gTlVMTClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAodWgtXHUwMDNlY2hlY2sgIT0gMCkge1xuLVx0XHRzd2l0Y2ggKHNrYi1cdTAwM2VpcF9zdW1tZWQpIHtcbi1cdFx0Y2FzZSBDSEVDS1NVTV9OT05FOlxuLVx0XHRcdHNrYi1cdTAwM2Vjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdWRwaG9mZixcbi1cdFx0XHRcdFx0XHQgc2tiLVx1MDAzZWxlbiAtIHVkcGhvZmYsIDApO1xuLVx0XHRcdGZhbGx0aHJvdWdoO1xuLVx0XHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxuLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuLVx0XHRcdGlmIChhZiA9PSBBRl9JTkVUNikge1xuLVx0XHRcdFx0aWYgKGNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyLFxuLVx0XHRcdFx0XHRcdCAgICBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHRcdCAgICBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZixcbi1cdFx0XHRcdFx0XHQgICAgSVBQUk9UT19VRFAsXG4tXHRcdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLFxuLVx0XHRcdFx0XHRcdFx0IFwmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3JcJiMzNDspO1xuLVx0XHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHRcdH1cbi1cdFx0XHR9IGVsc2Vcbi0jZW5kaWZcbi1cdFx0XHRcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZixcbi1cdFx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCxcbi1cdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbi1cdFx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0XHR9XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0LyogTm8gbmVlZCB0byBjaGVja3N1bS4gKi9cbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuJiM0MztcdGlmICghdWgtXHUwMDNlY2hlY2spXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhhZiwgc2tiLCBJUFBST1RPX1VEUCwgdWRwaG9mZikpIHtcbiYjNDM7XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsIFwmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3JcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRyZXR1cm4gMTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfSVBWNiYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVURQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX2luX2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcmVzcG9uc2VfaWNtcCYjMzQ7LAogICAgJiMzNDt0Y3BfY3N1bV9jaGVjayYjMzQ7LAogICAgJiMzNDt1ZHBfY3N1bV9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBjaGVja3N1bSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBJUFZTIGFuZCB1c2VzIGl0IGFjcm9zcyBUQ1AsIFVEUCwgYW5kIElDTVAgcHJvdG9jb2xzLiBJdCBhbHNvIGFkZHMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgaW5jb21pbmcgSUNNUHY2IHBhY2tldHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNoZWNrc3VtIHZhbGlkYXRpb24gcGF0aHMgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBtYWxmb3JtZWQgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmQwZTQxNmRjNWU1MDA4NzllMTNiN2U0ODg5MTE4MTE1MmYwZmE5NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDE4OjIxOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKaW5kZXggNDE3ZmY1MWY2MmZjOGUuLmNkNjVkZDNhNGFkMWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTIwNjYsOCAmIzQzOzIwNjYsNiBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCSAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpOwogI2VuZGlmCiAKLV9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCk7Ci0KIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmY0KF9fYmUzMiBvbGQsIF9fYmUzMiBuZXcsIF9fd3N1bSBvbGRzdW0pCiB7CiAJX19iZTMyIGRpZmZbMl0gPSB7IH5vbGQsIG5ldyB9OwpAQCAtMjA5Myw2ICYjNDM7MjA5MSw5IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pCiAJcmV0dXJuIGNzdW1fcGFydGlhbChkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7CiB9CiAKJiM0Mztib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bywKJiM0MzsJCQkJIGludCBvZmZzZXQpOwomIzQzOwogLyogRm9yZ2V0IGN1cnJlbnQgY29ubnRyYWNrICh1bmNvbmZpcm1lZCkgYW5kIGF0dGFjaCBub3RyYWNrIGVudHJ5ICovCiBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfbm90cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKaW5kZXggMzVjYmU4MjFjMjU5NjcuLjZjYWU0ZWE0NWQ1NWFiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKQEAgLTg2NywxMSAmIzQzOzg2Nyw1NiBAQCBzdGF0aWMgaW50IHN5c2N0bF9uYXRfaWNtcF9zZW5kKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKSB7IHJldHVybiAwOyB9CiAKICNlbmRpZgogCi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpCiYjNDM7c3RhdGljIF9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCkKIHsKIAlyZXR1cm4gY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgc2tiLSZndDtsZW4gLSBvZmZzZXQsIDApKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayAtIHZhbGlkYXRlIGNoZWNrc3VtIGZvciBUQ1AvVURQL0lDTVAKJiM0MzsgKiBAYWY6IEFGX0lORVQvQUZfSU5FVDYKJiM0MzsgKiBAc2tiOiBzb2NrZXQgYnVmZmVyCiYjNDM7ICogQHByb3RvOiBJUFBST1RPX3h4eAomIzQzOyAqIEBvZmZzZXQ6IG9mZnNldCBvZiBwcm90b2NvbCBoZWFkZXIKJiM0MzsgKi8KJiM0Mztib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bywKJiM0MzsJCQkJIGludCBvZmZzZXQpCiYjNDM7ewomIzQzOwlfX3dzdW0gY3N1bTsKJiM0MzsKJiM0MzsJaWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKHNrYi0mZ3Q7aXBfc3VtbWVkID09IENIRUNLU1VNX05PTkUpIHsKJiM0MzsJCWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0mZ3Q7bGVuIC0gb2Zmc2V0LCAwKTsKJiM0MzsJfSBlbHNlIGlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSkgewomIzQzOwkJLyogSVBWUyB3b3JrcyBhdCBJUCBsYXllciwgc28gc2tiLSZndDtjc3VtIGNvdmVycyBkYXRhIGZyb20KJiM0MzsJCSAqIElQIGhlYWRlciwgc3RyaXAgaXQgdXAgdG8gdGhlIHByb3RvY29sIGhlYWRlcgomIzQzOwkJICovCiYjNDM7CQljc3VtID0gY3N1bV9zdWIoc2tiLSZndDtjc3VtLCBza2JfY2hlY2tzdW0oc2tiLCAwLCBvZmZzZXQsIDApKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOyNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgomIzQzOwlpZiAoYWYgPT0gQUZfSU5FVDYpIHsKJiM0MzsJCWlmIChjc3VtX2lwdjZfbWFnaWMoJmFtcDtpcHY2X2hkcihza2IpLSZndDtzYWRkciwKJiM0MzsJCQkJICAgICZhbXA7aXB2Nl9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCiYjNDM7CQkJCSAgICBza2ItJmd0O2xlbiAtIG9mZnNldCwgcHJvdG8sCiYjNDM7CQkJCSAgICBjc3VtKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0gZWxzZQomIzQzOyNlbmRpZgomIzQzOwkJaWYgKHByb3RvID09IElQUFJPVE9fSUNNUCkKJiM0MzsJCQlyZXR1cm4gIWNzdW1fZm9sZChjc3VtKTsKJiM0MzsJCWVsc2UgaWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLSZndDtzYWRkciwKJiM0MzsJCQkJCSAgIGlwX2hkcihza2IpLSZndDtkYWRkciwKJiM0MzsJCQkJCSAgIHNrYi0mZ3Q7bGVuIC0gb2Zmc2V0LCBwcm90bywKJiM0MzsJCQkJCSAgIGNzdW0pKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBlbnVtIGlwX2RlZnJhZ191c2VycyBpcF92c19kZWZyYWdfdXNlcih1bnNpZ25lZCBpbnQgaG9va251bSkKIHsKIAlpZiAoTkZfSU5FVF9MT0NBTF9JTiA9PSBob29rbnVtKQpAQCAtMTAzOSwxMiAmIzQzOzEwODQsMTMgQEAgc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJdW5zaWduZWQgaW50IGhvb2tudW0pCiB7CiAJdW5zaWduZWQgaW50IHZlcmRpY3QgPSBORl9EUk9QOwomIzQzOwlpbnQgaXByb3RvID0gYWYgPT0gQUZfSU5FVDYgPyBJUFBST1RPX0lDTVBWNiA6IElQUFJPVE9fSUNNUDsKIAogCWlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkKIAkJZ290byBhZnRlcl9uYXQ7CiAKIAkvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi8KLQlpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgJmFtcDsmYW1wOyBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHsKJiM0MzsJaWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soYWYsIHNrYiwgaXByb3RvLCBpaGwpKSB7CiAJCS8qIEZhaWxlZCBjaGVja3N1bSEgKi8KIAkJSVBfVlNfREJHX0JVRigxLCAmIzM0O0ZvcndhcmQgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXMhXG4mIzM0OywKIAkJCSAgICAgIElQX1ZTX0RCR19BRERSKGFmLCBzbmV0KSk7CkBAIC0xODk5LDcgJiM0MzsxOTQ1LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAogCXZlcmRpY3QgPSBORl9EUk9QOwogCiAJLyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovCi0JaWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpICZhbXA7JmFtcDsgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7CiYjNDM7CWlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKEFGX0lORVQsIHNrYiwgSVBQUk9UT19JQ01QLCBpaGwpKSB7CiAJCS8qIEZhaWxlZCBjaGVja3N1bSEgKi8KIAkJSVBfVlNfREJHKDEsICYjMzQ7SW5jb21pbmcgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNCFcbiYjMzQ7LAogCQkJICAmYW1wO2lwaC0mZ3Q7c2FkZHIpOwpAQCAtMjA2NSw2ICYjNDM7MjExMSwxNyBAQCBzdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwl2ZXJkaWN0ID0gTkZfRFJPUDsKJiM0MzsKJiM0MzsJLyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovCiYjNDM7CWlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKEFGX0lORVQ2LCBza2IsIElQUFJPVE9fSUNNUFY2LAomIzQzOwkJCQkJIGlwaC0mZ3Q7bGVuKSkgewomIzQzOwkJLyogRmFpbGVkIGNoZWNrc3VtISAqLwomIzQzOwkJSVBfVlNfREJHKDEsICYjMzQ7SW5jb21pbmcgSUNNUHY2OiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk2YyFcbiYjMzQ7LAomIzQzOwkJCSAgJmFtcDtpcGgtJmd0O3NhZGRyKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiAJLyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovCiAJaXBfdnNfaW5fc3RhdHMoY3AsIHNrYik7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYwppbmRleCBmODZiNzYzZWZjYzRkYy4uZThlNmFjYWY4MzAwOGEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKQEAgLTMwNCwzOSAmIzQzOzMwNCwxMCBAQCBzdGF0aWMgaW50CiB0Y3BfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKQogewotCXN3aXRjaCAoc2tiLSZndDtpcF9zdW1tZWQpIHsKLQljYXNlIENIRUNLU1VNX05PTkU6Ci0JCXNrYi0mZ3Q7Y3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi0mZ3Q7bGVuIC0gdGNwaG9mZiwgMCk7Ci0JCWZhbGx0aHJvdWdoOwotCWNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6Ci0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKLQkJaWYgKGFmID09IEFGX0lORVQ2KSB7Ci0JCQlpZiAoY3N1bV9pcHY2X21hZ2ljKCZhbXA7aXB2Nl9oZHIoc2tiKS0mZ3Q7c2FkZHIsCi0JCQkJCSAgICAmYW1wO2lwdjZfaGRyKHNrYiktJmd0O2RhZGRyLAotCQkJCQkgICAgc2tiLSZndDtsZW4gLSB0Y3Bob2ZmLAotCQkJCQkgICAgSVBQUk9UT19UQ1AsCi0JCQkJCSAgICBza2ItJmd0O2NzdW0pKSB7Ci0JCQkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCwKLQkJCQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCX0gZWxzZQotI2VuZGlmCi0JCQlpZiAoY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktJmd0O3NhZGRyLAotCQkJCQkgICAgICBpcF9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCi0JCQkJCSAgICAgIHNrYi0mZ3Q7bGVuIC0gdGNwaG9mZiwKLQkJCQkJICAgICAgaXBfaGRyKHNrYiktJmd0O3Byb3RvY29sLAotCQkJCQkgICAgICBza2ItJmd0O2NzdW0pKSB7Ci0JCQkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCwKLQkJCQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovCi0JCWJyZWFrOwomIzQzOwlpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhhZiwgc2tiLCBJUFBST1RPX1RDUCwgdGNwaG9mZikpIHsKJiM0MzsJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwogCX0KLQogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKaW5kZXggNThmOWUyNTU5MjdlMmUuLjRkMWQxZmMyM2MyZGI2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jCkBAIC0zMDYsNDAgJiM0MzszMDYsMTEgQEAgdWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCWlmICh1aCA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCWlmICh1aC0mZ3Q7Y2hlY2sgIT0gMCkgewotCQlzd2l0Y2ggKHNrYi0mZ3Q7aXBfc3VtbWVkKSB7Ci0JCWNhc2UgQ0hFQ0tTVU1fTk9ORToKLQkJCXNrYi0mZ3Q7Y3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHVkcGhvZmYsCi0JCQkJCQkgc2tiLSZndDtsZW4gLSB1ZHBob2ZmLCAwKTsKLQkJCWZhbGx0aHJvdWdoOwotCQljYXNlIENIRUNLU1VNX0NPTVBMRVRFOgotI2lmZGVmIENPTkZJR19JUF9WU19JUFY2Ci0JCQlpZiAoYWYgPT0gQUZfSU5FVDYpIHsKLQkJCQlpZiAoY3N1bV9pcHY2X21hZ2ljKCZhbXA7aXB2Nl9oZHIoc2tiKS0mZ3Q7c2FkZHIsCi0JCQkJCQkgICAgJmFtcDtpcHY2X2hkcihza2IpLSZndDtkYWRkciwKLQkJCQkJCSAgICBza2ItJmd0O2xlbiAtIHVkcGhvZmYsCi0JCQkJCQkgICAgSVBQUk9UT19VRFAsCi0JCQkJCQkgICAgc2tiLSZndDtjc3VtKSkgewotCQkJCQlJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLAotCQkJCQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7Ci0JCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCX0gZWxzZQotI2VuZGlmCi0JCQkJaWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLSZndDtzYWRkciwKLQkJCQkJCSAgICAgIGlwX2hkcihza2IpLSZndDtkYWRkciwKLQkJCQkJCSAgICAgIHNrYi0mZ3Q7bGVuIC0gdWRwaG9mZiwKLQkJCQkJCSAgICAgIGlwX2hkcihza2IpLSZndDtwcm90b2NvbCwKLQkJCQkJCSAgICAgIHNrYi0mZ3Q7Y3N1bSkpIHsKLQkJCQkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCwKLQkJCQkJCQkgJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwotCQkJCQlyZXR1cm4gMDsKLQkJCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovCi0JCQlicmVhazsKLQkJfQomIzQzOwlpZiAoIXVoLSZndDtjaGVjaykKJiM0MzsJCXJldHVybiAxOwomIzQzOwlpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhhZiwgc2tiLCBJUFBST1RPX1VEUCwgdWRwaG9mZikpIHsKJiM0MzsJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDczNQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgQ2hlY2tzdW0gVmFsaWRhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgSVBWUyBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgdW5pZnlpbmcgdGhlIGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMuIFRoZXkmIzM5O3ZlIGludHJvZHVjZWQgdGhpcyBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCBmdW5jdGlvbiwgd2hpY2ggaXMgYmVpbmcgY2FsbGVkIGluIGBpcF92c19jb3JlLmNgLCBgaXBfdnNfcHJvdG9fdGNwLmNgLCBhbmQgYGlwX3ZzX3Byb3RvX3VkcC5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIG1vdmUgdG93YXJkcyBhIG1vcmUgY29uc2lzdGVudCBhcHByb2FjaCB0byBoYW5kbGluZyBjaGVja3N1bXMgYWNyb3NzIFRDUCwgVURQLCBhbmQgSUNNUCB3aXRoaW4gdGhlIElQVlMgZnJhbWV3b3JrLiBUaGUgYWRkaXRpb24gb2YgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgaW5jb21pbmcgSUNNUHY2IHBhY2tldHMgaW4gYGlwX3ZzX2luX2ljbXBfdjZgIGlzIGFsc28gc29tZXRoaW5nIHRvIG1ha2Ugbm90ZSBvZi4KCk5vdywgYmVmb3JlIEkgZGlnIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgSVBWUyBpcyBldmVuIGF2YWlsYWJsZSBhbmQgY29ycmVjdGx5IGNvbmZpZ3VyZWQgaW4gdGhlIHRlc3Rpbmcgc2V0dXAuIEkga25vdyBpdCYjMzk7cyBwYXJ0IG9mIG5ldGZpbHRlciwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUga2VybmVsIGNvbmZpZ3MgYXJlIHNldC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3IgYENPTkZJR19JUF9WU2AsIGBDT05GSUdfSVBfVlNfSVBWNmAsIGBDT05GSUdfSVBfVlNfUFJPVE9fVENQYCwgYW5kIGBDT05GSUdfSVBfVlNfUFJPVE9fVURQYC4KCk9rYXksIG5leHQgSSYjMzk7bGwgc2VhcmNoIHRoZSB0cmVlIGZvciBjYWxscyB0byBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgZXhhY3QgdXNhZ2UgY29udGV4dCwgZmluZCBhbGwgdGhlIGNvZGUgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaCwgYW5kIGhvdyBpdCBpcyBiZWluZyB1c2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byByZWFsbHkgYXNzZXNzIHRoZSBpbXBsaWNhdGlvbnMgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcF92cy5oPTIwODc9c3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjIoX19iZTE2IG9sZCwgX19iZTE2IG5ldywgX193c3VtIG9sZHN1bSlcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTIwOTMtXG5pbmNsdWRlL25ldC9pcF92cy5oOjIwOTQ6Ym9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8sXG5pbmNsdWRlL25ldC9pcF92cy5oLTIwOTUtXHRcdFx0XHQgaW50IG9mZnNldCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz04NzA9c3RhdGljIF9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTg3NS0vKipcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6ODc2OiAqIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayAtIHZhbGlkYXRlIGNoZWNrc3VtIGZvciBUQ1AvVURQL0lDTVBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtODc3LSAqIEBhZjogQUZfSU5FVC9BRl9JTkVUNlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtODgxLSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo4ODI6Ym9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTg4My1cdFx0XHRcdCBpbnQgb2Zmc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTA3OT1zdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEwOTItXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTA5MzpcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGFmLCBza2IsIGlwcm90bywgaWhsKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xMDk0LVx0XHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xODAyPWlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5NDctXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTk0ODpcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKEFGX0lORVQsIHNrYiwgSVBQUk9UT19JQ01QLCBpaGwpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5NDktXHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIwMzQ9c3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjExNi1cdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTE3Olx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soQUZfSU5FVDYsIHNrYiwgSVBQUk9UT19JQ01QVjYsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxMTgtXHRcdFx0XHRcdCBpcGgtXHUwMDNlbGVuKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0zMDQ9dGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0zMDYte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjMwNzpcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGFmLCBza2IsIElQUFJPVE9fVENQLCB0Y3Bob2ZmKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTMwOC1cdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCwgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTMwMD11ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTMxMC1cdFx0cmV0dXJuIDE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MzExOlx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soYWYsIHNrYiwgSVBQUk9UT19VRFAsIHVkcGhvZmYpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMzEyLVx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTIzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNrc3VtIFZhbGlkYXRpb24gaW4gSVBWUzogQSBRdWljayBSZXZpZXcqKgoKQWxyaWdodCwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc2hhcmVkIGNoZWNrc3VtIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIElQVlMuIFNtYXJ0IG1vdmUsIGNlbnRyYWxpemluZyB0aGF0IGFuZCBwcm9tb3RpbmcgcmV1c2FiaWxpdHkuIEl0JiMzOTtzIHVzZWQgaW4gYSBmZXcgcGxhY2VzLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSYjMzk7ZCBleHBlY3QuIEZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIGJhc2VkIG9uIHRoZSBub3RlcywgaXQgc2VlbXMgc29saWQ7IGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUuCgpOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQgY29uZmlncyBhcmUgbmVlZGVkPyBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGBJUF9WU19QUk9UT19UQ1BgLCBhbmQgYElQX1ZTX1BST1RPX1VEUGAgYXJlIG1lbnRpb25lZC4gSG1tLCBiZWZvcmUgSSBnZXQgdG9vIGZhciBpbnRvIHJldmlld2luZyB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIFRDUCBhbmQgVURQIHByb3RvY29sIG9wdGlvbnMgYXJlIGFjdHVhbGx5IHByZXNlbnQgYW5kIHdlbGwtZGVmaW5lZCBpbiB0aGUgcmVsZXZhbnQgY29uZmlnIGZpbGVzLiBCZXR0ZXIgdG8gdmVyaWZ5IGFzc3VtcHRpb25zIHVwZnJvbnQuIEdvdHRhIG1ha2Ugc3VyZSB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LiBPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2suLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0yNTE9Q09ORklHX0lQX1ZTX0lQVjY9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzoyNTI6Q09ORklHX0lQX1ZTX1BST1RPX1RDUD15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTI1My1DT05GSUdfSVBfVlNfUFJPVE9fVURQPXlcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTI2Nz1DT05GSUdfSVBfVlNfSVBWNj15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjI2ODpDT05GSUdfSVBfVlNfUFJPVE9fVENQPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctMjY5LUNPTkZJR19JUF9WU19QUk9UT19VRFA9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWc9Njc9Q09ORklHX0lQX1ZTX0lQVjY9eVxuYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZzo2ODpDT05GSUdfSVBfVlNfUFJPVE9fVENQPXlcbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWctNjktQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWc9MTA3PUNPTkZJR19JUF9WU19JUFY2PXlcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnOjEwODpDT05GSUdfSVBfVlNfUFJPVE9fVENQPXlcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnLTEwOS1DT05GSUdfSVBfVlNfUFJPVE9fVURQPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWc9MTA3PUNPTkZJR19JUF9WU19JUFY2PXlcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZzoxMDg6Q09ORklHX0lQX1ZTX1BST1RPX1RDUD15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWctMTA5LUNPTkZJR19JUF9WU19QUk9UT19VRFA9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc9MTExPUNPTkZJR19JUF9WU19JUFY2PXlcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc6MTEyOkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZy0xMTMtQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnPTEwOD1DT05GSUdfSVBfVlNfSVBWNj15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWc6MTA5OkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnLTExMC1DT05GSUdfSVBfVlNfUFJPVE9fVURQPXlcbi0tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTc0PUNPTkZJR19JUF9WUz1tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnOjc1OkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZy03Ni1DT05GSUdfSVBfVlNfUFJPVE9fVURQPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MzEzPUNPTkZJR19JUF9WUz1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MzE0OkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTMxNS1DT05GSUdfSVBfVlNfUFJPVE9fVURQPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9MzA0PUNPTkZJR19JUF9WUz1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MzA1OkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTMwNi1DT05GSUdfSVBfVlNfUFJPVE9fVURQPXlcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTExNDg9c3RydWN0IG5ldG5zX2lwdnMge1xuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTE2Mi1cdC8qIGlwX3ZzX3Byb3RvX3RjcCAqL1xuaW5jbHVkZS9uZXQvaXBfdnMuaDoxMTYzOiNpZmRlZiBDT05GSUdfSVBfVlNfUFJPVE9fVENQXG5pbmNsdWRlL25ldC9pcF92cy5oLTExNjQtXHQjZGVmaW5lXHRUQ1BfQVBQX1RBQl9CSVRTXHQ0XG4tLVxuaW5jbHVkZS9uZXQvaXBfdnMuaD0yMjAyPWlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTIyMTMtXG5pbmNsdWRlL25ldC9pcF92cy5oOjIyMTQ6I2lmZGVmIENPTkZJR19JUF9WU19QUk9UT19UQ1BcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMjIxNS1JTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKGludFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTc3PWNvbW1lbnQgXCYjMzQ7SVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNzgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo3OTpjb25maWdcdElQX1ZTX1BST1RPX1RDUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctODAtXHRib29sIFwmIzM0O1RDUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzIxPWNvbmZpZ1x0SVBfVlNfRlRQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjItXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgaGVscGVyXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1RDUCBcdTAwMjZcdTAwMjYgTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9OQVQgXHUwMDI2XHUwMDI2IFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjQtXHRcdE5GX0NPTk5UUkFDS19GVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU9Nz1pcF92c19wcm90by1vYmpzLXkgOj1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTo4OmlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fVENQKSAmIzQzOz0gaXBfdnNfcHJvdG9fdGNwLm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS05LWlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fVURQKSAmIzQzOz0gaXBfdnNfcHJvdG9fdWRwLm9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTYwPUVYUE9SVF9TWU1CT0woaXBfdnNfY29ubl9vdXRfZ2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NjE6I2lmZGVmIENPTkZJR19JUF9WU19QUk9UT19UQ1Bcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNjItRVhQT1JUX1NZTUJPTChpcF92c190Y3BfY29ubl9saXN0ZW4pO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9Njg9RVhQT1JUX1NZTUJPTChpcF92c19uZXdfY29ubl9vdXQpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy02OS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzA6I2lmIGRlZmluZWQoQ09ORklHX0lQX1ZTX1BST1RPX1RDUCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzEtI2RlZmluZSBTTkFUX0NBTEwoZiwgLi4uKSBcXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03Mi1cdElORElSRUNUX0NBTExfMihmLCB0Y3Bfc25hdF9oYW5kbGVyLCB1ZHBfc25hdF9oYW5kbGVyLCBfX1ZBX0FSR1NfXylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzM6I2VsaWYgZGVmaW5lZChDT05GSUdfSVBfVlNfUFJPVE9fVENQKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03NC0jZGVmaW5lIFNOQVRfQ0FMTChmLCAuLi4pIElORElSRUNUX0NBTExfMShmLCB0Y3Bfc25hdF9oYW5kbGVyLCBfX1ZBX0FSR1NfXylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MzMwNj1zdGF0aWMgaW50IGlwX3ZzX3NldF90aW1lb3V0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfdGltZW91dF91c2VyICp1KVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTMzMDcte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjMzMDg6I2lmIGRlZmluZWQoQ09ORklHX0lQX1ZTX1BST1RPX1RDUCkgfHwgZGVmaW5lZChDT05GSUdfSVBfVlNfUFJPVE9fVURQKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTMzMDktXHRzdHJ1Y3QgaXBfdnNfcHJvdG9fZGF0YSAqcGQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTMzMTYtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzMxNzojaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX1RDUFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTMzMTgtXHRpZiAodS1cdTAwM2V0Y3BfdGltZW91dCBcdTAwM2MgMCB8fCB1LVx1MDAzZXRjcF90aW1lb3V0IFx1MDAzZSAoSU5UX01BWCAvIEhaKSB8fFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zMzI4LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjMzMjk6I2lmZGVmIENPTkZJR19JUF9WU19QUk9UT19UQ1Bcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zMzMwLVx0aWYgKHUtXHUwMDNldGNwX3RpbWVvdXQpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MzY5MD1fX2lwX3ZzX2dldF90aW1lb3V0cyhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3RpbWVvdXRfdXNlciAqdSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNjkxLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzozNjkyOiNpZiBkZWZpbmVkKENPTkZJR19JUF9WU19QUk9UT19UQ1ApIHx8IGRlZmluZWQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNjkzLVx0c3RydWN0IGlwX3ZzX3Byb3RvX2RhdGEgKnBkO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNjk3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM2OTg6I2lmZGVmIENPTkZJR19JUF9WU19QUk9UT19UQ1Bcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNjk5LVx0cGQgPSBpcF92c19wcm90b19kYXRhX2dldChpcHZzLCBJUFBST1RPX1RDUCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTQ3NjY9c3RhdGljIGludCBpcF92c19nZW5sX2dldF9jbWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDgyMy1cdFx0X19pcF92c19nZXRfdGltZW91dHMoaXB2cywgXHUwMDI2dCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDgyNDojaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX1RDUFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ4MjUtXHRcdGlmIChubGFfcHV0X3UzMihtc2csIElQVlNfQ01EX0FUVFJfVElNRU9VVF9UQ1AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmM9Mjk1PWludCBfX25ldF9pbml0IGlwX3ZzX3Byb3RvY29sX25ldF9pbml0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jLTI5OC1cdHN0YXRpYyBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnByb3Rvc1tdID0ge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmM6Mjk5OiNpZmRlZiBDT05GSUdfSVBfVlNfUFJPVE9fVENQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYy0zMDAtICAgICAgICBcdTAwMjZpcF92c19wcm90b2NvbF90Y3AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmM9MzQwPWludCBfX2luaXQgaXBfdnNfcHJvdG9jb2xfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jLTM0OS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jOjM1MDojaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX1RDUFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMtMzUxLVx0UkVHSVNURVJfUFJPVE9DT0woXHUwMDI2aXBfdnNfcHJvdG9jb2xfdGNwKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2NvbmZpZz0zOD1DT05GSUdfSVBfVlM9bVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWc6Mzk6Q09ORklHX0lQX1ZTX1BST1RPX1RDUD15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2NvbmZpZy00MC1DT05GSUdfSVBfVlNfUlI9bVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3ODUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOgoKKipBbmFseXppbmcgSVBWUyBQcm90b2NvbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIGBDT05GSUdfSVBfVlNfUFJPVE9fVENQYCBhbmQgYENPTkZJR19JUF9WU19QUk9UT19VRFBgIGFzIGxlZ2l0aW1hdGUgY29uZmlndXJhdGlvbnMg4oCTIG5vdGhpbmcganVtcHMgb3V0IGFzIGltbWVkaWF0ZWx5IHdyb25nIHRoZXJlLiBOb3csIGhvbGQgb24gYSBzZWNvbmQuLi4gSSByZWNhbGwgdGhhdCBgQ09ORklHX0lQX1ZTX1BST1RPX1RDUGAgaXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24sIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBhICpsb3QqIG9mIGRlZmNvbmZpZ3MgSSYjMzk7dmUgd29ya2VkIHdpdGguIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0LiBMZXQgbWUgcXVpY2tseSBnbyBsb29rIGF0IGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgdG8gY29uZmlybSBpZiBpdCBkZWZhdWx0cyB0byAmIzM5O3kmIzM5OyBhcyBJIHN1c3BlY3QuIFRoYXQgc2hvdWxkIGNsYXJpZnkgZXZlcnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WU19QUk9UT19UQ1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDY1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDoKCioqRGl2aW5nIGludG8gQ29uZmlndXJhdGlvbjogSVAgdnMuIFByb3RvIFRDUCoqCgpSaWdodCwgbGV0IG1lIHNlZS4gVGhhdCBzdHJpbmcgaW1tZWRpYXRlbHkgdGhyb3dzIHVwIGEgZmxhZy4gJiMzNDtjb25maWcmIzM0OyDigJMgdGhhdCB0ZWxscyBtZSBJJiMzOTttIGxvb2tpbmcgYXQgYSBjb25maWd1cmF0aW9uIGZpbGUgb3IgcGF0aC4gVGhlbiwgdGhlIHRhYiBzZXBhcmF0b3LigJR0aGF0JiMzOTtzIGludGVyZXN0aW5nLCBidXQgbm90IHVudXN1YWwgZm9yIGEga2V5LXZhbHVlIHN0cnVjdHVyZSwgYW5kIHRoZSByZXN0IGlzIGNsZWFybHkgdGhlIGtleS4gJiMzNDtJUFxfVlNcX1BST1RPXF9UQ1AmIzM0Oy4uLiB5ZXAsIHRoaXMgcG9pbnRzIGRpcmVjdGx5IHRvIHNvbWV0aGluZyByZWxhdGVkIHRvIElQIFZpcnR1YWwgU2VydmVyIChJUFZTKSwgYW5kIHNwZWNpZmljYWxseSwgaG93IGl0JiMzOTtzIGhhbmRsaW5nIFRDUCB0cmFmZmljLiBJJiMzOTttIGxpa2VseSBleGFtaW5pbmcgYSBzZXR0aW5nIHRoYXQgZGVmaW5lcyBob3cgVENQIHRyYWZmaWMgaXMgcm91dGVkIG9yIG1hbmFnZWQgYnkgYW4gSVBWUyBjb25maWd1cmF0aW9uLiBNaWdodCBiZSBhIHJvdXRpbmcgcG9saWN5LCBhIGhlYWx0aCBjaGVjayBzZXR0aW5nIGZvciBUQ1Agc2VydmljZXMsIG9yIHRoZSB3YXkgVENQIGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBjb250ZXh0IG9mIGxvYWQgYmFsYW5jaW5nLiBUaGlzIHRlbGxzIG1lIGFib3V0IHRoZSB0eXBlIG9mIHRyYWZmaWMgYW5kIHdoZXJlIGl0JiMzOTtzIGRpcmVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgbW9yZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gZmlsZSBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnLipJUF9WU19QUk9UT19UQ1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Nzc9Y29tbWVudCBcJiMzNDtJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy03OC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjc5OmNvbmZpZ1x0SVBfVlNfUFJPVE9fVENQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04MC1cdGJvb2wgXCYjMzQ7VENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUFZTIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBJUFZTIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBzb3VyY2Ugb2YgdHJ1dGgsIGFuZCB0aGF0JiMzOTtzIGdlbmVyYWxseSB0aGUgS2NvbmZpZyBmaWxlLiBJJiMzOTtsbCBuYXZpZ2F0ZSB0byBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIOKAkyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgSVBWUyBvcHRpb25zIGFyZSBwcmVzZW50ZWQgYW5kIGhhbmRsZWQgZHVyaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCBhcm91bmQgbGluZSA3OS4gVGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgb3B0aW9ucyBhcmUgZGVjbGFyZWQuIEkgZXhwZWN0IHRvIGZpbmQgdGhpbmdzIGxpa2UgdGhlIGRlZmF1bHQgYmVoYXZpb3IuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgb3B0aW9ucy4gVGhpcyBtaWdodCByZXZlYWwgc29tZSBpbnRlcmVzdGluZyBxdWlya3Mgb3IgaW1wbGVtZW50YXRpb24gZGVjaXNpb25zIHRoYXQgSSBoYXZlbiYjMzk7dCBjb25zaWRlcmVkIHByZXZpb3VzbHksIHdoaWNoIGNvdWxkIGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJiMzOTttIGxvb2tpbmcgYXQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHRcdCAgZWFjaCBoYXNoIGVudHJ5IHVzZXMgOCBieXRlcywgc28geW91IGNhbiBlc3RpbWF0ZSBob3cgbXVjaCBtZW1vcnkgaXNcbiAgNzE6XHRcdCAgbmVlZGVkIGZvciB5b3VyIGJveC5cbiAgNzI6XHRcbiAgNzM6XHRcdCAgWW91IGNhbiBvdmVyd3JpdGUgdGhpcyBudW1iZXIgc2V0dGluZyBjb25uX3RhYl9iaXRzIG1vZHVsZSBwYXJhbWV0ZXJcbiAgNzQ6XHRcdCAgb3IgYnkgYXBwZW5kaW5nIGlwX3ZzLmNvbm5fdGFiX2JpdHM9PyB0byB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBpZlxuICA3NTpcdFx0ICBJUCBWUyB3YXMgY29tcGlsZWQgYnVpbHQtaW4uXG4gIDc2Olx0XG4gIDc3Olx0Y29tbWVudCBcJiMzNDtJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4gIDc4Olx0XG4gIDc5Olx0Y29uZmlnXHRJUF9WU19QUk9UT19UQ1BcbiAgODA6XHRcdGJvb2wgXCYjMzQ7VENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbiAgODE6XHRcdGhlbHBcbiAgODI6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBUQ1AgdHJhbnNwb3J0XG4gIDgzOlx0XHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXG4gIDg0Olx0XG4gIDg1Olx0Y29uZmlnXHRJUF9WU19QUk9UT19VRFBcbiAgODY6XHRcdGJvb2wgXCYjMzQ7VURQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbiAgODc6XHRcdGhlbHBcbiAgODg6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBVRFAgdHJhbnNwb3J0XG4gIDg5Olx0XHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXG4gIDkwOlx0XG4gIDkxOlx0Y29uZmlnXHRJUF9WU19QUk9UT19BSF9FU1BcbiAgOTI6XHRcdGRlZl9ib29sIElQX1ZTX1BST1RPX0VTUCB8fCBJUF9WU19QUk9UT19BSFxuICA5MzpcdFxuICA5NDpcdGNvbmZpZ1x0SVBfVlNfUFJPVE9fRVNQXG4gIDk1Olx0XHRib29sIFwmIzM0O0VTUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4gIDk2Olx0XHRoZWxwXG4gIDk3Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgRVNQIChFbmNhcHN1bGF0aW9uXG4gIDk4Olx0XHQgIFNlY3VyaXR5IFBheWxvYWQpIHRyYW5zcG9ydCBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLlxuICA5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA3NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgQ2hlY2tzdW0gUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBhcmUgZXhwZWN0ZWQ7IHRob3NlIGFyZSBwcmV0dHkgc3RhbmRhcmQuIE5vdywgdGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBtb2RpZnlpbmcgdGhlIGNoZWNrc3VtIGhhbmRsaW5nIHdpdGhpbiBJUFZTLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AgYW5kIHRoZW4gbGV2ZXJhZ2VzIGl0IGFjcm9zcyBgaXBfdnNfY29yZS5jYCwgYGlwX3ZzX3Byb3RvX3RjcC5jYCwgYW5kIGBpcF92c19wcm90b191ZHAuY2AuIFRoYXQmIzM5O3MgdGhlIGNvcmUgZm9jdXMsIHRoYXQgZnVuY3Rpb24uCgpCZXlvbmQgdGhhdCwgSSYjMzk7bSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byBgaXBfdnNfaW5faWNtcF92NmAsIGBpcF92c19pbl9pY21wYCwgYW5kIGBoYW5kbGVfcmVzcG9uc2VfaWNtcGAsIHdoaWNoIGFyZSBsaWtlbHkgcmVsYXRlZCB0byBJQ01QIHRyYWZmaWMgaGFuZGxpbmcgaW4gcmVsYXRpb24gdG8gY2hlY2tzdW0gdmFsaWRhdGlvbi4gT2theSwgdGltZSB0byBkaXZlIGludG8gYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AgaXRzZWxmLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY2AuCgpBaGEhIEl0JiMzOTtzIGEgbmV3IGZ1bmN0aW9uOyB0aGF0JiMzOTtzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsb2dpYy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgc3ltYm9scyBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCwgYGlwX3ZzX2luX2ljbXBfdjZgLCBgaXBfdnNfaW5faWNtcGAsIGBoYW5kbGVfcmVzcG9uc2VfaWNtcGAsIGFuZCBhbHNvIGB0Y3BfY3N1bV9jaGVja2AgYW5kIGB1ZHBfY3N1bV9jaGVja2AuIFdhaXQgYSBtaW51dGUsIGFyZW4mIzM5O3QgYHRjcF9jc3VtX2NoZWNrYCBhbmQgYHVkcF9jc3VtX2NoZWNrYCBkZWZpbmVkIGFzIHN0YXRpYyBmdW5jdGlvbnMgaW4gYGlwX3ZzX3Byb3RvX3RjcC5jYCBhbmQgYGlwX3ZzX3Byb3RvX3VkcC5jYD8gR290dGEgY29uZmlybSB0aGF0IHRoZXkmIzM5O3JlIHN0YXRpYyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGVpciB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9jc3VtX2NoZWNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0zMD1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MzE6dGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTMyLVx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9MTQ3PXRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMTY4LVx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzoxNjk6XHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTE3MC1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9MjI1PXRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMjQ2LVx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzoyNDc6XHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTI0OC1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9MzAzPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzozMDQ6dGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTMwNS1cdCAgICAgICB1bnNpZ25lZCBpbnQgdGNwaG9mZilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMDAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja3N1bSBWZXJpZmljYXRpb24gVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGVzZSBlbGVtZW50cyBhcmUgaW5kZWVkIHN0YXRpYy4gVGhlcmVmb3JlLCB0aGUgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIHNob3VsZCBjZW50ZXIgYXJvdW5kIHRoZXNlIGtleSBzeW1ib2xzOiBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCwgYGlwX3ZzX2luX2ljbXBfdjZgLCBgaXBfdnNfaW5faWNtcGAsIGBoYW5kbGVfcmVzcG9uc2VfaWNtcGAsIGB0Y3BfY3N1bV9jaGVja2AsIGFuZCBgdWRwX2NzdW1fY2hlY2tgLiBJIHdhbnQgdG8gZHJpbGwgZG93biBzcGVjaWZpY2FsbHkgb24gYHVkcF9jc3VtX2NoZWNrYCBub3cgdG8gZW5zdXJlIHByb3BlciB2YWxpZGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHBfY3N1bV9jaGVjayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MjY9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjI3OnVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0yOC1cdCAgICAgICB1bnNpZ25lZCBpbnQgdWRwaG9mZik7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTEzNj11ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTE1Ny1cdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MTU4Olx0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB1ZHBob2ZmKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0xNTktXHRcdFx0cmV0dXJuIDA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTIxOT11ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTI0MC1cdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MjQxOlx0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB1ZHBob2ZmKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0yNDItXHRcdFx0cmV0dXJuIDA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTI5OT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MzAwOnVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0zMDEtXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDUzCgkJCQkJCQlvdXRwdXQ6IDE4MgoJCQkJCQkJdGhvdWdodHM6IDQ5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJUFZTIENoZWNrc3VtIFZhbGlkYXRpb24gUGF0Y2ggQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBjb25maWdzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGBJUF9WU19QUk9UT19UQ1BgLCBhbmQgYElQX1ZTX1BST1RPX1VEUGAuIFdoaWxlIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBhcmUgb2Z0ZW4gZW5hYmxlZCBieSBkZWZhdWx0IGluIHZhcmlvdXMgZGVmY29uZmlncywgaXQmIzM5O3MgZ29vZCBwcmFjdGljZSB0byBleHBsaWNpdGx5IHNwZWNpZnkgdGhlbSBoZXJlIGZvciBjbGFyaXR5IGFuZCB0byBtYWtlIHN1cmUgdGhleSBhcmUgZGVmaW5pdGVseSBlbmFibGVkLiBBbHdheXMgZ29vZCB0byBiZSBleHBsaWNpdCwgcmF0aGVyIHRoYW4gaW1wbGljaXQuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyB0b3VjaGVkLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGlwX3ZzX2NvcmUuY2AsIGBpcF92c19wcm90b190Y3AuY2AsIGFuZCBgaXBfdnNfcHJvdG9fdWRwLmNgLiBPa2F5LCBzbyBpdCYjMzk7cyBjb3JlIHRvIElQVlMgYW5kIGludm9sdmVzIHRoZSBUQ1AvVURQIHByb3RvY29sIGltcGxlbWVudGF0aW9ucy4gQSBxdWljayBjaGVjayB0byBzZWUgaWYgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AgaXMgZXhwb3J0ZWQuLi5Ob3BlLCBpdCYjMzk7cyBpbnRlcm5hbCB0byB0aGUgbW9kdWxlLiBObyBwcm9ibGVtLCB0aGF0IGRvZXNuJiMzOTt0IGNoYW5nZSBhbnl0aGluZywganVzdCBub3RpbmcgdGhhdCBmb3IgbGF0ZXIuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBhcmUgYWN0dWFsbHkgKm5lZWRlZCogaGVyZS4gQWgsIHllcywgdGhleSBhcmUsIGFzIHRoZSBpbXBsZW1lbnRhdGlvbnMgdXRpbGl6ZSBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCBmb3IgdGhlIFRDUCBhbmQgVURQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBwYXRocy4gQW5kIGBJUF9WU19JUFY2YCBpcywgb2YgY291cnNlLCBuZWNlc3NhcnkgYmVjYXVzZSBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCBkZWFscyB3aXRoIElQdjYgcGFydHMsIGFzIGRvZXMgYGlwX3ZzX2luX2ljbXBfdjZgLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY29kZSBzbmlwcGV0OgpgYGBjCmJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvLAoJCQkJIGludCBvZmZzZXQpCmBgYApUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBwYXRjaDogYSBuZXcgY2hlY2tzdW0gdmFsaWRhdGlvbiBmdW5jdGlvbi4gSXQmIzM5O3MgYSBjb21tb24gZnVuY3Rpb24sIHdoaWNoIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gQW5kIHllcywgYWJzb2x1dGVseSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enouIENoZWNrc3VtIHZhbGlkYXRpb24gaXMgYSBjbGFzc2ljIGF0dGFjayB2ZWN0b3IsIGFuZCBhIHNoYXJlZCBmdW5jdGlvbiBsaWtlIHRoaXMgaXMgYW4gZXZlbiByaWNoZXIgdGFyZ2V0LgoKT2theSwgdGltZSB0byBmb3JtdWxhdGUgdGhlIHJlc3BvbnNlLgoKKipXb3J0aEZ1enppbmc6IHRydWUqKgoKKipFbmFibGVDb25maWdzOiBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGBJUF9WU19QUk9UT19UQ1BgLCBgSVBfVlNfUFJPVE9fVURQYCoqCgoqKkZvY3VzU3ltYm9sczogYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIGBpcF92c19pbl9pY21wX3Y2YCwgYGlwX3ZzX2luX2ljbXBgLCBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgLCBgdGNwX2NzdW1fY2hlY2tgLCBgdWRwX2NzdW1fY2hlY2tgKioKCioqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBjaGVja3N1bSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBJUFZTIGFuZCB1c2VzIGl0IGFjcm9zcyBUQ1AsIFVEUCwgYW5kIElDTVAgcHJvdG9jb2xzLiBJdCBhbHNvIGFkZHMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgaW5jb21pbmcgSUNNUHY2IHBhY2tldHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNoZWNrc3VtIHZhbGlkYXRpb24gcGF0aHMgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBtYWxmb3JtZWQgcGFja2V0cy4gU3BlY2lmaWNhbGx5LCB0aGUgY29tbW9uIGZ1bmN0aW9uIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucyBpbiBlYWNoIHByb3RvY29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfSVBWNiYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVURQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX2luX2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcmVzcG9uc2VfaWNtcCYjMzQ7LAogICAgJiMzNDt0Y3BfY3N1bV9jaGVjayYjMzQ7LAogICAgJiMzNDt1ZHBfY3N1bV9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBjaGVja3N1bSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBJUFZTIGFuZCB1c2VzIGl0IGFjcm9zcyBUQ1AsIFVEUCwgYW5kIElDTVAgcHJvdG9jb2xzLiBJdCBhbHNvIGFkZHMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgaW5jb21pbmcgSUNNUHY2IHBhY2tldHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNoZWNrc3VtIHZhbGlkYXRpb24gcGF0aHMgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBtYWxmb3JtZWQgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfSVBWNiYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVURQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX2luX2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcmVzcG9uc2VfaWNtcCYjMzQ7LAogICAgJiMzNDt0Y3BfY3N1bV9jaGVjayYjMzQ7LAogICAgJiMzNDt1ZHBfY3N1bV9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBjaGVja3N1bSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBJUFZTIGFuZCB1c2VzIGl0IGFjcm9zcyBUQ1AsIFVEUCwgYW5kIElDTVAgcHJvdG9jb2xzLiBJdCBhbHNvIGFkZHMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgaW5jb21pbmcgSUNNUHY2IHBhY2tldHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNoZWNrc3VtIHZhbGlkYXRpb24gcGF0aHMgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBtYWxmb3JtZWQgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjIxOjQ4LjE1NjcwODEyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNzc0MTY3NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCIsXG4gICAgXCJJUF9WU19JUFY2XCIsXG4gICAgXCJJUF9WU19QUk9UT19UQ1BcIixcbiAgICBcIklQX1ZTX1BST1RPX1VEUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja1wiLFxuICAgIFwiaXBfdnNfaW5faWNtcF92NlwiLFxuICAgIFwiaXBfdnNfaW5faWNtcFwiLFxuICAgIFwiaGFuZGxlX3Jlc3BvbnNlX2ljbXBcIixcbiAgICBcInRjcF9jc3VtX2NoZWNrXCIsXG4gICAgXCJ1ZHBfY3N1bV9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29tbW9uIGNoZWNrc3VtIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIElQVlMgYW5kIHVzZXMgaXQgYWNyb3NzIFRDUCwgVURQLCBhbmQgSUNNUCBwcm90b2NvbHMuIEl0IGFsc28gYWRkcyBjaGVja3N1bSB2YWxpZGF0aW9uIGZvciBpbmNvbWluZyBJQ01QdjYgcGFja2V0cy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgY2hlY2tzdW0gdmFsaWRhdGlvbiBwYXRocyB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIG1hbGZvcm1lZCBwYWNrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMTo0OC4xNTY3MTMzMDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTI1MjE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJkMGU0MTZkYzVlNTAwODc5ZTEzYjdlNDg4OTExODExNTJmMGZhOTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMTg6MjE6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcXG5pbmRleCA0MTdmZjUxZjYyZmM4ZS4uY2Q2NWRkM2E0YWQxZjYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcXG5AQCAtMjA2Niw4ICsyMDY2LDYgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcXG4gI2VuZGlmXFxuIFxcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpO1xcbi1cXG4gc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjQoX19iZTMyIG9sZCwgX19iZTMyIG5ldywgX193c3VtIG9sZHN1bSlcXG4ge1xcbiBcXHRfX2JlMzIgZGlmZlsyXSA9IHsgfm9sZCwgbmV3IH07XFxuQEAgLTIwOTMsNiArMjA5MSw5IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pXFxuIFxcdHJldHVybiBjc3VtX3BhcnRpYWwoZGlmZiwgc2l6ZW9mKGRpZmYpLCBvbGRzdW0pO1xcbiB9XFxuIFxcbitib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90byxcXG4rXFx0XFx0XFx0XFx0IGludCBvZmZzZXQpO1xcbitcXG4gLyogRm9yZ2V0IGN1cnJlbnQgY29ubnRyYWNrICh1bmNvbmZpcm1lZCkgYW5kIGF0dGFjaCBub3RyYWNrIGVudHJ5ICovXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19ub3RyYWNrKHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcXG5pbmRleCAzNWNiZTgyMWMyNTk2Ny4uNmNhZTRlYTQ1ZDU1YWIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcXG5AQCAtODY3LDExICs4NjcsNTYgQEAgc3RhdGljIGludCBzeXNjdGxfbmF0X2ljbXBfc2VuZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cykgeyByZXR1cm4gMDsgfVxcbiBcXG4gI2VuZGlmXFxuIFxcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxuK3N0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxuIHtcXG4gXFx0cmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKSk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2sgLSB2YWxpZGF0ZSBjaGVja3N1bSBmb3IgVENQL1VEUC9JQ01QXFxuKyAqIEBhZjogQUZfSU5FVC9BRl9JTkVUNlxcbisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyXFxuKyAqIEBwcm90bzogSVBQUk9UT194eHhcXG4rICogQG9mZnNldDogb2Zmc2V0IG9mIHByb3RvY29sIGhlYWRlclxcbisgKi9cXG4rYm9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8sXFxuK1xcdFxcdFxcdFxcdCBpbnQgb2Zmc2V0KVxcbit7XFxuK1xcdF9fd3N1bSBjc3VtO1xcbitcXG4rXFx0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fTk9ORSkge1xcbitcXHRcXHRjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXFx1MDAzZWxlbiAtIG9mZnNldCwgMCk7XFxuK1xcdH0gZWxzZSBpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpIHtcXG4rXFx0XFx0LyogSVBWUyB3b3JrcyBhdCBJUCBsYXllciwgc28gc2tiLVxcdTAwM2Vjc3VtIGNvdmVycyBkYXRhIGZyb21cXG4rXFx0XFx0ICogSVAgaGVhZGVyLCBzdHJpcCBpdCB1cCB0byB0aGUgcHJvdG9jb2wgaGVhZGVyXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjc3VtID0gY3N1bV9zdWIoc2tiLVxcdTAwM2Vjc3VtLCBza2JfY2hlY2tzdW0oc2tiLCAwLCBvZmZzZXQsIDApKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogTm8gbmVlZCB0byBjaGVja3N1bS4gKi9cXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuK1xcdGlmIChhZiA9PSBBRl9JTkVUNikge1xcbitcXHRcXHRpZiAoY3N1bV9pcHY2X21hZ2ljKFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VzYWRkcixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4rXFx0XFx0XFx0XFx0ICAgIHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0LCBwcm90byxcXG4rXFx0XFx0XFx0XFx0ICAgIGNzdW0pKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH0gZWxzZVxcbisjZW5kaWZcXG4rXFx0XFx0aWYgKHByb3RvID09IElQUFJPVE9fSUNNUClcXG4rXFx0XFx0XFx0cmV0dXJuICFjc3VtX2ZvbGQoY3N1bSk7XFxuK1xcdFxcdGVsc2UgaWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLVxcdTAwM2VzYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgaXBfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbitcXHRcXHRcXHRcXHRcXHQgICBza2ItXFx1MDAzZWxlbiAtIG9mZnNldCwgcHJvdG8sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGNzdW0pKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBlbnVtIGlwX2RlZnJhZ191c2VycyBpcF92c19kZWZyYWdfdXNlcih1bnNpZ25lZCBpbnQgaG9va251bSlcXG4ge1xcbiBcXHRpZiAoTkZfSU5FVF9MT0NBTF9JTiA9PSBob29rbnVtKVxcbkBAIC0xMDM5LDEyICsxMDg0LDEzIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaG9va251bSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgdmVyZGljdCA9IE5GX0RST1A7XFxuK1xcdGludCBpcHJvdG8gPSBhZiA9PSBBRl9JTkVUNiA/IElQUFJPVE9fSUNNUFY2IDogSVBQUk9UT19JQ01QO1xcbiBcXG4gXFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKVxcbiBcXHRcXHRnb3RvIGFmdGVyX25hdDtcXG4gXFxuIFxcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xcbi1cXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXFx1MDAyNlxcdTAwMjYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGFmLCBza2IsIGlwcm90bywgaWhsKSkge1xcbiBcXHRcXHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXFxuIFxcdFxcdElQX1ZTX0RCR19CVUYoMSwgXFxcIkZvcndhcmQgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXMhXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgICBJUF9WU19EQkdfQUREUihhZiwgc25ldCkpO1xcbkBAIC0xODk5LDcgKzE5NDUsNyBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuIFxcdHZlcmRpY3QgPSBORl9EUk9QO1xcbiBcXG4gXFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXFxuLVxcdGlmICghc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSBcXHUwMDI2XFx1MDAyNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHtcXG4rXFx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soQUZfSU5FVCwgc2tiLCBJUFBST1RPX0lDTVAsIGlobCkpIHtcXG4gXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbiBcXHRcXHRJUF9WU19EQkcoMSwgXFxcIkluY29taW5nIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTQhXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyKTtcXG5AQCAtMjA2NSw2ICsyMTExLDE3IEBAIHN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdHZlcmRpY3QgPSBORl9EUk9QO1xcbitcXG4rXFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKEFGX0lORVQ2LCBza2IsIElQUFJPVE9fSUNNUFY2LFxcbitcXHRcXHRcXHRcXHRcXHQgaXBoLVxcdTAwM2VsZW4pKSB7XFxuK1xcdFxcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cXG4rXFx0XFx0SVBfVlNfREJHKDEsIFxcXCJJbmNvbWluZyBJQ01QdjY6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTZjIVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICBcXHUwMDI2aXBoLVxcdTAwM2VzYWRkcik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbiBcXHQvKiBkbyB0aGUgc3RhdGlzdGljcyBhbmQgcHV0IGl0IGJhY2sgKi9cXG4gXFx0aXBfdnNfaW5fc3RhdHMoY3AsIHNrYik7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcXG5pbmRleCBmODZiNzYzZWZjYzRkYy4uZThlNmFjYWY4MzAwOGEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXFxuQEAgLTMwNCwzOSArMzA0LDEwIEBAIHN0YXRpYyBpbnRcXG4gdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHQgICAgICAgdW5zaWduZWQgaW50IHRjcGhvZmYpXFxuIHtcXG4tXFx0c3dpdGNoIChza2ItXFx1MDAzZWlwX3N1bW1lZCkge1xcbi1cXHRjYXNlIENIRUNLU1VNX05PTkU6XFxuLVxcdFxcdHNrYi1cXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XFxuLVxcdFxcdGZhbGx0aHJvdWdoO1xcbi1cXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4tXFx0XFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuLVxcdFxcdFxcdGlmIChjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW0pKSB7XFxuLVxcdFxcdFxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2VcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlY3N1bSkpIHtcXG4tXFx0XFx0XFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xcbi1cXHRcXHRicmVhaztcXG4rXFx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soYWYsIHNrYiwgSVBQUk9UT19UQ1AsIHRjcGhvZmYpKSB7XFxuK1xcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsIFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuLVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXFxuaW5kZXggNThmOWUyNTU5MjdlMmUuLjRkMWQxZmMyM2MyZGI2IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xcbkBAIC0zMDYsNDAgKzMwNiwxMSBAQCB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdGlmICh1aCA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmICh1aC1cXHUwMDNlY2hlY2sgIT0gMCkge1xcbi1cXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlaXBfc3VtbWVkKSB7XFxuLVxcdFxcdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcXG4tXFx0XFx0XFx0c2tiLVxcdTAwM2Vjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdWRwaG9mZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHNrYi1cXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XFxuLVxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbi1cXHRcXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4tXFx0XFx0XFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuLVxcdFxcdFxcdFxcdGlmIChjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW0pKSB7XFxuLVxcdFxcdFxcdFxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHR9IGVsc2VcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdFxcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlY3N1bSkpIHtcXG4tXFx0XFx0XFx0XFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbitcXHRpZiAoIXVoLVxcdTAwM2VjaGVjaylcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGFmLCBza2IsIElQUFJPVE9fVURQLCB1ZHBob2ZmKSkge1xcbitcXHRcXHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMTo0OC42NTI3Njk2NjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMjc4MDk0MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCIsXG4gICAgXCJJUF9WU19JUFY2XCIsXG4gICAgXCJJUF9WU19QUk9UT19UQ1BcIixcbiAgICBcIklQX1ZTX1BST1RPX1VEUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja1wiLFxuICAgIFwiaXBfdnNfaW5faWNtcF92NlwiLFxuICAgIFwiaXBfdnNfaW5faWNtcFwiLFxuICAgIFwiaGFuZGxlX3Jlc3BvbnNlX2ljbXBcIixcbiAgICBcInRjcF9jc3VtX2NoZWNrXCIsXG4gICAgXCJ1ZHBfY3N1bV9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29tbW9uIGNoZWNrc3VtIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIElQVlMgYW5kIHVzZXMgaXQgYWNyb3NzIFRDUCwgVURQLCBhbmQgSUNNUCBwcm90b2NvbHMuIEl0IGFsc28gYWRkcyBjaGVja3N1bSB2YWxpZGF0aW9uIGZvciBpbmNvbWluZyBJQ01QdjYgcGFja2V0cy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgY2hlY2tzdW0gdmFsaWRhdGlvbiBwYXRocyB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIG1hbGZvcm1lZCBwYWNrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJkMGU0MTZkYzVlNTAwODc5ZTEzYjdlNDg4OTExODExNTJmMGZhOTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAxODoyMTo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oXG5pbmRleCA0MTdmZjUxZjYyZmM4ZS4uY2Q2NWRkM2E0YWQxZjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oXG4rKysgYi9pbmNsdWRlL25ldC9pcF92cy5oXG5AQCAtMjA2Niw4ICsyMDY2LDYgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcbiAjZW5kaWZcbiBcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmY0KF9fYmUzMiBvbGQsIF9fYmUzMiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4ge1xuIFx0X19iZTMyIGRpZmZbMl0gPSB7IH5vbGQsIG5ldyB9O1xuQEAgLTIwOTMsNiArMjA5MSw5IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4gXHRyZXR1cm4gY3N1bV9wYXJ0aWFsKGRpZmYsIHNpemVvZihkaWZmKSwgb2xkc3VtKTtcbiB9XG4gXG4rYm9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8sXG4rXHRcdFx0XHQgaW50IG9mZnNldCk7XG4rXG4gLyogRm9yZ2V0IGN1cnJlbnQgY29ubnRyYWNrICh1bmNvbmZpcm1lZCkgYW5kIGF0dGFjaCBub3RyYWNrIGVudHJ5ICovXG4gc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX25vdHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcbmluZGV4IDM1Y2JlODIxYzI1OTY3Li42Y2FlNGVhNDVkNTVhYiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcbkBAIC04NjcsMTEgKzg2Nyw1NiBAQCBzdGF0aWMgaW50IHN5c2N0bF9uYXRfaWNtcF9zZW5kKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKSB7IHJldHVybiAwOyB9XG4gXG4gI2VuZGlmXG4gXG4tX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuK3N0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG4ge1xuIFx0cmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQsIDApKTtcbiB9XG4gXG4rLyoqXG4rICogaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrIC0gdmFsaWRhdGUgY2hlY2tzdW0gZm9yIFRDUC9VRFAvSUNNUFxuKyAqIEBhZjogQUZfSU5FVC9BRl9JTkVUNlxuKyAqIEBza2I6IHNvY2tldCBidWZmZXJcbisgKiBAcHJvdG86IElQUFJPVE9feHh4XG4rICogQG9mZnNldDogb2Zmc2V0IG9mIHByb3RvY29sIGhlYWRlclxuKyAqL1xuK2Jvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvLFxuK1x0XHRcdFx0IGludCBvZmZzZXQpXG4re1xuK1x0X193c3VtIGNzdW07XG4rXG4rXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKSB7XG4rXHRcdGNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQsIDApO1xuK1x0fSBlbHNlIGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKSB7XG4rXHRcdC8qIElQVlMgd29ya3MgYXQgSVAgbGF5ZXIsIHNvIHNrYi1cdTAwM2Vjc3VtIGNvdmVycyBkYXRhIGZyb21cbitcdFx0ICogSVAgaGVhZGVyLCBzdHJpcCBpdCB1cCB0byB0aGUgcHJvdG9jb2wgaGVhZGVyXG4rXHRcdCAqL1xuK1x0XHRjc3VtID0gY3N1bV9zdWIoc2tiLVx1MDAzZWNzdW0sIHNrYl9jaGVja3N1bShza2IsIDAsIG9mZnNldCwgMCkpO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogTm8gbmVlZCB0byBjaGVja3N1bS4gKi9cbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4rXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbitcdFx0aWYgKGNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyLFxuK1x0XHRcdFx0ICAgIFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4rXHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIG9mZnNldCwgcHJvdG8sXG4rXHRcdFx0XHQgICAgY3N1bSkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fSBlbHNlXG4rI2VuZGlmXG4rXHRcdGlmIChwcm90byA9PSBJUFBST1RPX0lDTVApXG4rXHRcdFx0cmV0dXJuICFjc3VtX2ZvbGQoY3N1bSk7XG4rXHRcdGVsc2UgaWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLVx1MDAzZXNhZGRyLFxuK1x0XHRcdFx0XHQgICBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbitcdFx0XHRcdFx0ICAgc2tiLVx1MDAzZWxlbiAtIG9mZnNldCwgcHJvdG8sXG4rXHRcdFx0XHRcdCAgIGNzdW0pKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGVudW0gaXBfZGVmcmFnX3VzZXJzIGlwX3ZzX2RlZnJhZ191c2VyKHVuc2lnbmVkIGludCBob29rbnVtKVxuIHtcbiBcdGlmIChORl9JTkVUX0xPQ0FMX0lOID09IGhvb2tudW0pXG5AQCAtMTAzOSwxMiArMTA4NCwxMyBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHVuc2lnbmVkIGludCBob29rbnVtKVxuIHtcbiBcdHVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDtcbitcdGludCBpcHJvdG8gPSBhZiA9PSBBRl9JTkVUNiA/IElQUFJPVE9fSUNNUFY2IDogSVBQUk9UT19JQ01QO1xuIFxuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKVxuIFx0XHRnb3RvIGFmdGVyX25hdDtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuLVx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFx1MDAyNlx1MDAyNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHtcbitcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGFmLCBza2IsIGlwcm90bywgaWhsKSkge1xuIFx0XHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXG4gXHRcdElQX1ZTX0RCR19CVUYoMSwgXCJGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcblwiLFxuIFx0XHRcdCAgICAgIElQX1ZTX0RCR19BRERSKGFmLCBzbmV0KSk7XG5AQCAtMTg5OSw3ICsxOTQ1LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0dmVyZGljdCA9IE5GX0RST1A7XG4gXG4gXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cbi1cdGlmICghc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSBcdTAwMjZcdTAwMjYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7XG4rXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhBRl9JTkVULCBza2IsIElQUFJPVE9fSUNNUCwgaWhsKSkge1xuIFx0XHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXG4gXHRcdElQX1ZTX0RCRygxLCBcIkluY29taW5nIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTQhXFxuXCIsXG4gXHRcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuQEAgLTIwNjUsNiArMjExMSwxNyBAQCBzdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0dmVyZGljdCA9IE5GX0RST1A7XG4rXG4rXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cbitcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKEFGX0lORVQ2LCBza2IsIElQUFJPVE9fSUNNUFY2LFxuK1x0XHRcdFx0XHQgaXBoLVx1MDAzZWxlbikpIHtcbitcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuK1x0XHRJUF9WU19EQkcoMSwgXCJJbmNvbWluZyBJQ01QdjY6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTZjIVxcblwiLFxuK1x0XHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4gXHQvKiBkbyB0aGUgc3RhdGlzdGljcyBhbmQgcHV0IGl0IGJhY2sgKi9cbiBcdGlwX3ZzX2luX3N0YXRzKGNwLCBza2IpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xuaW5kZXggZjg2Yjc2M2VmY2M0ZGMuLmU4ZTZhY2FmODMwMDhhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcbkBAIC0zMDQsMzkgKzMwNCwxMCBAQCBzdGF0aWMgaW50XG4gdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKVxuIHtcbi1cdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0Y2FzZSBDSEVDS1NVTV9OT05FOlxuLVx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLCAwKTtcbi1cdFx0ZmFsbHRocm91Z2g7XG4tXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxuLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuLVx0XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdCAgICBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIHRjcGhvZmYsXG4tXHRcdFx0XHRcdCAgICBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuLVx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2Vcbi0jZW5kaWZcbi1cdFx0XHRpZiAoY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gdGNwaG9mZixcbi1cdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlcHJvdG9jb2wsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuLVx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0fVxuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdC8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovXG4tXHRcdGJyZWFrO1xuK1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soYWYsIHNrYiwgSVBQUk9UT19UQ1AsIHRjcGhvZmYpKSB7XG4rXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsIFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4tXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXG5pbmRleCA1OGY5ZTI1NTkyN2UyZS4uNGQxZDFmYzIzYzJkYjYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xuQEAgLTMwNiw0MCArMzA2LDExIEBAIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdGlmICh1aCA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICh1aC1cdTAwM2VjaGVjayAhPSAwKSB7XG4tXHRcdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0XHRjYXNlIENIRUNLU1VNX05PTkU6XG4tXHRcdFx0c2tiLVx1MDAzZWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XG4tXHRcdFx0ZmFsbHRocm91Z2g7XG4tXHRcdGNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6XG4tI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4tXHRcdFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tXHRcdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdFx0ICAgIFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCAgICBJUFBST1RPX1VEUCxcbi1cdFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuLVx0XHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHRcdH1cbi1cdFx0XHR9IGVsc2Vcbi0jZW5kaWZcbi1cdFx0XHRcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZixcbi1cdFx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCxcbi1cdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHRcdCBcIkZhaWxlZCBjaGVja3N1bSBmb3JcIik7XG4tXHRcdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdFx0fVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovXG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbitcdGlmICghdWgtXHUwMDNlY2hlY2spXG4rXHRcdHJldHVybiAxO1xuK1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soYWYsIHNrYiwgSVBQUk9UT19VRFAsIHVkcGhvZmYpKSB7XG4rXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsIFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRyZXR1cm4gMTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMTo0OC42NTI3NzEwMzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQzODQ0NzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBWUyBDaGVja3N1bSBWYWxpZGF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgSVBWUyBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyB1bmlmeWluZyB0aGUgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYy4gVGhleSd2ZSBpbnRyb2R1Y2VkIHRoaXMgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AgZnVuY3Rpb24sIHdoaWNoIGlzIGJlaW5nIGNhbGxlZCBpbiBgaXBfdnNfY29yZS5jYCwgYGlwX3ZzX3Byb3RvX3RjcC5jYCwgYW5kIGBpcF92c19wcm90b191ZHAuY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgYSBtb3ZlIHRvd2FyZHMgYSBtb3JlIGNvbnNpc3RlbnQgYXBwcm9hY2ggdG8gaGFuZGxpbmcgY2hlY2tzdW1zIGFjcm9zcyBUQ1AsIFVEUCwgYW5kIElDTVAgd2l0aGluIHRoZSBJUFZTIGZyYW1ld29yay4gVGhlIGFkZGl0aW9uIG9mIGNoZWNrc3VtIHZhbGlkYXRpb24gZm9yIGluY29taW5nIElDTVB2NiBwYWNrZXRzIGluIGBpcF92c19pbl9pY21wX3Y2YCBpcyBhbHNvIHNvbWV0aGluZyB0byBtYWtlIG5vdGUgb2YuXG5cbk5vdywgYmVmb3JlIEkgZGlnIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgSVBWUyBpcyBldmVuIGF2YWlsYWJsZSBhbmQgY29ycmVjdGx5IGNvbmZpZ3VyZWQgaW4gdGhlIHRlc3Rpbmcgc2V0dXAuIEkga25vdyBpdCdzIHBhcnQgb2YgbmV0ZmlsdGVyLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBrZXJuZWwgY29uZmlncyBhcmUgc2V0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgZm9yIGBDT05GSUdfSVBfVlNgLCBgQ09ORklHX0lQX1ZTX0lQVjZgLCBgQ09ORklHX0lQX1ZTX1BST1RPX1RDUGAsIGFuZCBgQ09ORklHX0lQX1ZTX1BST1RPX1VEUGAuXG5cbk9rYXksIG5leHQgSSdsbCBzZWFyY2ggdGhlIHRyZWUgZm9yIGNhbGxzIHRvIGBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tgLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBleGFjdCB1c2FnZSBjb250ZXh0LCBmaW5kIGFsbCB0aGUgY29kZSBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLCBhbmQgaG93IGl0IGlzIGJlaW5nIHVzZWQuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHJlYWxseSBhc3Nlc3MgdGhlIGltcGxpY2F0aW9ucyBhbmQgcG90ZW50aWFsIGltcGFjdHMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MzUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMTo1My40OTY2MTg0NjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzOTk1MTk4MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX3ZzLmg9MjA4Nz1zdGF0aWMgaW5saW5lIF9fd3N1bSBpcF92c19jaGVja19kaWZmMihfX2JlMTYgb2xkLCBfX2JlMTYgbmV3LCBfX3dzdW0gb2xkc3VtKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0yMDkzLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MjA5NDpib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90byxcXG5pbmNsdWRlL25ldC9pcF92cy5oLTIwOTUtXFx0XFx0XFx0XFx0IGludCBvZmZzZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz04NzA9c3RhdGljIF9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtODc1LS8qKlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6ODc2OiAqIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayAtIHZhbGlkYXRlIGNoZWNrc3VtIGZvciBUQ1AvVURQL0lDTVBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTg3Ny0gKiBAYWY6IEFGX0lORVQvQUZfSU5FVDZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtODgxLSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6ODgyOmJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtODgzLVxcdFxcdFxcdFxcdCBpbnQgb2Zmc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xMDc5PXN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xMDkyLVxcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTA5MzpcXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhhZiwgc2tiLCBpcHJvdG8sIGlobCkpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEwOTQtXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xODAyPWlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTk0Ny1cXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE5NDg6XFx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soQUZfSU5FVCwgc2tiLCBJUFBST1RPX0lDTVAsIGlobCkpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5NDktXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMDM0PXN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjExNi1cXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIxMTc6XFx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soQUZfSU5FVDYsIHNrYiwgSVBQUk9UT19JQ01QVjYsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMTE4LVxcdFxcdFxcdFxcdFxcdCBpcGgtXFx1MDAzZWxlbikpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0zMDQ9dGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTMwNi17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjMwNzpcXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhhZiwgc2tiLCBJUFBST1RPX1RDUCwgdGNwaG9mZikpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMzA4LVxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsIFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MzAwPXVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0zMTAtXFx0XFx0cmV0dXJuIDE7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjMxMTpcXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhhZiwgc2tiLCBJUFBST1RPX1VEUCwgdWRwaG9mZikpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMzEyLVxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsIFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjIyOjE1Ljg5NjE0Mzk3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwOTk0MzQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tzdW0gVmFsaWRhdGlvbiBpbiBJUFZTOiBBIFF1aWNrIFJldmlldyoqXG5cbkFscmlnaHQsIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHNoYXJlZCBjaGVja3N1bSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBJUFZTLiBTbWFydCBtb3ZlLCBjZW50cmFsaXppbmcgdGhhdCBhbmQgcHJvbW90aW5nIHJldXNhYmlsaXR5LiBJdCdzIHVzZWQgaW4gYSBmZXcgcGxhY2VzLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdC4gRnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludCwgYmFzZWQgb24gdGhlIG5vdGVzLCBpdCBzZWVtcyBzb2xpZDsgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlLlxuXG5Ob3csIGxldCdzIHNlZSwgd2hhdCBjb25maWdzIGFyZSBuZWVkZWQ/IGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYElQX1ZTX1BST1RPX1RDUGAsIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBhcmUgbWVudGlvbmVkLiBIbW0sIGJlZm9yZSBJIGdldCB0b28gZmFyIGludG8gcmV2aWV3aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBUQ1AgYW5kIFVEUCBwcm90b2NvbCBvcHRpb25zIGFyZSBhY3R1YWxseSBwcmVzZW50IGFuZCB3ZWxsLWRlZmluZWQgaW4gdGhlIHJlbGV2YW50IGNvbmZpZyBmaWxlcy4gQmV0dGVyIHRvIHZlcmlmeSBhc3N1bXB0aW9ucyB1cGZyb250LiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4gT2theSwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2suLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUyMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjIyOjE5LjUwNjA4OTI5NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY3MTk4NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTX1BST1RPX1RDUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTI1MT1DT05GSUdfSVBfVlNfSVBWNj15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzoyNTI6Q09ORklHX0lQX1ZTX1BST1RPX1RDUD15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy0yNTMtQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTI2Nz1DT05GSUdfSVBfVlNfSVBWNj15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoyNjg6Q09ORklHX0lQX1ZTX1BST1RPX1RDUD15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0yNjktQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnPTY3PUNPTkZJR19JUF9WU19JUFY2PXlcXG5hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnOjY4OkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWctNjktQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9pcDIyX2RlZmNvbmZpZz0xMDc9Q09ORklHX0lQX1ZTX0lQVjY9eVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnOjEwODpDT05GSUdfSVBfVlNfUFJPVE9fVENQPXlcXG5hcmNoL21pcHMvY29uZmlncy9pcDIyX2RlZmNvbmZpZy0xMDktQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWc9MTA3PUNPTkZJR19JUF9WU19JUFY2PXlcXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWc6MTA4OkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZy0xMDktQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9rdm1fZGVmY29uZmlnPTExMT1DT05GSUdfSVBfVlNfSVBWNj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZzoxMTI6Q09ORklHX0lQX1ZTX1BST1RPX1RDUD15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZy0xMTMtQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWc9MTA4PUNPTkZJR19JUF9WU19JUFY2PXlcXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWc6MTA5OkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZy0xMTAtQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XFxuLS1cXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTc0PUNPTkZJR19JUF9WUz1tXFxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZzo3NTpDT05GSUdfSVBfVlNfUFJPVE9fVENQPXlcXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnLTc2LUNPTkZJR19JUF9WU19QUk9UT19VRFA9eVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTMxMz1DT05GSUdfSVBfVlM9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzozMTQ6Q09ORklHX0lQX1ZTX1BST1RPX1RDUD15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTMxNS1DT05GSUdfSVBfVlNfUFJPVE9fVURQPXlcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz0zMDQ9Q09ORklHX0lQX1ZTPW1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MzA1OkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy0zMDYtQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTExNDg9c3RydWN0IG5ldG5zX2lwdnMge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0xMTYyLVxcdC8qIGlwX3ZzX3Byb3RvX3RjcCAqL1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTE2MzojaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX1RDUFxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTE2NC1cXHQjZGVmaW5lXFx0VENQX0FQUF9UQUJfQklUU1xcdDRcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg9MjIwMj1pcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oLTIyMTMtXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoyMjE0OiNpZmRlZiBDT05GSUdfSVBfVlNfUFJPVE9fVENQXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0yMjE1LUlORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoaW50XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03Nz1jb21tZW50IFxcXCJJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTc4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjc5OmNvbmZpZ1xcdElQX1ZTX1BST1RPX1RDUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIlRDUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzIxPWNvbmZpZ1xcdElQX1ZTX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMi1cXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIGhlbHBlclxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVxcdFxcdE5GX0NPTk5UUkFDS19GVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZT03PWlwX3ZzX3Byb3RvLW9ianMteSA6PVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTo4OmlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fVENQKSArPSBpcF92c19wcm90b190Y3Aub1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS05LWlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fVURQKSArPSBpcF92c19wcm90b191ZHAub1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz02MD1FWFBPUlRfU1lNQk9MKGlwX3ZzX2Nvbm5fb3V0X2dldCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo2MTojaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX1RDUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNjItRVhQT1JUX1NZTUJPTChpcF92c190Y3BfY29ubl9saXN0ZW4pO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz02OD1FWFBPUlRfU1lNQk9MKGlwX3ZzX25ld19jb25uX291dCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy02OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjcwOiNpZiBkZWZpbmVkKENPTkZJR19JUF9WU19QUk9UT19UQ1ApIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTcxLSNkZWZpbmUgU05BVF9DQUxMKGYsIC4uLikgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzItXFx0SU5ESVJFQ1RfQ0FMTF8yKGYsIHRjcF9zbmF0X2hhbmRsZXIsIHVkcF9zbmF0X2hhbmRsZXIsIF9fVkFfQVJHU19fKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzM6I2VsaWYgZGVmaW5lZChDT05GSUdfSVBfVlNfUFJPVE9fVENQKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzQtI2RlZmluZSBTTkFUX0NBTEwoZiwgLi4uKSBJTkRJUkVDVF9DQUxMXzEoZiwgdGNwX3NuYXRfaGFuZGxlciwgX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MzMwNj1zdGF0aWMgaW50IGlwX3ZzX3NldF90aW1lb3V0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfdGltZW91dF91c2VyICp1KVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zMzA3LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzMwODojaWYgZGVmaW5lZChDT05GSUdfSVBfVlNfUFJPVE9fVENQKSB8fCBkZWZpbmVkKENPTkZJR19JUF9WU19QUk9UT19VRFApXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTMzMDktXFx0c3RydWN0IGlwX3ZzX3Byb3RvX2RhdGEgKnBkO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTMzMTYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjMzMTc6I2lmZGVmIENPTkZJR19JUF9WU19QUk9UT19UQ1BcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzMxOC1cXHRpZiAodS1cXHUwMDNldGNwX3RpbWVvdXQgXFx1MDAzYyAwIHx8IHUtXFx1MDAzZXRjcF90aW1lb3V0IFxcdTAwM2UgKElOVF9NQVggLyBIWikgfHxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zMzI4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzozMzI5OiNpZmRlZiBDT05GSUdfSVBfVlNfUFJPVE9fVENQXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTMzMzAtXFx0aWYgKHUtXFx1MDAzZXRjcF90aW1lb3V0KSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MzY5MD1fX2lwX3ZzX2dldF90aW1lb3V0cyhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3RpbWVvdXRfdXNlciAqdSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzY5MS17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM2OTI6I2lmIGRlZmluZWQoQ09ORklHX0lQX1ZTX1BST1RPX1RDUCkgfHwgZGVmaW5lZChDT05GSUdfSVBfVlNfUFJPVE9fVURQKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNjkzLVxcdHN0cnVjdCBpcF92c19wcm90b19kYXRhICpwZDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNjk3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzozNjk4OiNpZmRlZiBDT05GSUdfSVBfVlNfUFJPVE9fVENQXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM2OTktXFx0cGQgPSBpcF92c19wcm90b19kYXRhX2dldChpcHZzLCBJUFBST1RPX1RDUCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDc2Nj1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfZ2V0X2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ4MjMtXFx0XFx0X19pcF92c19nZXRfdGltZW91dHMoaXB2cywgXFx1MDAyNnQpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0ODI0OiNpZmRlZiBDT05GSUdfSVBfVlNfUFJPVE9fVENQXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ4MjUtXFx0XFx0aWYgKG5sYV9wdXRfdTMyKG1zZywgSVBWU19DTURfQVRUUl9USU1FT1VUX1RDUCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jPTI5NT1pbnQgX19uZXRfaW5pdCBpcF92c19wcm90b2NvbF9uZXRfaW5pdChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jLTI5OC1cXHRzdGF0aWMgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcm90b3NbXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYzoyOTk6I2lmZGVmIENPTkZJR19JUF9WU19QUk9UT19UQ1BcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYy0zMDAtICAgICAgICBcXHUwMDI2aXBfdnNfcHJvdG9jb2xfdGNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmM9MzQwPWludCBfX2luaXQgaXBfdnNfcHJvdG9jb2xfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMtMzQ5LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jOjM1MDojaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX1RDUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jLTM1MS1cXHRSRUdJU1RFUl9QUk9UT0NPTChcXHUwMDI2aXBfdnNfcHJvdG9jb2xfdGNwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29uZmlnPTM4PUNPTkZJR19JUF9WUz1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWc6Mzk6Q09ORklHX0lQX1ZTX1BST1RPX1RDUD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWctNDAtQ09ORklHX0lQX1ZTX1JSPW1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTg6MjI6MjEuNzczMjk0MTgzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3NDQwMjA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6XG5cbioqQW5hbHl6aW5nIElQVlMgUHJvdG9jb2wgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIGBDT05GSUdfSVBfVlNfUFJPVE9fVENQYCBhbmQgYENPTkZJR19JUF9WU19QUk9UT19VRFBgIGFzIGxlZ2l0aW1hdGUgY29uZmlndXJhdGlvbnMg4oCTIG5vdGhpbmcganVtcHMgb3V0IGFzIGltbWVkaWF0ZWx5IHdyb25nIHRoZXJlLiBOb3csIGhvbGQgb24gYSBzZWNvbmQuLi4gSSByZWNhbGwgdGhhdCBgQ09ORklHX0lQX1ZTX1BST1RPX1RDUGAgaXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24sIGFuZCBJJ20gcHJldHR5IHN1cmUgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gYSAqbG90KiBvZiBkZWZjb25maWdzIEkndmUgd29ya2VkIHdpdGguIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0LiBMZXQgbWUgcXVpY2tseSBnbyBsb29rIGF0IGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgdG8gY29uZmlybSBpZiBpdCBkZWZhdWx0cyB0byAneScgYXMgSSBzdXNwZWN0LiBUaGF0IHNob3VsZCBjbGFyaWZ5IGV2ZXJ5dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3ODUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMjoyNS4yNDc2OTg3MTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzMDMwOTU5NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTX1BST1RPX1RDUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTg6MjI6MjcuNTc4MDI2NzY4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyOTI1MDk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6XG5cbioqRGl2aW5nIGludG8gQ29uZmlndXJhdGlvbjogSVAgdnMuIFByb3RvIFRDUCoqXG5cblJpZ2h0LCBsZXQgbWUgc2VlLiBUaGF0IHN0cmluZyBpbW1lZGlhdGVseSB0aHJvd3MgdXAgYSBmbGFnLiBcImNvbmZpZ1wiIOKAkyB0aGF0IHRlbGxzIG1lIEknbSBsb29raW5nIGF0IGEgY29uZmlndXJhdGlvbiBmaWxlIG9yIHBhdGguIFRoZW4sIHRoZSB0YWIgc2VwYXJhdG9y4oCUdGhhdCdzIGludGVyZXN0aW5nLCBidXQgbm90IHVudXN1YWwgZm9yIGEga2V5LXZhbHVlIHN0cnVjdHVyZSwgYW5kIHRoZSByZXN0IGlzIGNsZWFybHkgdGhlIGtleS4gXCJJUFxcX1ZTXFxfUFJPVE9cXF9UQ1BcIi4uLiB5ZXAsIHRoaXMgcG9pbnRzIGRpcmVjdGx5IHRvIHNvbWV0aGluZyByZWxhdGVkIHRvIElQIFZpcnR1YWwgU2VydmVyIChJUFZTKSwgYW5kIHNwZWNpZmljYWxseSwgaG93IGl0J3MgaGFuZGxpbmcgVENQIHRyYWZmaWMuIEknbSBsaWtlbHkgZXhhbWluaW5nIGEgc2V0dGluZyB0aGF0IGRlZmluZXMgaG93IFRDUCB0cmFmZmljIGlzIHJvdXRlZCBvciBtYW5hZ2VkIGJ5IGFuIElQVlMgY29uZmlndXJhdGlvbi4gTWlnaHQgYmUgYSByb3V0aW5nIHBvbGljeSwgYSBoZWFsdGggY2hlY2sgc2V0dGluZyBmb3IgVENQIHNlcnZpY2VzLCBvciB0aGUgd2F5IFRDUCBjb25uZWN0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgY29udGV4dCBvZiBsb2FkIGJhbGFuY2luZy4gVGhpcyB0ZWxscyBtZSBhYm91dCB0aGUgdHlwZSBvZiB0cmFmZmljIGFuZCB3aGVyZSBpdCdzIGRpcmVjdGVkLiBJJ2xsIG5lZWQgdG8ga25vdyBtb3JlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBmaWxlIGludGVyYWN0cyB3aXRoIHRoZSBuZXR3b3JrIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA2NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjIyOjMxLjkwNzI4MDUwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk3MDQ2OTM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcuKklQX1ZTX1BST1RPX1RDUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03Nz1jb21tZW50IFxcXCJJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTc4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjc5OmNvbmZpZ1xcdElQX1ZTX1BST1RPX1RDUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIlRDUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMjozNC44Nzc3NTc4MDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzNzcxMDIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVBWUyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBJUFZTIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IHdpdGggdGhlIHNvdXJjZSBvZiB0cnV0aCwgYW5kIHRoYXQncyBnZW5lcmFsbHkgdGhlIEtjb25maWcgZmlsZS4gSSdsbCBuYXZpZ2F0ZSB0byBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIOKAkyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgSVBWUyBvcHRpb25zIGFyZSBwcmVzZW50ZWQgYW5kIGhhbmRsZWQgZHVyaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIGFyb3VuZCBsaW5lIDc5LiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIG9wdGlvbnMgYXJlIGRlY2xhcmVkLiBJIGV4cGVjdCB0byBmaW5kIHRoaW5ncyBsaWtlIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgb3B0aW9ucy4gVGhpcyBtaWdodCByZXZlYWwgc29tZSBpbnRlcmVzdGluZyBxdWlya3Mgb3IgaW1wbGVtZW50YXRpb24gZGVjaXNpb25zIHRoYXQgSSBoYXZlbid0IGNvbnNpZGVyZWQgcHJldmlvdXNseSwgd2hpY2ggY291bGQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEknbSBsb29raW5nIGF0LiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjIyOjM3LjkxNTQ3MTQ4OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0XFx0ICBlYWNoIGhhc2ggZW50cnkgdXNlcyA4IGJ5dGVzLCBzbyB5b3UgY2FuIGVzdGltYXRlIGhvdyBtdWNoIG1lbW9yeSBpc1xcbiAgNzE6XFx0XFx0ICBuZWVkZWQgZm9yIHlvdXIgYm94LlxcbiAgNzI6XFx0XFxuICA3MzpcXHRcXHQgIFlvdSBjYW4gb3ZlcndyaXRlIHRoaXMgbnVtYmVyIHNldHRpbmcgY29ubl90YWJfYml0cyBtb2R1bGUgcGFyYW1ldGVyXFxuICA3NDpcXHRcXHQgIG9yIGJ5IGFwcGVuZGluZyBpcF92cy5jb25uX3RhYl9iaXRzPT8gdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgaWZcXG4gIDc1OlxcdFxcdCAgSVAgVlMgd2FzIGNvbXBpbGVkIGJ1aWx0LWluLlxcbiAgNzY6XFx0XFxuICA3NzpcXHRjb21tZW50IFxcXCJJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbiAgNzg6XFx0XFxuICA3OTpcXHRjb25maWdcXHRJUF9WU19QUk9UT19UQ1BcXG4gIDgwOlxcdFxcdGJvb2wgXFxcIlRDUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbiAgODE6XFx0XFx0aGVscFxcbiAgODI6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxvYWQgYmFsYW5jaW5nIFRDUCB0cmFuc3BvcnRcXG4gIDgzOlxcdFxcdCAgcHJvdG9jb2wuIFNheSBZIGlmIHVuc3VyZS5cXG4gIDg0OlxcdFxcbiAgODU6XFx0Y29uZmlnXFx0SVBfVlNfUFJPVE9fVURQXFxuICA4NjpcXHRcXHRib29sIFxcXCJVRFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4gIDg3OlxcdFxcdGhlbHBcXG4gIDg4OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBVRFAgdHJhbnNwb3J0XFxuICA4OTpcXHRcXHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXFxuICA5MDpcXHRcXG4gIDkxOlxcdGNvbmZpZ1xcdElQX1ZTX1BST1RPX0FIX0VTUFxcbiAgOTI6XFx0XFx0ZGVmX2Jvb2wgSVBfVlNfUFJPVE9fRVNQIHx8IElQX1ZTX1BST1RPX0FIXFxuICA5MzpcXHRcXG4gIDk0OlxcdGNvbmZpZ1xcdElQX1ZTX1BST1RPX0VTUFxcbiAgOTU6XFx0XFx0Ym9vbCBcXFwiRVNQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuICA5NjpcXHRcXHRoZWxwXFxuICA5NzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgRVNQIChFbmNhcHN1bGF0aW9uXFxuICA5ODpcXHRcXHQgIFNlY3VyaXR5IFBheWxvYWQpIHRyYW5zcG9ydCBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLlxcbiAgOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjIyOjM3LjkxNTYwOTMyOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzkyMzYxNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBWUyBDaGVja3N1bSBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBhcmUgZXhwZWN0ZWQ7IHRob3NlIGFyZSBwcmV0dHkgc3RhbmRhcmQuIE5vdywgdGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBtb2RpZnlpbmcgdGhlIGNoZWNrc3VtIGhhbmRsaW5nIHdpdGhpbiBJUFZTLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AgYW5kIHRoZW4gbGV2ZXJhZ2VzIGl0IGFjcm9zcyBgaXBfdnNfY29yZS5jYCwgYGlwX3ZzX3Byb3RvX3RjcC5jYCwgYW5kIGBpcF92c19wcm90b191ZHAuY2AuIFRoYXQncyB0aGUgY29yZSBmb2N1cywgdGhhdCBmdW5jdGlvbi5cblxuQmV5b25kIHRoYXQsIEknbSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byBgaXBfdnNfaW5faWNtcF92NmAsIGBpcF92c19pbl9pY21wYCwgYW5kIGBoYW5kbGVfcmVzcG9uc2VfaWNtcGAsIHdoaWNoIGFyZSBsaWtlbHkgcmVsYXRlZCB0byBJQ01QIHRyYWZmaWMgaGFuZGxpbmcgaW4gcmVsYXRpb24gdG8gY2hlY2tzdW0gdmFsaWRhdGlvbi4gT2theSwgdGltZSB0byBkaXZlIGludG8gYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AgaXRzZWxmLiBMZXQncyBzdGFydCB3aXRoIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jYC5cblxuQWhhISBJdCdzIGEgbmV3IGZ1bmN0aW9uOyB0aGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljLiBJJ20gZm9jdXNpbmcgb24gdGhlIHN5bWJvbHMgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIGBpcF92c19pbl9pY21wX3Y2YCwgYGlwX3ZzX2luX2ljbXBgLCBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgLCBhbmQgYWxzbyBgdGNwX2NzdW1fY2hlY2tgIGFuZCBgdWRwX2NzdW1fY2hlY2tgLiBXYWl0IGEgbWludXRlLCBhcmVuJ3QgYHRjcF9jc3VtX2NoZWNrYCBhbmQgYHVkcF9jc3VtX2NoZWNrYCBkZWZpbmVkIGFzIHN0YXRpYyBmdW5jdGlvbnMgaW4gYGlwX3ZzX3Byb3RvX3RjcC5jYCBhbmQgYGlwX3ZzX3Byb3RvX3VkcC5jYD8gR290dGEgY29uZmlybSB0aGF0IHRoZXkncmUgc3RhdGljIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZWlyIHVzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNzcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMjo0My4zMDc5NzM3NDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzU3ODY4NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2NzdW1fY2hlY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTMwPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MzE6dGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0zMi1cXHQgICAgICAgdW5zaWduZWQgaW50IHRjcGhvZmYpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTE0Nz10Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMTY4LVxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzoxNjk6XFx0XFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xNzAtXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9MjI1PXRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0yNDYtXFx0XFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjI0NzpcXHRcXHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdGNwaG9mZikpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTI0OC1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0zMDM9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzozMDQ6dGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0zMDUtXFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMjo0NS4zODM3NzQxOTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0NDcwNDkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja3N1bSBWZXJpZmljYXRpb24gVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgdGhlc2UgZWxlbWVudHMgYXJlIGluZGVlZCBzdGF0aWMuIFRoZXJlZm9yZSwgdGhlIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBzaG91bGQgY2VudGVyIGFyb3VuZCB0aGVzZSBrZXkgc3ltYm9sczogYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIGBpcF92c19pbl9pY21wX3Y2YCwgYGlwX3ZzX2luX2ljbXBgLCBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgLCBgdGNwX2NzdW1fY2hlY2tgLCBhbmQgYHVkcF9jc3VtX2NoZWNrYC4gSSB3YW50IHRvIGRyaWxsIGRvd24gc3BlY2lmaWNhbGx5IG9uIGB1ZHBfY3N1bV9jaGVja2Agbm93IHRvIGVuc3VyZSBwcm9wZXIgdmFsaWRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMDAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMjo0OC4xMjg0ODExODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTgyOTY3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRwX2NzdW1fY2hlY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTI2PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6Mjc6dWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0yOC1cXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTEzNj11ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTU3LVxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzoxNTg6XFx0XFx0aWYgKCF1ZHBfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIHVkcGhvZmYpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0xNTktXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MjE5PXVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0yNDAtXFx0XFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjI0MTpcXHRcXHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTI0Mi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYz0yOTk9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzozMDA6dWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0zMDEtXFx0ICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMjo0OS45ODY3ODM2OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODU1NDAxNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKklQVlMgQ2hlY2tzdW0gVmFsaWRhdGlvbiBQYXRjaCBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBjb25maWdzLiBXZSdyZSBsb29raW5nIGF0IGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYElQX1ZTX1BST1RPX1RDUGAsIGFuZCBgSVBfVlNfUFJPVE9fVURQYC4gV2hpbGUgYElQX1ZTX1BST1RPX1RDUGAgYW5kIGBJUF9WU19QUk9UT19VRFBgIGFyZSBvZnRlbiBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdmFyaW91cyBkZWZjb25maWdzLCBpdCdzIGdvb2QgcHJhY3RpY2UgdG8gZXhwbGljaXRseSBzcGVjaWZ5IHRoZW0gaGVyZSBmb3IgY2xhcml0eSBhbmQgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGRlZmluaXRlbHkgZW5hYmxlZC4gQWx3YXlzIGdvb2QgdG8gYmUgZXhwbGljaXQsIHJhdGhlciB0aGFuIGltcGxpY2l0LlxuXG5Ob3csIGxldCdzIHNlZSB3aGF0J3MgYmVpbmcgdG91Y2hlZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBpcF92c19jb3JlLmNgLCBgaXBfdnNfcHJvdG9fdGNwLmNgLCBhbmQgYGlwX3ZzX3Byb3RvX3VkcC5jYC4gT2theSwgc28gaXQncyBjb3JlIHRvIElQVlMgYW5kIGludm9sdmVzIHRoZSBUQ1AvVURQIHByb3RvY29sIGltcGxlbWVudGF0aW9ucy4gQSBxdWljayBjaGVjayB0byBzZWUgaWYgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AgaXMgZXhwb3J0ZWQuLi5Ob3BlLCBpdCdzIGludGVybmFsIHRvIHRoZSBtb2R1bGUuIE5vIHByb2JsZW0sIHRoYXQgZG9lc24ndCBjaGFuZ2UgYW55dGhpbmcsIGp1c3Qgbm90aW5nIHRoYXQgZm9yIGxhdGVyLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBhcmUgYWN0dWFsbHkgKm5lZWRlZCogaGVyZS4gQWgsIHllcywgdGhleSBhcmUsIGFzIHRoZSBpbXBsZW1lbnRhdGlvbnMgdXRpbGl6ZSBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCBmb3IgdGhlIFRDUCBhbmQgVURQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBwYXRocy4gQW5kIGBJUF9WU19JUFY2YCBpcywgb2YgY291cnNlLCBuZWNlc3NhcnkgYmVjYXVzZSBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCBkZWFscyB3aXRoIElQdjYgcGFydHMsIGFzIGRvZXMgYGlwX3ZzX2luX2ljbXBfdjZgLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvZGUgc25pcHBldDpcbmBgYGNcbmJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvLFxuXHRcdFx0XHQgaW50IG9mZnNldClcbmBgYFxuVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgcGF0Y2g6IGEgbmV3IGNoZWNrc3VtIHZhbGlkYXRpb24gZnVuY3Rpb24uIEl0J3MgYSBjb21tb24gZnVuY3Rpb24sIHdoaWNoIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gQW5kIHllcywgYWJzb2x1dGVseSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enouIENoZWNrc3VtIHZhbGlkYXRpb24gaXMgYSBjbGFzc2ljIGF0dGFjayB2ZWN0b3IsIGFuZCBhIHNoYXJlZCBmdW5jdGlvbiBsaWtlIHRoaXMgaXMgYW4gZXZlbiByaWNoZXIgdGFyZ2V0LlxuXG5Pa2F5LCB0aW1lIHRvIGZvcm11bGF0ZSB0aGUgcmVzcG9uc2UuXG5cbioqV29ydGhGdXp6aW5nOiB0cnVlKipcblxuKipFbmFibGVDb25maWdzOiBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGBJUF9WU19QUk9UT19UQ1BgLCBgSVBfVlNfUFJPVE9fVURQYCoqXG5cbioqRm9jdXNTeW1ib2xzOiBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCwgYGlwX3ZzX2luX2ljbXBfdjZgLCBgaXBfdnNfaW5faWNtcGAsIGBoYW5kbGVfcmVzcG9uc2VfaWNtcGAsIGB0Y3BfY3N1bV9jaGVja2AsIGB1ZHBfY3N1bV9jaGVja2AqKlxuXG4qKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gY2hlY2tzdW0gdmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgSVBWUyBhbmQgdXNlcyBpdCBhY3Jvc3MgVENQLCBVRFAsIGFuZCBJQ01QIHByb3RvY29scy4gSXQgYWxzbyBhZGRzIGNoZWNrc3VtIHZhbGlkYXRpb24gZm9yIGluY29taW5nIElDTVB2NiBwYWNrZXRzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjaGVja3N1bSB2YWxpZGF0aW9uIHBhdGhzIHRvIGVuc3VyZSB0aGV5IGNvcnJlY3RseSBoYW5kbGUgbWFsZm9ybWVkIHBhY2tldHMuIFNwZWNpZmljYWxseSwgdGhlIGNvbW1vbiBmdW5jdGlvbiBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbnMgaW4gZWFjaCBwcm90b2NvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNTMsIk91dHB1dFRva2VucyI6MTgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjIyOjU5Ljg0MjE4ODYwNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4NjY4NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfSVBWNlwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tcIixcbiAgICBcImlwX3ZzX2luX2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX2luX2ljbXBcIixcbiAgICBcImhhbmRsZV9yZXNwb25zZV9pY21wXCIsXG4gICAgXCJ0Y3BfY3N1bV9jaGVja1wiLFxuICAgIFwidWRwX2NzdW1fY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBjaGVja3N1bSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBJUFZTIGFuZCB1c2VzIGl0IGFjcm9zcyBUQ1AsIFVEUCwgYW5kIElDTVAgcHJvdG9jb2xzLiBJdCBhbHNvIGFkZHMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgaW5jb21pbmcgSUNNUHY2IHBhY2tldHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNoZWNrc3VtIHZhbGlkYXRpb24gcGF0aHMgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBtYWxmb3JtZWQgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfSVBWNlwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tcIixcbiAgICBcImlwX3ZzX2luX2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX2luX2ljbXBcIixcbiAgICBcImhhbmRsZV9yZXNwb25zZV9pY21wXCIsXG4gICAgXCJ0Y3BfY3N1bV9jaGVja1wiLFxuICAgIFwidWRwX2NzdW1fY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBjaGVja3N1bSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBJUFZTIGFuZCB1c2VzIGl0IGFjcm9zcyBUQ1AsIFVEUCwgYW5kIElDTVAgcHJvdG9jb2xzLiBJdCBhbHNvIGFkZHMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgaW5jb21pbmcgSUNNUHY2IHBhY2tldHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNoZWNrc3VtIHZhbGlkYXRpb24gcGF0aHMgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBtYWxmb3JtZWQgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow7gz4b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 18:04:35 +0000 UTC FinishedAt: 2026-07-10 18:23:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "24c4c88259464d38b35c3fbaecb68675de64137d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "24c4c88259464d38b35c3fbaecb68675de64137d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP" ], "series_id": "466d63c9-f425-47fe-8e44-d28efe77afcf" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_checksum_common_check", "ip_vs_in_icmp_v6", "ip_vs_in_icmp", "handle_response_icmp", "tcp_csum_check", "udp_csum_check" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayYjMzQ7LAogICAgJiMzNDtpcF92c19pbl9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX2luX2ljbXAmIzM0OywKICAgICYjMzQ7aGFuZGxlX3Jlc3BvbnNlX2ljbXAmIzM0OywKICAgICYjMzQ7dGNwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dWRwX2NzdW1fY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gY2hlY2tzdW0gdmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgSVBWUyBhbmQgdXNlcyBpdCBhY3Jvc3MgVENQLCBVRFAsIGFuZCBJQ01QIHByb3RvY29scy4gSXQgYWxzbyBhZGRzIGNoZWNrc3VtIHZhbGlkYXRpb24gZm9yIGluY29taW5nIElDTVB2NiBwYWNrZXRzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjaGVja3N1bSB2YWxpZGF0aW9uIHBhdGhzIHRvIGVuc3VyZSB0aGV5IGNvcnJlY3RseSBoYW5kbGUgbWFsZm9ybWVkIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyZDBlNDE2ZGM1ZTUwMDg3OWUxM2I3ZTQ4ODkxMTgxMTUyZjBmYTk1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMTg6MjE6NDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbmluZGV4IDQxN2ZmNTFmNjJmYzhlLi5jZDY1ZGQzYTRhZDFmNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbkBAIC0yMDY2LDggJiM0MzsyMDY2LDYgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcbiAjZW5kaWZcbiBcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmY0KF9fYmUzMiBvbGQsIF9fYmUzMiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4ge1xuIFx0X19iZTMyIGRpZmZbMl0gPSB7IH5vbGQsIG5ldyB9O1xuQEAgLTIwOTMsNiAmIzQzOzIwOTEsOSBAQCBzdGF0aWMgaW5saW5lIF9fd3N1bSBpcF92c19jaGVja19kaWZmMihfX2JlMTYgb2xkLCBfX2JlMTYgbmV3LCBfX3dzdW0gb2xkc3VtKVxuIFx0cmV0dXJuIGNzdW1fcGFydGlhbChkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7XG4gfVxuIFxuJiM0Mztib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90byxcbiYjNDM7XHRcdFx0XHQgaW50IG9mZnNldCk7XG4mIzQzO1xuIC8qIEZvcmdldCBjdXJyZW50IGNvbm50cmFjayAodW5jb25maXJtZWQpIGFuZCBhdHRhY2ggbm90cmFjayBlbnRyeSAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19ub3RyYWNrKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5pbmRleCAzNWNiZTgyMWMyNTk2Ny4uNmNhZTRlYTQ1ZDU1YWIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5AQCAtODY3LDExICYjNDM7ODY3LDU2IEBAIHN0YXRpYyBpbnQgc3lzY3RsX25hdF9pY21wX3NlbmQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpIHsgcmV0dXJuIDA7IH1cbiBcbiAjZW5kaWZcbiBcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG4mIzQzO3N0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG4ge1xuIFx0cmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQsIDApKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2sgLSB2YWxpZGF0ZSBjaGVja3N1bSBmb3IgVENQL1VEUC9JQ01QXG4mIzQzOyAqIEBhZjogQUZfSU5FVC9BRl9JTkVUNlxuJiM0MzsgKiBAc2tiOiBzb2NrZXQgYnVmZmVyXG4mIzQzOyAqIEBwcm90bzogSVBQUk9UT194eHhcbiYjNDM7ICogQG9mZnNldDogb2Zmc2V0IG9mIHByb3RvY29sIGhlYWRlclxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8sXG4mIzQzO1x0XHRcdFx0IGludCBvZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRfX3dzdW0gY3N1bTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKSB7XG4mIzQzO1x0XHRjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpIHtcbiYjNDM7XHRcdC8qIElQVlMgd29ya3MgYXQgSVAgbGF5ZXIsIHNvIHNrYi1cdTAwM2Vjc3VtIGNvdmVycyBkYXRhIGZyb21cbiYjNDM7XHRcdCAqIElQIGhlYWRlciwgc3RyaXAgaXQgdXAgdG8gdGhlIHByb3RvY29sIGhlYWRlclxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjc3VtID0gY3N1bV9zdWIoc2tiLVx1MDAzZWNzdW0sIHNrYl9jaGVja3N1bShza2IsIDAsIG9mZnNldCwgMCkpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MzsjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiYjNDM7XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbiYjNDM7XHRcdGlmIChjc3VtX2lwdjZfbWFnaWMoXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbiYjNDM7XHRcdFx0XHQgICAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbiYjNDM7XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIG9mZnNldCwgcHJvdG8sXG4mIzQzO1x0XHRcdFx0ICAgIGNzdW0pKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fSBlbHNlXG4mIzQzOyNlbmRpZlxuJiM0MztcdFx0aWYgKHByb3RvID09IElQUFJPVE9fSUNNUClcbiYjNDM7XHRcdFx0cmV0dXJuICFjc3VtX2ZvbGQoY3N1bSk7XG4mIzQzO1x0XHRlbHNlIGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbiYjNDM7XHRcdFx0XHRcdCAgIGlwX2hkcihza2IpLVx1MDAzZWRhZGRyLFxuJiM0MztcdFx0XHRcdFx0ICAgc2tiLVx1MDAzZWxlbiAtIG9mZnNldCwgcHJvdG8sXG4mIzQzO1x0XHRcdFx0XHQgICBjc3VtKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGVudW0gaXBfZGVmcmFnX3VzZXJzIGlwX3ZzX2RlZnJhZ191c2VyKHVuc2lnbmVkIGludCBob29rbnVtKVxuIHtcbiBcdGlmIChORl9JTkVUX0xPQ0FMX0lOID09IGhvb2tudW0pXG5AQCAtMTAzOSwxMiAmIzQzOzEwODQsMTMgQEAgc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHR1bnNpZ25lZCBpbnQgaG9va251bSlcbiB7XG4gXHR1bnNpZ25lZCBpbnQgdmVyZGljdCA9IE5GX0RST1A7XG4mIzQzO1x0aW50IGlwcm90byA9IGFmID09IEFGX0lORVQ2ID8gSVBQUk9UT19JQ01QVjYgOiBJUFBST1RPX0lDTVA7XG4gXG4gXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpXG4gXHRcdGdvdG8gYWZ0ZXJfbmF0O1xuIFxuIFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4tXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXHUwMDI2XHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xuJiM0MztcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGFmLCBza2IsIGlwcm90bywgaWhsKSkge1xuIFx0XHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXG4gXHRcdElQX1ZTX0RCR19CVUYoMSwgXCYjMzQ7Rm9yd2FyZCBJQ01QOiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcyFcXG5cJiMzNDssXG4gXHRcdFx0ICAgICAgSVBfVlNfREJHX0FERFIoYWYsIHNuZXQpKTtcbkBAIC0xODk5LDcgJiM0MzsxOTQ1LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0dmVyZGljdCA9IE5GX0RST1A7XG4gXG4gXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cbi1cdGlmICghc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSBcdTAwMjZcdTAwMjYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7XG4mIzQzO1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soQUZfSU5FVCwgc2tiLCBJUFBST1RPX0lDTVAsIGlobCkpIHtcbiBcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuIFx0XHRJUF9WU19EQkcoMSwgXCYjMzQ7SW5jb21pbmcgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNCFcXG5cJiMzNDssXG4gXHRcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuQEAgLTIwNjUsNiAmIzQzOzIxMTEsMTcgQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiYjNDM7XHR2ZXJkaWN0ID0gTkZfRFJPUDtcbiYjNDM7XG4mIzQzO1x0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4mIzQzO1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soQUZfSU5FVDYsIHNrYiwgSVBQUk9UT19JQ01QVjYsXG4mIzQzO1x0XHRcdFx0XHQgaXBoLVx1MDAzZWxlbikpIHtcbiYjNDM7XHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbiYjNDM7XHRcdElQX1ZTX0RCRygxLCBcJiMzNDtJbmNvbWluZyBJQ01QdjY6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTZjIVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIGRvIHRoZSBzdGF0aXN0aWNzIGFuZCBwdXQgaXQgYmFjayAqL1xuIFx0aXBfdnNfaW5fc3RhdHMoY3AsIHNrYik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXG5pbmRleCBmODZiNzYzZWZjYzRkYy4uZThlNmFjYWY4MzAwOGEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xuQEAgLTMwNCwzOSAmIzQzOzMwNCwxMCBAQCBzdGF0aWMgaW50XG4gdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKVxuIHtcbi1cdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0Y2FzZSBDSEVDS1NVTV9OT05FOlxuLVx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLCAwKTtcbi1cdFx0ZmFsbHRocm91Z2g7XG4tXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxuLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuLVx0XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdCAgICBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIHRjcGhvZmYsXG4tXHRcdFx0XHRcdCAgICBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4tXHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZVxuLSNlbmRpZlxuLVx0XHRcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLFxuLVx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCxcbi1cdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLFxuLVx0XHRcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbi1cdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdH1cbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xuLVx0XHRicmVhaztcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhhZiwgc2tiLCBJUFBST1RPX1RDUCwgdGNwaG9mZikpIHtcbiYjNDM7XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsIFwmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3JcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHR9XG4tXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXG5pbmRleCA1OGY5ZTI1NTkyN2UyZS4uNGQxZDFmYzIzYzJkYjYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xuQEAgLTMwNiw0MCAmIzQzOzMwNiwxMSBAQCB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRpZiAodWggPT0gTlVMTClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAodWgtXHUwMDNlY2hlY2sgIT0gMCkge1xuLVx0XHRzd2l0Y2ggKHNrYi1cdTAwM2VpcF9zdW1tZWQpIHtcbi1cdFx0Y2FzZSBDSEVDS1NVTV9OT05FOlxuLVx0XHRcdHNrYi1cdTAwM2Vjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdWRwaG9mZixcbi1cdFx0XHRcdFx0XHQgc2tiLVx1MDAzZWxlbiAtIHVkcGhvZmYsIDApO1xuLVx0XHRcdGZhbGx0aHJvdWdoO1xuLVx0XHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxuLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuLVx0XHRcdGlmIChhZiA9PSBBRl9JTkVUNikge1xuLVx0XHRcdFx0aWYgKGNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyLFxuLVx0XHRcdFx0XHRcdCAgICBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHRcdCAgICBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZixcbi1cdFx0XHRcdFx0XHQgICAgSVBQUk9UT19VRFAsXG4tXHRcdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLFxuLVx0XHRcdFx0XHRcdFx0IFwmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3JcJiMzNDspO1xuLVx0XHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHRcdH1cbi1cdFx0XHR9IGVsc2Vcbi0jZW5kaWZcbi1cdFx0XHRcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZixcbi1cdFx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCxcbi1cdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbi1cdFx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0XHR9XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0LyogTm8gbmVlZCB0byBjaGVja3N1bS4gKi9cbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuJiM0MztcdGlmICghdWgtXHUwMDNlY2hlY2spXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhhZiwgc2tiLCBJUFBST1RPX1VEUCwgdWRwaG9mZikpIHtcbiYjNDM7XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsIFwmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3JcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRyZXR1cm4gMTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfSVBWNiYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVURQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX2luX2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcmVzcG9uc2VfaWNtcCYjMzQ7LAogICAgJiMzNDt0Y3BfY3N1bV9jaGVjayYjMzQ7LAogICAgJiMzNDt1ZHBfY3N1bV9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBjaGVja3N1bSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBJUFZTIGFuZCB1c2VzIGl0IGFjcm9zcyBUQ1AsIFVEUCwgYW5kIElDTVAgcHJvdG9jb2xzLiBJdCBhbHNvIGFkZHMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgaW5jb21pbmcgSUNNUHY2IHBhY2tldHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNoZWNrc3VtIHZhbGlkYXRpb24gcGF0aHMgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBtYWxmb3JtZWQgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmQwZTQxNmRjNWU1MDA4NzllMTNiN2U0ODg5MTE4MTE1MmYwZmE5NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDE4OjIxOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKaW5kZXggNDE3ZmY1MWY2MmZjOGUuLmNkNjVkZDNhNGFkMWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTIwNjYsOCAmIzQzOzIwNjYsNiBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCSAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpOwogI2VuZGlmCiAKLV9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCk7Ci0KIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmY0KF9fYmUzMiBvbGQsIF9fYmUzMiBuZXcsIF9fd3N1bSBvbGRzdW0pCiB7CiAJX19iZTMyIGRpZmZbMl0gPSB7IH5vbGQsIG5ldyB9OwpAQCAtMjA5Myw2ICYjNDM7MjA5MSw5IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pCiAJcmV0dXJuIGNzdW1fcGFydGlhbChkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7CiB9CiAKJiM0Mztib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bywKJiM0MzsJCQkJIGludCBvZmZzZXQpOwomIzQzOwogLyogRm9yZ2V0IGN1cnJlbnQgY29ubnRyYWNrICh1bmNvbmZpcm1lZCkgYW5kIGF0dGFjaCBub3RyYWNrIGVudHJ5ICovCiBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfbm90cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKaW5kZXggMzVjYmU4MjFjMjU5NjcuLjZjYWU0ZWE0NWQ1NWFiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKQEAgLTg2NywxMSAmIzQzOzg2Nyw1NiBAQCBzdGF0aWMgaW50IHN5c2N0bF9uYXRfaWNtcF9zZW5kKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKSB7IHJldHVybiAwOyB9CiAKICNlbmRpZgogCi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpCiYjNDM7c3RhdGljIF9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCkKIHsKIAlyZXR1cm4gY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgc2tiLSZndDtsZW4gLSBvZmZzZXQsIDApKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayAtIHZhbGlkYXRlIGNoZWNrc3VtIGZvciBUQ1AvVURQL0lDTVAKJiM0MzsgKiBAYWY6IEFGX0lORVQvQUZfSU5FVDYKJiM0MzsgKiBAc2tiOiBzb2NrZXQgYnVmZmVyCiYjNDM7ICogQHByb3RvOiBJUFBST1RPX3h4eAomIzQzOyAqIEBvZmZzZXQ6IG9mZnNldCBvZiBwcm90b2NvbCBoZWFkZXIKJiM0MzsgKi8KJiM0Mztib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bywKJiM0MzsJCQkJIGludCBvZmZzZXQpCiYjNDM7ewomIzQzOwlfX3dzdW0gY3N1bTsKJiM0MzsKJiM0MzsJaWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKHNrYi0mZ3Q7aXBfc3VtbWVkID09IENIRUNLU1VNX05PTkUpIHsKJiM0MzsJCWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0mZ3Q7bGVuIC0gb2Zmc2V0LCAwKTsKJiM0MzsJfSBlbHNlIGlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSkgewomIzQzOwkJLyogSVBWUyB3b3JrcyBhdCBJUCBsYXllciwgc28gc2tiLSZndDtjc3VtIGNvdmVycyBkYXRhIGZyb20KJiM0MzsJCSAqIElQIGhlYWRlciwgc3RyaXAgaXQgdXAgdG8gdGhlIHByb3RvY29sIGhlYWRlcgomIzQzOwkJICovCiYjNDM7CQljc3VtID0gY3N1bV9zdWIoc2tiLSZndDtjc3VtLCBza2JfY2hlY2tzdW0oc2tiLCAwLCBvZmZzZXQsIDApKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOyNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgomIzQzOwlpZiAoYWYgPT0gQUZfSU5FVDYpIHsKJiM0MzsJCWlmIChjc3VtX2lwdjZfbWFnaWMoJmFtcDtpcHY2X2hkcihza2IpLSZndDtzYWRkciwKJiM0MzsJCQkJICAgICZhbXA7aXB2Nl9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCiYjNDM7CQkJCSAgICBza2ItJmd0O2xlbiAtIG9mZnNldCwgcHJvdG8sCiYjNDM7CQkJCSAgICBjc3VtKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0gZWxzZQomIzQzOyNlbmRpZgomIzQzOwkJaWYgKHByb3RvID09IElQUFJPVE9fSUNNUCkKJiM0MzsJCQlyZXR1cm4gIWNzdW1fZm9sZChjc3VtKTsKJiM0MzsJCWVsc2UgaWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLSZndDtzYWRkciwKJiM0MzsJCQkJCSAgIGlwX2hkcihza2IpLSZndDtkYWRkciwKJiM0MzsJCQkJCSAgIHNrYi0mZ3Q7bGVuIC0gb2Zmc2V0LCBwcm90bywKJiM0MzsJCQkJCSAgIGNzdW0pKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBlbnVtIGlwX2RlZnJhZ191c2VycyBpcF92c19kZWZyYWdfdXNlcih1bnNpZ25lZCBpbnQgaG9va251bSkKIHsKIAlpZiAoTkZfSU5FVF9MT0NBTF9JTiA9PSBob29rbnVtKQpAQCAtMTAzOSwxMiAmIzQzOzEwODQsMTMgQEAgc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJdW5zaWduZWQgaW50IGhvb2tudW0pCiB7CiAJdW5zaWduZWQgaW50IHZlcmRpY3QgPSBORl9EUk9QOwomIzQzOwlpbnQgaXByb3RvID0gYWYgPT0gQUZfSU5FVDYgPyBJUFBST1RPX0lDTVBWNiA6IElQUFJPVE9fSUNNUDsKIAogCWlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkKIAkJZ290byBhZnRlcl9uYXQ7CiAKIAkvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi8KLQlpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgJmFtcDsmYW1wOyBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHsKJiM0MzsJaWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soYWYsIHNrYiwgaXByb3RvLCBpaGwpKSB7CiAJCS8qIEZhaWxlZCBjaGVja3N1bSEgKi8KIAkJSVBfVlNfREJHX0JVRigxLCAmIzM0O0ZvcndhcmQgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXMhXG4mIzM0OywKIAkJCSAgICAgIElQX1ZTX0RCR19BRERSKGFmLCBzbmV0KSk7CkBAIC0xODk5LDcgJiM0MzsxOTQ1LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAogCXZlcmRpY3QgPSBORl9EUk9QOwogCiAJLyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovCi0JaWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpICZhbXA7JmFtcDsgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7CiYjNDM7CWlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKEFGX0lORVQsIHNrYiwgSVBQUk9UT19JQ01QLCBpaGwpKSB7CiAJCS8qIEZhaWxlZCBjaGVja3N1bSEgKi8KIAkJSVBfVlNfREJHKDEsICYjMzQ7SW5jb21pbmcgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNCFcbiYjMzQ7LAogCQkJICAmYW1wO2lwaC0mZ3Q7c2FkZHIpOwpAQCAtMjA2NSw2ICYjNDM7MjExMSwxNyBAQCBzdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwl2ZXJkaWN0ID0gTkZfRFJPUDsKJiM0MzsKJiM0MzsJLyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovCiYjNDM7CWlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKEFGX0lORVQ2LCBza2IsIElQUFJPVE9fSUNNUFY2LAomIzQzOwkJCQkJIGlwaC0mZ3Q7bGVuKSkgewomIzQzOwkJLyogRmFpbGVkIGNoZWNrc3VtISAqLwomIzQzOwkJSVBfVlNfREJHKDEsICYjMzQ7SW5jb21pbmcgSUNNUHY2OiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk2YyFcbiYjMzQ7LAomIzQzOwkJCSAgJmFtcDtpcGgtJmd0O3NhZGRyKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiAJLyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovCiAJaXBfdnNfaW5fc3RhdHMoY3AsIHNrYik7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYwppbmRleCBmODZiNzYzZWZjYzRkYy4uZThlNmFjYWY4MzAwOGEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKQEAgLTMwNCwzOSAmIzQzOzMwNCwxMCBAQCBzdGF0aWMgaW50CiB0Y3BfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKQogewotCXN3aXRjaCAoc2tiLSZndDtpcF9zdW1tZWQpIHsKLQljYXNlIENIRUNLU1VNX05PTkU6Ci0JCXNrYi0mZ3Q7Y3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi0mZ3Q7bGVuIC0gdGNwaG9mZiwgMCk7Ci0JCWZhbGx0aHJvdWdoOwotCWNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6Ci0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKLQkJaWYgKGFmID09IEFGX0lORVQ2KSB7Ci0JCQlpZiAoY3N1bV9pcHY2X21hZ2ljKCZhbXA7aXB2Nl9oZHIoc2tiKS0mZ3Q7c2FkZHIsCi0JCQkJCSAgICAmYW1wO2lwdjZfaGRyKHNrYiktJmd0O2RhZGRyLAotCQkJCQkgICAgc2tiLSZndDtsZW4gLSB0Y3Bob2ZmLAotCQkJCQkgICAgSVBQUk9UT19UQ1AsCi0JCQkJCSAgICBza2ItJmd0O2NzdW0pKSB7Ci0JCQkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCwKLQkJCQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCX0gZWxzZQotI2VuZGlmCi0JCQlpZiAoY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktJmd0O3NhZGRyLAotCQkJCQkgICAgICBpcF9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCi0JCQkJCSAgICAgIHNrYi0mZ3Q7bGVuIC0gdGNwaG9mZiwKLQkJCQkJICAgICAgaXBfaGRyKHNrYiktJmd0O3Byb3RvY29sLAotCQkJCQkgICAgICBza2ItJmd0O2NzdW0pKSB7Ci0JCQkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCwKLQkJCQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovCi0JCWJyZWFrOwomIzQzOwlpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhhZiwgc2tiLCBJUFBST1RPX1RDUCwgdGNwaG9mZikpIHsKJiM0MzsJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwogCX0KLQogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKaW5kZXggNThmOWUyNTU5MjdlMmUuLjRkMWQxZmMyM2MyZGI2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jCkBAIC0zMDYsNDAgJiM0MzszMDYsMTEgQEAgdWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCWlmICh1aCA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCWlmICh1aC0mZ3Q7Y2hlY2sgIT0gMCkgewotCQlzd2l0Y2ggKHNrYi0mZ3Q7aXBfc3VtbWVkKSB7Ci0JCWNhc2UgQ0hFQ0tTVU1fTk9ORToKLQkJCXNrYi0mZ3Q7Y3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHVkcGhvZmYsCi0JCQkJCQkgc2tiLSZndDtsZW4gLSB1ZHBob2ZmLCAwKTsKLQkJCWZhbGx0aHJvdWdoOwotCQljYXNlIENIRUNLU1VNX0NPTVBMRVRFOgotI2lmZGVmIENPTkZJR19JUF9WU19JUFY2Ci0JCQlpZiAoYWYgPT0gQUZfSU5FVDYpIHsKLQkJCQlpZiAoY3N1bV9pcHY2X21hZ2ljKCZhbXA7aXB2Nl9oZHIoc2tiKS0mZ3Q7c2FkZHIsCi0JCQkJCQkgICAgJmFtcDtpcHY2X2hkcihza2IpLSZndDtkYWRkciwKLQkJCQkJCSAgICBza2ItJmd0O2xlbiAtIHVkcGhvZmYsCi0JCQkJCQkgICAgSVBQUk9UT19VRFAsCi0JCQkJCQkgICAgc2tiLSZndDtjc3VtKSkgewotCQkJCQlJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLAotCQkJCQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7Ci0JCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCX0gZWxzZQotI2VuZGlmCi0JCQkJaWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLSZndDtzYWRkciwKLQkJCQkJCSAgICAgIGlwX2hkcihza2IpLSZndDtkYWRkciwKLQkJCQkJCSAgICAgIHNrYi0mZ3Q7bGVuIC0gdWRwaG9mZiwKLQkJCQkJCSAgICAgIGlwX2hkcihza2IpLSZndDtwcm90b2NvbCwKLQkJCQkJCSAgICAgIHNrYi0mZ3Q7Y3N1bSkpIHsKLQkJCQkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCwKLQkJCQkJCQkgJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwotCQkJCQlyZXR1cm4gMDsKLQkJCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovCi0JCQlicmVhazsKLQkJfQomIzQzOwlpZiAoIXVoLSZndDtjaGVjaykKJiM0MzsJCXJldHVybiAxOwomIzQzOwlpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhhZiwgc2tiLCBJUFBST1RPX1VEUCwgdWRwaG9mZikpIHsKJiM0MzsJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDczNQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgQ2hlY2tzdW0gVmFsaWRhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgSVBWUyBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgdW5pZnlpbmcgdGhlIGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMuIFRoZXkmIzM5O3ZlIGludHJvZHVjZWQgdGhpcyBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCBmdW5jdGlvbiwgd2hpY2ggaXMgYmVpbmcgY2FsbGVkIGluIGBpcF92c19jb3JlLmNgLCBgaXBfdnNfcHJvdG9fdGNwLmNgLCBhbmQgYGlwX3ZzX3Byb3RvX3VkcC5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIG1vdmUgdG93YXJkcyBhIG1vcmUgY29uc2lzdGVudCBhcHByb2FjaCB0byBoYW5kbGluZyBjaGVja3N1bXMgYWNyb3NzIFRDUCwgVURQLCBhbmQgSUNNUCB3aXRoaW4gdGhlIElQVlMgZnJhbWV3b3JrLiBUaGUgYWRkaXRpb24gb2YgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgaW5jb21pbmcgSUNNUHY2IHBhY2tldHMgaW4gYGlwX3ZzX2luX2ljbXBfdjZgIGlzIGFsc28gc29tZXRoaW5nIHRvIG1ha2Ugbm90ZSBvZi4KCk5vdywgYmVmb3JlIEkgZGlnIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgSVBWUyBpcyBldmVuIGF2YWlsYWJsZSBhbmQgY29ycmVjdGx5IGNvbmZpZ3VyZWQgaW4gdGhlIHRlc3Rpbmcgc2V0dXAuIEkga25vdyBpdCYjMzk7cyBwYXJ0IG9mIG5ldGZpbHRlciwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUga2VybmVsIGNvbmZpZ3MgYXJlIHNldC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3IgYENPTkZJR19JUF9WU2AsIGBDT05GSUdfSVBfVlNfSVBWNmAsIGBDT05GSUdfSVBfVlNfUFJPVE9fVENQYCwgYW5kIGBDT05GSUdfSVBfVlNfUFJPVE9fVURQYC4KCk9rYXksIG5leHQgSSYjMzk7bGwgc2VhcmNoIHRoZSB0cmVlIGZvciBjYWxscyB0byBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgZXhhY3QgdXNhZ2UgY29udGV4dCwgZmluZCBhbGwgdGhlIGNvZGUgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaCwgYW5kIGhvdyBpdCBpcyBiZWluZyB1c2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byByZWFsbHkgYXNzZXNzIHRoZSBpbXBsaWNhdGlvbnMgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcF92cy5oPTIwODc9c3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjIoX19iZTE2IG9sZCwgX19iZTE2IG5ldywgX193c3VtIG9sZHN1bSlcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTIwOTMtXG5pbmNsdWRlL25ldC9pcF92cy5oOjIwOTQ6Ym9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8sXG5pbmNsdWRlL25ldC9pcF92cy5oLTIwOTUtXHRcdFx0XHQgaW50IG9mZnNldCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz04NzA9c3RhdGljIF9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTg3NS0vKipcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6ODc2OiAqIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayAtIHZhbGlkYXRlIGNoZWNrc3VtIGZvciBUQ1AvVURQL0lDTVBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtODc3LSAqIEBhZjogQUZfSU5FVC9BRl9JTkVUNlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtODgxLSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo4ODI6Ym9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTg4My1cdFx0XHRcdCBpbnQgb2Zmc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTA3OT1zdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEwOTItXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTA5MzpcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGFmLCBza2IsIGlwcm90bywgaWhsKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xMDk0LVx0XHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xODAyPWlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5NDctXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTk0ODpcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKEFGX0lORVQsIHNrYiwgSVBQUk9UT19JQ01QLCBpaGwpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5NDktXHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIwMzQ9c3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjExNi1cdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTE3Olx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soQUZfSU5FVDYsIHNrYiwgSVBQUk9UT19JQ01QVjYsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxMTgtXHRcdFx0XHRcdCBpcGgtXHUwMDNlbGVuKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0zMDQ9dGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0zMDYte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjMwNzpcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGFmLCBza2IsIElQUFJPVE9fVENQLCB0Y3Bob2ZmKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTMwOC1cdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCwgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTMwMD11ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTMxMC1cdFx0cmV0dXJuIDE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MzExOlx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soYWYsIHNrYiwgSVBQUk9UT19VRFAsIHVkcGhvZmYpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMzEyLVx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTIzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNrc3VtIFZhbGlkYXRpb24gaW4gSVBWUzogQSBRdWljayBSZXZpZXcqKgoKQWxyaWdodCwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc2hhcmVkIGNoZWNrc3VtIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIElQVlMuIFNtYXJ0IG1vdmUsIGNlbnRyYWxpemluZyB0aGF0IGFuZCBwcm9tb3RpbmcgcmV1c2FiaWxpdHkuIEl0JiMzOTtzIHVzZWQgaW4gYSBmZXcgcGxhY2VzLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSYjMzk7ZCBleHBlY3QuIEZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIGJhc2VkIG9uIHRoZSBub3RlcywgaXQgc2VlbXMgc29saWQ7IGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUuCgpOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQgY29uZmlncyBhcmUgbmVlZGVkPyBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGBJUF9WU19QUk9UT19UQ1BgLCBhbmQgYElQX1ZTX1BST1RPX1VEUGAgYXJlIG1lbnRpb25lZC4gSG1tLCBiZWZvcmUgSSBnZXQgdG9vIGZhciBpbnRvIHJldmlld2luZyB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIFRDUCBhbmQgVURQIHByb3RvY29sIG9wdGlvbnMgYXJlIGFjdHVhbGx5IHByZXNlbnQgYW5kIHdlbGwtZGVmaW5lZCBpbiB0aGUgcmVsZXZhbnQgY29uZmlnIGZpbGVzLiBCZXR0ZXIgdG8gdmVyaWZ5IGFzc3VtcHRpb25zIHVwZnJvbnQuIEdvdHRhIG1ha2Ugc3VyZSB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LiBPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2suLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0yNTE9Q09ORklHX0lQX1ZTX0lQVjY9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzoyNTI6Q09ORklHX0lQX1ZTX1BST1RPX1RDUD15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTI1My1DT05GSUdfSVBfVlNfUFJPVE9fVURQPXlcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTI2Nz1DT05GSUdfSVBfVlNfSVBWNj15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjI2ODpDT05GSUdfSVBfVlNfUFJPVE9fVENQPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctMjY5LUNPTkZJR19JUF9WU19QUk9UT19VRFA9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWc9Njc9Q09ORklHX0lQX1ZTX0lQVjY9eVxuYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZzo2ODpDT05GSUdfSVBfVlNfUFJPVE9fVENQPXlcbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWctNjktQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWc9MTA3PUNPTkZJR19JUF9WU19JUFY2PXlcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnOjEwODpDT05GSUdfSVBfVlNfUFJPVE9fVENQPXlcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnLTEwOS1DT05GSUdfSVBfVlNfUFJPVE9fVURQPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWc9MTA3PUNPTkZJR19JUF9WU19JUFY2PXlcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZzoxMDg6Q09ORklHX0lQX1ZTX1BST1RPX1RDUD15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWctMTA5LUNPTkZJR19JUF9WU19QUk9UT19VRFA9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc9MTExPUNPTkZJR19JUF9WU19JUFY2PXlcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc6MTEyOkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZy0xMTMtQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnPTEwOD1DT05GSUdfSVBfVlNfSVBWNj15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWc6MTA5OkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnLTExMC1DT05GSUdfSVBfVlNfUFJPVE9fVURQPXlcbi0tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTc0PUNPTkZJR19JUF9WUz1tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnOjc1OkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZy03Ni1DT05GSUdfSVBfVlNfUFJPVE9fVURQPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MzEzPUNPTkZJR19JUF9WUz1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MzE0OkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTMxNS1DT05GSUdfSVBfVlNfUFJPVE9fVURQPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9MzA0PUNPTkZJR19JUF9WUz1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MzA1OkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTMwNi1DT05GSUdfSVBfVlNfUFJPVE9fVURQPXlcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTExNDg9c3RydWN0IG5ldG5zX2lwdnMge1xuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTE2Mi1cdC8qIGlwX3ZzX3Byb3RvX3RjcCAqL1xuaW5jbHVkZS9uZXQvaXBfdnMuaDoxMTYzOiNpZmRlZiBDT05GSUdfSVBfVlNfUFJPVE9fVENQXG5pbmNsdWRlL25ldC9pcF92cy5oLTExNjQtXHQjZGVmaW5lXHRUQ1BfQVBQX1RBQl9CSVRTXHQ0XG4tLVxuaW5jbHVkZS9uZXQvaXBfdnMuaD0yMjAyPWlwX3ZzX2Rlc3RfY29ubl9vdmVyaGVhZChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTIyMTMtXG5pbmNsdWRlL25ldC9pcF92cy5oOjIyMTQ6I2lmZGVmIENPTkZJR19JUF9WU19QUk9UT19UQ1BcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMjIxNS1JTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKGludFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTc3PWNvbW1lbnQgXCYjMzQ7SVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNzgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo3OTpjb25maWdcdElQX1ZTX1BST1RPX1RDUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctODAtXHRib29sIFwmIzM0O1RDUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzIxPWNvbmZpZ1x0SVBfVlNfRlRQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjItXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgaGVscGVyXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1RDUCBcdTAwMjZcdTAwMjYgTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9OQVQgXHUwMDI2XHUwMDI2IFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjQtXHRcdE5GX0NPTk5UUkFDS19GVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU9Nz1pcF92c19wcm90by1vYmpzLXkgOj1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTo4OmlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fVENQKSAmIzQzOz0gaXBfdnNfcHJvdG9fdGNwLm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS05LWlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fVURQKSAmIzQzOz0gaXBfdnNfcHJvdG9fdWRwLm9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTYwPUVYUE9SVF9TWU1CT0woaXBfdnNfY29ubl9vdXRfZ2V0KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NjE6I2lmZGVmIENPTkZJR19JUF9WU19QUk9UT19UQ1Bcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNjItRVhQT1JUX1NZTUJPTChpcF92c190Y3BfY29ubl9saXN0ZW4pO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9Njg9RVhQT1JUX1NZTUJPTChpcF92c19uZXdfY29ubl9vdXQpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy02OS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzA6I2lmIGRlZmluZWQoQ09ORklHX0lQX1ZTX1BST1RPX1RDUCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzEtI2RlZmluZSBTTkFUX0NBTEwoZiwgLi4uKSBcXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03Mi1cdElORElSRUNUX0NBTExfMihmLCB0Y3Bfc25hdF9oYW5kbGVyLCB1ZHBfc25hdF9oYW5kbGVyLCBfX1ZBX0FSR1NfXylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzM6I2VsaWYgZGVmaW5lZChDT05GSUdfSVBfVlNfUFJPVE9fVENQKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03NC0jZGVmaW5lIFNOQVRfQ0FMTChmLCAuLi4pIElORElSRUNUX0NBTExfMShmLCB0Y3Bfc25hdF9oYW5kbGVyLCBfX1ZBX0FSR1NfXylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MzMwNj1zdGF0aWMgaW50IGlwX3ZzX3NldF90aW1lb3V0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfdGltZW91dF91c2VyICp1KVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTMzMDcte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjMzMDg6I2lmIGRlZmluZWQoQ09ORklHX0lQX1ZTX1BST1RPX1RDUCkgfHwgZGVmaW5lZChDT05GSUdfSVBfVlNfUFJPVE9fVURQKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTMzMDktXHRzdHJ1Y3QgaXBfdnNfcHJvdG9fZGF0YSAqcGQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTMzMTYtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzMxNzojaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX1RDUFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTMzMTgtXHRpZiAodS1cdTAwM2V0Y3BfdGltZW91dCBcdTAwM2MgMCB8fCB1LVx1MDAzZXRjcF90aW1lb3V0IFx1MDAzZSAoSU5UX01BWCAvIEhaKSB8fFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zMzI4LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjMzMjk6I2lmZGVmIENPTkZJR19JUF9WU19QUk9UT19UQ1Bcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zMzMwLVx0aWYgKHUtXHUwMDNldGNwX3RpbWVvdXQpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MzY5MD1fX2lwX3ZzX2dldF90aW1lb3V0cyhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3RpbWVvdXRfdXNlciAqdSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNjkxLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzozNjkyOiNpZiBkZWZpbmVkKENPTkZJR19JUF9WU19QUk9UT19UQ1ApIHx8IGRlZmluZWQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNjkzLVx0c3RydWN0IGlwX3ZzX3Byb3RvX2RhdGEgKnBkO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNjk3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM2OTg6I2lmZGVmIENPTkZJR19JUF9WU19QUk9UT19UQ1Bcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNjk5LVx0cGQgPSBpcF92c19wcm90b19kYXRhX2dldChpcHZzLCBJUFBST1RPX1RDUCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTQ3NjY9c3RhdGljIGludCBpcF92c19nZW5sX2dldF9jbWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDgyMy1cdFx0X19pcF92c19nZXRfdGltZW91dHMoaXB2cywgXHUwMDI2dCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDgyNDojaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX1RDUFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ4MjUtXHRcdGlmIChubGFfcHV0X3UzMihtc2csIElQVlNfQ01EX0FUVFJfVElNRU9VVF9UQ1AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmM9Mjk1PWludCBfX25ldF9pbml0IGlwX3ZzX3Byb3RvY29sX25ldF9pbml0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jLTI5OC1cdHN0YXRpYyBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnByb3Rvc1tdID0ge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmM6Mjk5OiNpZmRlZiBDT05GSUdfSVBfVlNfUFJPVE9fVENQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYy0zMDAtICAgICAgICBcdTAwMjZpcF92c19wcm90b2NvbF90Y3AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmM9MzQwPWludCBfX2luaXQgaXBfdnNfcHJvdG9jb2xfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jLTM0OS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jOjM1MDojaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX1RDUFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMtMzUxLVx0UkVHSVNURVJfUFJPVE9DT0woXHUwMDI2aXBfdnNfcHJvdG9jb2xfdGNwKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2NvbmZpZz0zOD1DT05GSUdfSVBfVlM9bVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWc6Mzk6Q09ORklHX0lQX1ZTX1BST1RPX1RDUD15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2NvbmZpZy00MC1DT05GSUdfSVBfVlNfUlI9bVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3ODUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOgoKKipBbmFseXppbmcgSVBWUyBQcm90b2NvbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIGBDT05GSUdfSVBfVlNfUFJPVE9fVENQYCBhbmQgYENPTkZJR19JUF9WU19QUk9UT19VRFBgIGFzIGxlZ2l0aW1hdGUgY29uZmlndXJhdGlvbnMg4oCTIG5vdGhpbmcganVtcHMgb3V0IGFzIGltbWVkaWF0ZWx5IHdyb25nIHRoZXJlLiBOb3csIGhvbGQgb24gYSBzZWNvbmQuLi4gSSByZWNhbGwgdGhhdCBgQ09ORklHX0lQX1ZTX1BST1RPX1RDUGAgaXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24sIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBhICpsb3QqIG9mIGRlZmNvbmZpZ3MgSSYjMzk7dmUgd29ya2VkIHdpdGguIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0LiBMZXQgbWUgcXVpY2tseSBnbyBsb29rIGF0IGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgdG8gY29uZmlybSBpZiBpdCBkZWZhdWx0cyB0byAmIzM5O3kmIzM5OyBhcyBJIHN1c3BlY3QuIFRoYXQgc2hvdWxkIGNsYXJpZnkgZXZlcnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WU19QUk9UT19UQ1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDY1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDoKCioqRGl2aW5nIGludG8gQ29uZmlndXJhdGlvbjogSVAgdnMuIFByb3RvIFRDUCoqCgpSaWdodCwgbGV0IG1lIHNlZS4gVGhhdCBzdHJpbmcgaW1tZWRpYXRlbHkgdGhyb3dzIHVwIGEgZmxhZy4gJiMzNDtjb25maWcmIzM0OyDigJMgdGhhdCB0ZWxscyBtZSBJJiMzOTttIGxvb2tpbmcgYXQgYSBjb25maWd1cmF0aW9uIGZpbGUgb3IgcGF0aC4gVGhlbiwgdGhlIHRhYiBzZXBhcmF0b3LigJR0aGF0JiMzOTtzIGludGVyZXN0aW5nLCBidXQgbm90IHVudXN1YWwgZm9yIGEga2V5LXZhbHVlIHN0cnVjdHVyZSwgYW5kIHRoZSByZXN0IGlzIGNsZWFybHkgdGhlIGtleS4gJiMzNDtJUFxfVlNcX1BST1RPXF9UQ1AmIzM0Oy4uLiB5ZXAsIHRoaXMgcG9pbnRzIGRpcmVjdGx5IHRvIHNvbWV0aGluZyByZWxhdGVkIHRvIElQIFZpcnR1YWwgU2VydmVyIChJUFZTKSwgYW5kIHNwZWNpZmljYWxseSwgaG93IGl0JiMzOTtzIGhhbmRsaW5nIFRDUCB0cmFmZmljLiBJJiMzOTttIGxpa2VseSBleGFtaW5pbmcgYSBzZXR0aW5nIHRoYXQgZGVmaW5lcyBob3cgVENQIHRyYWZmaWMgaXMgcm91dGVkIG9yIG1hbmFnZWQgYnkgYW4gSVBWUyBjb25maWd1cmF0aW9uLiBNaWdodCBiZSBhIHJvdXRpbmcgcG9saWN5LCBhIGhlYWx0aCBjaGVjayBzZXR0aW5nIGZvciBUQ1Agc2VydmljZXMsIG9yIHRoZSB3YXkgVENQIGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBjb250ZXh0IG9mIGxvYWQgYmFsYW5jaW5nLiBUaGlzIHRlbGxzIG1lIGFib3V0IHRoZSB0eXBlIG9mIHRyYWZmaWMgYW5kIHdoZXJlIGl0JiMzOTtzIGRpcmVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgbW9yZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gZmlsZSBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnLipJUF9WU19QUk9UT19UQ1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Nzc9Y29tbWVudCBcJiMzNDtJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy03OC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjc5OmNvbmZpZ1x0SVBfVlNfUFJPVE9fVENQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04MC1cdGJvb2wgXCYjMzQ7VENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUFZTIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBJUFZTIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBzb3VyY2Ugb2YgdHJ1dGgsIGFuZCB0aGF0JiMzOTtzIGdlbmVyYWxseSB0aGUgS2NvbmZpZyBmaWxlLiBJJiMzOTtsbCBuYXZpZ2F0ZSB0byBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIOKAkyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgSVBWUyBvcHRpb25zIGFyZSBwcmVzZW50ZWQgYW5kIGhhbmRsZWQgZHVyaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCBhcm91bmQgbGluZSA3OS4gVGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgb3B0aW9ucyBhcmUgZGVjbGFyZWQuIEkgZXhwZWN0IHRvIGZpbmQgdGhpbmdzIGxpa2UgdGhlIGRlZmF1bHQgYmVoYXZpb3IuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgb3B0aW9ucy4gVGhpcyBtaWdodCByZXZlYWwgc29tZSBpbnRlcmVzdGluZyBxdWlya3Mgb3IgaW1wbGVtZW50YXRpb24gZGVjaXNpb25zIHRoYXQgSSBoYXZlbiYjMzk7dCBjb25zaWRlcmVkIHByZXZpb3VzbHksIHdoaWNoIGNvdWxkIGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJiMzOTttIGxvb2tpbmcgYXQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHRcdCAgZWFjaCBoYXNoIGVudHJ5IHVzZXMgOCBieXRlcywgc28geW91IGNhbiBlc3RpbWF0ZSBob3cgbXVjaCBtZW1vcnkgaXNcbiAgNzE6XHRcdCAgbmVlZGVkIGZvciB5b3VyIGJveC5cbiAgNzI6XHRcbiAgNzM6XHRcdCAgWW91IGNhbiBvdmVyd3JpdGUgdGhpcyBudW1iZXIgc2V0dGluZyBjb25uX3RhYl9iaXRzIG1vZHVsZSBwYXJhbWV0ZXJcbiAgNzQ6XHRcdCAgb3IgYnkgYXBwZW5kaW5nIGlwX3ZzLmNvbm5fdGFiX2JpdHM9PyB0byB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBpZlxuICA3NTpcdFx0ICBJUCBWUyB3YXMgY29tcGlsZWQgYnVpbHQtaW4uXG4gIDc2Olx0XG4gIDc3Olx0Y29tbWVudCBcJiMzNDtJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4gIDc4Olx0XG4gIDc5Olx0Y29uZmlnXHRJUF9WU19QUk9UT19UQ1BcbiAgODA6XHRcdGJvb2wgXCYjMzQ7VENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbiAgODE6XHRcdGhlbHBcbiAgODI6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBUQ1AgdHJhbnNwb3J0XG4gIDgzOlx0XHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXG4gIDg0Olx0XG4gIDg1Olx0Y29uZmlnXHRJUF9WU19QUk9UT19VRFBcbiAgODY6XHRcdGJvb2wgXCYjMzQ7VURQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbiAgODc6XHRcdGhlbHBcbiAgODg6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBVRFAgdHJhbnNwb3J0XG4gIDg5Olx0XHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXG4gIDkwOlx0XG4gIDkxOlx0Y29uZmlnXHRJUF9WU19QUk9UT19BSF9FU1BcbiAgOTI6XHRcdGRlZl9ib29sIElQX1ZTX1BST1RPX0VTUCB8fCBJUF9WU19QUk9UT19BSFxuICA5MzpcdFxuICA5NDpcdGNvbmZpZ1x0SVBfVlNfUFJPVE9fRVNQXG4gIDk1Olx0XHRib29sIFwmIzM0O0VTUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4gIDk2Olx0XHRoZWxwXG4gIDk3Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgRVNQIChFbmNhcHN1bGF0aW9uXG4gIDk4Olx0XHQgIFNlY3VyaXR5IFBheWxvYWQpIHRyYW5zcG9ydCBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLlxuICA5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA3NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgQ2hlY2tzdW0gUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBhcmUgZXhwZWN0ZWQ7IHRob3NlIGFyZSBwcmV0dHkgc3RhbmRhcmQuIE5vdywgdGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBtb2RpZnlpbmcgdGhlIGNoZWNrc3VtIGhhbmRsaW5nIHdpdGhpbiBJUFZTLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AgYW5kIHRoZW4gbGV2ZXJhZ2VzIGl0IGFjcm9zcyBgaXBfdnNfY29yZS5jYCwgYGlwX3ZzX3Byb3RvX3RjcC5jYCwgYW5kIGBpcF92c19wcm90b191ZHAuY2AuIFRoYXQmIzM5O3MgdGhlIGNvcmUgZm9jdXMsIHRoYXQgZnVuY3Rpb24uCgpCZXlvbmQgdGhhdCwgSSYjMzk7bSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byBgaXBfdnNfaW5faWNtcF92NmAsIGBpcF92c19pbl9pY21wYCwgYW5kIGBoYW5kbGVfcmVzcG9uc2VfaWNtcGAsIHdoaWNoIGFyZSBsaWtlbHkgcmVsYXRlZCB0byBJQ01QIHRyYWZmaWMgaGFuZGxpbmcgaW4gcmVsYXRpb24gdG8gY2hlY2tzdW0gdmFsaWRhdGlvbi4gT2theSwgdGltZSB0byBkaXZlIGludG8gYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AgaXRzZWxmLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY2AuCgpBaGEhIEl0JiMzOTtzIGEgbmV3IGZ1bmN0aW9uOyB0aGF0JiMzOTtzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsb2dpYy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgc3ltYm9scyBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCwgYGlwX3ZzX2luX2ljbXBfdjZgLCBgaXBfdnNfaW5faWNtcGAsIGBoYW5kbGVfcmVzcG9uc2VfaWNtcGAsIGFuZCBhbHNvIGB0Y3BfY3N1bV9jaGVja2AgYW5kIGB1ZHBfY3N1bV9jaGVja2AuIFdhaXQgYSBtaW51dGUsIGFyZW4mIzM5O3QgYHRjcF9jc3VtX2NoZWNrYCBhbmQgYHVkcF9jc3VtX2NoZWNrYCBkZWZpbmVkIGFzIHN0YXRpYyBmdW5jdGlvbnMgaW4gYGlwX3ZzX3Byb3RvX3RjcC5jYCBhbmQgYGlwX3ZzX3Byb3RvX3VkcC5jYD8gR290dGEgY29uZmlybSB0aGF0IHRoZXkmIzM5O3JlIHN0YXRpYyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGVpciB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9jc3VtX2NoZWNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0zMD1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MzE6dGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTMyLVx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9MTQ3PXRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMTY4LVx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzoxNjk6XHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTE3MC1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9MjI1PXRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMjQ2LVx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzoyNDc6XHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTI0OC1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9MzAzPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzozMDQ6dGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTMwNS1cdCAgICAgICB1bnNpZ25lZCBpbnQgdGNwaG9mZilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMDAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja3N1bSBWZXJpZmljYXRpb24gVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGVzZSBlbGVtZW50cyBhcmUgaW5kZWVkIHN0YXRpYy4gVGhlcmVmb3JlLCB0aGUgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIHNob3VsZCBjZW50ZXIgYXJvdW5kIHRoZXNlIGtleSBzeW1ib2xzOiBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCwgYGlwX3ZzX2luX2ljbXBfdjZgLCBgaXBfdnNfaW5faWNtcGAsIGBoYW5kbGVfcmVzcG9uc2VfaWNtcGAsIGB0Y3BfY3N1bV9jaGVja2AsIGFuZCBgdWRwX2NzdW1fY2hlY2tgLiBJIHdhbnQgdG8gZHJpbGwgZG93biBzcGVjaWZpY2FsbHkgb24gYHVkcF9jc3VtX2NoZWNrYCBub3cgdG8gZW5zdXJlIHByb3BlciB2YWxpZGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHBfY3N1bV9jaGVjayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MjY9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjI3OnVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0yOC1cdCAgICAgICB1bnNpZ25lZCBpbnQgdWRwaG9mZik7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTEzNj11ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTE1Ny1cdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MTU4Olx0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB1ZHBob2ZmKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0xNTktXHRcdFx0cmV0dXJuIDA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTIxOT11ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTI0MC1cdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MjQxOlx0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB1ZHBob2ZmKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0yNDItXHRcdFx0cmV0dXJuIDA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTI5OT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MzAwOnVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0zMDEtXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDUzCgkJCQkJCQlvdXRwdXQ6IDE4MgoJCQkJCQkJdGhvdWdodHM6IDQ5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJUFZTIENoZWNrc3VtIFZhbGlkYXRpb24gUGF0Y2ggQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBjb25maWdzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGBJUF9WU19QUk9UT19UQ1BgLCBhbmQgYElQX1ZTX1BST1RPX1VEUGAuIFdoaWxlIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBhcmUgb2Z0ZW4gZW5hYmxlZCBieSBkZWZhdWx0IGluIHZhcmlvdXMgZGVmY29uZmlncywgaXQmIzM5O3MgZ29vZCBwcmFjdGljZSB0byBleHBsaWNpdGx5IHNwZWNpZnkgdGhlbSBoZXJlIGZvciBjbGFyaXR5IGFuZCB0byBtYWtlIHN1cmUgdGhleSBhcmUgZGVmaW5pdGVseSBlbmFibGVkLiBBbHdheXMgZ29vZCB0byBiZSBleHBsaWNpdCwgcmF0aGVyIHRoYW4gaW1wbGljaXQuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyB0b3VjaGVkLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGlwX3ZzX2NvcmUuY2AsIGBpcF92c19wcm90b190Y3AuY2AsIGFuZCBgaXBfdnNfcHJvdG9fdWRwLmNgLiBPa2F5LCBzbyBpdCYjMzk7cyBjb3JlIHRvIElQVlMgYW5kIGludm9sdmVzIHRoZSBUQ1AvVURQIHByb3RvY29sIGltcGxlbWVudGF0aW9ucy4gQSBxdWljayBjaGVjayB0byBzZWUgaWYgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AgaXMgZXhwb3J0ZWQuLi5Ob3BlLCBpdCYjMzk7cyBpbnRlcm5hbCB0byB0aGUgbW9kdWxlLiBObyBwcm9ibGVtLCB0aGF0IGRvZXNuJiMzOTt0IGNoYW5nZSBhbnl0aGluZywganVzdCBub3RpbmcgdGhhdCBmb3IgbGF0ZXIuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBhcmUgYWN0dWFsbHkgKm5lZWRlZCogaGVyZS4gQWgsIHllcywgdGhleSBhcmUsIGFzIHRoZSBpbXBsZW1lbnRhdGlvbnMgdXRpbGl6ZSBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCBmb3IgdGhlIFRDUCBhbmQgVURQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBwYXRocy4gQW5kIGBJUF9WU19JUFY2YCBpcywgb2YgY291cnNlLCBuZWNlc3NhcnkgYmVjYXVzZSBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCBkZWFscyB3aXRoIElQdjYgcGFydHMsIGFzIGRvZXMgYGlwX3ZzX2luX2ljbXBfdjZgLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY29kZSBzbmlwcGV0OgpgYGBjCmJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvLAoJCQkJIGludCBvZmZzZXQpCmBgYApUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBwYXRjaDogYSBuZXcgY2hlY2tzdW0gdmFsaWRhdGlvbiBmdW5jdGlvbi4gSXQmIzM5O3MgYSBjb21tb24gZnVuY3Rpb24sIHdoaWNoIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gQW5kIHllcywgYWJzb2x1dGVseSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enouIENoZWNrc3VtIHZhbGlkYXRpb24gaXMgYSBjbGFzc2ljIGF0dGFjayB2ZWN0b3IsIGFuZCBhIHNoYXJlZCBmdW5jdGlvbiBsaWtlIHRoaXMgaXMgYW4gZXZlbiByaWNoZXIgdGFyZ2V0LgoKT2theSwgdGltZSB0byBmb3JtdWxhdGUgdGhlIHJlc3BvbnNlLgoKKipXb3J0aEZ1enppbmc6IHRydWUqKgoKKipFbmFibGVDb25maWdzOiBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGBJUF9WU19QUk9UT19UQ1BgLCBgSVBfVlNfUFJPVE9fVURQYCoqCgoqKkZvY3VzU3ltYm9sczogYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIGBpcF92c19pbl9pY21wX3Y2YCwgYGlwX3ZzX2luX2ljbXBgLCBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgLCBgdGNwX2NzdW1fY2hlY2tgLCBgdWRwX2NzdW1fY2hlY2tgKioKCioqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBjaGVja3N1bSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBJUFZTIGFuZCB1c2VzIGl0IGFjcm9zcyBUQ1AsIFVEUCwgYW5kIElDTVAgcHJvdG9jb2xzLiBJdCBhbHNvIGFkZHMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgaW5jb21pbmcgSUNNUHY2IHBhY2tldHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNoZWNrc3VtIHZhbGlkYXRpb24gcGF0aHMgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBtYWxmb3JtZWQgcGFja2V0cy4gU3BlY2lmaWNhbGx5LCB0aGUgY29tbW9uIGZ1bmN0aW9uIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucyBpbiBlYWNoIHByb3RvY29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfSVBWNiYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVURQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX2luX2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcmVzcG9uc2VfaWNtcCYjMzQ7LAogICAgJiMzNDt0Y3BfY3N1bV9jaGVjayYjMzQ7LAogICAgJiMzNDt1ZHBfY3N1bV9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBjaGVja3N1bSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBJUFZTIGFuZCB1c2VzIGl0IGFjcm9zcyBUQ1AsIFVEUCwgYW5kIElDTVAgcHJvdG9jb2xzLiBJdCBhbHNvIGFkZHMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgaW5jb21pbmcgSUNNUHY2IHBhY2tldHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNoZWNrc3VtIHZhbGlkYXRpb24gcGF0aHMgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBtYWxmb3JtZWQgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfSVBWNiYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVURQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX2luX2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcmVzcG9uc2VfaWNtcCYjMzQ7LAogICAgJiMzNDt0Y3BfY3N1bV9jaGVjayYjMzQ7LAogICAgJiMzNDt1ZHBfY3N1bV9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBjaGVja3N1bSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBJUFZTIGFuZCB1c2VzIGl0IGFjcm9zcyBUQ1AsIFVEUCwgYW5kIElDTVAgcHJvdG9jb2xzLiBJdCBhbHNvIGFkZHMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgaW5jb21pbmcgSUNNUHY2IHBhY2tldHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNoZWNrc3VtIHZhbGlkYXRpb24gcGF0aHMgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBtYWxmb3JtZWQgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjIxOjQ4LjE1NjcwODEyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNzc0MTY3NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCIsXG4gICAgXCJJUF9WU19JUFY2XCIsXG4gICAgXCJJUF9WU19QUk9UT19UQ1BcIixcbiAgICBcIklQX1ZTX1BST1RPX1VEUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja1wiLFxuICAgIFwiaXBfdnNfaW5faWNtcF92NlwiLFxuICAgIFwiaXBfdnNfaW5faWNtcFwiLFxuICAgIFwiaGFuZGxlX3Jlc3BvbnNlX2ljbXBcIixcbiAgICBcInRjcF9jc3VtX2NoZWNrXCIsXG4gICAgXCJ1ZHBfY3N1bV9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29tbW9uIGNoZWNrc3VtIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIElQVlMgYW5kIHVzZXMgaXQgYWNyb3NzIFRDUCwgVURQLCBhbmQgSUNNUCBwcm90b2NvbHMuIEl0IGFsc28gYWRkcyBjaGVja3N1bSB2YWxpZGF0aW9uIGZvciBpbmNvbWluZyBJQ01QdjYgcGFja2V0cy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgY2hlY2tzdW0gdmFsaWRhdGlvbiBwYXRocyB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIG1hbGZvcm1lZCBwYWNrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMTo0OC4xNTY3MTMzMDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTI1MjE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJkMGU0MTZkYzVlNTAwODc5ZTEzYjdlNDg4OTExODExNTJmMGZhOTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMTg6MjE6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcXG5pbmRleCA0MTdmZjUxZjYyZmM4ZS4uY2Q2NWRkM2E0YWQxZjYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcXG5AQCAtMjA2Niw4ICsyMDY2LDYgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcXG4gI2VuZGlmXFxuIFxcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpO1xcbi1cXG4gc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjQoX19iZTMyIG9sZCwgX19iZTMyIG5ldywgX193c3VtIG9sZHN1bSlcXG4ge1xcbiBcXHRfX2JlMzIgZGlmZlsyXSA9IHsgfm9sZCwgbmV3IH07XFxuQEAgLTIwOTMsNiArMjA5MSw5IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pXFxuIFxcdHJldHVybiBjc3VtX3BhcnRpYWwoZGlmZiwgc2l6ZW9mKGRpZmYpLCBvbGRzdW0pO1xcbiB9XFxuIFxcbitib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90byxcXG4rXFx0XFx0XFx0XFx0IGludCBvZmZzZXQpO1xcbitcXG4gLyogRm9yZ2V0IGN1cnJlbnQgY29ubnRyYWNrICh1bmNvbmZpcm1lZCkgYW5kIGF0dGFjaCBub3RyYWNrIGVudHJ5ICovXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19ub3RyYWNrKHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcXG5pbmRleCAzNWNiZTgyMWMyNTk2Ny4uNmNhZTRlYTQ1ZDU1YWIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcXG5AQCAtODY3LDExICs4NjcsNTYgQEAgc3RhdGljIGludCBzeXNjdGxfbmF0X2ljbXBfc2VuZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cykgeyByZXR1cm4gMDsgfVxcbiBcXG4gI2VuZGlmXFxuIFxcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxuK3N0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxuIHtcXG4gXFx0cmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKSk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2sgLSB2YWxpZGF0ZSBjaGVja3N1bSBmb3IgVENQL1VEUC9JQ01QXFxuKyAqIEBhZjogQUZfSU5FVC9BRl9JTkVUNlxcbisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyXFxuKyAqIEBwcm90bzogSVBQUk9UT194eHhcXG4rICogQG9mZnNldDogb2Zmc2V0IG9mIHByb3RvY29sIGhlYWRlclxcbisgKi9cXG4rYm9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8sXFxuK1xcdFxcdFxcdFxcdCBpbnQgb2Zmc2V0KVxcbit7XFxuK1xcdF9fd3N1bSBjc3VtO1xcbitcXG4rXFx0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fTk9ORSkge1xcbitcXHRcXHRjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXFx1MDAzZWxlbiAtIG9mZnNldCwgMCk7XFxuK1xcdH0gZWxzZSBpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpIHtcXG4rXFx0XFx0LyogSVBWUyB3b3JrcyBhdCBJUCBsYXllciwgc28gc2tiLVxcdTAwM2Vjc3VtIGNvdmVycyBkYXRhIGZyb21cXG4rXFx0XFx0ICogSVAgaGVhZGVyLCBzdHJpcCBpdCB1cCB0byB0aGUgcHJvdG9jb2wgaGVhZGVyXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjc3VtID0gY3N1bV9zdWIoc2tiLVxcdTAwM2Vjc3VtLCBza2JfY2hlY2tzdW0oc2tiLCAwLCBvZmZzZXQsIDApKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogTm8gbmVlZCB0byBjaGVja3N1bS4gKi9cXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuK1xcdGlmIChhZiA9PSBBRl9JTkVUNikge1xcbitcXHRcXHRpZiAoY3N1bV9pcHY2X21hZ2ljKFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VzYWRkcixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4rXFx0XFx0XFx0XFx0ICAgIHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0LCBwcm90byxcXG4rXFx0XFx0XFx0XFx0ICAgIGNzdW0pKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH0gZWxzZVxcbisjZW5kaWZcXG4rXFx0XFx0aWYgKHByb3RvID09IElQUFJPVE9fSUNNUClcXG4rXFx0XFx0XFx0cmV0dXJuICFjc3VtX2ZvbGQoY3N1bSk7XFxuK1xcdFxcdGVsc2UgaWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLVxcdTAwM2VzYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgaXBfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbitcXHRcXHRcXHRcXHRcXHQgICBza2ItXFx1MDAzZWxlbiAtIG9mZnNldCwgcHJvdG8sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGNzdW0pKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBlbnVtIGlwX2RlZnJhZ191c2VycyBpcF92c19kZWZyYWdfdXNlcih1bnNpZ25lZCBpbnQgaG9va251bSlcXG4ge1xcbiBcXHRpZiAoTkZfSU5FVF9MT0NBTF9JTiA9PSBob29rbnVtKVxcbkBAIC0xMDM5LDEyICsxMDg0LDEzIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaG9va251bSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgdmVyZGljdCA9IE5GX0RST1A7XFxuK1xcdGludCBpcHJvdG8gPSBhZiA9PSBBRl9JTkVUNiA/IElQUFJPVE9fSUNNUFY2IDogSVBQUk9UT19JQ01QO1xcbiBcXG4gXFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKVxcbiBcXHRcXHRnb3RvIGFmdGVyX25hdDtcXG4gXFxuIFxcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xcbi1cXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXFx1MDAyNlxcdTAwMjYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGFmLCBza2IsIGlwcm90bywgaWhsKSkge1xcbiBcXHRcXHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXFxuIFxcdFxcdElQX1ZTX0RCR19CVUYoMSwgXFxcIkZvcndhcmQgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXMhXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgICBJUF9WU19EQkdfQUREUihhZiwgc25ldCkpO1xcbkBAIC0xODk5LDcgKzE5NDUsNyBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuIFxcdHZlcmRpY3QgPSBORl9EUk9QO1xcbiBcXG4gXFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXFxuLVxcdGlmICghc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSBcXHUwMDI2XFx1MDAyNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHtcXG4rXFx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soQUZfSU5FVCwgc2tiLCBJUFBST1RPX0lDTVAsIGlobCkpIHtcXG4gXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbiBcXHRcXHRJUF9WU19EQkcoMSwgXFxcIkluY29taW5nIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTQhXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyKTtcXG5AQCAtMjA2NSw2ICsyMTExLDE3IEBAIHN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdHZlcmRpY3QgPSBORl9EUk9QO1xcbitcXG4rXFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKEFGX0lORVQ2LCBza2IsIElQUFJPVE9fSUNNUFY2LFxcbitcXHRcXHRcXHRcXHRcXHQgaXBoLVxcdTAwM2VsZW4pKSB7XFxuK1xcdFxcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cXG4rXFx0XFx0SVBfVlNfREJHKDEsIFxcXCJJbmNvbWluZyBJQ01QdjY6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTZjIVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICBcXHUwMDI2aXBoLVxcdTAwM2VzYWRkcik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbiBcXHQvKiBkbyB0aGUgc3RhdGlzdGljcyBhbmQgcHV0IGl0IGJhY2sgKi9cXG4gXFx0aXBfdnNfaW5fc3RhdHMoY3AsIHNrYik7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcXG5pbmRleCBmODZiNzYzZWZjYzRkYy4uZThlNmFjYWY4MzAwOGEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXFxuQEAgLTMwNCwzOSArMzA0LDEwIEBAIHN0YXRpYyBpbnRcXG4gdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHQgICAgICAgdW5zaWduZWQgaW50IHRjcGhvZmYpXFxuIHtcXG4tXFx0c3dpdGNoIChza2ItXFx1MDAzZWlwX3N1bW1lZCkge1xcbi1cXHRjYXNlIENIRUNLU1VNX05PTkU6XFxuLVxcdFxcdHNrYi1cXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XFxuLVxcdFxcdGZhbGx0aHJvdWdoO1xcbi1cXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4tXFx0XFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuLVxcdFxcdFxcdGlmIChjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW0pKSB7XFxuLVxcdFxcdFxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2VcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlY3N1bSkpIHtcXG4tXFx0XFx0XFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xcbi1cXHRcXHRicmVhaztcXG4rXFx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soYWYsIHNrYiwgSVBQUk9UT19UQ1AsIHRjcGhvZmYpKSB7XFxuK1xcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsIFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuLVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXFxuaW5kZXggNThmOWUyNTU5MjdlMmUuLjRkMWQxZmMyM2MyZGI2IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xcbkBAIC0zMDYsNDAgKzMwNiwxMSBAQCB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdGlmICh1aCA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmICh1aC1cXHUwMDNlY2hlY2sgIT0gMCkge1xcbi1cXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlaXBfc3VtbWVkKSB7XFxuLVxcdFxcdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcXG4tXFx0XFx0XFx0c2tiLVxcdTAwM2Vjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdWRwaG9mZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHNrYi1cXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XFxuLVxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbi1cXHRcXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4tXFx0XFx0XFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuLVxcdFxcdFxcdFxcdGlmIChjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW0pKSB7XFxuLVxcdFxcdFxcdFxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHR9IGVsc2VcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdFxcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlY3N1bSkpIHtcXG4tXFx0XFx0XFx0XFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbitcXHRpZiAoIXVoLVxcdTAwM2VjaGVjaylcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGFmLCBza2IsIElQUFJPVE9fVURQLCB1ZHBob2ZmKSkge1xcbitcXHRcXHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMTo0OC42NTI3Njk2NjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMjc4MDk0MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCIsXG4gICAgXCJJUF9WU19JUFY2XCIsXG4gICAgXCJJUF9WU19QUk9UT19UQ1BcIixcbiAgICBcIklQX1ZTX1BST1RPX1VEUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja1wiLFxuICAgIFwiaXBfdnNfaW5faWNtcF92NlwiLFxuICAgIFwiaXBfdnNfaW5faWNtcFwiLFxuICAgIFwiaGFuZGxlX3Jlc3BvbnNlX2ljbXBcIixcbiAgICBcInRjcF9jc3VtX2NoZWNrXCIsXG4gICAgXCJ1ZHBfY3N1bV9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29tbW9uIGNoZWNrc3VtIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIElQVlMgYW5kIHVzZXMgaXQgYWNyb3NzIFRDUCwgVURQLCBhbmQgSUNNUCBwcm90b2NvbHMuIEl0IGFsc28gYWRkcyBjaGVja3N1bSB2YWxpZGF0aW9uIGZvciBpbmNvbWluZyBJQ01QdjYgcGFja2V0cy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgY2hlY2tzdW0gdmFsaWRhdGlvbiBwYXRocyB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIG1hbGZvcm1lZCBwYWNrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJkMGU0MTZkYzVlNTAwODc5ZTEzYjdlNDg4OTExODExNTJmMGZhOTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAxODoyMTo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oXG5pbmRleCA0MTdmZjUxZjYyZmM4ZS4uY2Q2NWRkM2E0YWQxZjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oXG4rKysgYi9pbmNsdWRlL25ldC9pcF92cy5oXG5AQCAtMjA2Niw4ICsyMDY2LDYgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcbiAjZW5kaWZcbiBcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmY0KF9fYmUzMiBvbGQsIF9fYmUzMiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4ge1xuIFx0X19iZTMyIGRpZmZbMl0gPSB7IH5vbGQsIG5ldyB9O1xuQEAgLTIwOTMsNiArMjA5MSw5IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4gXHRyZXR1cm4gY3N1bV9wYXJ0aWFsKGRpZmYsIHNpemVvZihkaWZmKSwgb2xkc3VtKTtcbiB9XG4gXG4rYm9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8sXG4rXHRcdFx0XHQgaW50IG9mZnNldCk7XG4rXG4gLyogRm9yZ2V0IGN1cnJlbnQgY29ubnRyYWNrICh1bmNvbmZpcm1lZCkgYW5kIGF0dGFjaCBub3RyYWNrIGVudHJ5ICovXG4gc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX25vdHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcbmluZGV4IDM1Y2JlODIxYzI1OTY3Li42Y2FlNGVhNDVkNTVhYiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcbkBAIC04NjcsMTEgKzg2Nyw1NiBAQCBzdGF0aWMgaW50IHN5c2N0bF9uYXRfaWNtcF9zZW5kKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKSB7IHJldHVybiAwOyB9XG4gXG4gI2VuZGlmXG4gXG4tX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuK3N0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG4ge1xuIFx0cmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQsIDApKTtcbiB9XG4gXG4rLyoqXG4rICogaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrIC0gdmFsaWRhdGUgY2hlY2tzdW0gZm9yIFRDUC9VRFAvSUNNUFxuKyAqIEBhZjogQUZfSU5FVC9BRl9JTkVUNlxuKyAqIEBza2I6IHNvY2tldCBidWZmZXJcbisgKiBAcHJvdG86IElQUFJPVE9feHh4XG4rICogQG9mZnNldDogb2Zmc2V0IG9mIHByb3RvY29sIGhlYWRlclxuKyAqL1xuK2Jvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvLFxuK1x0XHRcdFx0IGludCBvZmZzZXQpXG4re1xuK1x0X193c3VtIGNzdW07XG4rXG4rXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKSB7XG4rXHRcdGNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQsIDApO1xuK1x0fSBlbHNlIGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKSB7XG4rXHRcdC8qIElQVlMgd29ya3MgYXQgSVAgbGF5ZXIsIHNvIHNrYi1cdTAwM2Vjc3VtIGNvdmVycyBkYXRhIGZyb21cbitcdFx0ICogSVAgaGVhZGVyLCBzdHJpcCBpdCB1cCB0byB0aGUgcHJvdG9jb2wgaGVhZGVyXG4rXHRcdCAqL1xuK1x0XHRjc3VtID0gY3N1bV9zdWIoc2tiLVx1MDAzZWNzdW0sIHNrYl9jaGVja3N1bShza2IsIDAsIG9mZnNldCwgMCkpO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogTm8gbmVlZCB0byBjaGVja3N1bS4gKi9cbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4rXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbitcdFx0aWYgKGNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyLFxuK1x0XHRcdFx0ICAgIFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4rXHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIG9mZnNldCwgcHJvdG8sXG4rXHRcdFx0XHQgICAgY3N1bSkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fSBlbHNlXG4rI2VuZGlmXG4rXHRcdGlmIChwcm90byA9PSBJUFBST1RPX0lDTVApXG4rXHRcdFx0cmV0dXJuICFjc3VtX2ZvbGQoY3N1bSk7XG4rXHRcdGVsc2UgaWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLVx1MDAzZXNhZGRyLFxuK1x0XHRcdFx0XHQgICBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbitcdFx0XHRcdFx0ICAgc2tiLVx1MDAzZWxlbiAtIG9mZnNldCwgcHJvdG8sXG4rXHRcdFx0XHRcdCAgIGNzdW0pKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGVudW0gaXBfZGVmcmFnX3VzZXJzIGlwX3ZzX2RlZnJhZ191c2VyKHVuc2lnbmVkIGludCBob29rbnVtKVxuIHtcbiBcdGlmIChORl9JTkVUX0xPQ0FMX0lOID09IGhvb2tudW0pXG5AQCAtMTAzOSwxMiArMTA4NCwxMyBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHVuc2lnbmVkIGludCBob29rbnVtKVxuIHtcbiBcdHVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDtcbitcdGludCBpcHJvdG8gPSBhZiA9PSBBRl9JTkVUNiA/IElQUFJPVE9fSUNNUFY2IDogSVBQUk9UT19JQ01QO1xuIFxuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKVxuIFx0XHRnb3RvIGFmdGVyX25hdDtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuLVx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFx1MDAyNlx1MDAyNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHtcbitcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGFmLCBza2IsIGlwcm90bywgaWhsKSkge1xuIFx0XHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXG4gXHRcdElQX1ZTX0RCR19CVUYoMSwgXCJGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcblwiLFxuIFx0XHRcdCAgICAgIElQX1ZTX0RCR19BRERSKGFmLCBzbmV0KSk7XG5AQCAtMTg5OSw3ICsxOTQ1LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0dmVyZGljdCA9IE5GX0RST1A7XG4gXG4gXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cbi1cdGlmICghc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSBcdTAwMjZcdTAwMjYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7XG4rXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhBRl9JTkVULCBza2IsIElQUFJPVE9fSUNNUCwgaWhsKSkge1xuIFx0XHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXG4gXHRcdElQX1ZTX0RCRygxLCBcIkluY29taW5nIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTQhXFxuXCIsXG4gXHRcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuQEAgLTIwNjUsNiArMjExMSwxNyBAQCBzdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0dmVyZGljdCA9IE5GX0RST1A7XG4rXG4rXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cbitcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKEFGX0lORVQ2LCBza2IsIElQUFJPVE9fSUNNUFY2LFxuK1x0XHRcdFx0XHQgaXBoLVx1MDAzZWxlbikpIHtcbitcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuK1x0XHRJUF9WU19EQkcoMSwgXCJJbmNvbWluZyBJQ01QdjY6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTZjIVxcblwiLFxuK1x0XHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4gXHQvKiBkbyB0aGUgc3RhdGlzdGljcyBhbmQgcHV0IGl0IGJhY2sgKi9cbiBcdGlwX3ZzX2luX3N0YXRzKGNwLCBza2IpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xuaW5kZXggZjg2Yjc2M2VmY2M0ZGMuLmU4ZTZhY2FmODMwMDhhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcbkBAIC0zMDQsMzkgKzMwNCwxMCBAQCBzdGF0aWMgaW50XG4gdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKVxuIHtcbi1cdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0Y2FzZSBDSEVDS1NVTV9OT05FOlxuLVx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLCAwKTtcbi1cdFx0ZmFsbHRocm91Z2g7XG4tXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxuLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuLVx0XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdCAgICBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIHRjcGhvZmYsXG4tXHRcdFx0XHRcdCAgICBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuLVx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2Vcbi0jZW5kaWZcbi1cdFx0XHRpZiAoY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gdGNwaG9mZixcbi1cdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlcHJvdG9jb2wsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuLVx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0fVxuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdC8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovXG4tXHRcdGJyZWFrO1xuK1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soYWYsIHNrYiwgSVBQUk9UT19UQ1AsIHRjcGhvZmYpKSB7XG4rXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsIFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4tXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXG5pbmRleCA1OGY5ZTI1NTkyN2UyZS4uNGQxZDFmYzIzYzJkYjYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xuQEAgLTMwNiw0MCArMzA2LDExIEBAIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdGlmICh1aCA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICh1aC1cdTAwM2VjaGVjayAhPSAwKSB7XG4tXHRcdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0XHRjYXNlIENIRUNLU1VNX05PTkU6XG4tXHRcdFx0c2tiLVx1MDAzZWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XG4tXHRcdFx0ZmFsbHRocm91Z2g7XG4tXHRcdGNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6XG4tI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4tXHRcdFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tXHRcdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdFx0ICAgIFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCAgICBJUFBST1RPX1VEUCxcbi1cdFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuLVx0XHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHRcdH1cbi1cdFx0XHR9IGVsc2Vcbi0jZW5kaWZcbi1cdFx0XHRcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZixcbi1cdFx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCxcbi1cdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHRcdCBcIkZhaWxlZCBjaGVja3N1bSBmb3JcIik7XG4tXHRcdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdFx0fVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovXG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbitcdGlmICghdWgtXHUwMDNlY2hlY2spXG4rXHRcdHJldHVybiAxO1xuK1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soYWYsIHNrYiwgSVBQUk9UT19VRFAsIHVkcGhvZmYpKSB7XG4rXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsIFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRyZXR1cm4gMTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMTo0OC42NTI3NzEwMzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQzODQ0NzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBWUyBDaGVja3N1bSBWYWxpZGF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgSVBWUyBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyB1bmlmeWluZyB0aGUgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYy4gVGhleSd2ZSBpbnRyb2R1Y2VkIHRoaXMgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AgZnVuY3Rpb24sIHdoaWNoIGlzIGJlaW5nIGNhbGxlZCBpbiBgaXBfdnNfY29yZS5jYCwgYGlwX3ZzX3Byb3RvX3RjcC5jYCwgYW5kIGBpcF92c19wcm90b191ZHAuY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgYSBtb3ZlIHRvd2FyZHMgYSBtb3JlIGNvbnNpc3RlbnQgYXBwcm9hY2ggdG8gaGFuZGxpbmcgY2hlY2tzdW1zIGFjcm9zcyBUQ1AsIFVEUCwgYW5kIElDTVAgd2l0aGluIHRoZSBJUFZTIGZyYW1ld29yay4gVGhlIGFkZGl0aW9uIG9mIGNoZWNrc3VtIHZhbGlkYXRpb24gZm9yIGluY29taW5nIElDTVB2NiBwYWNrZXRzIGluIGBpcF92c19pbl9pY21wX3Y2YCBpcyBhbHNvIHNvbWV0aGluZyB0byBtYWtlIG5vdGUgb2YuXG5cbk5vdywgYmVmb3JlIEkgZGlnIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgSVBWUyBpcyBldmVuIGF2YWlsYWJsZSBhbmQgY29ycmVjdGx5IGNvbmZpZ3VyZWQgaW4gdGhlIHRlc3Rpbmcgc2V0dXAuIEkga25vdyBpdCdzIHBhcnQgb2YgbmV0ZmlsdGVyLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBrZXJuZWwgY29uZmlncyBhcmUgc2V0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgZm9yIGBDT05GSUdfSVBfVlNgLCBgQ09ORklHX0lQX1ZTX0lQVjZgLCBgQ09ORklHX0lQX1ZTX1BST1RPX1RDUGAsIGFuZCBgQ09ORklHX0lQX1ZTX1BST1RPX1VEUGAuXG5cbk9rYXksIG5leHQgSSdsbCBzZWFyY2ggdGhlIHRyZWUgZm9yIGNhbGxzIHRvIGBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tgLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBleGFjdCB1c2FnZSBjb250ZXh0LCBmaW5kIGFsbCB0aGUgY29kZSBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLCBhbmQgaG93IGl0IGlzIGJlaW5nIHVzZWQuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHJlYWxseSBhc3Nlc3MgdGhlIGltcGxpY2F0aW9ucyBhbmQgcG90ZW50aWFsIGltcGFjdHMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MzUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMTo1My40OTY2MTg0NjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzOTk1MTk4MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX3ZzLmg9MjA4Nz1zdGF0aWMgaW5saW5lIF9fd3N1bSBpcF92c19jaGVja19kaWZmMihfX2JlMTYgb2xkLCBfX2JlMTYgbmV3LCBfX3dzdW0gb2xkc3VtKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0yMDkzLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MjA5NDpib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90byxcXG5pbmNsdWRlL25ldC9pcF92cy5oLTIwOTUtXFx0XFx0XFx0XFx0IGludCBvZmZzZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz04NzA9c3RhdGljIF9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtODc1LS8qKlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6ODc2OiAqIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayAtIHZhbGlkYXRlIGNoZWNrc3VtIGZvciBUQ1AvVURQL0lDTVBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTg3Ny0gKiBAYWY6IEFGX0lORVQvQUZfSU5FVDZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtODgxLSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6ODgyOmJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtODgzLVxcdFxcdFxcdFxcdCBpbnQgb2Zmc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xMDc5PXN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xMDkyLVxcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTA5MzpcXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhhZiwgc2tiLCBpcHJvdG8sIGlobCkpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEwOTQtXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xODAyPWlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTk0Ny1cXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE5NDg6XFx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soQUZfSU5FVCwgc2tiLCBJUFBST1RPX0lDTVAsIGlobCkpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5NDktXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMDM0PXN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjExNi1cXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIxMTc6XFx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soQUZfSU5FVDYsIHNrYiwgSVBQUk9UT19JQ01QVjYsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMTE4LVxcdFxcdFxcdFxcdFxcdCBpcGgtXFx1MDAzZWxlbikpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0zMDQ9dGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTMwNi17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjMwNzpcXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhhZiwgc2tiLCBJUFBST1RPX1RDUCwgdGNwaG9mZikpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMzA4LVxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsIFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MzAwPXVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0zMTAtXFx0XFx0cmV0dXJuIDE7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjMxMTpcXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhhZiwgc2tiLCBJUFBST1RPX1VEUCwgdWRwaG9mZikpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMzEyLVxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsIFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjIyOjE1Ljg5NjE0Mzk3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwOTk0MzQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tzdW0gVmFsaWRhdGlvbiBpbiBJUFZTOiBBIFF1aWNrIFJldmlldyoqXG5cbkFscmlnaHQsIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHNoYXJlZCBjaGVja3N1bSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBJUFZTLiBTbWFydCBtb3ZlLCBjZW50cmFsaXppbmcgdGhhdCBhbmQgcHJvbW90aW5nIHJldXNhYmlsaXR5LiBJdCdzIHVzZWQgaW4gYSBmZXcgcGxhY2VzLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdC4gRnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludCwgYmFzZWQgb24gdGhlIG5vdGVzLCBpdCBzZWVtcyBzb2xpZDsgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlLlxuXG5Ob3csIGxldCdzIHNlZSwgd2hhdCBjb25maWdzIGFyZSBuZWVkZWQ/IGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYElQX1ZTX1BST1RPX1RDUGAsIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBhcmUgbWVudGlvbmVkLiBIbW0sIGJlZm9yZSBJIGdldCB0b28gZmFyIGludG8gcmV2aWV3aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBUQ1AgYW5kIFVEUCBwcm90b2NvbCBvcHRpb25zIGFyZSBhY3R1YWxseSBwcmVzZW50IGFuZCB3ZWxsLWRlZmluZWQgaW4gdGhlIHJlbGV2YW50IGNvbmZpZyBmaWxlcy4gQmV0dGVyIHRvIHZlcmlmeSBhc3N1bXB0aW9ucyB1cGZyb250LiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4gT2theSwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2suLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUyMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjIyOjE5LjUwNjA4OTI5NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY3MTk4NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTX1BST1RPX1RDUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTI1MT1DT05GSUdfSVBfVlNfSVBWNj15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzoyNTI6Q09ORklHX0lQX1ZTX1BST1RPX1RDUD15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy0yNTMtQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTI2Nz1DT05GSUdfSVBfVlNfSVBWNj15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoyNjg6Q09ORklHX0lQX1ZTX1BST1RPX1RDUD15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0yNjktQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnPTY3PUNPTkZJR19JUF9WU19JUFY2PXlcXG5hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnOjY4OkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWctNjktQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9pcDIyX2RlZmNvbmZpZz0xMDc9Q09ORklHX0lQX1ZTX0lQVjY9eVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnOjEwODpDT05GSUdfSVBfVlNfUFJPVE9fVENQPXlcXG5hcmNoL21pcHMvY29uZmlncy9pcDIyX2RlZmNvbmZpZy0xMDktQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWc9MTA3PUNPTkZJR19JUF9WU19JUFY2PXlcXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWc6MTA4OkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZy0xMDktQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9rdm1fZGVmY29uZmlnPTExMT1DT05GSUdfSVBfVlNfSVBWNj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZzoxMTI6Q09ORklHX0lQX1ZTX1BST1RPX1RDUD15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZy0xMTMtQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWc9MTA4PUNPTkZJR19JUF9WU19JUFY2PXlcXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWc6MTA5OkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZy0xMTAtQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XFxuLS1cXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTc0PUNPTkZJR19JUF9WUz1tXFxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZzo3NTpDT05GSUdfSVBfVlNfUFJPVE9fVENQPXlcXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnLTc2LUNPTkZJR19JUF9WU19QUk9UT19VRFA9eVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTMxMz1DT05GSUdfSVBfVlM9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzozMTQ6Q09ORklHX0lQX1ZTX1BST1RPX1RDUD15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTMxNS1DT05GSUdfSVBfVlNfUFJPVE9fVURQPXlcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz0zMDQ9Q09ORklHX0lQX1ZTPW1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MzA1OkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy0zMDYtQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTExNDg9c3RydWN0IG5ldG5zX2lwdnMge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0xMTYyLVxcdC8qIGlwX3ZzX3Byb3RvX3RjcCAqL1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTE2MzojaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX1RDUFxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTE2NC1cXHQjZGVmaW5lXFx0VENQX0FQUF9UQUJfQklUU1xcdDRcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg9MjIwMj1pcF92c19kZXN0X2Nvbm5fb3ZlcmhlYWQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oLTIyMTMtXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoyMjE0OiNpZmRlZiBDT05GSUdfSVBfVlNfUFJPVE9fVENQXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0yMjE1LUlORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoaW50XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03Nz1jb21tZW50IFxcXCJJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTc4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjc5OmNvbmZpZ1xcdElQX1ZTX1BST1RPX1RDUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIlRDUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzIxPWNvbmZpZ1xcdElQX1ZTX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMi1cXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIGhlbHBlclxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVxcdFxcdE5GX0NPTk5UUkFDS19GVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZT03PWlwX3ZzX3Byb3RvLW9ianMteSA6PVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZTo4OmlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fVENQKSArPSBpcF92c19wcm90b190Y3Aub1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS05LWlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fVURQKSArPSBpcF92c19wcm90b191ZHAub1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz02MD1FWFBPUlRfU1lNQk9MKGlwX3ZzX2Nvbm5fb3V0X2dldCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo2MTojaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX1RDUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNjItRVhQT1JUX1NZTUJPTChpcF92c190Y3BfY29ubl9saXN0ZW4pO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz02OD1FWFBPUlRfU1lNQk9MKGlwX3ZzX25ld19jb25uX291dCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy02OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjcwOiNpZiBkZWZpbmVkKENPTkZJR19JUF9WU19QUk9UT19UQ1ApIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTcxLSNkZWZpbmUgU05BVF9DQUxMKGYsIC4uLikgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzItXFx0SU5ESVJFQ1RfQ0FMTF8yKGYsIHRjcF9zbmF0X2hhbmRsZXIsIHVkcF9zbmF0X2hhbmRsZXIsIF9fVkFfQVJHU19fKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzM6I2VsaWYgZGVmaW5lZChDT05GSUdfSVBfVlNfUFJPVE9fVENQKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzQtI2RlZmluZSBTTkFUX0NBTEwoZiwgLi4uKSBJTkRJUkVDVF9DQUxMXzEoZiwgdGNwX3NuYXRfaGFuZGxlciwgX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MzMwNj1zdGF0aWMgaW50IGlwX3ZzX3NldF90aW1lb3V0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfdGltZW91dF91c2VyICp1KVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zMzA3LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzMwODojaWYgZGVmaW5lZChDT05GSUdfSVBfVlNfUFJPVE9fVENQKSB8fCBkZWZpbmVkKENPTkZJR19JUF9WU19QUk9UT19VRFApXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTMzMDktXFx0c3RydWN0IGlwX3ZzX3Byb3RvX2RhdGEgKnBkO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTMzMTYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjMzMTc6I2lmZGVmIENPTkZJR19JUF9WU19QUk9UT19UQ1BcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzMxOC1cXHRpZiAodS1cXHUwMDNldGNwX3RpbWVvdXQgXFx1MDAzYyAwIHx8IHUtXFx1MDAzZXRjcF90aW1lb3V0IFxcdTAwM2UgKElOVF9NQVggLyBIWikgfHxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zMzI4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzozMzI5OiNpZmRlZiBDT05GSUdfSVBfVlNfUFJPVE9fVENQXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTMzMzAtXFx0aWYgKHUtXFx1MDAzZXRjcF90aW1lb3V0KSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MzY5MD1fX2lwX3ZzX2dldF90aW1lb3V0cyhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3RpbWVvdXRfdXNlciAqdSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzY5MS17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM2OTI6I2lmIGRlZmluZWQoQ09ORklHX0lQX1ZTX1BST1RPX1RDUCkgfHwgZGVmaW5lZChDT05GSUdfSVBfVlNfUFJPVE9fVURQKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNjkzLVxcdHN0cnVjdCBpcF92c19wcm90b19kYXRhICpwZDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNjk3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzozNjk4OiNpZmRlZiBDT05GSUdfSVBfVlNfUFJPVE9fVENQXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM2OTktXFx0cGQgPSBpcF92c19wcm90b19kYXRhX2dldChpcHZzLCBJUFBST1RPX1RDUCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDc2Nj1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfZ2V0X2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ4MjMtXFx0XFx0X19pcF92c19nZXRfdGltZW91dHMoaXB2cywgXFx1MDAyNnQpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0ODI0OiNpZmRlZiBDT05GSUdfSVBfVlNfUFJPVE9fVENQXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ4MjUtXFx0XFx0aWYgKG5sYV9wdXRfdTMyKG1zZywgSVBWU19DTURfQVRUUl9USU1FT1VUX1RDUCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jPTI5NT1pbnQgX19uZXRfaW5pdCBpcF92c19wcm90b2NvbF9uZXRfaW5pdChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jLTI5OC1cXHRzdGF0aWMgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcm90b3NbXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYzoyOTk6I2lmZGVmIENPTkZJR19JUF9WU19QUk9UT19UQ1BcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYy0zMDAtICAgICAgICBcXHUwMDI2aXBfdnNfcHJvdG9jb2xfdGNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmM9MzQwPWludCBfX2luaXQgaXBfdnNfcHJvdG9jb2xfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMtMzQ5LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jOjM1MDojaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX1RDUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jLTM1MS1cXHRSRUdJU1RFUl9QUk9UT0NPTChcXHUwMDI2aXBfdnNfcHJvdG9jb2xfdGNwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29uZmlnPTM4PUNPTkZJR19JUF9WUz1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWc6Mzk6Q09ORklHX0lQX1ZTX1BST1RPX1RDUD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWctNDAtQ09ORklHX0lQX1ZTX1JSPW1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTg6MjI6MjEuNzczMjk0MTgzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3NDQwMjA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6XG5cbioqQW5hbHl6aW5nIElQVlMgUHJvdG9jb2wgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIGBDT05GSUdfSVBfVlNfUFJPVE9fVENQYCBhbmQgYENPTkZJR19JUF9WU19QUk9UT19VRFBgIGFzIGxlZ2l0aW1hdGUgY29uZmlndXJhdGlvbnMg4oCTIG5vdGhpbmcganVtcHMgb3V0IGFzIGltbWVkaWF0ZWx5IHdyb25nIHRoZXJlLiBOb3csIGhvbGQgb24gYSBzZWNvbmQuLi4gSSByZWNhbGwgdGhhdCBgQ09ORklHX0lQX1ZTX1BST1RPX1RDUGAgaXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24sIGFuZCBJJ20gcHJldHR5IHN1cmUgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gYSAqbG90KiBvZiBkZWZjb25maWdzIEkndmUgd29ya2VkIHdpdGguIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0LiBMZXQgbWUgcXVpY2tseSBnbyBsb29rIGF0IGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgdG8gY29uZmlybSBpZiBpdCBkZWZhdWx0cyB0byAneScgYXMgSSBzdXNwZWN0LiBUaGF0IHNob3VsZCBjbGFyaWZ5IGV2ZXJ5dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3ODUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMjoyNS4yNDc2OTg3MTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzMDMwOTU5NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTX1BST1RPX1RDUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTg6MjI6MjcuNTc4MDI2NzY4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyOTI1MDk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6XG5cbioqRGl2aW5nIGludG8gQ29uZmlndXJhdGlvbjogSVAgdnMuIFByb3RvIFRDUCoqXG5cblJpZ2h0LCBsZXQgbWUgc2VlLiBUaGF0IHN0cmluZyBpbW1lZGlhdGVseSB0aHJvd3MgdXAgYSBmbGFnLiBcImNvbmZpZ1wiIOKAkyB0aGF0IHRlbGxzIG1lIEknbSBsb29raW5nIGF0IGEgY29uZmlndXJhdGlvbiBmaWxlIG9yIHBhdGguIFRoZW4sIHRoZSB0YWIgc2VwYXJhdG9y4oCUdGhhdCdzIGludGVyZXN0aW5nLCBidXQgbm90IHVudXN1YWwgZm9yIGEga2V5LXZhbHVlIHN0cnVjdHVyZSwgYW5kIHRoZSByZXN0IGlzIGNsZWFybHkgdGhlIGtleS4gXCJJUFxcX1ZTXFxfUFJPVE9cXF9UQ1BcIi4uLiB5ZXAsIHRoaXMgcG9pbnRzIGRpcmVjdGx5IHRvIHNvbWV0aGluZyByZWxhdGVkIHRvIElQIFZpcnR1YWwgU2VydmVyIChJUFZTKSwgYW5kIHNwZWNpZmljYWxseSwgaG93IGl0J3MgaGFuZGxpbmcgVENQIHRyYWZmaWMuIEknbSBsaWtlbHkgZXhhbWluaW5nIGEgc2V0dGluZyB0aGF0IGRlZmluZXMgaG93IFRDUCB0cmFmZmljIGlzIHJvdXRlZCBvciBtYW5hZ2VkIGJ5IGFuIElQVlMgY29uZmlndXJhdGlvbi4gTWlnaHQgYmUgYSByb3V0aW5nIHBvbGljeSwgYSBoZWFsdGggY2hlY2sgc2V0dGluZyBmb3IgVENQIHNlcnZpY2VzLCBvciB0aGUgd2F5IFRDUCBjb25uZWN0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgY29udGV4dCBvZiBsb2FkIGJhbGFuY2luZy4gVGhpcyB0ZWxscyBtZSBhYm91dCB0aGUgdHlwZSBvZiB0cmFmZmljIGFuZCB3aGVyZSBpdCdzIGRpcmVjdGVkLiBJJ2xsIG5lZWQgdG8ga25vdyBtb3JlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBmaWxlIGludGVyYWN0cyB3aXRoIHRoZSBuZXR3b3JrIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA2NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjIyOjMxLjkwNzI4MDUwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk3MDQ2OTM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcuKklQX1ZTX1BST1RPX1RDUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03Nz1jb21tZW50IFxcXCJJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTc4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjc5OmNvbmZpZ1xcdElQX1ZTX1BST1RPX1RDUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIlRDUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMjozNC44Nzc3NTc4MDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzNzcxMDIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVBWUyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBJUFZTIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IHdpdGggdGhlIHNvdXJjZSBvZiB0cnV0aCwgYW5kIHRoYXQncyBnZW5lcmFsbHkgdGhlIEtjb25maWcgZmlsZS4gSSdsbCBuYXZpZ2F0ZSB0byBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIOKAkyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgSVBWUyBvcHRpb25zIGFyZSBwcmVzZW50ZWQgYW5kIGhhbmRsZWQgZHVyaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIGFyb3VuZCBsaW5lIDc5LiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIG9wdGlvbnMgYXJlIGRlY2xhcmVkLiBJIGV4cGVjdCB0byBmaW5kIHRoaW5ncyBsaWtlIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgb3B0aW9ucy4gVGhpcyBtaWdodCByZXZlYWwgc29tZSBpbnRlcmVzdGluZyBxdWlya3Mgb3IgaW1wbGVtZW50YXRpb24gZGVjaXNpb25zIHRoYXQgSSBoYXZlbid0IGNvbnNpZGVyZWQgcHJldmlvdXNseSwgd2hpY2ggY291bGQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEknbSBsb29raW5nIGF0LiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjIyOjM3LjkxNTQ3MTQ4OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0XFx0ICBlYWNoIGhhc2ggZW50cnkgdXNlcyA4IGJ5dGVzLCBzbyB5b3UgY2FuIGVzdGltYXRlIGhvdyBtdWNoIG1lbW9yeSBpc1xcbiAgNzE6XFx0XFx0ICBuZWVkZWQgZm9yIHlvdXIgYm94LlxcbiAgNzI6XFx0XFxuICA3MzpcXHRcXHQgIFlvdSBjYW4gb3ZlcndyaXRlIHRoaXMgbnVtYmVyIHNldHRpbmcgY29ubl90YWJfYml0cyBtb2R1bGUgcGFyYW1ldGVyXFxuICA3NDpcXHRcXHQgIG9yIGJ5IGFwcGVuZGluZyBpcF92cy5jb25uX3RhYl9iaXRzPT8gdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgaWZcXG4gIDc1OlxcdFxcdCAgSVAgVlMgd2FzIGNvbXBpbGVkIGJ1aWx0LWluLlxcbiAgNzY6XFx0XFxuICA3NzpcXHRjb21tZW50IFxcXCJJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbiAgNzg6XFx0XFxuICA3OTpcXHRjb25maWdcXHRJUF9WU19QUk9UT19UQ1BcXG4gIDgwOlxcdFxcdGJvb2wgXFxcIlRDUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbiAgODE6XFx0XFx0aGVscFxcbiAgODI6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxvYWQgYmFsYW5jaW5nIFRDUCB0cmFuc3BvcnRcXG4gIDgzOlxcdFxcdCAgcHJvdG9jb2wuIFNheSBZIGlmIHVuc3VyZS5cXG4gIDg0OlxcdFxcbiAgODU6XFx0Y29uZmlnXFx0SVBfVlNfUFJPVE9fVURQXFxuICA4NjpcXHRcXHRib29sIFxcXCJVRFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4gIDg3OlxcdFxcdGhlbHBcXG4gIDg4OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBVRFAgdHJhbnNwb3J0XFxuICA4OTpcXHRcXHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXFxuICA5MDpcXHRcXG4gIDkxOlxcdGNvbmZpZ1xcdElQX1ZTX1BST1RPX0FIX0VTUFxcbiAgOTI6XFx0XFx0ZGVmX2Jvb2wgSVBfVlNfUFJPVE9fRVNQIHx8IElQX1ZTX1BST1RPX0FIXFxuICA5MzpcXHRcXG4gIDk0OlxcdGNvbmZpZ1xcdElQX1ZTX1BST1RPX0VTUFxcbiAgOTU6XFx0XFx0Ym9vbCBcXFwiRVNQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuICA5NjpcXHRcXHRoZWxwXFxuICA5NzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgRVNQIChFbmNhcHN1bGF0aW9uXFxuICA5ODpcXHRcXHQgIFNlY3VyaXR5IFBheWxvYWQpIHRyYW5zcG9ydCBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLlxcbiAgOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjIyOjM3LjkxNTYwOTMyOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzkyMzYxNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBWUyBDaGVja3N1bSBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBhcmUgZXhwZWN0ZWQ7IHRob3NlIGFyZSBwcmV0dHkgc3RhbmRhcmQuIE5vdywgdGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBtb2RpZnlpbmcgdGhlIGNoZWNrc3VtIGhhbmRsaW5nIHdpdGhpbiBJUFZTLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AgYW5kIHRoZW4gbGV2ZXJhZ2VzIGl0IGFjcm9zcyBgaXBfdnNfY29yZS5jYCwgYGlwX3ZzX3Byb3RvX3RjcC5jYCwgYW5kIGBpcF92c19wcm90b191ZHAuY2AuIFRoYXQncyB0aGUgY29yZSBmb2N1cywgdGhhdCBmdW5jdGlvbi5cblxuQmV5b25kIHRoYXQsIEknbSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byBgaXBfdnNfaW5faWNtcF92NmAsIGBpcF92c19pbl9pY21wYCwgYW5kIGBoYW5kbGVfcmVzcG9uc2VfaWNtcGAsIHdoaWNoIGFyZSBsaWtlbHkgcmVsYXRlZCB0byBJQ01QIHRyYWZmaWMgaGFuZGxpbmcgaW4gcmVsYXRpb24gdG8gY2hlY2tzdW0gdmFsaWRhdGlvbi4gT2theSwgdGltZSB0byBkaXZlIGludG8gYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AgaXRzZWxmLiBMZXQncyBzdGFydCB3aXRoIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jYC5cblxuQWhhISBJdCdzIGEgbmV3IGZ1bmN0aW9uOyB0aGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljLiBJJ20gZm9jdXNpbmcgb24gdGhlIHN5bWJvbHMgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIGBpcF92c19pbl9pY21wX3Y2YCwgYGlwX3ZzX2luX2ljbXBgLCBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgLCBhbmQgYWxzbyBgdGNwX2NzdW1fY2hlY2tgIGFuZCBgdWRwX2NzdW1fY2hlY2tgLiBXYWl0IGEgbWludXRlLCBhcmVuJ3QgYHRjcF9jc3VtX2NoZWNrYCBhbmQgYHVkcF9jc3VtX2NoZWNrYCBkZWZpbmVkIGFzIHN0YXRpYyBmdW5jdGlvbnMgaW4gYGlwX3ZzX3Byb3RvX3RjcC5jYCBhbmQgYGlwX3ZzX3Byb3RvX3VkcC5jYD8gR290dGEgY29uZmlybSB0aGF0IHRoZXkncmUgc3RhdGljIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZWlyIHVzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNzcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMjo0My4zMDc5NzM3NDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzU3ODY4NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2NzdW1fY2hlY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTMwPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MzE6dGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0zMi1cXHQgICAgICAgdW5zaWduZWQgaW50IHRjcGhvZmYpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTE0Nz10Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMTY4LVxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzoxNjk6XFx0XFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xNzAtXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9MjI1PXRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0yNDYtXFx0XFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjI0NzpcXHRcXHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdGNwaG9mZikpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTI0OC1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0zMDM9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzozMDQ6dGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0zMDUtXFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMjo0NS4zODM3NzQxOTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0NDcwNDkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja3N1bSBWZXJpZmljYXRpb24gVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgdGhlc2UgZWxlbWVudHMgYXJlIGluZGVlZCBzdGF0aWMuIFRoZXJlZm9yZSwgdGhlIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBzaG91bGQgY2VudGVyIGFyb3VuZCB0aGVzZSBrZXkgc3ltYm9sczogYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIGBpcF92c19pbl9pY21wX3Y2YCwgYGlwX3ZzX2luX2ljbXBgLCBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgLCBgdGNwX2NzdW1fY2hlY2tgLCBhbmQgYHVkcF9jc3VtX2NoZWNrYC4gSSB3YW50IHRvIGRyaWxsIGRvd24gc3BlY2lmaWNhbGx5IG9uIGB1ZHBfY3N1bV9jaGVja2Agbm93IHRvIGVuc3VyZSBwcm9wZXIgdmFsaWRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMDAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMjo0OC4xMjg0ODExODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTgyOTY3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRwX2NzdW1fY2hlY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTI2PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6Mjc6dWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0yOC1cXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTEzNj11ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTU3LVxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzoxNTg6XFx0XFx0aWYgKCF1ZHBfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIHVkcGhvZmYpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0xNTktXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MjE5PXVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0yNDAtXFx0XFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjI0MTpcXHRcXHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTI0Mi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYz0yOTk9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzozMDA6dWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0zMDEtXFx0ICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODoyMjo0OS45ODY3ODM2OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODU1NDAxNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKklQVlMgQ2hlY2tzdW0gVmFsaWRhdGlvbiBQYXRjaCBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBjb25maWdzLiBXZSdyZSBsb29raW5nIGF0IGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYElQX1ZTX1BST1RPX1RDUGAsIGFuZCBgSVBfVlNfUFJPVE9fVURQYC4gV2hpbGUgYElQX1ZTX1BST1RPX1RDUGAgYW5kIGBJUF9WU19QUk9UT19VRFBgIGFyZSBvZnRlbiBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdmFyaW91cyBkZWZjb25maWdzLCBpdCdzIGdvb2QgcHJhY3RpY2UgdG8gZXhwbGljaXRseSBzcGVjaWZ5IHRoZW0gaGVyZSBmb3IgY2xhcml0eSBhbmQgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGRlZmluaXRlbHkgZW5hYmxlZC4gQWx3YXlzIGdvb2QgdG8gYmUgZXhwbGljaXQsIHJhdGhlciB0aGFuIGltcGxpY2l0LlxuXG5Ob3csIGxldCdzIHNlZSB3aGF0J3MgYmVpbmcgdG91Y2hlZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBpcF92c19jb3JlLmNgLCBgaXBfdnNfcHJvdG9fdGNwLmNgLCBhbmQgYGlwX3ZzX3Byb3RvX3VkcC5jYC4gT2theSwgc28gaXQncyBjb3JlIHRvIElQVlMgYW5kIGludm9sdmVzIHRoZSBUQ1AvVURQIHByb3RvY29sIGltcGxlbWVudGF0aW9ucy4gQSBxdWljayBjaGVjayB0byBzZWUgaWYgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AgaXMgZXhwb3J0ZWQuLi5Ob3BlLCBpdCdzIGludGVybmFsIHRvIHRoZSBtb2R1bGUuIE5vIHByb2JsZW0sIHRoYXQgZG9lc24ndCBjaGFuZ2UgYW55dGhpbmcsIGp1c3Qgbm90aW5nIHRoYXQgZm9yIGxhdGVyLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBhcmUgYWN0dWFsbHkgKm5lZWRlZCogaGVyZS4gQWgsIHllcywgdGhleSBhcmUsIGFzIHRoZSBpbXBsZW1lbnRhdGlvbnMgdXRpbGl6ZSBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCBmb3IgdGhlIFRDUCBhbmQgVURQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBwYXRocy4gQW5kIGBJUF9WU19JUFY2YCBpcywgb2YgY291cnNlLCBuZWNlc3NhcnkgYmVjYXVzZSBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCBkZWFscyB3aXRoIElQdjYgcGFydHMsIGFzIGRvZXMgYGlwX3ZzX2luX2ljbXBfdjZgLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvZGUgc25pcHBldDpcbmBgYGNcbmJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvLFxuXHRcdFx0XHQgaW50IG9mZnNldClcbmBgYFxuVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgcGF0Y2g6IGEgbmV3IGNoZWNrc3VtIHZhbGlkYXRpb24gZnVuY3Rpb24uIEl0J3MgYSBjb21tb24gZnVuY3Rpb24sIHdoaWNoIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gQW5kIHllcywgYWJzb2x1dGVseSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enouIENoZWNrc3VtIHZhbGlkYXRpb24gaXMgYSBjbGFzc2ljIGF0dGFjayB2ZWN0b3IsIGFuZCBhIHNoYXJlZCBmdW5jdGlvbiBsaWtlIHRoaXMgaXMgYW4gZXZlbiByaWNoZXIgdGFyZ2V0LlxuXG5Pa2F5LCB0aW1lIHRvIGZvcm11bGF0ZSB0aGUgcmVzcG9uc2UuXG5cbioqV29ydGhGdXp6aW5nOiB0cnVlKipcblxuKipFbmFibGVDb25maWdzOiBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGBJUF9WU19QUk9UT19UQ1BgLCBgSVBfVlNfUFJPVE9fVURQYCoqXG5cbioqRm9jdXNTeW1ib2xzOiBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCwgYGlwX3ZzX2luX2ljbXBfdjZgLCBgaXBfdnNfaW5faWNtcGAsIGBoYW5kbGVfcmVzcG9uc2VfaWNtcGAsIGB0Y3BfY3N1bV9jaGVja2AsIGB1ZHBfY3N1bV9jaGVja2AqKlxuXG4qKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gY2hlY2tzdW0gdmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgSVBWUyBhbmQgdXNlcyBpdCBhY3Jvc3MgVENQLCBVRFAsIGFuZCBJQ01QIHByb3RvY29scy4gSXQgYWxzbyBhZGRzIGNoZWNrc3VtIHZhbGlkYXRpb24gZm9yIGluY29taW5nIElDTVB2NiBwYWNrZXRzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjaGVja3N1bSB2YWxpZGF0aW9uIHBhdGhzIHRvIGVuc3VyZSB0aGV5IGNvcnJlY3RseSBoYW5kbGUgbWFsZm9ybWVkIHBhY2tldHMuIFNwZWNpZmljYWxseSwgdGhlIGNvbW1vbiBmdW5jdGlvbiBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbnMgaW4gZWFjaCBwcm90b2NvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNTMsIk91dHB1dFRva2VucyI6MTgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjIyOjU5Ljg0MjE4ODYwNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4NjY4NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfSVBWNlwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tcIixcbiAgICBcImlwX3ZzX2luX2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX2luX2ljbXBcIixcbiAgICBcImhhbmRsZV9yZXNwb25zZV9pY21wXCIsXG4gICAgXCJ0Y3BfY3N1bV9jaGVja1wiLFxuICAgIFwidWRwX2NzdW1fY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBjaGVja3N1bSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBJUFZTIGFuZCB1c2VzIGl0IGFjcm9zcyBUQ1AsIFVEUCwgYW5kIElDTVAgcHJvdG9jb2xzLiBJdCBhbHNvIGFkZHMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgaW5jb21pbmcgSUNNUHY2IHBhY2tldHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNoZWNrc3VtIHZhbGlkYXRpb24gcGF0aHMgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBtYWxmb3JtZWQgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfSVBWNlwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tcIixcbiAgICBcImlwX3ZzX2luX2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX2luX2ljbXBcIixcbiAgICBcImhhbmRsZV9yZXNwb25zZV9pY21wXCIsXG4gICAgXCJ0Y3BfY3N1bV9jaGVja1wiLFxuICAgIFwidWRwX2NzdW1fY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBjaGVja3N1bSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBJUFZTIGFuZCB1c2VzIGl0IGFjcm9zcyBUQ1AsIFVEUCwgYW5kIElDTVAgcHJvdG9jb2xzLiBJdCBhbHNvIGFkZHMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgaW5jb21pbmcgSUNNUHY2IHBhY2tldHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNoZWNrc3VtIHZhbGlkYXRpb24gcGF0aHMgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBtYWxmb3JtZWQgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow7gz4b[1] Phase: Succeeded StartedAt: 2026-07-10 18:23:11 +0000 UTC FinishedAt: 2026-07-10 18:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-10 18:23:11 +0000 UTC FinishedAt: 2026-07-10 18:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2] Phase: Succeeded StartedAt: 2026-07-10 18:23:11 +0000 UTC FinishedAt: 2026-07-10 22:56:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-10 18:23:11 +0000 UTC FinishedAt: 2026-07-10 22:56:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-10 18:23:11 +0000 UTC FinishedAt: 2026-07-10 18:23:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-10 18:23:11 +0000 UTC FinishedAt: 2026-07-10 18:23:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflow7gz4b/series-workflow7gz4b-convert-artifact-2782136529/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-10 18:23:22 +0000 UTC FinishedAt: 2026-07-10 19:09:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-10 18:23:22 +0000 UTC FinishedAt: 2026-07-10 19:09:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*716e1926-1da4-4aab-b47c-7f492d2b68cb,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-workflow7gz4b/series-workflow7gz4b-convert-artifact-2782136529/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": "35d80952-6685-4fec-9768-e5fd0a2583c7", "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-workflow7gz4b/series-workflow7gz4b-build-action-1356112511/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-10 18:23:22 +0000 UTC FinishedAt: 2026-07-10 19:08:14 +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:*716e1926-1da4-4aab-b47c-7f492d2b68cb,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-workflow7gz4b/series-workflow7gz4b-convert-artifact-2782136529/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": "35d80952-6685-4fec-9768-e5fd0a2583c7", "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-workflow7gz4b/series-workflow7gz4b-build-action-1356112511/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-10 19:09:43 +0000 UTC FinishedAt: 2026-07-10 19:09:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-10 19:09:43 +0000 UTC FinishedAt: 2026-07-10 19:09:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-10 19:09:43 +0000 UTC FinishedAt: 2026-07-10 19:09:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-10 19:09:43 +0000 UTC FinishedAt: 2026-07-10 19:09:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflow7gz4b/series-workflow7gz4b-convert-artifact-757717412/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-10 19:09:55 +0000 UTC FinishedAt: 2026-07-10 19:11:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-10 19:09:55 +0000 UTC FinishedAt: 2026-07-10 19:11:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*35d80952-6685-4fec-9768-e5fd0a2583c7,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-workflow7gz4b/series-workflow7gz4b-build-action-1356112511/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-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-10 19:11:58 +0000 UTC FinishedAt: 2026-07-10 19:11:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-10 19:11:59 +0000 UTC FinishedAt: 2026-07-10 19:11:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-10 19:11:59 +0000 UTC FinishedAt: 2026-07-10 19:50:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-10 19:11:59 +0000 UTC FinishedAt: 2026-07-10 19:50:22 +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:*716e1926-1da4-4aab-b47c-7f492d2b68cb,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-workflow7gz4b/series-workflow7gz4b-convert-artifact-757717412/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": "445d5b49-cf75-4e92-969b-56fae73c6aea", "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-workflow7gz4b/series-workflow7gz4b-build-action-2204651568/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-10 19:11:59 +0000 UTC FinishedAt: 2026-07-10 19:50:11 +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:*716e1926-1da4-4aab-b47c-7f492d2b68cb,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-workflow7gz4b/series-workflow7gz4b-convert-artifact-757717412/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": "445d5b49-cf75-4e92-969b-56fae73c6aea", "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-workflow7gz4b/series-workflow7gz4b-build-action-2204651568/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-10 19:50:22 +0000 UTC FinishedAt: 2026-07-10 19:50:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-10 19:50:22 +0000 UTC FinishedAt: 2026-07-10 19:50:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-10 19:50:22 +0000 UTC FinishedAt: 2026-07-10 19:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-10 19:50:22 +0000 UTC FinishedAt: 2026-07-10 19:52:11 +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:*445d5b49-cf75-4e92-969b-56fae73c6aea,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-workflow7gz4b/series-workflow7gz4b-build-action-2204651568/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-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-10 19:52:22 +0000 UTC FinishedAt: 2026-07-10 22:56:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-10 19:52:22 +0000 UTC FinishedAt: 2026-07-10 22:56:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"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:*35d80952-6685-4fec-9768-e5fd0a2583c7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*445d5b49-cf75-4e92-969b-56fae73c6aea,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-workflow7gz4b/series-workflow7gz4b-build-action-1356112511/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-workflow7gz4b/series-workflow7gz4b-build-action-2204651568/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-10 19:52:22 +0000 UTC FinishedAt: 2026-07-10 19:52:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-10 19:52:22 +0000 UTC FinishedAt: 2026-07-10 19:52:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"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-workflow7gz4b/series-workflow7gz4b-convert-artifact-1617736749/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-10 19:52:22 +0000 UTC FinishedAt: 2026-07-10 19:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-10 19:52:22 +0000 UTC FinishedAt: 2026-07-10 19:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-10 19:52:22 +0000 UTC FinishedAt: 2026-07-10 19:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-10 19:52:36 +0000 UTC FinishedAt: 2026-07-10 22:56:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_in_icmp_v6","ip_vs_in_icmp","handle_response_icmp","tcp_csum_check","udp_csum_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24c4c88259464d38b35c3fbaecb68675de64137d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"466d63c9-f425-47fe-8e44-d28efe77afcf","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-10 19:52:36 +0000 UTC FinishedAt: 2026-07-10 22:56:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*35d80952-6685-4fec-9768-e5fd0a2583c7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*445d5b49-cf75-4e92-969b-56fae73c6aea,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-workflow7gz4b/series-workflow7gz4b-build-action-1356112511/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-workflow7gz4b/series-workflow7gz4b-build-action-2204651568/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-workflow7gz4b/series-workflow7gz4b-convert-artifact-1617736749/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,}