Name: series-workflowzm9sz Phase: Succeeded StartedAt: 2026-07-20 17:13:48 +0000 UTC FinishedAt: 2026-07-20 19:05:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzm9sz[0] Phase: Succeeded StartedAt: 2026-07-20 17:13:48 +0000 UTC FinishedAt: 2026-07-20 17:57:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzm9sz[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 17:13:48 +0000 UTC FinishedAt: 2026-07-20 17:57:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3fe08b9796f36ef437ab9328e7dd1e5ff2d66603", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3fe08b9796f36ef437ab9328e7dd1e5ff2d66603", "config_name": "upstream-apparmor-kasan.config", "series_id": "55aaeb5e-89eb-4783-b692-781692de2ad7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "kmem_cache_return_sheaf", "refill_sheaf" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDE3OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a21lbV9jYWNoZV9yZXR1cm5fc2hlYWYmIzM0OywKICAgICYjMzQ7cmVmaWxsX3NoZWFmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTFVCIGFsbG9jYXRvciB0byBwcmV2ZW50IGByZWZpbGxfc2hlYWZgIGZyb20gdXNpbmcgbWVtb3J5IHJlc2VydmVzIG9yIHdhcm5pbmcgb24gYWxsb2NhdGlvbiBmYWlsdXJlIHdoZW4gcmV0dXJuaW5nIGEgc2hlYWYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE3OjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDMzMzgwNWQ5MmNjNjgwMWI1NTI1MjM0NWQ0YjIyMDEzMDA2ODk4N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDE3OjU1OjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggNTNiNDk3NmQzODMxOGYuLjM1N2I3NTIyYzgxNzAwIDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmNcbkBAIC01MTIzLDcgJiM0Mzs1MTIzLDcgQEAgdm9pZCBrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxuIFx0ICogc2ltcGx5IGZsdXNoIGFuZCBmcmVlIGl0LlxuIFx0ICovXG4gXHRpZiAoIWJhcm4gfHwgZGF0YV9yYWNlKGJhcm4tXHUwMDNlbnJfZnVsbCkgXHUwMDNlPSBNQVhfRlVMTF9TSEVBVkVTIHx8XG4tXHQgICAgcmVmaWxsX3NoZWFmKHMsIHNoZWFmLCBnZnApKSB7XG4mIzQzO1x0ICAgIHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTikpIHtcbiBcdFx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHNoZWFmKTtcbiBcdFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZik7XG4gXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrbWVtX2NhY2hlX3JldHVybl9zaGVhZiYjMzQ7LAogICAgJiMzNDtyZWZpbGxfc2hlYWYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNMVUIgYWxsb2NhdG9yIHRvIHByZXZlbnQgYHJlZmlsbF9zaGVhZmAgZnJvbSB1c2luZyBtZW1vcnkgcmVzZXJ2ZXMgb3Igd2FybmluZyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUgd2hlbiByZXR1cm5pbmcgYSBzaGVhZi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQzMzM4MDVkOTJjYzY4MDFiNTUyNTIzNDVkNGIyMjAxMzAwNjg5ODcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyMCAxNzo1NTozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCA1M2I0OTc2ZDM4MzE4Zi4uMzU3Yjc1MjJjODE3MDAgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmMKQEAgLTUxMjMsNyAmIzQzOzUxMjMsNyBAQCB2b2lkIGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsCiAJICogc2ltcGx5IGZsdXNoIGFuZCBmcmVlIGl0LgogCSAqLwogCWlmICghYmFybiB8fCBkYXRhX3JhY2UoYmFybi0mZ3Q7bnJfZnVsbCkgJmd0Oz0gTUFYX0ZVTExfU0hFQVZFUyB8fAotCSAgICByZWZpbGxfc2hlYWYocywgc2hlYWYsIGdmcCkpIHsKJiM0MzsJICAgIHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTikpIHsKIAkJc2hlYWZfZmx1c2hfdW51c2VkKHMsIHNoZWFmKTsKIAkJZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZik7CiAJCXJldHVybjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTTFVCIEFsbG9jYXRvciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYG1tL3NsdWIuY2AsIHNwZWNpZmljYWxseSB0aGUgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgcmlnaHQgdGhlcmU6IHRoZXkmIzM5O3JlIGZpZGRsaW5nIHdpdGggdGhlIGBnZnBgIGZsYWdzIHBhc3NlZCB0byBgcmVmaWxsX3NoZWFmYC4gVGhleSYjMzk7dmUgYWRkZWQgYF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1dBUk5gLiBUaGlzIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGFsbG9jYXRpb24gYmVoYXZpb3IgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgoKVGhpcyBpcyBTTFVCLCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdG9yLiBUaGUgcGF0Y2ggc2VlbXMgZnVuY3Rpb25hbGx5IHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBhIGNoYW5nZSBpbiB0aGUgYWxsb2NhdGlvbiBmbGFncy4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGByZWZpbGxfc2hlYWZgIGlzIGdldHRpbmcgY2FsbGVkIGhlcmUsIGFuZCBpdCYjMzk7cyBnZXR0aW5nIHRoZXNlIG5ldyBmbGFncy4gSXQmIzM5O3Mgb2J2aW91c2x5IGRvaW5nIGFuIGFsbG9jYXRpb24gb2Ygc29tZSBzb3J0IGlmIHRoaXMgaXMgYWZmZWN0aW5nIHRoZSBmbGFncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcmVmaWxsX3NoZWFmYCBhY3R1YWxseSAqZG9lcyogaW4gcmVsYXRpb24gdG8gYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCwgYW5kIHdoeSB0aGVzZSBmbGFncyBhcmUgaW1wb3J0YW50LiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgZm9yIGJvdGggZnVuY3Rpb25zIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttZW1fY2FjaGVfcmV0dXJuX3NoZWFmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz01MDA4PWttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbi0tXG5tbS9zbHViLmMtNTA5MC0gKi9cbm1tL3NsdWIuYzo1MDkxOnZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbm1tL3NsdWIuYy01MDkyLVx0XHRcdCAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxuLS1cbm1tL3NsdWIuYz01MTQ5PWludCBrbWVtX2NhY2hlX3JlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3NsdWIuYy01MTg1LVxubW0vc2x1Yi5jOjUxODY6XHRrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzLCBnZnAsICpzaGVhZnApO1xubW0vc2x1Yi5jLTUxODctXHQqc2hlYWZwID0gc2hlYWY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGluIGBtbS9zbHViLmNgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBmb2N1c2luZyBvbiBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgLiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgU0xVQiBhbGxvY2F0b3IgYW5kIHByb2JhYmx5IGEgYnVsayByZXR1cm4gb3BlcmF0aW9uLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBjb3JlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBwYXRocyB3aXRoaW4gU0xVQi4gSXMgdGhpcyByZWxhdGVkIHRvIHBlci1DUFUgY2FjaGVzLCBub2RlIGNhY2hlcywgb3Igc29tZXRoaW5nIG1vcmUgZ3JhbnVsYXI/IEkmIzM5O20gcGljdHVyaW5nIHRoZSBga21lbV9jYWNoZWAgZGF0YSBzdHJ1Y3R1cmUgaW4gbXkgaGVhZCDigJMgcGFydGljdWxhcmx5IHRoZSBmcmVlbGlzdCBtYW5hZ2VtZW50LiBJcyBpdCB3b3JraW5nIHdpdGggcGFydGlhbCBzbGFicyBvciBmdWxseSBwb3B1bGF0ZWQgb25lcz8gSXMgdGhlICYjMzQ7c2hlYWYmIzM0OyBqdXN0IGEgbWV0YXBob3IgZm9yIGEgZ3JvdXAgb2Ygb2JqZWN0cz8gT3IgaXMgdGhlcmUgYSBtb3JlIHNwZWNpZmljIG1lYW5pbmcgaGVyZSBpbiB0aGUgU0xVQiBjb250ZXh0PyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjbHVlcy4gSSBzdXNwZWN0IHdl4oCZcmUgdHJ5aW5nIHRvIHJldHVybiBhIGJ1bmNoIG9mIHByZXZpb3VzbHkgYWxsb2NhdGVkIG9iamVjdHMgYmFjayB0byB0aGUgY2FjaGUuIEkgaG9wZSB0aGUgY29udGV4dCBpcyBvYnZpb3VzIGZyb20gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDkxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUwOTE6XHR2b2lkIGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXG41MDkyOlx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXG41MDkzOlx0e1xuNTA5NDpcdFx0c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcztcbjUwOTU6XHRcdHN0cnVjdCBub2RlX2Jhcm4gKmJhcm47XG41MDk2Olx0XG41MDk3Olx0XHRpZiAodW5saWtlbHkoKHNoZWFmLVx1MDAzZWNhcGFjaXR5ICE9IHMtXHUwMDNlc2hlYWZfY2FwYWNpdHkpXG41MDk4Olx0XHRcdCAgICAgfHwgc2hlYWYtXHUwMDNlcGZtZW1hbGxvYykpIHtcbjUwOTk6XHRcdFx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHNoZWFmKTtcbjUxMDA6XHRcdFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZik7XG41MTAxOlx0XHRcdHJldHVybjtcbjUxMDI6XHRcdH1cbjUxMDM6XHRcbjUxMDQ6XHRcdGxvY2FsX2xvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKTtcbjUxMDU6XHRcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVx1MDAzZWNwdV9zaGVhdmVzKTtcbjUxMDY6XHRcdGJhcm4gPSBnZXRfYmFybihzKTtcbjUxMDc6XHRcbjUxMDg6XHRcdGlmICghcGNzLVx1MDAzZXNwYXJlKSB7XG41MTA5Olx0XHRcdHBjcy1cdTAwM2VzcGFyZSA9IHNoZWFmO1xuNTExMDpcdFx0XHRzaGVhZiA9IE5VTEw7XG41MTExOlx0XHRcdHN0YXQocywgU0hFQUZfUkVUVVJOX0ZBU1QpO1xuNTExMjpcdFx0fVxuNTExMzpcdFxuNTExNDpcdFx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG41MTE1Olx0XG41MTE2Olx0XHRpZiAoIXNoZWFmKVxuNTExNzpcdFx0XHRyZXR1cm47XG41MTE4Olx0XG41MTE5Olx0XHRzdGF0KHMsIFNIRUFGX1JFVFVSTl9TTE9XKTtcbjUxMjA6XHRcbjUxMjE6XHRcdC8qXG41MTIyOlx0XHQgKiBJZiB0aGUgYmFybiBoYXMgdG9vIG1hbnkgZnVsbCBzaGVhdmVzIG9yIHdlIGZhaWwgdG8gcmVmaWxsIHRoZSBzaGVhZixcbjUxMjM6XHRcdCAqIHNpbXBseSBmbHVzaCBhbmQgZnJlZSBpdC5cbjUxMjQ6XHRcdCAqL1xuNTEyNTpcdFx0aWYgKCFiYXJuIHx8IGRhdGFfcmFjZShiYXJuLVx1MDAzZW5yX2Z1bGwpIFx1MDAzZT0gTUFYX0ZVTExfU0hFQVZFUyB8fFxuNTEyNjpcdFx0ICAgIHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTikpIHtcbjUxMjc6XHRcdFx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHNoZWFmKTtcbjUxMjg6XHRcdFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZik7XG41MTI5Olx0XHRcdHJldHVybjtcbjUxMzA6XHRcdH1cbjUxMzE6XHRcbjUxMzI6XHRcdGJhcm5fcHV0X2Z1bGxfc2hlYWYoYmFybiwgc2hlYWYpO1xuNTEzMzpcdFx0c3RhdChzLCBCQVJOX1BVVCk7XG41MTM0Olx0fVxuNTEzNTpcdFxuNTEzNjpcdC8qXG41MTM3Olx0ICogUmVmaWxsIGEgc2hlYWYgcHJldmlvdXNseSByZXR1cm5lZCBieSBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYgdG8gYXQgbGVhc3RcbjUxMzg6XHQgKiB0aGUgZ2l2ZW4gc2l6ZS5cbjUxMzk6XHQgKlxuNTE0MDpcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLiBUaGUgc2hlYWYgd2lsbCBjb250YWluIGF0IGxlYXN0IEBzaXplIG9iamVjdHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYyMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoZSBjaGFuZ2UsIGFzIEkgc2VlIGl0OgoKKipTTFVCIEFsbG9jYXRvciBDaGFuZ2UgQW5hbHlzaXMqKgoKT2theSwgc28gdGhlIG1vZGlmaWNhdGlvbiBpcyBpbiBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBTTFVCIGFsbG9jYXRvci4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTmAgdG8gdGhlIGBnZnBgIGZsYWdzIHdoZW4gY2FsbGluZyBgcmVmaWxsX3NoZWFmYC4gVGhpcyBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IGByZWZpbGxfc2hlYWZgIGZyb20gcmVzb3J0aW5nIHRvIG1lbW9yeSByZXNlcnZlcyBvciBpc3N1aW5nIHdhcm5pbmdzIGlmIGFsbG9jYXRpb24gZmFpbHMsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYmVoYXZpb3JhbCBzaGlmdC4KClRoaXMgaW1tZWRpYXRlbHkgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0JiMzNDsgdG8gbWUuIEFueSBjaGFuZ2UgdGhhdCBhbHRlcnMgYWxsb2NhdGlvbiBiZWhhdmlvciBsaWtlIHRoaXMgaXMgcHJpbWUgdGVycml0b3J5IGZvciB1bmNvdmVyaW5nIHN1YnRsZSBidWdzIG9yIGVkZ2UgY2FzZXMuIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAgYW5kIGByZWZpbGxfc2hlYWZgIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBhbiBleWUgb24uCgpJIHNob3VsZCB2ZXJpZnkgcXVpY2tseSB3aGV0aGVyIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAgaXMgZXhwb3J0ZWQuIElmIGl0JiMzOTtzIGludGVybmFsLCB0aGUgZnV6emluZyBhcHByb2FjaCB3aWxsIG5lZWQgdG8gYmUgZGlmZmVyZW50LCBidXQgZXZlbiBpbnRlcm5hbCBmdW5jdGlvbnMgY2FuIGJlIHRhcmdldGVkLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IHF1aWNrbHkgYmVmb3JlIGRpdmluZyBkZWVwZXIgaW50byB0aGUgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmttZW1fY2FjaGVfcmV0dXJuX3NoZWFmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDYxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2UgTGFuZHNjYXBlKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoZXJlIHRoaXMgaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqLiBJdCYjMzk7cyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IG9wZXJhdGlvbmFsIGNvbnRleHQgYmVmb3JlIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIGVmZmVjdGl2ZW5lc3MsIGxpbWl0YXRpb25zLCBvciBwb3RlbnRpYWwgZm9yIGltcHJvdmVtZW50LiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBhZG9wdGlvbiBhbmQgYXBwbGljYXRpb24uIFNvLCBsZXQmIzM5O3Mgc3RhcnQgbWFwcGluZyBvdXQgdGhlIHRlcnJhaW4uIFdoZXJlIGFtIEkgZmluZGluZyBpdD8gV2hhdCBpcyBpdCBiZWluZyBlbXBsb3llZCBmb3I/IFdoYXQgYXJlIHRoZSBrZXkgdXNlIGNhc2VzPyBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uYWwgZmlyc3Qgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21lbV9jYWNoZV9yZXR1cm5fc2hlYWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zbGFiLmg9OTE2PWludCBrbWVtX2NhY2hlX3JlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTkxOC1cbmluY2x1ZGUvbGludXgvc2xhYi5oOjkxOTp2b2lkIGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC05MjAtXHRcdFx0XHQgICAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKTtcbi0tXG5saWIvbWFwbGVfdHJlZS5jPTE0Nz1zdGF0aWMgdm9pZCBtdF9yZXR1cm5fc2hlYWYoc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxubGliL21hcGxlX3RyZWUuYy0xNDgte1xubGliL21hcGxlX3RyZWUuYzoxNDk6XHRrbWVtX2NhY2hlX3JldHVybl9zaGVhZihtYXBsZV9ub2RlX2NhY2hlLCBHRlBfTk9XQUlULCBzaGVhZik7XG5saWIvbWFwbGVfdHJlZS5jLTE1MC19XG4tLVxubW0vc2x1Yi5jPTUwMDg9a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKVxuLS1cbm1tL3NsdWIuYy01MDkwLSAqL1xubW0vc2x1Yi5jOjUwOTE6dm9pZCBrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxubW0vc2x1Yi5jLTUwOTItXHRcdFx0ICAgICBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXG4tLVxubW0vc2x1Yi5jPTUxNDk9aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXG4tLVxubW0vc2x1Yi5jLTUxODUtXG5tbS9zbHViLmM6NTE4NjpcdGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmKHMsIGdmcCwgKnNoZWFmcCk7XG5tbS9zbHViLmMtNTE4Ny1cdCpzaGVhZnAgPSBzaGVhZjtcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0xOTI9a21lbV9jYWNoZV9hbGxvY19mcm9tX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmgtMTk0LVxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg6MTk1OnZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTE5Ni1cdFx0c3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKTtcbi0tXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jPTI4Mz1pbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbi0tXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTI5NS1cbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM6Mjk2Olx0XHRrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzLCBnZnAsICpzaGVhZnApO1xudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0yOTctXHRcdCpzaGVhZnAgPSBzaGVhZjtcbi0tXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTMwNy1cbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM6MzA4OnZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMzA5LVx0XHQgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDMzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgVXNlIG9mIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAqKgoKT2theSwgc28gSSBzZWUgdGhpcyBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGZ1bmN0aW9uIGlzIHNob3dpbmcgdXAgaW4gYGxpYi9tYXBsZV90cmVlLmNgIGFuZCBgbW0vc2x1Yi5jYC4gSW50ZXJlc3RpbmcuIFRoZSBtZW50aW9uIGluIGBtbS9zbHViLmNgIGlzIHRoZSBrZXkg4oCTIGFoLCB3YWl0IGEgbWludXRlLCBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGlzIGEgbmV3IGFkZGl0aW9uIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEFuZCB0aGUgbmFtZSAmIzM0O3NoZWFmJiMzNDsgc3VnZ2VzdHMgdGhpcyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIHBlci1DUFUgY2FjaGluZywgcmlnaHQ/IExpa2VseSBhIG5ldyBpbXBsZW1lbnRhdGlvbiBvciBvcHRpbWl6YXRpb24gcmVsYXRlZCB0byB0aG9zZSBzdHJ1Y3R1cmVzLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIsIHRoaXMgd2FycmFudHMgYSBjb25maWcgZXhwbG9yYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgZW5hYmxpbmcgY29uZGl0aW9ucy4gSSBuZWVkIHRvIHNlZSB3aGljaCBjb25maWd1cmF0aW9ucyB0cmlnZ2VyIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzIGZvciB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZmlnIG9wdGlvbnMgZGlyZWN0bHkgdGllZCB0byB0aGUgY29uY2VwdCBvZiAmIzM0O3NoZWF2ZXMmIzM0OyBvciBhbnl0aGluZyB0aGF0IHNvdW5kcyByZWxhdGVkLiBUaGF0JiMzOTtsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBwcm9wZXJseSB1bmRlcnN0YW5kIGl0cyByb2xlIGluIFNMVUIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19TTFVCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0xOTM9ZW51bSBzbGFiX2ZsYWdzIHtcbi0tXG5tbS9zbHViLmMtMTk4LVxubW0vc2x1Yi5jOjE5OTojaWZuZGVmIENPTkZJR19TTFVCX1RJTllcbm1tL3NsdWIuYy0yMDAtI2RlZmluZSBfX2Zhc3RwYXRoX2lubGluZSBfX2Fsd2F5c19pbmxpbmVcbi0tXG5tbS9zbHViLmMtMjA0LVxubW0vc2x1Yi5jOjIwNTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYzoyMDY6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHX09OXG5tbS9zbHViLmMtMjA3LURFRklORV9TVEFUSUNfS0VZX1RSVUUoc2x1Yl9kZWJ1Z19lbmFibGVkKTtcbi0tXG5tbS9zbHViLmM9MjA5PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNsdWJfZGVidWdfZW5hYmxlZCk7XG5tbS9zbHViLmMtMjEwLSNlbmRpZlxubW0vc2x1Yi5jOjIxMTojZW5kaWZcdFx0LyogQ09ORklHX1NMVUJfREVCVUcgKi9cbm1tL3NsdWIuYy0yMTItXG4tLVxubW0vc2x1Yi5jPTI0OT12b2lkICpmaXh1cF9yZWRfbGVmdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqcClcbi0tXG5tbS9zbHViLmMtMjY3LVxubW0vc2x1Yi5jOjI2ODojaWZuZGVmIENPTkZJR19TTFVCX1RJTllcbm1tL3NsdWIuYy0yNjktLypcbi0tXG5tbS9zbHViLmM9MzM4PXN0YXRpYyBpbmxpbmUgaW50IHN5c2ZzX3NsYWJfYWRkKHN0cnVjdCBrbWVtX2NhY2hlICpzKSB7IHJldHVybiAwOyB9XG4tLVxubW0vc2x1Yi5jLTM0MC1cbm1tL3NsdWIuYzozNDE6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU0xVQl9ERUJVRylcbm1tL3NsdWIuYy0zNDItc3RhdGljIHZvaWQgZGVidWdmc19zbGFiX2FkZChzdHJ1Y3Qga21lbV9jYWNoZSAqKTtcbi0tXG5tbS9zbHViLmM9MzUyPWVudW0gc3RhdF9pdGVtIHtcbi0tXG5tbS9zbHViLmMtMzgxLVxubW0vc2x1Yi5jOjM4MjojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcbm1tL3NsdWIuYy0zODMtc3RydWN0IGttZW1fY2FjaGVfc3RhdHMge1xuLS1cbm1tL3NsdWIuYz0zODg9c3RhdGljIGlubGluZSB2b2lkIHN0YXQoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKnMsIGVudW0gc3RhdF9pdGVtIHNpKVxubW0vc2x1Yi5jLTM4OS17XG5tbS9zbHViLmM6MzkwOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xubW0vc2x1Yi5jLTM5MS1cdC8qXG4tLVxubW0vc2x1Yi5jPTQwMD12b2lkIHN0YXRfYWRkKGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLCBlbnVtIHN0YXRfaXRlbSBzaSwgaW50IHYpXG5tbS9zbHViLmMtNDAxLXtcbm1tL3NsdWIuYzo0MDI6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXG5tbS9zbHViLmMtNDAzLVx0cmF3X2NwdV9hZGQocy1cdTAwM2VjcHVfc3RhdHMtXHUwMDNlc3RhdFtzaV0sIHYpO1xuLS1cbm1tL3NsdWIuYz00NDQ9c3RydWN0IGttZW1fY2FjaGVfbm9kZSB7XG4tLVxubW0vc2x1Yi5jLTQ0Ny1cdHN0cnVjdCBsaXN0X2hlYWQgcGFydGlhbDtcbm1tL3NsdWIuYzo0NDg6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNDQ5LVx0YXRvbWljX2xvbmdfdCBucl9zbGFicztcbi0tXG5tbS9zbHViLmM9OTA2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTkxMS1cbm1tL3NsdWIuYzo5MTI6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtOTEzLVxuLS1cbm1tL3NsdWIuYz05ODE9c3RhdGljIGlubGluZSB2b2lkICpyZXN0b3JlX3JlZF9sZWZ0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpwKVxuLS1cbm1tL3NsdWIuYy05OTEtICovXG5tbS9zbHViLmM6OTkyOiNpZiBkZWZpbmVkKENPTkZJR19TTFVCX0RFQlVHX09OKVxubW0vc2x1Yi5jLTk5My1zdGF0aWMgc2xhYl9mbGFnc190IHNsdWJfZGVidWcgPSBERUJVR19ERUZBVUxUX0ZMQUdTO1xuLS1cbm1tL3NsdWIuYz0xMzExPWNoZWNrX2J5dGVzX2FuZF9yZXBvcnQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0xMzc0LSAqXG5tbS9zbHViLmM6MTM3NTogKiBbTWFuZGF0b3J5IHBhZGRpbmddIChpZiBDT05GSUdfU0xVQl9ERUJVRyBcdTAwMjZcdTAwMjYgU0xBQl9SRURfWk9ORSlcbm1tL3NsdWIuYy0xMzc2LSAqICAgLSBPbmUgbWFuZGF0b3J5IGRlYnVnIHdvcmQgdG8gZ3VhcmFudGVlIGEgbWluaW11bSBwb2lzb25lZCBnYXBcbi0tXG5tbS9zbHViLmM9MTg4ND1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9zbHViX2RlYnVnKGNvbnN0IGNoYXIgKnN0ciwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vc2x1Yi5jLTE5MTctXHQgKiBzbGFiX2RlYnVnIHNob3VsZCBiZSB1bmNoYW5nZWQgKDAgb3IgREVCVUdfREVGQVVMVF9GTEFHUywgZGVwZW5kaW5nXG5tbS9zbHViLmM6MTkxODpcdCAqIG9uIENPTkZJR19TTFVCX0RFQlVHX09OKS4gV2UgY2FuIGV4dGVuZGVkIHRoYXQgdG8gbXVsdGlwbGUgbGlzdHMgYXNcbm1tL3NsdWIuYy0xOTE5LVx0ICogbG9uZyBhcyB0aGVyZSBpcyBubyBvcHRpb24gc3BlY2lmeWluZyBmbGFncyB3aXRob3V0IGEgc2xhYiBsaXN0LlxuLS1cbm1tL3NsdWIuYz0xOTU4PXNsYWJfZmxhZ3NfdCBrbWVtX2NhY2hlX2ZsYWdzKHNsYWJfZmxhZ3NfdCBmbGFncywgY29uc3QgY2hhciAqbmFtZSlcbi0tXG5tbS9zbHViLmMtMjAxMS19XG5tbS9zbHViLmM6MjAxMjojZWxzZSAvKiAhQ09ORklHX1NMVUJfREVCVUcgKi9cbm1tL3NsdWIuYy0yMDEzLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9vYmplY3RfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCkge31cbi0tXG5tbS9zbHViLmM9MjA0Nj1zdGF0aWMgaW5saW5lIHZvaWQgZGVjX3NsYWJzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlLFxubW0vc2x1Yi5jLTIwNDctXHRcdFx0XHRcdFx0XHRpbnQgb2JqZWN0cykge31cbm1tL3NsdWIuYzoyMDQ4OiNlbmRpZiAvKiBDT05GSUdfU0xVQl9ERUJVRyAqL1xubW0vc2x1Yi5jLTIwNDktXG4tLVxubW0vc2x1Yi5jPTI1NTU9c3RhdGljIGlubGluZSBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG4tLVxubW0vc2x1Yi5jLTI1NjAtXG5tbS9zbHViLmM6MjU2MTojaWZkZWYgQ09ORklHX1NMVUJfUkNVX0RFQlVHXG5tbS9zbHViLmMtMjU2Mi1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpO1xuLS1cbm1tL3NsdWIuYz0yNTY0PXN0cnVjdCByY3VfZGVsYXllZF9mcmVlIHtcbi0tXG5tbS9zbHViLmMtMjU3NC0gKiBSZXR1cm5zIHRydWUgaWYgZnJlZWluZyBvZiB0aGUgb2JqZWN0IGNhbiBwcm9jZWVkLCBmYWxzZSBpZiBpdHMgcmV1c2Vcbm1tL3NsdWIuYzoyNTc1OiAqIHdhcyBkZWxheWVkIGJ5IENPTkZJR19TTFVCX1JDVV9ERUJVRyBvciBLQVNBTiBxdWFyYW50aW5lLCBvciBpdCB3YXMgcmV0dXJuZWRcbm1tL3NsdWIuYy0yNTc2LSAqIHRvIEtGRU5DRS5cbi0tXG5tbS9zbHViLmM9MjU5Nz1ib29sIHNsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICp4LCBib29sIGluaXQsXG4tLVxubW0vc2x1Yi5jLTI2MjUtXG5tbS9zbHViLmM6MjYyNjojaWZkZWYgQ09ORklHX1NMVUJfUkNVX0RFQlVHXG5tbS9zbHViLmMtMjYyNy1cdGlmIChzdGlsbF9hY2Nlc3NpYmxlKSB7XG4tLVxubW0vc2x1Yi5jLTI2NDUtXHR9XG5tbS9zbHViLmM6MjY0NjojZW5kaWYgLyogQ09ORklHX1NMVUJfUkNVX0RFQlVHICovXG5tbS9zbHViLmMtMjY0Ny1cbi0tXG5tbS9zbHViLmM9MzU0OT1zdGF0aWMgdm9pZCAqYWxsb2Nfc2luZ2xlX2Zyb21fcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMzU1NS1cbm1tL3NsdWIuYzozNTU2OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTM1NTctXHRpZiAocy1cdTAwM2VmbGFncyBcdTAwMjYgU0xBQl9DT05TSVNURU5DWV9DSEVDS1MpIHtcbi0tXG5tbS9zbHViLmM9MzgwMD1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fcGFydGlhbF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0zODI4LVxubW0vc2x1Yi5jOjM4Mjk6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcbm1tL3NsdWIuYy0zODMwLVx0XHRcdG9iamVjdCA9IGFsbG9jX3NpbmdsZV9mcm9tX3BhcnRpYWwocywgbiwgc2xhYixcbi0tXG5tbS9zbHViLmM9NDE0Nj1zdGF0aWMgaW50IHNsdWJfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSlcbi0tXG5tbS9zbHViLmMtNDE1OC1cbm1tL3NsdWIuYzo0MTU5OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTQxNjAtc3RhdGljIGludCBjb3VudF9mcmVlKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYz00MTcxPXN0YXRpYyBpbmxpbmUgYm9vbCBmcmVlX2RlYnVnX3Byb2Nlc3Npbmcoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTQyMjYtfVxubW0vc2x1Yi5jOjQyMjc6I2VuZGlmIC8qIENPTkZJR19TTFVCX0RFQlVHICovXG5tbS9zbHViLmMtNDIyOC1cbm1tL3NsdWIuYzo0MjI5OiNpZiBkZWZpbmVkKENPTkZJR19TTFVCX0RFQlVHKSB8fCBkZWZpbmVkKFNMQUJfU1VQUE9SVFNfU1lTRlMpXG5tbS9zbHViLmMtNDIzMC1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXG4tLVxubW0vc2x1Yi5jLTQyNDItfVxubW0vc2x1Yi5jOjQyNDM6I2VuZGlmIC8qIENPTkZJR19TTFVCX0RFQlVHIHx8IFNMQUJfU1VQUE9SVFNfU1lTRlMgKi9cbm1tL3NsdWIuYy00MjQ0LVxubW0vc2x1Yi5jOjQyNDU6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNDI0Ni0jZGVmaW5lIE1BWF9QQVJUSUFMX1RPX1NDQU4gMTAwMDBcbi0tXG5tbS9zbHViLmM9NDI4ND1zbGFiX291dF9vZl9tZW1vcnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbmlkKVxuLS1cbm1tL3NsdWIuYy00MzE3LX1cbm1tL3NsdWIuYzo0MzE4OiNlbHNlIC8qIENPTkZJR19TTFVCX0RFQlVHICovXG5tbS9zbHViLmMtNDMxOS1zdGF0aWMgaW5saW5lIHZvaWRcbi0tXG5tbS9zbHViLmM9NDQzMD1zdGF0aWMgdm9pZCAqX19fc2xhYl9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLFxuLS1cbm1tL3NsdWIuYy00NDc4LVxubW0vc2x1Yi5jOjQ0Nzk6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBrbWVtX2NhY2hlX2RlYnVnKHMpKSB7XG5tbS9zbHViLmMtNDQ4MC1cdFx0b2JqZWN0ID0gYWxsb2Nfc2luZ2xlX2Zyb21fbmV3X3NsYWIocywgc2xhYiwgYWMpO1xuLS1cbm1tL3NsdWIuYz01NjA5PXN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtNTYxOS1cbm1tL3NsdWIuYzo1NjIwOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwga21lbV9jYWNoZV9kZWJ1ZyhzKSkge1xubW0vc2x1Yi5jLTU2MjEtXHRcdGZyZWVfdG9fcGFydGlhbF9saXN0KHMsIHNsYWIsIGhlYWQsIHRhaWwsIGNudCwgYWRkcik7XG4tLVxubW0vc2x1Yi5jPTYzODc9dm9pZCBzbGFiX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKmhlYWQsXG4tLVxubW0vc2x1Yi5jLTY0MDEtXG5tbS9zbHViLmM6NjQwMjojaWZkZWYgQ09ORklHX1NMVUJfUkNVX0RFQlVHXG5tbS9zbHViLmMtNjQwMy1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpXG4tLVxubW0vc2x1Yi5jLTY0MjgtfVxubW0vc2x1Yi5jOjY0Mjk6I2VuZGlmIC8qIENPTkZJR19TTFVCX1JDVV9ERUJVRyAqL1xubW0vc2x1Yi5jLTY0MzAtXG4tLVxubW0vc2x1Yi5jPTY0OTM9c3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtNjQ5Ni1cbm1tL3NsdWIuYzo2NDk3OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTY0OTgtXHQvKlxuLS1cbm1tL3NsdWIuYz02NTIyPXN0YXRpYyBzaXplX3QgX19rc2l6ZShjb25zdCB2b2lkICpvYmplY3QpXG4tLVxubW0vc2x1Yi5jLTY1MzktXG5tbS9zbHViLmM6NjU0MDojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy02NTQxLVx0c2tpcF9vcmlnX3NpemVfY2hlY2soc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBvYmplY3QpO1xuLS1cbm1tL3NsdWIuYz03MzExPXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNzMxNS1cbm1tL3NsdWIuYzo3MzE2Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwga21lbV9jYWNoZV9kZWJ1ZyhzKSkge1xubW0vc2x1Yi5jLTczMTctXHRcdGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgYWMgPSB7XG4tLVxubW0vc2x1Yi5jPTc0NDQ9c3RhdGljIHVuc2lnbmVkIGludCBzbHViX21heF9vcmRlciA9XG5tbS9zbHViLmM6NzQ0NTpcdElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgPyAxIDogUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7XG5tbS9zbHViLmMtNzQ0Ni1zdGF0aWMgdW5zaWduZWQgaW50IHNsdWJfbWluX29iamVjdHM7XG4tLVxubW0vc2x1Yi5jPTc1NTc9aW5pdF9rbWVtX2NhY2hlX25vZGUoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbilcbi0tXG5tbS9zbHViLmMtNzU2MS1cdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlcGFydGlhbCk7XG5tbS9zbHViLmM6NzU2MjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy03NTYzLVx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNm4tXHUwMDNlbnJfc2xhYnMsIDApO1xuLS1cbm1tL3NsdWIuYy03NTY4LVxubW0vc2x1Yi5jOjc1Njk6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXG5tbS9zbHViLmMtNzU3MC1zdGF0aWMgaW5saW5lIGludCBhbGxvY19rbWVtX2NhY2hlX3N0YXRzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYz03NjM4PXN0YXRpYyB2b2lkIGVhcmx5X2ttZW1fY2FjaGVfbm9kZV9hbGxvYyhpbnQgbm9kZSlcbi0tXG5tbS9zbHViLmMtNzY2MS1cbm1tL3NsdWIuYzo3NjYyOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTc2NjMtXHRpbml0X29iamVjdChrbWVtX2NhY2hlX25vZGUsIG4sIFNMVUJfUkVEX0FDVElWRSk7XG4tLVxubW0vc2x1Yi5jPTc3MDA9dm9pZCBfX2ttZW1fY2FjaGVfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtNzcwMy1cdHBjc19kZXN0cm95KHMpO1xubW0vc2x1Yi5jOjc3MDQ6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXG5tbS9zbHViLmMtNzcwNS1cdGZyZWVfcGVyY3B1KHMtXHUwMDNlY3B1X3N0YXRzKTtcbi0tXG5tbS9zbHViLmM9Nzc0OT1zdGF0aWMgdW5zaWduZWQgaW50IGNhbGN1bGF0ZV9zaGVhZl9jYXBhY2l0eShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtNzc1Ni1cbm1tL3NsdWIuYzo3NzU3Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwgcy1cdTAwM2VmbGFncyBcdTAwMjYgU0xBQl9ERUJVR19GTEFHUylcbm1tL3NsdWIuYy03NzU4LVx0XHRyZXR1cm4gMDtcbi0tXG5tbS9zbHViLmM9NzgwMD1zdGF0aWMgaW50IGNhbGN1bGF0ZV9zaXplcyhzdHJ1Y3Qga21lbV9jYWNoZV9hcmdzICphcmdzLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtNzgxMy1cbm1tL3NsdWIuYzo3ODE0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTc4MTUtXHQvKlxuLS1cbm1tL3NsdWIuYy03ODc2LVxubW0vc2x1Yi5jOjc4Nzc6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNzg3OC1cdGlmIChmbGFncyBcdTAwMjYgU0xBQl9TVE9SRV9VU0VSKSB7XG4tLVxubW0vc2x1Yi5jLTc4OTEtXHRrYXNhbl9jYWNoZV9jcmVhdGUocywgXHUwMDI2c2l6ZSwgXHUwMDI2cy1cdTAwM2VmbGFncyk7XG5tbS9zbHViLmM6Nzg5MjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy03ODkzLVx0aWYgKGZsYWdzIFx1MDAyNiBTTEFCX1JFRF9aT05FKSB7XG4tLVxubW0vc2x1Yi5jPTc5NTY9c3RhdGljIHZvaWQgbGlzdF9zbGFiX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxubW0vc2x1Yi5jLTc5NTcte1xubW0vc2x1Yi5jOjc5NTg6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNzk1OS1cdHZvaWQgKmFkZHIgPSBzbGFiX2FkZHJlc3Moc2xhYik7XG4tLVxubW0vc2x1Yi5jPTgwNTE9dm9pZCBfX2ttZW1fb2JqX2luZm8oc3RydWN0IGttZW1fb2JqX2luZm8gKmtwcCwgdm9pZCAqb2JqZWN0LCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtODA2NS1cdG9ianAwID0ga2FzYW5fcmVzZXRfdGFnKG9iamVjdCk7XG5tbS9zbHViLmM6ODA2NjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy04MDY3LVx0b2JqcCA9IHJlc3RvcmVfcmVkX2xlZnQocywgb2JqcDApO1xuLS1cbm1tL3NsdWIuYy04MDc4LVx0XHRyZXR1cm47XG5tbS9zbHViLmM6ODA3OTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy04MDgwLVx0b2JqcCA9IGZpeHVwX3JlZF9sZWZ0KHMsIG9ianApO1xuLS1cbm1tL3NsdWIuYz04NDI0PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqIF9faW5pdCBib290c3RyYXAoc3RydWN0IGttZW1fY2FjaGUgKnN0YXRpY19jYWNoZSlcbi0tXG5tbS9zbHViLmMtODQzNy1cbm1tL3NsdWIuYzo4NDM4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTg0MzktXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXHUwMDI2bi1cdTAwM2VmdWxsLCBzbGFiX2xpc3QpXG4tLVxubW0vc2x1Yi5jPTg1OTM9aW50IGRvX2ttZW1fY2FjaGVfY3JlYXRlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbm1tL3NsdWIuYy04NjYwLVxubW0vc2x1Yi5jOjg2NjE6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXG5tbS9zbHViLmMtODY2Mi1cdGlmICghYWxsb2Nfa21lbV9jYWNoZV9zdGF0cyhzKSlcbi0tXG5tbS9zbHViLmM9ODY5OD1zdGF0aWMgaW50IGNvdW50X3RvdGFsKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy04NzAzLVxubW0vc2x1Yi5jOjg3MDQ6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtODcwNS1zdGF0aWMgdm9pZCB2YWxpZGF0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmM9ODkzNj1zdGF0aWMgdm9pZCBwcm9jZXNzX3NsYWIoc3RydWN0IGxvY190cmFjayAqdCwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTg5NTItI2VuZGlmICAvKiBDT05GSUdfREVCVUdfRlMgICAqL1xubW0vc2x1Yi5jOjg5NTM6I2VuZGlmXHQvKiBDT05GSUdfU0xVQl9ERUJVRyAqL1xubW0vc2x1Yi5jLTg5NTQtXG4tLVxubW0vc2x1Yi5jPTg5Njg9c3RhdGljIHNzaXplX3Qgc2hvd19zbGFiX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTg5OTEtXG5tbS9zbHViLmM6ODk5MjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy04OTkzLVx0aWYgKGZsYWdzIFx1MDAyNiBTT19BTEwpIHtcbi0tXG5tbS9zbHViLmM9OTIwMT1TTEFCX0FUVFJfUk8oZGVzdHJveV9ieV9yY3UpO1xubW0vc2x1Yi5jLTkyMDItXG5tbS9zbHViLmM6OTIwMzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy05MjA0LXN0YXRpYyBzc2l6ZV90IHNsYWJzX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1Zilcbi0tXG5tbS9zbHViLmM9OTI3Mj1TTEFCX0FUVFIodmFsaWRhdGUpO1xubW0vc2x1Yi5jLTkyNzMtXG5tbS9zbHViLmM6OTI3NDojZW5kaWYgLyogQ09ORklHX1NMVUJfREVCVUcgKi9cbm1tL3NsdWIuYy05Mjc1LVxuLS1cbm1tL3NsdWIuYz05MzM2PVNMQUJfQVRUUihyZW1vdGVfbm9kZV9kZWZyYWdfcmF0aW8pO1xuLS1cbm1tL3NsdWIuYy05MzM4LVxubW0vc2x1Yi5jOjkzMzk6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXG5tbS9zbHViLmMtOTM0MC1zdGF0aWMgaW50IHNob3dfc3RhdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmLCBlbnVtIHN0YXRfaXRlbSBzaSlcbi0tXG5tbS9zbHViLmM9OTQyMD1TVEFUX0FUVFIoU0hFQUZfUkVUVVJOX1NMT1csIHNoZWFmX3JldHVybl9zbG93KTtcbm1tL3NsdWIuYzo5NDIxOiNlbmRpZlx0LyogQ09ORklHX1NMVUJfU1RBVFMgKi9cbm1tL3NsdWIuYy05NDIyLVxuLS1cbm1tL3NsdWIuYz05NDQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpjb25zdCBzbGFiX2F0dHJzW10gPSB7XG4tLVxubW0vc2x1Yi5jLTk0NjQtXHRcdTAwMjZzbGFic19jcHVfcGFydGlhbF9hdHRyLmF0dHIsXG5tbS9zbHViLmM6OTQ2NTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy05NDY2LVx0XHUwMDI2dG90YWxfb2JqZWN0c19hdHRyLmF0dHIsXG4tLVxubW0vc2x1Yi5jLTk0ODEtI2VuZGlmXG5tbS9zbHViLmM6OTQ4MjojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcbm1tL3NsdWIuYy05NDgzLVx0XHUwMDI2YWxsb2NfZmFzdHBhdGhfYXR0ci5hdHRyLFxuLS1cbm1tL3NsdWIuYz05NzYyPWxhdGVfaW5pdGNhbGwoc2xhYl9zeXNmc19pbml0KTtcbi0tXG5tbS9zbHViLmMtOTc2NC1cbm1tL3NsdWIuYzo5NzY1OiNpZiBkZWZpbmVkKENPTkZJR19TTFVCX0RFQlVHKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpXG5tbS9zbHViLmMtOTc2Ni1zdGF0aWMgaW50IHNsYWJfZGVidWdmc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm1tL3NsdWIuYz05OTcxPV9faW5pdGNhbGwoc2xhYl9kZWJ1Z2ZzX2luaXQpO1xuLS1cbm1tL3NsdWIuYy05OTc1LSAqL1xubW0vc2x1Yi5jOjk5NzY6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtOTk3Ny12b2lkIGdldF9zbGFiaW5mbyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJpbmZvICpzaW5mbylcbi0tXG5tbS9zbHViLmMtOTk5Ny19XG5tbS9zbHViLmM6OTk5ODojZW5kaWYgLyogQ09ORklHX1NMVUJfREVCVUcgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3ODkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqU2hlYXZlcyBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBzbyB0aGUgJiMzNDtzaGVhdmVzJiMzNDsgZmVhdHVyZSDigJMgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHBhcnQgb2YgU0xVQiwgbm8gcXVlc3Rpb24uIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgKnNwZWNpZmljKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgZGVkaWNhdGVkIGp1c3QgdG8gc2hlYXZlcz8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBTTFVCIGNvbmZpZ3VyYXRpb24gZG9jcy4gSSBrbm93IHRoZSBiYXNlIHBhcmFtZXRlcnMsIG9mIGNvdXJzZSwgYnV0IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZ3JhbnVsYXIgY29udHJvbHPigKYgYW55dGhpbmcgbGlrZSBzZXBhcmF0ZSBzbGFiIGNhY2hlcywgZGVkaWNhdGVkIGFsbG9jYXRvcnMsIHBlcmhhcHMgZXZlbiBzb21ldGhpbmcgZmFuY2llciwgbGlrZSBwZXItQ1BVIG9yIE5VTUEtYXdhcmUgc2hlYWYgYWxsb2NhdGlvbiBzdHJhdGVnaWVzPyBMZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJIHN1c3BlY3Qgd2Ugd2lsbCBmaW5kIHNwZWNpZmljIGNvbmZpZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hlYWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBTTFVCIGFuZCBTaGVhdmVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGBtbS9zbHViLmNgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhlIGBDT05GSUdfU0xVQl9USU5ZYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gUmlnaHQsIGl0IHNlZW1zIHNoZWF2ZXMgYXJlIGRpc2FibGVkIHdoZW4gYENPTkZJR19TTFVCX1RJTllgIGlzIGVuYWJsZWQuIFRoZSBjb2RlIHNuaXBwZXQgY29uZmlybXMgaXQ6CgpgYGBjCnN0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY3VsYXRlX3NoZWFmX2NhcGFjaXR5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCAuLi4pCnsKCWlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IHMtJmd0O2ZsYWdzICZhbXA7IFNMQUJfREVCVUdfRkxBR1MpCgkJcmV0dXJuIDA7CmBgYAoKVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBjb25jbHVzaW9uIGlzIHRoYXQgd2UgKnNob3VsZG4mIzM5O3QqIGhhdmUgYFNMVUJfVElOWWAgZW5hYmxlZCBpZiB3ZSB3YW50IHNoZWF2ZXMuIFdlIHNob3VsZCBiZSB1c2luZyBgU0xVQmAsIHRoZSBkZWZhdWx0IGFsbG9jYXRvci4gQXJlIHRoZXJlIGFueSBvdGhlciBwb3RlbnRpYWwgY29uZmlnIG9wdGlvbnMgYXQgcGxheSBoZXJlPwoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZS1leGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAuIFRoZSBwcmV2aW91cyBzZWFyY2ggc2hvd2VkIGl0JiMzOTtzIHVzZWQgaW4gYGxpYi9tYXBsZV90cmVlLmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguY2AuIFdhaXQsIGBsaWIvbWFwbGVfdHJlZS5jYCBpcyB0aGUgb25lIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFNvIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhhdCBmaWxlIHRvIHNlZSBpZiB0aGUgdXNlIG9mIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAgaXMgY29uZGl0aW9uYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210X3JldHVybl9zaGVhZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9tYXBsZV90cmVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL21hcGxlX3RyZWUuYz0xNDI9c3RhdGljIGlubGluZSB2b2lkIG10X2ZyZWVfYnVsayhzaXplX3Qgc2l6ZSwgdm9pZCBfX3JjdSAqKm5vZGVzKVxuLS1cbmxpYi9tYXBsZV90cmVlLmMtMTQ2LVxubGliL21hcGxlX3RyZWUuYzoxNDc6c3RhdGljIHZvaWQgbXRfcmV0dXJuX3NoZWFmKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbmxpYi9tYXBsZV90cmVlLmMtMTQ4LXtcbi0tXG5saWIvbWFwbGVfdHJlZS5jPTExMzE9c3RhdGljIGlubGluZSB2b2lkIG1hc19lbXB0eV9ub2RlcyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTExMzQtXHRpZiAobWFzLVx1MDAzZXNoZWFmKSB7XG5saWIvbWFwbGVfdHJlZS5jOjExMzU6XHRcdG10X3JldHVybl9zaGVhZihtYXMtXHUwMDNlc2hlYWYpO1xubGliL21hcGxlX3RyZWUuYy0xMTM2LVx0XHRtYXMtXHUwMDNlc2hlYWYgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc4OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBNYXBsZSBUcmVlIEttZW0gQ2FjaGUgUmV0dXJuKioKCk9rYXksIHNvIHRoZSBNYXBsZSB0cmVlLiBUaGF0JiMzOTtzIGEgKmNydWNpYWwqIGRhdGEgc3RydWN0dXJlIGluIHRoZSBrZXJuZWwsIHJpZ2h0PyBVc2VkIGFsbCBvdmVyIHRoZSBwbGFjZSwgVk1BIHRyYWNraW5nIGJlaW5nIGp1c3Qgb25lIGV4YW1wbGUuIFdoaWNoIG1lYW5zIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGZ1bmN0aW9uLCBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBhbmQgZGVmaW5pdGVseSAqZnVuY3Rpb25hbCouIFRoYXQgYWxvbmUgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0JiMzOTtzIG1vZGlmeWluZyBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGJ5IGFkZGluZyBgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTmAgdG8gYHJlZmlsbF9zaGVhZmAuIFRoaXMgdHdlYWsgc3VnZ2VzdHMgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzLCBvciBtYXliZSBhIHdheSB0byBoYW5kbGUgbG93IG1lbW9yeSBjb25kaXRpb25zLCB3aGljaCBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIGZ1enppbmcgY2FuIHVuY292ZXIuCgpJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGFuZCwgY3J1Y2lhbGx5LCBgcmVmaWxsX3NoZWFmYCwgZ2l2ZW4gdGhlIHBhdGNoJiMzOTtzIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgdGhhdCBmdW5jdGlvbi4gTm8gc3BlY2lmaWMgY29uZmlnIHJlcXVpcmVtZW50cyBhcmUgbWVudGlvbmVkLCB3aGljaCBnZW5lcmFsbHkgbWVhbnMgU0xVQiwgdGhlIGRlZmF1bHQgYWxsb2NhdG9yLCBpcyBhbHJlYWR5IGluIHBsYXkuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGBTTFVCYCBpcyBhY3R1YWxseSBhIGNvbmZpZ3VyYWJsZSBvcHRpb24uIEFuZCwgYWx0aG91Z2ggTWFwbGUgVHJlZSBpcyBnZW5lcmFsbHkgZW5hYmxlZCwgdGhlcmUgbWlnaHQgYmUgYSBjb25maWcgdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZyB0byBleHBsb3JlLCBzdWNoIGFzIGBNQVBMRV9UUkVFYCDigJMgYnV0IGJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIGl0JiMzOTtzIHByb2JhYmx5IGFsd2F5cyBjb21waWxlZCBpbiBhbnl3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTFVCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTE2Mj1tZW51IFwmIzM0O1NsYWIgYWxsb2NhdG9yIG9wdGlvbnNcJiMzNDtcbm1tL0tjb25maWctMTYzLVxubW0vS2NvbmZpZzoxNjQ6Y29uZmlnIFNMVUJcbm1tL0tjb25maWctMTY1LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWc9MTY4PWNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcbi0tXG5tbS9LY29uZmlnLTE3Mi1cbm1tL0tjb25maWc6MTczOmNvbmZpZyBTTFVCX1RJTllcbm1tL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtDb25maWd1cmUgZm9yIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MjE3PWNvbmZpZyBTTEFCX0JVQ0tFVFNcbi0tXG5tbS9LY29uZmlnLTIzMy1cbm1tL0tjb25maWc6MjM0OmNvbmZpZyBTTFVCX1NUQVRTXG5tbS9LY29uZmlnLTIzNS1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ1NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipTTFVCIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgYXNzZXNzZWQgdGhlIHNpdHVhdGlvbi4gVGhlIGluaXRpYWwgY2x1ZSBwb2ludHMgZGlyZWN0bHkgdG8gYFNMVUJgIGJlaW5nIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIGluZGljYXRlZCBieSBgZGVmX2Jvb2wgeWAuIFRoaXMgZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gbWVudGlvbnMgcmVsYXRlZCB0byBpdC4gRXZlbiBsaXN0aW5nIGBTTFVCYCBmZWVscyByZWR1bmRhbnQgYW5kIHBvdGVudGlhbGx5IG1pc2xlYWRpbmcuCgpIb3dldmVyLCB0aGUgcHJvbXB0IGlzIGNsZWFyOiBwcmlvcml0aXplICpzcGVjaWZpYyogY29uZmlndXJhdGlvbnMgdGllZCB0byB0aGUgbW9kaWZpZWQgY29kZSBhbmQgYXZvaWQgdGhlIGdlbmVyYWwgb25lcyB3ZSYjMzk7cmUgbGlrZWx5IGFscmVhZHkgdXNpbmcuIFdpdGggdGhhdCBjb25zdHJhaW50IGluIG1pbmQsIGxpc3RpbmcgYFNMVUJgIGlzIGRlZmluaXRlbHkgb3V0LiBJdCYjMzk7cyB0b28gZ2VuZXJpYy4KClRvIGNvbmZpcm0gdGhpcyBhcHByb2FjaCBhbmQgZW5zdXJlIGFjY3VyYWN5LCBJJiMzOTtsbCBuZWVkIHRvIHJldmlzaXQgdGhlIGByZWZpbGxfc2hlYWZgIGltcGxlbWVudGF0aW9uIHdpdGhpbiBgbW0vc2x1Yi5jYC4gVGhpcyBpcyBjcnVjaWFsIHRvIHNvbGlkaWZ5IHRoYXQgbm8gb3RoZXIgc3BlY2lmaWMgYWRqdXN0bWVudHMgYXJlIHdhcnJhbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVmaWxsX3NoZWFmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0yNzkzPXJlZmlsbF9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxuLS1cbm1tL3NsdWIuYy0yNzk1LVxubW0vc2x1Yi5jOjI3OTY6c3RhdGljIGludCByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZixcbm1tL3NsdWIuYy0yNzk3LVx0XHRcdCBnZnBfdCBnZnApXG4tLVxubW0vc2x1Yi5jPTQ2MTE9X19wY3NfcmVwbGFjZV9lbXB0eV9tYWluKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzLFxuLS1cbm1tL3NsdWIuYy00NjcwLVxubW0vc2x1Yi5jOjQ2NzE6XHRpZiAocmVmaWxsX3NoZWFmKHMsIGVtcHR5LCBnZnAgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOKSkge1xubW0vc2x1Yi5jLTQ2NzItXHRcdC8qXG4tLVxubW0vc2x1Yi5jPTQ5NzE9RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX25vZGVfbm9wcm9mKTtcbm1tL3NsdWIuYy00OTcyLVxubW0vc2x1Yi5jOjQ5NzM6c3RhdGljIGludCBfX3ByZWZpbGxfc2hlYWZfcGZtZW1hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy00OTc0LVx0XHRcdFx0ICAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLCBnZnBfdCBnZnApXG4tLVxubW0vc2x1Yi5jLTQ5ODItXG5tbS9zbHViLmM6NDk4MzpcdHJldCA9IHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwX25vbWVtYWxsb2MpO1xubW0vc2x1Yi5jLTQ5ODQtXG4tLVxubW0vc2x1Yi5jLTQ5OTEtXHQgKi9cbm1tL3NsdWIuYzo0OTkyOlx0cmV0ID0gcmVmaWxsX3NoZWFmKHMsIHNoZWFmLCBnZnApO1xubW0vc2x1Yi5jLTQ5OTMtXHRzaGVhZi1cdTAwM2VwZm1lbWFsbG9jID0gdHJ1ZTtcbi0tXG5tbS9zbHViLmM9NTAwNz1zdHJ1Y3Qgc2xhYl9zaGVhZiAqXG5tbS9zbHViLmM6NTAwODprbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IHNpemUpXG5tbS9zbHViLmMtNTAwOS17XG4tLVxubW0vc2x1Yi5jLTUwNzAtXHRcdGlmIChzaGVhZi1cdTAwM2VzaXplIFx1MDAzYyBzaXplIFx1MDAyNlx1MDAyNlxubW0vc2x1Yi5jOjUwNzE6XHRcdCAgICBfX3ByZWZpbGxfc2hlYWZfcGZtZW1hbGxvYyhzLCBzaGVhZiwgZ2ZwKSkge1xubW0vc2x1Yi5jLTUwNzItXHRcdFx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHNoZWFmKTtcbi0tXG5tbS9zbHViLmMtNTA4MS0vKlxubW0vc2x1Yi5jOjUwODI6ICogVXNlIHRoaXMgdG8gcmV0dXJuIGEgc2hlYWYgb2J0YWluZWQgYnkga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKClcbm1tL3NsdWIuYy01MDgzLSAqXG4tLVxubW0vc2x1Yi5jPTUwOTE9dm9pZCBrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3NsdWIuYy01MTI1LVx0aWYgKCFiYXJuIHx8IGRhdGFfcmFjZShiYXJuLVx1MDAzZW5yX2Z1bGwpIFx1MDAzZT0gTUFYX0ZVTExfU0hFQVZFUyB8fFxubW0vc2x1Yi5jOjUxMjY6XHQgICAgcmVmaWxsX3NoZWFmKHMsIHNoZWFmLCBnZnAgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOKSkge1xubW0vc2x1Yi5jLTUxMjctXHRcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzaGVhZik7XG4tLVxubW0vc2x1Yi5jLTUxMzYtLypcbm1tL3NsdWIuYzo1MTM3OiAqIFJlZmlsbCBhIHNoZWFmIHByZXZpb3VzbHkgcmV0dXJuZWQgYnkga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmIHRvIGF0IGxlYXN0XG5tbS9zbHViLmMtNTEzOC0gKiB0aGUgZ2l2ZW4gc2l6ZS5cbi0tXG5tbS9zbHViLmMtNTE0OC0gKi9cbm1tL3NsdWIuYzo1MTQ5OmludCBrbWVtX2NhY2hlX3JlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxubW0vc2x1Yi5jLTUxNTAtXHRcdFx0ICAgIHN0cnVjdCBzbGFiX3NoZWFmICoqc2hlYWZwLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbi0tXG5tbS9zbHViLmMtNTE1NS1cdCAqIFRPRE86IGRvIHdlIHdhbnQgdG8gc3VwcG9ydCAqc2hlYWYgPT0gTlVMTCB0byBiZSBlcXVpdmFsZW50IG9mXG5tbS9zbHViLmM6NTE1NjpcdCAqIGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZigpID9cbm1tL3NsdWIuYy01MTU3LVx0ICovXG4tLVxubW0vc2x1Yi5jLTUxNjYtXHRcdGlmIChsaWtlbHkoc2hlYWYtXHUwMDNlY2FwYWNpdHkgPT0gcy1cdTAwM2VzaGVhZl9jYXBhY2l0eSkpXG5tbS9zbHViLmM6NTE2NzpcdFx0XHRyZXR1cm4gX19wcmVmaWxsX3NoZWFmX3BmbWVtYWxsb2Mocywgc2hlYWYsIGdmcCk7XG5tbS9zbHViLmMtNTE2OC1cbi0tXG5tbS9zbHViLmMtNTE4MS1cdCAqL1xubW0vc2x1Yi5jOjUxODI6XHRzaGVhZiA9IGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihzLCBnZnAsIHNpemUpO1xubW0vc2x1Yi5jLTUxODMtXHRpZiAoIXNoZWFmKVxuLS1cbm1tL3NsdWIuYy01MTkxLS8qXG5tbS9zbHViLmM6NTE5MjogKiBBbGxvY2F0ZSBmcm9tIGEgc2hlYWYgb2J0YWluZWQgYnkga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKClcbm1tL3NsdWIuYy01MTkzLSAqXG4tLVxubW0vc2x1Yi5jPTc3NDk9c3RhdGljIHVuc2lnbmVkIGludCBjYWxjdWxhdGVfc2hlYWZfY2FwYWNpdHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTc3ODktXHQgKiBSZXNwZWN0IGFuIGV4cGxpY2l0IHJlcXVlc3QgZm9yIGNhcGFjaXR5IHRoYXQmIzM5O3MgdHlwaWNhbGx5IG1vdGl2YXRlZCBieVxubW0vc2x1Yi5jOjc3OTA6XHQgKiBleHBlY3RlZCBtYXhpbXVtIHNpemUgb2Yga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKCkgdG8gbm90IGVuZCB1cFxubW0vc2x1Yi5jLTc3OTEtXHQgKiB1c2luZyBsb3ctcGVyZm9ybWFuY2Ugb3ZlcnNpemUgc2hlYXZlc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE1OAoJCQkJCQkJb3V0cHV0OiAxMDAKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAsIGFuZCB0aGUga2V5IGhlcmUgaXMgdGhlIGFkZGl0aW9uIG9mIGBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOYCB0byB0aGUgY2FsbCB0byBgcmVmaWxsX3NoZWFmYC4gVGhpcyBpcyBhIGNsZWFyLCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgU0xVQiBhbGxvY2F0b3IuIE15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBpbXBhY3Qgb2YgdGhlc2UgZmxhZ3Mgd2l0aGluIHRoZSBgcmVmaWxsX3NoZWFmYCBjb250ZXh0LiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHByZXZlbnRpbmcgdGhlIHN5c3RlbSBmcm9tIGRpcHBpbmcgaW50byBpdHMgcmVzZXJ2ZXMgb3IgZW1pdHRpbmcgd2FybmluZ3Mgd2hlbiBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgYSByZXR1cm5lZCBzaGVhZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgc3BlY2lmaWMgY2hhbmdlIGlzIGJlaW5nIGludHJvZHVjZWQgaGVyZSwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgZm9yIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSBhcm91bmQgaG93IHdlIGFyZSBnb2luZyB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24uIFRoZSBgcmVmaWxsX3NoZWFmYCBmdW5jdGlvbiBpcyBjcml0aWNhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ttZW1fY2FjaGVfcmV0dXJuX3NoZWFmJiMzNDssCiAgICAmIzM0O3JlZmlsbF9zaGVhZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0xVQiBhbGxvY2F0b3IgdG8gcHJldmVudCBgcmVmaWxsX3NoZWFmYCBmcm9tIHVzaW5nIG1lbW9yeSByZXNlcnZlcyBvciB3YXJuaW5nIG9uIGFsbG9jYXRpb24gZmFpbHVyZSB3aGVuIHJldHVybmluZyBhIHNoZWFmLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrbWVtX2NhY2hlX3JldHVybl9zaGVhZiYjMzQ7LAogICAgJiMzNDtyZWZpbGxfc2hlYWYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNMVUIgYWxsb2NhdG9yIHRvIHByZXZlbnQgYHJlZmlsbF9zaGVhZmAgZnJvbSB1c2luZyBtZW1vcnkgcmVzZXJ2ZXMgb3Igd2FybmluZyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUgd2hlbiByZXR1cm5pbmcgYSBzaGVhZi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NTozMy43NjMzNjMxNzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkwNzA5ODkzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia21lbV9jYWNoZV9yZXR1cm5fc2hlYWZcIixcbiAgICBcInJlZmlsbF9zaGVhZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTFVCIGFsbG9jYXRvciB0byBwcmV2ZW50IGByZWZpbGxfc2hlYWZgIGZyb20gdXNpbmcgbWVtb3J5IHJlc2VydmVzIG9yIHdhcm5pbmcgb24gYWxsb2NhdGlvbiBmYWlsdXJlIHdoZW4gcmV0dXJuaW5nIGEgc2hlYWYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NTozMy43NjMzNzQyNjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTU4OTU2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQzMzM4MDVkOTJjYzY4MDFiNTUyNTIzNDVkNGIyMjAxMzAwNjg5ODdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTc6NTU6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXFxuaW5kZXggNTNiNDk3NmQzODMxOGYuLjM1N2I3NTIyYzgxNzAwIDEwMDY0NFxcbi0tLSBhL21tL3NsdWIuY1xcbisrKyBiL21tL3NsdWIuY1xcbkBAIC01MTIzLDcgKzUxMjMsNyBAQCB2b2lkIGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuIFxcdCAqIHNpbXBseSBmbHVzaCBhbmQgZnJlZSBpdC5cXG4gXFx0ICovXFxuIFxcdGlmICghYmFybiB8fCBkYXRhX3JhY2UoYmFybi1cXHUwMDNlbnJfZnVsbCkgXFx1MDAzZT0gTUFYX0ZVTExfU0hFQVZFUyB8fFxcbi1cXHQgICAgcmVmaWxsX3NoZWFmKHMsIHNoZWFmLCBnZnApKSB7XFxuK1xcdCAgICByZWZpbGxfc2hlYWYocywgc2hlYWYsIGdmcCB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1dBUk4pKSB7XFxuIFxcdFxcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzaGVhZik7XFxuIFxcdFxcdGZyZWVfZW1wdHlfc2hlYWYocywgc2hlYWYpO1xcbiBcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE3OjU1OjM0LjMxMDIwOTU4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExODUyNDEyOTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrbWVtX2NhY2hlX3JldHVybl9zaGVhZlwiLFxuICAgIFwicmVmaWxsX3NoZWFmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNMVUIgYWxsb2NhdG9yIHRvIHByZXZlbnQgYHJlZmlsbF9zaGVhZmAgZnJvbSB1c2luZyBtZW1vcnkgcmVzZXJ2ZXMgb3Igd2FybmluZyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUgd2hlbiByZXR1cm5pbmcgYSBzaGVhZi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDMzMzgwNWQ5MmNjNjgwMWI1NTI1MjM0NWQ0YjIyMDEzMDA2ODk4N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDE3OjU1OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCA1M2I0OTc2ZDM4MzE4Zi4uMzU3Yjc1MjJjODE3MDAgMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbisrKyBiL21tL3NsdWIuY1xuQEAgLTUxMjMsNyArNTEyMyw3IEBAIHZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbiBcdCAqIHNpbXBseSBmbHVzaCBhbmQgZnJlZSBpdC5cbiBcdCAqL1xuIFx0aWYgKCFiYXJuIHx8IGRhdGFfcmFjZShiYXJuLVx1MDAzZW5yX2Z1bGwpIFx1MDAzZT0gTUFYX0ZVTExfU0hFQVZFUyB8fFxuLVx0ICAgIHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwKSkge1xuK1x0ICAgIHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTikpIHtcbiBcdFx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHNoZWFmKTtcbiBcdFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZik7XG4gXHRcdHJldHVybjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE3OjU1OjM0LjMxMDIxODkwOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTkxODQ4Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNMVUIgQWxsb2NhdG9yIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYG1tL3NsdWIuY2AsIHNwZWNpZmljYWxseSB0aGUgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgcmlnaHQgdGhlcmU6IHRoZXkncmUgZmlkZGxpbmcgd2l0aCB0aGUgYGdmcGAgZmxhZ3MgcGFzc2VkIHRvIGByZWZpbGxfc2hlYWZgLiBUaGV5J3ZlIGFkZGVkIGBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOYC4gVGhpcyBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBhbGxvY2F0aW9uIGJlaGF2aW9yIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cblxuVGhpcyBpcyBTTFVCLCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIHN0YW5kYXJkIGtlcm5lbCBhbGxvY2F0b3IuIFRoZSBwYXRjaCBzZWVtcyBmdW5jdGlvbmFsbHkgc3RyYWlnaHRmb3J3YXJkLCBqdXN0IGEgY2hhbmdlIGluIHRoZSBhbGxvY2F0aW9uIGZsYWdzLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gYHJlZmlsbF9zaGVhZmAgaXMgZ2V0dGluZyBjYWxsZWQgaGVyZSwgYW5kIGl0J3MgZ2V0dGluZyB0aGVzZSBuZXcgZmxhZ3MuIEl0J3Mgb2J2aW91c2x5IGRvaW5nIGFuIGFsbG9jYXRpb24gb2Ygc29tZSBzb3J0IGlmIHRoaXMgaXMgYWZmZWN0aW5nIHRoZSBmbGFncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcmVmaWxsX3NoZWFmYCBhY3R1YWxseSAqZG9lcyogaW4gcmVsYXRpb24gdG8gYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCwgYW5kIHdoeSB0aGVzZSBmbGFncyBhcmUgaW1wb3J0YW50LiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgZm9yIGJvdGggZnVuY3Rpb25zIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTc6NTU6NDQuNTAyMDcxMzgyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5OTc2MDY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbWVtX2NhY2hlX3JldHVybl9zaGVhZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTUwMDg9a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxubW0vc2x1Yi5jLTUwOTAtICovXFxubW0vc2x1Yi5jOjUwOTE6dm9pZCBrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxcbm1tL3NsdWIuYy01MDkyLVxcdFxcdFxcdCAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbi0tXFxubW0vc2x1Yi5jPTUxNDk9aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zbHViLmMtNTE4NS1cXG5tbS9zbHViLmM6NTE4NjpcXHRrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzLCBnZnAsICpzaGVhZnApO1xcbm1tL3NsdWIuYy01MTg3LVxcdCpzaGVhZnAgPSBzaGVhZjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTc6NTU6NDQuOTAxODQxMjkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA5OTA1OTc3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGluIGBtbS9zbHViLmNgKipcblxuT2theSwgc28gd2UncmUgZm9jdXNpbmcgb24gYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYC4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgU0xVQiBhbGxvY2F0b3IgYW5kIHByb2JhYmx5IGEgYnVsayByZXR1cm4gb3BlcmF0aW9uLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGNvcmUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHBhdGhzIHdpdGhpbiBTTFVCLiBJcyB0aGlzIHJlbGF0ZWQgdG8gcGVyLUNQVSBjYWNoZXMsIG5vZGUgY2FjaGVzLCBvciBzb21ldGhpbmcgbW9yZSBncmFudWxhcj8gSSdtIHBpY3R1cmluZyB0aGUgYGttZW1fY2FjaGVgIGRhdGEgc3RydWN0dXJlIGluIG15IGhlYWQg4oCTIHBhcnRpY3VsYXJseSB0aGUgZnJlZWxpc3QgbWFuYWdlbWVudC4gSXMgaXQgd29ya2luZyB3aXRoIHBhcnRpYWwgc2xhYnMgb3IgZnVsbHkgcG9wdWxhdGVkIG9uZXM/IElzIHRoZSBcInNoZWFmXCIganVzdCBhIG1ldGFwaG9yIGZvciBhIGdyb3VwIG9mIG9iamVjdHM/IE9yIGlzIHRoZXJlIGEgbW9yZSBzcGVjaWZpYyBtZWFuaW5nIGhlcmUgaW4gdGhlIFNMVUIgY29udGV4dD8gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjbHVlcy4gSSBzdXNwZWN0IHdl4oCZcmUgdHJ5aW5nIHRvIHJldHVybiBhIGJ1bmNoIG9mIHByZXZpb3VzbHkgYWxsb2NhdGVkIG9iamVjdHMgYmFjayB0byB0aGUgY2FjaGUuIEkgaG9wZSB0aGUgY29udGV4dCBpcyBvYnZpb3VzIGZyb20gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NjowNS44OTI0NDcyMjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAzMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NsdWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDkxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MDkxOlxcdHZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG41MDkyOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbjUwOTM6XFx0e1xcbjUwOTQ6XFx0XFx0c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcztcXG41MDk1OlxcdFxcdHN0cnVjdCBub2RlX2Jhcm4gKmJhcm47XFxuNTA5NjpcXHRcXG41MDk3OlxcdFxcdGlmICh1bmxpa2VseSgoc2hlYWYtXFx1MDAzZWNhcGFjaXR5ICE9IHMtXFx1MDAzZXNoZWFmX2NhcGFjaXR5KVxcbjUwOTg6XFx0XFx0XFx0ICAgICB8fCBzaGVhZi1cXHUwMDNlcGZtZW1hbGxvYykpIHtcXG41MDk5OlxcdFxcdFxcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzaGVhZik7XFxuNTEwMDpcXHRcXHRcXHRmcmVlX2VtcHR5X3NoZWFmKHMsIHNoZWFmKTtcXG41MTAxOlxcdFxcdFxcdHJldHVybjtcXG41MTAyOlxcdFxcdH1cXG41MTAzOlxcdFxcbjUxMDQ6XFx0XFx0bG9jYWxfbG9jayhcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spO1xcbjUxMDU6XFx0XFx0cGNzID0gdGhpc19jcHVfcHRyKHMtXFx1MDAzZWNwdV9zaGVhdmVzKTtcXG41MTA2OlxcdFxcdGJhcm4gPSBnZXRfYmFybihzKTtcXG41MTA3OlxcdFxcbjUxMDg6XFx0XFx0aWYgKCFwY3MtXFx1MDAzZXNwYXJlKSB7XFxuNTEwOTpcXHRcXHRcXHRwY3MtXFx1MDAzZXNwYXJlID0gc2hlYWY7XFxuNTExMDpcXHRcXHRcXHRzaGVhZiA9IE5VTEw7XFxuNTExMTpcXHRcXHRcXHRzdGF0KHMsIFNIRUFGX1JFVFVSTl9GQVNUKTtcXG41MTEyOlxcdFxcdH1cXG41MTEzOlxcdFxcbjUxMTQ6XFx0XFx0bG9jYWxfdW5sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxuNTExNTpcXHRcXG41MTE2OlxcdFxcdGlmICghc2hlYWYpXFxuNTExNzpcXHRcXHRcXHRyZXR1cm47XFxuNTExODpcXHRcXG41MTE5OlxcdFxcdHN0YXQocywgU0hFQUZfUkVUVVJOX1NMT1cpO1xcbjUxMjA6XFx0XFxuNTEyMTpcXHRcXHQvKlxcbjUxMjI6XFx0XFx0ICogSWYgdGhlIGJhcm4gaGFzIHRvbyBtYW55IGZ1bGwgc2hlYXZlcyBvciB3ZSBmYWlsIHRvIHJlZmlsbCB0aGUgc2hlYWYsXFxuNTEyMzpcXHRcXHQgKiBzaW1wbHkgZmx1c2ggYW5kIGZyZWUgaXQuXFxuNTEyNDpcXHRcXHQgKi9cXG41MTI1OlxcdFxcdGlmICghYmFybiB8fCBkYXRhX3JhY2UoYmFybi1cXHUwMDNlbnJfZnVsbCkgXFx1MDAzZT0gTUFYX0ZVTExfU0hFQVZFUyB8fFxcbjUxMjY6XFx0XFx0ICAgIHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTikpIHtcXG41MTI3OlxcdFxcdFxcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzaGVhZik7XFxuNTEyODpcXHRcXHRcXHRmcmVlX2VtcHR5X3NoZWFmKHMsIHNoZWFmKTtcXG41MTI5OlxcdFxcdFxcdHJldHVybjtcXG41MTMwOlxcdFxcdH1cXG41MTMxOlxcdFxcbjUxMzI6XFx0XFx0YmFybl9wdXRfZnVsbF9zaGVhZihiYXJuLCBzaGVhZik7XFxuNTEzMzpcXHRcXHRzdGF0KHMsIEJBUk5fUFVUKTtcXG41MTM0OlxcdH1cXG41MTM1OlxcdFxcbjUxMzY6XFx0LypcXG41MTM3OlxcdCAqIFJlZmlsbCBhIHNoZWFmIHByZXZpb3VzbHkgcmV0dXJuZWQgYnkga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmIHRvIGF0IGxlYXN0XFxuNTEzODpcXHQgKiB0aGUgZ2l2ZW4gc2l6ZS5cXG41MTM5OlxcdCAqXFxuNTE0MDpcXHQgKiBSZXR1cm46IDAgb24gc3VjY2Vzcy4gVGhlIHNoZWFmIHdpbGwgY29udGFpbiBhdCBsZWFzdCBAc2l6ZSBvYmplY3RzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NjowNS44OTM2NzQ1MjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjI5MDMwMzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgY2hhbmdlLCBhcyBJIHNlZSBpdDpcblxuKipTTFVCIEFsbG9jYXRvciBDaGFuZ2UgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgbW9kaWZpY2F0aW9uIGlzIGluIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBhZGRlZCBgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTmAgdG8gdGhlIGBnZnBgIGZsYWdzIHdoZW4gY2FsbGluZyBgcmVmaWxsX3NoZWFmYC4gVGhpcyBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IGByZWZpbGxfc2hlYWZgIGZyb20gcmVzb3J0aW5nIHRvIG1lbW9yeSByZXNlcnZlcyBvciBpc3N1aW5nIHdhcm5pbmdzIGlmIGFsbG9jYXRpb24gZmFpbHMsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYmVoYXZpb3JhbCBzaGlmdC5cblxuVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXRcIiB0byBtZS4gQW55IGNoYW5nZSB0aGF0IGFsdGVycyBhbGxvY2F0aW9uIGJlaGF2aW9yIGxpa2UgdGhpcyBpcyBwcmltZSB0ZXJyaXRvcnkgZm9yIHVuY292ZXJpbmcgc3VidGxlIGJ1Z3Mgb3IgZWRnZSBjYXNlcy4gYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCBhbmQgYHJlZmlsbF9zaGVhZmAgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbi5cblxuSSBzaG91bGQgdmVyaWZ5IHF1aWNrbHkgd2hldGhlciBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGlzIGV4cG9ydGVkLiBJZiBpdCdzIGludGVybmFsLCB0aGUgZnV6emluZyBhcHByb2FjaCB3aWxsIG5lZWQgdG8gYmUgZGlmZmVyZW50LCBidXQgZXZlbiBpbnRlcm5hbCBmdW5jdGlvbnMgY2FuIGJlIHRhcmdldGVkLiBMZXQncyBjb25maXJtIHRoYXQgcXVpY2tseSBiZWZvcmUgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjIwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTc6NTY6MTAuMTIyNzEwMjAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDE0Njg3NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qa21lbV9jYWNoZV9yZXR1cm5fc2hlYWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NjoxMC41MzI4NzA1MTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTkwNTI5ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBVc2FnZSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGVyZSB0aGlzIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gSXQncyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IG9wZXJhdGlvbmFsIGNvbnRleHQgYmVmb3JlIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIGVmZmVjdGl2ZW5lc3MsIGxpbWl0YXRpb25zLCBvciBwb3RlbnRpYWwgZm9yIGltcHJvdmVtZW50LiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBhZG9wdGlvbiBhbmQgYXBwbGljYXRpb24uIFNvLCBsZXQncyBzdGFydCBtYXBwaW5nIG91dCB0aGUgdGVycmFpbi4gV2hlcmUgYW0gSSBmaW5kaW5nIGl0PyBXaGF0IGlzIGl0IGJlaW5nIGVtcGxveWVkIGZvcj8gV2hhdCBhcmUgdGhlIGtleSB1c2UgY2FzZXM/IFRoaXMgaXMgdGhlIGZvdW5kYXRpb25hbCBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDYxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTc6NTY6MTguNzIzNDA0MzA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUxMzMxMjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1fY2FjaGVfcmV0dXJuX3NoZWFmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD05MTY9aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC05MTgtXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6OTE5OnZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC05MjAtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZik7XFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTE0Nz1zdGF0aWMgdm9pZCBtdF9yZXR1cm5fc2hlYWYoc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbmxpYi9tYXBsZV90cmVlLmMtMTQ4LXtcXG5saWIvbWFwbGVfdHJlZS5jOjE0OTpcXHRrbWVtX2NhY2hlX3JldHVybl9zaGVhZihtYXBsZV9ub2RlX2NhY2hlLCBHRlBfTk9XQUlULCBzaGVhZik7XFxubGliL21hcGxlX3RyZWUuYy0xNTAtfVxcbi0tXFxubW0vc2x1Yi5jPTUwMDg9a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxubW0vc2x1Yi5jLTUwOTAtICovXFxubW0vc2x1Yi5jOjUwOTE6dm9pZCBrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxcbm1tL3NsdWIuYy01MDkyLVxcdFxcdFxcdCAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbi0tXFxubW0vc2x1Yi5jPTUxNDk9aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zbHViLmMtNTE4NS1cXG5tbS9zbHViLmM6NTE4NjpcXHRrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzLCBnZnAsICpzaGVhZnApO1xcbm1tL3NsdWIuYy01MTg3LVxcdCpzaGVhZnAgPSBzaGVhZjtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oPTE5Mj1rbWVtX2NhY2hlX2FsbG9jX2Zyb21fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTE5NC1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoxOTU6dm9pZCBrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTE5Ni1cXHRcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYz0yODM9aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuLS1cXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTI5NS1cXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjI5NjpcXHRcXHRrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzLCBnZnAsICpzaGVhZnApO1xcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMjk3LVxcdFxcdCpzaGVhZnAgPSBzaGVhZjtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMzA3LVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM6MzA4OnZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTMwOS1cXHRcXHQgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NjoyMC44NzQ3NDk4MTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYwOTQ4NTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBVc2Ugb2YgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCBmdW5jdGlvbiBpcyBzaG93aW5nIHVwIGluIGBsaWIvbWFwbGVfdHJlZS5jYCBhbmQgYG1tL3NsdWIuY2AuIEludGVyZXN0aW5nLiBUaGUgbWVudGlvbiBpbiBgbW0vc2x1Yi5jYCBpcyB0aGUga2V5IOKAkyBhaCwgd2FpdCBhIG1pbnV0ZSwgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCBpcyBhIG5ldyBhZGRpdGlvbiB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBBbmQgdGhlIG5hbWUgXCJzaGVhZlwiIHN1Z2dlc3RzIHRoaXMgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBwZXItQ1BVIGNhY2hpbmcsIHJpZ2h0PyBMaWtlbHkgYSBuZXcgaW1wbGVtZW50YXRpb24gb3Igb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gdGhvc2Ugc3RydWN0dXJlcy4gSXQncyB0aW1lIHRvIGRpZyBkZWVwZXIsIHRoaXMgd2FycmFudHMgYSBjb25maWcgZXhwbG9yYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgZW5hYmxpbmcgY29uZGl0aW9ucy4gSSBuZWVkIHRvIHNlZSB3aGljaCBjb25maWd1cmF0aW9ucyB0cmlnZ2VyIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzIGZvciB0aGUga2VybmVsLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25maWcgb3B0aW9ucyBkaXJlY3RseSB0aWVkIHRvIHRoZSBjb25jZXB0IG9mIFwic2hlYXZlc1wiIG9yIGFueXRoaW5nIHRoYXQgc291bmRzIHJlbGF0ZWQuIFRoYXQnbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBTTFVCLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTc6NTY6MjguNDg0MjM5ODcyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjc4MzkwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfU0xVQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTE5Mz1lbnVtIHNsYWJfZmxhZ3Mge1xcbi0tXFxubW0vc2x1Yi5jLTE5OC1cXG5tbS9zbHViLmM6MTk5OiNpZm5kZWYgQ09ORklHX1NMVUJfVElOWVxcbm1tL3NsdWIuYy0yMDAtI2RlZmluZSBfX2Zhc3RwYXRoX2lubGluZSBfX2Fsd2F5c19pbmxpbmVcXG4tLVxcbm1tL3NsdWIuYy0yMDQtXFxubW0vc2x1Yi5jOjIwNTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmM6MjA2OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR19PTlxcbm1tL3NsdWIuYy0yMDctREVGSU5FX1NUQVRJQ19LRVlfVFJVRShzbHViX2RlYnVnX2VuYWJsZWQpO1xcbi0tXFxubW0vc2x1Yi5jPTIwOT1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzbHViX2RlYnVnX2VuYWJsZWQpO1xcbm1tL3NsdWIuYy0yMTAtI2VuZGlmXFxubW0vc2x1Yi5jOjIxMTojZW5kaWZcXHRcXHQvKiBDT05GSUdfU0xVQl9ERUJVRyAqL1xcbm1tL3NsdWIuYy0yMTItXFxuLS1cXG5tbS9zbHViLmM9MjQ5PXZvaWQgKmZpeHVwX3JlZF9sZWZ0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpwKVxcbi0tXFxubW0vc2x1Yi5jLTI2Ny1cXG5tbS9zbHViLmM6MjY4OiNpZm5kZWYgQ09ORklHX1NMVUJfVElOWVxcbm1tL3NsdWIuYy0yNjktLypcXG4tLVxcbm1tL3NsdWIuYz0zMzg9c3RhdGljIGlubGluZSBpbnQgc3lzZnNfc2xhYl9hZGQoc3RydWN0IGttZW1fY2FjaGUgKnMpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbm1tL3NsdWIuYy0zNDAtXFxubW0vc2x1Yi5jOjM0MTojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1NMVUJfREVCVUcpXFxubW0vc2x1Yi5jLTM0Mi1zdGF0aWMgdm9pZCBkZWJ1Z2ZzX3NsYWJfYWRkKHN0cnVjdCBrbWVtX2NhY2hlICopO1xcbi0tXFxubW0vc2x1Yi5jPTM1Mj1lbnVtIHN0YXRfaXRlbSB7XFxuLS1cXG5tbS9zbHViLmMtMzgxLVxcbm1tL3NsdWIuYzozODI6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTM4My1zdHJ1Y3Qga21lbV9jYWNoZV9zdGF0cyB7XFxuLS1cXG5tbS9zbHViLmM9Mzg4PXN0YXRpYyBpbmxpbmUgdm9pZCBzdGF0KGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLCBlbnVtIHN0YXRfaXRlbSBzaSlcXG5tbS9zbHViLmMtMzg5LXtcXG5tbS9zbHViLmM6MzkwOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xcbm1tL3NsdWIuYy0zOTEtXFx0LypcXG4tLVxcbm1tL3NsdWIuYz00MDA9dm9pZCBzdGF0X2FkZChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZW51bSBzdGF0X2l0ZW0gc2ksIGludCB2KVxcbm1tL3NsdWIuYy00MDEte1xcbm1tL3NsdWIuYzo0MDI6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTQwMy1cXHRyYXdfY3B1X2FkZChzLVxcdTAwM2VjcHVfc3RhdHMtXFx1MDAzZXN0YXRbc2ldLCB2KTtcXG4tLVxcbm1tL3NsdWIuYz00NDQ9c3RydWN0IGttZW1fY2FjaGVfbm9kZSB7XFxuLS1cXG5tbS9zbHViLmMtNDQ3LVxcdHN0cnVjdCBsaXN0X2hlYWQgcGFydGlhbDtcXG5tbS9zbHViLmM6NDQ4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy00NDktXFx0YXRvbWljX2xvbmdfdCBucl9zbGFicztcXG4tLVxcbm1tL3NsdWIuYz05MDY9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfb2Zmc2V0X2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy05MTEtXFxubW0vc2x1Yi5jOjkxMjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtOTEzLVxcbi0tXFxubW0vc2x1Yi5jPTk4MT1zdGF0aWMgaW5saW5lIHZvaWQgKnJlc3RvcmVfcmVkX2xlZnQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKnApXFxuLS1cXG5tbS9zbHViLmMtOTkxLSAqL1xcbm1tL3NsdWIuYzo5OTI6I2lmIGRlZmluZWQoQ09ORklHX1NMVUJfREVCVUdfT04pXFxubW0vc2x1Yi5jLTk5My1zdGF0aWMgc2xhYl9mbGFnc190IHNsdWJfZGVidWcgPSBERUJVR19ERUZBVUxUX0ZMQUdTO1xcbi0tXFxubW0vc2x1Yi5jPTEzMTE9Y2hlY2tfYnl0ZXNfYW5kX3JlcG9ydChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMTM3NC0gKlxcbm1tL3NsdWIuYzoxMzc1OiAqIFtNYW5kYXRvcnkgcGFkZGluZ10gKGlmIENPTkZJR19TTFVCX0RFQlVHIFxcdTAwMjZcXHUwMDI2IFNMQUJfUkVEX1pPTkUpXFxubW0vc2x1Yi5jLTEzNzYtICogICAtIE9uZSBtYW5kYXRvcnkgZGVidWcgd29yZCB0byBndWFyYW50ZWUgYSBtaW5pbXVtIHBvaXNvbmVkIGdhcFxcbi0tXFxubW0vc2x1Yi5jPTE4ODQ9c3RhdGljIGludCBfX2luaXQgc2V0dXBfc2x1Yl9kZWJ1Zyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vc2x1Yi5jLTE5MTctXFx0ICogc2xhYl9kZWJ1ZyBzaG91bGQgYmUgdW5jaGFuZ2VkICgwIG9yIERFQlVHX0RFRkFVTFRfRkxBR1MsIGRlcGVuZGluZ1xcbm1tL3NsdWIuYzoxOTE4OlxcdCAqIG9uIENPTkZJR19TTFVCX0RFQlVHX09OKS4gV2UgY2FuIGV4dGVuZGVkIHRoYXQgdG8gbXVsdGlwbGUgbGlzdHMgYXNcXG5tbS9zbHViLmMtMTkxOS1cXHQgKiBsb25nIGFzIHRoZXJlIGlzIG5vIG9wdGlvbiBzcGVjaWZ5aW5nIGZsYWdzIHdpdGhvdXQgYSBzbGFiIGxpc3QuXFxuLS1cXG5tbS9zbHViLmM9MTk1OD1zbGFiX2ZsYWdzX3Qga21lbV9jYWNoZV9mbGFncyhzbGFiX2ZsYWdzX3QgZmxhZ3MsIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5tbS9zbHViLmMtMjAxMS19XFxubW0vc2x1Yi5jOjIwMTI6I2Vsc2UgLyogIUNPTkZJR19TTFVCX0RFQlVHICovXFxubW0vc2x1Yi5jLTIwMTMtc3RhdGljIGlubGluZSB2b2lkIHNldHVwX29iamVjdF9kZWJ1ZyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KSB7fVxcbi0tXFxubW0vc2x1Yi5jPTIwNDY9c3RhdGljIGlubGluZSB2b2lkIGRlY19zbGFic19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgbm9kZSxcXG5tbS9zbHViLmMtMjA0Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRpbnQgb2JqZWN0cykge31cXG5tbS9zbHViLmM6MjA0ODojZW5kaWYgLyogQ09ORklHX1NMVUJfREVCVUcgKi9cXG5tbS9zbHViLmMtMjA0OS1cXG4tLVxcbm1tL3NsdWIuYz0yNTU1PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jLTI1NjAtXFxubW0vc2x1Yi5jOjI1NjE6I2lmZGVmIENPTkZJR19TTFVCX1JDVV9ERUJVR1xcbm1tL3NsdWIuYy0yNTYyLXN0YXRpYyB2b2lkIHNsYWJfZnJlZV9hZnRlcl9yY3VfZGVidWcoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZCk7XFxuLS1cXG5tbS9zbHViLmM9MjU2ND1zdHJ1Y3QgcmN1X2RlbGF5ZWRfZnJlZSB7XFxuLS1cXG5tbS9zbHViLmMtMjU3NC0gKiBSZXR1cm5zIHRydWUgaWYgZnJlZWluZyBvZiB0aGUgb2JqZWN0IGNhbiBwcm9jZWVkLCBmYWxzZSBpZiBpdHMgcmV1c2VcXG5tbS9zbHViLmM6MjU3NTogKiB3YXMgZGVsYXllZCBieSBDT05GSUdfU0xVQl9SQ1VfREVCVUcgb3IgS0FTQU4gcXVhcmFudGluZSwgb3IgaXQgd2FzIHJldHVybmVkXFxubW0vc2x1Yi5jLTI1NzYtICogdG8gS0ZFTkNFLlxcbi0tXFxubW0vc2x1Yi5jPTI1OTc9Ym9vbCBzbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqeCwgYm9vbCBpbml0LFxcbi0tXFxubW0vc2x1Yi5jLTI2MjUtXFxubW0vc2x1Yi5jOjI2MjY6I2lmZGVmIENPTkZJR19TTFVCX1JDVV9ERUJVR1xcbm1tL3NsdWIuYy0yNjI3LVxcdGlmIChzdGlsbF9hY2Nlc3NpYmxlKSB7XFxuLS1cXG5tbS9zbHViLmMtMjY0NS1cXHR9XFxubW0vc2x1Yi5jOjI2NDY6I2VuZGlmIC8qIENPTkZJR19TTFVCX1JDVV9ERUJVRyAqL1xcbm1tL3NsdWIuYy0yNjQ3LVxcbi0tXFxubW0vc2x1Yi5jPTM1NDk9c3RhdGljIHZvaWQgKmFsbG9jX3NpbmdsZV9mcm9tX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMzU1NS1cXG5tbS9zbHViLmM6MzU1NjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtMzU1Ny1cXHRpZiAocy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTTEFCX0NPTlNJU1RFTkNZX0NIRUNLUykge1xcbi0tXFxubW0vc2x1Yi5jPTM4MDA9c3RhdGljIHZvaWQgKmdldF9mcm9tX3BhcnRpYWxfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy0zODI4LVxcbm1tL3NsdWIuYzozODI5OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcXG5tbS9zbHViLmMtMzgzMC1cXHRcXHRcXHRvYmplY3QgPSBhbGxvY19zaW5nbGVfZnJvbV9wYXJ0aWFsKHMsIG4sIHNsYWIsXFxuLS1cXG5tbS9zbHViLmM9NDE0Nj1zdGF0aWMgaW50IHNsdWJfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbm1tL3NsdWIuYy00MTU4LVxcbm1tL3NsdWIuYzo0MTU5OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy00MTYwLXN0YXRpYyBpbnQgY291bnRfZnJlZShzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYz00MTcxPXN0YXRpYyBpbmxpbmUgYm9vbCBmcmVlX2RlYnVnX3Byb2Nlc3Npbmcoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtNDIyNi19XFxubW0vc2x1Yi5jOjQyMjc6I2VuZGlmIC8qIENPTkZJR19TTFVCX0RFQlVHICovXFxubW0vc2x1Yi5jLTQyMjgtXFxubW0vc2x1Yi5jOjQyMjk6I2lmIGRlZmluZWQoQ09ORklHX1NMVUJfREVCVUcpIHx8IGRlZmluZWQoU0xBQl9TVVBQT1JUU19TWVNGUylcXG5tbS9zbHViLmMtNDIzMC1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXFxuLS1cXG5tbS9zbHViLmMtNDI0Mi19XFxubW0vc2x1Yi5jOjQyNDM6I2VuZGlmIC8qIENPTkZJR19TTFVCX0RFQlVHIHx8IFNMQUJfU1VQUE9SVFNfU1lTRlMgKi9cXG5tbS9zbHViLmMtNDI0NC1cXG5tbS9zbHViLmM6NDI0NTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNDI0Ni0jZGVmaW5lIE1BWF9QQVJUSUFMX1RPX1NDQU4gMTAwMDBcXG4tLVxcbm1tL3NsdWIuYz00Mjg0PXNsYWJfb3V0X29mX21lbW9yeShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBuaWQpXFxuLS1cXG5tbS9zbHViLmMtNDMxNy19XFxubW0vc2x1Yi5jOjQzMTg6I2Vsc2UgLyogQ09ORklHX1NMVUJfREVCVUcgKi9cXG5tbS9zbHViLmMtNDMxOS1zdGF0aWMgaW5saW5lIHZvaWRcXG4tLVxcbm1tL3NsdWIuYz00NDMwPXN0YXRpYyB2b2lkICpfX19zbGFiX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5tbS9zbHViLmMtNDQ3OC1cXG5tbS9zbHViLmM6NDQ3OTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBrbWVtX2NhY2hlX2RlYnVnKHMpKSB7XFxubW0vc2x1Yi5jLTQ0ODAtXFx0XFx0b2JqZWN0ID0gYWxsb2Nfc2luZ2xlX2Zyb21fbmV3X3NsYWIocywgc2xhYiwgYWMpO1xcbi0tXFxubW0vc2x1Yi5jPTU2MDk9c3RhdGljIHZvaWQgX19zbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTU2MTktXFxubW0vc2x1Yi5jOjU2MjA6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwga21lbV9jYWNoZV9kZWJ1ZyhzKSkge1xcbm1tL3NsdWIuYy01NjIxLVxcdFxcdGZyZWVfdG9fcGFydGlhbF9saXN0KHMsIHNsYWIsIGhlYWQsIHRhaWwsIGNudCwgYWRkcik7XFxuLS1cXG5tbS9zbHViLmM9NjM4Nz12b2lkIHNsYWJfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqaGVhZCxcXG4tLVxcbm1tL3NsdWIuYy02NDAxLVxcbm1tL3NsdWIuYzo2NDAyOiNpZmRlZiBDT05GSUdfU0xVQl9SQ1VfREVCVUdcXG5tbS9zbHViLmMtNjQwMy1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpXFxuLS1cXG5tbS9zbHViLmMtNjQyOC19XFxubW0vc2x1Yi5jOjY0Mjk6I2VuZGlmIC8qIENPTkZJR19TTFVCX1JDVV9ERUJVRyAqL1xcbm1tL3NsdWIuYy02NDMwLVxcbi0tXFxubW0vc2x1Yi5jPTY0OTM9c3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy02NDk2LVxcbm1tL3NsdWIuYzo2NDk3OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy02NDk4LVxcdC8qXFxuLS1cXG5tbS9zbHViLmM9NjUyMj1zdGF0aWMgc2l6ZV90IF9fa3NpemUoY29uc3Qgdm9pZCAqb2JqZWN0KVxcbi0tXFxubW0vc2x1Yi5jLTY1MzktXFxubW0vc2x1Yi5jOjY1NDA6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTY1NDEtXFx0c2tpcF9vcmlnX3NpemVfY2hlY2soc2xhYi1cXHUwMDNlc2xhYl9jYWNoZSwgb2JqZWN0KTtcXG4tLVxcbm1tL3NsdWIuYz03MzExPXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy03MzE1LVxcbm1tL3NsdWIuYzo3MzE2OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcXG5tbS9zbHViLmMtNzMxNy1cXHRcXHRjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0IGFjID0ge1xcbi0tXFxubW0vc2x1Yi5jPTc0NDQ9c3RhdGljIHVuc2lnbmVkIGludCBzbHViX21heF9vcmRlciA9XFxubW0vc2x1Yi5jOjc0NDU6XFx0SVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSA/IDEgOiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUjtcXG5tbS9zbHViLmMtNzQ0Ni1zdGF0aWMgdW5zaWduZWQgaW50IHNsdWJfbWluX29iamVjdHM7XFxuLS1cXG5tbS9zbHViLmM9NzU1Nz1pbml0X2ttZW1fY2FjaGVfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxcbi0tXFxubW0vc2x1Yi5jLTc1NjEtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm4tXFx1MDAzZXBhcnRpYWwpO1xcbm1tL3NsdWIuYzo3NTYyOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03NTYzLVxcdGF0b21pY19sb25nX3NldChcXHUwMDI2bi1cXHUwMDNlbnJfc2xhYnMsIDApO1xcbi0tXFxubW0vc2x1Yi5jLTc1NjgtXFxubW0vc2x1Yi5jOjc1Njk6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTc1NzAtc3RhdGljIGlubGluZSBpbnQgYWxsb2Nfa21lbV9jYWNoZV9zdGF0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYz03NjM4PXN0YXRpYyB2b2lkIGVhcmx5X2ttZW1fY2FjaGVfbm9kZV9hbGxvYyhpbnQgbm9kZSlcXG4tLVxcbm1tL3NsdWIuYy03NjYxLVxcbm1tL3NsdWIuYzo3NjYyOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03NjYzLVxcdGluaXRfb2JqZWN0KGttZW1fY2FjaGVfbm9kZSwgbiwgU0xVQl9SRURfQUNUSVZFKTtcXG4tLVxcbm1tL3NsdWIuYz03NzAwPXZvaWQgX19rbWVtX2NhY2hlX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtNzcwMy1cXHRwY3NfZGVzdHJveShzKTtcXG5tbS9zbHViLmM6NzcwNDojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcXG5tbS9zbHViLmMtNzcwNS1cXHRmcmVlX3BlcmNwdShzLVxcdTAwM2VjcHVfc3RhdHMpO1xcbi0tXFxubW0vc2x1Yi5jPTc3NDk9c3RhdGljIHVuc2lnbmVkIGludCBjYWxjdWxhdGVfc2hlYWZfY2FwYWNpdHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtNzc1Ni1cXG5tbS9zbHViLmM6Nzc1NzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBzLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNMQUJfREVCVUdfRkxBR1MpXFxubW0vc2x1Yi5jLTc3NTgtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9zbHViLmM9NzgwMD1zdGF0aWMgaW50IGNhbGN1bGF0ZV9zaXplcyhzdHJ1Y3Qga21lbV9jYWNoZV9hcmdzICphcmdzLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy03ODEzLVxcbm1tL3NsdWIuYzo3ODE0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03ODE1LVxcdC8qXFxuLS1cXG5tbS9zbHViLmMtNzg3Ni1cXG5tbS9zbHViLmM6Nzg3NzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNzg3OC1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBTTEFCX1NUT1JFX1VTRVIpIHtcXG4tLVxcbm1tL3NsdWIuYy03ODkxLVxcdGthc2FuX2NhY2hlX2NyZWF0ZShzLCBcXHUwMDI2c2l6ZSwgXFx1MDAyNnMtXFx1MDAzZWZsYWdzKTtcXG5tbS9zbHViLmM6Nzg5MjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNzg5My1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBTTEFCX1JFRF9aT05FKSB7XFxuLS1cXG5tbS9zbHViLmM9Nzk1Nj1zdGF0aWMgdm9pZCBsaXN0X3NsYWJfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxubW0vc2x1Yi5jLTc5NTcte1xcbm1tL3NsdWIuYzo3OTU4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03OTU5LVxcdHZvaWQgKmFkZHIgPSBzbGFiX2FkZHJlc3Moc2xhYik7XFxuLS1cXG5tbS9zbHViLmM9ODA1MT12b2lkIF9fa21lbV9vYmpfaW5mbyhzdHJ1Y3Qga21lbV9vYmpfaW5mbyAqa3BwLCB2b2lkICpvYmplY3QsIHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTgwNjUtXFx0b2JqcDAgPSBrYXNhbl9yZXNldF90YWcob2JqZWN0KTtcXG5tbS9zbHViLmM6ODA2NjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtODA2Ny1cXHRvYmpwID0gcmVzdG9yZV9yZWRfbGVmdChzLCBvYmpwMCk7XFxuLS1cXG5tbS9zbHViLmMtODA3OC1cXHRcXHRyZXR1cm47XFxubW0vc2x1Yi5jOjgwNzk6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTgwODAtXFx0b2JqcCA9IGZpeHVwX3JlZF9sZWZ0KHMsIG9ianApO1xcbi0tXFxubW0vc2x1Yi5jPTg0MjQ9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICogX19pbml0IGJvb3RzdHJhcChzdHJ1Y3Qga21lbV9jYWNoZSAqc3RhdGljX2NhY2hlKVxcbi0tXFxubW0vc2x1Yi5jLTg0MzctXFxubW0vc2x1Yi5jOjg0Mzg6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTg0MzktXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcXHUwMDI2bi1cXHUwMDNlZnVsbCwgc2xhYl9saXN0KVxcbi0tXFxubW0vc2x1Yi5jPTg1OTM9aW50IGRvX2ttZW1fY2FjaGVfY3JlYXRlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubW0vc2x1Yi5jLTg2NjAtXFxubW0vc2x1Yi5jOjg2NjE6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTg2NjItXFx0aWYgKCFhbGxvY19rbWVtX2NhY2hlX3N0YXRzKHMpKVxcbi0tXFxubW0vc2x1Yi5jPTg2OTg9c3RhdGljIGludCBjb3VudF90b3RhbChzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy04NzAzLVxcbm1tL3NsdWIuYzo4NzA0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy04NzA1LXN0YXRpYyB2b2lkIHZhbGlkYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jPTg5MzY9c3RhdGljIHZvaWQgcHJvY2Vzc19zbGFiKHN0cnVjdCBsb2NfdHJhY2sgKnQsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTg5NTItI2VuZGlmICAvKiBDT05GSUdfREVCVUdfRlMgICAqL1xcbm1tL3NsdWIuYzo4OTUzOiNlbmRpZlxcdC8qIENPTkZJR19TTFVCX0RFQlVHICovXFxubW0vc2x1Yi5jLTg5NTQtXFxuLS1cXG5tbS9zbHViLmM9ODk2OD1zdGF0aWMgc3NpemVfdCBzaG93X3NsYWJfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy04OTkxLVxcbm1tL3NsdWIuYzo4OTkyOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy04OTkzLVxcdGlmIChmbGFncyBcXHUwMDI2IFNPX0FMTCkge1xcbi0tXFxubW0vc2x1Yi5jPTkyMDE9U0xBQl9BVFRSX1JPKGRlc3Ryb3lfYnlfcmN1KTtcXG5tbS9zbHViLmMtOTIwMi1cXG5tbS9zbHViLmM6OTIwMzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtOTIwNC1zdGF0aWMgc3NpemVfdCBzbGFic19zaG93KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjaGFyICpidWYpXFxuLS1cXG5tbS9zbHViLmM9OTI3Mj1TTEFCX0FUVFIodmFsaWRhdGUpO1xcbm1tL3NsdWIuYy05MjczLVxcbm1tL3NsdWIuYzo5Mjc0OiNlbmRpZiAvKiBDT05GSUdfU0xVQl9ERUJVRyAqL1xcbm1tL3NsdWIuYy05Mjc1LVxcbi0tXFxubW0vc2x1Yi5jPTkzMzY9U0xBQl9BVFRSKHJlbW90ZV9ub2RlX2RlZnJhZ19yYXRpbyk7XFxuLS1cXG5tbS9zbHViLmMtOTMzOC1cXG5tbS9zbHViLmM6OTMzOTojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcXG5tbS9zbHViLmMtOTM0MC1zdGF0aWMgaW50IHNob3dfc3RhdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmLCBlbnVtIHN0YXRfaXRlbSBzaSlcXG4tLVxcbm1tL3NsdWIuYz05NDIwPVNUQVRfQVRUUihTSEVBRl9SRVRVUk5fU0xPVywgc2hlYWZfcmV0dXJuX3Nsb3cpO1xcbm1tL3NsdWIuYzo5NDIxOiNlbmRpZlxcdC8qIENPTkZJR19TTFVCX1NUQVRTICovXFxubW0vc2x1Yi5jLTk0MjItXFxuLS1cXG5tbS9zbHViLmM9OTQ0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3Qgc2xhYl9hdHRyc1tdID0ge1xcbi0tXFxubW0vc2x1Yi5jLTk0NjQtXFx0XFx1MDAyNnNsYWJzX2NwdV9wYXJ0aWFsX2F0dHIuYXR0cixcXG5tbS9zbHViLmM6OTQ2NTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtOTQ2Ni1cXHRcXHUwMDI2dG90YWxfb2JqZWN0c19hdHRyLmF0dHIsXFxuLS1cXG5tbS9zbHViLmMtOTQ4MS0jZW5kaWZcXG5tbS9zbHViLmM6OTQ4MjojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcXG5tbS9zbHViLmMtOTQ4My1cXHRcXHUwMDI2YWxsb2NfZmFzdHBhdGhfYXR0ci5hdHRyLFxcbi0tXFxubW0vc2x1Yi5jPTk3NjI9bGF0ZV9pbml0Y2FsbChzbGFiX3N5c2ZzX2luaXQpO1xcbi0tXFxubW0vc2x1Yi5jLTk3NjQtXFxubW0vc2x1Yi5jOjk3NjU6I2lmIGRlZmluZWQoQ09ORklHX1NMVUJfREVCVUcpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKVxcbm1tL3NsdWIuYy05NzY2LXN0YXRpYyBpbnQgc2xhYl9kZWJ1Z2ZzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5tbS9zbHViLmM9OTk3MT1fX2luaXRjYWxsKHNsYWJfZGVidWdmc19pbml0KTtcXG4tLVxcbm1tL3NsdWIuYy05OTc1LSAqL1xcbm1tL3NsdWIuYzo5OTc2OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy05OTc3LXZvaWQgZ2V0X3NsYWJpbmZvKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYmluZm8gKnNpbmZvKVxcbi0tXFxubW0vc2x1Yi5jLTk5OTctfVxcbm1tL3NsdWIuYzo5OTk4OiNlbmRpZiAvKiBDT05GSUdfU0xVQl9ERUJVRyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NjoyOC41NDcwMzI2MDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4Mzc3MzQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlNoZWF2ZXMgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgXCJzaGVhdmVzXCIgZmVhdHVyZSDigJMgdGhhdCdzIGRlZmluaXRlbHkgcGFydCBvZiBTTFVCLCBubyBxdWVzdGlvbi4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWRpY2F0ZWQganVzdCB0byBzaGVhdmVzPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIFNMVUIgY29uZmlndXJhdGlvbiBkb2NzLiBJIGtub3cgdGhlIGJhc2UgcGFyYW1ldGVycywgb2YgY291cnNlLCBidXQgSSdtIHRoaW5raW5nIGFib3V0IGdyYW51bGFyIGNvbnRyb2xz4oCmIGFueXRoaW5nIGxpa2Ugc2VwYXJhdGUgc2xhYiBjYWNoZXMsIGRlZGljYXRlZCBhbGxvY2F0b3JzLCBwZXJoYXBzIGV2ZW4gc29tZXRoaW5nIGZhbmNpZXIsIGxpa2UgcGVyLUNQVSBvciBOVU1BLWF3YXJlIHNoZWFmIGFsbG9jYXRpb24gc3RyYXRlZ2llcz8gTGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJIHN1c3BlY3Qgd2Ugd2lsbCBmaW5kIHNwZWNpZmljIGNvbmZpZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzg5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTc6NTY6MzEuOTMwODExMzNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzM4NDA1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaGVhZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NjozMS45OTI1NjEzNzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg2MjQ5NjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFNMVUIgYW5kIFNoZWF2ZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGBtbS9zbHViLmNgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhlIGBDT05GSUdfU0xVQl9USU5ZYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gUmlnaHQsIGl0IHNlZW1zIHNoZWF2ZXMgYXJlIGRpc2FibGVkIHdoZW4gYENPTkZJR19TTFVCX1RJTllgIGlzIGVuYWJsZWQuIFRoZSBjb2RlIHNuaXBwZXQgY29uZmlybXMgaXQ6XG5cbmBgYGNcbnN0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY3VsYXRlX3NoZWFmX2NhcGFjaXR5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCAuLi4pXG57XG5cdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IHMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNMQUJfREVCVUdfRkxBR1MpXG5cdFx0cmV0dXJuIDA7XG5gYGBcblxuVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBjb25jbHVzaW9uIGlzIHRoYXQgd2UgKnNob3VsZG4ndCogaGF2ZSBgU0xVQl9USU5ZYCBlbmFibGVkIGlmIHdlIHdhbnQgc2hlYXZlcy4gV2Ugc2hvdWxkIGJlIHVzaW5nIGBTTFVCYCwgdGhlIGRlZmF1bHQgYWxsb2NhdG9yLiBBcmUgdGhlcmUgYW55IG90aGVyIHBvdGVudGlhbCBjb25maWcgb3B0aW9ucyBhdCBwbGF5IGhlcmU/XG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ20gZ29pbmcgdG8gcXVpY2tseSByZS1leGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAuIFRoZSBwcmV2aW91cyBzZWFyY2ggc2hvd2VkIGl0J3MgdXNlZCBpbiBgbGliL21hcGxlX3RyZWUuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jYC4gV2FpdCwgYGxpYi9tYXBsZV90cmVlLmNgIGlzIHRoZSBvbmUgdGhhdCdzIGludGVyZXN0aW5nLiBTbyBsZXQncyBkb3VibGUtY2hlY2sgdGhhdCBmaWxlIHRvIHNlZSBpZiB0aGUgdXNlIG9mIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAgaXMgY29uZGl0aW9uYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDA5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE3OjU2OjM3Ljg1NTA2MzQyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5NzI2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXRfcmV0dXJuX3NoZWFmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9tYXBsZV90cmVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL21hcGxlX3RyZWUuYz0xNDI9c3RhdGljIGlubGluZSB2b2lkIG10X2ZyZWVfYnVsayhzaXplX3Qgc2l6ZSwgdm9pZCBfX3JjdSAqKm5vZGVzKVxcbi0tXFxubGliL21hcGxlX3RyZWUuYy0xNDYtXFxubGliL21hcGxlX3RyZWUuYzoxNDc6c3RhdGljIHZvaWQgbXRfcmV0dXJuX3NoZWFmKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcXG5saWIvbWFwbGVfdHJlZS5jLTE0OC17XFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTExMzE9c3RhdGljIGlubGluZSB2b2lkIG1hc19lbXB0eV9ub2RlcyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmMtMTEzNC1cXHRpZiAobWFzLVxcdTAwM2VzaGVhZikge1xcbmxpYi9tYXBsZV90cmVlLmM6MTEzNTpcXHRcXHRtdF9yZXR1cm5fc2hlYWYobWFzLVxcdTAwM2VzaGVhZik7XFxubGliL21hcGxlX3RyZWUuYy0xMTM2LVxcdFxcdG1hcy1cXHUwMDNlc2hlYWYgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NjozNy45MzAwNDQwNjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM0Mzg4ODI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBNYXBsZSBUcmVlIEttZW0gQ2FjaGUgUmV0dXJuKipcblxuT2theSwgc28gdGhlIE1hcGxlIHRyZWUuIFRoYXQncyBhICpjcnVjaWFsKiBkYXRhIHN0cnVjdHVyZSBpbiB0aGUga2VybmVsLCByaWdodD8gVXNlZCBhbGwgb3ZlciB0aGUgcGxhY2UsIFZNQSB0cmFja2luZyBiZWluZyBqdXN0IG9uZSBleGFtcGxlLiBXaGljaCBtZWFucyB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCBmdW5jdGlvbiwgaXMgYWJzb2x1dGVseSByZWFjaGFibGUgYW5kIGRlZmluaXRlbHkgKmZ1bmN0aW9uYWwqLiBUaGF0IGFsb25lIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0J3MgbW9kaWZ5aW5nIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAgYnkgYWRkaW5nIGBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOYCB0byBgcmVmaWxsX3NoZWFmYC4gVGhpcyB0d2VhayBzdWdnZXN0cyBwb3RlbnRpYWwgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMsIG9yIG1heWJlIGEgd2F5IHRvIGhhbmRsZSBsb3cgbWVtb3J5IGNvbmRpdGlvbnMsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgZnV6emluZyBjYW4gdW5jb3Zlci5cblxuSSdtIGdvaW5nIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGFuZCwgY3J1Y2lhbGx5LCBgcmVmaWxsX3NoZWFmYCwgZ2l2ZW4gdGhlIHBhdGNoJ3MgZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLiBObyBzcGVjaWZpYyBjb25maWcgcmVxdWlyZW1lbnRzIGFyZSBtZW50aW9uZWQsIHdoaWNoIGdlbmVyYWxseSBtZWFucyBTTFVCLCB0aGUgZGVmYXVsdCBhbGxvY2F0b3IsIGlzIGFscmVhZHkgaW4gcGxheS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgYFNMVUJgIGlzIGFjdHVhbGx5IGEgY29uZmlndXJhYmxlIG9wdGlvbi4gQW5kLCBhbHRob3VnaCBNYXBsZSBUcmVlIGlzIGdlbmVyYWxseSBlbmFibGVkLCB0aGVyZSBtaWdodCBiZSBhIGNvbmZpZyB0aGF0IGNvdWxkIGJlIGludGVyZXN0aW5nIHRvIGV4cGxvcmUsIHN1Y2ggYXMgYE1BUExFX1RSRUVgIOKAkyBidXQgYmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgaXQncyBwcm9iYWJseSBhbHdheXMgY29tcGlsZWQgaW4gYW55d2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc4OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1Njo0My4yNzM5MzYwNjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwODkwODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTFVCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNjI9bWVudSBcXFwiU2xhYiBhbGxvY2F0b3Igb3B0aW9uc1xcXCJcXG5tbS9LY29uZmlnLTE2My1cXG5tbS9LY29uZmlnOjE2NDpjb25maWcgU0xVQlxcbm1tL0tjb25maWctMTY1LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWc9MTY4PWNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcXG4tLVxcbm1tL0tjb25maWctMTcyLVxcbm1tL0tjb25maWc6MTczOmNvbmZpZyBTTFVCX1RJTllcXG5tbS9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJDb25maWd1cmUgZm9yIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludFxcXCJcXG4tLVxcbm1tL0tjb25maWc9MjE3PWNvbmZpZyBTTEFCX0JVQ0tFVFNcXG4tLVxcbm1tL0tjb25maWctMjMzLVxcbm1tL0tjb25maWc6MjM0OmNvbmZpZyBTTFVCX1NUQVRTXFxubW0vS2NvbmZpZy0yMzUtXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE3OjU2OjQzLjM0NDg0MTE5NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDI2MTkzNTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlNMVUIgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgYXNzZXNzZWQgdGhlIHNpdHVhdGlvbi4gVGhlIGluaXRpYWwgY2x1ZSBwb2ludHMgZGlyZWN0bHkgdG8gYFNMVUJgIGJlaW5nIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIGluZGljYXRlZCBieSBgZGVmX2Jvb2wgeWAuIFRoaXMgZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gbWVudGlvbnMgcmVsYXRlZCB0byBpdC4gRXZlbiBsaXN0aW5nIGBTTFVCYCBmZWVscyByZWR1bmRhbnQgYW5kIHBvdGVudGlhbGx5IG1pc2xlYWRpbmcuXG5cbkhvd2V2ZXIsIHRoZSBwcm9tcHQgaXMgY2xlYXI6IHByaW9yaXRpemUgKnNwZWNpZmljKiBjb25maWd1cmF0aW9ucyB0aWVkIHRvIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBhdm9pZCB0aGUgZ2VuZXJhbCBvbmVzIHdlJ3JlIGxpa2VseSBhbHJlYWR5IHVzaW5nLiBXaXRoIHRoYXQgY29uc3RyYWludCBpbiBtaW5kLCBsaXN0aW5nIGBTTFVCYCBpcyBkZWZpbml0ZWx5IG91dC4gSXQncyB0b28gZ2VuZXJpYy5cblxuVG8gY29uZmlybSB0aGlzIGFwcHJvYWNoIGFuZCBlbnN1cmUgYWNjdXJhY3ksIEknbGwgbmVlZCB0byByZXZpc2l0IHRoZSBgcmVmaWxsX3NoZWFmYCBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gYG1tL3NsdWIuY2AuIFRoaXMgaXMgY3J1Y2lhbCB0byBzb2xpZGlmeSB0aGF0IG5vIG90aGVyIHNwZWNpZmljIGFkanVzdG1lbnRzIGFyZSB3YXJyYW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDU2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE3OjU2OjUwLjc3MTAzODg0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUyMzY0NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVmaWxsX3NoZWFmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9Mjc5Mz1yZWZpbGxfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG4tLVxcbm1tL3NsdWIuYy0yNzk1LVxcbm1tL3NsdWIuYzoyNzk2OnN0YXRpYyBpbnQgcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsXFxubW0vc2x1Yi5jLTI3OTctXFx0XFx0XFx0IGdmcF90IGdmcClcXG4tLVxcbm1tL3NsdWIuYz00NjExPV9fcGNzX3JlcGxhY2VfZW1wdHlfbWFpbihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcyxcXG4tLVxcbm1tL3NsdWIuYy00NjcwLVxcbm1tL3NsdWIuYzo0NjcxOlxcdGlmIChyZWZpbGxfc2hlYWYocywgZW1wdHksIGdmcCB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1dBUk4pKSB7XFxubW0vc2x1Yi5jLTQ2NzItXFx0XFx0LypcXG4tLVxcbm1tL3NsdWIuYz00OTcxPUVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZik7XFxubW0vc2x1Yi5jLTQ5NzItXFxubW0vc2x1Yi5jOjQ5NzM6c3RhdGljIGludCBfX3ByZWZpbGxfc2hlYWZfcGZtZW1hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtNDk3NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsIGdmcF90IGdmcClcXG4tLVxcbm1tL3NsdWIuYy00OTgyLVxcbm1tL3NsdWIuYzo0OTgzOlxcdHJldCA9IHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwX25vbWVtYWxsb2MpO1xcbm1tL3NsdWIuYy00OTg0LVxcbi0tXFxubW0vc2x1Yi5jLTQ5OTEtXFx0ICovXFxubW0vc2x1Yi5jOjQ5OTI6XFx0cmV0ID0gcmVmaWxsX3NoZWFmKHMsIHNoZWFmLCBnZnApO1xcbm1tL3NsdWIuYy00OTkzLVxcdHNoZWFmLVxcdTAwM2VwZm1lbWFsbG9jID0gdHJ1ZTtcXG4tLVxcbm1tL3NsdWIuYz01MDA3PXN0cnVjdCBzbGFiX3NoZWFmICpcXG5tbS9zbHViLmM6NTAwODprbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IHNpemUpXFxubW0vc2x1Yi5jLTUwMDkte1xcbi0tXFxubW0vc2x1Yi5jLTUwNzAtXFx0XFx0aWYgKHNoZWFmLVxcdTAwM2VzaXplIFxcdTAwM2Mgc2l6ZSBcXHUwMDI2XFx1MDAyNlxcbm1tL3NsdWIuYzo1MDcxOlxcdFxcdCAgICBfX3ByZWZpbGxfc2hlYWZfcGZtZW1hbGxvYyhzLCBzaGVhZiwgZ2ZwKSkge1xcbm1tL3NsdWIuYy01MDcyLVxcdFxcdFxcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzaGVhZik7XFxuLS1cXG5tbS9zbHViLmMtNTA4MS0vKlxcbm1tL3NsdWIuYzo1MDgyOiAqIFVzZSB0aGlzIHRvIHJldHVybiBhIHNoZWFmIG9idGFpbmVkIGJ5IGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZigpXFxubW0vc2x1Yi5jLTUwODMtICpcXG4tLVxcbm1tL3NsdWIuYz01MDkxPXZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG4tLVxcbm1tL3NsdWIuYy01MTI1LVxcdGlmICghYmFybiB8fCBkYXRhX3JhY2UoYmFybi1cXHUwMDNlbnJfZnVsbCkgXFx1MDAzZT0gTUFYX0ZVTExfU0hFQVZFUyB8fFxcbm1tL3NsdWIuYzo1MTI2OlxcdCAgICByZWZpbGxfc2hlYWYocywgc2hlYWYsIGdmcCB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1dBUk4pKSB7XFxubW0vc2x1Yi5jLTUxMjctXFx0XFx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHNoZWFmKTtcXG4tLVxcbm1tL3NsdWIuYy01MTM2LS8qXFxubW0vc2x1Yi5jOjUxMzc6ICogUmVmaWxsIGEgc2hlYWYgcHJldmlvdXNseSByZXR1cm5lZCBieSBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYgdG8gYXQgbGVhc3RcXG5tbS9zbHViLmMtNTEzOC0gKiB0aGUgZ2l2ZW4gc2l6ZS5cXG4tLVxcbm1tL3NsdWIuYy01MTQ4LSAqL1xcbm1tL3NsdWIuYzo1MTQ5OmludCBrbWVtX2NhY2hlX3JlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxcbm1tL3NsdWIuYy01MTUwLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2xhYl9zaGVhZiAqKnNoZWFmcCwgdW5zaWduZWQgaW50IHNpemUpXFxuLS1cXG5tbS9zbHViLmMtNTE1NS1cXHQgKiBUT0RPOiBkbyB3ZSB3YW50IHRvIHN1cHBvcnQgKnNoZWFmID09IE5VTEwgdG8gYmUgZXF1aXZhbGVudCBvZlxcbm1tL3NsdWIuYzo1MTU2OlxcdCAqIGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZigpID9cXG5tbS9zbHViLmMtNTE1Ny1cXHQgKi9cXG4tLVxcbm1tL3NsdWIuYy01MTY2LVxcdFxcdGlmIChsaWtlbHkoc2hlYWYtXFx1MDAzZWNhcGFjaXR5ID09IHMtXFx1MDAzZXNoZWFmX2NhcGFjaXR5KSlcXG5tbS9zbHViLmM6NTE2NzpcXHRcXHRcXHRyZXR1cm4gX19wcmVmaWxsX3NoZWFmX3BmbWVtYWxsb2Mocywgc2hlYWYsIGdmcCk7XFxubW0vc2x1Yi5jLTUxNjgtXFxuLS1cXG5tbS9zbHViLmMtNTE4MS1cXHQgKi9cXG5tbS9zbHViLmM6NTE4MjpcXHRzaGVhZiA9IGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihzLCBnZnAsIHNpemUpO1xcbm1tL3NsdWIuYy01MTgzLVxcdGlmICghc2hlYWYpXFxuLS1cXG5tbS9zbHViLmMtNTE5MS0vKlxcbm1tL3NsdWIuYzo1MTkyOiAqIEFsbG9jYXRlIGZyb20gYSBzaGVhZiBvYnRhaW5lZCBieSBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoKVxcbm1tL3NsdWIuYy01MTkzLSAqXFxuLS1cXG5tbS9zbHViLmM9Nzc0OT1zdGF0aWMgdW5zaWduZWQgaW50IGNhbGN1bGF0ZV9zaGVhZl9jYXBhY2l0eShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy03Nzg5LVxcdCAqIFJlc3BlY3QgYW4gZXhwbGljaXQgcmVxdWVzdCBmb3IgY2FwYWNpdHkgdGhhdCdzIHR5cGljYWxseSBtb3RpdmF0ZWQgYnlcXG5tbS9zbHViLmM6Nzc5MDpcXHQgKiBleHBlY3RlZCBtYXhpbXVtIHNpemUgb2Yga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKCkgdG8gbm90IGVuZCB1cFxcbm1tL3NsdWIuYy03NzkxLVxcdCAqIHVzaW5nIGxvdy1wZXJmb3JtYW5jZSBvdmVyc2l6ZSBzaGVhdmVzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE3OjU2OjUwLjgzNjI4NjIzMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTk5Nzk4OTY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgLCBhbmQgdGhlIGtleSBoZXJlIGlzIHRoZSBhZGRpdGlvbiBvZiBgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTmAgdG8gdGhlIGNhbGwgdG8gYHJlZmlsbF9zaGVhZmAuIFRoaXMgaXMgYSBjbGVhciwgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIFNMVUIgYWxsb2NhdG9yLiBNeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgaW1wYWN0IG9mIHRoZXNlIGZsYWdzIHdpdGhpbiB0aGUgYHJlZmlsbF9zaGVhZmAgY29udGV4dC4gSXQgbG9va3MgbGlrZSBpdCdzIHByZXZlbnRpbmcgdGhlIHN5c3RlbSBmcm9tIGRpcHBpbmcgaW50byBpdHMgcmVzZXJ2ZXMgb3IgZW1pdHRpbmcgd2FybmluZ3Mgd2hlbiBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgYSByZXR1cm5lZCBzaGVhZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgc3BlY2lmaWMgY2hhbmdlIGlzIGJlaW5nIGludHJvZHVjZWQgaGVyZSwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgZm9yIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSBhcm91bmQgaG93IHdlIGFyZSBnb2luZyB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24uIFRoZSBgcmVmaWxsX3NoZWFmYCBmdW5jdGlvbiBpcyBjcml0aWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNTgsIk91dHB1dFRva2VucyI6MTAwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE3OjU3OjMyLjgzNDI4MTEyNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia21lbV9jYWNoZV9yZXR1cm5fc2hlYWZcIixcbiAgICBcInJlZmlsbF9zaGVhZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTFVCIGFsbG9jYXRvciB0byBwcmV2ZW50IGByZWZpbGxfc2hlYWZgIGZyb20gdXNpbmcgbWVtb3J5IHJlc2VydmVzIG9yIHdhcm5pbmcgb24gYWxsb2NhdGlvbiBmYWlsdXJlIHdoZW4gcmV0dXJuaW5nIGEgc2hlYWYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImttZW1fY2FjaGVfcmV0dXJuX3NoZWFmXCIsXG4gICAgXCJyZWZpbGxfc2hlYWZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0xVQiBhbGxvY2F0b3IgdG8gcHJldmVudCBgcmVmaWxsX3NoZWFmYCBmcm9tIHVzaW5nIG1lbW9yeSByZXNlcnZlcyBvciB3YXJuaW5nIG9uIGFsbG9jYXRpb24gZmFpbHVyZSB3aGVuIHJldHVybmluZyBhIHNoZWFmLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowzm9sz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 17:13:48 +0000 UTC FinishedAt: 2026-07-20 17:57:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3fe08b9796f36ef437ab9328e7dd1e5ff2d66603", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3fe08b9796f36ef437ab9328e7dd1e5ff2d66603", "config_name": "upstream-apparmor-kasan.config", "series_id": "55aaeb5e-89eb-4783-b692-781692de2ad7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "kmem_cache_return_sheaf", "refill_sheaf" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDE3OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a21lbV9jYWNoZV9yZXR1cm5fc2hlYWYmIzM0OywKICAgICYjMzQ7cmVmaWxsX3NoZWFmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTFVCIGFsbG9jYXRvciB0byBwcmV2ZW50IGByZWZpbGxfc2hlYWZgIGZyb20gdXNpbmcgbWVtb3J5IHJlc2VydmVzIG9yIHdhcm5pbmcgb24gYWxsb2NhdGlvbiBmYWlsdXJlIHdoZW4gcmV0dXJuaW5nIGEgc2hlYWYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE3OjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDMzMzgwNWQ5MmNjNjgwMWI1NTI1MjM0NWQ0YjIyMDEzMDA2ODk4N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDE3OjU1OjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggNTNiNDk3NmQzODMxOGYuLjM1N2I3NTIyYzgxNzAwIDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmNcbkBAIC01MTIzLDcgJiM0Mzs1MTIzLDcgQEAgdm9pZCBrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxuIFx0ICogc2ltcGx5IGZsdXNoIGFuZCBmcmVlIGl0LlxuIFx0ICovXG4gXHRpZiAoIWJhcm4gfHwgZGF0YV9yYWNlKGJhcm4tXHUwMDNlbnJfZnVsbCkgXHUwMDNlPSBNQVhfRlVMTF9TSEVBVkVTIHx8XG4tXHQgICAgcmVmaWxsX3NoZWFmKHMsIHNoZWFmLCBnZnApKSB7XG4mIzQzO1x0ICAgIHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTikpIHtcbiBcdFx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHNoZWFmKTtcbiBcdFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZik7XG4gXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrbWVtX2NhY2hlX3JldHVybl9zaGVhZiYjMzQ7LAogICAgJiMzNDtyZWZpbGxfc2hlYWYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNMVUIgYWxsb2NhdG9yIHRvIHByZXZlbnQgYHJlZmlsbF9zaGVhZmAgZnJvbSB1c2luZyBtZW1vcnkgcmVzZXJ2ZXMgb3Igd2FybmluZyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUgd2hlbiByZXR1cm5pbmcgYSBzaGVhZi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQzMzM4MDVkOTJjYzY4MDFiNTUyNTIzNDVkNGIyMjAxMzAwNjg5ODcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyMCAxNzo1NTozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCA1M2I0OTc2ZDM4MzE4Zi4uMzU3Yjc1MjJjODE3MDAgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmMKQEAgLTUxMjMsNyAmIzQzOzUxMjMsNyBAQCB2b2lkIGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsCiAJICogc2ltcGx5IGZsdXNoIGFuZCBmcmVlIGl0LgogCSAqLwogCWlmICghYmFybiB8fCBkYXRhX3JhY2UoYmFybi0mZ3Q7bnJfZnVsbCkgJmd0Oz0gTUFYX0ZVTExfU0hFQVZFUyB8fAotCSAgICByZWZpbGxfc2hlYWYocywgc2hlYWYsIGdmcCkpIHsKJiM0MzsJICAgIHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTikpIHsKIAkJc2hlYWZfZmx1c2hfdW51c2VkKHMsIHNoZWFmKTsKIAkJZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZik7CiAJCXJldHVybjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTTFVCIEFsbG9jYXRvciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYG1tL3NsdWIuY2AsIHNwZWNpZmljYWxseSB0aGUgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgcmlnaHQgdGhlcmU6IHRoZXkmIzM5O3JlIGZpZGRsaW5nIHdpdGggdGhlIGBnZnBgIGZsYWdzIHBhc3NlZCB0byBgcmVmaWxsX3NoZWFmYC4gVGhleSYjMzk7dmUgYWRkZWQgYF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1dBUk5gLiBUaGlzIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGFsbG9jYXRpb24gYmVoYXZpb3IgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgoKVGhpcyBpcyBTTFVCLCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdG9yLiBUaGUgcGF0Y2ggc2VlbXMgZnVuY3Rpb25hbGx5IHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBhIGNoYW5nZSBpbiB0aGUgYWxsb2NhdGlvbiBmbGFncy4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGByZWZpbGxfc2hlYWZgIGlzIGdldHRpbmcgY2FsbGVkIGhlcmUsIGFuZCBpdCYjMzk7cyBnZXR0aW5nIHRoZXNlIG5ldyBmbGFncy4gSXQmIzM5O3Mgb2J2aW91c2x5IGRvaW5nIGFuIGFsbG9jYXRpb24gb2Ygc29tZSBzb3J0IGlmIHRoaXMgaXMgYWZmZWN0aW5nIHRoZSBmbGFncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcmVmaWxsX3NoZWFmYCBhY3R1YWxseSAqZG9lcyogaW4gcmVsYXRpb24gdG8gYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCwgYW5kIHdoeSB0aGVzZSBmbGFncyBhcmUgaW1wb3J0YW50LiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgZm9yIGJvdGggZnVuY3Rpb25zIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttZW1fY2FjaGVfcmV0dXJuX3NoZWFmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz01MDA4PWttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbi0tXG5tbS9zbHViLmMtNTA5MC0gKi9cbm1tL3NsdWIuYzo1MDkxOnZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbm1tL3NsdWIuYy01MDkyLVx0XHRcdCAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxuLS1cbm1tL3NsdWIuYz01MTQ5PWludCBrbWVtX2NhY2hlX3JlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3NsdWIuYy01MTg1LVxubW0vc2x1Yi5jOjUxODY6XHRrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzLCBnZnAsICpzaGVhZnApO1xubW0vc2x1Yi5jLTUxODctXHQqc2hlYWZwID0gc2hlYWY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGluIGBtbS9zbHViLmNgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBmb2N1c2luZyBvbiBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgLiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgU0xVQiBhbGxvY2F0b3IgYW5kIHByb2JhYmx5IGEgYnVsayByZXR1cm4gb3BlcmF0aW9uLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBjb3JlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBwYXRocyB3aXRoaW4gU0xVQi4gSXMgdGhpcyByZWxhdGVkIHRvIHBlci1DUFUgY2FjaGVzLCBub2RlIGNhY2hlcywgb3Igc29tZXRoaW5nIG1vcmUgZ3JhbnVsYXI/IEkmIzM5O20gcGljdHVyaW5nIHRoZSBga21lbV9jYWNoZWAgZGF0YSBzdHJ1Y3R1cmUgaW4gbXkgaGVhZCDigJMgcGFydGljdWxhcmx5IHRoZSBmcmVlbGlzdCBtYW5hZ2VtZW50LiBJcyBpdCB3b3JraW5nIHdpdGggcGFydGlhbCBzbGFicyBvciBmdWxseSBwb3B1bGF0ZWQgb25lcz8gSXMgdGhlICYjMzQ7c2hlYWYmIzM0OyBqdXN0IGEgbWV0YXBob3IgZm9yIGEgZ3JvdXAgb2Ygb2JqZWN0cz8gT3IgaXMgdGhlcmUgYSBtb3JlIHNwZWNpZmljIG1lYW5pbmcgaGVyZSBpbiB0aGUgU0xVQiBjb250ZXh0PyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjbHVlcy4gSSBzdXNwZWN0IHdl4oCZcmUgdHJ5aW5nIHRvIHJldHVybiBhIGJ1bmNoIG9mIHByZXZpb3VzbHkgYWxsb2NhdGVkIG9iamVjdHMgYmFjayB0byB0aGUgY2FjaGUuIEkgaG9wZSB0aGUgY29udGV4dCBpcyBvYnZpb3VzIGZyb20gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDkxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUwOTE6XHR2b2lkIGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXG41MDkyOlx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXG41MDkzOlx0e1xuNTA5NDpcdFx0c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcztcbjUwOTU6XHRcdHN0cnVjdCBub2RlX2Jhcm4gKmJhcm47XG41MDk2Olx0XG41MDk3Olx0XHRpZiAodW5saWtlbHkoKHNoZWFmLVx1MDAzZWNhcGFjaXR5ICE9IHMtXHUwMDNlc2hlYWZfY2FwYWNpdHkpXG41MDk4Olx0XHRcdCAgICAgfHwgc2hlYWYtXHUwMDNlcGZtZW1hbGxvYykpIHtcbjUwOTk6XHRcdFx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHNoZWFmKTtcbjUxMDA6XHRcdFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZik7XG41MTAxOlx0XHRcdHJldHVybjtcbjUxMDI6XHRcdH1cbjUxMDM6XHRcbjUxMDQ6XHRcdGxvY2FsX2xvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKTtcbjUxMDU6XHRcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVx1MDAzZWNwdV9zaGVhdmVzKTtcbjUxMDY6XHRcdGJhcm4gPSBnZXRfYmFybihzKTtcbjUxMDc6XHRcbjUxMDg6XHRcdGlmICghcGNzLVx1MDAzZXNwYXJlKSB7XG41MTA5Olx0XHRcdHBjcy1cdTAwM2VzcGFyZSA9IHNoZWFmO1xuNTExMDpcdFx0XHRzaGVhZiA9IE5VTEw7XG41MTExOlx0XHRcdHN0YXQocywgU0hFQUZfUkVUVVJOX0ZBU1QpO1xuNTExMjpcdFx0fVxuNTExMzpcdFxuNTExNDpcdFx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG41MTE1Olx0XG41MTE2Olx0XHRpZiAoIXNoZWFmKVxuNTExNzpcdFx0XHRyZXR1cm47XG41MTE4Olx0XG41MTE5Olx0XHRzdGF0KHMsIFNIRUFGX1JFVFVSTl9TTE9XKTtcbjUxMjA6XHRcbjUxMjE6XHRcdC8qXG41MTIyOlx0XHQgKiBJZiB0aGUgYmFybiBoYXMgdG9vIG1hbnkgZnVsbCBzaGVhdmVzIG9yIHdlIGZhaWwgdG8gcmVmaWxsIHRoZSBzaGVhZixcbjUxMjM6XHRcdCAqIHNpbXBseSBmbHVzaCBhbmQgZnJlZSBpdC5cbjUxMjQ6XHRcdCAqL1xuNTEyNTpcdFx0aWYgKCFiYXJuIHx8IGRhdGFfcmFjZShiYXJuLVx1MDAzZW5yX2Z1bGwpIFx1MDAzZT0gTUFYX0ZVTExfU0hFQVZFUyB8fFxuNTEyNjpcdFx0ICAgIHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTikpIHtcbjUxMjc6XHRcdFx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHNoZWFmKTtcbjUxMjg6XHRcdFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZik7XG41MTI5Olx0XHRcdHJldHVybjtcbjUxMzA6XHRcdH1cbjUxMzE6XHRcbjUxMzI6XHRcdGJhcm5fcHV0X2Z1bGxfc2hlYWYoYmFybiwgc2hlYWYpO1xuNTEzMzpcdFx0c3RhdChzLCBCQVJOX1BVVCk7XG41MTM0Olx0fVxuNTEzNTpcdFxuNTEzNjpcdC8qXG41MTM3Olx0ICogUmVmaWxsIGEgc2hlYWYgcHJldmlvdXNseSByZXR1cm5lZCBieSBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYgdG8gYXQgbGVhc3RcbjUxMzg6XHQgKiB0aGUgZ2l2ZW4gc2l6ZS5cbjUxMzk6XHQgKlxuNTE0MDpcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLiBUaGUgc2hlYWYgd2lsbCBjb250YWluIGF0IGxlYXN0IEBzaXplIG9iamVjdHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYyMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoZSBjaGFuZ2UsIGFzIEkgc2VlIGl0OgoKKipTTFVCIEFsbG9jYXRvciBDaGFuZ2UgQW5hbHlzaXMqKgoKT2theSwgc28gdGhlIG1vZGlmaWNhdGlvbiBpcyBpbiBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBTTFVCIGFsbG9jYXRvci4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTmAgdG8gdGhlIGBnZnBgIGZsYWdzIHdoZW4gY2FsbGluZyBgcmVmaWxsX3NoZWFmYC4gVGhpcyBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IGByZWZpbGxfc2hlYWZgIGZyb20gcmVzb3J0aW5nIHRvIG1lbW9yeSByZXNlcnZlcyBvciBpc3N1aW5nIHdhcm5pbmdzIGlmIGFsbG9jYXRpb24gZmFpbHMsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYmVoYXZpb3JhbCBzaGlmdC4KClRoaXMgaW1tZWRpYXRlbHkgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0JiMzNDsgdG8gbWUuIEFueSBjaGFuZ2UgdGhhdCBhbHRlcnMgYWxsb2NhdGlvbiBiZWhhdmlvciBsaWtlIHRoaXMgaXMgcHJpbWUgdGVycml0b3J5IGZvciB1bmNvdmVyaW5nIHN1YnRsZSBidWdzIG9yIGVkZ2UgY2FzZXMuIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAgYW5kIGByZWZpbGxfc2hlYWZgIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBhbiBleWUgb24uCgpJIHNob3VsZCB2ZXJpZnkgcXVpY2tseSB3aGV0aGVyIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAgaXMgZXhwb3J0ZWQuIElmIGl0JiMzOTtzIGludGVybmFsLCB0aGUgZnV6emluZyBhcHByb2FjaCB3aWxsIG5lZWQgdG8gYmUgZGlmZmVyZW50LCBidXQgZXZlbiBpbnRlcm5hbCBmdW5jdGlvbnMgY2FuIGJlIHRhcmdldGVkLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IHF1aWNrbHkgYmVmb3JlIGRpdmluZyBkZWVwZXIgaW50byB0aGUgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmttZW1fY2FjaGVfcmV0dXJuX3NoZWFmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDYxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2UgTGFuZHNjYXBlKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoZXJlIHRoaXMgaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqLiBJdCYjMzk7cyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IG9wZXJhdGlvbmFsIGNvbnRleHQgYmVmb3JlIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIGVmZmVjdGl2ZW5lc3MsIGxpbWl0YXRpb25zLCBvciBwb3RlbnRpYWwgZm9yIGltcHJvdmVtZW50LiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBhZG9wdGlvbiBhbmQgYXBwbGljYXRpb24uIFNvLCBsZXQmIzM5O3Mgc3RhcnQgbWFwcGluZyBvdXQgdGhlIHRlcnJhaW4uIFdoZXJlIGFtIEkgZmluZGluZyBpdD8gV2hhdCBpcyBpdCBiZWluZyBlbXBsb3llZCBmb3I/IFdoYXQgYXJlIHRoZSBrZXkgdXNlIGNhc2VzPyBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uYWwgZmlyc3Qgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21lbV9jYWNoZV9yZXR1cm5fc2hlYWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zbGFiLmg9OTE2PWludCBrbWVtX2NhY2hlX3JlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTkxOC1cbmluY2x1ZGUvbGludXgvc2xhYi5oOjkxOTp2b2lkIGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC05MjAtXHRcdFx0XHQgICAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKTtcbi0tXG5saWIvbWFwbGVfdHJlZS5jPTE0Nz1zdGF0aWMgdm9pZCBtdF9yZXR1cm5fc2hlYWYoc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxubGliL21hcGxlX3RyZWUuYy0xNDgte1xubGliL21hcGxlX3RyZWUuYzoxNDk6XHRrbWVtX2NhY2hlX3JldHVybl9zaGVhZihtYXBsZV9ub2RlX2NhY2hlLCBHRlBfTk9XQUlULCBzaGVhZik7XG5saWIvbWFwbGVfdHJlZS5jLTE1MC19XG4tLVxubW0vc2x1Yi5jPTUwMDg9a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKVxuLS1cbm1tL3NsdWIuYy01MDkwLSAqL1xubW0vc2x1Yi5jOjUwOTE6dm9pZCBrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxubW0vc2x1Yi5jLTUwOTItXHRcdFx0ICAgICBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXG4tLVxubW0vc2x1Yi5jPTUxNDk9aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXG4tLVxubW0vc2x1Yi5jLTUxODUtXG5tbS9zbHViLmM6NTE4NjpcdGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmKHMsIGdmcCwgKnNoZWFmcCk7XG5tbS9zbHViLmMtNTE4Ny1cdCpzaGVhZnAgPSBzaGVhZjtcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0xOTI9a21lbV9jYWNoZV9hbGxvY19mcm9tX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmgtMTk0LVxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg6MTk1OnZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTE5Ni1cdFx0c3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKTtcbi0tXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jPTI4Mz1pbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbi0tXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTI5NS1cbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM6Mjk2Olx0XHRrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzLCBnZnAsICpzaGVhZnApO1xudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0yOTctXHRcdCpzaGVhZnAgPSBzaGVhZjtcbi0tXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTMwNy1cbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM6MzA4OnZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMzA5LVx0XHQgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDMzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgVXNlIG9mIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAqKgoKT2theSwgc28gSSBzZWUgdGhpcyBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGZ1bmN0aW9uIGlzIHNob3dpbmcgdXAgaW4gYGxpYi9tYXBsZV90cmVlLmNgIGFuZCBgbW0vc2x1Yi5jYC4gSW50ZXJlc3RpbmcuIFRoZSBtZW50aW9uIGluIGBtbS9zbHViLmNgIGlzIHRoZSBrZXkg4oCTIGFoLCB3YWl0IGEgbWludXRlLCBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGlzIGEgbmV3IGFkZGl0aW9uIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEFuZCB0aGUgbmFtZSAmIzM0O3NoZWFmJiMzNDsgc3VnZ2VzdHMgdGhpcyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIHBlci1DUFUgY2FjaGluZywgcmlnaHQ/IExpa2VseSBhIG5ldyBpbXBsZW1lbnRhdGlvbiBvciBvcHRpbWl6YXRpb24gcmVsYXRlZCB0byB0aG9zZSBzdHJ1Y3R1cmVzLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIsIHRoaXMgd2FycmFudHMgYSBjb25maWcgZXhwbG9yYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgZW5hYmxpbmcgY29uZGl0aW9ucy4gSSBuZWVkIHRvIHNlZSB3aGljaCBjb25maWd1cmF0aW9ucyB0cmlnZ2VyIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzIGZvciB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZmlnIG9wdGlvbnMgZGlyZWN0bHkgdGllZCB0byB0aGUgY29uY2VwdCBvZiAmIzM0O3NoZWF2ZXMmIzM0OyBvciBhbnl0aGluZyB0aGF0IHNvdW5kcyByZWxhdGVkLiBUaGF0JiMzOTtsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBwcm9wZXJseSB1bmRlcnN0YW5kIGl0cyByb2xlIGluIFNMVUIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19TTFVCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0xOTM9ZW51bSBzbGFiX2ZsYWdzIHtcbi0tXG5tbS9zbHViLmMtMTk4LVxubW0vc2x1Yi5jOjE5OTojaWZuZGVmIENPTkZJR19TTFVCX1RJTllcbm1tL3NsdWIuYy0yMDAtI2RlZmluZSBfX2Zhc3RwYXRoX2lubGluZSBfX2Fsd2F5c19pbmxpbmVcbi0tXG5tbS9zbHViLmMtMjA0LVxubW0vc2x1Yi5jOjIwNTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYzoyMDY6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHX09OXG5tbS9zbHViLmMtMjA3LURFRklORV9TVEFUSUNfS0VZX1RSVUUoc2x1Yl9kZWJ1Z19lbmFibGVkKTtcbi0tXG5tbS9zbHViLmM9MjA5PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNsdWJfZGVidWdfZW5hYmxlZCk7XG5tbS9zbHViLmMtMjEwLSNlbmRpZlxubW0vc2x1Yi5jOjIxMTojZW5kaWZcdFx0LyogQ09ORklHX1NMVUJfREVCVUcgKi9cbm1tL3NsdWIuYy0yMTItXG4tLVxubW0vc2x1Yi5jPTI0OT12b2lkICpmaXh1cF9yZWRfbGVmdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqcClcbi0tXG5tbS9zbHViLmMtMjY3LVxubW0vc2x1Yi5jOjI2ODojaWZuZGVmIENPTkZJR19TTFVCX1RJTllcbm1tL3NsdWIuYy0yNjktLypcbi0tXG5tbS9zbHViLmM9MzM4PXN0YXRpYyBpbmxpbmUgaW50IHN5c2ZzX3NsYWJfYWRkKHN0cnVjdCBrbWVtX2NhY2hlICpzKSB7IHJldHVybiAwOyB9XG4tLVxubW0vc2x1Yi5jLTM0MC1cbm1tL3NsdWIuYzozNDE6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU0xVQl9ERUJVRylcbm1tL3NsdWIuYy0zNDItc3RhdGljIHZvaWQgZGVidWdmc19zbGFiX2FkZChzdHJ1Y3Qga21lbV9jYWNoZSAqKTtcbi0tXG5tbS9zbHViLmM9MzUyPWVudW0gc3RhdF9pdGVtIHtcbi0tXG5tbS9zbHViLmMtMzgxLVxubW0vc2x1Yi5jOjM4MjojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcbm1tL3NsdWIuYy0zODMtc3RydWN0IGttZW1fY2FjaGVfc3RhdHMge1xuLS1cbm1tL3NsdWIuYz0zODg9c3RhdGljIGlubGluZSB2b2lkIHN0YXQoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKnMsIGVudW0gc3RhdF9pdGVtIHNpKVxubW0vc2x1Yi5jLTM4OS17XG5tbS9zbHViLmM6MzkwOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xubW0vc2x1Yi5jLTM5MS1cdC8qXG4tLVxubW0vc2x1Yi5jPTQwMD12b2lkIHN0YXRfYWRkKGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLCBlbnVtIHN0YXRfaXRlbSBzaSwgaW50IHYpXG5tbS9zbHViLmMtNDAxLXtcbm1tL3NsdWIuYzo0MDI6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXG5tbS9zbHViLmMtNDAzLVx0cmF3X2NwdV9hZGQocy1cdTAwM2VjcHVfc3RhdHMtXHUwMDNlc3RhdFtzaV0sIHYpO1xuLS1cbm1tL3NsdWIuYz00NDQ9c3RydWN0IGttZW1fY2FjaGVfbm9kZSB7XG4tLVxubW0vc2x1Yi5jLTQ0Ny1cdHN0cnVjdCBsaXN0X2hlYWQgcGFydGlhbDtcbm1tL3NsdWIuYzo0NDg6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNDQ5LVx0YXRvbWljX2xvbmdfdCBucl9zbGFicztcbi0tXG5tbS9zbHViLmM9OTA2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTkxMS1cbm1tL3NsdWIuYzo5MTI6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtOTEzLVxuLS1cbm1tL3NsdWIuYz05ODE9c3RhdGljIGlubGluZSB2b2lkICpyZXN0b3JlX3JlZF9sZWZ0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpwKVxuLS1cbm1tL3NsdWIuYy05OTEtICovXG5tbS9zbHViLmM6OTkyOiNpZiBkZWZpbmVkKENPTkZJR19TTFVCX0RFQlVHX09OKVxubW0vc2x1Yi5jLTk5My1zdGF0aWMgc2xhYl9mbGFnc190IHNsdWJfZGVidWcgPSBERUJVR19ERUZBVUxUX0ZMQUdTO1xuLS1cbm1tL3NsdWIuYz0xMzExPWNoZWNrX2J5dGVzX2FuZF9yZXBvcnQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0xMzc0LSAqXG5tbS9zbHViLmM6MTM3NTogKiBbTWFuZGF0b3J5IHBhZGRpbmddIChpZiBDT05GSUdfU0xVQl9ERUJVRyBcdTAwMjZcdTAwMjYgU0xBQl9SRURfWk9ORSlcbm1tL3NsdWIuYy0xMzc2LSAqICAgLSBPbmUgbWFuZGF0b3J5IGRlYnVnIHdvcmQgdG8gZ3VhcmFudGVlIGEgbWluaW11bSBwb2lzb25lZCBnYXBcbi0tXG5tbS9zbHViLmM9MTg4ND1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9zbHViX2RlYnVnKGNvbnN0IGNoYXIgKnN0ciwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vc2x1Yi5jLTE5MTctXHQgKiBzbGFiX2RlYnVnIHNob3VsZCBiZSB1bmNoYW5nZWQgKDAgb3IgREVCVUdfREVGQVVMVF9GTEFHUywgZGVwZW5kaW5nXG5tbS9zbHViLmM6MTkxODpcdCAqIG9uIENPTkZJR19TTFVCX0RFQlVHX09OKS4gV2UgY2FuIGV4dGVuZGVkIHRoYXQgdG8gbXVsdGlwbGUgbGlzdHMgYXNcbm1tL3NsdWIuYy0xOTE5LVx0ICogbG9uZyBhcyB0aGVyZSBpcyBubyBvcHRpb24gc3BlY2lmeWluZyBmbGFncyB3aXRob3V0IGEgc2xhYiBsaXN0LlxuLS1cbm1tL3NsdWIuYz0xOTU4PXNsYWJfZmxhZ3NfdCBrbWVtX2NhY2hlX2ZsYWdzKHNsYWJfZmxhZ3NfdCBmbGFncywgY29uc3QgY2hhciAqbmFtZSlcbi0tXG5tbS9zbHViLmMtMjAxMS19XG5tbS9zbHViLmM6MjAxMjojZWxzZSAvKiAhQ09ORklHX1NMVUJfREVCVUcgKi9cbm1tL3NsdWIuYy0yMDEzLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9vYmplY3RfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCkge31cbi0tXG5tbS9zbHViLmM9MjA0Nj1zdGF0aWMgaW5saW5lIHZvaWQgZGVjX3NsYWJzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlLFxubW0vc2x1Yi5jLTIwNDctXHRcdFx0XHRcdFx0XHRpbnQgb2JqZWN0cykge31cbm1tL3NsdWIuYzoyMDQ4OiNlbmRpZiAvKiBDT05GSUdfU0xVQl9ERUJVRyAqL1xubW0vc2x1Yi5jLTIwNDktXG4tLVxubW0vc2x1Yi5jPTI1NTU9c3RhdGljIGlubGluZSBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG4tLVxubW0vc2x1Yi5jLTI1NjAtXG5tbS9zbHViLmM6MjU2MTojaWZkZWYgQ09ORklHX1NMVUJfUkNVX0RFQlVHXG5tbS9zbHViLmMtMjU2Mi1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpO1xuLS1cbm1tL3NsdWIuYz0yNTY0PXN0cnVjdCByY3VfZGVsYXllZF9mcmVlIHtcbi0tXG5tbS9zbHViLmMtMjU3NC0gKiBSZXR1cm5zIHRydWUgaWYgZnJlZWluZyBvZiB0aGUgb2JqZWN0IGNhbiBwcm9jZWVkLCBmYWxzZSBpZiBpdHMgcmV1c2Vcbm1tL3NsdWIuYzoyNTc1OiAqIHdhcyBkZWxheWVkIGJ5IENPTkZJR19TTFVCX1JDVV9ERUJVRyBvciBLQVNBTiBxdWFyYW50aW5lLCBvciBpdCB3YXMgcmV0dXJuZWRcbm1tL3NsdWIuYy0yNTc2LSAqIHRvIEtGRU5DRS5cbi0tXG5tbS9zbHViLmM9MjU5Nz1ib29sIHNsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICp4LCBib29sIGluaXQsXG4tLVxubW0vc2x1Yi5jLTI2MjUtXG5tbS9zbHViLmM6MjYyNjojaWZkZWYgQ09ORklHX1NMVUJfUkNVX0RFQlVHXG5tbS9zbHViLmMtMjYyNy1cdGlmIChzdGlsbF9hY2Nlc3NpYmxlKSB7XG4tLVxubW0vc2x1Yi5jLTI2NDUtXHR9XG5tbS9zbHViLmM6MjY0NjojZW5kaWYgLyogQ09ORklHX1NMVUJfUkNVX0RFQlVHICovXG5tbS9zbHViLmMtMjY0Ny1cbi0tXG5tbS9zbHViLmM9MzU0OT1zdGF0aWMgdm9pZCAqYWxsb2Nfc2luZ2xlX2Zyb21fcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMzU1NS1cbm1tL3NsdWIuYzozNTU2OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTM1NTctXHRpZiAocy1cdTAwM2VmbGFncyBcdTAwMjYgU0xBQl9DT05TSVNURU5DWV9DSEVDS1MpIHtcbi0tXG5tbS9zbHViLmM9MzgwMD1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fcGFydGlhbF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0zODI4LVxubW0vc2x1Yi5jOjM4Mjk6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcbm1tL3NsdWIuYy0zODMwLVx0XHRcdG9iamVjdCA9IGFsbG9jX3NpbmdsZV9mcm9tX3BhcnRpYWwocywgbiwgc2xhYixcbi0tXG5tbS9zbHViLmM9NDE0Nj1zdGF0aWMgaW50IHNsdWJfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSlcbi0tXG5tbS9zbHViLmMtNDE1OC1cbm1tL3NsdWIuYzo0MTU5OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTQxNjAtc3RhdGljIGludCBjb3VudF9mcmVlKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYz00MTcxPXN0YXRpYyBpbmxpbmUgYm9vbCBmcmVlX2RlYnVnX3Byb2Nlc3Npbmcoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTQyMjYtfVxubW0vc2x1Yi5jOjQyMjc6I2VuZGlmIC8qIENPTkZJR19TTFVCX0RFQlVHICovXG5tbS9zbHViLmMtNDIyOC1cbm1tL3NsdWIuYzo0MjI5OiNpZiBkZWZpbmVkKENPTkZJR19TTFVCX0RFQlVHKSB8fCBkZWZpbmVkKFNMQUJfU1VQUE9SVFNfU1lTRlMpXG5tbS9zbHViLmMtNDIzMC1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXG4tLVxubW0vc2x1Yi5jLTQyNDItfVxubW0vc2x1Yi5jOjQyNDM6I2VuZGlmIC8qIENPTkZJR19TTFVCX0RFQlVHIHx8IFNMQUJfU1VQUE9SVFNfU1lTRlMgKi9cbm1tL3NsdWIuYy00MjQ0LVxubW0vc2x1Yi5jOjQyNDU6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNDI0Ni0jZGVmaW5lIE1BWF9QQVJUSUFMX1RPX1NDQU4gMTAwMDBcbi0tXG5tbS9zbHViLmM9NDI4ND1zbGFiX291dF9vZl9tZW1vcnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbmlkKVxuLS1cbm1tL3NsdWIuYy00MzE3LX1cbm1tL3NsdWIuYzo0MzE4OiNlbHNlIC8qIENPTkZJR19TTFVCX0RFQlVHICovXG5tbS9zbHViLmMtNDMxOS1zdGF0aWMgaW5saW5lIHZvaWRcbi0tXG5tbS9zbHViLmM9NDQzMD1zdGF0aWMgdm9pZCAqX19fc2xhYl9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLFxuLS1cbm1tL3NsdWIuYy00NDc4LVxubW0vc2x1Yi5jOjQ0Nzk6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBrbWVtX2NhY2hlX2RlYnVnKHMpKSB7XG5tbS9zbHViLmMtNDQ4MC1cdFx0b2JqZWN0ID0gYWxsb2Nfc2luZ2xlX2Zyb21fbmV3X3NsYWIocywgc2xhYiwgYWMpO1xuLS1cbm1tL3NsdWIuYz01NjA5PXN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtNTYxOS1cbm1tL3NsdWIuYzo1NjIwOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwga21lbV9jYWNoZV9kZWJ1ZyhzKSkge1xubW0vc2x1Yi5jLTU2MjEtXHRcdGZyZWVfdG9fcGFydGlhbF9saXN0KHMsIHNsYWIsIGhlYWQsIHRhaWwsIGNudCwgYWRkcik7XG4tLVxubW0vc2x1Yi5jPTYzODc9dm9pZCBzbGFiX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKmhlYWQsXG4tLVxubW0vc2x1Yi5jLTY0MDEtXG5tbS9zbHViLmM6NjQwMjojaWZkZWYgQ09ORklHX1NMVUJfUkNVX0RFQlVHXG5tbS9zbHViLmMtNjQwMy1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpXG4tLVxubW0vc2x1Yi5jLTY0MjgtfVxubW0vc2x1Yi5jOjY0Mjk6I2VuZGlmIC8qIENPTkZJR19TTFVCX1JDVV9ERUJVRyAqL1xubW0vc2x1Yi5jLTY0MzAtXG4tLVxubW0vc2x1Yi5jPTY0OTM9c3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtNjQ5Ni1cbm1tL3NsdWIuYzo2NDk3OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTY0OTgtXHQvKlxuLS1cbm1tL3NsdWIuYz02NTIyPXN0YXRpYyBzaXplX3QgX19rc2l6ZShjb25zdCB2b2lkICpvYmplY3QpXG4tLVxubW0vc2x1Yi5jLTY1MzktXG5tbS9zbHViLmM6NjU0MDojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy02NTQxLVx0c2tpcF9vcmlnX3NpemVfY2hlY2soc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBvYmplY3QpO1xuLS1cbm1tL3NsdWIuYz03MzExPXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNzMxNS1cbm1tL3NsdWIuYzo3MzE2Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwga21lbV9jYWNoZV9kZWJ1ZyhzKSkge1xubW0vc2x1Yi5jLTczMTctXHRcdGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgYWMgPSB7XG4tLVxubW0vc2x1Yi5jPTc0NDQ9c3RhdGljIHVuc2lnbmVkIGludCBzbHViX21heF9vcmRlciA9XG5tbS9zbHViLmM6NzQ0NTpcdElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgPyAxIDogUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7XG5tbS9zbHViLmMtNzQ0Ni1zdGF0aWMgdW5zaWduZWQgaW50IHNsdWJfbWluX29iamVjdHM7XG4tLVxubW0vc2x1Yi5jPTc1NTc9aW5pdF9rbWVtX2NhY2hlX25vZGUoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbilcbi0tXG5tbS9zbHViLmMtNzU2MS1cdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlcGFydGlhbCk7XG5tbS9zbHViLmM6NzU2MjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy03NTYzLVx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNm4tXHUwMDNlbnJfc2xhYnMsIDApO1xuLS1cbm1tL3NsdWIuYy03NTY4LVxubW0vc2x1Yi5jOjc1Njk6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXG5tbS9zbHViLmMtNzU3MC1zdGF0aWMgaW5saW5lIGludCBhbGxvY19rbWVtX2NhY2hlX3N0YXRzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYz03NjM4PXN0YXRpYyB2b2lkIGVhcmx5X2ttZW1fY2FjaGVfbm9kZV9hbGxvYyhpbnQgbm9kZSlcbi0tXG5tbS9zbHViLmMtNzY2MS1cbm1tL3NsdWIuYzo3NjYyOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTc2NjMtXHRpbml0X29iamVjdChrbWVtX2NhY2hlX25vZGUsIG4sIFNMVUJfUkVEX0FDVElWRSk7XG4tLVxubW0vc2x1Yi5jPTc3MDA9dm9pZCBfX2ttZW1fY2FjaGVfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtNzcwMy1cdHBjc19kZXN0cm95KHMpO1xubW0vc2x1Yi5jOjc3MDQ6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXG5tbS9zbHViLmMtNzcwNS1cdGZyZWVfcGVyY3B1KHMtXHUwMDNlY3B1X3N0YXRzKTtcbi0tXG5tbS9zbHViLmM9Nzc0OT1zdGF0aWMgdW5zaWduZWQgaW50IGNhbGN1bGF0ZV9zaGVhZl9jYXBhY2l0eShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtNzc1Ni1cbm1tL3NsdWIuYzo3NzU3Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwgcy1cdTAwM2VmbGFncyBcdTAwMjYgU0xBQl9ERUJVR19GTEFHUylcbm1tL3NsdWIuYy03NzU4LVx0XHRyZXR1cm4gMDtcbi0tXG5tbS9zbHViLmM9NzgwMD1zdGF0aWMgaW50IGNhbGN1bGF0ZV9zaXplcyhzdHJ1Y3Qga21lbV9jYWNoZV9hcmdzICphcmdzLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtNzgxMy1cbm1tL3NsdWIuYzo3ODE0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTc4MTUtXHQvKlxuLS1cbm1tL3NsdWIuYy03ODc2LVxubW0vc2x1Yi5jOjc4Nzc6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNzg3OC1cdGlmIChmbGFncyBcdTAwMjYgU0xBQl9TVE9SRV9VU0VSKSB7XG4tLVxubW0vc2x1Yi5jLTc4OTEtXHRrYXNhbl9jYWNoZV9jcmVhdGUocywgXHUwMDI2c2l6ZSwgXHUwMDI2cy1cdTAwM2VmbGFncyk7XG5tbS9zbHViLmM6Nzg5MjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy03ODkzLVx0aWYgKGZsYWdzIFx1MDAyNiBTTEFCX1JFRF9aT05FKSB7XG4tLVxubW0vc2x1Yi5jPTc5NTY9c3RhdGljIHZvaWQgbGlzdF9zbGFiX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxubW0vc2x1Yi5jLTc5NTcte1xubW0vc2x1Yi5jOjc5NTg6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNzk1OS1cdHZvaWQgKmFkZHIgPSBzbGFiX2FkZHJlc3Moc2xhYik7XG4tLVxubW0vc2x1Yi5jPTgwNTE9dm9pZCBfX2ttZW1fb2JqX2luZm8oc3RydWN0IGttZW1fb2JqX2luZm8gKmtwcCwgdm9pZCAqb2JqZWN0LCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtODA2NS1cdG9ianAwID0ga2FzYW5fcmVzZXRfdGFnKG9iamVjdCk7XG5tbS9zbHViLmM6ODA2NjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy04MDY3LVx0b2JqcCA9IHJlc3RvcmVfcmVkX2xlZnQocywgb2JqcDApO1xuLS1cbm1tL3NsdWIuYy04MDc4LVx0XHRyZXR1cm47XG5tbS9zbHViLmM6ODA3OTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy04MDgwLVx0b2JqcCA9IGZpeHVwX3JlZF9sZWZ0KHMsIG9ianApO1xuLS1cbm1tL3NsdWIuYz04NDI0PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqIF9faW5pdCBib290c3RyYXAoc3RydWN0IGttZW1fY2FjaGUgKnN0YXRpY19jYWNoZSlcbi0tXG5tbS9zbHViLmMtODQzNy1cbm1tL3NsdWIuYzo4NDM4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTg0MzktXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXHUwMDI2bi1cdTAwM2VmdWxsLCBzbGFiX2xpc3QpXG4tLVxubW0vc2x1Yi5jPTg1OTM9aW50IGRvX2ttZW1fY2FjaGVfY3JlYXRlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbm1tL3NsdWIuYy04NjYwLVxubW0vc2x1Yi5jOjg2NjE6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXG5tbS9zbHViLmMtODY2Mi1cdGlmICghYWxsb2Nfa21lbV9jYWNoZV9zdGF0cyhzKSlcbi0tXG5tbS9zbHViLmM9ODY5OD1zdGF0aWMgaW50IGNvdW50X3RvdGFsKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy04NzAzLVxubW0vc2x1Yi5jOjg3MDQ6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtODcwNS1zdGF0aWMgdm9pZCB2YWxpZGF0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmM9ODkzNj1zdGF0aWMgdm9pZCBwcm9jZXNzX3NsYWIoc3RydWN0IGxvY190cmFjayAqdCwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTg5NTItI2VuZGlmICAvKiBDT05GSUdfREVCVUdfRlMgICAqL1xubW0vc2x1Yi5jOjg5NTM6I2VuZGlmXHQvKiBDT05GSUdfU0xVQl9ERUJVRyAqL1xubW0vc2x1Yi5jLTg5NTQtXG4tLVxubW0vc2x1Yi5jPTg5Njg9c3RhdGljIHNzaXplX3Qgc2hvd19zbGFiX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTg5OTEtXG5tbS9zbHViLmM6ODk5MjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy04OTkzLVx0aWYgKGZsYWdzIFx1MDAyNiBTT19BTEwpIHtcbi0tXG5tbS9zbHViLmM9OTIwMT1TTEFCX0FUVFJfUk8oZGVzdHJveV9ieV9yY3UpO1xubW0vc2x1Yi5jLTkyMDItXG5tbS9zbHViLmM6OTIwMzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy05MjA0LXN0YXRpYyBzc2l6ZV90IHNsYWJzX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1Zilcbi0tXG5tbS9zbHViLmM9OTI3Mj1TTEFCX0FUVFIodmFsaWRhdGUpO1xubW0vc2x1Yi5jLTkyNzMtXG5tbS9zbHViLmM6OTI3NDojZW5kaWYgLyogQ09ORklHX1NMVUJfREVCVUcgKi9cbm1tL3NsdWIuYy05Mjc1LVxuLS1cbm1tL3NsdWIuYz05MzM2PVNMQUJfQVRUUihyZW1vdGVfbm9kZV9kZWZyYWdfcmF0aW8pO1xuLS1cbm1tL3NsdWIuYy05MzM4LVxubW0vc2x1Yi5jOjkzMzk6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXG5tbS9zbHViLmMtOTM0MC1zdGF0aWMgaW50IHNob3dfc3RhdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmLCBlbnVtIHN0YXRfaXRlbSBzaSlcbi0tXG5tbS9zbHViLmM9OTQyMD1TVEFUX0FUVFIoU0hFQUZfUkVUVVJOX1NMT1csIHNoZWFmX3JldHVybl9zbG93KTtcbm1tL3NsdWIuYzo5NDIxOiNlbmRpZlx0LyogQ09ORklHX1NMVUJfU1RBVFMgKi9cbm1tL3NsdWIuYy05NDIyLVxuLS1cbm1tL3NsdWIuYz05NDQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpjb25zdCBzbGFiX2F0dHJzW10gPSB7XG4tLVxubW0vc2x1Yi5jLTk0NjQtXHRcdTAwMjZzbGFic19jcHVfcGFydGlhbF9hdHRyLmF0dHIsXG5tbS9zbHViLmM6OTQ2NTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy05NDY2LVx0XHUwMDI2dG90YWxfb2JqZWN0c19hdHRyLmF0dHIsXG4tLVxubW0vc2x1Yi5jLTk0ODEtI2VuZGlmXG5tbS9zbHViLmM6OTQ4MjojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcbm1tL3NsdWIuYy05NDgzLVx0XHUwMDI2YWxsb2NfZmFzdHBhdGhfYXR0ci5hdHRyLFxuLS1cbm1tL3NsdWIuYz05NzYyPWxhdGVfaW5pdGNhbGwoc2xhYl9zeXNmc19pbml0KTtcbi0tXG5tbS9zbHViLmMtOTc2NC1cbm1tL3NsdWIuYzo5NzY1OiNpZiBkZWZpbmVkKENPTkZJR19TTFVCX0RFQlVHKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpXG5tbS9zbHViLmMtOTc2Ni1zdGF0aWMgaW50IHNsYWJfZGVidWdmc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm1tL3NsdWIuYz05OTcxPV9faW5pdGNhbGwoc2xhYl9kZWJ1Z2ZzX2luaXQpO1xuLS1cbm1tL3NsdWIuYy05OTc1LSAqL1xubW0vc2x1Yi5jOjk5NzY6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtOTk3Ny12b2lkIGdldF9zbGFiaW5mbyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJpbmZvICpzaW5mbylcbi0tXG5tbS9zbHViLmMtOTk5Ny19XG5tbS9zbHViLmM6OTk5ODojZW5kaWYgLyogQ09ORklHX1NMVUJfREVCVUcgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3ODkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqU2hlYXZlcyBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBzbyB0aGUgJiMzNDtzaGVhdmVzJiMzNDsgZmVhdHVyZSDigJMgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHBhcnQgb2YgU0xVQiwgbm8gcXVlc3Rpb24uIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgKnNwZWNpZmljKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgZGVkaWNhdGVkIGp1c3QgdG8gc2hlYXZlcz8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBTTFVCIGNvbmZpZ3VyYXRpb24gZG9jcy4gSSBrbm93IHRoZSBiYXNlIHBhcmFtZXRlcnMsIG9mIGNvdXJzZSwgYnV0IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZ3JhbnVsYXIgY29udHJvbHPigKYgYW55dGhpbmcgbGlrZSBzZXBhcmF0ZSBzbGFiIGNhY2hlcywgZGVkaWNhdGVkIGFsbG9jYXRvcnMsIHBlcmhhcHMgZXZlbiBzb21ldGhpbmcgZmFuY2llciwgbGlrZSBwZXItQ1BVIG9yIE5VTUEtYXdhcmUgc2hlYWYgYWxsb2NhdGlvbiBzdHJhdGVnaWVzPyBMZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJIHN1c3BlY3Qgd2Ugd2lsbCBmaW5kIHNwZWNpZmljIGNvbmZpZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hlYWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBTTFVCIGFuZCBTaGVhdmVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGBtbS9zbHViLmNgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhlIGBDT05GSUdfU0xVQl9USU5ZYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gUmlnaHQsIGl0IHNlZW1zIHNoZWF2ZXMgYXJlIGRpc2FibGVkIHdoZW4gYENPTkZJR19TTFVCX1RJTllgIGlzIGVuYWJsZWQuIFRoZSBjb2RlIHNuaXBwZXQgY29uZmlybXMgaXQ6CgpgYGBjCnN0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY3VsYXRlX3NoZWFmX2NhcGFjaXR5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCAuLi4pCnsKCWlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IHMtJmd0O2ZsYWdzICZhbXA7IFNMQUJfREVCVUdfRkxBR1MpCgkJcmV0dXJuIDA7CmBgYAoKVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBjb25jbHVzaW9uIGlzIHRoYXQgd2UgKnNob3VsZG4mIzM5O3QqIGhhdmUgYFNMVUJfVElOWWAgZW5hYmxlZCBpZiB3ZSB3YW50IHNoZWF2ZXMuIFdlIHNob3VsZCBiZSB1c2luZyBgU0xVQmAsIHRoZSBkZWZhdWx0IGFsbG9jYXRvci4gQXJlIHRoZXJlIGFueSBvdGhlciBwb3RlbnRpYWwgY29uZmlnIG9wdGlvbnMgYXQgcGxheSBoZXJlPwoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZS1leGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAuIFRoZSBwcmV2aW91cyBzZWFyY2ggc2hvd2VkIGl0JiMzOTtzIHVzZWQgaW4gYGxpYi9tYXBsZV90cmVlLmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguY2AuIFdhaXQsIGBsaWIvbWFwbGVfdHJlZS5jYCBpcyB0aGUgb25lIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFNvIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhhdCBmaWxlIHRvIHNlZSBpZiB0aGUgdXNlIG9mIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAgaXMgY29uZGl0aW9uYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210X3JldHVybl9zaGVhZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9tYXBsZV90cmVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL21hcGxlX3RyZWUuYz0xNDI9c3RhdGljIGlubGluZSB2b2lkIG10X2ZyZWVfYnVsayhzaXplX3Qgc2l6ZSwgdm9pZCBfX3JjdSAqKm5vZGVzKVxuLS1cbmxpYi9tYXBsZV90cmVlLmMtMTQ2LVxubGliL21hcGxlX3RyZWUuYzoxNDc6c3RhdGljIHZvaWQgbXRfcmV0dXJuX3NoZWFmKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbmxpYi9tYXBsZV90cmVlLmMtMTQ4LXtcbi0tXG5saWIvbWFwbGVfdHJlZS5jPTExMzE9c3RhdGljIGlubGluZSB2b2lkIG1hc19lbXB0eV9ub2RlcyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTExMzQtXHRpZiAobWFzLVx1MDAzZXNoZWFmKSB7XG5saWIvbWFwbGVfdHJlZS5jOjExMzU6XHRcdG10X3JldHVybl9zaGVhZihtYXMtXHUwMDNlc2hlYWYpO1xubGliL21hcGxlX3RyZWUuYy0xMTM2LVx0XHRtYXMtXHUwMDNlc2hlYWYgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc4OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBNYXBsZSBUcmVlIEttZW0gQ2FjaGUgUmV0dXJuKioKCk9rYXksIHNvIHRoZSBNYXBsZSB0cmVlLiBUaGF0JiMzOTtzIGEgKmNydWNpYWwqIGRhdGEgc3RydWN0dXJlIGluIHRoZSBrZXJuZWwsIHJpZ2h0PyBVc2VkIGFsbCBvdmVyIHRoZSBwbGFjZSwgVk1BIHRyYWNraW5nIGJlaW5nIGp1c3Qgb25lIGV4YW1wbGUuIFdoaWNoIG1lYW5zIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGZ1bmN0aW9uLCBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBhbmQgZGVmaW5pdGVseSAqZnVuY3Rpb25hbCouIFRoYXQgYWxvbmUgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0JiMzOTtzIG1vZGlmeWluZyBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGJ5IGFkZGluZyBgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTmAgdG8gYHJlZmlsbF9zaGVhZmAuIFRoaXMgdHdlYWsgc3VnZ2VzdHMgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzLCBvciBtYXliZSBhIHdheSB0byBoYW5kbGUgbG93IG1lbW9yeSBjb25kaXRpb25zLCB3aGljaCBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIGZ1enppbmcgY2FuIHVuY292ZXIuCgpJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGFuZCwgY3J1Y2lhbGx5LCBgcmVmaWxsX3NoZWFmYCwgZ2l2ZW4gdGhlIHBhdGNoJiMzOTtzIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgdGhhdCBmdW5jdGlvbi4gTm8gc3BlY2lmaWMgY29uZmlnIHJlcXVpcmVtZW50cyBhcmUgbWVudGlvbmVkLCB3aGljaCBnZW5lcmFsbHkgbWVhbnMgU0xVQiwgdGhlIGRlZmF1bHQgYWxsb2NhdG9yLCBpcyBhbHJlYWR5IGluIHBsYXkuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGBTTFVCYCBpcyBhY3R1YWxseSBhIGNvbmZpZ3VyYWJsZSBvcHRpb24uIEFuZCwgYWx0aG91Z2ggTWFwbGUgVHJlZSBpcyBnZW5lcmFsbHkgZW5hYmxlZCwgdGhlcmUgbWlnaHQgYmUgYSBjb25maWcgdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZyB0byBleHBsb3JlLCBzdWNoIGFzIGBNQVBMRV9UUkVFYCDigJMgYnV0IGJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIGl0JiMzOTtzIHByb2JhYmx5IGFsd2F5cyBjb21waWxlZCBpbiBhbnl3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTFVCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTE2Mj1tZW51IFwmIzM0O1NsYWIgYWxsb2NhdG9yIG9wdGlvbnNcJiMzNDtcbm1tL0tjb25maWctMTYzLVxubW0vS2NvbmZpZzoxNjQ6Y29uZmlnIFNMVUJcbm1tL0tjb25maWctMTY1LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWc9MTY4PWNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcbi0tXG5tbS9LY29uZmlnLTE3Mi1cbm1tL0tjb25maWc6MTczOmNvbmZpZyBTTFVCX1RJTllcbm1tL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtDb25maWd1cmUgZm9yIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MjE3PWNvbmZpZyBTTEFCX0JVQ0tFVFNcbi0tXG5tbS9LY29uZmlnLTIzMy1cbm1tL0tjb25maWc6MjM0OmNvbmZpZyBTTFVCX1NUQVRTXG5tbS9LY29uZmlnLTIzNS1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ1NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipTTFVCIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgYXNzZXNzZWQgdGhlIHNpdHVhdGlvbi4gVGhlIGluaXRpYWwgY2x1ZSBwb2ludHMgZGlyZWN0bHkgdG8gYFNMVUJgIGJlaW5nIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIGluZGljYXRlZCBieSBgZGVmX2Jvb2wgeWAuIFRoaXMgZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gbWVudGlvbnMgcmVsYXRlZCB0byBpdC4gRXZlbiBsaXN0aW5nIGBTTFVCYCBmZWVscyByZWR1bmRhbnQgYW5kIHBvdGVudGlhbGx5IG1pc2xlYWRpbmcuCgpIb3dldmVyLCB0aGUgcHJvbXB0IGlzIGNsZWFyOiBwcmlvcml0aXplICpzcGVjaWZpYyogY29uZmlndXJhdGlvbnMgdGllZCB0byB0aGUgbW9kaWZpZWQgY29kZSBhbmQgYXZvaWQgdGhlIGdlbmVyYWwgb25lcyB3ZSYjMzk7cmUgbGlrZWx5IGFscmVhZHkgdXNpbmcuIFdpdGggdGhhdCBjb25zdHJhaW50IGluIG1pbmQsIGxpc3RpbmcgYFNMVUJgIGlzIGRlZmluaXRlbHkgb3V0LiBJdCYjMzk7cyB0b28gZ2VuZXJpYy4KClRvIGNvbmZpcm0gdGhpcyBhcHByb2FjaCBhbmQgZW5zdXJlIGFjY3VyYWN5LCBJJiMzOTtsbCBuZWVkIHRvIHJldmlzaXQgdGhlIGByZWZpbGxfc2hlYWZgIGltcGxlbWVudGF0aW9uIHdpdGhpbiBgbW0vc2x1Yi5jYC4gVGhpcyBpcyBjcnVjaWFsIHRvIHNvbGlkaWZ5IHRoYXQgbm8gb3RoZXIgc3BlY2lmaWMgYWRqdXN0bWVudHMgYXJlIHdhcnJhbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVmaWxsX3NoZWFmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0yNzkzPXJlZmlsbF9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxuLS1cbm1tL3NsdWIuYy0yNzk1LVxubW0vc2x1Yi5jOjI3OTY6c3RhdGljIGludCByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZixcbm1tL3NsdWIuYy0yNzk3LVx0XHRcdCBnZnBfdCBnZnApXG4tLVxubW0vc2x1Yi5jPTQ2MTE9X19wY3NfcmVwbGFjZV9lbXB0eV9tYWluKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzLFxuLS1cbm1tL3NsdWIuYy00NjcwLVxubW0vc2x1Yi5jOjQ2NzE6XHRpZiAocmVmaWxsX3NoZWFmKHMsIGVtcHR5LCBnZnAgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOKSkge1xubW0vc2x1Yi5jLTQ2NzItXHRcdC8qXG4tLVxubW0vc2x1Yi5jPTQ5NzE9RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX25vZGVfbm9wcm9mKTtcbm1tL3NsdWIuYy00OTcyLVxubW0vc2x1Yi5jOjQ5NzM6c3RhdGljIGludCBfX3ByZWZpbGxfc2hlYWZfcGZtZW1hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy00OTc0LVx0XHRcdFx0ICAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLCBnZnBfdCBnZnApXG4tLVxubW0vc2x1Yi5jLTQ5ODItXG5tbS9zbHViLmM6NDk4MzpcdHJldCA9IHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwX25vbWVtYWxsb2MpO1xubW0vc2x1Yi5jLTQ5ODQtXG4tLVxubW0vc2x1Yi5jLTQ5OTEtXHQgKi9cbm1tL3NsdWIuYzo0OTkyOlx0cmV0ID0gcmVmaWxsX3NoZWFmKHMsIHNoZWFmLCBnZnApO1xubW0vc2x1Yi5jLTQ5OTMtXHRzaGVhZi1cdTAwM2VwZm1lbWFsbG9jID0gdHJ1ZTtcbi0tXG5tbS9zbHViLmM9NTAwNz1zdHJ1Y3Qgc2xhYl9zaGVhZiAqXG5tbS9zbHViLmM6NTAwODprbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IHNpemUpXG5tbS9zbHViLmMtNTAwOS17XG4tLVxubW0vc2x1Yi5jLTUwNzAtXHRcdGlmIChzaGVhZi1cdTAwM2VzaXplIFx1MDAzYyBzaXplIFx1MDAyNlx1MDAyNlxubW0vc2x1Yi5jOjUwNzE6XHRcdCAgICBfX3ByZWZpbGxfc2hlYWZfcGZtZW1hbGxvYyhzLCBzaGVhZiwgZ2ZwKSkge1xubW0vc2x1Yi5jLTUwNzItXHRcdFx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHNoZWFmKTtcbi0tXG5tbS9zbHViLmMtNTA4MS0vKlxubW0vc2x1Yi5jOjUwODI6ICogVXNlIHRoaXMgdG8gcmV0dXJuIGEgc2hlYWYgb2J0YWluZWQgYnkga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKClcbm1tL3NsdWIuYy01MDgzLSAqXG4tLVxubW0vc2x1Yi5jPTUwOTE9dm9pZCBrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3NsdWIuYy01MTI1LVx0aWYgKCFiYXJuIHx8IGRhdGFfcmFjZShiYXJuLVx1MDAzZW5yX2Z1bGwpIFx1MDAzZT0gTUFYX0ZVTExfU0hFQVZFUyB8fFxubW0vc2x1Yi5jOjUxMjY6XHQgICAgcmVmaWxsX3NoZWFmKHMsIHNoZWFmLCBnZnAgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOKSkge1xubW0vc2x1Yi5jLTUxMjctXHRcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzaGVhZik7XG4tLVxubW0vc2x1Yi5jLTUxMzYtLypcbm1tL3NsdWIuYzo1MTM3OiAqIFJlZmlsbCBhIHNoZWFmIHByZXZpb3VzbHkgcmV0dXJuZWQgYnkga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmIHRvIGF0IGxlYXN0XG5tbS9zbHViLmMtNTEzOC0gKiB0aGUgZ2l2ZW4gc2l6ZS5cbi0tXG5tbS9zbHViLmMtNTE0OC0gKi9cbm1tL3NsdWIuYzo1MTQ5OmludCBrbWVtX2NhY2hlX3JlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxubW0vc2x1Yi5jLTUxNTAtXHRcdFx0ICAgIHN0cnVjdCBzbGFiX3NoZWFmICoqc2hlYWZwLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbi0tXG5tbS9zbHViLmMtNTE1NS1cdCAqIFRPRE86IGRvIHdlIHdhbnQgdG8gc3VwcG9ydCAqc2hlYWYgPT0gTlVMTCB0byBiZSBlcXVpdmFsZW50IG9mXG5tbS9zbHViLmM6NTE1NjpcdCAqIGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZigpID9cbm1tL3NsdWIuYy01MTU3LVx0ICovXG4tLVxubW0vc2x1Yi5jLTUxNjYtXHRcdGlmIChsaWtlbHkoc2hlYWYtXHUwMDNlY2FwYWNpdHkgPT0gcy1cdTAwM2VzaGVhZl9jYXBhY2l0eSkpXG5tbS9zbHViLmM6NTE2NzpcdFx0XHRyZXR1cm4gX19wcmVmaWxsX3NoZWFmX3BmbWVtYWxsb2Mocywgc2hlYWYsIGdmcCk7XG5tbS9zbHViLmMtNTE2OC1cbi0tXG5tbS9zbHViLmMtNTE4MS1cdCAqL1xubW0vc2x1Yi5jOjUxODI6XHRzaGVhZiA9IGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihzLCBnZnAsIHNpemUpO1xubW0vc2x1Yi5jLTUxODMtXHRpZiAoIXNoZWFmKVxuLS1cbm1tL3NsdWIuYy01MTkxLS8qXG5tbS9zbHViLmM6NTE5MjogKiBBbGxvY2F0ZSBmcm9tIGEgc2hlYWYgb2J0YWluZWQgYnkga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKClcbm1tL3NsdWIuYy01MTkzLSAqXG4tLVxubW0vc2x1Yi5jPTc3NDk9c3RhdGljIHVuc2lnbmVkIGludCBjYWxjdWxhdGVfc2hlYWZfY2FwYWNpdHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTc3ODktXHQgKiBSZXNwZWN0IGFuIGV4cGxpY2l0IHJlcXVlc3QgZm9yIGNhcGFjaXR5IHRoYXQmIzM5O3MgdHlwaWNhbGx5IG1vdGl2YXRlZCBieVxubW0vc2x1Yi5jOjc3OTA6XHQgKiBleHBlY3RlZCBtYXhpbXVtIHNpemUgb2Yga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKCkgdG8gbm90IGVuZCB1cFxubW0vc2x1Yi5jLTc3OTEtXHQgKiB1c2luZyBsb3ctcGVyZm9ybWFuY2Ugb3ZlcnNpemUgc2hlYXZlc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE1OAoJCQkJCQkJb3V0cHV0OiAxMDAKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAsIGFuZCB0aGUga2V5IGhlcmUgaXMgdGhlIGFkZGl0aW9uIG9mIGBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOYCB0byB0aGUgY2FsbCB0byBgcmVmaWxsX3NoZWFmYC4gVGhpcyBpcyBhIGNsZWFyLCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgU0xVQiBhbGxvY2F0b3IuIE15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBpbXBhY3Qgb2YgdGhlc2UgZmxhZ3Mgd2l0aGluIHRoZSBgcmVmaWxsX3NoZWFmYCBjb250ZXh0LiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHByZXZlbnRpbmcgdGhlIHN5c3RlbSBmcm9tIGRpcHBpbmcgaW50byBpdHMgcmVzZXJ2ZXMgb3IgZW1pdHRpbmcgd2FybmluZ3Mgd2hlbiBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgYSByZXR1cm5lZCBzaGVhZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgc3BlY2lmaWMgY2hhbmdlIGlzIGJlaW5nIGludHJvZHVjZWQgaGVyZSwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgZm9yIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSBhcm91bmQgaG93IHdlIGFyZSBnb2luZyB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24uIFRoZSBgcmVmaWxsX3NoZWFmYCBmdW5jdGlvbiBpcyBjcml0aWNhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ttZW1fY2FjaGVfcmV0dXJuX3NoZWFmJiMzNDssCiAgICAmIzM0O3JlZmlsbF9zaGVhZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0xVQiBhbGxvY2F0b3IgdG8gcHJldmVudCBgcmVmaWxsX3NoZWFmYCBmcm9tIHVzaW5nIG1lbW9yeSByZXNlcnZlcyBvciB3YXJuaW5nIG9uIGFsbG9jYXRpb24gZmFpbHVyZSB3aGVuIHJldHVybmluZyBhIHNoZWFmLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrbWVtX2NhY2hlX3JldHVybl9zaGVhZiYjMzQ7LAogICAgJiMzNDtyZWZpbGxfc2hlYWYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNMVUIgYWxsb2NhdG9yIHRvIHByZXZlbnQgYHJlZmlsbF9zaGVhZmAgZnJvbSB1c2luZyBtZW1vcnkgcmVzZXJ2ZXMgb3Igd2FybmluZyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUgd2hlbiByZXR1cm5pbmcgYSBzaGVhZi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NTozMy43NjMzNjMxNzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkwNzA5ODkzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia21lbV9jYWNoZV9yZXR1cm5fc2hlYWZcIixcbiAgICBcInJlZmlsbF9zaGVhZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTFVCIGFsbG9jYXRvciB0byBwcmV2ZW50IGByZWZpbGxfc2hlYWZgIGZyb20gdXNpbmcgbWVtb3J5IHJlc2VydmVzIG9yIHdhcm5pbmcgb24gYWxsb2NhdGlvbiBmYWlsdXJlIHdoZW4gcmV0dXJuaW5nIGEgc2hlYWYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NTozMy43NjMzNzQyNjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTU4OTU2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQzMzM4MDVkOTJjYzY4MDFiNTUyNTIzNDVkNGIyMjAxMzAwNjg5ODdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTc6NTU6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXFxuaW5kZXggNTNiNDk3NmQzODMxOGYuLjM1N2I3NTIyYzgxNzAwIDEwMDY0NFxcbi0tLSBhL21tL3NsdWIuY1xcbisrKyBiL21tL3NsdWIuY1xcbkBAIC01MTIzLDcgKzUxMjMsNyBAQCB2b2lkIGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuIFxcdCAqIHNpbXBseSBmbHVzaCBhbmQgZnJlZSBpdC5cXG4gXFx0ICovXFxuIFxcdGlmICghYmFybiB8fCBkYXRhX3JhY2UoYmFybi1cXHUwMDNlbnJfZnVsbCkgXFx1MDAzZT0gTUFYX0ZVTExfU0hFQVZFUyB8fFxcbi1cXHQgICAgcmVmaWxsX3NoZWFmKHMsIHNoZWFmLCBnZnApKSB7XFxuK1xcdCAgICByZWZpbGxfc2hlYWYocywgc2hlYWYsIGdmcCB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1dBUk4pKSB7XFxuIFxcdFxcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzaGVhZik7XFxuIFxcdFxcdGZyZWVfZW1wdHlfc2hlYWYocywgc2hlYWYpO1xcbiBcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE3OjU1OjM0LjMxMDIwOTU4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExODUyNDEyOTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrbWVtX2NhY2hlX3JldHVybl9zaGVhZlwiLFxuICAgIFwicmVmaWxsX3NoZWFmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNMVUIgYWxsb2NhdG9yIHRvIHByZXZlbnQgYHJlZmlsbF9zaGVhZmAgZnJvbSB1c2luZyBtZW1vcnkgcmVzZXJ2ZXMgb3Igd2FybmluZyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUgd2hlbiByZXR1cm5pbmcgYSBzaGVhZi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDMzMzgwNWQ5MmNjNjgwMWI1NTI1MjM0NWQ0YjIyMDEzMDA2ODk4N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDE3OjU1OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCA1M2I0OTc2ZDM4MzE4Zi4uMzU3Yjc1MjJjODE3MDAgMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbisrKyBiL21tL3NsdWIuY1xuQEAgLTUxMjMsNyArNTEyMyw3IEBAIHZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbiBcdCAqIHNpbXBseSBmbHVzaCBhbmQgZnJlZSBpdC5cbiBcdCAqL1xuIFx0aWYgKCFiYXJuIHx8IGRhdGFfcmFjZShiYXJuLVx1MDAzZW5yX2Z1bGwpIFx1MDAzZT0gTUFYX0ZVTExfU0hFQVZFUyB8fFxuLVx0ICAgIHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwKSkge1xuK1x0ICAgIHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTikpIHtcbiBcdFx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHNoZWFmKTtcbiBcdFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZik7XG4gXHRcdHJldHVybjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE3OjU1OjM0LjMxMDIxODkwOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTkxODQ4Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNMVUIgQWxsb2NhdG9yIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYG1tL3NsdWIuY2AsIHNwZWNpZmljYWxseSB0aGUgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgcmlnaHQgdGhlcmU6IHRoZXkncmUgZmlkZGxpbmcgd2l0aCB0aGUgYGdmcGAgZmxhZ3MgcGFzc2VkIHRvIGByZWZpbGxfc2hlYWZgLiBUaGV5J3ZlIGFkZGVkIGBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOYC4gVGhpcyBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBhbGxvY2F0aW9uIGJlaGF2aW9yIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cblxuVGhpcyBpcyBTTFVCLCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIHN0YW5kYXJkIGtlcm5lbCBhbGxvY2F0b3IuIFRoZSBwYXRjaCBzZWVtcyBmdW5jdGlvbmFsbHkgc3RyYWlnaHRmb3J3YXJkLCBqdXN0IGEgY2hhbmdlIGluIHRoZSBhbGxvY2F0aW9uIGZsYWdzLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gYHJlZmlsbF9zaGVhZmAgaXMgZ2V0dGluZyBjYWxsZWQgaGVyZSwgYW5kIGl0J3MgZ2V0dGluZyB0aGVzZSBuZXcgZmxhZ3MuIEl0J3Mgb2J2aW91c2x5IGRvaW5nIGFuIGFsbG9jYXRpb24gb2Ygc29tZSBzb3J0IGlmIHRoaXMgaXMgYWZmZWN0aW5nIHRoZSBmbGFncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcmVmaWxsX3NoZWFmYCBhY3R1YWxseSAqZG9lcyogaW4gcmVsYXRpb24gdG8gYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCwgYW5kIHdoeSB0aGVzZSBmbGFncyBhcmUgaW1wb3J0YW50LiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgZm9yIGJvdGggZnVuY3Rpb25zIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTc6NTU6NDQuNTAyMDcxMzgyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5OTc2MDY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbWVtX2NhY2hlX3JldHVybl9zaGVhZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTUwMDg9a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxubW0vc2x1Yi5jLTUwOTAtICovXFxubW0vc2x1Yi5jOjUwOTE6dm9pZCBrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxcbm1tL3NsdWIuYy01MDkyLVxcdFxcdFxcdCAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbi0tXFxubW0vc2x1Yi5jPTUxNDk9aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zbHViLmMtNTE4NS1cXG5tbS9zbHViLmM6NTE4NjpcXHRrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzLCBnZnAsICpzaGVhZnApO1xcbm1tL3NsdWIuYy01MTg3LVxcdCpzaGVhZnAgPSBzaGVhZjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTc6NTU6NDQuOTAxODQxMjkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA5OTA1OTc3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGluIGBtbS9zbHViLmNgKipcblxuT2theSwgc28gd2UncmUgZm9jdXNpbmcgb24gYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYC4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgU0xVQiBhbGxvY2F0b3IgYW5kIHByb2JhYmx5IGEgYnVsayByZXR1cm4gb3BlcmF0aW9uLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGNvcmUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHBhdGhzIHdpdGhpbiBTTFVCLiBJcyB0aGlzIHJlbGF0ZWQgdG8gcGVyLUNQVSBjYWNoZXMsIG5vZGUgY2FjaGVzLCBvciBzb21ldGhpbmcgbW9yZSBncmFudWxhcj8gSSdtIHBpY3R1cmluZyB0aGUgYGttZW1fY2FjaGVgIGRhdGEgc3RydWN0dXJlIGluIG15IGhlYWQg4oCTIHBhcnRpY3VsYXJseSB0aGUgZnJlZWxpc3QgbWFuYWdlbWVudC4gSXMgaXQgd29ya2luZyB3aXRoIHBhcnRpYWwgc2xhYnMgb3IgZnVsbHkgcG9wdWxhdGVkIG9uZXM/IElzIHRoZSBcInNoZWFmXCIganVzdCBhIG1ldGFwaG9yIGZvciBhIGdyb3VwIG9mIG9iamVjdHM/IE9yIGlzIHRoZXJlIGEgbW9yZSBzcGVjaWZpYyBtZWFuaW5nIGhlcmUgaW4gdGhlIFNMVUIgY29udGV4dD8gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjbHVlcy4gSSBzdXNwZWN0IHdl4oCZcmUgdHJ5aW5nIHRvIHJldHVybiBhIGJ1bmNoIG9mIHByZXZpb3VzbHkgYWxsb2NhdGVkIG9iamVjdHMgYmFjayB0byB0aGUgY2FjaGUuIEkgaG9wZSB0aGUgY29udGV4dCBpcyBvYnZpb3VzIGZyb20gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NjowNS44OTI0NDcyMjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAzMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NsdWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDkxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MDkxOlxcdHZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG41MDkyOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbjUwOTM6XFx0e1xcbjUwOTQ6XFx0XFx0c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcztcXG41MDk1OlxcdFxcdHN0cnVjdCBub2RlX2Jhcm4gKmJhcm47XFxuNTA5NjpcXHRcXG41MDk3OlxcdFxcdGlmICh1bmxpa2VseSgoc2hlYWYtXFx1MDAzZWNhcGFjaXR5ICE9IHMtXFx1MDAzZXNoZWFmX2NhcGFjaXR5KVxcbjUwOTg6XFx0XFx0XFx0ICAgICB8fCBzaGVhZi1cXHUwMDNlcGZtZW1hbGxvYykpIHtcXG41MDk5OlxcdFxcdFxcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzaGVhZik7XFxuNTEwMDpcXHRcXHRcXHRmcmVlX2VtcHR5X3NoZWFmKHMsIHNoZWFmKTtcXG41MTAxOlxcdFxcdFxcdHJldHVybjtcXG41MTAyOlxcdFxcdH1cXG41MTAzOlxcdFxcbjUxMDQ6XFx0XFx0bG9jYWxfbG9jayhcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spO1xcbjUxMDU6XFx0XFx0cGNzID0gdGhpc19jcHVfcHRyKHMtXFx1MDAzZWNwdV9zaGVhdmVzKTtcXG41MTA2OlxcdFxcdGJhcm4gPSBnZXRfYmFybihzKTtcXG41MTA3OlxcdFxcbjUxMDg6XFx0XFx0aWYgKCFwY3MtXFx1MDAzZXNwYXJlKSB7XFxuNTEwOTpcXHRcXHRcXHRwY3MtXFx1MDAzZXNwYXJlID0gc2hlYWY7XFxuNTExMDpcXHRcXHRcXHRzaGVhZiA9IE5VTEw7XFxuNTExMTpcXHRcXHRcXHRzdGF0KHMsIFNIRUFGX1JFVFVSTl9GQVNUKTtcXG41MTEyOlxcdFxcdH1cXG41MTEzOlxcdFxcbjUxMTQ6XFx0XFx0bG9jYWxfdW5sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxuNTExNTpcXHRcXG41MTE2OlxcdFxcdGlmICghc2hlYWYpXFxuNTExNzpcXHRcXHRcXHRyZXR1cm47XFxuNTExODpcXHRcXG41MTE5OlxcdFxcdHN0YXQocywgU0hFQUZfUkVUVVJOX1NMT1cpO1xcbjUxMjA6XFx0XFxuNTEyMTpcXHRcXHQvKlxcbjUxMjI6XFx0XFx0ICogSWYgdGhlIGJhcm4gaGFzIHRvbyBtYW55IGZ1bGwgc2hlYXZlcyBvciB3ZSBmYWlsIHRvIHJlZmlsbCB0aGUgc2hlYWYsXFxuNTEyMzpcXHRcXHQgKiBzaW1wbHkgZmx1c2ggYW5kIGZyZWUgaXQuXFxuNTEyNDpcXHRcXHQgKi9cXG41MTI1OlxcdFxcdGlmICghYmFybiB8fCBkYXRhX3JhY2UoYmFybi1cXHUwMDNlbnJfZnVsbCkgXFx1MDAzZT0gTUFYX0ZVTExfU0hFQVZFUyB8fFxcbjUxMjY6XFx0XFx0ICAgIHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTikpIHtcXG41MTI3OlxcdFxcdFxcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzaGVhZik7XFxuNTEyODpcXHRcXHRcXHRmcmVlX2VtcHR5X3NoZWFmKHMsIHNoZWFmKTtcXG41MTI5OlxcdFxcdFxcdHJldHVybjtcXG41MTMwOlxcdFxcdH1cXG41MTMxOlxcdFxcbjUxMzI6XFx0XFx0YmFybl9wdXRfZnVsbF9zaGVhZihiYXJuLCBzaGVhZik7XFxuNTEzMzpcXHRcXHRzdGF0KHMsIEJBUk5fUFVUKTtcXG41MTM0OlxcdH1cXG41MTM1OlxcdFxcbjUxMzY6XFx0LypcXG41MTM3OlxcdCAqIFJlZmlsbCBhIHNoZWFmIHByZXZpb3VzbHkgcmV0dXJuZWQgYnkga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmIHRvIGF0IGxlYXN0XFxuNTEzODpcXHQgKiB0aGUgZ2l2ZW4gc2l6ZS5cXG41MTM5OlxcdCAqXFxuNTE0MDpcXHQgKiBSZXR1cm46IDAgb24gc3VjY2Vzcy4gVGhlIHNoZWFmIHdpbGwgY29udGFpbiBhdCBsZWFzdCBAc2l6ZSBvYmplY3RzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NjowNS44OTM2NzQ1MjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjI5MDMwMzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgY2hhbmdlLCBhcyBJIHNlZSBpdDpcblxuKipTTFVCIEFsbG9jYXRvciBDaGFuZ2UgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgbW9kaWZpY2F0aW9uIGlzIGluIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBhZGRlZCBgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTmAgdG8gdGhlIGBnZnBgIGZsYWdzIHdoZW4gY2FsbGluZyBgcmVmaWxsX3NoZWFmYC4gVGhpcyBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IGByZWZpbGxfc2hlYWZgIGZyb20gcmVzb3J0aW5nIHRvIG1lbW9yeSByZXNlcnZlcyBvciBpc3N1aW5nIHdhcm5pbmdzIGlmIGFsbG9jYXRpb24gZmFpbHMsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYmVoYXZpb3JhbCBzaGlmdC5cblxuVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXRcIiB0byBtZS4gQW55IGNoYW5nZSB0aGF0IGFsdGVycyBhbGxvY2F0aW9uIGJlaGF2aW9yIGxpa2UgdGhpcyBpcyBwcmltZSB0ZXJyaXRvcnkgZm9yIHVuY292ZXJpbmcgc3VidGxlIGJ1Z3Mgb3IgZWRnZSBjYXNlcy4gYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCBhbmQgYHJlZmlsbF9zaGVhZmAgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbi5cblxuSSBzaG91bGQgdmVyaWZ5IHF1aWNrbHkgd2hldGhlciBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGlzIGV4cG9ydGVkLiBJZiBpdCdzIGludGVybmFsLCB0aGUgZnV6emluZyBhcHByb2FjaCB3aWxsIG5lZWQgdG8gYmUgZGlmZmVyZW50LCBidXQgZXZlbiBpbnRlcm5hbCBmdW5jdGlvbnMgY2FuIGJlIHRhcmdldGVkLiBMZXQncyBjb25maXJtIHRoYXQgcXVpY2tseSBiZWZvcmUgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjIwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTc6NTY6MTAuMTIyNzEwMjAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDE0Njg3NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qa21lbV9jYWNoZV9yZXR1cm5fc2hlYWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NjoxMC41MzI4NzA1MTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTkwNTI5ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBVc2FnZSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGVyZSB0aGlzIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gSXQncyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IG9wZXJhdGlvbmFsIGNvbnRleHQgYmVmb3JlIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIGVmZmVjdGl2ZW5lc3MsIGxpbWl0YXRpb25zLCBvciBwb3RlbnRpYWwgZm9yIGltcHJvdmVtZW50LiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBhZG9wdGlvbiBhbmQgYXBwbGljYXRpb24uIFNvLCBsZXQncyBzdGFydCBtYXBwaW5nIG91dCB0aGUgdGVycmFpbi4gV2hlcmUgYW0gSSBmaW5kaW5nIGl0PyBXaGF0IGlzIGl0IGJlaW5nIGVtcGxveWVkIGZvcj8gV2hhdCBhcmUgdGhlIGtleSB1c2UgY2FzZXM/IFRoaXMgaXMgdGhlIGZvdW5kYXRpb25hbCBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDYxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTc6NTY6MTguNzIzNDA0MzA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUxMzMxMjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1fY2FjaGVfcmV0dXJuX3NoZWFmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD05MTY9aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC05MTgtXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6OTE5OnZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC05MjAtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZik7XFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTE0Nz1zdGF0aWMgdm9pZCBtdF9yZXR1cm5fc2hlYWYoc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbmxpYi9tYXBsZV90cmVlLmMtMTQ4LXtcXG5saWIvbWFwbGVfdHJlZS5jOjE0OTpcXHRrbWVtX2NhY2hlX3JldHVybl9zaGVhZihtYXBsZV9ub2RlX2NhY2hlLCBHRlBfTk9XQUlULCBzaGVhZik7XFxubGliL21hcGxlX3RyZWUuYy0xNTAtfVxcbi0tXFxubW0vc2x1Yi5jPTUwMDg9a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxubW0vc2x1Yi5jLTUwOTAtICovXFxubW0vc2x1Yi5jOjUwOTE6dm9pZCBrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxcbm1tL3NsdWIuYy01MDkyLVxcdFxcdFxcdCAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbi0tXFxubW0vc2x1Yi5jPTUxNDk9aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zbHViLmMtNTE4NS1cXG5tbS9zbHViLmM6NTE4NjpcXHRrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzLCBnZnAsICpzaGVhZnApO1xcbm1tL3NsdWIuYy01MTg3LVxcdCpzaGVhZnAgPSBzaGVhZjtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oPTE5Mj1rbWVtX2NhY2hlX2FsbG9jX2Zyb21fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTE5NC1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoxOTU6dm9pZCBrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTE5Ni1cXHRcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYz0yODM9aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuLS1cXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTI5NS1cXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjI5NjpcXHRcXHRrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzLCBnZnAsICpzaGVhZnApO1xcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMjk3LVxcdFxcdCpzaGVhZnAgPSBzaGVhZjtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMzA3LVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM6MzA4OnZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTMwOS1cXHRcXHQgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NjoyMC44NzQ3NDk4MTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYwOTQ4NTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBVc2Ugb2YgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCBmdW5jdGlvbiBpcyBzaG93aW5nIHVwIGluIGBsaWIvbWFwbGVfdHJlZS5jYCBhbmQgYG1tL3NsdWIuY2AuIEludGVyZXN0aW5nLiBUaGUgbWVudGlvbiBpbiBgbW0vc2x1Yi5jYCBpcyB0aGUga2V5IOKAkyBhaCwgd2FpdCBhIG1pbnV0ZSwgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCBpcyBhIG5ldyBhZGRpdGlvbiB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBBbmQgdGhlIG5hbWUgXCJzaGVhZlwiIHN1Z2dlc3RzIHRoaXMgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBwZXItQ1BVIGNhY2hpbmcsIHJpZ2h0PyBMaWtlbHkgYSBuZXcgaW1wbGVtZW50YXRpb24gb3Igb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gdGhvc2Ugc3RydWN0dXJlcy4gSXQncyB0aW1lIHRvIGRpZyBkZWVwZXIsIHRoaXMgd2FycmFudHMgYSBjb25maWcgZXhwbG9yYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgZW5hYmxpbmcgY29uZGl0aW9ucy4gSSBuZWVkIHRvIHNlZSB3aGljaCBjb25maWd1cmF0aW9ucyB0cmlnZ2VyIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzIGZvciB0aGUga2VybmVsLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25maWcgb3B0aW9ucyBkaXJlY3RseSB0aWVkIHRvIHRoZSBjb25jZXB0IG9mIFwic2hlYXZlc1wiIG9yIGFueXRoaW5nIHRoYXQgc291bmRzIHJlbGF0ZWQuIFRoYXQnbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBTTFVCLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTc6NTY6MjguNDg0MjM5ODcyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjc4MzkwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfU0xVQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTE5Mz1lbnVtIHNsYWJfZmxhZ3Mge1xcbi0tXFxubW0vc2x1Yi5jLTE5OC1cXG5tbS9zbHViLmM6MTk5OiNpZm5kZWYgQ09ORklHX1NMVUJfVElOWVxcbm1tL3NsdWIuYy0yMDAtI2RlZmluZSBfX2Zhc3RwYXRoX2lubGluZSBfX2Fsd2F5c19pbmxpbmVcXG4tLVxcbm1tL3NsdWIuYy0yMDQtXFxubW0vc2x1Yi5jOjIwNTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmM6MjA2OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR19PTlxcbm1tL3NsdWIuYy0yMDctREVGSU5FX1NUQVRJQ19LRVlfVFJVRShzbHViX2RlYnVnX2VuYWJsZWQpO1xcbi0tXFxubW0vc2x1Yi5jPTIwOT1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzbHViX2RlYnVnX2VuYWJsZWQpO1xcbm1tL3NsdWIuYy0yMTAtI2VuZGlmXFxubW0vc2x1Yi5jOjIxMTojZW5kaWZcXHRcXHQvKiBDT05GSUdfU0xVQl9ERUJVRyAqL1xcbm1tL3NsdWIuYy0yMTItXFxuLS1cXG5tbS9zbHViLmM9MjQ5PXZvaWQgKmZpeHVwX3JlZF9sZWZ0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpwKVxcbi0tXFxubW0vc2x1Yi5jLTI2Ny1cXG5tbS9zbHViLmM6MjY4OiNpZm5kZWYgQ09ORklHX1NMVUJfVElOWVxcbm1tL3NsdWIuYy0yNjktLypcXG4tLVxcbm1tL3NsdWIuYz0zMzg9c3RhdGljIGlubGluZSBpbnQgc3lzZnNfc2xhYl9hZGQoc3RydWN0IGttZW1fY2FjaGUgKnMpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbm1tL3NsdWIuYy0zNDAtXFxubW0vc2x1Yi5jOjM0MTojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1NMVUJfREVCVUcpXFxubW0vc2x1Yi5jLTM0Mi1zdGF0aWMgdm9pZCBkZWJ1Z2ZzX3NsYWJfYWRkKHN0cnVjdCBrbWVtX2NhY2hlICopO1xcbi0tXFxubW0vc2x1Yi5jPTM1Mj1lbnVtIHN0YXRfaXRlbSB7XFxuLS1cXG5tbS9zbHViLmMtMzgxLVxcbm1tL3NsdWIuYzozODI6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTM4My1zdHJ1Y3Qga21lbV9jYWNoZV9zdGF0cyB7XFxuLS1cXG5tbS9zbHViLmM9Mzg4PXN0YXRpYyBpbmxpbmUgdm9pZCBzdGF0KGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLCBlbnVtIHN0YXRfaXRlbSBzaSlcXG5tbS9zbHViLmMtMzg5LXtcXG5tbS9zbHViLmM6MzkwOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xcbm1tL3NsdWIuYy0zOTEtXFx0LypcXG4tLVxcbm1tL3NsdWIuYz00MDA9dm9pZCBzdGF0X2FkZChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZW51bSBzdGF0X2l0ZW0gc2ksIGludCB2KVxcbm1tL3NsdWIuYy00MDEte1xcbm1tL3NsdWIuYzo0MDI6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTQwMy1cXHRyYXdfY3B1X2FkZChzLVxcdTAwM2VjcHVfc3RhdHMtXFx1MDAzZXN0YXRbc2ldLCB2KTtcXG4tLVxcbm1tL3NsdWIuYz00NDQ9c3RydWN0IGttZW1fY2FjaGVfbm9kZSB7XFxuLS1cXG5tbS9zbHViLmMtNDQ3LVxcdHN0cnVjdCBsaXN0X2hlYWQgcGFydGlhbDtcXG5tbS9zbHViLmM6NDQ4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy00NDktXFx0YXRvbWljX2xvbmdfdCBucl9zbGFicztcXG4tLVxcbm1tL3NsdWIuYz05MDY9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfb2Zmc2V0X2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy05MTEtXFxubW0vc2x1Yi5jOjkxMjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtOTEzLVxcbi0tXFxubW0vc2x1Yi5jPTk4MT1zdGF0aWMgaW5saW5lIHZvaWQgKnJlc3RvcmVfcmVkX2xlZnQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKnApXFxuLS1cXG5tbS9zbHViLmMtOTkxLSAqL1xcbm1tL3NsdWIuYzo5OTI6I2lmIGRlZmluZWQoQ09ORklHX1NMVUJfREVCVUdfT04pXFxubW0vc2x1Yi5jLTk5My1zdGF0aWMgc2xhYl9mbGFnc190IHNsdWJfZGVidWcgPSBERUJVR19ERUZBVUxUX0ZMQUdTO1xcbi0tXFxubW0vc2x1Yi5jPTEzMTE9Y2hlY2tfYnl0ZXNfYW5kX3JlcG9ydChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMTM3NC0gKlxcbm1tL3NsdWIuYzoxMzc1OiAqIFtNYW5kYXRvcnkgcGFkZGluZ10gKGlmIENPTkZJR19TTFVCX0RFQlVHIFxcdTAwMjZcXHUwMDI2IFNMQUJfUkVEX1pPTkUpXFxubW0vc2x1Yi5jLTEzNzYtICogICAtIE9uZSBtYW5kYXRvcnkgZGVidWcgd29yZCB0byBndWFyYW50ZWUgYSBtaW5pbXVtIHBvaXNvbmVkIGdhcFxcbi0tXFxubW0vc2x1Yi5jPTE4ODQ9c3RhdGljIGludCBfX2luaXQgc2V0dXBfc2x1Yl9kZWJ1Zyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vc2x1Yi5jLTE5MTctXFx0ICogc2xhYl9kZWJ1ZyBzaG91bGQgYmUgdW5jaGFuZ2VkICgwIG9yIERFQlVHX0RFRkFVTFRfRkxBR1MsIGRlcGVuZGluZ1xcbm1tL3NsdWIuYzoxOTE4OlxcdCAqIG9uIENPTkZJR19TTFVCX0RFQlVHX09OKS4gV2UgY2FuIGV4dGVuZGVkIHRoYXQgdG8gbXVsdGlwbGUgbGlzdHMgYXNcXG5tbS9zbHViLmMtMTkxOS1cXHQgKiBsb25nIGFzIHRoZXJlIGlzIG5vIG9wdGlvbiBzcGVjaWZ5aW5nIGZsYWdzIHdpdGhvdXQgYSBzbGFiIGxpc3QuXFxuLS1cXG5tbS9zbHViLmM9MTk1OD1zbGFiX2ZsYWdzX3Qga21lbV9jYWNoZV9mbGFncyhzbGFiX2ZsYWdzX3QgZmxhZ3MsIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5tbS9zbHViLmMtMjAxMS19XFxubW0vc2x1Yi5jOjIwMTI6I2Vsc2UgLyogIUNPTkZJR19TTFVCX0RFQlVHICovXFxubW0vc2x1Yi5jLTIwMTMtc3RhdGljIGlubGluZSB2b2lkIHNldHVwX29iamVjdF9kZWJ1ZyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KSB7fVxcbi0tXFxubW0vc2x1Yi5jPTIwNDY9c3RhdGljIGlubGluZSB2b2lkIGRlY19zbGFic19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgbm9kZSxcXG5tbS9zbHViLmMtMjA0Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRpbnQgb2JqZWN0cykge31cXG5tbS9zbHViLmM6MjA0ODojZW5kaWYgLyogQ09ORklHX1NMVUJfREVCVUcgKi9cXG5tbS9zbHViLmMtMjA0OS1cXG4tLVxcbm1tL3NsdWIuYz0yNTU1PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jLTI1NjAtXFxubW0vc2x1Yi5jOjI1NjE6I2lmZGVmIENPTkZJR19TTFVCX1JDVV9ERUJVR1xcbm1tL3NsdWIuYy0yNTYyLXN0YXRpYyB2b2lkIHNsYWJfZnJlZV9hZnRlcl9yY3VfZGVidWcoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZCk7XFxuLS1cXG5tbS9zbHViLmM9MjU2ND1zdHJ1Y3QgcmN1X2RlbGF5ZWRfZnJlZSB7XFxuLS1cXG5tbS9zbHViLmMtMjU3NC0gKiBSZXR1cm5zIHRydWUgaWYgZnJlZWluZyBvZiB0aGUgb2JqZWN0IGNhbiBwcm9jZWVkLCBmYWxzZSBpZiBpdHMgcmV1c2VcXG5tbS9zbHViLmM6MjU3NTogKiB3YXMgZGVsYXllZCBieSBDT05GSUdfU0xVQl9SQ1VfREVCVUcgb3IgS0FTQU4gcXVhcmFudGluZSwgb3IgaXQgd2FzIHJldHVybmVkXFxubW0vc2x1Yi5jLTI1NzYtICogdG8gS0ZFTkNFLlxcbi0tXFxubW0vc2x1Yi5jPTI1OTc9Ym9vbCBzbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqeCwgYm9vbCBpbml0LFxcbi0tXFxubW0vc2x1Yi5jLTI2MjUtXFxubW0vc2x1Yi5jOjI2MjY6I2lmZGVmIENPTkZJR19TTFVCX1JDVV9ERUJVR1xcbm1tL3NsdWIuYy0yNjI3LVxcdGlmIChzdGlsbF9hY2Nlc3NpYmxlKSB7XFxuLS1cXG5tbS9zbHViLmMtMjY0NS1cXHR9XFxubW0vc2x1Yi5jOjI2NDY6I2VuZGlmIC8qIENPTkZJR19TTFVCX1JDVV9ERUJVRyAqL1xcbm1tL3NsdWIuYy0yNjQ3LVxcbi0tXFxubW0vc2x1Yi5jPTM1NDk9c3RhdGljIHZvaWQgKmFsbG9jX3NpbmdsZV9mcm9tX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMzU1NS1cXG5tbS9zbHViLmM6MzU1NjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtMzU1Ny1cXHRpZiAocy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTTEFCX0NPTlNJU1RFTkNZX0NIRUNLUykge1xcbi0tXFxubW0vc2x1Yi5jPTM4MDA9c3RhdGljIHZvaWQgKmdldF9mcm9tX3BhcnRpYWxfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy0zODI4LVxcbm1tL3NsdWIuYzozODI5OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcXG5tbS9zbHViLmMtMzgzMC1cXHRcXHRcXHRvYmplY3QgPSBhbGxvY19zaW5nbGVfZnJvbV9wYXJ0aWFsKHMsIG4sIHNsYWIsXFxuLS1cXG5tbS9zbHViLmM9NDE0Nj1zdGF0aWMgaW50IHNsdWJfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbm1tL3NsdWIuYy00MTU4LVxcbm1tL3NsdWIuYzo0MTU5OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy00MTYwLXN0YXRpYyBpbnQgY291bnRfZnJlZShzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYz00MTcxPXN0YXRpYyBpbmxpbmUgYm9vbCBmcmVlX2RlYnVnX3Byb2Nlc3Npbmcoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtNDIyNi19XFxubW0vc2x1Yi5jOjQyMjc6I2VuZGlmIC8qIENPTkZJR19TTFVCX0RFQlVHICovXFxubW0vc2x1Yi5jLTQyMjgtXFxubW0vc2x1Yi5jOjQyMjk6I2lmIGRlZmluZWQoQ09ORklHX1NMVUJfREVCVUcpIHx8IGRlZmluZWQoU0xBQl9TVVBQT1JUU19TWVNGUylcXG5tbS9zbHViLmMtNDIzMC1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXFxuLS1cXG5tbS9zbHViLmMtNDI0Mi19XFxubW0vc2x1Yi5jOjQyNDM6I2VuZGlmIC8qIENPTkZJR19TTFVCX0RFQlVHIHx8IFNMQUJfU1VQUE9SVFNfU1lTRlMgKi9cXG5tbS9zbHViLmMtNDI0NC1cXG5tbS9zbHViLmM6NDI0NTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNDI0Ni0jZGVmaW5lIE1BWF9QQVJUSUFMX1RPX1NDQU4gMTAwMDBcXG4tLVxcbm1tL3NsdWIuYz00Mjg0PXNsYWJfb3V0X29mX21lbW9yeShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBuaWQpXFxuLS1cXG5tbS9zbHViLmMtNDMxNy19XFxubW0vc2x1Yi5jOjQzMTg6I2Vsc2UgLyogQ09ORklHX1NMVUJfREVCVUcgKi9cXG5tbS9zbHViLmMtNDMxOS1zdGF0aWMgaW5saW5lIHZvaWRcXG4tLVxcbm1tL3NsdWIuYz00NDMwPXN0YXRpYyB2b2lkICpfX19zbGFiX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5tbS9zbHViLmMtNDQ3OC1cXG5tbS9zbHViLmM6NDQ3OTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBrbWVtX2NhY2hlX2RlYnVnKHMpKSB7XFxubW0vc2x1Yi5jLTQ0ODAtXFx0XFx0b2JqZWN0ID0gYWxsb2Nfc2luZ2xlX2Zyb21fbmV3X3NsYWIocywgc2xhYiwgYWMpO1xcbi0tXFxubW0vc2x1Yi5jPTU2MDk9c3RhdGljIHZvaWQgX19zbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTU2MTktXFxubW0vc2x1Yi5jOjU2MjA6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwga21lbV9jYWNoZV9kZWJ1ZyhzKSkge1xcbm1tL3NsdWIuYy01NjIxLVxcdFxcdGZyZWVfdG9fcGFydGlhbF9saXN0KHMsIHNsYWIsIGhlYWQsIHRhaWwsIGNudCwgYWRkcik7XFxuLS1cXG5tbS9zbHViLmM9NjM4Nz12b2lkIHNsYWJfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqaGVhZCxcXG4tLVxcbm1tL3NsdWIuYy02NDAxLVxcbm1tL3NsdWIuYzo2NDAyOiNpZmRlZiBDT05GSUdfU0xVQl9SQ1VfREVCVUdcXG5tbS9zbHViLmMtNjQwMy1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpXFxuLS1cXG5tbS9zbHViLmMtNjQyOC19XFxubW0vc2x1Yi5jOjY0Mjk6I2VuZGlmIC8qIENPTkZJR19TTFVCX1JDVV9ERUJVRyAqL1xcbm1tL3NsdWIuYy02NDMwLVxcbi0tXFxubW0vc2x1Yi5jPTY0OTM9c3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy02NDk2LVxcbm1tL3NsdWIuYzo2NDk3OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy02NDk4LVxcdC8qXFxuLS1cXG5tbS9zbHViLmM9NjUyMj1zdGF0aWMgc2l6ZV90IF9fa3NpemUoY29uc3Qgdm9pZCAqb2JqZWN0KVxcbi0tXFxubW0vc2x1Yi5jLTY1MzktXFxubW0vc2x1Yi5jOjY1NDA6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTY1NDEtXFx0c2tpcF9vcmlnX3NpemVfY2hlY2soc2xhYi1cXHUwMDNlc2xhYl9jYWNoZSwgb2JqZWN0KTtcXG4tLVxcbm1tL3NsdWIuYz03MzExPXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy03MzE1LVxcbm1tL3NsdWIuYzo3MzE2OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcXG5tbS9zbHViLmMtNzMxNy1cXHRcXHRjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0IGFjID0ge1xcbi0tXFxubW0vc2x1Yi5jPTc0NDQ9c3RhdGljIHVuc2lnbmVkIGludCBzbHViX21heF9vcmRlciA9XFxubW0vc2x1Yi5jOjc0NDU6XFx0SVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSA/IDEgOiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUjtcXG5tbS9zbHViLmMtNzQ0Ni1zdGF0aWMgdW5zaWduZWQgaW50IHNsdWJfbWluX29iamVjdHM7XFxuLS1cXG5tbS9zbHViLmM9NzU1Nz1pbml0X2ttZW1fY2FjaGVfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxcbi0tXFxubW0vc2x1Yi5jLTc1NjEtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm4tXFx1MDAzZXBhcnRpYWwpO1xcbm1tL3NsdWIuYzo3NTYyOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03NTYzLVxcdGF0b21pY19sb25nX3NldChcXHUwMDI2bi1cXHUwMDNlbnJfc2xhYnMsIDApO1xcbi0tXFxubW0vc2x1Yi5jLTc1NjgtXFxubW0vc2x1Yi5jOjc1Njk6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTc1NzAtc3RhdGljIGlubGluZSBpbnQgYWxsb2Nfa21lbV9jYWNoZV9zdGF0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYz03NjM4PXN0YXRpYyB2b2lkIGVhcmx5X2ttZW1fY2FjaGVfbm9kZV9hbGxvYyhpbnQgbm9kZSlcXG4tLVxcbm1tL3NsdWIuYy03NjYxLVxcbm1tL3NsdWIuYzo3NjYyOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03NjYzLVxcdGluaXRfb2JqZWN0KGttZW1fY2FjaGVfbm9kZSwgbiwgU0xVQl9SRURfQUNUSVZFKTtcXG4tLVxcbm1tL3NsdWIuYz03NzAwPXZvaWQgX19rbWVtX2NhY2hlX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtNzcwMy1cXHRwY3NfZGVzdHJveShzKTtcXG5tbS9zbHViLmM6NzcwNDojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcXG5tbS9zbHViLmMtNzcwNS1cXHRmcmVlX3BlcmNwdShzLVxcdTAwM2VjcHVfc3RhdHMpO1xcbi0tXFxubW0vc2x1Yi5jPTc3NDk9c3RhdGljIHVuc2lnbmVkIGludCBjYWxjdWxhdGVfc2hlYWZfY2FwYWNpdHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtNzc1Ni1cXG5tbS9zbHViLmM6Nzc1NzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBzLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNMQUJfREVCVUdfRkxBR1MpXFxubW0vc2x1Yi5jLTc3NTgtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9zbHViLmM9NzgwMD1zdGF0aWMgaW50IGNhbGN1bGF0ZV9zaXplcyhzdHJ1Y3Qga21lbV9jYWNoZV9hcmdzICphcmdzLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy03ODEzLVxcbm1tL3NsdWIuYzo3ODE0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03ODE1LVxcdC8qXFxuLS1cXG5tbS9zbHViLmMtNzg3Ni1cXG5tbS9zbHViLmM6Nzg3NzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNzg3OC1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBTTEFCX1NUT1JFX1VTRVIpIHtcXG4tLVxcbm1tL3NsdWIuYy03ODkxLVxcdGthc2FuX2NhY2hlX2NyZWF0ZShzLCBcXHUwMDI2c2l6ZSwgXFx1MDAyNnMtXFx1MDAzZWZsYWdzKTtcXG5tbS9zbHViLmM6Nzg5MjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNzg5My1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBTTEFCX1JFRF9aT05FKSB7XFxuLS1cXG5tbS9zbHViLmM9Nzk1Nj1zdGF0aWMgdm9pZCBsaXN0X3NsYWJfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxubW0vc2x1Yi5jLTc5NTcte1xcbm1tL3NsdWIuYzo3OTU4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03OTU5LVxcdHZvaWQgKmFkZHIgPSBzbGFiX2FkZHJlc3Moc2xhYik7XFxuLS1cXG5tbS9zbHViLmM9ODA1MT12b2lkIF9fa21lbV9vYmpfaW5mbyhzdHJ1Y3Qga21lbV9vYmpfaW5mbyAqa3BwLCB2b2lkICpvYmplY3QsIHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTgwNjUtXFx0b2JqcDAgPSBrYXNhbl9yZXNldF90YWcob2JqZWN0KTtcXG5tbS9zbHViLmM6ODA2NjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtODA2Ny1cXHRvYmpwID0gcmVzdG9yZV9yZWRfbGVmdChzLCBvYmpwMCk7XFxuLS1cXG5tbS9zbHViLmMtODA3OC1cXHRcXHRyZXR1cm47XFxubW0vc2x1Yi5jOjgwNzk6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTgwODAtXFx0b2JqcCA9IGZpeHVwX3JlZF9sZWZ0KHMsIG9ianApO1xcbi0tXFxubW0vc2x1Yi5jPTg0MjQ9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICogX19pbml0IGJvb3RzdHJhcChzdHJ1Y3Qga21lbV9jYWNoZSAqc3RhdGljX2NhY2hlKVxcbi0tXFxubW0vc2x1Yi5jLTg0MzctXFxubW0vc2x1Yi5jOjg0Mzg6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTg0MzktXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcXHUwMDI2bi1cXHUwMDNlZnVsbCwgc2xhYl9saXN0KVxcbi0tXFxubW0vc2x1Yi5jPTg1OTM9aW50IGRvX2ttZW1fY2FjaGVfY3JlYXRlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubW0vc2x1Yi5jLTg2NjAtXFxubW0vc2x1Yi5jOjg2NjE6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTg2NjItXFx0aWYgKCFhbGxvY19rbWVtX2NhY2hlX3N0YXRzKHMpKVxcbi0tXFxubW0vc2x1Yi5jPTg2OTg9c3RhdGljIGludCBjb3VudF90b3RhbChzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy04NzAzLVxcbm1tL3NsdWIuYzo4NzA0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy04NzA1LXN0YXRpYyB2b2lkIHZhbGlkYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jPTg5MzY9c3RhdGljIHZvaWQgcHJvY2Vzc19zbGFiKHN0cnVjdCBsb2NfdHJhY2sgKnQsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTg5NTItI2VuZGlmICAvKiBDT05GSUdfREVCVUdfRlMgICAqL1xcbm1tL3NsdWIuYzo4OTUzOiNlbmRpZlxcdC8qIENPTkZJR19TTFVCX0RFQlVHICovXFxubW0vc2x1Yi5jLTg5NTQtXFxuLS1cXG5tbS9zbHViLmM9ODk2OD1zdGF0aWMgc3NpemVfdCBzaG93X3NsYWJfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy04OTkxLVxcbm1tL3NsdWIuYzo4OTkyOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy04OTkzLVxcdGlmIChmbGFncyBcXHUwMDI2IFNPX0FMTCkge1xcbi0tXFxubW0vc2x1Yi5jPTkyMDE9U0xBQl9BVFRSX1JPKGRlc3Ryb3lfYnlfcmN1KTtcXG5tbS9zbHViLmMtOTIwMi1cXG5tbS9zbHViLmM6OTIwMzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtOTIwNC1zdGF0aWMgc3NpemVfdCBzbGFic19zaG93KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjaGFyICpidWYpXFxuLS1cXG5tbS9zbHViLmM9OTI3Mj1TTEFCX0FUVFIodmFsaWRhdGUpO1xcbm1tL3NsdWIuYy05MjczLVxcbm1tL3NsdWIuYzo5Mjc0OiNlbmRpZiAvKiBDT05GSUdfU0xVQl9ERUJVRyAqL1xcbm1tL3NsdWIuYy05Mjc1LVxcbi0tXFxubW0vc2x1Yi5jPTkzMzY9U0xBQl9BVFRSKHJlbW90ZV9ub2RlX2RlZnJhZ19yYXRpbyk7XFxuLS1cXG5tbS9zbHViLmMtOTMzOC1cXG5tbS9zbHViLmM6OTMzOTojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcXG5tbS9zbHViLmMtOTM0MC1zdGF0aWMgaW50IHNob3dfc3RhdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmLCBlbnVtIHN0YXRfaXRlbSBzaSlcXG4tLVxcbm1tL3NsdWIuYz05NDIwPVNUQVRfQVRUUihTSEVBRl9SRVRVUk5fU0xPVywgc2hlYWZfcmV0dXJuX3Nsb3cpO1xcbm1tL3NsdWIuYzo5NDIxOiNlbmRpZlxcdC8qIENPTkZJR19TTFVCX1NUQVRTICovXFxubW0vc2x1Yi5jLTk0MjItXFxuLS1cXG5tbS9zbHViLmM9OTQ0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3Qgc2xhYl9hdHRyc1tdID0ge1xcbi0tXFxubW0vc2x1Yi5jLTk0NjQtXFx0XFx1MDAyNnNsYWJzX2NwdV9wYXJ0aWFsX2F0dHIuYXR0cixcXG5tbS9zbHViLmM6OTQ2NTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtOTQ2Ni1cXHRcXHUwMDI2dG90YWxfb2JqZWN0c19hdHRyLmF0dHIsXFxuLS1cXG5tbS9zbHViLmMtOTQ4MS0jZW5kaWZcXG5tbS9zbHViLmM6OTQ4MjojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcXG5tbS9zbHViLmMtOTQ4My1cXHRcXHUwMDI2YWxsb2NfZmFzdHBhdGhfYXR0ci5hdHRyLFxcbi0tXFxubW0vc2x1Yi5jPTk3NjI9bGF0ZV9pbml0Y2FsbChzbGFiX3N5c2ZzX2luaXQpO1xcbi0tXFxubW0vc2x1Yi5jLTk3NjQtXFxubW0vc2x1Yi5jOjk3NjU6I2lmIGRlZmluZWQoQ09ORklHX1NMVUJfREVCVUcpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKVxcbm1tL3NsdWIuYy05NzY2LXN0YXRpYyBpbnQgc2xhYl9kZWJ1Z2ZzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5tbS9zbHViLmM9OTk3MT1fX2luaXRjYWxsKHNsYWJfZGVidWdmc19pbml0KTtcXG4tLVxcbm1tL3NsdWIuYy05OTc1LSAqL1xcbm1tL3NsdWIuYzo5OTc2OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy05OTc3LXZvaWQgZ2V0X3NsYWJpbmZvKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYmluZm8gKnNpbmZvKVxcbi0tXFxubW0vc2x1Yi5jLTk5OTctfVxcbm1tL3NsdWIuYzo5OTk4OiNlbmRpZiAvKiBDT05GSUdfU0xVQl9ERUJVRyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NjoyOC41NDcwMzI2MDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4Mzc3MzQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlNoZWF2ZXMgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgXCJzaGVhdmVzXCIgZmVhdHVyZSDigJMgdGhhdCdzIGRlZmluaXRlbHkgcGFydCBvZiBTTFVCLCBubyBxdWVzdGlvbi4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWRpY2F0ZWQganVzdCB0byBzaGVhdmVzPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIFNMVUIgY29uZmlndXJhdGlvbiBkb2NzLiBJIGtub3cgdGhlIGJhc2UgcGFyYW1ldGVycywgb2YgY291cnNlLCBidXQgSSdtIHRoaW5raW5nIGFib3V0IGdyYW51bGFyIGNvbnRyb2xz4oCmIGFueXRoaW5nIGxpa2Ugc2VwYXJhdGUgc2xhYiBjYWNoZXMsIGRlZGljYXRlZCBhbGxvY2F0b3JzLCBwZXJoYXBzIGV2ZW4gc29tZXRoaW5nIGZhbmNpZXIsIGxpa2UgcGVyLUNQVSBvciBOVU1BLWF3YXJlIHNoZWFmIGFsbG9jYXRpb24gc3RyYXRlZ2llcz8gTGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJIHN1c3BlY3Qgd2Ugd2lsbCBmaW5kIHNwZWNpZmljIGNvbmZpZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzg5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTc6NTY6MzEuOTMwODExMzNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzM4NDA1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaGVhZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NjozMS45OTI1NjEzNzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg2MjQ5NjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFNMVUIgYW5kIFNoZWF2ZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGBtbS9zbHViLmNgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhlIGBDT05GSUdfU0xVQl9USU5ZYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gUmlnaHQsIGl0IHNlZW1zIHNoZWF2ZXMgYXJlIGRpc2FibGVkIHdoZW4gYENPTkZJR19TTFVCX1RJTllgIGlzIGVuYWJsZWQuIFRoZSBjb2RlIHNuaXBwZXQgY29uZmlybXMgaXQ6XG5cbmBgYGNcbnN0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY3VsYXRlX3NoZWFmX2NhcGFjaXR5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCAuLi4pXG57XG5cdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IHMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNMQUJfREVCVUdfRkxBR1MpXG5cdFx0cmV0dXJuIDA7XG5gYGBcblxuVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBjb25jbHVzaW9uIGlzIHRoYXQgd2UgKnNob3VsZG4ndCogaGF2ZSBgU0xVQl9USU5ZYCBlbmFibGVkIGlmIHdlIHdhbnQgc2hlYXZlcy4gV2Ugc2hvdWxkIGJlIHVzaW5nIGBTTFVCYCwgdGhlIGRlZmF1bHQgYWxsb2NhdG9yLiBBcmUgdGhlcmUgYW55IG90aGVyIHBvdGVudGlhbCBjb25maWcgb3B0aW9ucyBhdCBwbGF5IGhlcmU/XG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ20gZ29pbmcgdG8gcXVpY2tseSByZS1leGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAuIFRoZSBwcmV2aW91cyBzZWFyY2ggc2hvd2VkIGl0J3MgdXNlZCBpbiBgbGliL21hcGxlX3RyZWUuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jYC4gV2FpdCwgYGxpYi9tYXBsZV90cmVlLmNgIGlzIHRoZSBvbmUgdGhhdCdzIGludGVyZXN0aW5nLiBTbyBsZXQncyBkb3VibGUtY2hlY2sgdGhhdCBmaWxlIHRvIHNlZSBpZiB0aGUgdXNlIG9mIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAgaXMgY29uZGl0aW9uYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDA5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE3OjU2OjM3Ljg1NTA2MzQyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5NzI2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXRfcmV0dXJuX3NoZWFmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9tYXBsZV90cmVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL21hcGxlX3RyZWUuYz0xNDI9c3RhdGljIGlubGluZSB2b2lkIG10X2ZyZWVfYnVsayhzaXplX3Qgc2l6ZSwgdm9pZCBfX3JjdSAqKm5vZGVzKVxcbi0tXFxubGliL21hcGxlX3RyZWUuYy0xNDYtXFxubGliL21hcGxlX3RyZWUuYzoxNDc6c3RhdGljIHZvaWQgbXRfcmV0dXJuX3NoZWFmKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcXG5saWIvbWFwbGVfdHJlZS5jLTE0OC17XFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTExMzE9c3RhdGljIGlubGluZSB2b2lkIG1hc19lbXB0eV9ub2RlcyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmMtMTEzNC1cXHRpZiAobWFzLVxcdTAwM2VzaGVhZikge1xcbmxpYi9tYXBsZV90cmVlLmM6MTEzNTpcXHRcXHRtdF9yZXR1cm5fc2hlYWYobWFzLVxcdTAwM2VzaGVhZik7XFxubGliL21hcGxlX3RyZWUuYy0xMTM2LVxcdFxcdG1hcy1cXHUwMDNlc2hlYWYgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1NjozNy45MzAwNDQwNjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM0Mzg4ODI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBNYXBsZSBUcmVlIEttZW0gQ2FjaGUgUmV0dXJuKipcblxuT2theSwgc28gdGhlIE1hcGxlIHRyZWUuIFRoYXQncyBhICpjcnVjaWFsKiBkYXRhIHN0cnVjdHVyZSBpbiB0aGUga2VybmVsLCByaWdodD8gVXNlZCBhbGwgb3ZlciB0aGUgcGxhY2UsIFZNQSB0cmFja2luZyBiZWluZyBqdXN0IG9uZSBleGFtcGxlLiBXaGljaCBtZWFucyB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCBmdW5jdGlvbiwgaXMgYWJzb2x1dGVseSByZWFjaGFibGUgYW5kIGRlZmluaXRlbHkgKmZ1bmN0aW9uYWwqLiBUaGF0IGFsb25lIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0J3MgbW9kaWZ5aW5nIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmAgYnkgYWRkaW5nIGBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOYCB0byBgcmVmaWxsX3NoZWFmYC4gVGhpcyB0d2VhayBzdWdnZXN0cyBwb3RlbnRpYWwgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMsIG9yIG1heWJlIGEgd2F5IHRvIGhhbmRsZSBsb3cgbWVtb3J5IGNvbmRpdGlvbnMsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgZnV6emluZyBjYW4gdW5jb3Zlci5cblxuSSdtIGdvaW5nIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGFuZCwgY3J1Y2lhbGx5LCBgcmVmaWxsX3NoZWFmYCwgZ2l2ZW4gdGhlIHBhdGNoJ3MgZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLiBObyBzcGVjaWZpYyBjb25maWcgcmVxdWlyZW1lbnRzIGFyZSBtZW50aW9uZWQsIHdoaWNoIGdlbmVyYWxseSBtZWFucyBTTFVCLCB0aGUgZGVmYXVsdCBhbGxvY2F0b3IsIGlzIGFscmVhZHkgaW4gcGxheS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgYFNMVUJgIGlzIGFjdHVhbGx5IGEgY29uZmlndXJhYmxlIG9wdGlvbi4gQW5kLCBhbHRob3VnaCBNYXBsZSBUcmVlIGlzIGdlbmVyYWxseSBlbmFibGVkLCB0aGVyZSBtaWdodCBiZSBhIGNvbmZpZyB0aGF0IGNvdWxkIGJlIGludGVyZXN0aW5nIHRvIGV4cGxvcmUsIHN1Y2ggYXMgYE1BUExFX1RSRUVgIOKAkyBidXQgYmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgaXQncyBwcm9iYWJseSBhbHdheXMgY29tcGlsZWQgaW4gYW55d2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc4OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNzo1Njo0My4yNzM5MzYwNjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwODkwODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTFVCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNjI9bWVudSBcXFwiU2xhYiBhbGxvY2F0b3Igb3B0aW9uc1xcXCJcXG5tbS9LY29uZmlnLTE2My1cXG5tbS9LY29uZmlnOjE2NDpjb25maWcgU0xVQlxcbm1tL0tjb25maWctMTY1LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWc9MTY4PWNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcXG4tLVxcbm1tL0tjb25maWctMTcyLVxcbm1tL0tjb25maWc6MTczOmNvbmZpZyBTTFVCX1RJTllcXG5tbS9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJDb25maWd1cmUgZm9yIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludFxcXCJcXG4tLVxcbm1tL0tjb25maWc9MjE3PWNvbmZpZyBTTEFCX0JVQ0tFVFNcXG4tLVxcbm1tL0tjb25maWctMjMzLVxcbm1tL0tjb25maWc6MjM0OmNvbmZpZyBTTFVCX1NUQVRTXFxubW0vS2NvbmZpZy0yMzUtXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE3OjU2OjQzLjM0NDg0MTE5NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDI2MTkzNTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlNMVUIgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgYXNzZXNzZWQgdGhlIHNpdHVhdGlvbi4gVGhlIGluaXRpYWwgY2x1ZSBwb2ludHMgZGlyZWN0bHkgdG8gYFNMVUJgIGJlaW5nIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIGluZGljYXRlZCBieSBgZGVmX2Jvb2wgeWAuIFRoaXMgZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gbWVudGlvbnMgcmVsYXRlZCB0byBpdC4gRXZlbiBsaXN0aW5nIGBTTFVCYCBmZWVscyByZWR1bmRhbnQgYW5kIHBvdGVudGlhbGx5IG1pc2xlYWRpbmcuXG5cbkhvd2V2ZXIsIHRoZSBwcm9tcHQgaXMgY2xlYXI6IHByaW9yaXRpemUgKnNwZWNpZmljKiBjb25maWd1cmF0aW9ucyB0aWVkIHRvIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBhdm9pZCB0aGUgZ2VuZXJhbCBvbmVzIHdlJ3JlIGxpa2VseSBhbHJlYWR5IHVzaW5nLiBXaXRoIHRoYXQgY29uc3RyYWludCBpbiBtaW5kLCBsaXN0aW5nIGBTTFVCYCBpcyBkZWZpbml0ZWx5IG91dC4gSXQncyB0b28gZ2VuZXJpYy5cblxuVG8gY29uZmlybSB0aGlzIGFwcHJvYWNoIGFuZCBlbnN1cmUgYWNjdXJhY3ksIEknbGwgbmVlZCB0byByZXZpc2l0IHRoZSBgcmVmaWxsX3NoZWFmYCBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gYG1tL3NsdWIuY2AuIFRoaXMgaXMgY3J1Y2lhbCB0byBzb2xpZGlmeSB0aGF0IG5vIG90aGVyIHNwZWNpZmljIGFkanVzdG1lbnRzIGFyZSB3YXJyYW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDU2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE3OjU2OjUwLjc3MTAzODg0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUyMzY0NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVmaWxsX3NoZWFmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9Mjc5Mz1yZWZpbGxfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG4tLVxcbm1tL3NsdWIuYy0yNzk1LVxcbm1tL3NsdWIuYzoyNzk2OnN0YXRpYyBpbnQgcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsXFxubW0vc2x1Yi5jLTI3OTctXFx0XFx0XFx0IGdmcF90IGdmcClcXG4tLVxcbm1tL3NsdWIuYz00NjExPV9fcGNzX3JlcGxhY2VfZW1wdHlfbWFpbihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcyxcXG4tLVxcbm1tL3NsdWIuYy00NjcwLVxcbm1tL3NsdWIuYzo0NjcxOlxcdGlmIChyZWZpbGxfc2hlYWYocywgZW1wdHksIGdmcCB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1dBUk4pKSB7XFxubW0vc2x1Yi5jLTQ2NzItXFx0XFx0LypcXG4tLVxcbm1tL3NsdWIuYz00OTcxPUVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZik7XFxubW0vc2x1Yi5jLTQ5NzItXFxubW0vc2x1Yi5jOjQ5NzM6c3RhdGljIGludCBfX3ByZWZpbGxfc2hlYWZfcGZtZW1hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtNDk3NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsIGdmcF90IGdmcClcXG4tLVxcbm1tL3NsdWIuYy00OTgyLVxcbm1tL3NsdWIuYzo0OTgzOlxcdHJldCA9IHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwX25vbWVtYWxsb2MpO1xcbm1tL3NsdWIuYy00OTg0LVxcbi0tXFxubW0vc2x1Yi5jLTQ5OTEtXFx0ICovXFxubW0vc2x1Yi5jOjQ5OTI6XFx0cmV0ID0gcmVmaWxsX3NoZWFmKHMsIHNoZWFmLCBnZnApO1xcbm1tL3NsdWIuYy00OTkzLVxcdHNoZWFmLVxcdTAwM2VwZm1lbWFsbG9jID0gdHJ1ZTtcXG4tLVxcbm1tL3NsdWIuYz01MDA3PXN0cnVjdCBzbGFiX3NoZWFmICpcXG5tbS9zbHViLmM6NTAwODprbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IHNpemUpXFxubW0vc2x1Yi5jLTUwMDkte1xcbi0tXFxubW0vc2x1Yi5jLTUwNzAtXFx0XFx0aWYgKHNoZWFmLVxcdTAwM2VzaXplIFxcdTAwM2Mgc2l6ZSBcXHUwMDI2XFx1MDAyNlxcbm1tL3NsdWIuYzo1MDcxOlxcdFxcdCAgICBfX3ByZWZpbGxfc2hlYWZfcGZtZW1hbGxvYyhzLCBzaGVhZiwgZ2ZwKSkge1xcbm1tL3NsdWIuYy01MDcyLVxcdFxcdFxcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzaGVhZik7XFxuLS1cXG5tbS9zbHViLmMtNTA4MS0vKlxcbm1tL3NsdWIuYzo1MDgyOiAqIFVzZSB0aGlzIHRvIHJldHVybiBhIHNoZWFmIG9idGFpbmVkIGJ5IGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZigpXFxubW0vc2x1Yi5jLTUwODMtICpcXG4tLVxcbm1tL3NsdWIuYz01MDkxPXZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG4tLVxcbm1tL3NsdWIuYy01MTI1LVxcdGlmICghYmFybiB8fCBkYXRhX3JhY2UoYmFybi1cXHUwMDNlbnJfZnVsbCkgXFx1MDAzZT0gTUFYX0ZVTExfU0hFQVZFUyB8fFxcbm1tL3NsdWIuYzo1MTI2OlxcdCAgICByZWZpbGxfc2hlYWYocywgc2hlYWYsIGdmcCB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1dBUk4pKSB7XFxubW0vc2x1Yi5jLTUxMjctXFx0XFx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHNoZWFmKTtcXG4tLVxcbm1tL3NsdWIuYy01MTM2LS8qXFxubW0vc2x1Yi5jOjUxMzc6ICogUmVmaWxsIGEgc2hlYWYgcHJldmlvdXNseSByZXR1cm5lZCBieSBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYgdG8gYXQgbGVhc3RcXG5tbS9zbHViLmMtNTEzOC0gKiB0aGUgZ2l2ZW4gc2l6ZS5cXG4tLVxcbm1tL3NsdWIuYy01MTQ4LSAqL1xcbm1tL3NsdWIuYzo1MTQ5OmludCBrbWVtX2NhY2hlX3JlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxcbm1tL3NsdWIuYy01MTUwLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2xhYl9zaGVhZiAqKnNoZWFmcCwgdW5zaWduZWQgaW50IHNpemUpXFxuLS1cXG5tbS9zbHViLmMtNTE1NS1cXHQgKiBUT0RPOiBkbyB3ZSB3YW50IHRvIHN1cHBvcnQgKnNoZWFmID09IE5VTEwgdG8gYmUgZXF1aXZhbGVudCBvZlxcbm1tL3NsdWIuYzo1MTU2OlxcdCAqIGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZigpID9cXG5tbS9zbHViLmMtNTE1Ny1cXHQgKi9cXG4tLVxcbm1tL3NsdWIuYy01MTY2LVxcdFxcdGlmIChsaWtlbHkoc2hlYWYtXFx1MDAzZWNhcGFjaXR5ID09IHMtXFx1MDAzZXNoZWFmX2NhcGFjaXR5KSlcXG5tbS9zbHViLmM6NTE2NzpcXHRcXHRcXHRyZXR1cm4gX19wcmVmaWxsX3NoZWFmX3BmbWVtYWxsb2Mocywgc2hlYWYsIGdmcCk7XFxubW0vc2x1Yi5jLTUxNjgtXFxuLS1cXG5tbS9zbHViLmMtNTE4MS1cXHQgKi9cXG5tbS9zbHViLmM6NTE4MjpcXHRzaGVhZiA9IGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihzLCBnZnAsIHNpemUpO1xcbm1tL3NsdWIuYy01MTgzLVxcdGlmICghc2hlYWYpXFxuLS1cXG5tbS9zbHViLmMtNTE5MS0vKlxcbm1tL3NsdWIuYzo1MTkyOiAqIEFsbG9jYXRlIGZyb20gYSBzaGVhZiBvYnRhaW5lZCBieSBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoKVxcbm1tL3NsdWIuYy01MTkzLSAqXFxuLS1cXG5tbS9zbHViLmM9Nzc0OT1zdGF0aWMgdW5zaWduZWQgaW50IGNhbGN1bGF0ZV9zaGVhZl9jYXBhY2l0eShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy03Nzg5LVxcdCAqIFJlc3BlY3QgYW4gZXhwbGljaXQgcmVxdWVzdCBmb3IgY2FwYWNpdHkgdGhhdCdzIHR5cGljYWxseSBtb3RpdmF0ZWQgYnlcXG5tbS9zbHViLmM6Nzc5MDpcXHQgKiBleHBlY3RlZCBtYXhpbXVtIHNpemUgb2Yga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKCkgdG8gbm90IGVuZCB1cFxcbm1tL3NsdWIuYy03NzkxLVxcdCAqIHVzaW5nIGxvdy1wZXJmb3JtYW5jZSBvdmVyc2l6ZSBzaGVhdmVzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE3OjU2OjUwLjgzNjI4NjIzMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTk5Nzk4OTY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgLCBhbmQgdGhlIGtleSBoZXJlIGlzIHRoZSBhZGRpdGlvbiBvZiBgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTmAgdG8gdGhlIGNhbGwgdG8gYHJlZmlsbF9zaGVhZmAuIFRoaXMgaXMgYSBjbGVhciwgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIFNMVUIgYWxsb2NhdG9yLiBNeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgaW1wYWN0IG9mIHRoZXNlIGZsYWdzIHdpdGhpbiB0aGUgYHJlZmlsbF9zaGVhZmAgY29udGV4dC4gSXQgbG9va3MgbGlrZSBpdCdzIHByZXZlbnRpbmcgdGhlIHN5c3RlbSBmcm9tIGRpcHBpbmcgaW50byBpdHMgcmVzZXJ2ZXMgb3IgZW1pdHRpbmcgd2FybmluZ3Mgd2hlbiBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgYSByZXR1cm5lZCBzaGVhZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgc3BlY2lmaWMgY2hhbmdlIGlzIGJlaW5nIGludHJvZHVjZWQgaGVyZSwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgZm9yIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSBhcm91bmQgaG93IHdlIGFyZSBnb2luZyB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24uIFRoZSBgcmVmaWxsX3NoZWFmYCBmdW5jdGlvbiBpcyBjcml0aWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNTgsIk91dHB1dFRva2VucyI6MTAwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE3OjU3OjMyLjgzNDI4MTEyNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia21lbV9jYWNoZV9yZXR1cm5fc2hlYWZcIixcbiAgICBcInJlZmlsbF9zaGVhZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTFVCIGFsbG9jYXRvciB0byBwcmV2ZW50IGByZWZpbGxfc2hlYWZgIGZyb20gdXNpbmcgbWVtb3J5IHJlc2VydmVzIG9yIHdhcm5pbmcgb24gYWxsb2NhdGlvbiBmYWlsdXJlIHdoZW4gcmV0dXJuaW5nIGEgc2hlYWYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImttZW1fY2FjaGVfcmV0dXJuX3NoZWFmXCIsXG4gICAgXCJyZWZpbGxfc2hlYWZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0xVQiBhbGxvY2F0b3IgdG8gcHJldmVudCBgcmVmaWxsX3NoZWFmYCBmcm9tIHVzaW5nIG1lbW9yeSByZXNlcnZlcyBvciB3YXJuaW5nIG9uIGFsbG9jYXRpb24gZmFpbHVyZSB3aGVuIHJldHVybmluZyBhIHNoZWFmLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowzm9sz[1] Phase: Succeeded StartedAt: 2026-07-20 17:57:44 +0000 UTC FinishedAt: 2026-07-20 17:57:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzm9sz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 17:57:44 +0000 UTC FinishedAt: 2026-07-20 17:57:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzm9sz[2] Phase: Succeeded StartedAt: 2026-07-20 17:57:44 +0000 UTC FinishedAt: 2026-07-20 19:05:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzm9sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kmem_cache_return_sheaf","refill_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"55aaeb5e-89eb-4783-b692-781692de2ad7","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-20 17:57:44 +0000 UTC FinishedAt: 2026-07-20 19:05:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kmem_cache_return_sheaf","refill_sheaf"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"55aaeb5e-89eb-4783-b692-781692de2ad7","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzm9sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kmem_cache_return_sheaf","refill_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"55aaeb5e-89eb-4783-b692-781692de2ad7","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-20 17:57:44 +0000 UTC FinishedAt: 2026-07-20 17:57:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzm9sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kmem_cache_return_sheaf","refill_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"55aaeb5e-89eb-4783-b692-781692de2ad7","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-20 17:57:44 +0000 UTC FinishedAt: 2026-07-20 17:57:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowzm9sz/series-workflowzm9sz-convert-artifact-560996296/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzm9sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kmem_cache_return_sheaf","refill_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"55aaeb5e-89eb-4783-b692-781692de2ad7","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-20 17:57:54 +0000 UTC FinishedAt: 2026-07-20 18:33:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzm9sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kmem_cache_return_sheaf","refill_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"55aaeb5e-89eb-4783-b692-781692de2ad7","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-20 17:57:54 +0000 UTC FinishedAt: 2026-07-20 18:33:03 +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:*dfee3428-e2ce-4c0a-aa4e-0d079be44bed,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-workflowzm9sz/series-workflowzm9sz-convert-artifact-560996296/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": "70e1b1de-69d2-4e55-8f10-1d5d35b73aa9", "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-workflowzm9sz/series-workflowzm9sz-build-action-1984826430/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzm9sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kmem_cache_return_sheaf","refill_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"55aaeb5e-89eb-4783-b692-781692de2ad7","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-20 17:57:54 +0000 UTC FinishedAt: 2026-07-20 18:32:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dfee3428-e2ce-4c0a-aa4e-0d079be44bed,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-workflowzm9sz/series-workflowzm9sz-convert-artifact-560996296/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": "70e1b1de-69d2-4e55-8f10-1d5d35b73aa9", "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-workflowzm9sz/series-workflowzm9sz-build-action-1984826430/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzm9sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kmem_cache_return_sheaf","refill_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"55aaeb5e-89eb-4783-b692-781692de2ad7","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-20 18:33:03 +0000 UTC FinishedAt: 2026-07-20 18:33:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzm9sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kmem_cache_return_sheaf","refill_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"55aaeb5e-89eb-4783-b692-781692de2ad7","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-20 18:33:03 +0000 UTC FinishedAt: 2026-07-20 18:33:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzm9sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kmem_cache_return_sheaf","refill_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"55aaeb5e-89eb-4783-b692-781692de2ad7","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-20 18:33:03 +0000 UTC FinishedAt: 2026-07-20 18:33:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzm9sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kmem_cache_return_sheaf","refill_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"55aaeb5e-89eb-4783-b692-781692de2ad7","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-20 18:33:03 +0000 UTC FinishedAt: 2026-07-20 18:33:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"55aaeb5e-89eb-4783-b692-781692de2ad7","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowzm9sz/series-workflowzm9sz-convert-artifact-474707119/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzm9sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kmem_cache_return_sheaf","refill_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"55aaeb5e-89eb-4783-b692-781692de2ad7","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-20 18:33:24 +0000 UTC FinishedAt: 2026-07-20 19:04:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzm9sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kmem_cache_return_sheaf","refill_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"55aaeb5e-89eb-4783-b692-781692de2ad7","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-20 18:33:24 +0000 UTC FinishedAt: 2026-07-20 19:04:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*70e1b1de-69d2-4e55-8f10-1d5d35b73aa9,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-workflowzm9sz/series-workflowzm9sz-build-action-1984826430/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": false },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-workflowzm9sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kmem_cache_return_sheaf","refill_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"55aaeb5e-89eb-4783-b692-781692de2ad7","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Failed StartedAt: 2026-07-20 19:04:42 +0000 UTC FinishedAt: 2026-07-20 19:05:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzm9sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kmem_cache_return_sheaf","refill_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","series_id":"55aaeb5e-89eb-4783-b692-781692de2ad7","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Failed StartedAt: 2026-07-20 19:04:42 +0000 UTC FinishedAt: 2026-07-20 19:04:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}