Name: series-workflowq8d6w Phase: Succeeded StartedAt: 2026-07-25 14:10:49 +0000 UTC FinishedAt: 2026-07-25 19:32:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[0] Phase: Succeeded StartedAt: 2026-07-25 14:10:49 +0000 UTC FinishedAt: 2026-07-25 14:56:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 14:10:49 +0000 UTC FinishedAt: 2026-07-25 14:56:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "f00cd452-c5b8-40ce-85e1-03cd72ecb5b7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "shrink_huge_zero_folio_scan", "mm_get_huge_zero_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuJiMzNDssCiAgICAmIzM0O21tX2dldF9odWdlX3plcm9fZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCBieSByZW9yZGVyaW5nIHRoZSB1cGRhdGUgb2YgYGh1Z2VfemVyb19wZm5gIGFuZCB0aGUgY2xlYXJpbmcgb2YgYGh1Z2VfemVyb19mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFjZSBjb25kaXRpb24gaXMgcmVzb2x2ZWQgYW5kIG5vIG5ldyBpc3N1ZXMgYXJlIGludHJvZHVjZWQgZHVyaW5nIFRIUCBzaHJpbmtlciBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwN2E3ZmI0MzAzNzQzMjMwZWNkN2Q2ZDFlOWI3OTYyOGVjMWNhMGYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTQ6NTU6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGI1ZDFlOWQ0NDYzZDAwLi5mY2M0OTIzNjgxNjBkOSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0yOTgsOSAmIzQzOzI5OCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4gXHRcdFx0XHRcdFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4ge1xuIFx0aWYgKGF0b21pY19jbXB4Y2hnKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMSwgMCkgPT0gMSkge1xuLVx0XHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW8gPSB4Y2hnKFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XG4tXHRcdEJVR19PTih6ZXJvX2ZvbGlvID09IE5VTEwpO1xuJiM0MztcdFx0c3RydWN0IGZvbGlvICp6ZXJvX2ZvbGlvO1xuJiM0MztcbiBcdFx0V1JJVEVfT05DRShodWdlX3plcm9fcGZuLCB+MFVMKTtcbiYjNDM7XHRcdHplcm9fZm9saW8gPSB4Y2hnKFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XG4mIzQzO1x0XHRCVUdfT04oemVyb19mb2xpbyA9PSBOVUxMKTtcbiBcdFx0Zm9saW9fcHV0KHplcm9fZm9saW8pO1xuIFx0XHRyZXR1cm4gSFBBR0VfUE1EX05SO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nocmlua19odWdlX3plcm9fZm9saW9fc2NhbiYjMzQ7LAogICAgJiMzNDttbV9nZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgYnkgcmVvcmRlcmluZyB0aGUgdXBkYXRlIG9mIGBodWdlX3plcm9fcGZuYCBhbmQgdGhlIGNsZWFyaW5nIG9mIGBodWdlX3plcm9fZm9saW9gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHJhY2UgY29uZGl0aW9uIGlzIHJlc29sdmVkIGFuZCBubyBuZXcgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIGR1cmluZyBUSFAgc2hyaW5rZXIgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDdhN2ZiNDMwMzc0MzIzMGVjZDdkNmQxZTliNzk2MjhlYzFjYTBmMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDI1IDE0OjU1OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggYjVkMWU5ZDQ0NjNkMDAuLmZjYzQ5MjM2ODE2MGQ5IDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTI5OCw5ICYjNDM7Mjk4LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywKIAkJCQkJCSBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQogewogCWlmIChhdG9taWNfY21weGNoZygmYW1wO2h1Z2VfemVyb19yZWZjb3VudCwgMSwgMCkgPT0gMSkgewotCQlzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW8gPSB4Y2hnKCZhbXA7aHVnZV96ZXJvX2ZvbGlvLCBOVUxMKTsKLQkJQlVHX09OKHplcm9fZm9saW8gPT0gTlVMTCk7CiYjNDM7CQlzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87CiYjNDM7CiAJCVdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgfjBVTCk7CiYjNDM7CQl6ZXJvX2ZvbGlvID0geGNoZygmYW1wO2h1Z2VfemVyb19mb2xpbywgTlVMTCk7CiYjNDM7CQlCVUdfT04oemVyb19mb2xpbyA9PSBOVUxMKTsKIAkJZm9saW9fcHV0KHplcm9fZm9saW8pOwogCQlyZXR1cm4gSFBBR0VfUE1EX05SOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBpbiBtbS9odWdlX21lbW9yeS5jKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vaHVnZV9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSB0aGUgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgZnVuY3Rpb24uIFRoZSBjb2RlJiMzOTtzIGJlaW5nIGNoYW5nZWQgaW4gYSB3YXkgdGhhdCwgYXQgZmlyc3QgZ2xhbmNlLCBzZWVtcyBsaWtlIGEgbWlub3IgcmVvcmRlcmluZy4gVGhleSYjMzk7dmUgc2hpZnRlZCB0aGUgYFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgfjBVTCk7YCBpbnN0cnVjdGlvbiBhaGVhZCBvZiBgemVyb19mb2xpbyA9IHhjaGcoJmFtcDtodWdlX3plcm9fZm9saW8sIE5VTEwpO2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBhIHJhY2UgY29uZGl0aW9uLiBJdCBsb29rcyBsaWtlIGBodWdlX3plcm9fcGZuYCBtaWdodCBoYXZlIGJlZW4gYWNjZXNzZWQgYWZ0ZXIgYGh1Z2VfemVyb19mb2xpb2Agd2FzIHNldCB0byBOVUxMIGJ1dCBiZWZvcmUgYGh1Z2VfemVyb19wZm5gIHdhcyB1cGRhdGVkIHdpdGggdGhlIG5ldyB2YWx1ZS4gVGhlIGNoYW5nZSBpcyBhaW1pbmcgdG8gcHJldmVudCB0aGF0LgoKTm93LCBsZXQmIzM5O3Mgem9vbSBvdXQgYSBiaXQuIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGlzIGEgc2hyaW5rZXIgY2FsbGJhY2ssIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHByZXR0eSBpbnRlZ3JhbCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb2YgaHVnZSBwYWdlcyAoVEhQLCBhY3R1YWxseSkuIENvbnNpZGVyaW5nIGl0cyByb2xlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29uZmlncyBub3cgdG8gZW5zdXJlIHRoaXMgY2hhbmdlIGFuZCB0aGUgbW9kdWxlIGFyZSBlbmFibGVkIGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4gVGhpcyBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19odWdlX3plcm9fZm9saW9fc2NhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0yOTA9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI5Ni1cbm1tL2h1Z2VfbWVtb3J5LmM6Mjk3OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbm1tL2h1Z2VfbWVtb3J5LmMtMjk4LVx0XHRcdFx0XHRcdCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9OTU4PXN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy05OTgtXHRodWdlX3plcm9fZm9saW9fc2hyaW5rZXItXHUwMDNlY291bnRfb2JqZWN0cyA9IHNocmlua19odWdlX3plcm9fZm9saW9fY291bnQ7XG5tbS9odWdlX21lbW9yeS5jOjk5OTpcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci1cdTAwM2VzY2FuX29iamVjdHMgPSBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW47XG5tbS9odWdlX21lbW9yeS5jLTEwMDAtXHRzaHJpbmtlcl9yZWdpc3RlcihodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQsIGdpdmVuIG15IGFzc3VtZWQgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgS2NvbmZpZyBmb3IgSHVnZSBNZW1vcnkgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBkaXJlY3Rpb24gaXMgY2xlYXI6IG15IGF0dGVudGlvbiBuZWVkcyB0byBmb2N1cyBvbiB0aGUgYEtjb25maWdgIGZpbGUgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBgbW0vaHVnZV9tZW1vcnkuY2Agc291cmNlIGZpbGUuIFRoaXMgaW1wbGllcyBhbiBpbnZlc3RpZ2F0aW9uIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGh1Z2UgcGFnZSBzdXBwb3J0LiBJJiMzOTttIGxpa2VseSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29udHJvbCB3aGV0aGVyIG9yIGhvdyB0aGUgY29kZSBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgY29tcGlsZWQgb3IgZW5hYmxlZC4gCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZToKCiogICBXaGF0IGNvbmZpZ3VyYXRpb24gc3ltYm9scyBhcmUgcmVsYXRlZCB0byBodWdlIHBhZ2VzPwoqICAgQXJlIHRoZXJlIG11bHRpcGxlIGh1Z2UgcGFnZSBpbXBsZW1lbnRhdGlvbnMgb3IgaXMgdGhlIGZpbGUgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgZmxhdm9yPwoqICAgSG93IGFyZSB0aGVzZSBzeW1ib2xzIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBLY29uZmlnIGhpZXJhcmNoeT8gQXJlIHRoZXkgdW5kZXIgYSBzcGVjaWZpYyBtZW51IG9yIGZlYXR1cmUgZ3JvdXA/CiogICBXaGF0IGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBtb3N0IGltcG9ydGFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWZmZWN0aW5nIGBtbS9odWdlX21lbW9yeS5jYD8KKiAgIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBlLmcuIG90aGVyIGZlYXR1cmVzIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGZvciBodWdlIHBhZ2Ugc3VwcG9ydCB0byB3b3JrLgoqICAgQXJlIHRoZXJlIGFueSBidWlsZC10aW1lIG9yIHJ1bi10aW1lIG9wdGlvbnMgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24gaW4gYEtjb25maWdgPwoKTXkgZ29hbCBpcyB0byBnYWluIGEgcXVpY2ssIHlldCB0aG9yb3VnaCwgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgc3Vycm91bmRpbmcgdGhlIGh1Z2UgbWVtb3J5IGltcGxlbWVudGF0aW9uLCBhbmQgaG93IHRoZSBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkLiBUaGlzIGluaXRpYWwgc2NhbiBpcyBlc3NlbnRpYWwgZm9yIGFueSBkZWVwZXIgYW5hbHlzaXMgb3IgZGVidWdnaW5nIEkgbWlnaHQgbmVlZCB0byBwZXJmb3JtIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VfbWVtb3J5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3Vzc2luZyBvbiB0aGUgSHVnZSBQYWdlIFNocmlua2VyKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGlzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBJIG5lZWQgdG8gaG9uZSBpbiBvbiBhIGZ1bmN0aW9uIGZvciBmdXp6aW5nLiBJbml0aWFsbHksIEkgc2F3IGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gLiBJdCYjMzk7cyAqc3RhdGljKiwgd2hpY2ggdXN1YWxseSBtZWFucyBpdCYjMzk7cyBpbmxpbmVkIGFuZCB0aGVyZWZvcmUgbm90IGEgZ29vZCB0YXJnZXQgYmVjYXVzZSBpdCBsYWNrcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBCdXQgdGhlIHByb21wdCBzcGVjaWZpZXMgdG8gbG9vayBhdCBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSG9sZCBvbiwgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgKmlzKiBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyBnZXRzIHBhc3NlZCB0byBgaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyLSZndDtzY2FuX29iamVjdHNgLiBUaGF0IG1lYW5zIGl0ICppc24mIzM5O3QqIGlubGluZWQhIEl0cyBhZGRyZXNzIGV4aXN0cywgYW5kIHRoZXJlZm9yZSwgaXQmIzM5O3MgZnV6emVhYmxlLgoKVGhlIG5leHQgcXVlc3Rpb24gaXMsIGNhbiBJIHRyaWdnZXIgaXQ/IEFoLCB5ZXMsIG1lbW9yeSBwcmVzc3VyZSBvciBgZHJvcF9jYWNoZXNgIHNob3VsZCBkbyB0aGUgdHJpY2suIE5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzPyBZZXMsIGB0aHBfc2hyaW5rZXJfaW5pdGAgcmVnaXN0ZXJzIGl0LiBTbywgSSBjYW4gZm9jdXMgb24gYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAuCgpKdXN0IHRvIGNvbmZpcm0sIEkmIzM5O2xsIGRvdWJsZS1jaGVjazogYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgaXMgaW5kZWVkIHN0YXRpYy4gQnV0IGl0IGlzIHVzZWQgYXMgYSBjYWxsYmFjaywgd2hpY2ggbWVhbnMgaXQgd2lsbCBub3QgYmUgaW5saW5lZC4KCkhvd2V2ZXIsIG1heWJlIHRoZXJlIGlzIGFub3RoZXIgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgcmFjZSBjb25kaXRpb24/IFBlcmhhcHMgYGdldF9odWdlX3plcm9fcGFnZWAgd291bGQgYmUgaW50ZXJlc3RpbmcgdG9vPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X2h1Z2VfemVyb19wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE4MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipQb3RlbnRpYWwgUGl0ZmFsbHMgYW5kIFZlcmlmaWNhdGlvbjogWmVybyBQYWdlIEFsbG9jYXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSBqdXN0IHF1aWNrbHkgdHJ5aW5nIHRvIHBpZWNlIHRvZ2V0aGVyIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMsIGFuZCBhIHBvdGVudGlhbCByZWQgZmxhZyBqdXN0IHBvcHBlZCBpbnRvIG15IGhlYWQuIEkgd2FzIHRoaW5raW5nIGFib3V0IGBnZXRfaHVnZV96ZXJvX3BhZ2VgLCBidXQgaGFuZyBvbiBhIHNlY29uZC4uLiBpcyB0aGF0IGFjdHVhbGx5IHRoZSByaWdodCBzeW1ib2wgdG8gYmUgdXNpbmcgaGVyZT8gSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtIG1pZ2h0IGJlIGhhbmRsZWQgZGlmZmVyZW50bHksIG9yIHBlcmhhcHMgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG5hbWUgaXMgc3BlY2lmaWMgdG8gYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlIG9yIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4KCkJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyBwYXRoLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGdldF9odWdlX3plcm9fcGFnZWAgZXZlbiAqZXhpc3RzKiBhcyBleHBlY3RlZC4gTXkgZ3V0IGlzIHRlbGxpbmcgbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBgaHVnZV96ZXJvX3BmbmAgdmFyaWFibGUgaW5zdGVhZC4gTGV0IG1lIGdvIGJhY2sgYW5kIHRyYWNlIHRoYXQgcmVmZXJlbmNlIHF1aWNrbHkuIEkgZG9uJiMzOTt0IHdhbnQgdG8gd2FzdGUgdGltZSBvbiBhIGRlYWQgZW5kLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaWYgSSYjMzk7bSBub3QgdXNpbmcgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBnZXQgYSB6ZXJvZWQgaHVnZSBwYWdlLiBCZXR0ZXIgdG8gYmUgY2VydGFpbiBub3cgcmF0aGVyIHRoYW4gZGVhbCB3aXRoIGEgZGlmZmljdWx0IGRlYnVnZ2luZyBzZXNzaW9uIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlX3plcm9fcGZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTgxPXN0cnVjdCBmb2xpbyAqaHVnZV96ZXJvX2ZvbGlvIF9fcmVhZF9tb3N0bHk7XG5tbS9odWdlX21lbW9yeS5jOjgyOnVuc2lnbmVkIGxvbmcgaHVnZV96ZXJvX3BmbiBfX3JlYWRfbW9zdGx5ID0gfjBVTDtcbm1tL2h1Z2VfbWVtb3J5LmMtODMtdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyBfX3JlYWRfbW9zdGx5O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjI0PXN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI0NS1cdH1cbm1tL2h1Z2VfbWVtb3J5LmM6MjQ2Olx0V1JJVEVfT05DRShodWdlX3plcm9fcGZuLCBmb2xpb19wZm4oemVyb19mb2xpbykpO1xubW0vaHVnZV9tZW1vcnkuYy0yNDctXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yOTc9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzAyLVxubW0vaHVnZV9tZW1vcnkuYzozMDM6XHRcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgfjBVTCk7XG5tbS9odWdlX21lbW9yeS5jLTMwNC1cdFx0emVyb19mb2xpbyA9IHhjaGcoXHUwMDI2aHVnZV96ZXJvX2ZvbGlvLCBOVUxMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc3MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCBhc3N1bWluZyBJJiMzOTttIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsLCBhbmQgdGhlIHRleHQgcmVmZXJzIHRvIGEgZnVuY3Rpb24gbmFtZToKCioqSWRlbnRpZnlpbmcgdGhlIEtleSBGdW5jdGlvbioqCgpSaWdodCwgKnRoYXQmIzM5O3MqIHRoZSBmdW5jdGlvbi4gJiMzNDtnZXRcX2h1Z2VcX3plcm9cX2ZvbGlvJiMzNDsuIE9rYXksIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgYXMgdGhlIGxpa2VseSBlbnRyeSBwb2ludC4gTm93IHRoZSByZWFsIHdvcmsgYmVnaW5zOiBhbmFseXppbmcgKndoYXQqIHRoYXQgZG9lcyBhbmQgKndoeSogaXQmIzM5O3MgbmFtZWQgYXMgc3VjaC4gTmVlZCB0byBkaWcgaW50byBpdHMgbG9naWMsIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBlc3BlY2lhbGx5IHRoZSBkYXRhIGl0IG1hbmlwdWxhdGVzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgJiMzNDtodWdlIHplcm8gZm9saW8mIzM0OyBwYXJ0LiAmIzM0O1plcm8mIzM0OyBpcyBpbnRlcmVzdGluZy4uLiBJcyBpdCB0cnVseSB6ZXJvLCBvciBjb25jZXB0dWFsbHkgemVybyBpbiBzb21lIHdheT8gT3IgcGVyaGFwcyBpdCBpbml0aWFsaXplcyBzb21ldGhpbmcgdG8gemVybz8gVGhlICYjMzQ7aHVnZSYjMzQ7IGltcGxpZXMgc2NhbGUsIHNvIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBhcmUgaW1tZWRpYXRlbHkgZmxhZ2dlZC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTExND11bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjIzLVxubW0vaHVnZV9tZW1vcnkuYzoyMjQ6c3RhdGljIGJvb2wgZ2V0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxubW0vaHVnZV9tZW1vcnkuYy0yMjUte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjU1PXN0YXRpYyB2b2lkIHB1dF9odWdlX3plcm9fZm9saW8odm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI2My1cbm1tL2h1Z2VfbWVtb3J5LmM6MjY0OnN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL2h1Z2VfbWVtb3J5LmMtMjY1LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI3MS1cbm1tL2h1Z2VfbWVtb3J5LmM6MjcyOlx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXG5tbS9odWdlX21lbW9yeS5jLTI3My1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz05NTg9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTk4Mi1cdFx0ICogaHVnZV96ZXJvX2ZvbGlvIHdpbGwgYWx3YXlzIGJlIE5VTEwgb24gZmFpbHVyZS4gV2UgYXNzdW1lXG5tbS9odWdlX21lbW9yeS5jOjk4MzpcdFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xubW0vaHVnZV9tZW1vcnkuYy05ODQtXHRcdCAqIHRocF9zaHJpbmtlcl9pbml0KCkgaXMgaW52b2tlZCBlYXJseSBvbiBkdXJpbmcgYm9vdC5cbm1tL2h1Z2VfbWVtb3J5LmMtOTg1LVx0XHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6OTg2Olx0XHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSlcbm1tL2h1Z2VfbWVtb3J5LmMtOTg3LVx0XHRcdHByX3dhcm4oXCYjMzQ7QWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcXG5cJiMzNDspO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTQ3OD12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTUwMC1cdFx0XHRyZXR1cm4gVk1fRkFVTFRfT09NO1xubW0vaHVnZV9tZW1vcnkuYzoxNTAxOlx0XHR6ZXJvX2ZvbGlvID0gbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyh2bWEtXHUwMDNldm1fbW0pO1xubW0vaHVnZV9tZW1vcnkuYy0xNTAyLVx0XHRpZiAodW5saWtlbHkoIXplcm9fZm9saW8pKSB7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xODY2PWludCBjb3B5X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTkyOS1cdFx0Lypcbm1tL2h1Z2VfbWVtb3J5LmM6MTkzMDpcdFx0ICogbW1fZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbmV2ZXIgYWxsb2NhdGUgYSBuZXdcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzMS1cdFx0ICogZm9saW8gaGVyZSwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEgemVybyBwYWdlIHRvXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xOTMzLVx0XHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MTkzNDpcdFx0bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhkc3RfbW0pO1xubW0vaHVnZV9tZW1vcnkuYy0xOTM1LVx0XHRnb3RvIG91dF96ZXJvX3BhZ2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MzIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRm9jdXNpbmcgb24gSHVnZXBhZ2UgWmVybyBGb2xpb3MgYW5kIFNocmlua2luZyoqCgpSaWdodCwgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIOKAkyB0aGF0JiMzOTtzIG91ciBlbnRyeSBwb2ludCBmdW5jdGlvbiwgdGhlIGtleSBzdGFydGluZyBwb2ludCBmb3IgdGhlIHplcm8gZm9saW8gcHJvY2Vzcy4gQW5kIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIOKAkyB0aGF0JiMzOTtzIHRoZSBzaHJpbmtlciBjYWxsYmFjay4gQm90aCBvZiB0aGVzZSBsb29rIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZGVlcGVyIGluc3BlY3Rpb24uIFRoZXkmIzM5O3JlIGNlbnRyYWwgdG8gdGhlIHdob2xlIG9wZXJhdGlvbi4gR29vZCwgZ29vZC4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGFzcGVjdHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZvY3VzIG9uIGNvbmZpZ3VyYXRpb24gaXMgY29ycmVjdC4gSXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGF0IHBsYXkgaGVyZT8gSXQmIzM5O3Mgb2Z0ZW4gdGhlIHNpbmdsZSBjcml0aWNhbCBzZXR0aW5nLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBpcyB0aGUgb25seSBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04NDUtXG5tbS9LY29uZmlnOjg0NjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTg0Ny1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODY0PWNob2ljZVxuLS1cbm1tL0tjb25maWctODY5LVxubW0vS2NvbmZpZzo4NzA6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg3MS1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3Ni1cbm1tL0tjb25maWc6ODc3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODc4LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg4NS1cbm1tL0tjb25maWc6ODg2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg4Ny1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODkzPWNob2ljZVxuLS1cbm1tL0tjb25maWctOTAyLVxubW0vS2NvbmZpZzo5MDM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MDQtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkxMi1cbm1tL0tjb25maWc6OTEzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkxNC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkyMC1cbm1tL0tjb25maWc6OTIxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTIyLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MjgtXG5tbS9LY29uZmlnOjkyOTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MzAtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05Mzg9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05NDctXG5tbS9LY29uZmlnOjk0ODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTk0OS1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTU2LVxubW0vS2NvbmZpZzo5NTc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTU4LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTY0LVxubW0vS2NvbmZpZzo5NjU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NjYtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk3Mi1cbm1tL0tjb25maWc6OTczOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk3NC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcxMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBMYW5kc2NhcGUqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGhhdCYjMzk7cyB0aGUgY29uZmlnIHZhcmlhYmxlIHdlJiMzOTtyZSBsb29raW5nIGF0LiBPa2F5LCBtYWtlcyBzZW5zZS4gQnV0IGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIGFsd2F5cyBjaGVjayBpZiBvbmUgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsaWVzIG9uIGFub3RoZXIuIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJiMzOTtzIGEgcHJlcmVxdWlzaXRlIGludm9sdmVkIGhlcmUuIEl0JiMzOTtzIGEgcXVpY2sgcmVmbGV4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0NjpcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4NDc6XHRcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIDg0ODpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gODQ5Olx0XHRzZWxlY3QgQ09NUEFDVElPTlxuIDg1MDpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuIDg1MTpcdFx0c2VsZWN0IE1NX0lEXG4gODUyOlx0XHRoZWxwXG4gODUzOlx0XHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbiA4NTQ6XHRcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxuIDg1NTpcdFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cbiA4NTY6XHRcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcbiA4NTc6XHRcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xuIDg1ODpcdFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXG4gODU5Olx0XG4gODYwOlx0XHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxuIDg2MTpcdFxuIDg2MjpcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODYzOlx0XG4gODY0Olx0Y2hvaWNlXG4gODY1Olx0XHRwcm9tcHQgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydCBzeXNmcyBkZWZhdWx0c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTk1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEh1Z2VwYWdlIFplcm8gRm9saW8gT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBhcHByb2FjaCBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlciwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBodWdlcGFnZSB6ZXJvIGZvbGlvIG9wZXJhdGlvbnMuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZW5hYmxlIHRoZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGNvbmZpZywgdGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBzeW1ib2xzIHRvIGNvbmNlbnRyYXRlIHRoZSBmdXp6aW5nIG9uLiBJJiMzOTttIHRoaW5raW5nIHRoZSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgYW5kIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gLgoKQWhhISBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCBpcyAqc3RhdGljKi4gQ2FuIEkgc3RpbGwgbGV2ZXJhZ2UgaXQgYXMgYSBmb2N1cyBzeW1ib2w/IExldCBtZSB0aGluay4uLiB5ZXMsIHN5emthbGxlciAqY2FuKiBmb2N1cyBvbiBzdGF0aWMgZnVuY3Rpb25zLCBwcm92aWRlZCB0aGV5JiMzOTtyZSBub3QgaW5saW5lZC4gVGhhdCYjMzk7cyBhIGdvb2QgZGlzY292ZXJ5LiBJdCBvcGVucyB1cCBvcHBvcnR1bml0aWVzIHRvIHRhcmdldCBtb3JlIHNwZWNpZmljIGludGVybmFsIGZ1bmN0aW9ucy4KCldhaXQgYSBzZWNvbmQsIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCBpc24mIzM5O3Qgc3RhdGljLiBPa2F5LCBubyB3b3JyaWVzLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgZXhwb3J0ZWQuIElmIGl0JiMzOTtzIGV4cG9ydGVkLCB0aGVuIHN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byByZWFjaCBpdC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwIGluIG15IHRob3VnaHQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gdGhlIE5vbi1TdGF0aWMgQXNwZWN0cyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4cG9ydGluZyB0aGlzIHRoaW5nOyBqdXN0IGVuc3VyaW5nIGl0IGlzbiYjMzk7dCBzdGF0aWMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBtb2RpZmljYXRpb24gY2VudGVyZWQgb24gYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAuIEl0JiMzOTtzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBubyBkb3VidC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiBvdGhlciBmdW5jdGlvbnMgYXJlIGludm9sdmVkLgoKUmlnaHQsIEkgc2VlIHRoYXQgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBhbmQgYGNvcHlfaHVnZV9wbWRgIGJvdGggY2FsbCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AuIEFuZCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCwgYXMgd2Uga25vdywgaXMgdGhlIHNocmlua2VyIGNhbGxiYWNrLiBUaGF0IHN1Z2dlc3RzIHRoZSBjb3JlIHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGFuZCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AuIEkgbmVlZCB0byBlbnN1cmUgYSBmdWxsIGFzc2Vzc21lbnQgaGVyZS4KCkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayB0byBjaGVjayB0aGUgdXNhZ2Ugb2YgYGh1Z2VfemVyb19wZm5gIGVsc2V3aGVyZSB0byBjb21wbGV0ZSBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV96ZXJvX3BmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz04MT1zdHJ1Y3QgZm9saW8gKmh1Z2VfemVyb19mb2xpbyBfX3JlYWRfbW9zdGx5O1xubW0vaHVnZV9tZW1vcnkuYzo4Mjp1bnNpZ25lZCBsb25nIGh1Z2VfemVyb19wZm4gX19yZWFkX21vc3RseSA9IH4wVUw7XG5tbS9odWdlX21lbW9yeS5jLTgzLXVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19hbHdheXMgX19yZWFkX21vc3RseTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIyND1zdGF0aWMgYm9vbCBnZXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNDUtXHR9XG5tbS9odWdlX21lbW9yeS5jOjI0NjpcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgZm9saW9fcGZuKHplcm9fZm9saW8pKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjQ3LVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mjk3PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMwMi1cbm1tL2h1Z2VfbWVtb3J5LmM6MzAzOlx0XHRXUklURV9PTkNFKGh1Z2VfemVyb19wZm4sIH4wVUwpO1xubW0vaHVnZV9tZW1vcnkuYy0zMDQtXHRcdHplcm9fZm9saW8gPSB4Y2hnKFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGEgc2Vhc29uZWQga2VybmVsIGRldmVsb3BlcjoKCioqUHJvYmluZyB0aGUgSHVnZSBQYWdlIFplcm8qKgoKUmlnaHQsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIEhhbmcgb24uLi4gaXNuJiMzOTt0IHRoYXQgYGh1Z2VfemVyb19wZm5gIHZhcmlhYmxlLi4uIGlzbiYjMzk7dCBpdCBhbHNvIHV0aWxpemVkIHdpdGhpbiB0aGUgYGlzX2h1Z2VfemVyb19wYWdlYCBhbmQgYGlzX2h1Z2VfemVyb19wbWRgIGZ1bmN0aW9ucz8gSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyB1c2VkIGluIHRob3NlIHBsYWNlcyBhcyB3ZWxsLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIEnigJltIGNvbm5lY3RpbmcgdGhlIGRvdHMgY29ycmVjdGx5LiBUaGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgaG93IHRoZXNlIHplcm8gcGFnZSByZXByZXNlbnRhdGlvbnMgaW50ZXJhY3QuLi4gYW5kIHRoZWlyIHZhcmlvdXMgZnVuY3Rpb25zLiBHb29kIHRvIGNvbmZpcm0gaG93IHRoaXMgaXMgYWxsIGludGVybGlua2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlX3plcm9fcGZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NTM0PWV4dGVybiBzdHJ1Y3QgZm9saW8gKmh1Z2VfemVyb19mb2xpbztcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUzNTpleHRlcm4gdW5zaWduZWQgbG9uZyBodWdlX3plcm9fcGZuO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTM2LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTM3PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19odWdlX3plcm9fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01NDMtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1NDQ6c3RhdGljIGlubGluZSBib29sIGlzX2h1Z2VfemVyb19wZm4odW5zaWduZWQgbG9uZyBwZm4pXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01NDUte1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTQ2Olx0cmV0dXJuIFJFQURfT05DRShodWdlX3plcm9fcGZuKSA9PSAocGZuIFx1MDAyNiB+KEhQQUdFX1BNRF9OUiAtIDEpKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTU0Ny19XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTQ5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19odWdlX3plcm9fcG1kKHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTU1MC17XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1NTE6XHRyZXR1cm4gcG1kX3ByZXNlbnQocG1kKSBcdTAwMjZcdTAwMjYgaXNfaHVnZV96ZXJvX3BmbihwbWRfcGZuKHBtZCkpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTUyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03MzY9c3RhdGljIGlubGluZSBib29sIGlzX2h1Z2VfemVyb19mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTc0MC1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjc0MTpzdGF0aWMgaW5saW5lIGJvb2wgaXNfaHVnZV96ZXJvX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTc0Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDAKCQkJCQkJCW91dHB1dDogMTQ5CgkJCQkJCQl0aG91Z2h0czogNDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRIUCBSYWNlIENvbmRpdGlvbiBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIHRpZWQgdG8gYGh1Z2VfemVyb19wZm5gIGFuZCBgaHVnZV96ZXJvX2ZvbGlvYCwgcGFydGljdWxhcmx5IGFyb3VuZCBgaXNfaHVnZV96ZXJvX3BtZGAuIFRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHRoYXQgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgY291bGQgcG90ZW50aWFsbHkgbnVsbGlmeSBgaHVnZV96ZXJvX2ZvbGlvYCB3aGlsZSBgaHVnZV96ZXJvX3BmbmAgcmVtYWluZWQgdmFsaWQuIFRoaXMgbGVkIHRvIGBpc19odWdlX3plcm9fcG1kYCByZXR1cm5pbmcgYSBmYWxzZSBwb3NpdGl2ZSBmb3IgcGFnZXMgYmVpbmcgZnJlZWQuCgpUaGUgZml4LCBpbiBlc3NlbmNlLCByZW9yZGVycyB0aGluZ3MuIEJ5IHNldHRpbmcgYGh1Z2VfemVyb19wZm5gIHRvIGB+MFVMYCAqYmVmb3JlKiBudWxsaW5nIG91dCBgaHVnZV96ZXJvX2ZvbGlvYCwgd2UgZW5zdXJlIHRoYXQgYGlzX2h1Z2VfemVyb19wbWRgIGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhlIHN0YXRlLCBwcmV2ZW50aW5nIHRoYXQgZmFsc2UgcG9zaXRpdmUgYW5kIGFsbG93aW5nIHRoZSBmb2xpbyB0byBiZSBwcm9wZXJseSBmcmVlZC4gRnVuY3Rpb25hbGx5IHNvdW5kOyBkZWZpbml0ZWx5IGEgcmFjZSBjb25kaXRpb24gZml4LgoKVGhpcyBsb29rcyBsaWtlIGEgc29saWQgZml4LCBzbyBmdXp6aW5nIHRoaXMgaXMgYSBtdXN0LiBgV29ydGhGdXp6aW5nPXRydWVgLgoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgb25lIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYW5kIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYXMgdGhhdCYjMzk7cyB0aGUgY291bnRlcnBhcnQgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2hyaW5rZXIuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZy4gWXVwLCBnb29kLiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZXMgYWxsIHRoZSByaWdodCBjb2RlIHBhdGhzIGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSBoYXZlIGNvbmZpcm1lZCBpdCYjMzk7cyBlbm91Z2guCgpBbHJpZ2h0LCB0aW1lIHRvIHdyaXRlIGEgY2xlYXIgZXhwbGFuYXRpb24gb2YgdGhpczogVGhlIHBhdGNoIGRlYWxzIHdpdGggYSByYWNlIGluIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gLiBJdCBmaXhlcyBhIHBvdGVudGlhbCBjb25mbGljdCBieSByZW9yZGVyaW5nIGhvdyBgaHVnZV96ZXJvX3BmbmAgaXMgdXBkYXRlZCBpbiByZWxhdGlvbiB0byB0aGUgY2xlYXJpbmcgb2YgYGh1Z2VfemVyb19mb2xpb2AuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLiBXZSBzaG91bGQgZnV6eiBpdCB0byBlbnN1cmUgaXQgdHJ1bHkgc29sdmVzIHRoZSByYWNlIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByZWdyZXNzaW9ucyBkdXJpbmcgVEhQIHNocmlua2VyIG9wZXJhdGlvbnMuCgpNeSBmb2N1cyBzaG91bGQgYmU6CiogICBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCAtIHRoZSBtb2RpZmllZCBzaHJpbmtlciBmdW5jdGlvbi4KKiAgIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCAtIHRoZSBodWdlIHplcm8gZm9saW8gYWxsb2NhdGlvbiBmdW5jdGlvbiAocmFjZSBjb25kaXRpb24pLgoKVGhlIHJlbGV2YW50IGNvbmZpZyBpcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4mIzM0OywKICAgICYjMzQ7bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGJ5IHJlb3JkZXJpbmcgdGhlIHVwZGF0ZSBvZiBgaHVnZV96ZXJvX3BmbmAgYW5kIHRoZSBjbGVhcmluZyBvZiBgaHVnZV96ZXJvX2ZvbGlvYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSByYWNlIGNvbmRpdGlvbiBpcyByZXNvbHZlZCBhbmQgbm8gbmV3IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBkdXJpbmcgVEhQIHNocmlua2VyIGV4ZWN1dGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4mIzM0OywKICAgICYjMzQ7bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGJ5IHJlb3JkZXJpbmcgdGhlIHVwZGF0ZSBvZiBgaHVnZV96ZXJvX3BmbmAgYW5kIHRoZSBjbGVhcmluZyBvZiBgaHVnZV96ZXJvX2ZvbGlvYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSByYWNlIGNvbmRpdGlvbiBpcyByZXNvbHZlZCBhbmQgbm8gbmV3IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBkdXJpbmcgVEhQIHNocmlua2VyIGV4ZWN1dGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU1OjU3Ljg0NjE5MDk2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODk5NDg3NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuXCIsXG4gICAgXCJtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCBieSByZW9yZGVyaW5nIHRoZSB1cGRhdGUgb2YgYGh1Z2VfemVyb19wZm5gIGFuZCB0aGUgY2xlYXJpbmcgb2YgYGh1Z2VfemVyb19mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFjZSBjb25kaXRpb24gaXMgcmVzb2x2ZWQgYW5kIG5vIG5ldyBpc3N1ZXMgYXJlIGludHJvZHVjZWQgZHVyaW5nIFRIUCBzaHJpbmtlciBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU1OjU3Ljg0NjE5NzY2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQxMjc2MzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDdhN2ZiNDMwMzc0MzIzMGVjZDdkNmQxZTliNzk2MjhlYzFjYTBmM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAxNDo1NTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IGI1ZDFlOWQ0NDYzZDAwLi5mY2M0OTIzNjgxNjBkOSAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC0yOTgsOSArMjk4LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0aWYgKGF0b21pY19jbXB4Y2hnKFxcdTAwMjZodWdlX3plcm9fcmVmY291bnQsIDEsIDApID09IDEpIHtcXG4tXFx0XFx0c3RydWN0IGZvbGlvICp6ZXJvX2ZvbGlvID0geGNoZyhcXHUwMDI2aHVnZV96ZXJvX2ZvbGlvLCBOVUxMKTtcXG4tXFx0XFx0QlVHX09OKHplcm9fZm9saW8gPT0gTlVMTCk7XFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqemVyb19mb2xpbztcXG4rXFxuIFxcdFxcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgfjBVTCk7XFxuK1xcdFxcdHplcm9fZm9saW8gPSB4Y2hnKFxcdTAwMjZodWdlX3plcm9fZm9saW8sIE5VTEwpO1xcbitcXHRcXHRCVUdfT04oemVyb19mb2xpbyA9PSBOVUxMKTtcXG4gXFx0XFx0Zm9saW9fcHV0KHplcm9fZm9saW8pO1xcbiBcXHRcXHRyZXR1cm4gSFBBR0VfUE1EX05SO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU1OjU4LjM4ODI0NTAwNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ3MzU3NDIyOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuXCIsXG4gICAgXCJtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCBieSByZW9yZGVyaW5nIHRoZSB1cGRhdGUgb2YgYGh1Z2VfemVyb19wZm5gIGFuZCB0aGUgY2xlYXJpbmcgb2YgYGh1Z2VfemVyb19mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFjZSBjb25kaXRpb24gaXMgcmVzb2x2ZWQgYW5kIG5vIG5ldyBpc3N1ZXMgYXJlIGludHJvZHVjZWQgZHVyaW5nIFRIUCBzaHJpbmtlciBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA3YTdmYjQzMDM3NDMyMzBlY2Q3ZDZkMWU5Yjc5NjI4ZWMxY2EwZjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAxNDo1NTo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBiNWQxZTlkNDQ2M2QwMC4uZmNjNDkyMzY4MTYwZDkgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMjk4LDkgKzI5OCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4gXHRcdFx0XHRcdFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4ge1xuIFx0aWYgKGF0b21pY19jbXB4Y2hnKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMSwgMCkgPT0gMSkge1xuLVx0XHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW8gPSB4Y2hnKFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XG4tXHRcdEJVR19PTih6ZXJvX2ZvbGlvID09IE5VTEwpO1xuK1x0XHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87XG4rXG4gXHRcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgfjBVTCk7XG4rXHRcdHplcm9fZm9saW8gPSB4Y2hnKFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XG4rXHRcdEJVR19PTih6ZXJvX2ZvbGlvID09IE5VTEwpO1xuIFx0XHRmb2xpb19wdXQoemVyb19mb2xpbyk7XG4gXHRcdHJldHVybiBIUEFHRV9QTURfTlI7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDo1NTo1OC4zODgyNTcxNDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mzk2ODgzMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGluIG1tL2h1Z2VfbWVtb3J5LmMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vaHVnZV9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSB0aGUgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgZnVuY3Rpb24uIFRoZSBjb2RlJ3MgYmVpbmcgY2hhbmdlZCBpbiBhIHdheSB0aGF0LCBhdCBmaXJzdCBnbGFuY2UsIHNlZW1zIGxpa2UgYSBtaW5vciByZW9yZGVyaW5nLiBUaGV5J3ZlIHNoaWZ0ZWQgdGhlIGBXUklURV9PTkNFKGh1Z2VfemVyb19wZm4sIH4wVUwpO2AgaW5zdHJ1Y3Rpb24gYWhlYWQgb2YgYHplcm9fZm9saW8gPSB4Y2hnKFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGEgcmFjZSBjb25kaXRpb24uIEl0IGxvb2tzIGxpa2UgYGh1Z2VfemVyb19wZm5gIG1pZ2h0IGhhdmUgYmVlbiBhY2Nlc3NlZCBhZnRlciBgaHVnZV96ZXJvX2ZvbGlvYCB3YXMgc2V0IHRvIE5VTEwgYnV0IGJlZm9yZSBgaHVnZV96ZXJvX3BmbmAgd2FzIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IHZhbHVlLiBUaGUgY2hhbmdlIGlzIGFpbWluZyB0byBwcmV2ZW50IHRoYXQuXG5cbk5vdywgbGV0J3Mgem9vbSBvdXQgYSBiaXQuIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGlzIGEgc2hyaW5rZXIgY2FsbGJhY2ssIHdoaWNoIG1lYW5zIGl0J3MgcHJldHR5IGludGVncmFsIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiBodWdlIHBhZ2VzIChUSFAsIGFjdHVhbGx5KS4gQ29uc2lkZXJpbmcgaXRzIHJvbGUgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgSSdkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNvbmZpZ3Mgbm93IHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBhbmQgdGhlIG1vZHVsZSBhcmUgZW5hYmxlZCBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIFRoaXMgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucywgc28gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6NTY6MDMuNzg1MTQyMjU0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTUyMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19odWdlX3plcm9fZm9saW9fc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MjkwPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI5Ni1cXG5tbS9odWdlX21lbW9yeS5jOjI5NzpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxubW0vaHVnZV9tZW1vcnkuYy0yOTgtXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTk1OD1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy05OTgtXFx0aHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyLVxcdTAwM2Vjb3VudF9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudDtcXG5tbS9odWdlX21lbW9yeS5jOjk5OTpcXHRodWdlX3plcm9fZm9saW9fc2hyaW5rZXItXFx1MDAzZXNjYW5fb2JqZWN0cyA9IHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbjtcXG5tbS9odWdlX21lbW9yeS5jLTEwMDAtXFx0c2hyaW5rZXJfcmVnaXN0ZXIoaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6NTY6MDMuODQzNjk4Nzc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczNjgzMTIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQsIGdpdmVuIG15IGFzc3VtZWQgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyBLY29uZmlnIGZvciBIdWdlIE1lbW9yeSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgZGlyZWN0aW9uIGlzIGNsZWFyOiBteSBhdHRlbnRpb24gbmVlZHMgdG8gZm9jdXMgb24gdGhlIGBLY29uZmlnYCBmaWxlIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgaXQgcmVsYXRlcyB0byB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIHNvdXJjZSBmaWxlLiBUaGlzIGltcGxpZXMgYW4gaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBodWdlIHBhZ2Ugc3VwcG9ydC4gSSdtIGxpa2VseSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29udHJvbCB3aGV0aGVyIG9yIGhvdyB0aGUgY29kZSBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgY29tcGlsZWQgb3IgZW5hYmxlZC4gXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOlxuXG4qICAgV2hhdCBjb25maWd1cmF0aW9uIHN5bWJvbHMgYXJlIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcz9cbiogICBBcmUgdGhlcmUgbXVsdGlwbGUgaHVnZSBwYWdlIGltcGxlbWVudGF0aW9ucyBvciBpcyB0aGUgZmlsZSByZWxhdGVkIHRvIGEgcGFydGljdWxhciBmbGF2b3I/XG4qICAgSG93IGFyZSB0aGVzZSBzeW1ib2xzIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBLY29uZmlnIGhpZXJhcmNoeT8gQXJlIHRoZXkgdW5kZXIgYSBzcGVjaWZpYyBtZW51IG9yIGZlYXR1cmUgZ3JvdXA/XG4qICAgV2hhdCBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgbW9zdCBpbXBvcnRhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFmZmVjdGluZyBgbW0vaHVnZV9tZW1vcnkuY2A/XG4qICAgQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IGUuZy4gb3RoZXIgZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIGh1Z2UgcGFnZSBzdXBwb3J0IHRvIHdvcmsuXG4qICAgQXJlIHRoZXJlIGFueSBidWlsZC10aW1lIG9yIHJ1bi10aW1lIG9wdGlvbnMgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24gaW4gYEtjb25maWdgP1xuXG5NeSBnb2FsIGlzIHRvIGdhaW4gYSBxdWljaywgeWV0IHRob3JvdWdoLCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBzdXJyb3VuZGluZyB0aGUgaHVnZSBtZW1vcnkgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgdGhlIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQuIFRoaXMgaW5pdGlhbCBzY2FuIGlzIGVzc2VudGlhbCBmb3IgYW55IGRlZXBlciBhbmFseXNpcyBvciBkZWJ1Z2dpbmcgSSBtaWdodCBuZWVkIHRvIHBlcmZvcm0gbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDo1NjowNy41ODA1MzMwOTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcyOTI2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZV9tZW1vcnkub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDo1NjowNy42Njc4MzE2MTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjgwNzMxMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3Vzc2luZyBvbiB0aGUgSHVnZSBQYWdlIFNocmlua2VyKipcblxuT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIEkgbmVlZCB0byBob25lIGluIG9uIGEgZnVuY3Rpb24gZm9yIGZ1enppbmcuIEluaXRpYWxseSwgSSBzYXcgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAuIEl0J3MgKnN0YXRpYyosIHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQncyBpbmxpbmVkIGFuZCB0aGVyZWZvcmUgbm90IGEgZ29vZCB0YXJnZXQgYmVjYXVzZSBpdCBsYWNrcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBCdXQgdGhlIHByb21wdCBzcGVjaWZpZXMgdG8gbG9vayBhdCBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSG9sZCBvbiwgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgKmlzKiBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyBnZXRzIHBhc3NlZCB0byBgaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0c2AuIFRoYXQgbWVhbnMgaXQgKmlzbid0KiBpbmxpbmVkISBJdHMgYWRkcmVzcyBleGlzdHMsIGFuZCB0aGVyZWZvcmUsIGl0J3MgZnV6emVhYmxlLlxuXG5UaGUgbmV4dCBxdWVzdGlvbiBpcywgY2FuIEkgdHJpZ2dlciBpdD8gQWgsIHllcywgbWVtb3J5IHByZXNzdXJlIG9yIGBkcm9wX2NhY2hlc2Agc2hvdWxkIGRvIHRoZSB0cmljay4gTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXM/IFllcywgYHRocF9zaHJpbmtlcl9pbml0YCByZWdpc3RlcnMgaXQuIFNvLCBJIGNhbiBmb2N1cyBvbiBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYC5cblxuSnVzdCB0byBjb25maXJtLCBJJ2xsIGRvdWJsZS1jaGVjazogYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgaXMgaW5kZWVkIHN0YXRpYy4gQnV0IGl0IGlzIHVzZWQgYXMgYSBjYWxsYmFjaywgd2hpY2ggbWVhbnMgaXQgd2lsbCBub3QgYmUgaW5saW5lZC5cblxuSG93ZXZlciwgbWF5YmUgdGhlcmUgaXMgYW5vdGhlciBmdW5jdGlvbiByZWxhdGVkIHRvIHRoZSByYWNlIGNvbmRpdGlvbj8gUGVyaGFwcyBgZ2V0X2h1Z2VfemVyb19wYWdlYCB3b3VsZCBiZSBpbnRlcmVzdGluZyB0b28/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6NTY6MTIuOTQ4NTY1NzE3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMzMzMjE1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfaHVnZV96ZXJvX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6NTY6MTMuMDA5OTE0NzUyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMjMxMDgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlBvdGVudGlhbCBQaXRmYWxscyBhbmQgVmVyaWZpY2F0aW9uOiBaZXJvIFBhZ2UgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIEknbSBqdXN0IHF1aWNrbHkgdHJ5aW5nIHRvIHBpZWNlIHRvZ2V0aGVyIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMsIGFuZCBhIHBvdGVudGlhbCByZWQgZmxhZyBqdXN0IHBvcHBlZCBpbnRvIG15IGhlYWQuIEkgd2FzIHRoaW5raW5nIGFib3V0IGBnZXRfaHVnZV96ZXJvX3BhZ2VgLCBidXQgaGFuZyBvbiBhIHNlY29uZC4uLiBpcyB0aGF0IGFjdHVhbGx5IHRoZSByaWdodCBzeW1ib2wgdG8gYmUgdXNpbmcgaGVyZT8gSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtIG1pZ2h0IGJlIGhhbmRsZWQgZGlmZmVyZW50bHksIG9yIHBlcmhhcHMgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG5hbWUgaXMgc3BlY2lmaWMgdG8gYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlIG9yIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS5cblxuQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHBhdGgsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgZ2V0X2h1Z2VfemVyb19wYWdlYCBldmVuICpleGlzdHMqIGFzIGV4cGVjdGVkLiBNeSBndXQgaXMgdGVsbGluZyBtZSB0byBkb3VibGUtY2hlY2sgdGhlIGBodWdlX3plcm9fcGZuYCB2YXJpYWJsZSBpbnN0ZWFkLiBMZXQgbWUgZ28gYmFjayBhbmQgdHJhY2UgdGhhdCByZWZlcmVuY2UgcXVpY2tseS4gSSBkb24ndCB3YW50IHRvIHdhc3RlIHRpbWUgb24gYSBkZWFkIGVuZCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGlmIEknbSBub3QgdXNpbmcgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBnZXQgYSB6ZXJvZWQgaHVnZSBwYWdlLiBCZXR0ZXIgdG8gYmUgY2VydGFpbiBub3cgcmF0aGVyIHRoYW4gZGVhbCB3aXRoIGEgZGlmZmljdWx0IGRlYnVnZ2luZyBzZXNzaW9uIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTgwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6NTY6MTYuNDQyMjI3NDU1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjI2MTYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX3plcm9fcGZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz04MT1zdHJ1Y3QgZm9saW8gKmh1Z2VfemVyb19mb2xpbyBfX3JlYWRfbW9zdGx5O1xcbm1tL2h1Z2VfbWVtb3J5LmM6ODI6dW5zaWduZWQgbG9uZyBodWdlX3plcm9fcGZuIF9fcmVhZF9tb3N0bHkgPSB+MFVMO1xcbm1tL2h1Z2VfbWVtb3J5LmMtODMtdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyBfX3JlYWRfbW9zdGx5O1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yMjQ9c3RhdGljIGJvb2wgZ2V0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNDUtXFx0fVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjQ2OlxcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgZm9saW9fcGZuKHplcm9fZm9saW8pKTtcXG5tbS9odWdlX21lbW9yeS5jLTI0Ny1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mjk3PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzAyLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzAzOlxcdFxcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgfjBVTCk7XFxubW0vaHVnZV9tZW1vcnkuYy0zMDQtXFx0XFx0emVyb19mb2xpbyA9IHhjaGcoXFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU2OjE2LjUwNDUwNTgxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTM0MDE1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSdtIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsLCBhbmQgdGhlIHRleHQgcmVmZXJzIHRvIGEgZnVuY3Rpb24gbmFtZTpcblxuKipJZGVudGlmeWluZyB0aGUgS2V5IEZ1bmN0aW9uKipcblxuUmlnaHQsICp0aGF0J3MqIHRoZSBmdW5jdGlvbi4gXCJnZXRcXF9odWdlXFxfemVyb1xcX2ZvbGlvXCIuIE9rYXksIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgYXMgdGhlIGxpa2VseSBlbnRyeSBwb2ludC4gTm93IHRoZSByZWFsIHdvcmsgYmVnaW5zOiBhbmFseXppbmcgKndoYXQqIHRoYXQgZG9lcyBhbmQgKndoeSogaXQncyBuYW1lZCBhcyBzdWNoLiBOZWVkIHRvIGRpZyBpbnRvIGl0cyBsb2dpYywgaXRzIGRlcGVuZGVuY2llcywgYW5kIGVzcGVjaWFsbHkgdGhlIGRhdGEgaXQgbWFuaXB1bGF0ZXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBcImh1Z2UgemVybyBmb2xpb1wiIHBhcnQuIFwiWmVyb1wiIGlzIGludGVyZXN0aW5nLi4uIElzIGl0IHRydWx5IHplcm8sIG9yIGNvbmNlcHR1YWxseSB6ZXJvIGluIHNvbWUgd2F5PyBPciBwZXJoYXBzIGl0IGluaXRpYWxpemVzIHNvbWV0aGluZyB0byB6ZXJvPyBUaGUgXCJodWdlXCIgaW1wbGllcyBzY2FsZSwgc28gcG90ZW50aWFsIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGFyZSBpbW1lZGlhdGVseSBmbGFnZ2VkLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU2OjE5LjM5NzkwOTQ5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0ODU5NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X2h1Z2VfemVyb19mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MTE0PXVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIyMy1cXG5tbS9odWdlX21lbW9yeS5jOjIyNDpzdGF0aWMgYm9vbCBnZXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXFxubW0vaHVnZV9tZW1vcnkuYy0yMjUte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNTU9c3RhdGljIHZvaWQgcHV0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNjMtXFxubW0vaHVnZV9tZW1vcnkuYzoyNjQ6c3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjY1LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjcxLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjcyOlxcdGlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjczLVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz05NTg9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtOTgyLVxcdFxcdCAqIGh1Z2VfemVyb19mb2xpbyB3aWxsIGFsd2F5cyBiZSBOVUxMIG9uIGZhaWx1cmUuIFdlIGFzc3VtZVxcbm1tL2h1Z2VfbWVtb3J5LmM6OTgzOlxcdFxcdCAqIHRoYXQgZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbW9zdCBsaWtlbHkgbm90IGZhaWwgYXNcXG5tbS9odWdlX21lbW9yeS5jLTk4NC1cXHRcXHQgKiB0aHBfc2hyaW5rZXJfaW5pdCgpIGlzIGludm9rZWQgZWFybHkgb24gZHVyaW5nIGJvb3QuXFxubW0vaHVnZV9tZW1vcnkuYy05ODUtXFx0XFx0ICovXFxubW0vaHVnZV9tZW1vcnkuYzo5ODY6XFx0XFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXFxubW0vaHVnZV9tZW1vcnkuYy05ODctXFx0XFx0XFx0cHJfd2FybihcXFwiQWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcXFxcblxcXCIpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNDc4PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1MDAtXFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX09PTTtcXG5tbS9odWdlX21lbW9yeS5jOjE1MDE6XFx0XFx0emVyb19mb2xpbyA9IG1tX2dldF9odWdlX3plcm9fZm9saW8odm1hLVxcdTAwM2V2bV9tbSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xNTAyLVxcdFxcdGlmICh1bmxpa2VseSghemVyb19mb2xpbykpIHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTg2Nj1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkyOS1cXHRcXHQvKlxcbm1tL2h1Z2VfbWVtb3J5LmM6MTkzMDpcXHRcXHQgKiBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBuZXZlciBhbGxvY2F0ZSBhIG5ld1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzMS1cXHRcXHQgKiBmb2xpbyBoZXJlLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSB6ZXJvIHBhZ2UgdG9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzMy1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjE5MzQ6XFx0XFx0bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhkc3RfbW0pO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNS1cXHRcXHRnb3RvIG91dF96ZXJvX3BhZ2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU2OjE5LjQ2MTQwMDYyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI5NjE4NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRm9jdXNpbmcgb24gSHVnZXBhZ2UgWmVybyBGb2xpb3MgYW5kIFNocmlua2luZyoqXG5cblJpZ2h0LCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2Ag4oCTIHRoYXQncyBvdXIgZW50cnkgcG9pbnQgZnVuY3Rpb24sIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSB6ZXJvIGZvbGlvIHByb2Nlc3MuIEFuZCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCDigJMgdGhhdCdzIHRoZSBzaHJpbmtlciBjYWxsYmFjay4gQm90aCBvZiB0aGVzZSBsb29rIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZGVlcGVyIGluc3BlY3Rpb24uIFRoZXkncmUgY2VudHJhbCB0byB0aGUgd2hvbGUgb3BlcmF0aW9uLiBHb29kLCBnb29kLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBhc3BlY3RzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmb2N1cyBvbiBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3QuIElzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIG9wdGlvbiBhdCBwbGF5IGhlcmU/IEl0J3Mgb2Z0ZW4gdGhlIHNpbmdsZSBjcml0aWNhbCBzZXR0aW5nLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBpcyB0aGUgb25seSBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDo1NjoyMi44OTEwMjE2MjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTcxODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9ODQzPWNvbmZpZyBNTV9JRFxcbi0tXFxubW0vS2NvbmZpZy04NDUtXFxubW0vS2NvbmZpZzo4NDY6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODQ3LVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg2ND1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODY5LVxcbm1tL0tjb25maWc6ODcwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg3MS1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg3Ni1cXG5tbS9LY29uZmlnOjg3NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxcbm1tL0tjb25maWctODc4LVxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg4NS1cXG5tbS9LY29uZmlnOjg4NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg4Ny1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODkzPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MDItXFxubW0vS2NvbmZpZzo5MDM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkwNC1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTEyLVxcbm1tL0tjb25maWc6OTEzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTE0LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTIwLVxcbm1tL0tjb25maWc6OTIxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05MjItXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkyOC1cXG5tbS9LY29uZmlnOjkyOTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTkzMC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTkzOD1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTQ3LVxcbm1tL0tjb25maWc6OTQ4OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05NDktXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1Ni1cXG5tbS9LY29uZmlnOjk1NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTk1OC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk2NC1cXG5tbS9LY29uZmlnOjk2NTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTY2LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NzItXFxubW0vS2NvbmZpZzo5NzM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05NzQtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDo1NjoyMi45NTAxOTc5MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ2OTUxMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgTGFuZHNjYXBlKipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0J3MgdGhlIGNvbmZpZyB2YXJpYWJsZSB3ZSdyZSBsb29raW5nIGF0LiBPa2F5LCBtYWtlcyBzZW5zZS4gQnV0IGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIGFsd2F5cyBjaGVjayBpZiBvbmUgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsaWVzIG9uIGFub3RoZXIuIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJ3MgYSBwcmVyZXF1aXNpdGUgaW52b2x2ZWQgaGVyZS4gSXQncyBhIHF1aWNrIHJlZmxleC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcxMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU2OjI2LjA5NzE1MTQyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDY6XFx0bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4NDc6XFx0XFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4gODQ4OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFxcdTAwMjZcXHUwMDI2ICFQUkVFTVBUX1JUXFxuIDg0OTpcXHRcXHRzZWxlY3QgQ09NUEFDVElPTlxcbiA4NTA6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbiA4NTE6XFx0XFx0c2VsZWN0IE1NX0lEXFxuIDg1MjpcXHRcXHRoZWxwXFxuIDg1MzpcXHRcXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcXG4gODU0OlxcdFxcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxcbiA4NTU6XFx0XFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cXG4gODU2OlxcdFxcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcXG4gODU3OlxcdFxcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xcbiA4NTg6XFx0XFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXFxuIDg1OTpcXHRcXG4gODYwOlxcdFxcdCAgSWYgbWVtb3J5IGNvbnN0cmFpbmVkIG9uIGVtYmVkZGVkLCB5b3UgbWF5IHdhbnQgdG8gc2F5IE4uXFxuIDg2MTpcXHRcXG4gODYyOlxcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDg2MzpcXHRcXG4gODY0OlxcdGNob2ljZVxcbiA4NjU6XFx0XFx0cHJvbXB0IFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0IHN5c2ZzIGRlZmF1bHRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDo1NjoyNi4wOTczMDUzNjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1OTI0NzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBIdWdlcGFnZSBaZXJvIEZvbGlvIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGFwcHJvYWNoIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGh1Z2VwYWdlIHplcm8gZm9saW8gb3BlcmF0aW9ucy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byBlbmFibGUgdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29uZmlnLCB0aGF0J3MgYSBnaXZlbi4gTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgc3ltYm9scyB0byBjb25jZW50cmF0ZSB0aGUgZnV6emluZyBvbi4gSSdtIHRoaW5raW5nIHRoZSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgYW5kIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gLlxuXG5BaGEhIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGlzICpzdGF0aWMqLiBDYW4gSSBzdGlsbCBsZXZlcmFnZSBpdCBhcyBhIGZvY3VzIHN5bWJvbD8gTGV0IG1lIHRoaW5rLi4uIHllcywgc3l6a2FsbGVyICpjYW4qIGZvY3VzIG9uIHN0YXRpYyBmdW5jdGlvbnMsIHByb3ZpZGVkIHRoZXkncmUgbm90IGlubGluZWQuIFRoYXQncyBhIGdvb2QgZGlzY292ZXJ5LiBJdCBvcGVucyB1cCBvcHBvcnR1bml0aWVzIHRvIHRhcmdldCBtb3JlIHNwZWNpZmljIGludGVybmFsIGZ1bmN0aW9ucy5cblxuV2FpdCBhIHNlY29uZCwgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIGlzbid0IHN0YXRpYy4gT2theSwgbm8gd29ycmllcy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIGlzIGV4cG9ydGVkLiBJZiBpdCdzIGV4cG9ydGVkLCB0aGVuIHN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byByZWFjaCBpdC4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAgaW4gbXkgdGhvdWdodCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTk1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6NTY6MzAuMTU2NTU0Nzg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDE3ODEwNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbW1fZ2V0X2h1Z2VfemVyb19mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDo1NjozMC4yMTY3NDE4MjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzMzI3OTUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiB0aGUgTm9uLVN0YXRpYyBBc3BlY3RzIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4cG9ydGluZyB0aGlzIHRoaW5nOyBqdXN0IGVuc3VyaW5nIGl0IGlzbid0IHN0YXRpYy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiBjZW50ZXJlZCBvbiBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYC4gSXQncyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgbm8gZG91YnQuIExldCdzIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiBvdGhlciBmdW5jdGlvbnMgYXJlIGludm9sdmVkLlxuXG5SaWdodCwgSSBzZWUgdGhhdCBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgIGFuZCBgY29weV9odWdlX3BtZGAgYm90aCBjYWxsIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYC4gQW5kIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gLCBhcyB3ZSBrbm93LCBpcyB0aGUgc2hyaW5rZXIgY2FsbGJhY2suIFRoYXQgc3VnZ2VzdHMgdGhlIGNvcmUgc3ltYm9scyB0byBmb2N1cyBvbiBhcmUgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgYW5kIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYC4gSSBuZWVkIHRvIGVuc3VyZSBhIGZ1bGwgYXNzZXNzbWVudCBoZXJlLlxuXG5MZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgdG8gY2hlY2sgdGhlIHVzYWdlIG9mIGBodWdlX3plcm9fcGZuYCBlbHNld2hlcmUgdG8gY29tcGxldGUgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MzcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6NTY6MzQuMjUwMDI0MTI1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODUzNDAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX3plcm9fcGZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz04MT1zdHJ1Y3QgZm9saW8gKmh1Z2VfemVyb19mb2xpbyBfX3JlYWRfbW9zdGx5O1xcbm1tL2h1Z2VfbWVtb3J5LmM6ODI6dW5zaWduZWQgbG9uZyBodWdlX3plcm9fcGZuIF9fcmVhZF9tb3N0bHkgPSB+MFVMO1xcbm1tL2h1Z2VfbWVtb3J5LmMtODMtdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyBfX3JlYWRfbW9zdGx5O1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yMjQ9c3RhdGljIGJvb2wgZ2V0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNDUtXFx0fVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjQ2OlxcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgZm9saW9fcGZuKHplcm9fZm9saW8pKTtcXG5tbS9odWdlX21lbW9yeS5jLTI0Ny1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mjk3PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzAyLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzAzOlxcdFxcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgfjBVTCk7XFxubW0vaHVnZV9tZW1vcnkuYy0zMDQtXFx0XFx0emVyb19mb2xpbyA9IHhjaGcoXFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU2OjM0LjMwODU2MzM1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjc4NTE1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYSBzZWFzb25lZCBrZXJuZWwgZGV2ZWxvcGVyOlxuXG4qKlByb2JpbmcgdGhlIEh1Z2UgUGFnZSBaZXJvKipcblxuUmlnaHQsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIEhhbmcgb24uLi4gaXNuJ3QgdGhhdCBgaHVnZV96ZXJvX3BmbmAgdmFyaWFibGUuLi4gaXNuJ3QgaXQgYWxzbyB1dGlsaXplZCB3aXRoaW4gdGhlIGBpc19odWdlX3plcm9fcGFnZWAgYW5kIGBpc19odWdlX3plcm9fcG1kYCBmdW5jdGlvbnM/IEkgc2VlbSB0byByZWNhbGwgaXQgYmVpbmcgdXNlZCBpbiB0aG9zZSBwbGFjZXMgYXMgd2VsbC4gSnVzdCB3YW50IHRvIG1ha2Ugc3VyZSBJ4oCZbSBjb25uZWN0aW5nIHRoZSBkb3RzIGNvcnJlY3RseS4gVGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIG9mIGhvdyB0aGVzZSB6ZXJvIHBhZ2UgcmVwcmVzZW50YXRpb25zIGludGVyYWN0Li4uIGFuZCB0aGVpciB2YXJpb3VzIGZ1bmN0aW9ucy4gR29vZCB0byBjb25maXJtIGhvdyB0aGlzIGlzIGFsbCBpbnRlcmxpbmtlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM0NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU2OjM3LjM3NjQxNzI0M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxMzg5MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZV96ZXJvX3BmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01MzQ9ZXh0ZXJuIHN0cnVjdCBmb2xpbyAqaHVnZV96ZXJvX2ZvbGlvO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUzNTpleHRlcm4gdW5zaWduZWQgbG9uZyBodWdlX3plcm9fcGZuO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUzNi1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01Mzc9c3RhdGljIGlubGluZSBib29sIGlzX2h1Z2VfemVyb19mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTQzLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjU0NDpzdGF0aWMgaW5saW5lIGJvb2wgaXNfaHVnZV96ZXJvX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01NDUte1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjU0NjpcXHRyZXR1cm4gUkVBRF9PTkNFKGh1Z2VfemVyb19wZm4pID09IChwZm4gXFx1MDAyNiB+KEhQQUdFX1BNRF9OUiAtIDEpKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01NDctfVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTQ5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19odWdlX3plcm9fcG1kKHBtZF90IHBtZClcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01NTAte1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjU1MTpcXHRyZXR1cm4gcG1kX3ByZXNlbnQocG1kKSBcXHUwMDI2XFx1MDAyNiBpc19odWdlX3plcm9fcGZuKHBtZF9wZm4ocG1kKSk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTUyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTczNj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfaHVnZV96ZXJvX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03NDAtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NzQxOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19odWdlX3plcm9fcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTc0Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU2OjM3LjQzNTU2MDAwOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjIxNzc0MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRIUCBSYWNlIENvbmRpdGlvbiBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIHRpZWQgdG8gYGh1Z2VfemVyb19wZm5gIGFuZCBgaHVnZV96ZXJvX2ZvbGlvYCwgcGFydGljdWxhcmx5IGFyb3VuZCBgaXNfaHVnZV96ZXJvX3BtZGAuIFRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHRoYXQgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgY291bGQgcG90ZW50aWFsbHkgbnVsbGlmeSBgaHVnZV96ZXJvX2ZvbGlvYCB3aGlsZSBgaHVnZV96ZXJvX3BmbmAgcmVtYWluZWQgdmFsaWQuIFRoaXMgbGVkIHRvIGBpc19odWdlX3plcm9fcG1kYCByZXR1cm5pbmcgYSBmYWxzZSBwb3NpdGl2ZSBmb3IgcGFnZXMgYmVpbmcgZnJlZWQuXG5cblRoZSBmaXgsIGluIGVzc2VuY2UsIHJlb3JkZXJzIHRoaW5ncy4gQnkgc2V0dGluZyBgaHVnZV96ZXJvX3BmbmAgdG8gYH4wVUxgICpiZWZvcmUqIG51bGxpbmcgb3V0IGBodWdlX3plcm9fZm9saW9gLCB3ZSBlbnN1cmUgdGhhdCBgaXNfaHVnZV96ZXJvX3BtZGAgYWNjdXJhdGVseSByZWZsZWN0cyB0aGUgc3RhdGUsIHByZXZlbnRpbmcgdGhhdCBmYWxzZSBwb3NpdGl2ZSBhbmQgYWxsb3dpbmcgdGhlIGZvbGlvIHRvIGJlIHByb3Blcmx5IGZyZWVkLiBGdW5jdGlvbmFsbHkgc291bmQ7IGRlZmluaXRlbHkgYSByYWNlIGNvbmRpdGlvbiBmaXguXG5cblRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZpeCwgc28gZnV6emluZyB0aGlzIGlzIGEgbXVzdC4gYFdvcnRoRnV6emluZz10cnVlYC5cblxuU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmUgdGhhdCdzIGJlZW4gbW9kaWZpZWQsIGFuZCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGFzIHRoYXQncyB0aGUgY291bnRlcnBhcnQgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2hyaW5rZXIuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnLiBZdXAsIGdvb2QuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZW5hYmxlcyBhbGwgdGhlIHJpZ2h0IGNvZGUgcGF0aHMgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBJIGhhdmUgY29uZmlybWVkIGl0J3MgZW5vdWdoLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHdyaXRlIGEgY2xlYXIgZXhwbGFuYXRpb24gb2YgdGhpczogVGhlIHBhdGNoIGRlYWxzIHdpdGggYSByYWNlIGluIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gLiBJdCBmaXhlcyBhIHBvdGVudGlhbCBjb25mbGljdCBieSByZW9yZGVyaW5nIGhvdyBgaHVnZV96ZXJvX3BmbmAgaXMgdXBkYXRlZCBpbiByZWxhdGlvbiB0byB0aGUgY2xlYXJpbmcgb2YgYGh1Z2VfemVyb19mb2xpb2AuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLiBXZSBzaG91bGQgZnV6eiBpdCB0byBlbnN1cmUgaXQgdHJ1bHkgc29sdmVzIHRoZSByYWNlIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJlZ3Jlc3Npb25zIGR1cmluZyBUSFAgc2hyaW5rZXIgb3BlcmF0aW9ucy5cblxuTXkgZm9jdXMgc2hvdWxkIGJlOlxuKiAgIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIC0gdGhlIG1vZGlmaWVkIHNocmlua2VyIGZ1bmN0aW9uLlxuKiAgIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCAtIHRoZSBodWdlIHplcm8gZm9saW8gYWxsb2NhdGlvbiBmdW5jdGlvbiAocmFjZSBjb25kaXRpb24pLlxuXG5UaGUgcmVsZXZhbnQgY29uZmlnIGlzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMDAsIk91dHB1dFRva2VucyI6MTQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU2OjQ1LjY1NzMzNzExWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgzMjc4NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuXCIsXG4gICAgXCJtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCBieSByZW9yZGVyaW5nIHRoZSB1cGRhdGUgb2YgYGh1Z2VfemVyb19wZm5gIGFuZCB0aGUgY2xlYXJpbmcgb2YgYGh1Z2VfemVyb19mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFjZSBjb25kaXRpb24gaXMgcmVzb2x2ZWQgYW5kIG5vIG5ldyBpc3N1ZXMgYXJlIGludHJvZHVjZWQgZHVyaW5nIFRIUCBzaHJpbmtlciBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5cIixcbiAgICBcIm1tX2dldF9odWdlX3plcm9fZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGJ5IHJlb3JkZXJpbmcgdGhlIHVwZGF0ZSBvZiBgaHVnZV96ZXJvX3BmbmAgYW5kIHRoZSBjbGVhcmluZyBvZiBgaHVnZV96ZXJvX2ZvbGlvYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSByYWNlIGNvbmRpdGlvbiBpcyByZXNvbHZlZCBhbmQgbm8gbmV3IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBkdXJpbmcgVEhQIHNocmlua2VyIGV4ZWN1dGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowq8d6w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 14:10:49 +0000 UTC FinishedAt: 2026-07-25 14:56:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "f00cd452-c5b8-40ce-85e1-03cd72ecb5b7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "shrink_huge_zero_folio_scan", "mm_get_huge_zero_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuJiMzNDssCiAgICAmIzM0O21tX2dldF9odWdlX3plcm9fZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCBieSByZW9yZGVyaW5nIHRoZSB1cGRhdGUgb2YgYGh1Z2VfemVyb19wZm5gIGFuZCB0aGUgY2xlYXJpbmcgb2YgYGh1Z2VfemVyb19mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFjZSBjb25kaXRpb24gaXMgcmVzb2x2ZWQgYW5kIG5vIG5ldyBpc3N1ZXMgYXJlIGludHJvZHVjZWQgZHVyaW5nIFRIUCBzaHJpbmtlciBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwN2E3ZmI0MzAzNzQzMjMwZWNkN2Q2ZDFlOWI3OTYyOGVjMWNhMGYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTQ6NTU6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGI1ZDFlOWQ0NDYzZDAwLi5mY2M0OTIzNjgxNjBkOSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0yOTgsOSAmIzQzOzI5OCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4gXHRcdFx0XHRcdFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4ge1xuIFx0aWYgKGF0b21pY19jbXB4Y2hnKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMSwgMCkgPT0gMSkge1xuLVx0XHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW8gPSB4Y2hnKFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XG4tXHRcdEJVR19PTih6ZXJvX2ZvbGlvID09IE5VTEwpO1xuJiM0MztcdFx0c3RydWN0IGZvbGlvICp6ZXJvX2ZvbGlvO1xuJiM0MztcbiBcdFx0V1JJVEVfT05DRShodWdlX3plcm9fcGZuLCB+MFVMKTtcbiYjNDM7XHRcdHplcm9fZm9saW8gPSB4Y2hnKFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XG4mIzQzO1x0XHRCVUdfT04oemVyb19mb2xpbyA9PSBOVUxMKTtcbiBcdFx0Zm9saW9fcHV0KHplcm9fZm9saW8pO1xuIFx0XHRyZXR1cm4gSFBBR0VfUE1EX05SO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nocmlua19odWdlX3plcm9fZm9saW9fc2NhbiYjMzQ7LAogICAgJiMzNDttbV9nZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgYnkgcmVvcmRlcmluZyB0aGUgdXBkYXRlIG9mIGBodWdlX3plcm9fcGZuYCBhbmQgdGhlIGNsZWFyaW5nIG9mIGBodWdlX3plcm9fZm9saW9gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHJhY2UgY29uZGl0aW9uIGlzIHJlc29sdmVkIGFuZCBubyBuZXcgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIGR1cmluZyBUSFAgc2hyaW5rZXIgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDdhN2ZiNDMwMzc0MzIzMGVjZDdkNmQxZTliNzk2MjhlYzFjYTBmMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDI1IDE0OjU1OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggYjVkMWU5ZDQ0NjNkMDAuLmZjYzQ5MjM2ODE2MGQ5IDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTI5OCw5ICYjNDM7Mjk4LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywKIAkJCQkJCSBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQogewogCWlmIChhdG9taWNfY21weGNoZygmYW1wO2h1Z2VfemVyb19yZWZjb3VudCwgMSwgMCkgPT0gMSkgewotCQlzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW8gPSB4Y2hnKCZhbXA7aHVnZV96ZXJvX2ZvbGlvLCBOVUxMKTsKLQkJQlVHX09OKHplcm9fZm9saW8gPT0gTlVMTCk7CiYjNDM7CQlzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87CiYjNDM7CiAJCVdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgfjBVTCk7CiYjNDM7CQl6ZXJvX2ZvbGlvID0geGNoZygmYW1wO2h1Z2VfemVyb19mb2xpbywgTlVMTCk7CiYjNDM7CQlCVUdfT04oemVyb19mb2xpbyA9PSBOVUxMKTsKIAkJZm9saW9fcHV0KHplcm9fZm9saW8pOwogCQlyZXR1cm4gSFBBR0VfUE1EX05SOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBpbiBtbS9odWdlX21lbW9yeS5jKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vaHVnZV9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSB0aGUgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgZnVuY3Rpb24uIFRoZSBjb2RlJiMzOTtzIGJlaW5nIGNoYW5nZWQgaW4gYSB3YXkgdGhhdCwgYXQgZmlyc3QgZ2xhbmNlLCBzZWVtcyBsaWtlIGEgbWlub3IgcmVvcmRlcmluZy4gVGhleSYjMzk7dmUgc2hpZnRlZCB0aGUgYFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgfjBVTCk7YCBpbnN0cnVjdGlvbiBhaGVhZCBvZiBgemVyb19mb2xpbyA9IHhjaGcoJmFtcDtodWdlX3plcm9fZm9saW8sIE5VTEwpO2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBhIHJhY2UgY29uZGl0aW9uLiBJdCBsb29rcyBsaWtlIGBodWdlX3plcm9fcGZuYCBtaWdodCBoYXZlIGJlZW4gYWNjZXNzZWQgYWZ0ZXIgYGh1Z2VfemVyb19mb2xpb2Agd2FzIHNldCB0byBOVUxMIGJ1dCBiZWZvcmUgYGh1Z2VfemVyb19wZm5gIHdhcyB1cGRhdGVkIHdpdGggdGhlIG5ldyB2YWx1ZS4gVGhlIGNoYW5nZSBpcyBhaW1pbmcgdG8gcHJldmVudCB0aGF0LgoKTm93LCBsZXQmIzM5O3Mgem9vbSBvdXQgYSBiaXQuIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGlzIGEgc2hyaW5rZXIgY2FsbGJhY2ssIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHByZXR0eSBpbnRlZ3JhbCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb2YgaHVnZSBwYWdlcyAoVEhQLCBhY3R1YWxseSkuIENvbnNpZGVyaW5nIGl0cyByb2xlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29uZmlncyBub3cgdG8gZW5zdXJlIHRoaXMgY2hhbmdlIGFuZCB0aGUgbW9kdWxlIGFyZSBlbmFibGVkIGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4gVGhpcyBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19odWdlX3plcm9fZm9saW9fc2NhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0yOTA9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI5Ni1cbm1tL2h1Z2VfbWVtb3J5LmM6Mjk3OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbm1tL2h1Z2VfbWVtb3J5LmMtMjk4LVx0XHRcdFx0XHRcdCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9OTU4PXN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy05OTgtXHRodWdlX3plcm9fZm9saW9fc2hyaW5rZXItXHUwMDNlY291bnRfb2JqZWN0cyA9IHNocmlua19odWdlX3plcm9fZm9saW9fY291bnQ7XG5tbS9odWdlX21lbW9yeS5jOjk5OTpcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci1cdTAwM2VzY2FuX29iamVjdHMgPSBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW47XG5tbS9odWdlX21lbW9yeS5jLTEwMDAtXHRzaHJpbmtlcl9yZWdpc3RlcihodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQsIGdpdmVuIG15IGFzc3VtZWQgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgS2NvbmZpZyBmb3IgSHVnZSBNZW1vcnkgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBkaXJlY3Rpb24gaXMgY2xlYXI6IG15IGF0dGVudGlvbiBuZWVkcyB0byBmb2N1cyBvbiB0aGUgYEtjb25maWdgIGZpbGUgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBgbW0vaHVnZV9tZW1vcnkuY2Agc291cmNlIGZpbGUuIFRoaXMgaW1wbGllcyBhbiBpbnZlc3RpZ2F0aW9uIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGh1Z2UgcGFnZSBzdXBwb3J0LiBJJiMzOTttIGxpa2VseSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29udHJvbCB3aGV0aGVyIG9yIGhvdyB0aGUgY29kZSBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgY29tcGlsZWQgb3IgZW5hYmxlZC4gCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZToKCiogICBXaGF0IGNvbmZpZ3VyYXRpb24gc3ltYm9scyBhcmUgcmVsYXRlZCB0byBodWdlIHBhZ2VzPwoqICAgQXJlIHRoZXJlIG11bHRpcGxlIGh1Z2UgcGFnZSBpbXBsZW1lbnRhdGlvbnMgb3IgaXMgdGhlIGZpbGUgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgZmxhdm9yPwoqICAgSG93IGFyZSB0aGVzZSBzeW1ib2xzIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBLY29uZmlnIGhpZXJhcmNoeT8gQXJlIHRoZXkgdW5kZXIgYSBzcGVjaWZpYyBtZW51IG9yIGZlYXR1cmUgZ3JvdXA/CiogICBXaGF0IGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBtb3N0IGltcG9ydGFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWZmZWN0aW5nIGBtbS9odWdlX21lbW9yeS5jYD8KKiAgIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBlLmcuIG90aGVyIGZlYXR1cmVzIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGZvciBodWdlIHBhZ2Ugc3VwcG9ydCB0byB3b3JrLgoqICAgQXJlIHRoZXJlIGFueSBidWlsZC10aW1lIG9yIHJ1bi10aW1lIG9wdGlvbnMgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24gaW4gYEtjb25maWdgPwoKTXkgZ29hbCBpcyB0byBnYWluIGEgcXVpY2ssIHlldCB0aG9yb3VnaCwgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgc3Vycm91bmRpbmcgdGhlIGh1Z2UgbWVtb3J5IGltcGxlbWVudGF0aW9uLCBhbmQgaG93IHRoZSBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkLiBUaGlzIGluaXRpYWwgc2NhbiBpcyBlc3NlbnRpYWwgZm9yIGFueSBkZWVwZXIgYW5hbHlzaXMgb3IgZGVidWdnaW5nIEkgbWlnaHQgbmVlZCB0byBwZXJmb3JtIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VfbWVtb3J5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3Vzc2luZyBvbiB0aGUgSHVnZSBQYWdlIFNocmlua2VyKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGlzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBJIG5lZWQgdG8gaG9uZSBpbiBvbiBhIGZ1bmN0aW9uIGZvciBmdXp6aW5nLiBJbml0aWFsbHksIEkgc2F3IGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gLiBJdCYjMzk7cyAqc3RhdGljKiwgd2hpY2ggdXN1YWxseSBtZWFucyBpdCYjMzk7cyBpbmxpbmVkIGFuZCB0aGVyZWZvcmUgbm90IGEgZ29vZCB0YXJnZXQgYmVjYXVzZSBpdCBsYWNrcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBCdXQgdGhlIHByb21wdCBzcGVjaWZpZXMgdG8gbG9vayBhdCBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSG9sZCBvbiwgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgKmlzKiBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyBnZXRzIHBhc3NlZCB0byBgaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyLSZndDtzY2FuX29iamVjdHNgLiBUaGF0IG1lYW5zIGl0ICppc24mIzM5O3QqIGlubGluZWQhIEl0cyBhZGRyZXNzIGV4aXN0cywgYW5kIHRoZXJlZm9yZSwgaXQmIzM5O3MgZnV6emVhYmxlLgoKVGhlIG5leHQgcXVlc3Rpb24gaXMsIGNhbiBJIHRyaWdnZXIgaXQ/IEFoLCB5ZXMsIG1lbW9yeSBwcmVzc3VyZSBvciBgZHJvcF9jYWNoZXNgIHNob3VsZCBkbyB0aGUgdHJpY2suIE5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzPyBZZXMsIGB0aHBfc2hyaW5rZXJfaW5pdGAgcmVnaXN0ZXJzIGl0LiBTbywgSSBjYW4gZm9jdXMgb24gYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAuCgpKdXN0IHRvIGNvbmZpcm0sIEkmIzM5O2xsIGRvdWJsZS1jaGVjazogYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgaXMgaW5kZWVkIHN0YXRpYy4gQnV0IGl0IGlzIHVzZWQgYXMgYSBjYWxsYmFjaywgd2hpY2ggbWVhbnMgaXQgd2lsbCBub3QgYmUgaW5saW5lZC4KCkhvd2V2ZXIsIG1heWJlIHRoZXJlIGlzIGFub3RoZXIgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgcmFjZSBjb25kaXRpb24/IFBlcmhhcHMgYGdldF9odWdlX3plcm9fcGFnZWAgd291bGQgYmUgaW50ZXJlc3RpbmcgdG9vPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X2h1Z2VfemVyb19wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE4MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipQb3RlbnRpYWwgUGl0ZmFsbHMgYW5kIFZlcmlmaWNhdGlvbjogWmVybyBQYWdlIEFsbG9jYXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSBqdXN0IHF1aWNrbHkgdHJ5aW5nIHRvIHBpZWNlIHRvZ2V0aGVyIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMsIGFuZCBhIHBvdGVudGlhbCByZWQgZmxhZyBqdXN0IHBvcHBlZCBpbnRvIG15IGhlYWQuIEkgd2FzIHRoaW5raW5nIGFib3V0IGBnZXRfaHVnZV96ZXJvX3BhZ2VgLCBidXQgaGFuZyBvbiBhIHNlY29uZC4uLiBpcyB0aGF0IGFjdHVhbGx5IHRoZSByaWdodCBzeW1ib2wgdG8gYmUgdXNpbmcgaGVyZT8gSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtIG1pZ2h0IGJlIGhhbmRsZWQgZGlmZmVyZW50bHksIG9yIHBlcmhhcHMgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG5hbWUgaXMgc3BlY2lmaWMgdG8gYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlIG9yIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4KCkJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyBwYXRoLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGdldF9odWdlX3plcm9fcGFnZWAgZXZlbiAqZXhpc3RzKiBhcyBleHBlY3RlZC4gTXkgZ3V0IGlzIHRlbGxpbmcgbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBgaHVnZV96ZXJvX3BmbmAgdmFyaWFibGUgaW5zdGVhZC4gTGV0IG1lIGdvIGJhY2sgYW5kIHRyYWNlIHRoYXQgcmVmZXJlbmNlIHF1aWNrbHkuIEkgZG9uJiMzOTt0IHdhbnQgdG8gd2FzdGUgdGltZSBvbiBhIGRlYWQgZW5kLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaWYgSSYjMzk7bSBub3QgdXNpbmcgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBnZXQgYSB6ZXJvZWQgaHVnZSBwYWdlLiBCZXR0ZXIgdG8gYmUgY2VydGFpbiBub3cgcmF0aGVyIHRoYW4gZGVhbCB3aXRoIGEgZGlmZmljdWx0IGRlYnVnZ2luZyBzZXNzaW9uIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlX3plcm9fcGZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTgxPXN0cnVjdCBmb2xpbyAqaHVnZV96ZXJvX2ZvbGlvIF9fcmVhZF9tb3N0bHk7XG5tbS9odWdlX21lbW9yeS5jOjgyOnVuc2lnbmVkIGxvbmcgaHVnZV96ZXJvX3BmbiBfX3JlYWRfbW9zdGx5ID0gfjBVTDtcbm1tL2h1Z2VfbWVtb3J5LmMtODMtdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyBfX3JlYWRfbW9zdGx5O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjI0PXN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI0NS1cdH1cbm1tL2h1Z2VfbWVtb3J5LmM6MjQ2Olx0V1JJVEVfT05DRShodWdlX3plcm9fcGZuLCBmb2xpb19wZm4oemVyb19mb2xpbykpO1xubW0vaHVnZV9tZW1vcnkuYy0yNDctXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yOTc9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzAyLVxubW0vaHVnZV9tZW1vcnkuYzozMDM6XHRcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgfjBVTCk7XG5tbS9odWdlX21lbW9yeS5jLTMwNC1cdFx0emVyb19mb2xpbyA9IHhjaGcoXHUwMDI2aHVnZV96ZXJvX2ZvbGlvLCBOVUxMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc3MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCBhc3N1bWluZyBJJiMzOTttIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsLCBhbmQgdGhlIHRleHQgcmVmZXJzIHRvIGEgZnVuY3Rpb24gbmFtZToKCioqSWRlbnRpZnlpbmcgdGhlIEtleSBGdW5jdGlvbioqCgpSaWdodCwgKnRoYXQmIzM5O3MqIHRoZSBmdW5jdGlvbi4gJiMzNDtnZXRcX2h1Z2VcX3plcm9cX2ZvbGlvJiMzNDsuIE9rYXksIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgYXMgdGhlIGxpa2VseSBlbnRyeSBwb2ludC4gTm93IHRoZSByZWFsIHdvcmsgYmVnaW5zOiBhbmFseXppbmcgKndoYXQqIHRoYXQgZG9lcyBhbmQgKndoeSogaXQmIzM5O3MgbmFtZWQgYXMgc3VjaC4gTmVlZCB0byBkaWcgaW50byBpdHMgbG9naWMsIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBlc3BlY2lhbGx5IHRoZSBkYXRhIGl0IG1hbmlwdWxhdGVzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgJiMzNDtodWdlIHplcm8gZm9saW8mIzM0OyBwYXJ0LiAmIzM0O1plcm8mIzM0OyBpcyBpbnRlcmVzdGluZy4uLiBJcyBpdCB0cnVseSB6ZXJvLCBvciBjb25jZXB0dWFsbHkgemVybyBpbiBzb21lIHdheT8gT3IgcGVyaGFwcyBpdCBpbml0aWFsaXplcyBzb21ldGhpbmcgdG8gemVybz8gVGhlICYjMzQ7aHVnZSYjMzQ7IGltcGxpZXMgc2NhbGUsIHNvIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBhcmUgaW1tZWRpYXRlbHkgZmxhZ2dlZC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTExND11bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjIzLVxubW0vaHVnZV9tZW1vcnkuYzoyMjQ6c3RhdGljIGJvb2wgZ2V0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxubW0vaHVnZV9tZW1vcnkuYy0yMjUte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjU1PXN0YXRpYyB2b2lkIHB1dF9odWdlX3plcm9fZm9saW8odm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI2My1cbm1tL2h1Z2VfbWVtb3J5LmM6MjY0OnN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL2h1Z2VfbWVtb3J5LmMtMjY1LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI3MS1cbm1tL2h1Z2VfbWVtb3J5LmM6MjcyOlx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXG5tbS9odWdlX21lbW9yeS5jLTI3My1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz05NTg9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTk4Mi1cdFx0ICogaHVnZV96ZXJvX2ZvbGlvIHdpbGwgYWx3YXlzIGJlIE5VTEwgb24gZmFpbHVyZS4gV2UgYXNzdW1lXG5tbS9odWdlX21lbW9yeS5jOjk4MzpcdFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xubW0vaHVnZV9tZW1vcnkuYy05ODQtXHRcdCAqIHRocF9zaHJpbmtlcl9pbml0KCkgaXMgaW52b2tlZCBlYXJseSBvbiBkdXJpbmcgYm9vdC5cbm1tL2h1Z2VfbWVtb3J5LmMtOTg1LVx0XHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6OTg2Olx0XHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSlcbm1tL2h1Z2VfbWVtb3J5LmMtOTg3LVx0XHRcdHByX3dhcm4oXCYjMzQ7QWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcXG5cJiMzNDspO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTQ3OD12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTUwMC1cdFx0XHRyZXR1cm4gVk1fRkFVTFRfT09NO1xubW0vaHVnZV9tZW1vcnkuYzoxNTAxOlx0XHR6ZXJvX2ZvbGlvID0gbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyh2bWEtXHUwMDNldm1fbW0pO1xubW0vaHVnZV9tZW1vcnkuYy0xNTAyLVx0XHRpZiAodW5saWtlbHkoIXplcm9fZm9saW8pKSB7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xODY2PWludCBjb3B5X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTkyOS1cdFx0Lypcbm1tL2h1Z2VfbWVtb3J5LmM6MTkzMDpcdFx0ICogbW1fZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbmV2ZXIgYWxsb2NhdGUgYSBuZXdcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzMS1cdFx0ICogZm9saW8gaGVyZSwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEgemVybyBwYWdlIHRvXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xOTMzLVx0XHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MTkzNDpcdFx0bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhkc3RfbW0pO1xubW0vaHVnZV9tZW1vcnkuYy0xOTM1LVx0XHRnb3RvIG91dF96ZXJvX3BhZ2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MzIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRm9jdXNpbmcgb24gSHVnZXBhZ2UgWmVybyBGb2xpb3MgYW5kIFNocmlua2luZyoqCgpSaWdodCwgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIOKAkyB0aGF0JiMzOTtzIG91ciBlbnRyeSBwb2ludCBmdW5jdGlvbiwgdGhlIGtleSBzdGFydGluZyBwb2ludCBmb3IgdGhlIHplcm8gZm9saW8gcHJvY2Vzcy4gQW5kIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIOKAkyB0aGF0JiMzOTtzIHRoZSBzaHJpbmtlciBjYWxsYmFjay4gQm90aCBvZiB0aGVzZSBsb29rIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZGVlcGVyIGluc3BlY3Rpb24uIFRoZXkmIzM5O3JlIGNlbnRyYWwgdG8gdGhlIHdob2xlIG9wZXJhdGlvbi4gR29vZCwgZ29vZC4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGFzcGVjdHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZvY3VzIG9uIGNvbmZpZ3VyYXRpb24gaXMgY29ycmVjdC4gSXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGF0IHBsYXkgaGVyZT8gSXQmIzM5O3Mgb2Z0ZW4gdGhlIHNpbmdsZSBjcml0aWNhbCBzZXR0aW5nLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBpcyB0aGUgb25seSBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04NDUtXG5tbS9LY29uZmlnOjg0NjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTg0Ny1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODY0PWNob2ljZVxuLS1cbm1tL0tjb25maWctODY5LVxubW0vS2NvbmZpZzo4NzA6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg3MS1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3Ni1cbm1tL0tjb25maWc6ODc3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODc4LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg4NS1cbm1tL0tjb25maWc6ODg2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg4Ny1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODkzPWNob2ljZVxuLS1cbm1tL0tjb25maWctOTAyLVxubW0vS2NvbmZpZzo5MDM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MDQtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkxMi1cbm1tL0tjb25maWc6OTEzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkxNC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkyMC1cbm1tL0tjb25maWc6OTIxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTIyLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MjgtXG5tbS9LY29uZmlnOjkyOTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MzAtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05Mzg9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05NDctXG5tbS9LY29uZmlnOjk0ODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTk0OS1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTU2LVxubW0vS2NvbmZpZzo5NTc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTU4LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTY0LVxubW0vS2NvbmZpZzo5NjU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NjYtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk3Mi1cbm1tL0tjb25maWc6OTczOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk3NC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcxMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBMYW5kc2NhcGUqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGhhdCYjMzk7cyB0aGUgY29uZmlnIHZhcmlhYmxlIHdlJiMzOTtyZSBsb29raW5nIGF0LiBPa2F5LCBtYWtlcyBzZW5zZS4gQnV0IGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIGFsd2F5cyBjaGVjayBpZiBvbmUgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsaWVzIG9uIGFub3RoZXIuIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJiMzOTtzIGEgcHJlcmVxdWlzaXRlIGludm9sdmVkIGhlcmUuIEl0JiMzOTtzIGEgcXVpY2sgcmVmbGV4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0NjpcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4NDc6XHRcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIDg0ODpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gODQ5Olx0XHRzZWxlY3QgQ09NUEFDVElPTlxuIDg1MDpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuIDg1MTpcdFx0c2VsZWN0IE1NX0lEXG4gODUyOlx0XHRoZWxwXG4gODUzOlx0XHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbiA4NTQ6XHRcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxuIDg1NTpcdFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cbiA4NTY6XHRcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcbiA4NTc6XHRcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xuIDg1ODpcdFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXG4gODU5Olx0XG4gODYwOlx0XHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxuIDg2MTpcdFxuIDg2MjpcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODYzOlx0XG4gODY0Olx0Y2hvaWNlXG4gODY1Olx0XHRwcm9tcHQgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydCBzeXNmcyBkZWZhdWx0c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTk1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEh1Z2VwYWdlIFplcm8gRm9saW8gT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBhcHByb2FjaCBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlciwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBodWdlcGFnZSB6ZXJvIGZvbGlvIG9wZXJhdGlvbnMuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZW5hYmxlIHRoZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGNvbmZpZywgdGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBzeW1ib2xzIHRvIGNvbmNlbnRyYXRlIHRoZSBmdXp6aW5nIG9uLiBJJiMzOTttIHRoaW5raW5nIHRoZSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgYW5kIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gLgoKQWhhISBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCBpcyAqc3RhdGljKi4gQ2FuIEkgc3RpbGwgbGV2ZXJhZ2UgaXQgYXMgYSBmb2N1cyBzeW1ib2w/IExldCBtZSB0aGluay4uLiB5ZXMsIHN5emthbGxlciAqY2FuKiBmb2N1cyBvbiBzdGF0aWMgZnVuY3Rpb25zLCBwcm92aWRlZCB0aGV5JiMzOTtyZSBub3QgaW5saW5lZC4gVGhhdCYjMzk7cyBhIGdvb2QgZGlzY292ZXJ5LiBJdCBvcGVucyB1cCBvcHBvcnR1bml0aWVzIHRvIHRhcmdldCBtb3JlIHNwZWNpZmljIGludGVybmFsIGZ1bmN0aW9ucy4KCldhaXQgYSBzZWNvbmQsIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCBpc24mIzM5O3Qgc3RhdGljLiBPa2F5LCBubyB3b3JyaWVzLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgZXhwb3J0ZWQuIElmIGl0JiMzOTtzIGV4cG9ydGVkLCB0aGVuIHN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byByZWFjaCBpdC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwIGluIG15IHRob3VnaHQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gdGhlIE5vbi1TdGF0aWMgQXNwZWN0cyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4cG9ydGluZyB0aGlzIHRoaW5nOyBqdXN0IGVuc3VyaW5nIGl0IGlzbiYjMzk7dCBzdGF0aWMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBtb2RpZmljYXRpb24gY2VudGVyZWQgb24gYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAuIEl0JiMzOTtzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBubyBkb3VidC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiBvdGhlciBmdW5jdGlvbnMgYXJlIGludm9sdmVkLgoKUmlnaHQsIEkgc2VlIHRoYXQgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBhbmQgYGNvcHlfaHVnZV9wbWRgIGJvdGggY2FsbCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AuIEFuZCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCwgYXMgd2Uga25vdywgaXMgdGhlIHNocmlua2VyIGNhbGxiYWNrLiBUaGF0IHN1Z2dlc3RzIHRoZSBjb3JlIHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGFuZCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AuIEkgbmVlZCB0byBlbnN1cmUgYSBmdWxsIGFzc2Vzc21lbnQgaGVyZS4KCkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayB0byBjaGVjayB0aGUgdXNhZ2Ugb2YgYGh1Z2VfemVyb19wZm5gIGVsc2V3aGVyZSB0byBjb21wbGV0ZSBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV96ZXJvX3BmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz04MT1zdHJ1Y3QgZm9saW8gKmh1Z2VfemVyb19mb2xpbyBfX3JlYWRfbW9zdGx5O1xubW0vaHVnZV9tZW1vcnkuYzo4Mjp1bnNpZ25lZCBsb25nIGh1Z2VfemVyb19wZm4gX19yZWFkX21vc3RseSA9IH4wVUw7XG5tbS9odWdlX21lbW9yeS5jLTgzLXVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19hbHdheXMgX19yZWFkX21vc3RseTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIyND1zdGF0aWMgYm9vbCBnZXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNDUtXHR9XG5tbS9odWdlX21lbW9yeS5jOjI0NjpcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgZm9saW9fcGZuKHplcm9fZm9saW8pKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjQ3LVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mjk3PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMwMi1cbm1tL2h1Z2VfbWVtb3J5LmM6MzAzOlx0XHRXUklURV9PTkNFKGh1Z2VfemVyb19wZm4sIH4wVUwpO1xubW0vaHVnZV9tZW1vcnkuYy0zMDQtXHRcdHplcm9fZm9saW8gPSB4Y2hnKFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGEgc2Vhc29uZWQga2VybmVsIGRldmVsb3BlcjoKCioqUHJvYmluZyB0aGUgSHVnZSBQYWdlIFplcm8qKgoKUmlnaHQsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIEhhbmcgb24uLi4gaXNuJiMzOTt0IHRoYXQgYGh1Z2VfemVyb19wZm5gIHZhcmlhYmxlLi4uIGlzbiYjMzk7dCBpdCBhbHNvIHV0aWxpemVkIHdpdGhpbiB0aGUgYGlzX2h1Z2VfemVyb19wYWdlYCBhbmQgYGlzX2h1Z2VfemVyb19wbWRgIGZ1bmN0aW9ucz8gSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyB1c2VkIGluIHRob3NlIHBsYWNlcyBhcyB3ZWxsLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIEnigJltIGNvbm5lY3RpbmcgdGhlIGRvdHMgY29ycmVjdGx5LiBUaGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgaG93IHRoZXNlIHplcm8gcGFnZSByZXByZXNlbnRhdGlvbnMgaW50ZXJhY3QuLi4gYW5kIHRoZWlyIHZhcmlvdXMgZnVuY3Rpb25zLiBHb29kIHRvIGNvbmZpcm0gaG93IHRoaXMgaXMgYWxsIGludGVybGlua2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlX3plcm9fcGZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NTM0PWV4dGVybiBzdHJ1Y3QgZm9saW8gKmh1Z2VfemVyb19mb2xpbztcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUzNTpleHRlcm4gdW5zaWduZWQgbG9uZyBodWdlX3plcm9fcGZuO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTM2LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTM3PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19odWdlX3plcm9fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01NDMtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1NDQ6c3RhdGljIGlubGluZSBib29sIGlzX2h1Z2VfemVyb19wZm4odW5zaWduZWQgbG9uZyBwZm4pXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01NDUte1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTQ2Olx0cmV0dXJuIFJFQURfT05DRShodWdlX3plcm9fcGZuKSA9PSAocGZuIFx1MDAyNiB+KEhQQUdFX1BNRF9OUiAtIDEpKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTU0Ny19XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTQ5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19odWdlX3plcm9fcG1kKHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTU1MC17XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1NTE6XHRyZXR1cm4gcG1kX3ByZXNlbnQocG1kKSBcdTAwMjZcdTAwMjYgaXNfaHVnZV96ZXJvX3BmbihwbWRfcGZuKHBtZCkpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTUyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03MzY9c3RhdGljIGlubGluZSBib29sIGlzX2h1Z2VfemVyb19mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTc0MC1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjc0MTpzdGF0aWMgaW5saW5lIGJvb2wgaXNfaHVnZV96ZXJvX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTc0Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDAKCQkJCQkJCW91dHB1dDogMTQ5CgkJCQkJCQl0aG91Z2h0czogNDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRIUCBSYWNlIENvbmRpdGlvbiBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIHRpZWQgdG8gYGh1Z2VfemVyb19wZm5gIGFuZCBgaHVnZV96ZXJvX2ZvbGlvYCwgcGFydGljdWxhcmx5IGFyb3VuZCBgaXNfaHVnZV96ZXJvX3BtZGAuIFRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHRoYXQgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgY291bGQgcG90ZW50aWFsbHkgbnVsbGlmeSBgaHVnZV96ZXJvX2ZvbGlvYCB3aGlsZSBgaHVnZV96ZXJvX3BmbmAgcmVtYWluZWQgdmFsaWQuIFRoaXMgbGVkIHRvIGBpc19odWdlX3plcm9fcG1kYCByZXR1cm5pbmcgYSBmYWxzZSBwb3NpdGl2ZSBmb3IgcGFnZXMgYmVpbmcgZnJlZWQuCgpUaGUgZml4LCBpbiBlc3NlbmNlLCByZW9yZGVycyB0aGluZ3MuIEJ5IHNldHRpbmcgYGh1Z2VfemVyb19wZm5gIHRvIGB+MFVMYCAqYmVmb3JlKiBudWxsaW5nIG91dCBgaHVnZV96ZXJvX2ZvbGlvYCwgd2UgZW5zdXJlIHRoYXQgYGlzX2h1Z2VfemVyb19wbWRgIGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhlIHN0YXRlLCBwcmV2ZW50aW5nIHRoYXQgZmFsc2UgcG9zaXRpdmUgYW5kIGFsbG93aW5nIHRoZSBmb2xpbyB0byBiZSBwcm9wZXJseSBmcmVlZC4gRnVuY3Rpb25hbGx5IHNvdW5kOyBkZWZpbml0ZWx5IGEgcmFjZSBjb25kaXRpb24gZml4LgoKVGhpcyBsb29rcyBsaWtlIGEgc29saWQgZml4LCBzbyBmdXp6aW5nIHRoaXMgaXMgYSBtdXN0LiBgV29ydGhGdXp6aW5nPXRydWVgLgoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgb25lIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYW5kIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYXMgdGhhdCYjMzk7cyB0aGUgY291bnRlcnBhcnQgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2hyaW5rZXIuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZy4gWXVwLCBnb29kLiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZXMgYWxsIHRoZSByaWdodCBjb2RlIHBhdGhzIGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSBoYXZlIGNvbmZpcm1lZCBpdCYjMzk7cyBlbm91Z2guCgpBbHJpZ2h0LCB0aW1lIHRvIHdyaXRlIGEgY2xlYXIgZXhwbGFuYXRpb24gb2YgdGhpczogVGhlIHBhdGNoIGRlYWxzIHdpdGggYSByYWNlIGluIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gLiBJdCBmaXhlcyBhIHBvdGVudGlhbCBjb25mbGljdCBieSByZW9yZGVyaW5nIGhvdyBgaHVnZV96ZXJvX3BmbmAgaXMgdXBkYXRlZCBpbiByZWxhdGlvbiB0byB0aGUgY2xlYXJpbmcgb2YgYGh1Z2VfemVyb19mb2xpb2AuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLiBXZSBzaG91bGQgZnV6eiBpdCB0byBlbnN1cmUgaXQgdHJ1bHkgc29sdmVzIHRoZSByYWNlIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByZWdyZXNzaW9ucyBkdXJpbmcgVEhQIHNocmlua2VyIG9wZXJhdGlvbnMuCgpNeSBmb2N1cyBzaG91bGQgYmU6CiogICBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCAtIHRoZSBtb2RpZmllZCBzaHJpbmtlciBmdW5jdGlvbi4KKiAgIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCAtIHRoZSBodWdlIHplcm8gZm9saW8gYWxsb2NhdGlvbiBmdW5jdGlvbiAocmFjZSBjb25kaXRpb24pLgoKVGhlIHJlbGV2YW50IGNvbmZpZyBpcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4mIzM0OywKICAgICYjMzQ7bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGJ5IHJlb3JkZXJpbmcgdGhlIHVwZGF0ZSBvZiBgaHVnZV96ZXJvX3BmbmAgYW5kIHRoZSBjbGVhcmluZyBvZiBgaHVnZV96ZXJvX2ZvbGlvYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSByYWNlIGNvbmRpdGlvbiBpcyByZXNvbHZlZCBhbmQgbm8gbmV3IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBkdXJpbmcgVEhQIHNocmlua2VyIGV4ZWN1dGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4mIzM0OywKICAgICYjMzQ7bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGJ5IHJlb3JkZXJpbmcgdGhlIHVwZGF0ZSBvZiBgaHVnZV96ZXJvX3BmbmAgYW5kIHRoZSBjbGVhcmluZyBvZiBgaHVnZV96ZXJvX2ZvbGlvYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSByYWNlIGNvbmRpdGlvbiBpcyByZXNvbHZlZCBhbmQgbm8gbmV3IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBkdXJpbmcgVEhQIHNocmlua2VyIGV4ZWN1dGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU1OjU3Ljg0NjE5MDk2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODk5NDg3NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuXCIsXG4gICAgXCJtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCBieSByZW9yZGVyaW5nIHRoZSB1cGRhdGUgb2YgYGh1Z2VfemVyb19wZm5gIGFuZCB0aGUgY2xlYXJpbmcgb2YgYGh1Z2VfemVyb19mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFjZSBjb25kaXRpb24gaXMgcmVzb2x2ZWQgYW5kIG5vIG5ldyBpc3N1ZXMgYXJlIGludHJvZHVjZWQgZHVyaW5nIFRIUCBzaHJpbmtlciBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU1OjU3Ljg0NjE5NzY2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQxMjc2MzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDdhN2ZiNDMwMzc0MzIzMGVjZDdkNmQxZTliNzk2MjhlYzFjYTBmM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAxNDo1NTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IGI1ZDFlOWQ0NDYzZDAwLi5mY2M0OTIzNjgxNjBkOSAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC0yOTgsOSArMjk4LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0aWYgKGF0b21pY19jbXB4Y2hnKFxcdTAwMjZodWdlX3plcm9fcmVmY291bnQsIDEsIDApID09IDEpIHtcXG4tXFx0XFx0c3RydWN0IGZvbGlvICp6ZXJvX2ZvbGlvID0geGNoZyhcXHUwMDI2aHVnZV96ZXJvX2ZvbGlvLCBOVUxMKTtcXG4tXFx0XFx0QlVHX09OKHplcm9fZm9saW8gPT0gTlVMTCk7XFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqemVyb19mb2xpbztcXG4rXFxuIFxcdFxcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgfjBVTCk7XFxuK1xcdFxcdHplcm9fZm9saW8gPSB4Y2hnKFxcdTAwMjZodWdlX3plcm9fZm9saW8sIE5VTEwpO1xcbitcXHRcXHRCVUdfT04oemVyb19mb2xpbyA9PSBOVUxMKTtcXG4gXFx0XFx0Zm9saW9fcHV0KHplcm9fZm9saW8pO1xcbiBcXHRcXHRyZXR1cm4gSFBBR0VfUE1EX05SO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU1OjU4LjM4ODI0NTAwNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ3MzU3NDIyOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuXCIsXG4gICAgXCJtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCBieSByZW9yZGVyaW5nIHRoZSB1cGRhdGUgb2YgYGh1Z2VfemVyb19wZm5gIGFuZCB0aGUgY2xlYXJpbmcgb2YgYGh1Z2VfemVyb19mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFjZSBjb25kaXRpb24gaXMgcmVzb2x2ZWQgYW5kIG5vIG5ldyBpc3N1ZXMgYXJlIGludHJvZHVjZWQgZHVyaW5nIFRIUCBzaHJpbmtlciBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA3YTdmYjQzMDM3NDMyMzBlY2Q3ZDZkMWU5Yjc5NjI4ZWMxY2EwZjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAxNDo1NTo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBiNWQxZTlkNDQ2M2QwMC4uZmNjNDkyMzY4MTYwZDkgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMjk4LDkgKzI5OCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4gXHRcdFx0XHRcdFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4ge1xuIFx0aWYgKGF0b21pY19jbXB4Y2hnKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMSwgMCkgPT0gMSkge1xuLVx0XHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW8gPSB4Y2hnKFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XG4tXHRcdEJVR19PTih6ZXJvX2ZvbGlvID09IE5VTEwpO1xuK1x0XHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87XG4rXG4gXHRcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgfjBVTCk7XG4rXHRcdHplcm9fZm9saW8gPSB4Y2hnKFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XG4rXHRcdEJVR19PTih6ZXJvX2ZvbGlvID09IE5VTEwpO1xuIFx0XHRmb2xpb19wdXQoemVyb19mb2xpbyk7XG4gXHRcdHJldHVybiBIUEFHRV9QTURfTlI7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDo1NTo1OC4zODgyNTcxNDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mzk2ODgzMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGluIG1tL2h1Z2VfbWVtb3J5LmMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vaHVnZV9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSB0aGUgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgZnVuY3Rpb24uIFRoZSBjb2RlJ3MgYmVpbmcgY2hhbmdlZCBpbiBhIHdheSB0aGF0LCBhdCBmaXJzdCBnbGFuY2UsIHNlZW1zIGxpa2UgYSBtaW5vciByZW9yZGVyaW5nLiBUaGV5J3ZlIHNoaWZ0ZWQgdGhlIGBXUklURV9PTkNFKGh1Z2VfemVyb19wZm4sIH4wVUwpO2AgaW5zdHJ1Y3Rpb24gYWhlYWQgb2YgYHplcm9fZm9saW8gPSB4Y2hnKFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGEgcmFjZSBjb25kaXRpb24uIEl0IGxvb2tzIGxpa2UgYGh1Z2VfemVyb19wZm5gIG1pZ2h0IGhhdmUgYmVlbiBhY2Nlc3NlZCBhZnRlciBgaHVnZV96ZXJvX2ZvbGlvYCB3YXMgc2V0IHRvIE5VTEwgYnV0IGJlZm9yZSBgaHVnZV96ZXJvX3BmbmAgd2FzIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IHZhbHVlLiBUaGUgY2hhbmdlIGlzIGFpbWluZyB0byBwcmV2ZW50IHRoYXQuXG5cbk5vdywgbGV0J3Mgem9vbSBvdXQgYSBiaXQuIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGlzIGEgc2hyaW5rZXIgY2FsbGJhY2ssIHdoaWNoIG1lYW5zIGl0J3MgcHJldHR5IGludGVncmFsIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiBodWdlIHBhZ2VzIChUSFAsIGFjdHVhbGx5KS4gQ29uc2lkZXJpbmcgaXRzIHJvbGUgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgSSdkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNvbmZpZ3Mgbm93IHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBhbmQgdGhlIG1vZHVsZSBhcmUgZW5hYmxlZCBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIFRoaXMgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucywgc28gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6NTY6MDMuNzg1MTQyMjU0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTUyMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19odWdlX3plcm9fZm9saW9fc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MjkwPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI5Ni1cXG5tbS9odWdlX21lbW9yeS5jOjI5NzpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxubW0vaHVnZV9tZW1vcnkuYy0yOTgtXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTk1OD1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy05OTgtXFx0aHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyLVxcdTAwM2Vjb3VudF9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudDtcXG5tbS9odWdlX21lbW9yeS5jOjk5OTpcXHRodWdlX3plcm9fZm9saW9fc2hyaW5rZXItXFx1MDAzZXNjYW5fb2JqZWN0cyA9IHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbjtcXG5tbS9odWdlX21lbW9yeS5jLTEwMDAtXFx0c2hyaW5rZXJfcmVnaXN0ZXIoaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6NTY6MDMuODQzNjk4Nzc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczNjgzMTIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQsIGdpdmVuIG15IGFzc3VtZWQgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyBLY29uZmlnIGZvciBIdWdlIE1lbW9yeSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgZGlyZWN0aW9uIGlzIGNsZWFyOiBteSBhdHRlbnRpb24gbmVlZHMgdG8gZm9jdXMgb24gdGhlIGBLY29uZmlnYCBmaWxlIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgaXQgcmVsYXRlcyB0byB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIHNvdXJjZSBmaWxlLiBUaGlzIGltcGxpZXMgYW4gaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBodWdlIHBhZ2Ugc3VwcG9ydC4gSSdtIGxpa2VseSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29udHJvbCB3aGV0aGVyIG9yIGhvdyB0aGUgY29kZSBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgY29tcGlsZWQgb3IgZW5hYmxlZC4gXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOlxuXG4qICAgV2hhdCBjb25maWd1cmF0aW9uIHN5bWJvbHMgYXJlIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcz9cbiogICBBcmUgdGhlcmUgbXVsdGlwbGUgaHVnZSBwYWdlIGltcGxlbWVudGF0aW9ucyBvciBpcyB0aGUgZmlsZSByZWxhdGVkIHRvIGEgcGFydGljdWxhciBmbGF2b3I/XG4qICAgSG93IGFyZSB0aGVzZSBzeW1ib2xzIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBLY29uZmlnIGhpZXJhcmNoeT8gQXJlIHRoZXkgdW5kZXIgYSBzcGVjaWZpYyBtZW51IG9yIGZlYXR1cmUgZ3JvdXA/XG4qICAgV2hhdCBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgbW9zdCBpbXBvcnRhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFmZmVjdGluZyBgbW0vaHVnZV9tZW1vcnkuY2A/XG4qICAgQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IGUuZy4gb3RoZXIgZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIGh1Z2UgcGFnZSBzdXBwb3J0IHRvIHdvcmsuXG4qICAgQXJlIHRoZXJlIGFueSBidWlsZC10aW1lIG9yIHJ1bi10aW1lIG9wdGlvbnMgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24gaW4gYEtjb25maWdgP1xuXG5NeSBnb2FsIGlzIHRvIGdhaW4gYSBxdWljaywgeWV0IHRob3JvdWdoLCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBzdXJyb3VuZGluZyB0aGUgaHVnZSBtZW1vcnkgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgdGhlIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQuIFRoaXMgaW5pdGlhbCBzY2FuIGlzIGVzc2VudGlhbCBmb3IgYW55IGRlZXBlciBhbmFseXNpcyBvciBkZWJ1Z2dpbmcgSSBtaWdodCBuZWVkIHRvIHBlcmZvcm0gbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDo1NjowNy41ODA1MzMwOTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcyOTI2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZV9tZW1vcnkub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDo1NjowNy42Njc4MzE2MTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjgwNzMxMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3Vzc2luZyBvbiB0aGUgSHVnZSBQYWdlIFNocmlua2VyKipcblxuT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIEkgbmVlZCB0byBob25lIGluIG9uIGEgZnVuY3Rpb24gZm9yIGZ1enppbmcuIEluaXRpYWxseSwgSSBzYXcgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAuIEl0J3MgKnN0YXRpYyosIHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQncyBpbmxpbmVkIGFuZCB0aGVyZWZvcmUgbm90IGEgZ29vZCB0YXJnZXQgYmVjYXVzZSBpdCBsYWNrcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBCdXQgdGhlIHByb21wdCBzcGVjaWZpZXMgdG8gbG9vayBhdCBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSG9sZCBvbiwgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgKmlzKiBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyBnZXRzIHBhc3NlZCB0byBgaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0c2AuIFRoYXQgbWVhbnMgaXQgKmlzbid0KiBpbmxpbmVkISBJdHMgYWRkcmVzcyBleGlzdHMsIGFuZCB0aGVyZWZvcmUsIGl0J3MgZnV6emVhYmxlLlxuXG5UaGUgbmV4dCBxdWVzdGlvbiBpcywgY2FuIEkgdHJpZ2dlciBpdD8gQWgsIHllcywgbWVtb3J5IHByZXNzdXJlIG9yIGBkcm9wX2NhY2hlc2Agc2hvdWxkIGRvIHRoZSB0cmljay4gTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXM/IFllcywgYHRocF9zaHJpbmtlcl9pbml0YCByZWdpc3RlcnMgaXQuIFNvLCBJIGNhbiBmb2N1cyBvbiBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYC5cblxuSnVzdCB0byBjb25maXJtLCBJJ2xsIGRvdWJsZS1jaGVjazogYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgaXMgaW5kZWVkIHN0YXRpYy4gQnV0IGl0IGlzIHVzZWQgYXMgYSBjYWxsYmFjaywgd2hpY2ggbWVhbnMgaXQgd2lsbCBub3QgYmUgaW5saW5lZC5cblxuSG93ZXZlciwgbWF5YmUgdGhlcmUgaXMgYW5vdGhlciBmdW5jdGlvbiByZWxhdGVkIHRvIHRoZSByYWNlIGNvbmRpdGlvbj8gUGVyaGFwcyBgZ2V0X2h1Z2VfemVyb19wYWdlYCB3b3VsZCBiZSBpbnRlcmVzdGluZyB0b28/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6NTY6MTIuOTQ4NTY1NzE3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMzMzMjE1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfaHVnZV96ZXJvX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6NTY6MTMuMDA5OTE0NzUyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMjMxMDgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlBvdGVudGlhbCBQaXRmYWxscyBhbmQgVmVyaWZpY2F0aW9uOiBaZXJvIFBhZ2UgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIEknbSBqdXN0IHF1aWNrbHkgdHJ5aW5nIHRvIHBpZWNlIHRvZ2V0aGVyIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMsIGFuZCBhIHBvdGVudGlhbCByZWQgZmxhZyBqdXN0IHBvcHBlZCBpbnRvIG15IGhlYWQuIEkgd2FzIHRoaW5raW5nIGFib3V0IGBnZXRfaHVnZV96ZXJvX3BhZ2VgLCBidXQgaGFuZyBvbiBhIHNlY29uZC4uLiBpcyB0aGF0IGFjdHVhbGx5IHRoZSByaWdodCBzeW1ib2wgdG8gYmUgdXNpbmcgaGVyZT8gSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtIG1pZ2h0IGJlIGhhbmRsZWQgZGlmZmVyZW50bHksIG9yIHBlcmhhcHMgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG5hbWUgaXMgc3BlY2lmaWMgdG8gYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlIG9yIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS5cblxuQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHBhdGgsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgZ2V0X2h1Z2VfemVyb19wYWdlYCBldmVuICpleGlzdHMqIGFzIGV4cGVjdGVkLiBNeSBndXQgaXMgdGVsbGluZyBtZSB0byBkb3VibGUtY2hlY2sgdGhlIGBodWdlX3plcm9fcGZuYCB2YXJpYWJsZSBpbnN0ZWFkLiBMZXQgbWUgZ28gYmFjayBhbmQgdHJhY2UgdGhhdCByZWZlcmVuY2UgcXVpY2tseS4gSSBkb24ndCB3YW50IHRvIHdhc3RlIHRpbWUgb24gYSBkZWFkIGVuZCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGlmIEknbSBub3QgdXNpbmcgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBnZXQgYSB6ZXJvZWQgaHVnZSBwYWdlLiBCZXR0ZXIgdG8gYmUgY2VydGFpbiBub3cgcmF0aGVyIHRoYW4gZGVhbCB3aXRoIGEgZGlmZmljdWx0IGRlYnVnZ2luZyBzZXNzaW9uIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTgwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6NTY6MTYuNDQyMjI3NDU1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjI2MTYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX3plcm9fcGZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz04MT1zdHJ1Y3QgZm9saW8gKmh1Z2VfemVyb19mb2xpbyBfX3JlYWRfbW9zdGx5O1xcbm1tL2h1Z2VfbWVtb3J5LmM6ODI6dW5zaWduZWQgbG9uZyBodWdlX3plcm9fcGZuIF9fcmVhZF9tb3N0bHkgPSB+MFVMO1xcbm1tL2h1Z2VfbWVtb3J5LmMtODMtdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyBfX3JlYWRfbW9zdGx5O1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yMjQ9c3RhdGljIGJvb2wgZ2V0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNDUtXFx0fVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjQ2OlxcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgZm9saW9fcGZuKHplcm9fZm9saW8pKTtcXG5tbS9odWdlX21lbW9yeS5jLTI0Ny1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mjk3PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzAyLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzAzOlxcdFxcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgfjBVTCk7XFxubW0vaHVnZV9tZW1vcnkuYy0zMDQtXFx0XFx0emVyb19mb2xpbyA9IHhjaGcoXFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU2OjE2LjUwNDUwNTgxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTM0MDE1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSdtIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsLCBhbmQgdGhlIHRleHQgcmVmZXJzIHRvIGEgZnVuY3Rpb24gbmFtZTpcblxuKipJZGVudGlmeWluZyB0aGUgS2V5IEZ1bmN0aW9uKipcblxuUmlnaHQsICp0aGF0J3MqIHRoZSBmdW5jdGlvbi4gXCJnZXRcXF9odWdlXFxfemVyb1xcX2ZvbGlvXCIuIE9rYXksIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgYXMgdGhlIGxpa2VseSBlbnRyeSBwb2ludC4gTm93IHRoZSByZWFsIHdvcmsgYmVnaW5zOiBhbmFseXppbmcgKndoYXQqIHRoYXQgZG9lcyBhbmQgKndoeSogaXQncyBuYW1lZCBhcyBzdWNoLiBOZWVkIHRvIGRpZyBpbnRvIGl0cyBsb2dpYywgaXRzIGRlcGVuZGVuY2llcywgYW5kIGVzcGVjaWFsbHkgdGhlIGRhdGEgaXQgbWFuaXB1bGF0ZXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBcImh1Z2UgemVybyBmb2xpb1wiIHBhcnQuIFwiWmVyb1wiIGlzIGludGVyZXN0aW5nLi4uIElzIGl0IHRydWx5IHplcm8sIG9yIGNvbmNlcHR1YWxseSB6ZXJvIGluIHNvbWUgd2F5PyBPciBwZXJoYXBzIGl0IGluaXRpYWxpemVzIHNvbWV0aGluZyB0byB6ZXJvPyBUaGUgXCJodWdlXCIgaW1wbGllcyBzY2FsZSwgc28gcG90ZW50aWFsIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGFyZSBpbW1lZGlhdGVseSBmbGFnZ2VkLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU2OjE5LjM5NzkwOTQ5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0ODU5NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X2h1Z2VfemVyb19mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MTE0PXVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIyMy1cXG5tbS9odWdlX21lbW9yeS5jOjIyNDpzdGF0aWMgYm9vbCBnZXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXFxubW0vaHVnZV9tZW1vcnkuYy0yMjUte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNTU9c3RhdGljIHZvaWQgcHV0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNjMtXFxubW0vaHVnZV9tZW1vcnkuYzoyNjQ6c3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjY1LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjcxLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjcyOlxcdGlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjczLVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz05NTg9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtOTgyLVxcdFxcdCAqIGh1Z2VfemVyb19mb2xpbyB3aWxsIGFsd2F5cyBiZSBOVUxMIG9uIGZhaWx1cmUuIFdlIGFzc3VtZVxcbm1tL2h1Z2VfbWVtb3J5LmM6OTgzOlxcdFxcdCAqIHRoYXQgZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbW9zdCBsaWtlbHkgbm90IGZhaWwgYXNcXG5tbS9odWdlX21lbW9yeS5jLTk4NC1cXHRcXHQgKiB0aHBfc2hyaW5rZXJfaW5pdCgpIGlzIGludm9rZWQgZWFybHkgb24gZHVyaW5nIGJvb3QuXFxubW0vaHVnZV9tZW1vcnkuYy05ODUtXFx0XFx0ICovXFxubW0vaHVnZV9tZW1vcnkuYzo5ODY6XFx0XFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXFxubW0vaHVnZV9tZW1vcnkuYy05ODctXFx0XFx0XFx0cHJfd2FybihcXFwiQWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcXFxcblxcXCIpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNDc4PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1MDAtXFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX09PTTtcXG5tbS9odWdlX21lbW9yeS5jOjE1MDE6XFx0XFx0emVyb19mb2xpbyA9IG1tX2dldF9odWdlX3plcm9fZm9saW8odm1hLVxcdTAwM2V2bV9tbSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xNTAyLVxcdFxcdGlmICh1bmxpa2VseSghemVyb19mb2xpbykpIHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTg2Nj1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkyOS1cXHRcXHQvKlxcbm1tL2h1Z2VfbWVtb3J5LmM6MTkzMDpcXHRcXHQgKiBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBuZXZlciBhbGxvY2F0ZSBhIG5ld1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzMS1cXHRcXHQgKiBmb2xpbyBoZXJlLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSB6ZXJvIHBhZ2UgdG9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzMy1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjE5MzQ6XFx0XFx0bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhkc3RfbW0pO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTkzNS1cXHRcXHRnb3RvIG91dF96ZXJvX3BhZ2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU2OjE5LjQ2MTQwMDYyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI5NjE4NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRm9jdXNpbmcgb24gSHVnZXBhZ2UgWmVybyBGb2xpb3MgYW5kIFNocmlua2luZyoqXG5cblJpZ2h0LCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2Ag4oCTIHRoYXQncyBvdXIgZW50cnkgcG9pbnQgZnVuY3Rpb24sIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSB6ZXJvIGZvbGlvIHByb2Nlc3MuIEFuZCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCDigJMgdGhhdCdzIHRoZSBzaHJpbmtlciBjYWxsYmFjay4gQm90aCBvZiB0aGVzZSBsb29rIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZGVlcGVyIGluc3BlY3Rpb24uIFRoZXkncmUgY2VudHJhbCB0byB0aGUgd2hvbGUgb3BlcmF0aW9uLiBHb29kLCBnb29kLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBhc3BlY3RzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmb2N1cyBvbiBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3QuIElzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIG9wdGlvbiBhdCBwbGF5IGhlcmU/IEl0J3Mgb2Z0ZW4gdGhlIHNpbmdsZSBjcml0aWNhbCBzZXR0aW5nLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBpcyB0aGUgb25seSBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDo1NjoyMi44OTEwMjE2MjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTcxODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9ODQzPWNvbmZpZyBNTV9JRFxcbi0tXFxubW0vS2NvbmZpZy04NDUtXFxubW0vS2NvbmZpZzo4NDY6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODQ3LVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg2ND1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODY5LVxcbm1tL0tjb25maWc6ODcwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg3MS1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg3Ni1cXG5tbS9LY29uZmlnOjg3NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxcbm1tL0tjb25maWctODc4LVxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg4NS1cXG5tbS9LY29uZmlnOjg4NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg4Ny1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODkzPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MDItXFxubW0vS2NvbmZpZzo5MDM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkwNC1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTEyLVxcbm1tL0tjb25maWc6OTEzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTE0LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTIwLVxcbm1tL0tjb25maWc6OTIxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05MjItXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkyOC1cXG5tbS9LY29uZmlnOjkyOTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTkzMC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTkzOD1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTQ3LVxcbm1tL0tjb25maWc6OTQ4OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05NDktXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1Ni1cXG5tbS9LY29uZmlnOjk1NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTk1OC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk2NC1cXG5tbS9LY29uZmlnOjk2NTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTY2LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NzItXFxubW0vS2NvbmZpZzo5NzM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05NzQtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDo1NjoyMi45NTAxOTc5MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ2OTUxMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgTGFuZHNjYXBlKipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0J3MgdGhlIGNvbmZpZyB2YXJpYWJsZSB3ZSdyZSBsb29raW5nIGF0LiBPa2F5LCBtYWtlcyBzZW5zZS4gQnV0IGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIGFsd2F5cyBjaGVjayBpZiBvbmUgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsaWVzIG9uIGFub3RoZXIuIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJ3MgYSBwcmVyZXF1aXNpdGUgaW52b2x2ZWQgaGVyZS4gSXQncyBhIHF1aWNrIHJlZmxleC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcxMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU2OjI2LjA5NzE1MTQyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDY6XFx0bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4NDc6XFx0XFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4gODQ4OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFxcdTAwMjZcXHUwMDI2ICFQUkVFTVBUX1JUXFxuIDg0OTpcXHRcXHRzZWxlY3QgQ09NUEFDVElPTlxcbiA4NTA6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbiA4NTE6XFx0XFx0c2VsZWN0IE1NX0lEXFxuIDg1MjpcXHRcXHRoZWxwXFxuIDg1MzpcXHRcXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcXG4gODU0OlxcdFxcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxcbiA4NTU6XFx0XFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cXG4gODU2OlxcdFxcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcXG4gODU3OlxcdFxcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xcbiA4NTg6XFx0XFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXFxuIDg1OTpcXHRcXG4gODYwOlxcdFxcdCAgSWYgbWVtb3J5IGNvbnN0cmFpbmVkIG9uIGVtYmVkZGVkLCB5b3UgbWF5IHdhbnQgdG8gc2F5IE4uXFxuIDg2MTpcXHRcXG4gODYyOlxcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDg2MzpcXHRcXG4gODY0OlxcdGNob2ljZVxcbiA4NjU6XFx0XFx0cHJvbXB0IFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0IHN5c2ZzIGRlZmF1bHRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDo1NjoyNi4wOTczMDUzNjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1OTI0NzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBIdWdlcGFnZSBaZXJvIEZvbGlvIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGFwcHJvYWNoIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGh1Z2VwYWdlIHplcm8gZm9saW8gb3BlcmF0aW9ucy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byBlbmFibGUgdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29uZmlnLCB0aGF0J3MgYSBnaXZlbi4gTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgc3ltYm9scyB0byBjb25jZW50cmF0ZSB0aGUgZnV6emluZyBvbi4gSSdtIHRoaW5raW5nIHRoZSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgYW5kIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gLlxuXG5BaGEhIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGlzICpzdGF0aWMqLiBDYW4gSSBzdGlsbCBsZXZlcmFnZSBpdCBhcyBhIGZvY3VzIHN5bWJvbD8gTGV0IG1lIHRoaW5rLi4uIHllcywgc3l6a2FsbGVyICpjYW4qIGZvY3VzIG9uIHN0YXRpYyBmdW5jdGlvbnMsIHByb3ZpZGVkIHRoZXkncmUgbm90IGlubGluZWQuIFRoYXQncyBhIGdvb2QgZGlzY292ZXJ5LiBJdCBvcGVucyB1cCBvcHBvcnR1bml0aWVzIHRvIHRhcmdldCBtb3JlIHNwZWNpZmljIGludGVybmFsIGZ1bmN0aW9ucy5cblxuV2FpdCBhIHNlY29uZCwgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIGlzbid0IHN0YXRpYy4gT2theSwgbm8gd29ycmllcy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIGlzIGV4cG9ydGVkLiBJZiBpdCdzIGV4cG9ydGVkLCB0aGVuIHN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byByZWFjaCBpdC4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAgaW4gbXkgdGhvdWdodCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTk1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6NTY6MzAuMTU2NTU0Nzg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDE3ODEwNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbW1fZ2V0X2h1Z2VfemVyb19mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDo1NjozMC4yMTY3NDE4MjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzMzI3OTUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiB0aGUgTm9uLVN0YXRpYyBBc3BlY3RzIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4cG9ydGluZyB0aGlzIHRoaW5nOyBqdXN0IGVuc3VyaW5nIGl0IGlzbid0IHN0YXRpYy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiBjZW50ZXJlZCBvbiBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYC4gSXQncyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgbm8gZG91YnQuIExldCdzIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiBvdGhlciBmdW5jdGlvbnMgYXJlIGludm9sdmVkLlxuXG5SaWdodCwgSSBzZWUgdGhhdCBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgIGFuZCBgY29weV9odWdlX3BtZGAgYm90aCBjYWxsIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYC4gQW5kIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gLCBhcyB3ZSBrbm93LCBpcyB0aGUgc2hyaW5rZXIgY2FsbGJhY2suIFRoYXQgc3VnZ2VzdHMgdGhlIGNvcmUgc3ltYm9scyB0byBmb2N1cyBvbiBhcmUgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgYW5kIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYC4gSSBuZWVkIHRvIGVuc3VyZSBhIGZ1bGwgYXNzZXNzbWVudCBoZXJlLlxuXG5MZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgdG8gY2hlY2sgdGhlIHVzYWdlIG9mIGBodWdlX3plcm9fcGZuYCBlbHNld2hlcmUgdG8gY29tcGxldGUgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MzcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6NTY6MzQuMjUwMDI0MTI1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODUzNDAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX3plcm9fcGZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz04MT1zdHJ1Y3QgZm9saW8gKmh1Z2VfemVyb19mb2xpbyBfX3JlYWRfbW9zdGx5O1xcbm1tL2h1Z2VfbWVtb3J5LmM6ODI6dW5zaWduZWQgbG9uZyBodWdlX3plcm9fcGZuIF9fcmVhZF9tb3N0bHkgPSB+MFVMO1xcbm1tL2h1Z2VfbWVtb3J5LmMtODMtdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyBfX3JlYWRfbW9zdGx5O1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yMjQ9c3RhdGljIGJvb2wgZ2V0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNDUtXFx0fVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjQ2OlxcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgZm9saW9fcGZuKHplcm9fZm9saW8pKTtcXG5tbS9odWdlX21lbW9yeS5jLTI0Ny1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mjk3PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzAyLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzAzOlxcdFxcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgfjBVTCk7XFxubW0vaHVnZV9tZW1vcnkuYy0zMDQtXFx0XFx0emVyb19mb2xpbyA9IHhjaGcoXFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU2OjM0LjMwODU2MzM1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjc4NTE1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYSBzZWFzb25lZCBrZXJuZWwgZGV2ZWxvcGVyOlxuXG4qKlByb2JpbmcgdGhlIEh1Z2UgUGFnZSBaZXJvKipcblxuUmlnaHQsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIEhhbmcgb24uLi4gaXNuJ3QgdGhhdCBgaHVnZV96ZXJvX3BmbmAgdmFyaWFibGUuLi4gaXNuJ3QgaXQgYWxzbyB1dGlsaXplZCB3aXRoaW4gdGhlIGBpc19odWdlX3plcm9fcGFnZWAgYW5kIGBpc19odWdlX3plcm9fcG1kYCBmdW5jdGlvbnM/IEkgc2VlbSB0byByZWNhbGwgaXQgYmVpbmcgdXNlZCBpbiB0aG9zZSBwbGFjZXMgYXMgd2VsbC4gSnVzdCB3YW50IHRvIG1ha2Ugc3VyZSBJ4oCZbSBjb25uZWN0aW5nIHRoZSBkb3RzIGNvcnJlY3RseS4gVGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIG9mIGhvdyB0aGVzZSB6ZXJvIHBhZ2UgcmVwcmVzZW50YXRpb25zIGludGVyYWN0Li4uIGFuZCB0aGVpciB2YXJpb3VzIGZ1bmN0aW9ucy4gR29vZCB0byBjb25maXJtIGhvdyB0aGlzIGlzIGFsbCBpbnRlcmxpbmtlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM0NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU2OjM3LjM3NjQxNzI0M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxMzg5MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZV96ZXJvX3BmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01MzQ9ZXh0ZXJuIHN0cnVjdCBmb2xpbyAqaHVnZV96ZXJvX2ZvbGlvO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUzNTpleHRlcm4gdW5zaWduZWQgbG9uZyBodWdlX3plcm9fcGZuO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUzNi1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01Mzc9c3RhdGljIGlubGluZSBib29sIGlzX2h1Z2VfemVyb19mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTQzLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjU0NDpzdGF0aWMgaW5saW5lIGJvb2wgaXNfaHVnZV96ZXJvX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01NDUte1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjU0NjpcXHRyZXR1cm4gUkVBRF9PTkNFKGh1Z2VfemVyb19wZm4pID09IChwZm4gXFx1MDAyNiB+KEhQQUdFX1BNRF9OUiAtIDEpKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01NDctfVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTQ5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19odWdlX3plcm9fcG1kKHBtZF90IHBtZClcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01NTAte1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjU1MTpcXHRyZXR1cm4gcG1kX3ByZXNlbnQocG1kKSBcXHUwMDI2XFx1MDAyNiBpc19odWdlX3plcm9fcGZuKHBtZF9wZm4ocG1kKSk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTUyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTczNj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfaHVnZV96ZXJvX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03NDAtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NzQxOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19odWdlX3plcm9fcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTc0Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU2OjM3LjQzNTU2MDAwOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjIxNzc0MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRIUCBSYWNlIENvbmRpdGlvbiBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIHRpZWQgdG8gYGh1Z2VfemVyb19wZm5gIGFuZCBgaHVnZV96ZXJvX2ZvbGlvYCwgcGFydGljdWxhcmx5IGFyb3VuZCBgaXNfaHVnZV96ZXJvX3BtZGAuIFRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHRoYXQgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgY291bGQgcG90ZW50aWFsbHkgbnVsbGlmeSBgaHVnZV96ZXJvX2ZvbGlvYCB3aGlsZSBgaHVnZV96ZXJvX3BmbmAgcmVtYWluZWQgdmFsaWQuIFRoaXMgbGVkIHRvIGBpc19odWdlX3plcm9fcG1kYCByZXR1cm5pbmcgYSBmYWxzZSBwb3NpdGl2ZSBmb3IgcGFnZXMgYmVpbmcgZnJlZWQuXG5cblRoZSBmaXgsIGluIGVzc2VuY2UsIHJlb3JkZXJzIHRoaW5ncy4gQnkgc2V0dGluZyBgaHVnZV96ZXJvX3BmbmAgdG8gYH4wVUxgICpiZWZvcmUqIG51bGxpbmcgb3V0IGBodWdlX3plcm9fZm9saW9gLCB3ZSBlbnN1cmUgdGhhdCBgaXNfaHVnZV96ZXJvX3BtZGAgYWNjdXJhdGVseSByZWZsZWN0cyB0aGUgc3RhdGUsIHByZXZlbnRpbmcgdGhhdCBmYWxzZSBwb3NpdGl2ZSBhbmQgYWxsb3dpbmcgdGhlIGZvbGlvIHRvIGJlIHByb3Blcmx5IGZyZWVkLiBGdW5jdGlvbmFsbHkgc291bmQ7IGRlZmluaXRlbHkgYSByYWNlIGNvbmRpdGlvbiBmaXguXG5cblRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZpeCwgc28gZnV6emluZyB0aGlzIGlzIGEgbXVzdC4gYFdvcnRoRnV6emluZz10cnVlYC5cblxuU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmUgdGhhdCdzIGJlZW4gbW9kaWZpZWQsIGFuZCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGFzIHRoYXQncyB0aGUgY291bnRlcnBhcnQgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2hyaW5rZXIuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnLiBZdXAsIGdvb2QuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZW5hYmxlcyBhbGwgdGhlIHJpZ2h0IGNvZGUgcGF0aHMgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBJIGhhdmUgY29uZmlybWVkIGl0J3MgZW5vdWdoLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHdyaXRlIGEgY2xlYXIgZXhwbGFuYXRpb24gb2YgdGhpczogVGhlIHBhdGNoIGRlYWxzIHdpdGggYSByYWNlIGluIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gLiBJdCBmaXhlcyBhIHBvdGVudGlhbCBjb25mbGljdCBieSByZW9yZGVyaW5nIGhvdyBgaHVnZV96ZXJvX3BmbmAgaXMgdXBkYXRlZCBpbiByZWxhdGlvbiB0byB0aGUgY2xlYXJpbmcgb2YgYGh1Z2VfemVyb19mb2xpb2AuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLiBXZSBzaG91bGQgZnV6eiBpdCB0byBlbnN1cmUgaXQgdHJ1bHkgc29sdmVzIHRoZSByYWNlIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJlZ3Jlc3Npb25zIGR1cmluZyBUSFAgc2hyaW5rZXIgb3BlcmF0aW9ucy5cblxuTXkgZm9jdXMgc2hvdWxkIGJlOlxuKiAgIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIC0gdGhlIG1vZGlmaWVkIHNocmlua2VyIGZ1bmN0aW9uLlxuKiAgIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCAtIHRoZSBodWdlIHplcm8gZm9saW8gYWxsb2NhdGlvbiBmdW5jdGlvbiAocmFjZSBjb25kaXRpb24pLlxuXG5UaGUgcmVsZXZhbnQgY29uZmlnIGlzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMDAsIk91dHB1dFRva2VucyI6MTQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjU2OjQ1LjY1NzMzNzExWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgzMjc4NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuXCIsXG4gICAgXCJtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCBieSByZW9yZGVyaW5nIHRoZSB1cGRhdGUgb2YgYGh1Z2VfemVyb19wZm5gIGFuZCB0aGUgY2xlYXJpbmcgb2YgYGh1Z2VfemVyb19mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmFjZSBjb25kaXRpb24gaXMgcmVzb2x2ZWQgYW5kIG5vIG5ldyBpc3N1ZXMgYXJlIGludHJvZHVjZWQgZHVyaW5nIFRIUCBzaHJpbmtlciBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5cIixcbiAgICBcIm1tX2dldF9odWdlX3plcm9fZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGJ5IHJlb3JkZXJpbmcgdGhlIHVwZGF0ZSBvZiBgaHVnZV96ZXJvX3BmbmAgYW5kIHRoZSBjbGVhcmluZyBvZiBgaHVnZV96ZXJvX2ZvbGlvYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSByYWNlIGNvbmRpdGlvbiBpcyByZXNvbHZlZCBhbmQgbm8gbmV3IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBkdXJpbmcgVEhQIHNocmlua2VyIGV4ZWN1dGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowq8d6w[1] Phase: Succeeded StartedAt: 2026-07-25 14:56:57 +0000 UTC FinishedAt: 2026-07-25 14:56:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-25 14:56:57 +0000 UTC FinishedAt: 2026-07-25 14:56:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2] Phase: Succeeded StartedAt: 2026-07-25 14:56:57 +0000 UTC FinishedAt: 2026-07-25 19:32:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-25 14:56:57 +0000 UTC FinishedAt: 2026-07-25 19:32:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-25 14:56:57 +0000 UTC FinishedAt: 2026-07-25 14:57:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-25 14:56:57 +0000 UTC FinishedAt: 2026-07-25 14:57:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowq8d6w/series-workflowq8d6w-convert-artifact-1687542189/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-25 14:57:07 +0000 UTC FinishedAt: 2026-07-25 15:36:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-25 14:57:07 +0000 UTC FinishedAt: 2026-07-25 15:36:04 +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:*0afe1946-cc10-4f3d-b85c-c4e3c42e52fb,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-workflowq8d6w/series-workflowq8d6w-convert-artifact-1687542189/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": "d6cbeca5-8b3d-46b7-899e-7cdeff5c8293", "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-workflowq8d6w/series-workflowq8d6w-build-action-815011235/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-25 14:57:07 +0000 UTC FinishedAt: 2026-07-25 15:35:54 +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:*0afe1946-cc10-4f3d-b85c-c4e3c42e52fb,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-workflowq8d6w/series-workflowq8d6w-convert-artifact-1687542189/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": "d6cbeca5-8b3d-46b7-899e-7cdeff5c8293", "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-workflowq8d6w/series-workflowq8d6w-build-action-815011235/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-25 15:36:04 +0000 UTC FinishedAt: 2026-07-25 15:36:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-25 15:36:04 +0000 UTC FinishedAt: 2026-07-25 15:36:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-25 15:36:04 +0000 UTC FinishedAt: 2026-07-25 15:36:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-25 15:36:04 +0000 UTC FinishedAt: 2026-07-25 15:36:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowq8d6w/series-workflowq8d6w-convert-artifact-3411008008/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-25 15:36:24 +0000 UTC FinishedAt: 2026-07-25 15:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-25 15:36:24 +0000 UTC FinishedAt: 2026-07-25 15:38:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d6cbeca5-8b3d-46b7-899e-7cdeff5c8293,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-workflowq8d6w/series-workflowq8d6w-build-action-815011235/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-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-25 15:38:34 +0000 UTC FinishedAt: 2026-07-25 15:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-25 15:38:34 +0000 UTC FinishedAt: 2026-07-25 15:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-25 15:38:34 +0000 UTC FinishedAt: 2026-07-25 16:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-25 15:38:34 +0000 UTC FinishedAt: 2026-07-25 16:24:06 +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:*0afe1946-cc10-4f3d-b85c-c4e3c42e52fb,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-workflowq8d6w/series-workflowq8d6w-convert-artifact-3411008008/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": "e2ea22fe-794b-42cc-bd6a-ec87dbd38af3", "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-workflowq8d6w/series-workflowq8d6w-build-action-3123215796/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-25 15:38:34 +0000 UTC FinishedAt: 2026-07-25 16:23:56 +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:*0afe1946-cc10-4f3d-b85c-c4e3c42e52fb,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-workflowq8d6w/series-workflowq8d6w-convert-artifact-3411008008/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": "e2ea22fe-794b-42cc-bd6a-ec87dbd38af3", "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-workflowq8d6w/series-workflowq8d6w-build-action-3123215796/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-25 16:24:06 +0000 UTC FinishedAt: 2026-07-25 16:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-25 16:24:06 +0000 UTC FinishedAt: 2026-07-25 16:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-25 16:24:06 +0000 UTC FinishedAt: 2026-07-25 16:25:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-25 16:24:06 +0000 UTC FinishedAt: 2026-07-25 16:25:47 +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:*e2ea22fe-794b-42cc-bd6a-ec87dbd38af3,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-workflowq8d6w/series-workflowq8d6w-build-action-3123215796/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-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-25 16:25:56 +0000 UTC FinishedAt: 2026-07-25 19:32:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-25 16:25:56 +0000 UTC FinishedAt: 2026-07-25 19:32:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},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:*d6cbeca5-8b3d-46b7-899e-7cdeff5c8293,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e2ea22fe-794b-42cc-bd6a-ec87dbd38af3,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-workflowq8d6w/series-workflowq8d6w-build-action-815011235/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-workflowq8d6w/series-workflowq8d6w-build-action-3123215796/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-25 16:25:56 +0000 UTC FinishedAt: 2026-07-25 16:26:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-25 16:25:56 +0000 UTC FinishedAt: 2026-07-25 16:26:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},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-workflowq8d6w/series-workflowq8d6w-convert-artifact-854446017/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-25 16:25:56 +0000 UTC FinishedAt: 2026-07-25 16:25:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-25 16:25:56 +0000 UTC FinishedAt: 2026-07-25 16:25:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-25 16:25:56 +0000 UTC FinishedAt: 2026-07-25 16:25:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-25 16:26:06 +0000 UTC FinishedAt: 2026-07-25 19:32:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8d6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_huge_zero_folio_scan","mm_get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4fc089235378d1f9ddb6bcbe67c192ffdcaae0ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"f00cd452-c5b8-40ce-85e1-03cd72ecb5b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-25 16:26:06 +0000 UTC FinishedAt: 2026-07-25 19:32:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d6cbeca5-8b3d-46b7-899e-7cdeff5c8293,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e2ea22fe-794b-42cc-bd6a-ec87dbd38af3,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-workflowq8d6w/series-workflowq8d6w-build-action-815011235/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-workflowq8d6w/series-workflowq8d6w-build-action-3123215796/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-workflowq8d6w/series-workflowq8d6w-convert-artifact-854446017/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,}