Name: series-workflowtczhc Phase: Succeeded StartedAt: 2026-09-10 17:56:33 +0000 UTC FinishedAt: 2026-09-10 22:09:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[0] Phase: Succeeded StartedAt: 2026-09-10 17:56:33 +0000 UTC FinishedAt: 2026-09-10 18:24:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 17:56:33 +0000 UTC FinishedAt: 2026-09-10 18:24:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e4a62833adff6ef0fe7c0b90393204fe3c26b5c5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "XDP_SOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e4a62833adff6ef0fe7c0b90393204fe3c26b5c5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "XDP_SOCKETS" ], "series_id": "d9a3b075-4b81-4ee7-b09f-35151ceb47d5" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xsk_map_gen_lookup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX21hcF9nZW5fbG9va3VwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBhIDY0LWJpdCBqdW1wIGluc3RydWN0aW9uIChCUEZfSk1QX0lNTSkgdG8gYSAzMi1iaXQganVtcCBpbnN0cnVjdGlvbiAoQlBGX0pNUDMyX0lNTSkgaW4geHNrX21hcF9nZW5fbG9va3VwKCkgd2hlbiBpbmxpbmluZyBCUEYgaW5zdHJ1Y3Rpb25zIGZvciBYU0sgbWFwIGVsZW1lbnQgbG9va3Vwcy4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgdG91Y2ggbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1ZyBpbnZvbHZpbmcgaW5jb3JyZWN0IGJyYW5jaCBvZmZzZXRzIG9yIGluZGV4aW5nIHdvdWxkIHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB1bmV4cGVjdGVkIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHhza19tYXBfZ2VuX2xvb2t1cCgpIGluIG5ldC94ZHAveHNrbWFwLmMgYnkgY2hhbmdpbmcgdGhlIGVtaXR0ZWQgbG9va3VwIGluc3RydWN0aW9uIGZyb20gQlBGX0pNUF9JTU0gdG8gQlBGX0pNUDMyX0lNTSB3aGVuIHZlcmlmeWluZyBhbmQgaW5saW5pbmcgWFNLTUFQIGxvb2t1cHMuIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgQlBGL1hEUCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzViYzdhN2QyMDAxYmZmNTI2NzlmMTQwYTU2OTRkMzcwYjRiYTIzM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDE4OjIzOjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrbWFwLmMgYi9uZXQveGRwL3hza21hcC5jXG5pbmRleCAzYmZmMzQ2MzA4ZDBmLi5iZjAwZDY0NjNjMTkxIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2ttYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2ttYXAuY1xuQEAgLTEyNCw3ICYjNDM7MTI0LDcgQEAgc3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xuIFxuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHJldCwgaW5kZXgsIDApO1xuLVx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtXHUwMDNlbWF4X2VudHJpZXMsIDUpO1xuJiM0MztcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVAzMl9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtXHUwMDNlbWF4X2VudHJpZXMsIDUpO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfTFNILCByZXQsIGlsb2cyKHNpemVvZihzdHJ1Y3QgeHNrX3NvY2sgKikpKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgbXAsIG9mZnNldG9mKHN0cnVjdCB4c2tfbWFwLCB4c2tfbWFwKSk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfUkVHKEJQRl9BREQsIHJldCwgbXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX21hcF9nZW5fbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHhza19tYXBfZ2VuX2xvb2t1cCgpIGluIG5ldC94ZHAveHNrbWFwLmMgYnkgY2hhbmdpbmcgdGhlIGVtaXR0ZWQgbG9va3VwIGluc3RydWN0aW9uIGZyb20gQlBGX0pNUF9JTU0gdG8gQlBGX0pNUDMyX0lNTSB3aGVuIHZlcmlmeWluZyBhbmQgaW5saW5pbmcgWFNLTUFQIGxvb2t1cHMuIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgQlBGL1hEUCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzViYzdhN2QyMDAxYmZmNTI2NzlmMTQwYTU2OTRkMzcwYjRiYTIzMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDE4OjIzOjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2ttYXAuYyBiL25ldC94ZHAveHNrbWFwLmMKaW5kZXggM2JmZjM0NjMwOGQwZi4uYmYwMGQ2NDYzYzE5MSAxMDA2NDQKLS0tIGEvbmV0L3hkcC94c2ttYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGRwL3hza21hcC5jCkBAIC0xMjQsNyAmIzQzOzEyNCw3IEBAIHN0YXRpYyBpbnQgeHNrX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpCiAJc3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7CiAKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfVywgcmV0LCBpbmRleCwgMCk7Ci0JKmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtJmd0O21heF9lbnRyaWVzLCA1KTsKJiM0MzsJKmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUDMyX0lNTShCUEZfSkdFLCByZXQsIG1hcC0mZ3Q7bWF4X2VudHJpZXMsIDUpOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0xTSCwgcmV0LCBpbG9nMihzaXplb2Yoc3RydWN0IHhza19zb2NrICopKSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBtcCwgb2Zmc2V0b2Yoc3RydWN0IHhza19tYXAsIHhza19tYXApKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfUkVHKEJQRl9BREQsIHJldCwgbXApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDE5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB0YXNrIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcywgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2UgaW4gYG5ldC94ZHAveHNrbWFwLmNgLCBqdXN0aWZpZXMgZnV6emluZyB3aXRoIHN5emthbGxlci4gVGhlIHVzZXIgcHJvdmlkZWQgYSBnaXQgZGlmZiwgYW5kIGl0JiMzOTtzIGEgcmVsYXRpdmVseSBmb2N1c2VkIGNoYW5nZS4gU3BlY2lmaWNhbGx5OiBgQlBGX0pNUF9JTU1gIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYEJQRl9KTVAzMl9JTU1gIGluIHRoZSBgeHNrX21hcF9nZW5fbG9va3VwYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGp1bXAgaW5zdHJ1Y3Rpb24sIGFuZCBhIDMyLWJpdCBpbW1lZGlhdGUgdmFsdWUgY2hhbmdlLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBzb21lIHBvdGVudGlhbCBhcmVhcyBmb3IgY29uY2Vybi4KClNpbmNlIEkgYW0gZG9pbmcgYSByaXNrIGFuYWx5c2lzIG9uIHRoZSBwYXRjaCBJIHdpbGwgdXNlIHNvbWUgdG9vbHMuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZGVlcGVyIGluc3BlY3Rpb24uIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGBXb3J0aEZ1enppbmdgLCBgRm9jdXNTeW1ib2xzYCwgYEVuYWJsZUNvbmZpZ3NgLCBhbmQgdGhlIGBSZWFzb25pbmdgIGZvciB0aGlzIGRlY2lzaW9uLCBiZWZvcmUgY2FsbGluZyBgc2V0LXJlc3VsdHNgLgoKVG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIGltcGFjdCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIGBuZXQveGRwL3hza21hcC5jYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgeHNrX21hcF9nZW5fbG9va3VwYCBmdW5jdGlvbiBkb2VzLCBhbmQgaG93IHRoYXQgQlBGIGluc3RydWN0aW9uIGNoYW5nZSBhbHRlcnMgaXRzIGJlaGF2aW9yLiBJIHNob3VsZCBhbHNvIGNoZWNrIGBLY29uZmlnYCB0byBzZWUgaWYgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkgaXMgZ2F0ZWQgYmVoaW5kIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoYXQgd2lsbCBoZWxwIG1lIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVseSB1c2VkIHRoaXMgY29kZSBpcy4gVGhpcyBpcyBhbGwgc3RhbmRhcmQgdHJpYWdlIHByb2NlZHVyZSBmb3IgYSBuZXcgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL3hza21hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdHN5bmNocm9uaXplX25ldCgpO1xuIDEwMTpcdFx0YnBmX21hcF9hcmVhX2ZyZWUobSk7XG4gMTAyOlx0fVxuIDEwMzpcdFxuIDEwNDpcdHN0YXRpYyBpbnQgeHNrX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcbiAxMDU6XHR7XG4gMTA2Olx0XHRzdHJ1Y3QgeHNrX21hcCAqbSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCB4c2tfbWFwLCBtYXApO1xuIDEwNzpcdFx0dTMyIGluZGV4ID0ga2V5ID8gKih1MzIgKilrZXkgOiBVMzJfTUFYO1xuIDEwODpcdFx0dTMyICpuZXh0ID0gbmV4dF9rZXk7XG4gMTA5Olx0XG4gMTEwOlx0XHRpZiAoaW5kZXggXHUwMDNlPSBtLVx1MDAzZW1hcC5tYXhfZW50cmllcykge1xuIDExMTpcdFx0XHQqbmV4dCA9IDA7XG4gMTEyOlx0XHRcdHJldHVybiAwO1xuIDExMzpcdFx0fVxuIDExNDpcdFxuIDExNTpcdFx0aWYgKGluZGV4ID09IG0tXHUwMDNlbWFwLm1heF9lbnRyaWVzIC0gMSlcbiAxMTY6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMTE3Olx0XHQqbmV4dCA9IGluZGV4ICYjNDM7IDE7XG4gMTE4Olx0XHRyZXR1cm4gMDtcbiAxMTk6XHR9XG4gMTIwOlx0XG4gMTIxOlx0c3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiAxMjI6XHR7XG4gMTIzOlx0XHRjb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wLCBtcCA9IEJQRl9SRUdfMSwgaW5kZXggPSBCUEZfUkVHXzI7XG4gMTI0Olx0XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcbiAxMjU6XHRcbiAxMjY6XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCByZXQsIGluZGV4LCAwKTtcbiAxMjc6XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVAzMl9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtXHUwMDNlbWF4X2VudHJpZXMsIDUpO1xuIDEyODpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfTFNILCByZXQsIGlsb2cyKHNpemVvZihzdHJ1Y3QgeHNrX3NvY2sgKikpKTtcbiAxMjk6XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgbXAsIG9mZnNldG9mKHN0cnVjdCB4c2tfbWFwLCB4c2tfbWFwKSk7XG4gMTMwOlx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfUkVHKEJQRl9BREQsIHJldCwgbXApO1xuIDEzMTpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRihzdHJ1Y3QgeHNrX3NvY2sgKiksIHJldCwgcmV0LCAwKTtcbiAxMzI6XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XG4gMTMzOlx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTU9WNjRfSU1NKHJldCwgMCk7XG4gMTM0Olx0XHRyZXR1cm4gaW5zbiAtIGluc25fYnVmO1xuIDEzNTpcdH1cbiAxMzY6XHRcbiAxMzc6XHQvKiBFbGVtZW50cyBhcmUga2VwdCBhbGl2ZSBieSBSQ1U7IGVpdGhlciBieSByY3VfcmVhZF9sb2NrKCkgKGZyb20gc3lzY2FsbCkgb3JcbiAxMzg6XHQgKiBieSBsb2NhbF9iaF9kaXNhYmxlKCkgKGZyb20gWERQIGNhbGxzIGluc2lkZSBOQVBJKS4gVGhlXG4gMTM5Olx0ICogcmN1X3JlYWRfbG9ja19iaF9oZWxkKCkgYmVsb3cgbWFrZXMgbG9ja2RlcCBhY2NlcHQgYm90aC5cbiAxNDA6XHQgKi9cbiAxNDE6XHRzdGF0aWMgdm9pZCAqX194c2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXG4gMTQyOlx0e1xuIDE0MzpcdFx0c3RydWN0IHhza19tYXAgKm0gPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgeHNrX21hcCwgbWFwKTtcbiAxNDQ6XHRcbiAxNDU6XHRcdGlmIChrZXkgXHUwMDNlPSBtYXAtXHUwMDNlbWF4X2VudHJpZXMpXG4gMTQ2Olx0XHRcdHJldHVybiBOVUxMO1xuIDE0NzpcdFxuIDE0ODpcdFx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhtLVx1MDAzZXhza19tYXBba2V5XSwgcmN1X3JlYWRfbG9ja19iaF9oZWxkKCkpO1xuIDE0OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjE2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgWFNLIE1hcCBHZW5lcmF0b3IqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIGFuZCBkZXBlbmRlbmNpZXMgc3Vycm91bmRpbmcgYHhza19tYXBfZ2VuX2xvb2t1cGAuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gdHJhY2sgZG93biBpdHMgaW52b2NhdGlvbnMsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyAqdXNlZCogaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIHB1cnBvc2UuIFRoZW4sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCB3aGF0IEtjb25maWcgb3B0aW9ucyBlbmFibGUgdGhlIHJlbGV2YW50IGNvZGUgaW4gYG5ldC94ZHAveHNrbWFwLmNgPyAKCkkmIzM5O2xsIGNoZWNrIHRoZSBhc3NvY2lhdGVkIGJ1aWxkIGZpbGVzLCBzdGFydGluZyB3aXRoIHRoZSBgbmV0L3hkcC9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgYW55IHJlbGV2YW50IGNvbXBpbGF0aW9uIGZsYWdzLiBBZnRlciB0aGF0LCBJJiMzOTtsbCBkaXZlIGludG8gYG5ldC94ZHAvS2NvbmZpZ2AgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhlc2UgdmFyaW91cyBjb21wb25lbnRzIGFyZSBjb250cm9sbGVkIGFuZCBjb25maWd1cmVkLiBUaGF0IHNob3VsZCBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIGFuZCBjb25maWd1cmF0aW9uIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNrbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQveGRwL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub1xubmV0L3hkcC9NYWtlZmlsZS0zLW9iai0kKENPTkZJR19YRFBfU09DS0VUUykgJiM0Mzs9IHhza19idWZmX3Bvb2wub1xuLS1cbm5ldC94ZHAveHNrLmM9NDk3PWludCBfX3hza19tYXBfcmVkaXJlY3Qoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXG4tLVxubmV0L3hkcC94c2suYy01MDUtXHRpZiAoIXhzLVx1MDAzZWZsdXNoX25vZGUucHJldikge1xubmV0L3hkcC94c2suYzo1MDY6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmZsdXNoX2xpc3QgPSBicGZfbmV0X2N0eF9nZXRfeHNrbWFwX2ZsdXNoX2xpc3QoKTtcbm5ldC94ZHAveHNrLmMtNTA3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipYRFAgQ29uZmlndXJhdGlvbjogQSBRdWljayBHbGFuY2UqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtSaWdodCwgYmVmb3JlIHdlIGRpdmUgaW50byBhbnl0aGluZyB0b28gZGVlcCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IGBuZXQveGRwL0tjb25maWdgLiYjMzQ7IEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBmaXJzdCBzdG9wLCB5b3Uga25vdz8gR2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHNlZSB3aGF0IG9wdGlvbnMgYXJlIGV4cG9zZWQsIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBob3cgdGhlIHZhcmlvdXMgWERQLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLiBObyBuZWVkIHRvIHJlaW52ZW50IHRoZSB3aGVlbCwgSSBjYW4gcHJvYmFibHkgZ2V0IGEgZ2VuZXJhbCBzZW5zZSBvZiB0aGUgYnVpbGQgc3RydWN0dXJlIGp1c3QgYnkgdW5kZXJzdGFuZGluZyB0aGUgYXZhaWxhYmxlIGNvbmZpZyBmbGFncy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVjb3N5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBYRFBfU09DS0VUU1xuICAgMzpcdFx0Ym9vbCBcJiMzNDtYRFAgc29ja2V0c1wmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuICAgNTpcdFx0ZGVmYXVsdCBuXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFhEUCBzb2NrZXRzIGFsbG93cyBhIGNoYW5uZWwgYmV0d2VlbiBYRFAgcHJvZ3JhbXMgYW5kXG4gICA4Olx0XHQgIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuXG4gICA5Olx0XG4gIDEwOlx0Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O1hEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBYRFBfU09DS0VUU1xuICAxMzpcdFx0ZGVmYXVsdCBuXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIFN1cHBvcnQgZm9yIFBGX1hEUCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXG4gIDE2Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUzMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIGB4c2tfbWFwX2dlbl9sb29rdXBgIFJlZmVyZW5jZXMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHhza19tYXBfZ2VuX2xvb2t1cGAgZnVuY3Rpb24gaXMgdXNlZC4gQSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgcmVhbGx5IHRoZSAqZXNzZW50aWFsKiBvbmUgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGBuZXQveGRwL3hza21hcC5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgZGlyZWN0IGRlZmluaXRpb24gYW5kIG1vc3Qgb2YgaXRzIGxvY2FsIGNhbGxzIHRoZXJlLCBjbGVhcmx5IHNob3dpbmcgaG93IGl0IGZpdHMgd2l0aGluIHRoZSBYRFAgc29ja2V0IG1hcCYjMzk7cyBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyB0aGUgbmF0dXJhbCBwbGFjZS4KCkJ1dCwgSSBjYW4mIzM5O3Qgc3RvcCB0aGVyZS4gSSBhbHNvIGhhdmUgdG8gY29uc2lkZXIgd2hlcmUgZWxzZSwgb3V0c2lkZSBvZiB0aGUgaW1tZWRpYXRlIGRlZmluaXRpb24sIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgaW52b2tlZC4gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gbG9vayBiZXlvbmQgdGhlIGxvY2FsIGZpbGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZXh0ZXJuYWwgY2FsbHMuIEnigJlsbCBuZWVkIHRvIHRyYWNlIGRvd24gdGhlIGNhbGwgZ3JhcGguIEFyZSB0aGVyZSBvdGhlciBtb2R1bGVzIHRoYXQgbGV2ZXJhZ2UgdGhpcyBsb29rdXAsIHBlcmhhcHMgdGhyb3VnaCBhIGdlbmVyaWMgWERQIG1hcCBpbnRlcmZhY2Ugb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMgcmVsYXRlZCB0byBBRl9YRFA/IElzIGl0IGEgY3J1Y2lhbCBwYXJ0IG9mIGEgbGFyZ2VyIFhEUCBkYXRhIHBhdGggaW52b2x2aW5nIG90aGVyIG1hcHMgb3IgcHJvZ3JhbXM/IFdoZXJlJiMzOTtzIGl0IHVzZWQ/IFRoYXQmIzM5O3Mgd2hhdCBJIHdhbnQgdG8gZmluZCBvdXQuIEkgbmVlZCB0byBnZXQgYSBwaWN0dXJlIG9mICphbGwqIHRoZSBwbGFjZXMgdGhpcyBmdW5jdGlvbiBpcyBlbXBsb3llZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGNvbXBsZXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19tYXBfZ2VuX2xvb2t1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hza21hcC5jPTEwND1zdGF0aWMgaW50IHhza19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG4tLVxubmV0L3hkcC94c2ttYXAuYy0xMjAtXG5uZXQveGRwL3hza21hcC5jOjEyMTpzdGF0aWMgaW50IHhza19tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxubmV0L3hkcC94c2ttYXAuYy0xMjIte1xuLS1cbm5ldC94ZHAveHNrbWFwLmM9MjcxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyB4c2tfbWFwX29wcyA9IHtcbi0tXG5uZXQveGRwL3hza21hcC5jLTI3Ni1cdC5tYXBfbG9va3VwX2VsZW0gPSB4c2tfbWFwX2xvb2t1cF9lbGVtLFxubmV0L3hkcC94c2ttYXAuYzoyNzc6XHQubWFwX2dlbl9sb29rdXAgPSB4c2tfbWFwX2dlbl9sb29rdXAsXG5uZXQveGRwL3hza21hcC5jLTI3OC1cdC5tYXBfbG9va3VwX2VsZW1fc3lzX29ubHkgPSB4c2tfbWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTUwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgbWFwX2dlbl9sb29rdXBgIENhbGwgU2l0ZXMqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2Ugb2YgYG1hcF9nZW5fbG9va3VwYCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0cyBjYWxscyBmcm9tIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSB3YW50IHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbiBjYWxsIGluIGFsbCBpdHMgY2FsbCBzaXRlcy4KCk1vcmUgc3BlY2lmaWNhbGx5LCBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBwbGFjZXMgbGlrZSB0aGUgQlBGIHZlcmlmaWVyIG9yIGFueSBzY2VuYXJpb3Mgd2hlcmUgdGhlIEJQRiBjb21waWxlciBtaWdodCBpbmxpbmUgYSBCUEYgbWFwIGxvb2t1cCB1c2luZyB0aGF0IGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgaW5saW5pbmcgYmVoYXZpb3IgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMgYW5kIG9wdGltaXphdGlvbiwgYW5kIGZvciB1bmNvdmVyaW5nIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBUaGUgaW1wbGljYXRpb25zIHdvdWxkIGJlIHF1aXRlIHN1YnN0YW50aWFsIGlmIHRoaXMgaXMgaGFwcGVuaW5nLiBUaGUgcHJlc2VuY2Ugb2YgaXQgaXMgc29tZXRoaW5nIEkmIzM5O2xsIG5lZWQgdG8ga25vdy4KCkkmIzM5O2xsIHN0YXJ0IHRyYWNpbmcgdGhlIGNhbGwgY2hhaW4gZnJvbSB0aGVyZSwgbWFwcGluZyBvdXQgYW55IGludGVyZGVwZW5kZW5jaWVzIG9yIHN1YnRsZSBudWFuY2VzIGluIHRoZSBiZWhhdmlvciByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbiYjMzk7cyB1c2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXBfZ2VuX2xvb2t1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTg3PXN0cnVjdCBicGZfbWFwX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0xMjYtXHR2b2lkICgqbWFwX2ZkX3B1dF9wdHIpKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnB0ciwgYm9vbCBuZWVkX2RlZmVyKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MTI3Olx0aW50ICgqbWFwX2dlbl9sb29rdXApKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpO1xuaW5jbHVkZS9saW51eC9icGYuaC0xMjgtXHR1MzIgKCptYXBfZmRfc3lzX2xvb2t1cF9lbGVtKSh2b2lkICpwdHIpO1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0yMDE9c3RhdGljIGludCBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGltbSxcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjE3LS8qIGVtaXQgQlBGIGluc3RydWN0aW9ucyBlcXVpdmFsZW50IHRvIEMgY29kZSBvZiBhcnJheV9tYXBfbG9va3VwX2VsZW0oKSAqL1xua2VybmVsL2JwZi9hcnJheW1hcC5jOjIxODpzdGF0aWMgaW50IGFycmF5X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjE5LXtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9Mjc3PXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW1tLCB1MzIgKm9mZilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjkzLS8qIGVtaXQgQlBGIGluc3RydWN0aW9ucyBlcXVpdmFsZW50IHRvIEMgY29kZSBvZiBwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKCkgKi9cbmtlcm5lbC9icGYvYXJyYXltYXAuYzoyOTQ6c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yOTUte1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz04NTk9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg2OC1cdC5tYXBfZGVsZXRlX2VsZW0gPSBhcnJheV9tYXBfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODY5Olx0Lm1hcF9nZW5fbG9va3VwID0gYXJyYXlfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODcwLVx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcixcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODg2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODkyLVx0Lm1hcF9sb29rdXBfZWxlbSA9IHBlcmNwdV9hcnJheV9tYXBfbG9va3VwX2VsZW0sXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODkzOlx0Lm1hcF9nZW5fbG9va3VwID0gcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg5NC1cdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNDY0PXN0YXRpYyB2b2lkICphcnJheV9vZl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDczLVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE0NzQ6c3RhdGljIGludCBhcnJheV9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0NzUtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNTA1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9vZl9tYXBzX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE1MTQtXHQubWFwX2ZkX3N5c19sb29rdXBfZWxlbSA9IGJwZl9tYXBfZmRfc3lzX2xvb2t1cF9lbGVtLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE1MTU6XHQubWFwX2dlbl9sb29rdXAgPSBhcnJheV9vZl9tYXBfZ2VuX2xvb2t1cCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE2LVx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xNTEzPWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNDctXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwNDg6XHRcdC8qIEJQRl9FTUlUX0NBTEwoKSBhc3N1bXB0aW9ucyBpbiBzb21lIG9mIHRoZSBtYXBfZ2VuX2xvb2t1cFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDQ5LVx0XHQgKiBhbmQgb3RoZXIgaW5saW5pbmcgaGFuZGxlcnMgYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIDY0IGJpdFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjA2OC1cdFx0XHRpZiAoaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0ZVTkNfbWFwX2xvb2t1cF9lbGVtIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9maXh1cHMuYzoyMDY5Olx0XHRcdCAgICBvcHMtXHUwMDNlbWFwX2dlbl9sb29rdXApIHtcbmtlcm5lbC9icGYvZml4dXBzLmM6MjA3MDpcdFx0XHRcdGNudCA9IG9wcy1cdTAwM2VtYXBfZ2VuX2xvb2t1cChtYXBfcHRyLCBpbnNuX2J1Zik7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNzEtXHRcdFx0XHRpZiAoY250ID09IC1FT1BOT1RTVVBQKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTcxNT1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX251bGxzX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTczNS0gKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFkanVzdGVkIGJ5IEJQRiBpbnN0cnVjdGlvbnNcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjczNjogKiBpbiBodGFiX21hcF9nZW5fbG9va3VwKCkuXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy03MzctICovXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9NzU4PXN0YXRpYyB2b2lkICpodGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtNzc4LSAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6Nzc5OnN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxua2VybmVsL2JwZi9oYXNodGFiLmMtNzgwLXtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz04MTM9c3RhdGljIHZvaWQgKmh0YWJfbHJ1X21hcF9sb29rdXBfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTgxNy1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjgxODpzdGF0aWMgaW50IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy04MTktXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIzNjE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzcxLVx0Lm1hcF9kZWxldGVfZWxlbSA9IGh0YWJfbWFwX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM3MjpcdC5tYXBfZ2VuX2xvb2t1cCA9IGh0YWJfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzczLVx0Lm1hcF9zZXFfc2hvd19lbGVtID0gaHRhYl9tYXBfc2VxX3Nob3dfZWxlbSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzgzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzOTQtXHQubWFwX2RlbGV0ZV9lbGVtID0gaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM5NTpcdC5tYXBfZ2VuX2xvb2t1cCA9IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5Ni1cdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjQwNz1zdGF0aWMgdm9pZCAqaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDE3LS8qIGlubGluZSBicGZfbWFwX2xvb2t1cF9lbGVtKCkgY2FsbCBmb3IgcGVyLUNQVSBoYXNobWFwICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDE4OnN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MTkte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI1NjQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfcGVyY3B1X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjU3MC1cdC5tYXBfbG9va3VwX2VsZW0gPSBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTcxOlx0Lm1hcF9nZW5fbG9va3VwID0gaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTcyLVx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtID0gaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0sXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjY5OD1zdGF0aWMgdm9pZCAqaHRhYl9vZl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3MDctXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzA4OnN0YXRpYyBpbnQgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjcwOS1cdFx0XHRcdCAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzMyPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX29mX21hcHNfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzQxLVx0Lm1hcF9mZF9zeXNfbG9va3VwX2VsZW0gPSBicGZfbWFwX2ZkX3N5c19sb29rdXBfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3NDI6XHQubWFwX2dlbl9sb29rdXAgPSBodGFiX29mX21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc0My1cdC5tYXBfY2hlY2tfYnRmID0gbWFwX2NoZWNrX25vX2J0Zixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMDI1PXN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwODMtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDg0OnN0YXRpYyBpbnQgcmh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwODUte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MDg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUxOS1cdC5tYXBfZGVsZXRlX2VsZW0gPSByaHRhYl9tYXBfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTIwOlx0Lm1hcF9nZW5fbG9va3VwID0gcmh0YWJfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTIxLVx0Lm1hcF9zZXFfc2hvd19lbGVtID0gcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXG4tLVxubmV0L3hkcC94c2ttYXAuYz0xMDQ9c3RhdGljIGludCB4c2tfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuLS1cbm5ldC94ZHAveHNrbWFwLmMtMTIwLVxubmV0L3hkcC94c2ttYXAuYzoxMjE6c3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbm5ldC94ZHAveHNrbWFwLmMtMTIyLXtcbi0tXG5uZXQveGRwL3hza21hcC5jPTI3MT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgeHNrX21hcF9vcHMgPSB7XG4tLVxubmV0L3hkcC94c2ttYXAuYy0yNzYtXHQubWFwX2xvb2t1cF9lbGVtID0geHNrX21hcF9sb29rdXBfZWxlbSxcbm5ldC94ZHAveHNrbWFwLmM6Mjc3Olx0Lm1hcF9nZW5fbG9va3VwID0geHNrX21hcF9nZW5fbG9va3VwLFxubmV0L3hkcC94c2ttYXAuYy0yNzgtXHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0geHNrX21hcF9sb29rdXBfZWxlbV9zeXNfb25seSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wZXJjcHVfYXJyYXlfaW5uZXJfbWFwLmMtNS0gKiBUZXN0IHRoYXQgcmVwbGFjaW5nIGFuIGlubmVyIHBlcmNwdSBhcnJheSBtYXAgd2l0aCBvbmUgdGhhdCBoYXMgZGlmZmVyZW50XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wZXJjcHVfYXJyYXlfaW5uZXJfbWFwLmM6NjogKiBtYXhfZW50cmllcyBpcyByZWplY3RlZC4gIHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cCgpIGlubGluZXMgdGhlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wZXJjcHVfYXJyYXlfaW5uZXJfbWFwLmMtNy0gKiB0ZW1wbGF0ZSYjMzk7cyBpbmRleF9tYXNrLCBzbyBhbGxvd2luZyBhIHNtYWxsZXIgcmVwbGFjZW1lbnQgd291bGQgY2F1c2UgT09CLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTc3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBWdWxuZXJhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgQlBGX0pNUDMyX0lNTWAgYW5kIGBCUEZfSk1QX0lNTWAgaW4gYHhza19tYXBfZ2VuX2xvb2t1cGAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IHVzZXMgYEJQRl9KTVAzMl9JTU1gIHRvIGNvbXBhcmUgYSAzMi1iaXQgdmFsdWUgbG9hZGVkIGZyb20gYW4gaW5kZXggd2l0aCBgbWFwLSZndDttYXhfZW50cmllc2AuIFByZXZpb3VzbHksIGl0IHVzZWQgdGhlIDY0LWJpdCBqdW1wL2NvbXBhcmUsIGBCUEZfSk1QX0lNTWAuICAKClRoZSBsb2FkaW5nIGluc3RydWN0aW9uIGBCUEZfTERYX01FTShCUEZfVywgLi4uKWAgemVyby1leHRlbmRzIHRoZSAzMiBiaXRzIGludG8gNjQgYml0cy4gIFRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGUgQlBGIHZlcmlmaWVyIG9yIHRoZSBKSVQgY29tcGlsZXIgdHJlYXQgMzItYml0IGFuZCA2NC1iaXQganVtcHMgZGlmZmVyZW50bHkgaW4gYSB3YXkgdGhhdCBjcmVhdGVzIGEgdnVsbmVyYWJpbGl0eT8gVGhpcyBjb2RlIGlzIGNyaXRpY2FsIGJlY2F1c2UgaXQgcnVucyB3aGVuZXZlciBhIEJQRiBwcm9ncmFtLCB1c2luZyBgWFNLTUFQYCAod2hpY2ggaXMgYEJQRl9NQVBfVFlQRV9YU0tNQVBgKSwgY2FsbHMgYGJwZl9tYXBfbG9va3VwX2VsZW0oKWAuIFRoZSB2ZXJpZmllciBpbmxpbmVzIHRoaXMgdXNpbmcgYG1hcF9nZW5fbG9va3VwYCBkdXJpbmcgYGJwZl9kb19taXNjX2ZpeHVwcygpYC4KCk5vdywgaXMgdGhpcyByZWFjaGFibGUgaW4gYSB0eXBpY2FsIFFFTVUgZW52aXJvbm1lbnQ/IEFic29sdXRlbHkuIEJQRiBpcyBhIGNvcmUga2VybmVsIHN1YnN5c3RlbSwgYW5kIGBYU0tNQVBgIHN1cHBvcnQgKHZpYSB0aGUgQlBGIHN5c2NhbGwgYW5kIEFGX1hEUCkgbWVhbnMgdGhpcyBjb2RlIGV4ZWN1dGVzIHdoZW4gbG9hZGluZyBhIEJQRiBwcm9ncmFtIHRoYXQgcGVyZm9ybXMgYSBsb29rdXAgaW4gYW4gYFhTS01BUGAsIGFuZCB0aGVuIHdoZW4gdGhhdCBwcm9ncmFtIGV4ZWN1dGVzLiBUaGF0IG1ha2VzIHRoaXMgMTAwJSByZWFjaGFibGUgd2l0aCBzeXprYWxsZXIgZnV6emluZy4KCkxldCYjMzk7cyBjb25maXJtIHRoZSBjcml0ZXJpYS4gSXQmIzM5O3M6CiogICBSZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlOiBDb3JlIFN1YnN5c3RlbSAoQlBGIC8gbmV0d29ya2luZykuCiogICBXb3J0aEZ1enppbmcgPSB0cnVlLgoKTmV4dCBzdGVwczogTGV0JiMzOTtzIGNoZWNrIGtlcm5lbCBjb25maWdzLiBTcGVjaWZpY2FsbHksIHdlJiMzOTtsbCBuZWVkIGBDT05GSUdfWERQX1NPQ0tFVFNgICh3aGljaCBkZXBlbmRzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgKS4gSSB3aWxsIGFsc28gZ3JlcCBmb3IgJiMzNDtYU0tNQVAmIzM0OyBvciAmIzM0O0JQRl9NQVBfVFlQRV9YU0tNQVAmIzM0OyB0byBlbnN1cmUgbm8gb3RoZXIgY29uZmlncyBhcmUgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9NQVBfVFlQRV9YU0tNQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtNC09PT09PT09PT09PT09PT09PT09XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo1OkJQRl9NQVBfVFlQRV9YU0tNQVBcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTYtPT09PT09PT09PT09PT09PT09PVxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTgtLi4gbm90ZTo6XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo5OiAgIC0gYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgd2FzIGludHJvZHVjZWQgaW4ga2VybmVsIHZlcnNpb24gNC4xOFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTAtXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDoxMTpUaGUgYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgaXMgdXNlZCBhcyBhIGJhY2tlbmQgbWFwIGZvciBYRFAgQlBGIGhlbHBlclxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTItY2FsbCBgYGJwZl9yZWRpcmVjdF9tYXAoKWBgIGFuZCBgYFhEUF9SRURJUkVDVGBgIGFjdGlvbiwgbGlrZSAmIzM5O2Rldm1hcCYjMzk7IGFuZCAmIzM5O2NwdW1hcCYjMzk7LlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0PTY3PVJlZGlyZWN0IHRoZSBwYWNrZXQgdG8gdGhlIGVuZHBvaW50IHJlZmVyZW5jZWQgYnkgYGBtYXBgYCBhdCBpbmRleCBgYGtleWBgLlxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q6Njg6Rm9yIGBgQlBGX01BUF9UWVBFX1hTS01BUGBgIHRoaXMgbWFwIGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gWFNLIEZEc1xuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtNjktZm9yIHNvY2tldHMgYXR0YWNoZWQgdG8gYSBuZXRkZXYmIzM5O3MgcXVldWVzLlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0PTEzNT1LZXJuZWxcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xMzctXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDoxMzg6VGhlIGZvbGxvd2luZyBjb2RlIHNuaXBwZXQgc2hvd3MgaG93IHRvIGRlY2xhcmUgYSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYCBjYWxsZWRcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTEzOS1gYHhza3NfbWFwYGAgYW5kIGhvdyB0byByZWRpcmVjdCBwYWNrZXRzIHRvIGFuIFhTSy5cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xNDMtXHRzdHJ1Y3Qge1xuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q6MTQ0Olx0XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xNDUtXHRcdF9fdHlwZShrZXksIF9fdTMyKTtcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9yZWRpcmVjdC5yc3Q9MTI9WERQX1JFRElSRUNUIHdvcmtzIHdpdGggdGhlIGZvbGxvd2luZyBtYXAgdHlwZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvcmVkaXJlY3QucnN0LTE2LS0gYGBCUEZfTUFQX1RZUEVfQ1BVTUFQYGBcbkRvY3VtZW50YXRpb24vYnBmL3JlZGlyZWN0LnJzdDoxNzotIGBgQlBGX01BUF9UWVBFX1hTS01BUGBgXG5Eb2N1bWVudGF0aW9uL2JwZi9yZWRpcmVjdC5yc3QtMTgtXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q9NzE9SG93IGlzIHRoZW4gcGFja2V0cyBkaXN0cmlidXRlZCBmcm9tIGFuIFhEUCBwcm9ncmFtIHRvIHRoZSBYU0tzPyBUaGVyZVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q6NzI6aXMgYSBCUEYgbWFwIGNhbGxlZCBYU0tNQVAgKG9yIEJQRl9NQVBfVFlQRV9YU0tNQVAgaW4gZnVsbCkuIFRoZVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtNzMtdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBjYW4gcGxhY2UgYW4gWFNLIGF0IGFuIGFyYml0cmFyeSBwbGFjZSBpbiB0aGlzXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q9MjIwPXVzZXIuIEl0IHdpbGwgbWFrZSB5b3VyIHByb2dyYW0gYSBsb3Qgc2ltcGxlci5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTIyMS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0OjIyMjpYU0tNQVAgLyBCUEZfTUFQX1RZUEVfWFNLTUFQXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0yMjMtPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjI0LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q6MjI1Ok9uIFhEUCBzaWRlIHRoZXJlIGlzIGEgQlBGIG1hcCB0eXBlIEJQRl9NQVBfVFlQRV9YU0tNQVAgKFhTS01BUCkgdGhhdFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjI2LWlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBicGZfcmVkaXJlY3RfbWFwKCkgdG8gcGFzcyB0aGUgaW5ncmVzc1xuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTI4Mj1yb3VuZC1yb2JpbiBleGFtcGxlIG9mIGRpc3RyaWJ1dGluZyBwYWNrZXRzIGlzIHNob3duIGJlbG93OlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTI5MS0gICBzdHJ1Y3Qge1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q6MjkyOiAgICAgICBfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0yOTMtICAgICAgIF9fdWludChtYXhfZW50cmllcywgTUFYX1NPQ0tTKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTExNz1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0NQVU1BUCwgY3B1X21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTExOC0jaWYgZGVmaW5lZChDT05GSUdfWERQX1NPQ0tFVFMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjExOTpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1hTS01BUCwgeHNrX21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEyMC0jZW5kaWZcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTAwMD1lbnVtIGJwZl9tYXBfdHlwZSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwMTctXHRCUEZfTUFQX1RZUEVfQ1BVTUFQLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwMTg6XHRCUEZfTUFQX1RZUEVfWFNLTUFQLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwMTktXHRCUEZfTUFQX1RZUEVfU09DS0hBU0gsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTM4Mj1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE1MjQtXHRjYXNlIEJQRl9NQVBfVFlQRV9ERVZNQVBfSEFTSDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE1MjU6XHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNTI2LVx0XHRpZiAoIWJwZl90b2tlbl9jYXBhYmxlKHRva2VuLCBDQVBfTkVUX0FETUlOKSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkyMD1zdGF0aWMgdm9pZCByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTMzLVx0XHRcdHJlZy1cdTAwM2VtYXBfdWlkID0gcmVnLVx1MDAzZWlkO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzQ6XHR9IGVsc2UgaWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfWFNLTUFQKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNS1cdFx0cmVnLVx1MDAzZXR5cGUgPSBQVFJfVE9fWERQX1NPQ0sgfCBtYXliZV9udWxsO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04OTkzPXN0YXRpYyBpbnQgY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MDUyLVx0XHRicmVhaztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MDUzOlx0Y2FzZSBCUEZfTUFQX1RZUEVfWFNLTUFQOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNTQtXHRcdGlmIChmdW5jX2lkICE9IEJQRl9GVU5DX3JlZGlyZWN0X21hcCBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTE3MC1cdFx0ICAgIG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQ1BVTUFQIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjkxNzE6XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1hTS01BUClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MTcyLVx0XHRcdGdvdG8gZXJyb3I7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDY4Mj1pbnQgeGRwX2RvX3JlZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQ2ODctXG5uZXQvY29yZS9maWx0ZXIuYzo0Njg4Olx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApXG5uZXQvY29yZS9maWx0ZXIuYy00Njg5LVx0XHRyZXR1cm4gX194ZHBfZG9fcmVkaXJlY3RfeHNrKHJpLCBkZXYsIHhkcCwgeGRwX3Byb2cpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ2OTY9aW50IHhkcF9kb19yZWRpcmVjdF9mcmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00NzAyLVxubmV0L2NvcmUvZmlsdGVyLmM6NDcwMzpcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfWFNLTUFQKVxubmV0L2NvcmUvZmlsdGVyLmMtNDcwNC1cdFx0cmV0dXJuIF9feGRwX2RvX3JlZGlyZWN0X3hzayhyaSwgZGV2LCB4ZHAsIHhkcF9wcm9nKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00NzEwPXN0YXRpYyBpbnQgeGRwX2RvX2dlbmVyaWNfcmVkaXJlY3RfbWFwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDc0NC1cdFx0YnJlYWs7XG5uZXQvY29yZS9maWx0ZXIuYzo0NzQ1Olx0Y2FzZSBCUEZfTUFQX1RZUEVfWFNLTUFQOlxubmV0L2NvcmUvZmlsdGVyLmMtNDc0Ni1cdFx0ZXJyID0geHNrX2dlbmVyaWNfcmN2KGZ3ZCwgeGRwKTtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTAwMD1lbnVtIGJwZl9tYXBfdHlwZSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwMTctXHRCUEZfTUFQX1RZUEVfQ1BVTUFQLFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwMTg6XHRCUEZfTUFQX1RZUEVfWFNLTUFQLFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwMTktXHRCUEZfTUFQX1RZUEVfU09DS0hBU0gsXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xNjM9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtYXBfdHlwZV9uYW1lW10gPSB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xODEtXHRbQlBGX01BUF9UWVBFX0NQVU1BUF1cdFx0XHQ9IFwmIzM0O2NwdW1hcFwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTgyOlx0W0JQRl9NQVBfVFlQRV9YU0tNQVBdXHRcdFx0PSBcJiMzNDt4c2ttYXBcJiMzNDssXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE4My1cdFtCUEZfTUFQX1RZUEVfU09DS0hBU0hdXHRcdFx0PSBcJiMzNDtzb2NraGFzaFwmIzM0Oyxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTU0MDM9c3RhdGljIGludCBicGZfb2JqZWN0X19jcmVhdGVfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXAsIGJvb2wgaXNfaW5uZXIpXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy01NDY3LVx0Y2FzZSBCUEZfTUFQX1RZUEVfQ1BVTUFQOlxudG9vbHMvbGliL2JwZi9saWJicGYuYzo1NDY4Olx0Y2FzZSBCUEZfTUFQX1RZUEVfWFNLTUFQOlxudG9vbHMvbGliL2JwZi9saWJicGYuYy01NDY5LVx0Y2FzZSBCUEZfTUFQX1RZUEVfU09DS01BUDpcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYz0yOTI9c3RhdGljIGludCBwcm9iZV9tYXBfY3JlYXRlKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTM3NS1cdGNhc2UgQlBGX01BUF9UWVBFX0NQVU1BUDpcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jOjM3NjpcdGNhc2UgQlBGX01BUF9UWVBFX1hTS01BUDpcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTM3Ny1cdGNhc2UgQlBGX01BUF9UWVBFX1NPQ0tIQVNIOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYz00NzU9c3RydWN0IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYzo0NzY6XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMtNDc3LVx0X191aW50KG1heF9lbnRyaWVzLCBNQVhfRU5UUklFUyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jPTY4Nj1pbnQgY2dfc2tiKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMtNzAzLVx0VkVSSUZZX1RZUEUoQlBGX01BUF9UWVBFX0NQVU1BUCwgY2hlY2tfY3B1bWFwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYzo3MDQ6XHRWRVJJRllfVFlQRShCUEZfTUFQX1RZUEVfWFNLTUFQLCBjaGVja194c2ttYXApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jLTcwNS1cdFZFUklGWV9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCwgY2hlY2tfc29ja2hhc2gpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYz0xMD1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jOjExOlx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jLTEyLVx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29jay5jPTI5PXN0cnVjdCB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29jay5jOjMwOlx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NvY2suYy0zMS1cdF9fdWludChtYXhfZW50cmllcywgMSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9od19tZXRhZGF0YS5jPTg9c3RydWN0IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfaHdfbWV0YWRhdGEuYzo5Olx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9od19tZXRhZGF0YS5jLTEwLVx0X191aW50KG1heF9lbnRyaWVzLCAyNTYpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfbWV0YWRhdGEuYz04PXN0cnVjdCB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX21ldGFkYXRhLmM6OTpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfbWV0YWRhdGEuYy0xMC1cdF9fdWludChtYXhfZW50cmllcywgNCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYz0xMT1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYzoxMjpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmMtMTMtXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmM9MTAwNz1zdGF0aWMgdm9pZCBkb190ZXN0X2ZpeHVwKHN0cnVjdCBicGZfdGVzdCAqdGVzdCwgZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF92ZXJpZmllci5jLTExMzUtXHRpZiAoKmZpeHVwX21hcF94c2ttYXApIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmM6MTEzNjpcdFx0bWFwX2Zkc1sxMV0gPSBjcmVhdGVfbWFwKEJQRl9NQVBfVFlQRV9YU0tNQVAsIHNpemVvZihpbnQpLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYy0xMTM3LVx0XHRcdFx0XHRzaXplb2YoaW50KSwgMSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzE4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGBvcHMtJmd0O21hcF9nZW5fbG9va3VwYCBkdXJpbmcgVmVyaWZpZXIgRml4dXAqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYG9wcy0mZ3Q7bWFwX2dlbl9sb29rdXBgIGFuZCB0aGUgdmVyaWZpZXIgZml4dXAgcHJvY2Vzcy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBga2VybmVsL2JwZi9maXh1cHMuY2AgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBmaXh1cHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLiBJIHdhbnQgdG8gc2VlICpleGFjdGx5KiB3aGVyZSBhbmQgaG93IGBvcHMtJmd0O21hcF9nZW5fbG9va3VwYCBpcyBpbnZva2VkIGR1cmluZyB0aGUgdmVyaWZpZXImIzM5O3MgZml4dXAgc3RhZ2UuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5jdGlvbiBjYWxscywgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIGFuZCBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXRlcm1pbmVzIHdoZW4gYW5kIHdoeSBpdCYjMzk7cyB1c2VkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIHRyeWluZyB0byB1bmRlcnN0YW5kOgoKKiAgICoqQ2FsbCBTaXRlOioqIFdoZXJlIGlzIHRoZSBgb3BzLSZndDttYXBfZ2VuX2xvb2t1cGAgbWVtYmVyIGZ1bmN0aW9uIGFjdHVhbGx5ICpjYWxsZWQqIHdpdGhpbiB0aGUgZml4dXAgcHJvY2Vzcz8gV2hhdCBmdW5jdGlvbiBvciBmdW5jdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoaXM/CiogICAqKkFyZ3VtZW50czoqKiBXaGF0IGFyZ3VtZW50cyBhcmUgYmVpbmcgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24/IEtub3dpbmcgdGhlIGFyZ3VtZW50cyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB3aGF0IGRhdGEgaXMgYmVpbmcgdXNlZCB0byBtYWtlIHRoZSBsb29rdXAuCiogICAqKkNvbmRpdGlvbmFsIFVzZToqKiBJcyB0aGUgY2FsbCB0byBgb3BzLSZndDttYXBfZ2VuX2xvb2t1cGAgYWx3YXlzIGV4ZWN1dGVkLCBvciBpcyB0aGVyZSBhIHNwZWNpZmljIGNvbmRpdGlvbiB0aGF0IHRyaWdnZXJzIGl0PyBJZiBzbywgd2hhdCBpcyB0aGUgY29uZGl0aW9uPyBBcmUgdGhlcmUgc3BlY2lmaWMgQlBGIGluc3RydWN0aW9uIHR5cGVzLCBtYXAgdHlwZXMsIG9yIHByb2dyYW0gY2hhcmFjdGVyaXN0aWNzIHRoYXQgbGVhZCB0byBpdD8KKiAgICoqUHVycG9zZToqKiBXaGF0IGlzIHRoZSBpbnRlbnQgb2YgdGhlIGNhbGw/IFdoYXQgaXMgdGhlIGxvb2t1cCAqZm9yKj8gSXMgaXQgZm9yIGRhdGEgdmFsaWRhdGlvbiwgY29kZSBnZW5lcmF0aW9uLCBvcHRpbWl6YXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PwoqICAgKipFcnJvciBIYW5kbGluZzoqKiBIb3cgZG9lcyB0aGUgY29kZSBoYW5kbGUgYW55IGZhaWx1cmVzIG9yIGVycm9ycyB0aGF0IG1pZ2h0IG9jY3VyIHdpdGhpbiB0aGUgYG9wcy0mZ3Q7bWFwX2dlbl9sb29rdXBgIGZ1bmN0aW9uPyBBcmUgdGhlcmUgYW55IHJldHVybiB2YWx1ZXMgb3IgZXJyb3IgY29kZXMgdG8gbG9vayBvdXQgZm9yPwoKQnkgY2FyZWZ1bGx5IGV4YW1pbmluZyB0aGUgY29kZSBpbiBgZml4dXBzLmNgLCBJJiMzOTtsbCBnZXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWFwX2dlbl9sb29rdXBgIGNvbnRyaWJ1dGVzIHRvIHRoZSB2ZXJpZmllciYjMzk7cyBmaXh1cCBvcGVyYXRpb25zLiBUaGVuLCBJIGNhbiBpbnRlZ3JhdGUgaXQgd2l0aCBteSBjdXJyZW50IGtub3dsZWRnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2ZpeHVwcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDY1Olx0XG4yMDY2Olx0XHRcdFx0bWFwX3B0ciA9IGF1eC1cdTAwM2VtYXBfcHRyX3N0YXRlLm1hcF9wdHI7XG4yMDY3Olx0XHRcdFx0b3BzID0gbWFwX3B0ci1cdTAwM2VvcHM7XG4yMDY4Olx0XHRcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9GVU5DX21hcF9sb29rdXBfZWxlbSBcdTAwMjZcdTAwMjZcbjIwNjk6XHRcdFx0XHQgICAgb3BzLVx1MDAzZW1hcF9nZW5fbG9va3VwKSB7XG4yMDcwOlx0XHRcdFx0XHRjbnQgPSBvcHMtXHUwMDNlbWFwX2dlbl9sb29rdXAobWFwX3B0ciwgaW5zbl9idWYpO1xuMjA3MTpcdFx0XHRcdFx0aWYgKGNudCA9PSAtRU9QTk9UU1VQUClcbjIwNzI6XHRcdFx0XHRcdFx0Z290byBwYXRjaF9tYXBfb3BzX2dlbmVyaWM7XG4yMDczOlx0XHRcdFx0XHRpZiAoY250IFx1MDAzYz0gMCB8fCBjbnQgXHUwMDNlPSBJTlNOX0JVRl9TSVpFKSB7XG4yMDc0Olx0XHRcdFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0OyVkIGluc25zIGdlbmVyYXRlZCBmb3IgbWFwIGxvb2t1cFwmIzM0OywgY250KTtcbjIwNzU6XHRcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4yMDc2Olx0XHRcdFx0XHR9XG4yMDc3Olx0XG4yMDc4Olx0XHRcdFx0XHRpZiAoYnBmX21hcF9pc19wZXJjcHVfbWFwKG1hcF9wdHItXHUwMDNlbWFwX3R5cGUpKVxuMjA3OTpcdFx0XHRcdFx0XHRwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XG4yMDgwOlx0XG4yMDgxOlx0XHRcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLFxuMjA4MjpcdFx0XHRcdFx0XHRcdFx0ICAgICAgIGluc25fYnVmLCBjbnQpO1xuMjA4MzpcdFx0XHRcdFx0aWYgKCFuZXdfcHJvZylcbjIwODQ6XHRcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMDg1Olx0XG4yMDg2Olx0XHRcdFx0XHRkZWx0YSAgICAmIzQzOz0gY250IC0gMTtcbjIwODc6XHRcdFx0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZyA9IG5ld19wcm9nO1xuMjA4ODpcdFx0XHRcdFx0aW5zbiAgICAgID0gbmV3X3Byb2ctXHUwMDNlaW5zbnNpICYjNDM7IGkgJiM0MzsgZGVsdGE7XG4yMDg5Olx0XHRcdFx0XHRnb3RvIG5leHRfaW5zbjtcbjIwOTA6XHRcdFx0XHR9XG4yMDkxOlx0XG4yMDkyOlx0XHRcdFx0QlVJTERfQlVHX09OKCFfX3NhbWVfdHlwZShvcHMtXHUwMDNlbWFwX2xvb2t1cF9lbGVtLFxuMjA5MzpcdFx0XHRcdFx0ICAgICAodm9pZCAqKCopKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkpTlVMTCkpO1xuMjA5NDpcdFx0XHRcdEJVSUxEX0JVR19PTighX19zYW1lX3R5cGUob3BzLVx1MDAzZW1hcF9kZWxldGVfZWxlbSxcbjIwOTU6XHRcdFx0XHRcdCAgICAgKGxvbmcgKCopKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkpTlVMTCkpO1xuMjA5NjpcdFx0XHRcdEJVSUxEX0JVR19PTighX19zYW1lX3R5cGUob3BzLVx1MDAzZW1hcF91cGRhdGVfZWxlbSxcbjIwOTc6XHRcdFx0XHRcdCAgICAgKGxvbmcgKCopKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4yMDk4Olx0XHRcdFx0XHRcdCAgICAgIHU2NCBmbGFncykpTlVMTCkpO1xuMjA5OTpcdFx0XHRcdEJVSUxEX0JVR19PTighX19zYW1lX3R5cGUob3BzLVx1MDAzZW1hcF9wdXNoX2VsZW0sXG4yMTAwOlx0XHRcdFx0XHQgICAgIChsb25nICgqKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSxcbjIxMDE6XHRcdFx0XHRcdFx0ICAgICAgdTY0IGZsYWdzKSlOVUxMKSk7XG4yMTAyOlx0XHRcdFx0QlVJTERfQlVHX09OKCFfX3NhbWVfdHlwZShvcHMtXHUwMDNlbWFwX3BvcF9lbGVtLFxuMjEwMzpcdFx0XHRcdFx0ICAgICAobG9uZyAoKikoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUpKU5VTEwpKTtcbjIxMDQ6XHRcdFx0XHRCVUlMRF9CVUdfT04oIV9fc2FtZV90eXBlKG9wcy1cdTAwM2VtYXBfcGVla19lbGVtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYyMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgYHhza19tYXBfZ2VuX2xvb2t1cGAgaW4gWERQL1hTSyBNYXAgT3BlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBuZXQveGRwL3hza21hcC5jYC4gQSBxdWljayBjaGVjayBjb25maXJtcyBpdDogYHN0YXRpYyBpbnQgeHNrX21hcF9nZW5fbG9va3VwKC4uLilgLiBOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgaG93IHRoaXMgaW1wYWN0cyBzeW1ib2wgdGFyZ2V0aW5nLCBlc3BlY2lhbGx5IGdpdmVuIG91ciBmb2N1cyBvbiBzcGVjaWZpYyBsb2dpYyBjaGFuZ2VzLgoKVGhlIGRvY3VtZW50YXRpb24mIzM5O3MgU2VjdGlvbiA0IGlzIGtleSBoZXJlLiBJdCBkaXN0aW5ndWlzaGVzIGJldHdlZW4gc3RhdGljIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyAod2hpY2ggdHlwaWNhbGx5IGhhdmUgc3ltYm9sIGVudHJpZXMgaW4gYGthbGxzeW1zYCBvciBgdm1saW51eGApIGFuZCBzdGF0aWMgaW5saW5lcyBpbiBoZWFkZXJzICguaCksIHdoaWNoIGFyZSBnZW5lcmFsbHkgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGxhY2sgZGlzdGluY3Qgc3ltYm9scy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyBzdWJqZWN0IHRvIGlubGluaW5nLgoKQWgsIGJ1dCB3YWl0ISBUaGUgY3J1Y2lhbCBkZXRhaWwgaXMgdGhhdCBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyBhc3NpZ25lZCB0byBgeHNrX21hcF9vcHMubWFwX2dlbl9sb29rdXBgLCBhIGZ1bmN0aW9uIHBvaW50ZXIuIFRoaXMgbWVhbnMgdGhlIGNvbXBpbGVyICpjYW5ub3QqIGNvbXBsZXRlbHkgaW5saW5lIGl0IGF3YXksIGFzIGl0cyBhZGRyZXNzIGlzIHRha2VuIGFuZCB1c2VkIHdpdGhpbiBgeHNrX21hcF9vcHNgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgc3VnZ2VzdHMgYSBzeW1ib2wgZXhpc3RzIGFuZCBpcyB0aGVyZWZvcmUgdGFyZ2V0YWJsZS4KClRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIG5lZWQgdG8gY29uc2lkZXIgcmVsYXRlZCBmdW5jdGlvbnMgYW5kIHBvdGVudGlhbCBjYWxsZXJzIHdpdGhpbiBgbmV0L3hkcC94c2ttYXAuY2AuIExldCBtZSBsaXN0IHRob3NlIEkga25vdyBvZjogYHhza19tYXBfZ2VuX2xvb2t1cGAsIGB4c2tfbWFwX2FsbG9jYCwgYHhza19tYXBfbm9kZV9hbGxvY2AsIGB4c2tfbWFwX2xvb2t1cF9lbGVtYCwgYHhza19tYXBfdXBkYXRlX2VsZW1gLCBhbmQgYHhza19tYXBfZGVsZXRlX2VsZW1gLiBJIG5lZWQgdG8gcmV2aWV3IHRoZXNlIGZ1bmN0aW9ucyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIEZpbmFsbHksIEkgd2lsbCB2ZXJpZnkgdGhlIGV4aXN0aW5nIHN5bWJvbHMgaW4gYG5ldC94ZHAveHNrbWFwLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdH1cbiAyNTE6XHRcbiAyNTI6XHR2b2lkIHhza19tYXBfdHJ5X3NvY2tfZGVsZXRlKHN0cnVjdCB4c2tfbWFwICptYXAsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gMjUzOlx0XHRcdFx0ICAgICBzdHJ1Y3QgeGRwX3NvY2sgX19yY3UgKiptYXBfZW50cnkpXG4gMjU0Olx0e1xuIDI1NTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm1hcC1cdTAwM2Vsb2NrKTtcbiAyNTY6XHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoKm1hcF9lbnRyeSkgPT0geHMpIHtcbiAyNTc6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCptYXBfZW50cnksIE5VTEwpO1xuIDI1ODpcdFx0XHR4c2tfbWFwX3NvY2tfZGVsZXRlKHhzLCBtYXBfZW50cnkpO1xuIDI1OTpcdFx0fVxuIDI2MDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bWFwLVx1MDAzZWxvY2spO1xuIDI2MTpcdH1cbiAyNjI6XHRcbiAyNjM6XHRzdGF0aWMgYm9vbCB4c2tfbWFwX21ldGFfZXF1YWwoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1ldGEwLFxuIDI2NDpcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWV0YTEpXG4gMjY1Olx0e1xuIDI2NjpcdFx0cmV0dXJuIG1ldGEwLVx1MDAzZW1heF9lbnRyaWVzID09IG1ldGExLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAyNlx1MDAyNlxuIDI2NzpcdFx0XHRicGZfbWFwX21ldGFfZXF1YWwobWV0YTAsIG1ldGExKTtcbiAyNjg6XHR9XG4gMjY5Olx0XG4gMjcwOlx0QlRGX0lEX0xJU1RfU0lOR0xFKHhza19tYXBfYnRmX2lkcywgc3RydWN0LCB4c2tfbWFwKVxuIDI3MTpcdGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyB4c2tfbWFwX29wcyA9IHtcbiAyNzI6XHRcdC5tYXBfbWV0YV9lcXVhbCA9IHhza19tYXBfbWV0YV9lcXVhbCxcbiAyNzM6XHRcdC5tYXBfYWxsb2MgPSB4c2tfbWFwX2FsbG9jLFxuIDI3NDpcdFx0Lm1hcF9mcmVlID0geHNrX21hcF9mcmVlLFxuIDI3NTpcdFx0Lm1hcF9nZXRfbmV4dF9rZXkgPSB4c2tfbWFwX2dldF9uZXh0X2tleSxcbiAyNzY6XHRcdC5tYXBfbG9va3VwX2VsZW0gPSB4c2tfbWFwX2xvb2t1cF9lbGVtLFxuIDI3NzpcdFx0Lm1hcF9nZW5fbG9va3VwID0geHNrX21hcF9nZW5fbG9va3VwLFxuIDI3ODpcdFx0Lm1hcF9sb29rdXBfZWxlbV9zeXNfb25seSA9IHhza19tYXBfbG9va3VwX2VsZW1fc3lzX29ubHksXG4gMjc5Olx0XHQubWFwX3VwZGF0ZV9lbGVtID0geHNrX21hcF91cGRhdGVfZWxlbSxcbiAyODA6XHRcdC5tYXBfZGVsZXRlX2VsZW0gPSB4c2tfbWFwX2RlbGV0ZV9lbGVtLFxuIDI4MTpcdFx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxuIDI4MjpcdFx0Lm1hcF9tZW1fdXNhZ2UgPSB4c2tfbWFwX21lbV91c2FnZSxcbiAyODM6XHRcdC5tYXBfYnRmX2lkID0gXHUwMDI2eHNrX21hcF9idGZfaWRzWzBdLFxuIDI4NDpcdFx0Lm1hcF9yZWRpcmVjdCA9IHhza19tYXBfcmVkaXJlY3QsXG4gMjg1Olx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNzQKCQkJCQkJCW91dHB1dDogMTM1CgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiAgSSBzZWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYEVuYWJsZUNvbmZpZ3NgLCBzcGVjaWZpY2FsbHkgYFhEUF9TT0NLRVRTYCBhbmQsIGJlY2F1c2UgaXQmIzM5O3MgYSBkZXBlbmRlbmN5LCBgQlBGX1NZU0NBTExgLiBHb29kLiBUaGVzZSBhcmUgdGhlIHJpZ2h0IHN0YXJ0aW5nIHBvaW50cy4gYEJQRl9TWVNDQUxMYCBpcyBhIGNvcmUgQlBGIGNvbmZpZywgYW5kIGBYRFBfU09DS0VUU2AgaXMsIG9mIGNvdXJzZSwgdGhlIGtleSBmb3IgWFNLIGFuZCBgeHNrbWFwLmNgLgoKTm93LCBJJiMzOTtsbCBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9sKHMpLiBMb29raW5nIGF0IGBGb2N1c1N5bWJvbHNgLCBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyB0aGUgcGlucG9pbnQuIEkgY291bGQgcG90ZW50aWFsbHkgYnJvYWRlbiB0aGUgc2NvcGUgdG8gaW5jbHVkZSB0aGluZ3MgbGlrZSBgYnBmX2RvX21pc2NfZml4dXBzYCBvciBgeHNrX21hcF9hbGxvY2AsIGJ1dCBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyB2ZXJ5IHNwZWNpZmljLiBTdGljayB3aXRoIHRoYXQgZm9jdXMuCgpUaW1lIGZvciB0aGUgY3J1Y2lhbCBgV29ydGhGdXp6aW5nYCBkb3VibGUtY2hlY2suICBMZXQmIzM5O3Mgc2VlOgoKKiAgICoqQ29yZSBTdWJzeXN0ZW06KiogSXQgaW52b2x2ZXMgQlBGIGFuZCBYRFAgbmV0d29ya2luZywgc28geWVzLCB0aGlzIGlzIGFic29sdXRlbHkgZm91bmRhdGlvbmFsLgoqICAgKipJbnN0cnVjdGlvbiBHZW5lcmF0aW9uIExvZ2ljOioqIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBmb3IgSklUL2lubGluZWQgbWFwIGxvb2t1cHMgd2l0aGluIFhTS01BUCwgc3BlY2lmaWNhbGx5IHN3aXRjaGluZyBmcm9tIGBCUEZfSk1QX0lNTWAgdG8gYEJQRl9KTVAzMl9JTU1gLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIGhvdyBieXRlY29kZSBpcyBwcm9kdWNlZC4KKiAgICoqUmVhY2hhYmxlIFBhdGg6KiogIEl0JiMzOTtzIHRyaWdnZXJlZCB0aHJvdWdoIHRoZSBCUEYgc3lzY2FsbCB3aGVuIGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSB3aXRoIFhTS01BUCBtYXAgbG9va3Vwcy4gVGhhdCYjMzk7cyBhIHN0YW5kYXJkIGFjY2VzcyBwb2ludC4KKiAgICoqQ29uY2x1c2lvbjoqKiBUaGlzIGlzICpjbGVhcmx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIGluIGEgc2Vuc2l0aXZlIGFyZWEgdGhhdOKAmXMgcmVhZGlseSBhY2Nlc3NpYmxlLgoKT2theSwgbGV0JiMzOTtzIGZvcm1hbGl6ZSB0aGUgcmVhc29uaW5nOiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgaW5zdHJ1Y3Rpb24gZW1pc3Npb24gZm9yIFhTS01BUCBsb29rdXBzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGB4c2tfbWFwX2dlbl9sb29rdXBgLiBJbnN0ZWFkIG9mIHVzaW5nIDY0LWJpdCBqdW1wcyAoYEJQRl9KTVBfSU1NYCksIGl0JiMzOTtzIG5vdyBnZW5lcmF0aW5nIDMyLWJpdCBqdW1wcyAoYEJQRl9KTVAzMl9JTU1gKS4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIGhvdyBCUEYgYnl0ZWNvZGUgaXMgZ2VuZXJhdGVkIGFuZCBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiBBRl9YRFAgbWFwcy4gR2l2ZW4gdGhhdCB0aGVzZSBtYXBzIGFyZSBhY2Nlc3NpYmxlIGV2ZW4gaW4gYSB2YW5pbGxhIFFFTVUgZW52aXJvbm1lbnQsIGZ1enppbmcgdGhlIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGV4ZWN1dGlvbiBpbnZvbHZpbmcgWFNLTUFQcyBoYXMgYSBoaWdoIHByb2JhYmlsaXR5IG9mIHVuY292ZXJpbmcgcmVncmVzc2lvbnMgb3IgcmV2ZWFsaW5nIHVuZXhwZWN0ZWQgdmVyaWZpZXIgb3IgZXhlY3V0aW9uIGJlaGF2aW9yLiBUaGF0JiMzOTtzIGEgY2xlYXIgd2luLgoKUmlnaHQsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4c2tfbWFwX2dlbl9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgeHNrX21hcF9nZW5fbG9va3VwKCkgaW4gbmV0L3hkcC94c2ttYXAuYyBieSBjaGFuZ2luZyB0aGUgZW1pdHRlZCBsb29rdXAgaW5zdHJ1Y3Rpb24gZnJvbSBCUEZfSk1QX0lNTSB0byBCUEZfSk1QMzJfSU1NIHdoZW4gdmVyaWZ5aW5nIGFuZCBpbmxpbmluZyBYU0tNQVAgbG9va3Vwcy4gVGhpcyBtb2RpZmllcyBleGVjdXRhYmxlIGxvZ2ljIGluIHRoZSBCUEYvWERQIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX21hcF9nZW5fbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHhza19tYXBfZ2VuX2xvb2t1cCgpIGluIG5ldC94ZHAveHNrbWFwLmMgYnkgY2hhbmdpbmcgdGhlIGVtaXR0ZWQgbG9va3VwIGluc3RydWN0aW9uIGZyb20gQlBGX0pNUF9JTU0gdG8gQlBGX0pNUDMyX0lNTSB3aGVuIHZlcmlmeWluZyBhbmQgaW5saW5pbmcgWFNLTUFQIGxvb2t1cHMuIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgQlBGL1hEUCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBhIDY0LWJpdCBqdW1wIGluc3RydWN0aW9uIChCUEZfSk1QX0lNTSkgdG8gYSAzMi1iaXQganVtcCBpbnN0cnVjdGlvbiAoQlBGX0pNUDMyX0lNTSkgaW4geHNrX21hcF9nZW5fbG9va3VwKCkgd2hlbiBpbmxpbmluZyBCUEYgaW5zdHJ1Y3Rpb25zIGZvciBYU0sgbWFwIGVsZW1lbnQgbG9va3Vwcy4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgdG91Y2ggbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1ZyBpbnZvbHZpbmcgaW5jb3JyZWN0IGJyYW5jaCBvZmZzZXRzIG9yIGluZGV4aW5nIHdvdWxkIHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB1bmV4cGVjdGVkIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNWJjN2E3ZDIwMDFiZmY1MjY3OWYxNDBhNTY5NGQzNzBiNGJhMjMzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMTg6MjM6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGRwL3hza21hcC5jIGIvbmV0L3hkcC94c2ttYXAuYwppbmRleCAzYmZmMzQ2MzA4ZDBmLi5iZjAwZDY0NjNjMTkxIDEwMDY0NAotLS0gYS9uZXQveGRwL3hza21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrbWFwLmMKQEAgLTEyNCw3ICYjNDM7MTI0LDcgQEAgc3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZikKIAlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjsKIAogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCByZXQsIGluZGV4LCAwKTsKLQkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkdFLCByZXQsIG1hcC0mZ3Q7bWF4X2VudHJpZXMsIDUpOwomIzQzOwkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QMzJfSU1NKEJQRl9KR0UsIHJldCwgbWFwLSZndDttYXhfZW50cmllcywgNSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfTFNILCByZXQsIGlsb2cyKHNpemVvZihzdHJ1Y3QgeHNrX3NvY2sgKikpKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIG1wLCBvZmZzZXRvZihzdHJ1Y3QgeHNrX21hcCwgeHNrX21hcCkpOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9SRUcoQlBGX0FERCwgcmV0LCBtcCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjMxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhbiBYRFAgTWFwIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gVGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gd2l0aGluIGBuZXQveGRwL3hza21hcC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHhza19tYXBfZ2VuX2xvb2t1cGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBhZGp1c3RtZW50IHRvIHRoZSBCUEYgaW5zdHJ1Y3Rpb25zLgoKTG9va2luZyBhdCB0aGUgZGlmZiwgdGhlIGNoYW5nZSBpcyBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LiBXZSYjMzk7dmUgc3dpdGNoZWQgZnJvbSB1c2luZyBgQlBGX0pNUF9JTU1gIHRvIGBCUEZfSk1QMzJfSU1NYCBpbiB0aGUgY29tcGFyaXNvbiBpbnN0cnVjdGlvbi4gVGhpcyBqdW1wIGlzIGNvbmRpdGlvbmFsLCBhbmQgdGhlIGtleSBpcyB0aGUgc2l6ZSBvZiBgcmV0YCBhZ2FpbnN0IGBtYXAtJmd0O21heF9lbnRyaWVzYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiAqd2h5KiB0aGUgY2hhbmdlIGZyb20gYSA2NC1iaXQganVtcCB0byBhIDMyLWJpdCBvbmUgaGVyZT8gSXMgdGhlcmUgc29tZSBvcHRpbWl6YXRpb24sIG9yIGlzIGl0IGEgYnVnIGZpeD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgdHlwZXMgaW52b2x2ZWQuICBBcmUgd2Ugbm93IGV4cGVjdGluZyAzMi1iaXQgdmFsdWVzIGluc3RlYWQgb2YgNjQtYml0IGZvciBzb21lIHJlYXNvbj8gR2l2ZW4gdGhhdCB3ZSBhcmUgaW5kZXhpbmcgaW50byBhbiBhcnJheSBvZiBwb2ludGVycyB0byBgeHNrX3NvY2tgLCBJIHByZXN1bWUgYHJldGAgaXMgYW4gaW5kZXgsIHdoaWNoIGlzIHVzdWFsbHkgYSAzMi1iaXQgcXVhbnRpdHksIGJ1dCBpdCBzdGlsbCBtYWtlcyBtZSBhc2sgd2h5IHdlJiMzOTtyZSBzZWVpbmcgdGhlIGNoYW5nZS4KCkkmIzM5O2xsIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGluIHRoZSBmaWxlLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlbnQgb2YgYHhza19tYXBfZ2VuX2xvb2t1cGAgd2lsbCBiZSBjcnVjaWFsLiBXaGF0JiMzOTtzIHRoZSBtYXAmIzM5O3Mgcm9sZSBpbiB0aGUgWERQIGZyYW1ld29yaz8gSXMgdGhpcyBsb29rdXAgcGVyZm9ybWluZyBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGFycmF5IGluZGV4PyBJcyB0aGlzIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSByZWNlbnQgMzIvNjQgYml0IHBvaW50ZXIgc2l6ZSBkaXNjdXNzaW9ucz8KClVsdGltYXRlbHksIHRoZSBnb2FsIGlzIHRvIGNvbmZpcm0gdGhhdCB0aGUgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGNvcnJlY3QgZm9yIGJvdGggMzItYml0IGFuZCA2NC1iaXQgYXJjaGl0ZWN0dXJlcywgYW5kIGRvZXNuJiMzOTt0IGJyZWFrIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBvZiB0aGUgWERQIG1hcC4gSSYjMzk7bGwgcHJvYmFibHkgYWxzbyB3YW50IHRvIHJldmlldyB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiB0byBzZWUgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hkcC94c2ttYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0XHRpZiAoaW5kZXggPT0gbS1cdTAwM2VtYXAubWF4X2VudHJpZXMgLSAxKVxuIDExNjpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAxMTc6XHRcdCpuZXh0ID0gaW5kZXggJiM0MzsgMTtcbiAxMTg6XHRcdHJldHVybiAwO1xuIDExOTpcdH1cbiAxMjA6XHRcbiAxMjE6XHRzdGF0aWMgaW50IHhza19tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIDEyMjpcdHtcbiAxMjM6XHRcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzAsIG1wID0gQlBGX1JFR18xLCBpbmRleCA9IEJQRl9SRUdfMjtcbiAxMjQ6XHRcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xuIDEyNTpcdFxuIDEyNjpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHJldCwgaW5kZXgsIDApO1xuIDEyNzpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUDMyX0lNTShCUEZfSkdFLCByZXQsIG1hcC1cdTAwM2VtYXhfZW50cmllcywgNSk7XG4gMTI4Olx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9MU0gsIHJldCwgaWxvZzIoc2l6ZW9mKHN0cnVjdCB4c2tfc29jayAqKSkpO1xuIDEyOTpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBtcCwgb2Zmc2V0b2Yoc3RydWN0IHhza19tYXAsIHhza19tYXApKTtcbiAxMzA6XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9SRUcoQlBGX0FERCwgcmV0LCBtcCk7XG4gMTMxOlx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfU0laRU9GKHN0cnVjdCB4c2tfc29jayAqKSwgcmV0LCByZXQsIDApO1xuIDEzMjpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcbiAxMzM6XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9NT1Y2NF9JTU0ocmV0LCAwKTtcbiAxMzQ6XHRcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4gMTM1Olx0fVxuIDEzNjpcdFxuIDEzNzpcdC8qIEVsZW1lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IFJDVTsgZWl0aGVyIGJ5IHJjdV9yZWFkX2xvY2soKSAoZnJvbSBzeXNjYWxsKSBvclxuIDEzODpcdCAqIGJ5IGxvY2FsX2JoX2Rpc2FibGUoKSAoZnJvbSBYRFAgY2FsbHMgaW5zaWRlIE5BUEkpLiBUaGVcbiAxMzk6XHQgKiByY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSBiZWxvdyBtYWtlcyBsb2NrZGVwIGFjY2VwdCBib3RoLlxuIDE0MDpcdCAqL1xuIDE0MTpcdHN0YXRpYyB2b2lkICpfX3hza19tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSlcbiAxNDI6XHR7XG4gMTQzOlx0XHRzdHJ1Y3QgeHNrX21hcCAqbSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCB4c2tfbWFwLCBtYXApO1xuIDE0NDpcdFxuIDE0NTpcdFx0aWYgKGtleSBcdTAwM2U9IG1hcC1cdTAwM2VtYXhfZW50cmllcylcbiAxNDY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMTQ3Olx0XG4gMTQ4Olx0XHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKG0tXHUwMDNleHNrX21hcFtrZXldLCByY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSk7XG4gMTQ5Olx0fVxuIDE1MDpcdFxuIDE1MTpcdHN0YXRpYyB2b2lkICp4c2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiAxNTI6XHR7XG4gMTUzOlx0XHRyZXR1cm4gX194c2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xuIDE1NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkzNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJQRiBMb29rdXAgR2VuZXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHhza19tYXBfZ2VuX2xvb2t1cGAgZnVuY3Rpb24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdHMgam9iIGlzIHRvIGR5bmFtaWNhbGx5IGdlbmVyYXRlIHRoZSBpbmxpbmUgQlBGIGluc3RydWN0aW9ucyBuZWNlc3NhcnkgZm9yIGxvb2tpbmcgdXAgYW4gZWxlbWVudCB3aXRoaW4gYW4gYHhza19tYXBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGlzIGNvZGUgY2hhbmdlIGFuZCB3aHkgaXQgd2FzIG1hZGUuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBhdCB0aGUgdHJhbnNpdGlvbi4gTGluZSAxMjYgdXNlcyBgQlBGX0xEWF9NRU0oQlBGX1csIHJldCwgaW5kZXgsIDApYCB0byBsb2FkIHRoZSBgdTMyYCBrZXkgaW50byBgcmV0YC4gQmVmb3JlLCB0aGUgY29tcGFyaXNvbiB3YXMgZG9uZSBvbiB0aGUgNjQtYml0IHZhbHVlIHZpYSBgQlBGX0pNUF9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtJmd0O21heF9lbnRyaWVzLCA1KWAuIE5vdywgaXQmIzM5O3MgZG9uZSB2aWEgYEJQRl9KTVAzMl9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtJmd0O21heF9lbnRyaWVzLCA1KWAsIGNvbXBhcmluZyB0aGUgMzItYml0IGltbWVkaWF0ZS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgMzItYml0IGNvbXBhcmlzb24gd2FzIGludHJvZHVjZWQuIFBlcmhhcHMgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUsIG9yIHNvbWUgb3B0aW1pemF0aW9uLiBUbyBnZXQgYSBiZXR0ZXIgY29udGV4dCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgb3RoZXIgaW5zdGFuY2VzIG9mIGBtYXBfZ2VuX2xvb2t1cGAgd2l0aGluIHRoZSBrZXJuZWwgdG8gc2VlIGlmIHRoZXJlIGFyZSBzaW1pbGFyIGNoYW5nZXMgb3IgcGF0dGVybnMgdGhhdCBjb3VsZCBwcm92aWRlIHNvbWUgaW5zaWdodC4gUGVyaGFwcyB0aGVyZSBpcyBhIHBhdGNoIHNlcmllcyB0aGF0IGNvdmVycyB0aGlzIGNoYW5nZSBpbiBtb3JlIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX0pNUDMyX0lNTS4qbWF4X2VudHJpZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2ttYXAuYz0xMjE9c3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5uZXQveGRwL3hza21hcC5jLTEyNi1cdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCByZXQsIGluZGV4LCAwKTtcbm5ldC94ZHAveHNrbWFwLmM6MTI3Olx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUDMyX0lNTShCUEZfSkdFLCByZXQsIG1hcC1cdTAwM2VtYXhfZW50cmllcywgNSk7XG5uZXQveGRwL3hza21hcC5jLTEyOC1cdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0xTSCwgcmV0LCBpbG9nMihzaXplb2Yoc3RydWN0IHhza19zb2NrICopKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2ODAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IGlzOgoKKipIdW50aW5nIERvd24gYF9nZW5fbG9va3VwYCBJbXBsZW1lbnRhdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBwbGFjZXMgd2hlcmUgYF9nZW5fbG9va3VwYCBpcyBhY3R1YWxseSAqaW1wbGVtZW50ZWQqIHdpdGhpbiB0aGUga2VybmVsLiBJIGtub3cgaXQmIzM5O3MgcHJvYmFibHkgYXNzb2NpYXRlZCB3aXRoIEJQRiwgZ2l2ZW4gaXRzIG5hbWUsIHNvIEkgc2hvdWxkIGRlZmluaXRlbHkgc3RhcnQgYnkgZGlnZ2luZyB0aHJvdWdoIHRoZSBga2VybmVsL2JwZmAgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIGEgbGlrZWx5IGNhbmRpZGF0ZS4gQmV5b25kIHRoYXQsIEkgcmVtZW1iZXIgc2VlaW5nIHNpbWlsYXIgbG9va3VwIG1lY2hhbmlzbXMgcG90ZW50aWFsbHkgaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFNwZWNpZmljYWxseSwgSSByZWNhbGwgc29tZSBmaWx0ZXIgbG9naWMgaGFuZ2luZyBhcm91bmQgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBJdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gd2lkZW4gdGhlIG5ldCwgc28gdG8gc3BlYWsuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGEgYnJvYWQgc2VhcmNoIGFjcm9zcyB0aGVzZSBhcmVhcyB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHR1cm5zIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfZ2VuX2xvb2t1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTg3PXN0cnVjdCBicGZfbWFwX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0xMjYtXHR2b2lkICgqbWFwX2ZkX3B1dF9wdHIpKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnB0ciwgYm9vbCBuZWVkX2RlZmVyKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MTI3Olx0aW50ICgqbWFwX2dlbl9sb29rdXApKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpO1xuaW5jbHVkZS9saW51eC9icGYuaC0xMjgtXHR1MzIgKCptYXBfZmRfc3lzX2xvb2t1cF9lbGVtKSh2b2lkICpwdHIpO1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0yMDE9c3RhdGljIGludCBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGltbSxcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjE3LS8qIGVtaXQgQlBGIGluc3RydWN0aW9ucyBlcXVpdmFsZW50IHRvIEMgY29kZSBvZiBhcnJheV9tYXBfbG9va3VwX2VsZW0oKSAqL1xua2VybmVsL2JwZi9hcnJheW1hcC5jOjIxODpzdGF0aWMgaW50IGFycmF5X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjE5LXtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9Mjc3PXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW1tLCB1MzIgKm9mZilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjkzLS8qIGVtaXQgQlBGIGluc3RydWN0aW9ucyBlcXVpdmFsZW50IHRvIEMgY29kZSBvZiBwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKCkgKi9cbmtlcm5lbC9icGYvYXJyYXltYXAuYzoyOTQ6c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yOTUte1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz04NTk9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg2OC1cdC5tYXBfZGVsZXRlX2VsZW0gPSBhcnJheV9tYXBfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODY5Olx0Lm1hcF9nZW5fbG9va3VwID0gYXJyYXlfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODcwLVx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcixcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODg2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODkyLVx0Lm1hcF9sb29rdXBfZWxlbSA9IHBlcmNwdV9hcnJheV9tYXBfbG9va3VwX2VsZW0sXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODkzOlx0Lm1hcF9nZW5fbG9va3VwID0gcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg5NC1cdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNDY0PXN0YXRpYyB2b2lkICphcnJheV9vZl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDczLVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE0NzQ6c3RhdGljIGludCBhcnJheV9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0NzUtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNTA1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9vZl9tYXBzX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE1MTQtXHQubWFwX2ZkX3N5c19sb29rdXBfZWxlbSA9IGJwZl9tYXBfZmRfc3lzX2xvb2t1cF9lbGVtLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE1MTU6XHQubWFwX2dlbl9sb29rdXAgPSBhcnJheV9vZl9tYXBfZ2VuX2xvb2t1cCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE2LVx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xNTEzPWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNDctXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwNDg6XHRcdC8qIEJQRl9FTUlUX0NBTEwoKSBhc3N1bXB0aW9ucyBpbiBzb21lIG9mIHRoZSBtYXBfZ2VuX2xvb2t1cFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDQ5LVx0XHQgKiBhbmQgb3RoZXIgaW5saW5pbmcgaGFuZGxlcnMgYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIDY0IGJpdFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjA2OC1cdFx0XHRpZiAoaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0ZVTkNfbWFwX2xvb2t1cF9lbGVtIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9maXh1cHMuYzoyMDY5Olx0XHRcdCAgICBvcHMtXHUwMDNlbWFwX2dlbl9sb29rdXApIHtcbmtlcm5lbC9icGYvZml4dXBzLmM6MjA3MDpcdFx0XHRcdGNudCA9IG9wcy1cdTAwM2VtYXBfZ2VuX2xvb2t1cChtYXBfcHRyLCBpbnNuX2J1Zik7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNzEtXHRcdFx0XHRpZiAoY250ID09IC1FT1BOT1RTVVBQKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTcxNT1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX251bGxzX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTczNS0gKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFkanVzdGVkIGJ5IEJQRiBpbnN0cnVjdGlvbnNcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjczNjogKiBpbiBodGFiX21hcF9nZW5fbG9va3VwKCkuXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy03MzctICovXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9NzU4PXN0YXRpYyB2b2lkICpodGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtNzc4LSAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6Nzc5OnN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxua2VybmVsL2JwZi9oYXNodGFiLmMtNzgwLXtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz04MTM9c3RhdGljIHZvaWQgKmh0YWJfbHJ1X21hcF9sb29rdXBfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTgxNy1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjgxODpzdGF0aWMgaW50IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy04MTktXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIzNjE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzcxLVx0Lm1hcF9kZWxldGVfZWxlbSA9IGh0YWJfbWFwX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM3MjpcdC5tYXBfZ2VuX2xvb2t1cCA9IGh0YWJfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzczLVx0Lm1hcF9zZXFfc2hvd19lbGVtID0gaHRhYl9tYXBfc2VxX3Nob3dfZWxlbSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzgzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzOTQtXHQubWFwX2RlbGV0ZV9lbGVtID0gaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM5NTpcdC5tYXBfZ2VuX2xvb2t1cCA9IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5Ni1cdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjQwNz1zdGF0aWMgdm9pZCAqaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDE3LS8qIGlubGluZSBicGZfbWFwX2xvb2t1cF9lbGVtKCkgY2FsbCBmb3IgcGVyLUNQVSBoYXNobWFwICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDE4OnN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MTkte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI1NjQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfcGVyY3B1X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjU3MC1cdC5tYXBfbG9va3VwX2VsZW0gPSBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTcxOlx0Lm1hcF9nZW5fbG9va3VwID0gaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTcyLVx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtID0gaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0sXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjY5OD1zdGF0aWMgdm9pZCAqaHRhYl9vZl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3MDctXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzA4OnN0YXRpYyBpbnQgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjcwOS1cdFx0XHRcdCAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzMyPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX29mX21hcHNfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzQxLVx0Lm1hcF9mZF9zeXNfbG9va3VwX2VsZW0gPSBicGZfbWFwX2ZkX3N5c19sb29rdXBfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3NDI6XHQubWFwX2dlbl9sb29rdXAgPSBodGFiX29mX21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc0My1cdC5tYXBfY2hlY2tfYnRmID0gbWFwX2NoZWNrX25vX2J0Zixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMDI1PXN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwODMtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDg0OnN0YXRpYyBpbnQgcmh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwODUte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MDg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUxOS1cdC5tYXBfZGVsZXRlX2VsZW0gPSByaHRhYl9tYXBfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTIwOlx0Lm1hcF9nZW5fbG9va3VwID0gcmh0YWJfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTIxLVx0Lm1hcF9zZXFfc2hvd19lbGVtID0gcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXG4tLVxubmV0L3hkcC94c2ttYXAuYz0xMDQ9c3RhdGljIGludCB4c2tfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuLS1cbm5ldC94ZHAveHNrbWFwLmMtMTIwLVxubmV0L3hkcC94c2ttYXAuYzoxMjE6c3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbm5ldC94ZHAveHNrbWFwLmMtMTIyLXtcbi0tXG5uZXQveGRwL3hza21hcC5jPTI3MT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgeHNrX21hcF9vcHMgPSB7XG4tLVxubmV0L3hkcC94c2ttYXAuYy0yNzYtXHQubWFwX2xvb2t1cF9lbGVtID0geHNrX21hcF9sb29rdXBfZWxlbSxcbm5ldC94ZHAveHNrbWFwLmM6Mjc3Olx0Lm1hcF9nZW5fbG9va3VwID0geHNrX21hcF9nZW5fbG9va3VwLFxubmV0L3hkcC94c2ttYXAuYy0yNzgtXHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0geHNrX21hcF9sb29rdXBfZWxlbV9zeXNfb25seSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wZXJjcHVfYXJyYXlfaW5uZXJfbWFwLmMtNS0gKiBUZXN0IHRoYXQgcmVwbGFjaW5nIGFuIGlubmVyIHBlcmNwdSBhcnJheSBtYXAgd2l0aCBvbmUgdGhhdCBoYXMgZGlmZmVyZW50XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wZXJjcHVfYXJyYXlfaW5uZXJfbWFwLmM6NjogKiBtYXhfZW50cmllcyBpcyByZWplY3RlZC4gIHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cCgpIGlubGluZXMgdGhlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wZXJjcHVfYXJyYXlfaW5uZXJfbWFwLmMtNy0gKiB0ZW1wbGF0ZSYjMzk7cyBpbmRleF9tYXNrLCBzbyBhbGxvd2luZyBhIHNtYWxsZXIgcmVwbGFjZW1lbnQgd291bGQgY2F1c2UgT09CLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBBcnJheSBNYXAgTG9va3VwKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3Mgc2VlLi4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYXJyYXkgbWFwcyBhbmQgaG93IGxvb2t1cHMgYXJlIGhhbmRsZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBga2VybmVsL2JwZi9hcnJheW1hcC5jYCBhbmQgc3BlY2lmaWNhbGx5LCBhcm91bmQgdGhlIGBhcnJheV9tYXBfZ2VuX2xvb2t1cGAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvcmUgbG9naWMgZm9yIHJldHJpZXZpbmcgdmFsdWVzIGZyb20gdGhlc2UgbWFwcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgaW5kZXhpbmcsIGJvdW5kcyBjaGVja2luZyAoY3J1Y2lhbCEpLCBhbnkgcG90ZW50aWFsIGNhY2hpbmcgbWVjaGFuaXNtcywgYW5kIGVycm9yIGhhbmRsaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgdG9vIC0gcGVyaGFwcyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBpbXByb3ZlZCBpbiB0ZXJtcyBvZiBsb29rdXAgcGVyZm9ybWFuY2Ugb3IgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcnJheW1hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTc6XHQvKiBlbWl0IEJQRiBpbnN0cnVjdGlvbnMgZXF1aXZhbGVudCB0byBDIGNvZGUgb2YgYXJyYXlfbWFwX2xvb2t1cF9lbGVtKCkgKi9cbiAyMTg6XHRzdGF0aWMgaW50IGFycmF5X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4gMjE5Olx0e1xuIDIyMDpcdFx0c3RydWN0IGJwZl9hcnJheSAqYXJyYXkgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FycmF5LCBtYXApO1xuIDIyMTpcdFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4gMjIyOlx0XHR1MzIgZWxlbV9zaXplID0gYXJyYXktXHUwMDNlZWxlbV9zaXplO1xuIDIyMzpcdFx0Y29uc3QgaW50IHJldCA9IEJQRl9SRUdfMDtcbiAyMjQ6XHRcdGNvbnN0IGludCBtYXBfcHRyID0gQlBGX1JFR18xO1xuIDIyNTpcdFx0Y29uc3QgaW50IGluZGV4ID0gQlBGX1JFR18yO1xuIDIyNjpcdFxuIDIyNzpcdFx0aWYgKG1hcC1cdTAwM2VtYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX0lOTkVSX01BUClcbiAyMjg6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDIyOTpcdFxuIDIzMDpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBtYXBfcHRyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX2FycmF5LCB2YWx1ZSkpO1xuIDIzMTpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHJldCwgaW5kZXgsIDApO1xuIDIzMjpcdFx0aWYgKCFtYXAtXHUwMDNlYnlwYXNzX3NwZWNfdjEpIHtcbiAyMzM6XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtXHUwMDNlbWF4X2VudHJpZXMsIDQpO1xuIDIzNDpcdFx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVMzJfSU1NKEJQRl9BTkQsIHJldCwgYXJyYXktXHUwMDNlaW5kZXhfbWFzayk7XG4gMjM1Olx0XHR9IGVsc2Uge1xuIDIzNjpcdFx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkdFLCByZXQsIG1hcC1cdTAwM2VtYXhfZW50cmllcywgMyk7XG4gMjM3Olx0XHR9XG4gMjM4Olx0XG4gMjM5Olx0XHRpZiAoaXNfcG93ZXJfb2ZfMihlbGVtX3NpemUpKSB7XG4gMjQwOlx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0xTSCwgcmV0LCBpbG9nMihlbGVtX3NpemUpKTtcbiAyNDE6XHRcdH0gZWxzZSB7XG4gMjQyOlx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX01VTCwgcmV0LCBlbGVtX3NpemUpO1xuIDI0MzpcdFx0fVxuIDI0NDpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X1JFRyhCUEZfQURELCByZXQsIG1hcF9wdHIpO1xuIDI0NTpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcbiAyNDY6XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9NT1Y2NF9JTU0ocmV0LCAwKTtcbiAyNDc6XHRcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4gMjQ4Olx0fVxuIDI0OTpcdFxuIDI1MDpcdC8qIENhbGxlZCBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xuIDI1MTpcdHN0YXRpYyB2b2lkICpwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiAyNTI6XHR7XG4gMjUzOlx0XHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XG4gMjU0Olx0XHR1MzIgaW5kZXggPSAqKHUzMiAqKWtleTtcbiAyNTU6XHRcbiAyNTY6XHRcdGlmICh1bmxpa2VseShpbmRleCBcdTAwM2U9IGFycmF5LVx1MDAzZW1hcC5tYXhfZW50cmllcykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxODgKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogNTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBJbnN0cnVjdGlvbiBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYHhza19tYXBfZ2VuX2xvb2t1cGAsIEkgc2VlIHRoZXkmIzM5O3JlIHN3aXRjaGluZyBmcm9tIGBCUEZfSk1QX0lNTWAgdG8gYEJQRl9KTVAzMl9JTU1gIHdoZW4gZG9pbmcgYSBib3VuZHMgY2hlY2sgYWdhaW5zdCBgbWFwLSZndDttYXhfZW50cmllc2AgYmVmb3JlIGluZGV4aW5nIGludG8gYG0tJmd0O3hza19tYXBgLiBCb3RoIGp1bXAgaW5zdHJ1Y3Rpb25zIGFyZSBlc3NlbnRpYWxseSBkb2luZyB0aGUgc2FtZSBqb2I6IG1ha2luZyBzdXJlIGByZXRgIGlzIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4KClRoZSB0aGluZyBpcywgdGhlIGNvZGUgYWxyZWFkeSBkb2VzIGEgMzItYml0IGxvYWQgKGBCUEZfTERYX01FTWApLCB3aGljaCBpcyB6ZXJvLWV4dGVuZGVkIGFueXdheSBvbiBhIDY0LWJpdCBCUEYgVk0uIEl0IHNlZW1zIGxpa2UgdXNpbmcgYEpNUDMyYCBtaWdodCBiZSBjbGVhbmVyIGluIGNlcnRhaW4gY29udGV4dHMsIG1heWJlIGluIHN1Yi1yZWdpc3RlciBtb2RlIG9yIHBvdGVudGlhbGx5IGJlbmVmaXRpbmcgdGhlIEpJVCBjb21waWxlci4gQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3JlIG5vdCBpbmFkdmVydGVudGx5IGV4cG9zaW5nIHNvbWV0aGluZy4KClNvLCBsZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIEtNU0FOIGNoZWNrbGlzdDoKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZToqKiBOb3BlLiBObyBkYXRhIGlzIGJlaW5nIGNvcGllZCBvdXQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBOby4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBiZWluZyB1c2VkIGluIGEgY29uZGl0aW9uYWwuCjMuICAqKkFsbG9jYXRpb24vSW5pdGlhbGl6YXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzOioqIE5vdCBhbiBpc3N1ZSBoZXJlLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb25zIG9mIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXQgcGxheS4KNC4gICoqQm91bmRzIGNoZWNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeToqKiBOb3csIGhlcmUmIzM5O3Mgd2hlcmUgaXQgKmNvdWxkKiBnZXQgaW50ZXJlc3RpbmcuIFRoaXMgKmlzKiBhIGJvdW5kcyBjaGVjaywgeWVzLCBidXQgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGZvciBhbiBhcnJheSBsb29rdXAgaW5zaWRlIGFuIFhTSyBtYXAuIElmIHRoZSBib3VuZHMgY2hlY2sgZmFpbGVkIG9yIG1pc2JlaGF2ZWQsIGl0JiMzOTtkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEtBU0FOIGlzIGJ1aWx0IHRvIGNhdGNoIHN1Y2ggYWNjZXNzZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgZHVlIHRvIHRoaXMgY2hhbmdlLgoKRXNzZW50aWFsbHksIGFsbCB0aGUgY3JpdGVyaWEgYXJlIG5lZ2F0aXZlLgoKVG8gc3VtIHVwOgoKKiAgIFRoZSBjaGFuZ2UgaW52b2x2ZXMgYSBCUEYgaW5zdHJ1Y3Rpb24gc3dpdGNoOiBhIDY0LWJpdCBqdW1wIHRvIGEgMzItYml0IGp1bXAgaW4gdGhlIGlubGluZSBCUEYgY29kZSBmb3IgWFNLIG1hcCBsb29rdXBzLgoqICAgVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlzayBvZiBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gSXQgYXZvaWRzIGFjY2Vzc2luZyBvciBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4KKiAgIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBhc3NvY2lhdGVkIHdpdGggQlBGIGFycmF5IGxvb2t1cHMgYXJlIGFscmVhZHkgYWRkcmVzc2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTiB0aHJvdWdoIGNoZWNraW5nIHRoZSBib3VuZHMuCiogICBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgcmlzayBpcyBleHRyZW1lbHkgbG93LiBJJiMzOTttIGdvaW5nIHRvIG1hcmsgdGhpcyBhcyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSBmZWVsIGNvbmZpZGVudCBpbiB0aGlzLiBJJiMzOTtsbCBqdXN0IGRvIGEgcXVpY2sgZmluYWwgcmV2aWV3IHRvIG1ha2Ugc3VyZS4gT2theSwgSSYjMzk7bSByZWFkeSB0byByZXNwb25kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGEgNjQtYml0IGp1bXAgaW5zdHJ1Y3Rpb24gKEJQRl9KTVBfSU1NKSB0byBhIDMyLWJpdCBqdW1wIGluc3RydWN0aW9uIChCUEZfSk1QMzJfSU1NKSBpbiB4c2tfbWFwX2dlbl9sb29rdXAoKSB3aGVuIGlubGluaW5nIEJQRiBpbnN0cnVjdGlvbnMgZm9yIFhTSyBtYXAgZWxlbWVudCBsb29rdXBzLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCB0b3VjaCBtZW1vcnkgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVnIGludm9sdmluZyBpbmNvcnJlY3QgYnJhbmNoIG9mZnNldHMgb3IgaW5kZXhpbmcgd291bGQgcmVzdWx0IGluIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIHVuZXhwZWN0ZWQgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgYSA2NC1iaXQganVtcCBpbnN0cnVjdGlvbiAoQlBGX0pNUF9JTU0pIHRvIGEgMzItYml0IGp1bXAgaW5zdHJ1Y3Rpb24gKEJQRl9KTVAzMl9JTU0pIGluIHhza19tYXBfZ2VuX2xvb2t1cCgpIHdoZW4gaW5saW5pbmcgQlBGIGluc3RydWN0aW9ucyBmb3IgWFNLIG1hcCBlbGVtZW50IGxvb2t1cHMuIFRoaXMgY2hhbmdlIGRvZXMgbm90IHRvdWNoIG1lbW9yeSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBidWcgaW52b2x2aW5nIGluY29ycmVjdCBicmFuY2ggb2Zmc2V0cyBvciBpbmRleGluZyB3b3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdW5leHBlY3RlZCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyMzowMy4yNzgwMDY0NDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDM0Njk1NzI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfbWFwX2dlbl9sb29rdXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgYSA2NC1iaXQganVtcCBpbnN0cnVjdGlvbiAoQlBGX0pNUF9JTU0pIHRvIGEgMzItYml0IGp1bXAgaW5zdHJ1Y3Rpb24gKEJQRl9KTVAzMl9JTU0pIGluIHhza19tYXBfZ2VuX2xvb2t1cCgpIHdoZW4gaW5saW5pbmcgQlBGIGluc3RydWN0aW9ucyBmb3IgWFNLIG1hcCBlbGVtZW50IGxvb2t1cHMuIFRoaXMgY2hhbmdlIGRvZXMgbm90IHRvdWNoIG1lbW9yeSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBidWcgaW52b2x2aW5nIGluY29ycmVjdCBicmFuY2ggb2Zmc2V0cyBvciBpbmRleGluZyB3b3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdW5leHBlY3RlZCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHhza19tYXBfZ2VuX2xvb2t1cCgpIGluIG5ldC94ZHAveHNrbWFwLmMgYnkgY2hhbmdpbmcgdGhlIGVtaXR0ZWQgbG9va3VwIGluc3RydWN0aW9uIGZyb20gQlBGX0pNUF9JTU0gdG8gQlBGX0pNUDMyX0lNTSB3aGVuIHZlcmlmeWluZyBhbmQgaW5saW5pbmcgWFNLTUFQIGxvb2t1cHMuIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgQlBGL1hEUCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyMzowMy4yNzgwMTA2MDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MzcwMTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM1YmM3YTdkMjAwMWJmZjUyNjc5ZjE0MGE1Njk0ZDM3MGI0YmEyMzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMTAgMTg6MjM6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2ttYXAuYyBiL25ldC94ZHAveHNrbWFwLmNcXG5pbmRleCAzYmZmMzQ2MzA4ZDBmLi5iZjAwZDY0NjNjMTkxIDEwMDY0NFxcbi0tLSBhL25ldC94ZHAveHNrbWFwLmNcXG4rKysgYi9uZXQveGRwL3hza21hcC5jXFxuQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgaW50IHhza19tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbiBcXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcXG4gXFxuIFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfVywgcmV0LCBpbmRleCwgMCk7XFxuLVxcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkdFLCByZXQsIG1hcC1cXHUwMDNlbWF4X2VudHJpZXMsIDUpO1xcbitcXHQqaW5zbisrID0gQlBGX0pNUDMyX0lNTShCUEZfSkdFLCByZXQsIG1hcC1cXHUwMDNlbWF4X2VudHJpZXMsIDUpO1xcbiBcXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfTFNILCByZXQsIGlsb2cyKHNpemVvZihzdHJ1Y3QgeHNrX3NvY2sgKikpKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgbXAsIG9mZnNldG9mKHN0cnVjdCB4c2tfbWFwLCB4c2tfbWFwKSk7XFxuIFxcdCppbnNuKysgPSBCUEZfQUxVNjRfUkVHKEJQRl9BREQsIHJldCwgbXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyMzowMy45NzI0MjAxMjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU2NTU3NDEyMjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza19tYXBfZ2VuX2xvb2t1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHhza19tYXBfZ2VuX2xvb2t1cCgpIGluIG5ldC94ZHAveHNrbWFwLmMgYnkgY2hhbmdpbmcgdGhlIGVtaXR0ZWQgbG9va3VwIGluc3RydWN0aW9uIGZyb20gQlBGX0pNUF9JTU0gdG8gQlBGX0pNUDMyX0lNTSB3aGVuIHZlcmlmeWluZyBhbmQgaW5saW5pbmcgWFNLTUFQIGxvb2t1cHMuIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgQlBGL1hEUCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM1YmM3YTdkMjAwMWJmZjUyNjc5ZjE0MGE1Njk0ZDM3MGI0YmEyMzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxODoyMzowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrbWFwLmMgYi9uZXQveGRwL3hza21hcC5jXG5pbmRleCAzYmZmMzQ2MzA4ZDBmLi5iZjAwZDY0NjNjMTkxIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2ttYXAuY1xuKysrIGIvbmV0L3hkcC94c2ttYXAuY1xuQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgaW50IHhza19tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4gXG4gXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHJldCwgaW5kZXgsIDApO1xuLVx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KR0UsIHJldCwgbWFwLVx1MDAzZW1heF9lbnRyaWVzLCA1KTtcbitcdCppbnNuKysgPSBCUEZfSk1QMzJfSU1NKEJQRl9KR0UsIHJldCwgbWFwLVx1MDAzZW1heF9lbnRyaWVzLCA1KTtcbiBcdCppbnNuKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9MU0gsIHJldCwgaWxvZzIoc2l6ZW9mKHN0cnVjdCB4c2tfc29jayAqKSkpO1xuIFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgbXAsIG9mZnNldG9mKHN0cnVjdCB4c2tfbWFwLCB4c2tfbWFwKSk7XG4gXHQqaW5zbisrID0gQlBGX0FMVTY0X1JFRyhCUEZfQURELCByZXQsIG1wKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjIzOjAzLjk3MjQyMTI2NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0NDI4NjY2NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMsIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlIGluIGBuZXQveGRwL3hza21hcC5jYCwganVzdGlmaWVzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZSB1c2VyIHByb3ZpZGVkIGEgZ2l0IGRpZmYsIGFuZCBpdCdzIGEgcmVsYXRpdmVseSBmb2N1c2VkIGNoYW5nZS4gU3BlY2lmaWNhbGx5OiBgQlBGX0pNUF9JTU1gIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYEJQRl9KTVAzMl9JTU1gIGluIHRoZSBgeHNrX21hcF9nZW5fbG9va3VwYCBmdW5jdGlvbi4gVGhhdCdzIGEganVtcCBpbnN0cnVjdGlvbiwgYW5kIGEgMzItYml0IGltbWVkaWF0ZSB2YWx1ZSBjaGFuZ2UsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWUgcG90ZW50aWFsIGFyZWFzIGZvciBjb25jZXJuLlxuXG5TaW5jZSBJIGFtIGRvaW5nIGEgcmlzayBhbmFseXNpcyBvbiB0aGUgcGF0Y2ggSSB3aWxsIHVzZSBzb21lIHRvb2xzLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGRlZXBlciBpbnNwZWN0aW9uLiBXZSBuZWVkIHRvIGRldGVybWluZSBgV29ydGhGdXp6aW5nYCwgYEZvY3VzU3ltYm9sc2AsIGBFbmFibGVDb25maWdzYCwgYW5kIHRoZSBgUmVhc29uaW5nYCBmb3IgdGhpcyBkZWNpc2lvbiwgYmVmb3JlIGNhbGxpbmcgYHNldC1yZXN1bHRzYC5cblxuVG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIGltcGFjdCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEknbGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgYG5ldC94ZHAveHNrbWFwLmNgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGB4c2tfbWFwX2dlbl9sb29rdXBgIGZ1bmN0aW9uIGRvZXMsIGFuZCBob3cgdGhhdCBCUEYgaW5zdHJ1Y3Rpb24gY2hhbmdlIGFsdGVycyBpdHMgYmVoYXZpb3IuIEkgc2hvdWxkIGFsc28gY2hlY2sgYEtjb25maWdgIHRvIHNlZSBpZiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSBpcyBnYXRlZCBiZWhpbmQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhhdCB3aWxsIGhlbHAgbWUgdG8gdW5kZXJzdGFuZCBob3cgd2lkZWx5IHVzZWQgdGhpcyBjb2RlIGlzLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCB0cmlhZ2UgcHJvY2VkdXJlIGZvciBhIG5ldyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAxOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjIzOjE4LjQwMTA5MjU1OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hza21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gMTAxOlxcdFxcdGJwZl9tYXBfYXJlYV9mcmVlKG0pO1xcbiAxMDI6XFx0fVxcbiAxMDM6XFx0XFxuIDEwNDpcXHRzdGF0aWMgaW50IHhza19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXFxuIDEwNTpcXHR7XFxuIDEwNjpcXHRcXHRzdHJ1Y3QgeHNrX21hcCAqbSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCB4c2tfbWFwLCBtYXApO1xcbiAxMDc6XFx0XFx0dTMyIGluZGV4ID0ga2V5ID8gKih1MzIgKilrZXkgOiBVMzJfTUFYO1xcbiAxMDg6XFx0XFx0dTMyICpuZXh0ID0gbmV4dF9rZXk7XFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdGlmIChpbmRleCBcXHUwMDNlPSBtLVxcdTAwM2VtYXAubWF4X2VudHJpZXMpIHtcXG4gMTExOlxcdFxcdFxcdCpuZXh0ID0gMDtcXG4gMTEyOlxcdFxcdFxcdHJldHVybiAwO1xcbiAxMTM6XFx0XFx0fVxcbiAxMTQ6XFx0XFxuIDExNTpcXHRcXHRpZiAoaW5kZXggPT0gbS1cXHUwMDNlbWFwLm1heF9lbnRyaWVzIC0gMSlcXG4gMTE2OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAxMTc6XFx0XFx0Km5leHQgPSBpbmRleCArIDE7XFxuIDExODpcXHRcXHRyZXR1cm4gMDtcXG4gMTE5OlxcdH1cXG4gMTIwOlxcdFxcbiAxMjE6XFx0c3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4gMTIyOlxcdHtcXG4gMTIzOlxcdFxcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzAsIG1wID0gQlBGX1JFR18xLCBpbmRleCA9IEJQRl9SRUdfMjtcXG4gMTI0OlxcdFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xcbiAxMjU6XFx0XFxuIDEyNjpcXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHJldCwgaW5kZXgsIDApO1xcbiAxMjc6XFx0XFx0Kmluc24rKyA9IEJQRl9KTVAzMl9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtXFx1MDAzZW1heF9lbnRyaWVzLCA1KTtcXG4gMTI4OlxcdFxcdCppbnNuKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9MU0gsIHJldCwgaWxvZzIoc2l6ZW9mKHN0cnVjdCB4c2tfc29jayAqKSkpO1xcbiAxMjk6XFx0XFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgbXAsIG9mZnNldG9mKHN0cnVjdCB4c2tfbWFwLCB4c2tfbWFwKSk7XFxuIDEzMDpcXHRcXHQqaW5zbisrID0gQlBGX0FMVTY0X1JFRyhCUEZfQURELCByZXQsIG1wKTtcXG4gMTMxOlxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfU0laRU9GKHN0cnVjdCB4c2tfc29jayAqKSwgcmV0LCByZXQsIDApO1xcbiAxMzI6XFx0XFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XFxuIDEzMzpcXHRcXHQqaW5zbisrID0gQlBGX01PVjY0X0lNTShyZXQsIDApO1xcbiAxMzQ6XFx0XFx0cmV0dXJuIGluc24gLSBpbnNuX2J1ZjtcXG4gMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0LyogRWxlbWVudHMgYXJlIGtlcHQgYWxpdmUgYnkgUkNVOyBlaXRoZXIgYnkgcmN1X3JlYWRfbG9jaygpIChmcm9tIHN5c2NhbGwpIG9yXFxuIDEzODpcXHQgKiBieSBsb2NhbF9iaF9kaXNhYmxlKCkgKGZyb20gWERQIGNhbGxzIGluc2lkZSBOQVBJKS4gVGhlXFxuIDEzOTpcXHQgKiByY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSBiZWxvdyBtYWtlcyBsb2NrZGVwIGFjY2VwdCBib3RoLlxcbiAxNDA6XFx0ICovXFxuIDE0MTpcXHRzdGF0aWMgdm9pZCAqX194c2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXFxuIDE0MjpcXHR7XFxuIDE0MzpcXHRcXHRzdHJ1Y3QgeHNrX21hcCAqbSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCB4c2tfbWFwLCBtYXApO1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHRpZiAoa2V5IFxcdTAwM2U9IG1hcC1cXHUwMDNlbWF4X2VudHJpZXMpXFxuIDE0NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTQ3OlxcdFxcbiAxNDg6XFx0XFx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhtLVxcdTAwM2V4c2tfbWFwW2tleV0sIHJjdV9yZWFkX2xvY2tfYmhfaGVsZCgpKTtcXG4gMTQ5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjM6MTguNDAxMjI3MTA4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg1Njc1NzM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBYU0sgTWFwIEdlbmVyYXRvcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBhbmQgZGVwZW5kZW5jaWVzIHN1cnJvdW5kaW5nIGB4c2tfbWFwX2dlbl9sb29rdXBgLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIHRvIHRyYWNrIGRvd24gaXRzIGludm9jYXRpb25zLCBzbyBJJ2xsIHN0YXJ0IGJ5IHRyYWNpbmcgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyAqdXNlZCogaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIHB1cnBvc2UuIFRoZW4sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCB3aGF0IEtjb25maWcgb3B0aW9ucyBlbmFibGUgdGhlIHJlbGV2YW50IGNvZGUgaW4gYG5ldC94ZHAveHNrbWFwLmNgPyBcblxuSSdsbCBjaGVjayB0aGUgYXNzb2NpYXRlZCBidWlsZCBmaWxlcywgc3RhcnRpbmcgd2l0aCB0aGUgYG5ldC94ZHAvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGFueSByZWxldmFudCBjb21waWxhdGlvbiBmbGFncy4gQWZ0ZXIgdGhhdCwgSSdsbCBkaXZlIGludG8gYG5ldC94ZHAvS2NvbmZpZ2AgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhlc2UgdmFyaW91cyBjb21wb25lbnRzIGFyZSBjb250cm9sbGVkIGFuZCBjb25maWd1cmVkLiBUaGF0IHNob3VsZCBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIGFuZCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjIzOjIxLjI1Nzk4ODY4NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcxNjc5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC94ZHAvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpICs9IHhzay5vIHhkcF91bWVtLm8geHNrX3F1ZXVlLm8geHNrbWFwLm9cXG5uZXQveGRwL01ha2VmaWxlLTMtb2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSArPSB4c2tfYnVmZl9wb29sLm9cXG4tLVxcbm5ldC94ZHAveHNrLmM9NDk3PWludCBfX3hza19tYXBfcmVkaXJlY3Qoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuLS1cXG5uZXQveGRwL3hzay5jLTUwNS1cXHRpZiAoIXhzLVxcdTAwM2VmbHVzaF9ub2RlLnByZXYpIHtcXG5uZXQveGRwL3hzay5jOjUwNjpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpmbHVzaF9saXN0ID0gYnBmX25ldF9jdHhfZ2V0X3hza21hcF9mbHVzaF9saXN0KCk7XFxubmV0L3hkcC94c2suYy01MDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjIzOjIxLjM2NTE2MjM5MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDc0MjUxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlhEUCBDb25maWd1cmF0aW9uOiBBIFF1aWNrIEdsYW5jZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJSaWdodCwgYmVmb3JlIHdlIGRpdmUgaW50byBhbnl0aGluZyB0b28gZGVlcCwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG5ldC94ZHAvS2NvbmZpZ2AuXCIgSXQncyB0aGUgc3RhbmRhcmQgZmlyc3Qgc3RvcCwgeW91IGtub3c/IEdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLCBzZWUgd2hhdCBvcHRpb25zIGFyZSBleHBvc2VkLCB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQgaG93IHRoZSB2YXJpb3VzIFhEUC1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtLiBObyBuZWVkIHRvIHJlaW52ZW50IHRoZSB3aGVlbCwgSSBjYW4gcHJvYmFibHkgZ2V0IGEgZ2VuZXJhbCBzZW5zZSBvZiB0aGUgYnVpbGQgc3RydWN0dXJlIGp1c3QgYnkgdW5kZXJzdGFuZGluZyB0aGUgYXZhaWxhYmxlIGNvbmZpZyBmbGFncy4gSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG8gdW5kZXJzdGFuZGluZyB0aGUgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTI3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjM6MjMuNTEyNTkwNDk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hkcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgWERQX1NPQ0tFVFNcXG4gICAzOlxcdFxcdGJvb2wgXFxcIlhEUCBzb2NrZXRzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbiAgIDU6XFx0XFx0ZGVmYXVsdCBuXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFhEUCBzb2NrZXRzIGFsbG93cyBhIGNoYW5uZWwgYmV0d2VlbiBYRFAgcHJvZ3JhbXMgYW5kXFxuICAgODpcXHRcXHQgIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBYRFBfU09DS0VUU19ESUFHXFxuICAxMTpcXHRcXHR0cmlzdGF0ZSBcXFwiWERQIHNvY2tldHM6IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBYRFBfU09DS0VUU1xcbiAgMTM6XFx0XFx0ZGVmYXVsdCBuXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFN1cHBvcnQgZm9yIFBGX1hEUCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxuICAxNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjIzOjIzLjUxMjY3NjQxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzUxNTUzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgeHNrX21hcF9nZW5fbG9va3VwYCBSZWZlcmVuY2VzKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHhza19tYXBfZ2VuX2xvb2t1cGAgZnVuY3Rpb24gaXMgdXNlZC4gQSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgcmVhbGx5IHRoZSAqZXNzZW50aWFsKiBvbmUgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGBuZXQveGRwL3hza21hcC5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgZGlyZWN0IGRlZmluaXRpb24gYW5kIG1vc3Qgb2YgaXRzIGxvY2FsIGNhbGxzIHRoZXJlLCBjbGVhcmx5IHNob3dpbmcgaG93IGl0IGZpdHMgd2l0aGluIHRoZSBYRFAgc29ja2V0IG1hcCdzIGZ1bmN0aW9uYWxpdHkuIEl0J3MgdGhlIG5hdHVyYWwgcGxhY2UuXG5cbkJ1dCwgSSBjYW4ndCBzdG9wIHRoZXJlLiBJIGFsc28gaGF2ZSB0byBjb25zaWRlciB3aGVyZSBlbHNlLCBvdXRzaWRlIG9mIHRoZSBpbW1lZGlhdGUgZGVmaW5pdGlvbiwgdGhpcyBmdW5jdGlvbiBtaWdodCBiZSBpbnZva2VkLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGxvb2sgYmV5b25kIHRoZSBsb2NhbCBmaWxlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGV4dGVybmFsIGNhbGxzLiBJ4oCZbGwgbmVlZCB0byB0cmFjZSBkb3duIHRoZSBjYWxsIGdyYXBoLiBBcmUgdGhlcmUgb3RoZXIgbW9kdWxlcyB0aGF0IGxldmVyYWdlIHRoaXMgbG9va3VwLCBwZXJoYXBzIHRocm91Z2ggYSBnZW5lcmljIFhEUCBtYXAgaW50ZXJmYWNlIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljIHJlbGF0ZWQgdG8gQUZfWERQPyBJcyBpdCBhIGNydWNpYWwgcGFydCBvZiBhIGxhcmdlciBYRFAgZGF0YSBwYXRoIGludm9sdmluZyBvdGhlciBtYXBzIG9yIHByb2dyYW1zPyBXaGVyZSdzIGl0IHVzZWQ/IFRoYXQncyB3aGF0IEkgd2FudCB0byBmaW5kIG91dC4gSSBuZWVkIHRvIGdldCBhIHBpY3R1cmUgb2YgKmFsbCogdGhlIHBsYWNlcyB0aGlzIGZ1bmN0aW9uIGlzIGVtcGxveWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgY29tcGxldGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUzMSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjM6MjUuOTg3ODMzNzA5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE3OTA0MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhza19tYXBfZ2VuX2xvb2t1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hza21hcC5jPTEwND1zdGF0aWMgaW50IHhza19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXFxuLS1cXG5uZXQveGRwL3hza21hcC5jLTEyMC1cXG5uZXQveGRwL3hza21hcC5jOjEyMTpzdGF0aWMgaW50IHhza19tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbm5ldC94ZHAveHNrbWFwLmMtMTIyLXtcXG4tLVxcbm5ldC94ZHAveHNrbWFwLmM9MjcxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyB4c2tfbWFwX29wcyA9IHtcXG4tLVxcbm5ldC94ZHAveHNrbWFwLmMtMjc2LVxcdC5tYXBfbG9va3VwX2VsZW0gPSB4c2tfbWFwX2xvb2t1cF9lbGVtLFxcbm5ldC94ZHAveHNrbWFwLmM6Mjc3OlxcdC5tYXBfZ2VuX2xvb2t1cCA9IHhza19tYXBfZ2VuX2xvb2t1cCxcXG5uZXQveGRwL3hza21hcC5jLTI3OC1cXHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0geHNrX21hcF9sb29rdXBfZWxlbV9zeXNfb25seSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjM6MjguNDA1NzQ1MjAxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MzgyNzMyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYG1hcF9nZW5fbG9va3VwYCBDYWxsIFNpdGVzKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiBgbWFwX2dlbl9sb29rdXBgIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBpdHMgY2FsbHMgZnJvbSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIEkgd2FudCB0byB0cmFjZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gY2FsbCBpbiBhbGwgaXRzIGNhbGwgc2l0ZXMuXG5cbk1vcmUgc3BlY2lmaWNhbGx5LCBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHBsYWNlcyBsaWtlIHRoZSBCUEYgdmVyaWZpZXIgb3IgYW55IHNjZW5hcmlvcyB3aGVyZSB0aGUgQlBGIGNvbXBpbGVyIG1pZ2h0IGlubGluZSBhIEJQRiBtYXAgbG9va3VwIHVzaW5nIHRoYXQgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBpbmxpbmluZyBiZWhhdmlvciBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBhbmFseXNpcyBhbmQgb3B0aW1pemF0aW9uLCBhbmQgZm9yIHVuY292ZXJpbmcgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIFRoZSBpbXBsaWNhdGlvbnMgd291bGQgYmUgcXVpdGUgc3Vic3RhbnRpYWwgaWYgdGhpcyBpcyBoYXBwZW5pbmcuIFRoZSBwcmVzZW5jZSBvZiBpdCBpcyBzb21ldGhpbmcgSSdsbCBuZWVkIHRvIGtub3cuXG5cbkknbGwgc3RhcnQgdHJhY2luZyB0aGUgY2FsbCBjaGFpbiBmcm9tIHRoZXJlLCBtYXBwaW5nIG91dCBhbnkgaW50ZXJkZXBlbmRlbmNpZXMgb3Igc3VidGxlIG51YW5jZXMgaW4gdGhlIGJlaGF2aW9yIHJlbGF0ZWQgdG8gdGhlIGZ1bmN0aW9uJ3MgdXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE1MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjIzOjMxLjA0NDAzNTg2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM5Njk4MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hcF9nZW5fbG9va3VwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9ODc9c3RydWN0IGJwZl9tYXBfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTI2LVxcdHZvaWQgKCptYXBfZmRfcHV0X3B0cikoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqcHRyLCBib29sIG5lZWRfZGVmZXIpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MTI3OlxcdGludCAoKm1hcF9nZW5fbG9va3VwKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTEyOC1cXHR1MzIgKCptYXBfZmRfc3lzX2xvb2t1cF9lbGVtKSh2b2lkICpwdHIpO1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTIwMT1zdGF0aWMgaW50IGFycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW1tLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTIxNy0vKiBlbWl0IEJQRiBpbnN0cnVjdGlvbnMgZXF1aXZhbGVudCB0byBDIGNvZGUgb2YgYXJyYXlfbWFwX2xvb2t1cF9lbGVtKCkgKi9cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MjE4OnN0YXRpYyBpbnQgYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjE5LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0yNzc9c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBpbW0sIHUzMiAqb2ZmKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI5My0vKiBlbWl0IEJQRiBpbnN0cnVjdGlvbnMgZXF1aXZhbGVudCB0byBDIGNvZGUgb2YgcGVyY3B1X2FycmF5X21hcF9sb29rdXBfZWxlbSgpICovXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI5NDpzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yOTUte1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTg1OT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NjgtXFx0Lm1hcF9kZWxldGVfZWxlbSA9IGFycmF5X21hcF9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODY5OlxcdC5tYXBfZ2VuX2xvb2t1cCA9IGFycmF5X21hcF9nZW5fbG9va3VwLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzAtXFx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcixcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODY9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg5Mi1cXHQubWFwX2xvb2t1cF9lbGVtID0gcGVyY3B1X2FycmF5X21hcF9sb29rdXBfZWxlbSxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODkzOlxcdC5tYXBfZ2VuX2xvb2t1cCA9IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODk0LVxcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE0NjQ9c3RhdGljIHZvaWQgKmFycmF5X29mX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTQ3My1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTQ3NDpzdGF0aWMgaW50IGFycmF5X29mX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0NzUtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNTA1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9vZl9tYXBzX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxNC1cXHQubWFwX2ZkX3N5c19sb29rdXBfZWxlbSA9IGJwZl9tYXBfZmRfc3lzX2xvb2t1cF9lbGVtLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxNTE1OlxcdC5tYXBfZ2VuX2xvb2t1cCA9IGFycmF5X29mX21hcF9nZW5fbG9va3VwLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE2LVxcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xNTEzPWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjA0Ny1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwNDg6XFx0XFx0LyogQlBGX0VNSVRfQ0FMTCgpIGFzc3VtcHRpb25zIGluIHNvbWUgb2YgdGhlIG1hcF9nZW5fbG9va3VwXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDQ5LVxcdFxcdCAqIGFuZCBvdGhlciBpbmxpbmluZyBoYW5kbGVycyBhcmUgY3VycmVudGx5IGxpbWl0ZWQgdG8gNjQgYml0XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNjgtXFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSA9PSBCUEZfRlVOQ19tYXBfbG9va3VwX2VsZW0gXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwNjk6XFx0XFx0XFx0ICAgIG9wcy1cXHUwMDNlbWFwX2dlbl9sb29rdXApIHtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwNzA6XFx0XFx0XFx0XFx0Y250ID0gb3BzLVxcdTAwM2VtYXBfZ2VuX2xvb2t1cChtYXBfcHRyLCBpbnNuX2J1Zik7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDcxLVxcdFxcdFxcdFxcdGlmIChjbnQgPT0gLUVPUE5PVFNVUFApXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz03MTU9c3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTczNS0gKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFkanVzdGVkIGJ5IEJQRiBpbnN0cnVjdGlvbnNcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo3MzY6ICogaW4gaHRhYl9tYXBfZ2VuX2xvb2t1cCgpLlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTczNy0gKi9cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTc1OD1zdGF0aWMgdm9pZCAqaHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNzc4LSAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjc3OTpzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy03ODAte1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9ODEzPXN0YXRpYyB2b2lkICpodGFiX2xydV9tYXBfbG9va3VwX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTgxNy1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo4MTg6c3RhdGljIGludCBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTgxOS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjM2MT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM3MS1cXHQubWFwX2RlbGV0ZV9lbGVtID0gaHRhYl9tYXBfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM3MjpcXHQubWFwX2dlbl9sb29rdXAgPSBodGFiX21hcF9nZW5fbG9va3VwLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzMtXFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gaHRhYl9tYXBfc2VxX3Nob3dfZWxlbSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIzODM9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbHJ1X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzk0LVxcdC5tYXBfZGVsZXRlX2VsZW0gPSBodGFiX2xydV9tYXBfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM5NTpcXHQubWFwX2dlbl9sb29rdXAgPSBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzk2LVxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNDA3PXN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjQxNy0vKiBpbmxpbmUgYnBmX21hcF9sb29rdXBfZWxlbSgpIGNhbGwgZm9yIHBlci1DUFUgaGFzaG1hcCAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI0MTg6c3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MTkte1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU2ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9wZXJjcHVfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1NzAtXFx0Lm1hcF9sb29rdXBfZWxlbSA9IGh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTcxOlxcdC5tYXBfZ2VuX2xvb2t1cCA9IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1NzItXFx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtID0gaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNjk4PXN0YXRpYyB2b2lkICpodGFiX29mX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzA3LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3MDg6c3RhdGljIGludCBodGFiX29mX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjcwOS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzMyPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX29mX21hcHNfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NDEtXFx0Lm1hcF9mZF9zeXNfbG9va3VwX2VsZW0gPSBicGZfbWFwX2ZkX3N5c19sb29rdXBfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzQyOlxcdC5tYXBfZ2VuX2xvb2t1cCA9IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc0My1cXHQubWFwX2NoZWNrX2J0ZiA9IG1hcF9jaGVja19ub19idGYsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMDI1PXN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzA4My1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDg0OnN0YXRpYyBpbnQgcmh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDg1LXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MDg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTE5LVxcdC5tYXBfZGVsZXRlX2VsZW0gPSByaHRhYl9tYXBfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUyMDpcXHQubWFwX2dlbl9sb29rdXAgPSByaHRhYl9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTIxLVxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IHJodGFiX21hcF9zZXFfc2hvd19lbGVtLFxcbi0tXFxubmV0L3hkcC94c2ttYXAuYz0xMDQ9c3RhdGljIGludCB4c2tfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxcbi0tXFxubmV0L3hkcC94c2ttYXAuYy0xMjAtXFxubmV0L3hkcC94c2ttYXAuYzoxMjE6c3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG5uZXQveGRwL3hza21hcC5jLTEyMi17XFxuLS1cXG5uZXQveGRwL3hza21hcC5jPTI3MT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgeHNrX21hcF9vcHMgPSB7XFxuLS1cXG5uZXQveGRwL3hza21hcC5jLTI3Ni1cXHQubWFwX2xvb2t1cF9lbGVtID0geHNrX21hcF9sb29rdXBfZWxlbSxcXG5uZXQveGRwL3hza21hcC5jOjI3NzpcXHQubWFwX2dlbl9sb29rdXAgPSB4c2tfbWFwX2dlbl9sb29rdXAsXFxubmV0L3hkcC94c2ttYXAuYy0yNzgtXFx0Lm1hcF9sb29rdXBfZWxlbV9zeXNfb25seSA9IHhza19tYXBfbG9va3VwX2VsZW1fc3lzX29ubHksXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wZXJjcHVfYXJyYXlfaW5uZXJfbWFwLmMtNS0gKiBUZXN0IHRoYXQgcmVwbGFjaW5nIGFuIGlubmVyIHBlcmNwdSBhcnJheSBtYXAgd2l0aCBvbmUgdGhhdCBoYXMgZGlmZmVyZW50XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcGVyY3B1X2FycmF5X2lubmVyX21hcC5jOjY6ICogbWF4X2VudHJpZXMgaXMgcmVqZWN0ZWQuICBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoKSBpbmxpbmVzIHRoZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3BlcmNwdV9hcnJheV9pbm5lcl9tYXAuYy03LSAqIHRlbXBsYXRlJ3MgaW5kZXhfbWFzaywgc28gYWxsb3dpbmcgYSBzbWFsbGVyIHJlcGxhY2VtZW50IHdvdWxkIGNhdXNlIE9PQi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjM6MzMuMzgzNzQwNDU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNDQwMzQxMTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgQlBGX0pNUDMyX0lNTWAgYW5kIGBCUEZfSk1QX0lNTWAgaW4gYHhza19tYXBfZ2VuX2xvb2t1cGAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IHVzZXMgYEJQRl9KTVAzMl9JTU1gIHRvIGNvbXBhcmUgYSAzMi1iaXQgdmFsdWUgbG9hZGVkIGZyb20gYW4gaW5kZXggd2l0aCBgbWFwLVx1MDAzZW1heF9lbnRyaWVzYC4gUHJldmlvdXNseSwgaXQgdXNlZCB0aGUgNjQtYml0IGp1bXAvY29tcGFyZSwgYEJQRl9KTVBfSU1NYC4gIFxuXG5UaGUgbG9hZGluZyBpbnN0cnVjdGlvbiBgQlBGX0xEWF9NRU0oQlBGX1csIC4uLilgIHplcm8tZXh0ZW5kcyB0aGUgMzIgYml0cyBpbnRvIDY0IGJpdHMuICBUaGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhlIEJQRiB2ZXJpZmllciBvciB0aGUgSklUIGNvbXBpbGVyIHRyZWF0IDMyLWJpdCBhbmQgNjQtYml0IGp1bXBzIGRpZmZlcmVudGx5IGluIGEgd2F5IHRoYXQgY3JlYXRlcyBhIHZ1bG5lcmFiaWxpdHk/IFRoaXMgY29kZSBpcyBjcml0aWNhbCBiZWNhdXNlIGl0IHJ1bnMgd2hlbmV2ZXIgYSBCUEYgcHJvZ3JhbSwgdXNpbmcgYFhTS01BUGAgKHdoaWNoIGlzIGBCUEZfTUFQX1RZUEVfWFNLTUFQYCksIGNhbGxzIGBicGZfbWFwX2xvb2t1cF9lbGVtKClgLiBUaGUgdmVyaWZpZXIgaW5saW5lcyB0aGlzIHVzaW5nIGBtYXBfZ2VuX2xvb2t1cGAgZHVyaW5nIGBicGZfZG9fbWlzY19maXh1cHMoKWAuXG5cbk5vdywgaXMgdGhpcyByZWFjaGFibGUgaW4gYSB0eXBpY2FsIFFFTVUgZW52aXJvbm1lbnQ/IEFic29sdXRlbHkuIEJQRiBpcyBhIGNvcmUga2VybmVsIHN1YnN5c3RlbSwgYW5kIGBYU0tNQVBgIHN1cHBvcnQgKHZpYSB0aGUgQlBGIHN5c2NhbGwgYW5kIEFGX1hEUCkgbWVhbnMgdGhpcyBjb2RlIGV4ZWN1dGVzIHdoZW4gbG9hZGluZyBhIEJQRiBwcm9ncmFtIHRoYXQgcGVyZm9ybXMgYSBsb29rdXAgaW4gYW4gYFhTS01BUGAsIGFuZCB0aGVuIHdoZW4gdGhhdCBwcm9ncmFtIGV4ZWN1dGVzLiBUaGF0IG1ha2VzIHRoaXMgMTAwJSByZWFjaGFibGUgd2l0aCBzeXprYWxsZXIgZnV6emluZy5cblxuTGV0J3MgY29uZmlybSB0aGUgY3JpdGVyaWEuIEl0J3M6XG4qICAgUmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZTogQ29yZSBTdWJzeXN0ZW0gKEJQRiAvIG5ldHdvcmtpbmcpLlxuKiAgIFdvcnRoRnV6emluZyA9IHRydWUuXG5cbk5leHQgc3RlcHM6IExldCdzIGNoZWNrIGtlcm5lbCBjb25maWdzLiBTcGVjaWZpY2FsbHksIHdlJ2xsIG5lZWQgYENPTkZJR19YRFBfU09DS0VUU2AgKHdoaWNoIGRlcGVuZHMgb24gYENPTkZJR19CUEZfU1lTQ0FMTGApLiBJIHdpbGwgYWxzbyBncmVwIGZvciBcIlhTS01BUFwiIG9yIFwiQlBGX01BUF9UWVBFX1hTS01BUFwiIHRvIGVuc3VyZSBubyBvdGhlciBjb25maWdzIGFyZSByZXF1aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU3NywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyMzo0My44MjQwODQ3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxNTM2MTQ2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfTUFQX1RZUEVfWFNLTUFQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTQtPT09PT09PT09PT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0OjU6QlBGX01BUF9UWVBFX1hTS01BUFxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTYtPT09PT09PT09PT09PT09PT09PVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtOC0uLiBub3RlOjpcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo5OiAgIC0gYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgd2FzIGludHJvZHVjZWQgaW4ga2VybmVsIHZlcnNpb24gNC4xOFxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTEwLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0OjExOlRoZSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYCBpcyB1c2VkIGFzIGEgYmFja2VuZCBtYXAgZm9yIFhEUCBCUEYgaGVscGVyXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTItY2FsbCBgYGJwZl9yZWRpcmVjdF9tYXAoKWBgIGFuZCBgYFhEUF9SRURJUkVDVGBgIGFjdGlvbiwgbGlrZSAnZGV2bWFwJyBhbmQgJ2NwdW1hcCcuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdD02Nz1SZWRpcmVjdCB0aGUgcGFja2V0IHRvIHRoZSBlbmRwb2ludCByZWZlcmVuY2VkIGJ5IGBgbWFwYGAgYXQgaW5kZXggYGBrZXlgYC5cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo2ODpGb3IgYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgdGhpcyBtYXAgY29udGFpbnMgcmVmZXJlbmNlcyB0byBYU0sgRkRzXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtNjktZm9yIHNvY2tldHMgYXR0YWNoZWQgdG8gYSBuZXRkZXYncyBxdWV1ZXMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdD0xMzU9S2VybmVsXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xMzctXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q6MTM4OlRoZSBmb2xsb3dpbmcgY29kZSBzbmlwcGV0IHNob3dzIGhvdyB0byBkZWNsYXJlIGEgYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgY2FsbGVkXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTM5LWBgeHNrc19tYXBgYCBhbmQgaG93IHRvIHJlZGlyZWN0IHBhY2tldHMgdG8gYW4gWFNLLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTQzLVxcdHN0cnVjdCB7XFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q6MTQ0OlxcdFxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xNDUtXFx0XFx0X190eXBlKGtleSwgX191MzIpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvcmVkaXJlY3QucnN0PTEyPVhEUF9SRURJUkVDVCB3b3JrcyB3aXRoIHRoZSBmb2xsb3dpbmcgbWFwIHR5cGVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvcmVkaXJlY3QucnN0LTE2LS0gYGBCUEZfTUFQX1RZUEVfQ1BVTUFQYGBcXG5Eb2N1bWVudGF0aW9uL2JwZi9yZWRpcmVjdC5yc3Q6MTc6LSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYFxcbkRvY3VtZW50YXRpb24vYnBmL3JlZGlyZWN0LnJzdC0xOC1cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTcxPUhvdyBpcyB0aGVuIHBhY2tldHMgZGlzdHJpYnV0ZWQgZnJvbSBhbiBYRFAgcHJvZ3JhbSB0byB0aGUgWFNLcz8gVGhlcmVcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDo3MjppcyBhIEJQRiBtYXAgY2FsbGVkIFhTS01BUCAob3IgQlBGX01BUF9UWVBFX1hTS01BUCBpbiBmdWxsKS4gVGhlXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtNzMtdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBjYW4gcGxhY2UgYW4gWFNLIGF0IGFuIGFyYml0cmFyeSBwbGFjZSBpbiB0aGlzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdD0yMjA9dXNlci4gSXQgd2lsbCBtYWtlIHlvdXIgcHJvZ3JhbSBhIGxvdCBzaW1wbGVyLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTIyMS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDoyMjI6WFNLTUFQIC8gQlBGX01BUF9UWVBFX1hTS01BUFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTIyMy09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjI0LVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0OjIyNTpPbiBYRFAgc2lkZSB0aGVyZSBpcyBhIEJQRiBtYXAgdHlwZSBCUEZfTUFQX1RZUEVfWFNLTUFQIChYU0tNQVApIHRoYXRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0yMjYtaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGJwZl9yZWRpcmVjdF9tYXAoKSB0byBwYXNzIHRoZSBpbmdyZXNzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdD0yODI9cm91bmQtcm9iaW4gZXhhbXBsZSBvZiBkaXN0cmlidXRpbmcgcGFja2V0cyBpcyBzaG93biBiZWxvdzpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTI5MS0gICBzdHJ1Y3Qge1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0OjI5MjogICAgICAgX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTI5My0gICAgICAgX191aW50KG1heF9lbnRyaWVzLCBNQVhfU09DS1MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMTc9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9DUFVNQVAsIGNwdV9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTE4LSNpZiBkZWZpbmVkKENPTkZJR19YRFBfU09DS0VUUylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjExOTpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1hTS01BUCwgeHNrX21hcF9vcHMpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMjAtI2VuZGlmXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTAwMD1lbnVtIGJwZl9tYXBfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTAxNy1cXHRCUEZfTUFQX1RZUEVfQ1BVTUFQLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDE4OlxcdEJQRl9NQVBfVFlQRV9YU0tNQVAsXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwMTktXFx0QlBGX01BUF9UWVBFX1NPQ0tIQVNILFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTM4Mj1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTUyNC1cXHRjYXNlIEJQRl9NQVBfVFlQRV9ERVZNQVBfSEFTSDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxNTI1OlxcdGNhc2UgQlBGX01BUF9UWVBFX1hTS01BUDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNTI2LVxcdFxcdGlmICghYnBmX3Rva2VuX2NhcGFibGUodG9rZW4sIENBUF9ORVRfQURNSU4pKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MjA9c3RhdGljIHZvaWQgcmVmaW5lX21hcF9sb29rdXBfdmFsdWUoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTMzLVxcdFxcdFxcdHJlZy1cXHUwMDNlbWFwX3VpZCA9IHJlZy1cXHUwMDNlaWQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzQ6XFx0fSBlbHNlIGlmIChtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNS1cXHRcXHRyZWctXFx1MDAzZXR5cGUgPSBQVFJfVE9fWERQX1NPQ0sgfCBtYXliZV9udWxsO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTg5OTM9c3RhdGljIGludCBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA1Mi1cXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTA1MzpcXHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNTQtXFx0XFx0aWYgKGZ1bmNfaWQgIT0gQlBGX0ZVTkNfcmVkaXJlY3RfbWFwIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTE3MC1cXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQ1BVTUFQIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjkxNzE6XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1hTS01BUClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTE3Mi1cXHRcXHRcXHRnb3RvIGVycm9yO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDY4Mj1pbnQgeGRwX2RvX3JlZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDY4Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzo0Njg4OlxcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfWFNLTUFQKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2ODktXFx0XFx0cmV0dXJuIF9feGRwX2RvX3JlZGlyZWN0X3hzayhyaSwgZGV2LCB4ZHAsIHhkcF9wcm9nKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQ2OTY9aW50IHhkcF9kb19yZWRpcmVjdF9mcmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ3MDItXFxubmV0L2NvcmUvZmlsdGVyLmM6NDcwMzpcXHRpZiAobWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1hTS01BUClcXG5uZXQvY29yZS9maWx0ZXIuYy00NzA0LVxcdFxcdHJldHVybiBfX3hkcF9kb19yZWRpcmVjdF94c2socmksIGRldiwgeGRwLCB4ZHBfcHJvZyk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NzEwPXN0YXRpYyBpbnQgeGRwX2RvX2dlbmVyaWNfcmVkaXJlY3RfbWFwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00NzQ0LVxcdFxcdGJyZWFrO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjQ3NDU6XFx0Y2FzZSBCUEZfTUFQX1RZUEVfWFNLTUFQOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ3NDYtXFx0XFx0ZXJyID0geHNrX2dlbmVyaWNfcmN2KGZ3ZCwgeGRwKTtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDE3LVxcdEJQRl9NQVBfVFlQRV9DUFVNQVAsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwMTg6XFx0QlBGX01BUF9UWVBFX1hTS01BUCxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTAxOS1cXHRCUEZfTUFQX1RZUEVfU09DS0hBU0gsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTE2Mz1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1hcF90eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTgxLVxcdFtCUEZfTUFQX1RZUEVfQ1BVTUFQXVxcdFxcdFxcdD0gXFxcImNwdW1hcFxcXCIsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoxODI6XFx0W0JQRl9NQVBfVFlQRV9YU0tNQVBdXFx0XFx0XFx0PSBcXFwieHNrbWFwXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE4My1cXHRbQlBGX01BUF9UWVBFX1NPQ0tIQVNIXVxcdFxcdFxcdD0gXFxcInNvY2toYXNoXFxcIixcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9NTQwMz1zdGF0aWMgaW50IGJwZl9vYmplY3RfX2NyZWF0ZV9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcCwgYm9vbCBpc19pbm5lcilcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNTQ2Ny1cXHRjYXNlIEJQRl9NQVBfVFlQRV9DUFVNQVA6XFxudG9vbHMvbGliL2JwZi9saWJicGYuYzo1NDY4OlxcdGNhc2UgQlBGX01BUF9UWVBFX1hTS01BUDpcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTU0NjktXFx0Y2FzZSBCUEZfTUFQX1RZUEVfU09DS01BUDpcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jPTI5Mj1zdGF0aWMgaW50IHByb2JlX21hcF9jcmVhdGUoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0zNzUtXFx0Y2FzZSBCUEZfTUFQX1RZUEVfQ1BVTUFQOlxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jOjM3NjpcXHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMzc3LVxcdGNhc2UgQlBGX01BUF9UWVBFX1NPQ0tIQVNIOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jPTQ3NT1zdHJ1Y3Qge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYzo0NzY6XFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYy00NzctXFx0X191aW50KG1heF9lbnRyaWVzLCBNQVhfRU5UUklFUyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmM9Njg2PWludCBjZ19za2Iodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jLTcwMy1cXHRWRVJJRllfVFlQRShCUEZfTUFQX1RZUEVfQ1BVTUFQLCBjaGVja19jcHVtYXApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYzo3MDQ6XFx0VkVSSUZZX1RZUEUoQlBGX01BUF9UWVBFX1hTS01BUCwgY2hlY2tfeHNrbWFwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMtNzA1LVxcdFZFUklGWV9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCwgY2hlY2tfc29ja2hhc2gpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jPTEwPXN0cnVjdCB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jOjExOlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMtMTItXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrLmM9Mjk9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29jay5jOjMwOlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29jay5jLTMxLVxcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2h3X21ldGFkYXRhLmM9OD1zdHJ1Y3Qge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfaHdfbWV0YWRhdGEuYzo5OlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2h3X21ldGFkYXRhLmMtMTAtXFx0X191aW50KG1heF9lbnRyaWVzLCAyNTYpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9tZXRhZGF0YS5jPTg9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX21ldGFkYXRhLmM6OTpcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9tZXRhZGF0YS5jLTEwLVxcdF9fdWludChtYXhfZW50cmllcywgNCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jPTExPXN0cnVjdCB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYzoxMjpcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYy0xMy1cXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYz0xMDA3PXN0YXRpYyB2b2lkIGRvX3Rlc3RfZml4dXAoc3RydWN0IGJwZl90ZXN0ICp0ZXN0LCBlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYy0xMTM1LVxcdGlmICgqZml4dXBfbWFwX3hza21hcCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmM6MTEzNjpcXHRcXHRtYXBfZmRzWzExXSA9IGNyZWF0ZV9tYXAoQlBGX01BUF9UWVBFX1hTS01BUCwgc2l6ZW9mKGludCksXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYy0xMTM3LVxcdFxcdFxcdFxcdFxcdHNpemVvZihpbnQpLCAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjM6NDYuMTM5NDU0MjQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzOTY4MzQzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYG9wcy1cdTAwM2VtYXBfZ2VuX2xvb2t1cGAgZHVyaW5nIFZlcmlmaWVyIEZpeHVwKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYG9wcy1cdTAwM2VtYXBfZ2VuX2xvb2t1cGAgYW5kIHRoZSB2ZXJpZmllciBmaXh1cCBwcm9jZXNzLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlIGNvZGUuIExldCdzIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYGtlcm5lbC9icGYvZml4dXBzLmNgIGZpbGUuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZml4dXBzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSB3YW50IHRvIHNlZSAqZXhhY3RseSogd2hlcmUgYW5kIGhvdyBgb3BzLVx1MDAzZW1hcF9nZW5fbG9va3VwYCBpcyBpbnZva2VkIGR1cmluZyB0aGUgdmVyaWZpZXIncyBmaXh1cCBzdGFnZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuY3Rpb24gY2FsbHMsIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lcyB3aGVuIGFuZCB3aHkgaXQncyB1c2VkLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgdHJ5aW5nIHRvIHVuZGVyc3RhbmQ6XG5cbiogICAqKkNhbGwgU2l0ZToqKiBXaGVyZSBpcyB0aGUgYG9wcy1cdTAwM2VtYXBfZ2VuX2xvb2t1cGAgbWVtYmVyIGZ1bmN0aW9uIGFjdHVhbGx5ICpjYWxsZWQqIHdpdGhpbiB0aGUgZml4dXAgcHJvY2Vzcz8gV2hhdCBmdW5jdGlvbiBvciBmdW5jdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoaXM/XG4qICAgKipBcmd1bWVudHM6KiogV2hhdCBhcmd1bWVudHMgYXJlIGJlaW5nIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uPyBLbm93aW5nIHRoZSBhcmd1bWVudHMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2hhdCBkYXRhIGlzIGJlaW5nIHVzZWQgdG8gbWFrZSB0aGUgbG9va3VwLlxuKiAgICoqQ29uZGl0aW9uYWwgVXNlOioqIElzIHRoZSBjYWxsIHRvIGBvcHMtXHUwMDNlbWFwX2dlbl9sb29rdXBgIGFsd2F5cyBleGVjdXRlZCwgb3IgaXMgdGhlcmUgYSBzcGVjaWZpYyBjb25kaXRpb24gdGhhdCB0cmlnZ2VycyBpdD8gSWYgc28sIHdoYXQgaXMgdGhlIGNvbmRpdGlvbj8gQXJlIHRoZXJlIHNwZWNpZmljIEJQRiBpbnN0cnVjdGlvbiB0eXBlcywgbWFwIHR5cGVzLCBvciBwcm9ncmFtIGNoYXJhY3RlcmlzdGljcyB0aGF0IGxlYWQgdG8gaXQ/XG4qICAgKipQdXJwb3NlOioqIFdoYXQgaXMgdGhlIGludGVudCBvZiB0aGUgY2FsbD8gV2hhdCBpcyB0aGUgbG9va3VwICpmb3IqPyBJcyBpdCBmb3IgZGF0YSB2YWxpZGF0aW9uLCBjb2RlIGdlbmVyYXRpb24sIG9wdGltaXphdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBIb3cgZG9lcyB0aGUgY29kZSBoYW5kbGUgYW55IGZhaWx1cmVzIG9yIGVycm9ycyB0aGF0IG1pZ2h0IG9jY3VyIHdpdGhpbiB0aGUgYG9wcy1cdTAwM2VtYXBfZ2VuX2xvb2t1cGAgZnVuY3Rpb24/IEFyZSB0aGVyZSBhbnkgcmV0dXJuIHZhbHVlcyBvciBlcnJvciBjb2RlcyB0byBsb29rIG91dCBmb3I/XG5cbkJ5IGNhcmVmdWxseSBleGFtaW5pbmcgdGhlIGNvZGUgaW4gYGZpeHVwcy5jYCwgSSdsbCBnZXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWFwX2dlbl9sb29rdXBgIGNvbnRyaWJ1dGVzIHRvIHRoZSB2ZXJpZmllcidzIGZpeHVwIG9wZXJhdGlvbnMuIFRoZW4sIEkgY2FuIGludGVncmF0ZSBpdCB3aXRoIG15IGN1cnJlbnQga25vd2xlZGdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMxOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjIzOjQ5LjUzNjI5MTc0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2ZpeHVwcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwNjU6XFx0XFxuMjA2NjpcXHRcXHRcXHRcXHRtYXBfcHRyID0gYXV4LVxcdTAwM2VtYXBfcHRyX3N0YXRlLm1hcF9wdHI7XFxuMjA2NzpcXHRcXHRcXHRcXHRvcHMgPSBtYXBfcHRyLVxcdTAwM2VvcHM7XFxuMjA2ODpcXHRcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlaW1tID09IEJQRl9GVU5DX21hcF9sb29rdXBfZWxlbSBcXHUwMDI2XFx1MDAyNlxcbjIwNjk6XFx0XFx0XFx0XFx0ICAgIG9wcy1cXHUwMDNlbWFwX2dlbl9sb29rdXApIHtcXG4yMDcwOlxcdFxcdFxcdFxcdFxcdGNudCA9IG9wcy1cXHUwMDNlbWFwX2dlbl9sb29rdXAobWFwX3B0ciwgaW5zbl9idWYpO1xcbjIwNzE6XFx0XFx0XFx0XFx0XFx0aWYgKGNudCA9PSAtRU9QTk9UU1VQUClcXG4yMDcyOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gcGF0Y2hfbWFwX29wc19nZW5lcmljO1xcbjIwNzM6XFx0XFx0XFx0XFx0XFx0aWYgKGNudCBcXHUwMDNjPSAwIHx8IGNudCBcXHUwMDNlPSBJTlNOX0JVRl9TSVpFKSB7XFxuMjA3NDpcXHRcXHRcXHRcXHRcXHRcXHR2ZXJpZmllcl9idWcoZW52LCBcXFwiJWQgaW5zbnMgZ2VuZXJhdGVkIGZvciBtYXAgbG9va3VwXFxcIiwgY250KTtcXG4yMDc1OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjIwNzY6XFx0XFx0XFx0XFx0XFx0fVxcbjIwNzc6XFx0XFxuMjA3ODpcXHRcXHRcXHRcXHRcXHRpZiAoYnBmX21hcF9pc19wZXJjcHVfbWFwKG1hcF9wdHItXFx1MDAzZW1hcF90eXBlKSlcXG4yMDc5OlxcdFxcdFxcdFxcdFxcdFxcdHByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XFxuMjA4MDpcXHRcXG4yMDgxOlxcdFxcdFxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSxcXG4yMDgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnNuX2J1ZiwgY250KTtcXG4yMDgzOlxcdFxcdFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuMjA4NDpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMDg1OlxcdFxcbjIwODY6XFx0XFx0XFx0XFx0XFx0ZGVsdGEgICAgKz0gY250IC0gMTtcXG4yMDg3OlxcdFxcdFxcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IHByb2cgPSBuZXdfcHJvZztcXG4yMDg4OlxcdFxcdFxcdFxcdFxcdGluc24gICAgICA9IG5ld19wcm9nLVxcdTAwM2VpbnNuc2kgKyBpICsgZGVsdGE7XFxuMjA4OTpcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHRfaW5zbjtcXG4yMDkwOlxcdFxcdFxcdFxcdH1cXG4yMDkxOlxcdFxcbjIwOTI6XFx0XFx0XFx0XFx0QlVJTERfQlVHX09OKCFfX3NhbWVfdHlwZShvcHMtXFx1MDAzZW1hcF9sb29rdXBfZWxlbSxcXG4yMDkzOlxcdFxcdFxcdFxcdFxcdCAgICAgKHZvaWQgKigqKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpKU5VTEwpKTtcXG4yMDk0OlxcdFxcdFxcdFxcdEJVSUxEX0JVR19PTighX19zYW1lX3R5cGUob3BzLVxcdTAwM2VtYXBfZGVsZXRlX2VsZW0sXFxuMjA5NTpcXHRcXHRcXHRcXHRcXHQgICAgIChsb25nICgqKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpKU5VTEwpKTtcXG4yMDk2OlxcdFxcdFxcdFxcdEJVSUxEX0JVR19PTighX19zYW1lX3R5cGUob3BzLVxcdTAwM2VtYXBfdXBkYXRlX2VsZW0sXFxuMjA5NzpcXHRcXHRcXHRcXHRcXHQgICAgIChsb25nICgqKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbjIwOTg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdTY0IGZsYWdzKSlOVUxMKSk7XFxuMjA5OTpcXHRcXHRcXHRcXHRCVUlMRF9CVUdfT04oIV9fc2FtZV90eXBlKG9wcy1cXHUwMDNlbWFwX3B1c2hfZWxlbSxcXG4yMTAwOlxcdFxcdFxcdFxcdFxcdCAgICAgKGxvbmcgKCopKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLFxcbjIxMDE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdTY0IGZsYWdzKSlOVUxMKSk7XFxuMjEwMjpcXHRcXHRcXHRcXHRCVUlMRF9CVUdfT04oIV9fc2FtZV90eXBlKG9wcy1cXHUwMDNlbWFwX3BvcF9lbGVtLFxcbjIxMDM6XFx0XFx0XFx0XFx0XFx0ICAgICAobG9uZyAoKikoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUpKU5VTEwpKTtcXG4yMTA0OlxcdFxcdFxcdFxcdEJVSUxEX0JVR19PTighX19zYW1lX3R5cGUob3BzLVxcdTAwM2VtYXBfcGVla19lbGVtLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyMzo0OS41MzY0ODQwMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjcxMjE0NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBgeHNrX21hcF9nZW5fbG9va3VwYCBpbiBYRFAvWFNLIE1hcCBPcGVyYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBuZXQveGRwL3hza21hcC5jYC4gQSBxdWljayBjaGVjayBjb25maXJtcyBpdDogYHN0YXRpYyBpbnQgeHNrX21hcF9nZW5fbG9va3VwKC4uLilgLiBOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgaG93IHRoaXMgaW1wYWN0cyBzeW1ib2wgdGFyZ2V0aW5nLCBlc3BlY2lhbGx5IGdpdmVuIG91ciBmb2N1cyBvbiBzcGVjaWZpYyBsb2dpYyBjaGFuZ2VzLlxuXG5UaGUgZG9jdW1lbnRhdGlvbidzIFNlY3Rpb24gNCBpcyBrZXkgaGVyZS4gSXQgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIHN0YXRpYyBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgKHdoaWNoIHR5cGljYWxseSBoYXZlIHN5bWJvbCBlbnRyaWVzIGluIGBrYWxsc3ltc2Agb3IgYHZtbGludXhgKSBhbmQgc3RhdGljIGlubGluZXMgaW4gaGVhZGVycyAoLmgpLCB3aGljaCBhcmUgZ2VuZXJhbGx5IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBsYWNrIGRpc3RpbmN0IHN5bWJvbHMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgYHhza19tYXBfZ2VuX2xvb2t1cGAgaXMgc3ViamVjdCB0byBpbmxpbmluZy5cblxuQWgsIGJ1dCB3YWl0ISBUaGUgY3J1Y2lhbCBkZXRhaWwgaXMgdGhhdCBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyBhc3NpZ25lZCB0byBgeHNrX21hcF9vcHMubWFwX2dlbl9sb29rdXBgLCBhIGZ1bmN0aW9uIHBvaW50ZXIuIFRoaXMgbWVhbnMgdGhlIGNvbXBpbGVyICpjYW5ub3QqIGNvbXBsZXRlbHkgaW5saW5lIGl0IGF3YXksIGFzIGl0cyBhZGRyZXNzIGlzIHRha2VuIGFuZCB1c2VkIHdpdGhpbiBgeHNrX21hcF9vcHNgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgc3VnZ2VzdHMgYSBzeW1ib2wgZXhpc3RzIGFuZCBpcyB0aGVyZWZvcmUgdGFyZ2V0YWJsZS5cblxuVG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byBjb25zaWRlciByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgcG90ZW50aWFsIGNhbGxlcnMgd2l0aGluIGBuZXQveGRwL3hza21hcC5jYC4gTGV0IG1lIGxpc3QgdGhvc2UgSSBrbm93IG9mOiBgeHNrX21hcF9nZW5fbG9va3VwYCwgYHhza19tYXBfYWxsb2NgLCBgeHNrX21hcF9ub2RlX2FsbG9jYCwgYHhza19tYXBfbG9va3VwX2VsZW1gLCBgeHNrX21hcF91cGRhdGVfZWxlbWAsIGFuZCBgeHNrX21hcF9kZWxldGVfZWxlbWAuIEkgbmVlZCB0byByZXZpZXcgdGhlc2UgZnVuY3Rpb25zIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZS4gRmluYWxseSwgSSB3aWxsIHZlcmlmeSB0aGUgZXhpc3Rpbmcgc3ltYm9scyBpbiBgbmV0L3hkcC94c2ttYXAuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjIyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjM6NTQuMjA3NzAyMjI3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hza21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1MDpcXHR9XFxuIDI1MTpcXHRcXG4gMjUyOlxcdHZvaWQgeHNrX21hcF90cnlfc29ja19kZWxldGUoc3RydWN0IHhza19tYXAgKm1hcCwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gMjUzOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHhkcF9zb2NrIF9fcmN1ICoqbWFwX2VudHJ5KVxcbiAyNTQ6XFx0e1xcbiAyNTU6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZtYXAtXFx1MDAzZWxvY2spO1xcbiAyNTY6XFx0XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcigqbWFwX2VudHJ5KSA9PSB4cykge1xcbiAyNTc6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKCptYXBfZW50cnksIE5VTEwpO1xcbiAyNTg6XFx0XFx0XFx0eHNrX21hcF9zb2NrX2RlbGV0ZSh4cywgbWFwX2VudHJ5KTtcXG4gMjU5OlxcdFxcdH1cXG4gMjYwOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZtYXAtXFx1MDAzZWxvY2spO1xcbiAyNjE6XFx0fVxcbiAyNjI6XFx0XFxuIDI2MzpcXHRzdGF0aWMgYm9vbCB4c2tfbWFwX21ldGFfZXF1YWwoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1ldGEwLFxcbiAyNjQ6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfbWFwICptZXRhMSlcXG4gMjY1OlxcdHtcXG4gMjY2OlxcdFxcdHJldHVybiBtZXRhMC1cXHUwMDNlbWF4X2VudHJpZXMgPT0gbWV0YTEtXFx1MDAzZW1heF9lbnRyaWVzIFxcdTAwMjZcXHUwMDI2XFxuIDI2NzpcXHRcXHRcXHRicGZfbWFwX21ldGFfZXF1YWwobWV0YTAsIG1ldGExKTtcXG4gMjY4OlxcdH1cXG4gMjY5OlxcdFxcbiAyNzA6XFx0QlRGX0lEX0xJU1RfU0lOR0xFKHhza19tYXBfYnRmX2lkcywgc3RydWN0LCB4c2tfbWFwKVxcbiAyNzE6XFx0Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHhza19tYXBfb3BzID0ge1xcbiAyNzI6XFx0XFx0Lm1hcF9tZXRhX2VxdWFsID0geHNrX21hcF9tZXRhX2VxdWFsLFxcbiAyNzM6XFx0XFx0Lm1hcF9hbGxvYyA9IHhza19tYXBfYWxsb2MsXFxuIDI3NDpcXHRcXHQubWFwX2ZyZWUgPSB4c2tfbWFwX2ZyZWUsXFxuIDI3NTpcXHRcXHQubWFwX2dldF9uZXh0X2tleSA9IHhza19tYXBfZ2V0X25leHRfa2V5LFxcbiAyNzY6XFx0XFx0Lm1hcF9sb29rdXBfZWxlbSA9IHhza19tYXBfbG9va3VwX2VsZW0sXFxuIDI3NzpcXHRcXHQubWFwX2dlbl9sb29rdXAgPSB4c2tfbWFwX2dlbl9sb29rdXAsXFxuIDI3ODpcXHRcXHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0geHNrX21hcF9sb29rdXBfZWxlbV9zeXNfb25seSxcXG4gMjc5OlxcdFxcdC5tYXBfdXBkYXRlX2VsZW0gPSB4c2tfbWFwX3VwZGF0ZV9lbGVtLFxcbiAyODA6XFx0XFx0Lm1hcF9kZWxldGVfZWxlbSA9IHhza19tYXBfZGVsZXRlX2VsZW0sXFxuIDI4MTpcXHRcXHQubWFwX2NoZWNrX2J0ZiA9IG1hcF9jaGVja19ub19idGYsXFxuIDI4MjpcXHRcXHQubWFwX21lbV91c2FnZSA9IHhza19tYXBfbWVtX3VzYWdlLFxcbiAyODM6XFx0XFx0Lm1hcF9idGZfaWQgPSBcXHUwMDI2eHNrX21hcF9idGZfaWRzWzBdLFxcbiAyODQ6XFx0XFx0Lm1hcF9yZWRpcmVjdCA9IHhza19tYXBfcmVkaXJlY3QsXFxuIDI4NTpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyMzo1NC4yMDc4MjMwMTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjE4OTY4NTUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gIEkgc2VlIHdlJ3JlIGxvb2tpbmcgYXQgYEVuYWJsZUNvbmZpZ3NgLCBzcGVjaWZpY2FsbHkgYFhEUF9TT0NLRVRTYCBhbmQsIGJlY2F1c2UgaXQncyBhIGRlcGVuZGVuY3ksIGBCUEZfU1lTQ0FMTGAuIEdvb2QuIFRoZXNlIGFyZSB0aGUgcmlnaHQgc3RhcnRpbmcgcG9pbnRzLiBgQlBGX1NZU0NBTExgIGlzIGEgY29yZSBCUEYgY29uZmlnLCBhbmQgYFhEUF9TT0NLRVRTYCBpcywgb2YgY291cnNlLCB0aGUga2V5IGZvciBYU0sgYW5kIGB4c2ttYXAuY2AuXG5cbk5vdywgSSdsbCBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9sKHMpLiBMb29raW5nIGF0IGBGb2N1c1N5bWJvbHNgLCBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyB0aGUgcGlucG9pbnQuIEkgY291bGQgcG90ZW50aWFsbHkgYnJvYWRlbiB0aGUgc2NvcGUgdG8gaW5jbHVkZSB0aGluZ3MgbGlrZSBgYnBmX2RvX21pc2NfZml4dXBzYCBvciBgeHNrX21hcF9hbGxvY2AsIGJ1dCBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyB2ZXJ5IHNwZWNpZmljLiBTdGljayB3aXRoIHRoYXQgZm9jdXMuXG5cblRpbWUgZm9yIHRoZSBjcnVjaWFsIGBXb3J0aEZ1enppbmdgIGRvdWJsZS1jaGVjay4gIExldCdzIHNlZTpcblxuKiAgICoqQ29yZSBTdWJzeXN0ZW06KiogSXQgaW52b2x2ZXMgQlBGIGFuZCBYRFAgbmV0d29ya2luZywgc28geWVzLCB0aGlzIGlzIGFic29sdXRlbHkgZm91bmRhdGlvbmFsLlxuKiAgICoqSW5zdHJ1Y3Rpb24gR2VuZXJhdGlvbiBMb2dpYzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluc3RydWN0aW9uIGdlbmVyYXRpb24gZm9yIEpJVC9pbmxpbmVkIG1hcCBsb29rdXBzIHdpdGhpbiBYU0tNQVAsIHNwZWNpZmljYWxseSBzd2l0Y2hpbmcgZnJvbSBgQlBGX0pNUF9JTU1gIHRvIGBCUEZfSk1QMzJfSU1NYC4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIGhvdyBieXRlY29kZSBpcyBwcm9kdWNlZC5cbiogICAqKlJlYWNoYWJsZSBQYXRoOioqICBJdCdzIHRyaWdnZXJlZCB0aHJvdWdoIHRoZSBCUEYgc3lzY2FsbCB3aGVuIGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSB3aXRoIFhTS01BUCBtYXAgbG9va3Vwcy4gVGhhdCdzIGEgc3RhbmRhcmQgYWNjZXNzIHBvaW50LlxuKiAgICoqQ29uY2x1c2lvbjoqKiBUaGlzIGlzICpjbGVhcmx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIGluIGEgc2Vuc2l0aXZlIGFyZWEgdGhhdOKAmXMgcmVhZGlseSBhY2Nlc3NpYmxlLlxuXG5Pa2F5LCBsZXQncyBmb3JtYWxpemUgdGhlIHJlYXNvbmluZzogVGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGluc3RydWN0aW9uIGVtaXNzaW9uIGZvciBYU0tNQVAgbG9va3Vwcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgeHNrX21hcF9nZW5fbG9va3VwYC4gSW5zdGVhZCBvZiB1c2luZyA2NC1iaXQganVtcHMgKGBCUEZfSk1QX0lNTWApLCBpdCdzIG5vdyBnZW5lcmF0aW5nIDMyLWJpdCBqdW1wcyAoYEJQRl9KTVAzMl9JTU1gKS4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIGhvdyBCUEYgYnl0ZWNvZGUgaXMgZ2VuZXJhdGVkIGFuZCBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiBBRl9YRFAgbWFwcy4gR2l2ZW4gdGhhdCB0aGVzZSBtYXBzIGFyZSBhY2Nlc3NpYmxlIGV2ZW4gaW4gYSB2YW5pbGxhIFFFTVUgZW52aXJvbm1lbnQsIGZ1enppbmcgdGhlIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGV4ZWN1dGlvbiBpbnZvbHZpbmcgWFNLTUFQcyBoYXMgYSBoaWdoIHByb2JhYmlsaXR5IG9mIHVuY292ZXJpbmcgcmVncmVzc2lvbnMgb3IgcmV2ZWFsaW5nIHVuZXhwZWN0ZWQgdmVyaWZpZXIgb3IgZXhlY3V0aW9uIGJlaGF2aW9yLiBUaGF0J3MgYSBjbGVhciB3aW4uXG5cblJpZ2h0LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNzQsIk91dHB1dFRva2VucyI6MTM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjQ6MDAuMzk3NTEzOTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIzMTM4MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza19tYXBfZ2VuX2xvb2t1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHhza19tYXBfZ2VuX2xvb2t1cCgpIGluIG5ldC94ZHAveHNrbWFwLmMgYnkgY2hhbmdpbmcgdGhlIGVtaXR0ZWQgbG9va3VwIGluc3RydWN0aW9uIGZyb20gQlBGX0pNUF9JTU0gdG8gQlBGX0pNUDMyX0lNTSB3aGVuIHZlcmlmeWluZyBhbmQgaW5saW5pbmcgWFNLTUFQIGxvb2t1cHMuIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgQlBGL1hEUCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza19tYXBfZ2VuX2xvb2t1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHhza19tYXBfZ2VuX2xvb2t1cCgpIGluIG5ldC94ZHAveHNrbWFwLmMgYnkgY2hhbmdpbmcgdGhlIGVtaXR0ZWQgbG9va3VwIGluc3RydWN0aW9uIGZyb20gQlBGX0pNUF9JTU0gdG8gQlBGX0pNUDMyX0lNTSB3aGVuIHZlcmlmeWluZyBhbmQgaW5saW5pbmcgWFNLTUFQIGxvb2t1cHMuIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgQlBGL1hEUCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyNDowMC41Mjk4NDY2NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDk1MTAwODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjQ6MDAuNTMyOTIxMzg4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjcwOTIwMjA1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgYSA2NC1iaXQganVtcCBpbnN0cnVjdGlvbiAoQlBGX0pNUF9JTU0pIHRvIGEgMzItYml0IGp1bXAgaW5zdHJ1Y3Rpb24gKEJQRl9KTVAzMl9JTU0pIGluIHhza19tYXBfZ2VuX2xvb2t1cCgpIHdoZW4gaW5saW5pbmcgQlBGIGluc3RydWN0aW9ucyBmb3IgWFNLIG1hcCBlbGVtZW50IGxvb2t1cHMuIFRoaXMgY2hhbmdlIGRvZXMgbm90IHRvdWNoIG1lbW9yeSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBidWcgaW52b2x2aW5nIGluY29ycmVjdCBicmFuY2ggb2Zmc2V0cyBvciBpbmRleGluZyB3b3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdW5leHBlY3RlZCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM1YmM3YTdkMjAwMWJmZjUyNjc5ZjE0MGE1Njk0ZDM3MGI0YmEyMzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxODoyMzowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrbWFwLmMgYi9uZXQveGRwL3hza21hcC5jXG5pbmRleCAzYmZmMzQ2MzA4ZDBmLi5iZjAwZDY0NjNjMTkxIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2ttYXAuY1xuKysrIGIvbmV0L3hkcC94c2ttYXAuY1xuQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgaW50IHhza19tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4gXG4gXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHJldCwgaW5kZXgsIDApO1xuLVx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KR0UsIHJldCwgbWFwLVx1MDAzZW1heF9lbnRyaWVzLCA1KTtcbitcdCppbnNuKysgPSBCUEZfSk1QMzJfSU1NKEJQRl9KR0UsIHJldCwgbWFwLVx1MDAzZW1heF9lbnRyaWVzLCA1KTtcbiBcdCppbnNuKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9MU0gsIHJldCwgaWxvZzIoc2l6ZW9mKHN0cnVjdCB4c2tfc29jayAqKSkpO1xuIFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgbXAsIG9mZnNldG9mKHN0cnVjdCB4c2tfbWFwLCB4c2tfbWFwKSk7XG4gXHQqaW5zbisrID0gQlBGX0FMVTY0X1JFRyhCUEZfQURELCByZXQsIG1wKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjI0OjAwLjUzMjkyMzAyOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzA3MjUwNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhbiBYRFAgTWFwIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIFRoZSBkaWZmIHNob3dzIGEgbW9kaWZpY2F0aW9uIHdpdGhpbiBgbmV0L3hkcC94c2ttYXAuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGB4c2tfbWFwX2dlbl9sb29rdXBgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgYWRqdXN0bWVudCB0byB0aGUgQlBGIGluc3RydWN0aW9ucy5cblxuTG9va2luZyBhdCB0aGUgZGlmZiwgdGhlIGNoYW5nZSBpcyBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LiBXZSd2ZSBzd2l0Y2hlZCBmcm9tIHVzaW5nIGBCUEZfSk1QX0lNTWAgdG8gYEJQRl9KTVAzMl9JTU1gIGluIHRoZSBjb21wYXJpc29uIGluc3RydWN0aW9uLiBUaGlzIGp1bXAgaXMgY29uZGl0aW9uYWwsIGFuZCB0aGUga2V5IGlzIHRoZSBzaXplIG9mIGByZXRgIGFnYWluc3QgYG1hcC1cdTAwM2VtYXhfZW50cmllc2AuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKndoeSogdGhlIGNoYW5nZSBmcm9tIGEgNjQtYml0IGp1bXAgdG8gYSAzMi1iaXQgb25lIGhlcmU/IElzIHRoZXJlIHNvbWUgb3B0aW1pemF0aW9uLCBvciBpcyBpdCBhIGJ1ZyBmaXg/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHR5cGVzIGludm9sdmVkLiAgQXJlIHdlIG5vdyBleHBlY3RpbmcgMzItYml0IHZhbHVlcyBpbnN0ZWFkIG9mIDY0LWJpdCBmb3Igc29tZSByZWFzb24/IEdpdmVuIHRoYXQgd2UgYXJlIGluZGV4aW5nIGludG8gYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gYHhza19zb2NrYCwgSSBwcmVzdW1lIGByZXRgIGlzIGFuIGluZGV4LCB3aGljaCBpcyB1c3VhbGx5IGEgMzItYml0IHF1YW50aXR5LCBidXQgaXQgc3RpbGwgbWFrZXMgbWUgYXNrIHdoeSB3ZSdyZSBzZWVpbmcgdGhlIGNoYW5nZS5cblxuSSdsbCBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBpbiB0aGUgZmlsZS4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZW50IG9mIGB4c2tfbWFwX2dlbl9sb29rdXBgIHdpbGwgYmUgY3J1Y2lhbC4gV2hhdCdzIHRoZSBtYXAncyByb2xlIGluIHRoZSBYRFAgZnJhbWV3b3JrPyBJcyB0aGlzIGxvb2t1cCBwZXJmb3JtaW5nIGJvdW5kcyBjaGVja2luZyBvbiB0aGUgYXJyYXkgaW5kZXg/IElzIHRoaXMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIHJlY2VudCAzMi82NCBiaXQgcG9pbnRlciBzaXplIGRpc2N1c3Npb25zP1xuXG5VbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyB0byBjb25maXJtIHRoYXQgdGhlIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gZW5zdXJlIGl0J3MgY29ycmVjdCBmb3IgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBhcmNoaXRlY3R1cmVzLCBhbmQgZG9lc24ndCBicmVhayB0aGUgaW50ZW5kZWQgYmVoYXZpb3Igb2YgdGhlIFhEUCBtYXAuIEknbGwgcHJvYmFibHkgYWxzbyB3YW50IHRvIHJldmlldyB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiB0byBzZWUgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyNDowNy4yNDAxNzcxMDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrbWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE1OlxcdFxcdGlmIChpbmRleCA9PSBtLVxcdTAwM2VtYXAubWF4X2VudHJpZXMgLSAxKVxcbiAxMTY6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDExNzpcXHRcXHQqbmV4dCA9IGluZGV4ICsgMTtcXG4gMTE4OlxcdFxcdHJldHVybiAwO1xcbiAxMTk6XFx0fVxcbiAxMjA6XFx0XFxuIDEyMTpcXHRzdGF0aWMgaW50IHhza19tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbiAxMjI6XFx0e1xcbiAxMjM6XFx0XFx0Y29uc3QgaW50IHJldCA9IEJQRl9SRUdfMCwgbXAgPSBCUEZfUkVHXzEsIGluZGV4ID0gQlBGX1JFR18yO1xcbiAxMjQ6XFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxuIDEyNTpcXHRcXG4gMTI2OlxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfVywgcmV0LCBpbmRleCwgMCk7XFxuIDEyNzpcXHRcXHQqaW5zbisrID0gQlBGX0pNUDMyX0lNTShCUEZfSkdFLCByZXQsIG1hcC1cXHUwMDNlbWF4X2VudHJpZXMsIDUpO1xcbiAxMjg6XFx0XFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0xTSCwgcmV0LCBpbG9nMihzaXplb2Yoc3RydWN0IHhza19zb2NrICopKSk7XFxuIDEyOTpcXHRcXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBtcCwgb2Zmc2V0b2Yoc3RydWN0IHhza19tYXAsIHhza19tYXApKTtcXG4gMTMwOlxcdFxcdCppbnNuKysgPSBCUEZfQUxVNjRfUkVHKEJQRl9BREQsIHJldCwgbXApO1xcbiAxMzE6XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9TSVpFT0Yoc3RydWN0IHhza19zb2NrICopLCByZXQsIHJldCwgMCk7XFxuIDEzMjpcXHRcXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcXG4gMTMzOlxcdFxcdCppbnNuKysgPSBCUEZfTU9WNjRfSU1NKHJldCwgMCk7XFxuIDEzNDpcXHRcXHRyZXR1cm4gaW5zbiAtIGluc25fYnVmO1xcbiAxMzU6XFx0fVxcbiAxMzY6XFx0XFxuIDEzNzpcXHQvKiBFbGVtZW50cyBhcmUga2VwdCBhbGl2ZSBieSBSQ1U7IGVpdGhlciBieSByY3VfcmVhZF9sb2NrKCkgKGZyb20gc3lzY2FsbCkgb3JcXG4gMTM4OlxcdCAqIGJ5IGxvY2FsX2JoX2Rpc2FibGUoKSAoZnJvbSBYRFAgY2FsbHMgaW5zaWRlIE5BUEkpLiBUaGVcXG4gMTM5OlxcdCAqIHJjdV9yZWFkX2xvY2tfYmhfaGVsZCgpIGJlbG93IG1ha2VzIGxvY2tkZXAgYWNjZXB0IGJvdGguXFxuIDE0MDpcXHQgKi9cXG4gMTQxOlxcdHN0YXRpYyB2b2lkICpfX3hza19tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSlcXG4gMTQyOlxcdHtcXG4gMTQzOlxcdFxcdHN0cnVjdCB4c2tfbWFwICptID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IHhza19tYXAsIG1hcCk7XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdGlmIChrZXkgXFx1MDAzZT0gbWFwLVxcdTAwM2VtYXhfZW50cmllcylcXG4gMTQ2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAxNDc6XFx0XFxuIDE0ODpcXHRcXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKG0tXFx1MDAzZXhza19tYXBba2V5XSwgcmN1X3JlYWRfbG9ja19iaF9oZWxkKCkpO1xcbiAxNDk6XFx0fVxcbiAxNTA6XFx0XFxuIDE1MTpcXHRzdGF0aWMgdm9pZCAqeHNrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIDE1MjpcXHR7XFxuIDE1MzpcXHRcXHRyZXR1cm4gX194c2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xcbiAxNTQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyNDowNy4yNDAyODE3MTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMzODYxMzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEJQRiBMb29rdXAgR2VuZXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB4c2tfbWFwX2dlbl9sb29rdXBgIGZ1bmN0aW9uLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXRzIGpvYiBpcyB0byBkeW5hbWljYWxseSBnZW5lcmF0ZSB0aGUgaW5saW5lIEJQRiBpbnN0cnVjdGlvbnMgbmVjZXNzYXJ5IGZvciBsb29raW5nIHVwIGFuIGVsZW1lbnQgd2l0aGluIGFuIGB4c2tfbWFwYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhpcyBjb2RlIGNoYW5nZSBhbmQgd2h5IGl0IHdhcyBtYWRlLlxuXG5TcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGF0IHRoZSB0cmFuc2l0aW9uLiBMaW5lIDEyNiB1c2VzIGBCUEZfTERYX01FTShCUEZfVywgcmV0LCBpbmRleCwgMClgIHRvIGxvYWQgdGhlIGB1MzJgIGtleSBpbnRvIGByZXRgLiBCZWZvcmUsIHRoZSBjb21wYXJpc29uIHdhcyBkb25lIG9uIHRoZSA2NC1iaXQgdmFsdWUgdmlhIGBCUEZfSk1QX0lNTShCUEZfSkdFLCByZXQsIG1hcC1cdTAwM2VtYXhfZW50cmllcywgNSlgLiBOb3csIGl0J3MgZG9uZSB2aWEgYEJQRl9KTVAzMl9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtXHUwMDNlbWF4X2VudHJpZXMsIDUpYCwgY29tcGFyaW5nIHRoZSAzMi1iaXQgaW1tZWRpYXRlLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIDMyLWJpdCBjb21wYXJpc29uIHdhcyBpbnRyb2R1Y2VkLiBQZXJoYXBzIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlLCBvciBzb21lIG9wdGltaXphdGlvbi4gVG8gZ2V0IGEgYmV0dGVyIGNvbnRleHQsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIG90aGVyIGluc3RhbmNlcyBvZiBgbWFwX2dlbl9sb29rdXBgIHdpdGhpbiB0aGUga2VybmVsIHRvIHNlZSBpZiB0aGVyZSBhcmUgc2ltaWxhciBjaGFuZ2VzIG9yIHBhdHRlcm5zIHRoYXQgY291bGQgcHJvdmlkZSBzb21lIGluc2lnaHQuIFBlcmhhcHMgdGhlcmUgaXMgYSBwYXRjaCBzZXJpZXMgdGhhdCBjb3ZlcnMgdGhpcyBjaGFuZ2UgaW4gbW9yZSBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyNDoxMC41Nzg4OTgxNDFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDI3MzMwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX0pNUDMyX0lNTS4qbWF4X2VudHJpZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2ttYXAuYz0xMjE9c3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4tLVxcbm5ldC94ZHAveHNrbWFwLmMtMTI2LVxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfVywgcmV0LCBpbmRleCwgMCk7XFxubmV0L3hkcC94c2ttYXAuYzoxMjc6XFx0Kmluc24rKyA9IEJQRl9KTVAzMl9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtXFx1MDAzZW1heF9lbnRyaWVzLCA1KTtcXG5uZXQveGRwL3hza21hcC5jLTEyOC1cXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfTFNILCByZXQsIGlsb2cyKHNpemVvZihzdHJ1Y3QgeHNrX3NvY2sgKikpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjQ6MTMuMTIxNjM5NjMxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNzk4MzA0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IGlzOlxuXG4qKkh1bnRpbmcgRG93biBgX2dlbl9sb29rdXBgIEltcGxlbWVudGF0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgcGxhY2VzIHdoZXJlIGBfZ2VuX2xvb2t1cGAgaXMgYWN0dWFsbHkgKmltcGxlbWVudGVkKiB3aXRoaW4gdGhlIGtlcm5lbC4gSSBrbm93IGl0J3MgcHJvYmFibHkgYXNzb2NpYXRlZCB3aXRoIEJQRiwgZ2l2ZW4gaXRzIG5hbWUsIHNvIEkgc2hvdWxkIGRlZmluaXRlbHkgc3RhcnQgYnkgZGlnZ2luZyB0aHJvdWdoIHRoZSBga2VybmVsL2JwZmAgZGlyZWN0b3J5LiBUaGF0J3MgYSBsaWtlbHkgY2FuZGlkYXRlLiBCZXlvbmQgdGhhdCwgSSByZW1lbWJlciBzZWVpbmcgc2ltaWxhciBsb29rdXAgbWVjaGFuaXNtcyBwb3RlbnRpYWxseSBpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gU3BlY2lmaWNhbGx5LCBJIHJlY2FsbCBzb21lIGZpbHRlciBsb2dpYyBoYW5naW5nIGFyb3VuZCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIEl0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHdpZGVuIHRoZSBuZXQsIHNvIHRvIHNwZWFrLiBJJ2xsIG5lZWQgdG8gdXNlIGEgYnJvYWQgc2VhcmNoIGFjcm9zcyB0aGVzZSBhcmVhcyB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLiBMZXQncyBzZWUgd2hhdCB0dXJucyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY4MCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjI0OjE2LjUwMTQ3MjU1OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3NTY4NTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfZ2VuX2xvb2t1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oPTg3PXN0cnVjdCBicGZfbWFwX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTEyNi1cXHR2b2lkICgqbWFwX2ZkX3B1dF9wdHIpKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnB0ciwgYm9vbCBuZWVkX2RlZmVyKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjEyNzpcXHRpbnQgKCptYXBfZ2VuX2xvb2t1cCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zik7XFxuaW5jbHVkZS9saW51eC9icGYuaC0xMjgtXFx0dTMyICgqbWFwX2ZkX3N5c19sb29rdXBfZWxlbSkodm9pZCAqcHRyKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0yMDE9c3RhdGljIGludCBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGltbSxcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yMTctLyogZW1pdCBCUEYgaW5zdHJ1Y3Rpb25zIGVxdWl2YWxlbnQgdG8gQyBjb2RlIG9mIGFycmF5X21hcF9sb29rdXBfZWxlbSgpICovXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjIxODpzdGF0aWMgaW50IGFycmF5X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTIxOS17XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9Mjc3PXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW1tLCB1MzIgKm9mZilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yOTMtLyogZW1pdCBCUEYgaW5zdHJ1Y3Rpb25zIGVxdWl2YWxlbnQgdG8gQyBjb2RlIG9mIHBlcmNwdV9hcnJheV9tYXBfbG9va3VwX2VsZW0oKSAqL1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoyOTQ6c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjk1LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz04NTk9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODY4LVxcdC5tYXBfZGVsZXRlX2VsZW0gPSBhcnJheV9tYXBfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg2OTpcXHQubWFwX2dlbl9sb29rdXAgPSBhcnJheV9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODcwLVxcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODg2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04OTItXFx0Lm1hcF9sb29rdXBfZWxlbSA9IHBlcmNwdV9hcnJheV9tYXBfbG9va3VwX2VsZW0sXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg5MzpcXHQubWFwX2dlbl9sb29rdXAgPSBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg5NC1cXHQubWFwX2RpcmVjdF92YWx1ZV9hZGRyID0gcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcixcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNDY0PXN0YXRpYyB2b2lkICphcnJheV9vZl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0NzMtXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE0NzQ6c3RhdGljIGludCBhcnJheV9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDc1LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MTUwNT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfb2ZfbWFwc19tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE1MTQtXFx0Lm1hcF9mZF9zeXNfbG9va3VwX2VsZW0gPSBicGZfbWFwX2ZkX3N5c19sb29rdXBfZWxlbSxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTUxNTpcXHQubWFwX2dlbl9sb29rdXAgPSBhcnJheV9vZl9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxNi1cXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTUxMz1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNDctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMDQ4OlxcdFxcdC8qIEJQRl9FTUlUX0NBTEwoKSBhc3N1bXB0aW9ucyBpbiBzb21lIG9mIHRoZSBtYXBfZ2VuX2xvb2t1cFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjA0OS1cXHRcXHQgKiBhbmQgb3RoZXIgaW5saW5pbmcgaGFuZGxlcnMgYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIDY0IGJpdFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDY4LVxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0ZVTkNfbWFwX2xvb2t1cF9lbGVtIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9maXh1cHMuYzoyMDY5OlxcdFxcdFxcdCAgICBvcHMtXFx1MDAzZW1hcF9nZW5fbG9va3VwKSB7XFxua2VybmVsL2JwZi9maXh1cHMuYzoyMDcwOlxcdFxcdFxcdFxcdGNudCA9IG9wcy1cXHUwMDNlbWFwX2dlbl9sb29rdXAobWFwX3B0ciwgaW5zbl9idWYpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMjA3MS1cXHRcXHRcXHRcXHRpZiAoY250ID09IC1FT1BOT1RTVVBQKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9NzE1PXN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy03MzUtICogVGhlIHJldHVybiB2YWx1ZSBpcyBhZGp1c3RlZCBieSBCUEYgaW5zdHJ1Y3Rpb25zXFxua2VybmVsL2JwZi9oYXNodGFiLmM6NzM2OiAqIGluIGh0YWJfbWFwX2dlbl9sb29rdXAoKS5cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy03MzctICovXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz03NTg9c3RhdGljIHZvaWQgKmh0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTc3OC0gKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo3Nzk6c3RhdGljIGludCBodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNzgwLXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTgxMz1zdGF0aWMgdm9pZCAqaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy04MTctXFxua2VybmVsL2JwZi9oYXNodGFiLmM6ODE4OnN0YXRpYyBpbnQgaHRhYl9scnVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy04MTktXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIzNjE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzEtXFx0Lm1hcF9kZWxldGVfZWxlbSA9IGh0YWJfbWFwX2RlbGV0ZV9lbGVtLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIzNzI6XFx0Lm1hcF9nZW5fbG9va3VwID0gaHRhYl9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzczLVxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzgzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5NC1cXHQubWFwX2RlbGV0ZV9lbGVtID0gaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIzOTU6XFx0Lm1hcF9nZW5fbG9va3VwID0gaHRhYl9scnVfbWFwX2dlbl9sb29rdXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5Ni1cXHQubWFwX3NlcV9zaG93X2VsZW0gPSBodGFiX21hcF9zZXFfc2hvd19lbGVtLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjQwNz1zdGF0aWMgdm9pZCAqaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MTctLyogaW5saW5lIGJwZl9tYXBfbG9va3VwX2VsZW0oKSBjYWxsIGZvciBwZXItQ1BVIGhhc2htYXAgKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDE4OnN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDE5LXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI1NjQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfcGVyY3B1X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTcwLVxcdC5tYXBfbG9va3VwX2VsZW0gPSBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjU3MTpcXHQubWFwX2dlbl9sb29rdXAgPSBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTcyLVxcdC5tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSA9IGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjY5OD1zdGF0aWMgdm9pZCAqaHRhYl9vZl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjcwNy1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzA4OnN0YXRpYyBpbnQgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3MDktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjczMj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9vZl9tYXBzX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzQxLVxcdC5tYXBfZmRfc3lzX2xvb2t1cF9lbGVtID0gYnBmX21hcF9mZF9zeXNfbG9va3VwX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc0MjpcXHQubWFwX2dlbl9sb29rdXAgPSBodGFiX29mX21hcF9nZW5fbG9va3VwLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NDMtXFx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzAyNT1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwODMtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA4NDpzdGF0aWMgaW50IHJodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzA4NS17XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTA4PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUxOS1cXHQubWFwX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2RlbGV0ZV9lbGVtLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MjA6XFx0Lm1hcF9nZW5fbG9va3VwID0gcmh0YWJfbWFwX2dlbl9sb29rdXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyMS1cXHQubWFwX3NlcV9zaG93X2VsZW0gPSByaHRhYl9tYXBfc2VxX3Nob3dfZWxlbSxcXG4tLVxcbm5ldC94ZHAveHNrbWFwLmM9MTA0PXN0YXRpYyBpbnQgeHNrX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcXG4tLVxcbm5ldC94ZHAveHNrbWFwLmMtMTIwLVxcbm5ldC94ZHAveHNrbWFwLmM6MTIxOnN0YXRpYyBpbnQgeHNrX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxubmV0L3hkcC94c2ttYXAuYy0xMjIte1xcbi0tXFxubmV0L3hkcC94c2ttYXAuYz0yNzE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHhza19tYXBfb3BzID0ge1xcbi0tXFxubmV0L3hkcC94c2ttYXAuYy0yNzYtXFx0Lm1hcF9sb29rdXBfZWxlbSA9IHhza19tYXBfbG9va3VwX2VsZW0sXFxubmV0L3hkcC94c2ttYXAuYzoyNzc6XFx0Lm1hcF9nZW5fbG9va3VwID0geHNrX21hcF9nZW5fbG9va3VwLFxcbm5ldC94ZHAveHNrbWFwLmMtMjc4LVxcdC5tYXBfbG9va3VwX2VsZW1fc3lzX29ubHkgPSB4c2tfbWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcGVyY3B1X2FycmF5X2lubmVyX21hcC5jLTUtICogVGVzdCB0aGF0IHJlcGxhY2luZyBhbiBpbm5lciBwZXJjcHUgYXJyYXkgbWFwIHdpdGggb25lIHRoYXQgaGFzIGRpZmZlcmVudFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3BlcmNwdV9hcnJheV9pbm5lcl9tYXAuYzo2OiAqIG1heF9lbnRyaWVzIGlzIHJlamVjdGVkLiAgcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwKCkgaW5saW5lcyB0aGVcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wZXJjcHVfYXJyYXlfaW5uZXJfbWFwLmMtNy0gKiB0ZW1wbGF0ZSdzIGluZGV4X21hc2ssIHNvIGFsbG93aW5nIGEgc21hbGxlciByZXBsYWNlbWVudCB3b3VsZCBjYXVzZSBPT0IuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjI0OjE4Ljc3NzE2MjcyMloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzE2MDgxNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIEFycmF5IE1hcCBMb29rdXAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc2VlLi4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBhcnJheSBtYXBzIGFuZCBob3cgbG9va3VwcyBhcmUgaGFuZGxlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvYnBmL2FycmF5bWFwLmNgIGFuZCBzcGVjaWZpY2FsbHksIGFyb3VuZCB0aGUgYGFycmF5X21hcF9nZW5fbG9va3VwYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29yZSBsb2dpYyBmb3IgcmV0cmlldmluZyB2YWx1ZXMgZnJvbSB0aGVzZSBtYXBzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIGluZGV4aW5nLCBib3VuZHMgY2hlY2tpbmcgKGNydWNpYWwhKSwgYW55IHBvdGVudGlhbCBjYWNoaW5nIG1lY2hhbmlzbXMsIGFuZCBlcnJvciBoYW5kbGluZy4gSSdsbCBiZSBsb29raW5nIGZvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgdG9vIC0gcGVyaGFwcyB0aGVyZSdzIHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIGltcHJvdmVkIGluIHRlcm1zIG9mIGxvb2t1cCBwZXJmb3JtYW5jZSBvciBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDc5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjQ6MjEuNDkzMjQ3MDc5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2FycmF5bWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE3LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE3OlxcdC8qIGVtaXQgQlBGIGluc3RydWN0aW9ucyBlcXVpdmFsZW50IHRvIEMgY29kZSBvZiBhcnJheV9tYXBfbG9va3VwX2VsZW0oKSAqL1xcbiAyMTg6XFx0c3RhdGljIGludCBhcnJheV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbiAyMTk6XFx0e1xcbiAyMjA6XFx0XFx0c3RydWN0IGJwZl9hcnJheSAqYXJyYXkgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FycmF5LCBtYXApO1xcbiAyMjE6XFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxuIDIyMjpcXHRcXHR1MzIgZWxlbV9zaXplID0gYXJyYXktXFx1MDAzZWVsZW1fc2l6ZTtcXG4gMjIzOlxcdFxcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XFxuIDIyNDpcXHRcXHRjb25zdCBpbnQgbWFwX3B0ciA9IEJQRl9SRUdfMTtcXG4gMjI1OlxcdFxcdGNvbnN0IGludCBpbmRleCA9IEJQRl9SRUdfMjtcXG4gMjI2OlxcdFxcbiAyMjc6XFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfSU5ORVJfTUFQKVxcbiAyMjg6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBtYXBfcHRyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX2FycmF5LCB2YWx1ZSkpO1xcbiAyMzE6XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9XLCByZXQsIGluZGV4LCAwKTtcXG4gMjMyOlxcdFxcdGlmICghbWFwLVxcdTAwM2VieXBhc3Nfc3BlY192MSkge1xcbiAyMzM6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KR0UsIHJldCwgbWFwLVxcdTAwM2VtYXhfZW50cmllcywgNCk7XFxuIDIzNDpcXHRcXHRcXHQqaW5zbisrID0gQlBGX0FMVTMyX0lNTShCUEZfQU5ELCByZXQsIGFycmF5LVxcdTAwM2VpbmRleF9tYXNrKTtcXG4gMjM1OlxcdFxcdH0gZWxzZSB7XFxuIDIzNjpcXHRcXHRcXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtXFx1MDAzZW1heF9lbnRyaWVzLCAzKTtcXG4gMjM3OlxcdFxcdH1cXG4gMjM4OlxcdFxcbiAyMzk6XFx0XFx0aWYgKGlzX3Bvd2VyX29mXzIoZWxlbV9zaXplKSkge1xcbiAyNDA6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0xTSCwgcmV0LCBpbG9nMihlbGVtX3NpemUpKTtcXG4gMjQxOlxcdFxcdH0gZWxzZSB7XFxuIDI0MjpcXHRcXHRcXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfTVVMLCByZXQsIGVsZW1fc2l6ZSk7XFxuIDI0MzpcXHRcXHR9XFxuIDI0NDpcXHRcXHQqaW5zbisrID0gQlBGX0FMVTY0X1JFRyhCUEZfQURELCByZXQsIG1hcF9wdHIpO1xcbiAyNDU6XFx0XFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XFxuIDI0NjpcXHRcXHQqaW5zbisrID0gQlBGX01PVjY0X0lNTShyZXQsIDApO1xcbiAyNDc6XFx0XFx0cmV0dXJuIGluc24gLSBpbnNuX2J1ZjtcXG4gMjQ4OlxcdH1cXG4gMjQ5OlxcdFxcbiAyNTA6XFx0LyogQ2FsbGVkIGZyb20gZUJQRiBwcm9ncmFtICovXFxuIDI1MTpcXHRzdGF0aWMgdm9pZCAqcGVyY3B1X2FycmF5X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIDI1MjpcXHR7XFxuIDI1MzpcXHRcXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XFxuIDI1NDpcXHRcXHR1MzIgaW5kZXggPSAqKHUzMiAqKWtleTtcXG4gMjU1OlxcdFxcbiAyNTY6XFx0XFx0aWYgKHVubGlrZWx5KGluZGV4IFxcdTAwM2U9IGFycmF5LVxcdTAwM2VtYXAubWF4X2VudHJpZXMpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyNDoyMS40OTMzOTc2MzlaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEzMTUxNDQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSW5zdHJ1Y3Rpb24gQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgeHNrX21hcF9nZW5fbG9va3VwYCwgSSBzZWUgdGhleSdyZSBzd2l0Y2hpbmcgZnJvbSBgQlBGX0pNUF9JTU1gIHRvIGBCUEZfSk1QMzJfSU1NYCB3aGVuIGRvaW5nIGEgYm91bmRzIGNoZWNrIGFnYWluc3QgYG1hcC1cdTAwM2VtYXhfZW50cmllc2AgYmVmb3JlIGluZGV4aW5nIGludG8gYG0tXHUwMDNleHNrX21hcGAuIEJvdGgganVtcCBpbnN0cnVjdGlvbnMgYXJlIGVzc2VudGlhbGx5IGRvaW5nIHRoZSBzYW1lIGpvYjogbWFraW5nIHN1cmUgYHJldGAgaXMgd2l0aGluIHRoZSB2YWxpZCByYW5nZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLlxuXG5UaGUgdGhpbmcgaXMsIHRoZSBjb2RlIGFscmVhZHkgZG9lcyBhIDMyLWJpdCBsb2FkIChgQlBGX0xEWF9NRU1gKSwgd2hpY2ggaXMgemVyby1leHRlbmRlZCBhbnl3YXkgb24gYSA2NC1iaXQgQlBGIFZNLiBJdCBzZWVtcyBsaWtlIHVzaW5nIGBKTVAzMmAgbWlnaHQgYmUgY2xlYW5lciBpbiBjZXJ0YWluIGNvbnRleHRzLCBtYXliZSBpbiBzdWItcmVnaXN0ZXIgbW9kZSBvciBwb3RlbnRpYWxseSBiZW5lZml0aW5nIHRoZSBKSVQgY29tcGlsZXIuIEJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHdlJ3JlIG5vdCBpbmFkdmVydGVudGx5IGV4cG9zaW5nIHNvbWV0aGluZy5cblxuU28sIGxldCdzIHJ1biB0aHJvdWdoIHRoZSBLTVNBTiBjaGVja2xpc3Q6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZToqKiBOb3BlLiBObyBkYXRhIGlzIGJlaW5nIGNvcGllZCBvdXQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE6KiogTm8uIFRoZXJlIGFyZW4ndCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBiZWluZyB1c2VkIGluIGEgY29uZGl0aW9uYWwuXG4zLiAgKipBbGxvY2F0aW9uL0luaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlczoqKiBOb3QgYW4gaXNzdWUgaGVyZS4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zIG9yIGluaXRpYWxpemF0aW9ucyBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGF0IHBsYXkuXG40LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OioqIE5vdywgaGVyZSdzIHdoZXJlIGl0ICpjb3VsZCogZ2V0IGludGVyZXN0aW5nLiBUaGlzICppcyogYSBib3VuZHMgY2hlY2ssIHllcywgYnV0IGl0J3Mgc3BlY2lmaWNhbGx5IGZvciBhbiBhcnJheSBsb29rdXAgaW5zaWRlIGFuIFhTSyBtYXAuIElmIHRoZSBib3VuZHMgY2hlY2sgZmFpbGVkIG9yIG1pc2JlaGF2ZWQsIGl0J2QgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gS0FTQU4gaXMgYnVpbHQgdG8gY2F0Y2ggc3VjaCBhY2Nlc3Nlcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCBkdWUgdG8gdGhpcyBjaGFuZ2UuXG5cbkVzc2VudGlhbGx5LCBhbGwgdGhlIGNyaXRlcmlhIGFyZSBuZWdhdGl2ZS5cblxuVG8gc3VtIHVwOlxuXG4qICAgVGhlIGNoYW5nZSBpbnZvbHZlcyBhIEJQRiBpbnN0cnVjdGlvbiBzd2l0Y2g6IGEgNjQtYml0IGp1bXAgdG8gYSAzMi1iaXQganVtcCBpbiB0aGUgaW5saW5lIEJQRiBjb2RlIGZvciBYU0sgbWFwIGxvb2t1cHMuXG4qICAgVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBJdCBhdm9pZHMgYWNjZXNzaW5nIG9yIGxlYWtpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuKiAgIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBhc3NvY2lhdGVkIHdpdGggQlBGIGFycmF5IGxvb2t1cHMgYXJlIGFscmVhZHkgYWRkcmVzc2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTiB0aHJvdWdoIGNoZWNraW5nIHRoZSBib3VuZHMuXG4qICAgVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcmlzayBpcyBleHRyZW1lbHkgbG93LiBJJ20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJIGZlZWwgY29uZmlkZW50IGluIHRoaXMuIEknbGwganVzdCBkbyBhIHF1aWNrIGZpbmFsIHJldmlldyB0byBtYWtlIHN1cmUuIE9rYXksIEknbSByZWFkeSB0byByZXNwb25kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTg4LCJPdXRwdXRUb2tlbnMiOjE2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjI0OjI3LjYyNDkxNDY0M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBhIDY0LWJpdCBqdW1wIGluc3RydWN0aW9uIChCUEZfSk1QX0lNTSkgdG8gYSAzMi1iaXQganVtcCBpbnN0cnVjdGlvbiAoQlBGX0pNUDMyX0lNTSkgaW4geHNrX21hcF9nZW5fbG9va3VwKCkgd2hlbiBpbmxpbmluZyBCUEYgaW5zdHJ1Y3Rpb25zIGZvciBYU0sgbWFwIGVsZW1lbnQgbG9va3Vwcy4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgdG91Y2ggbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1ZyBpbnZvbHZpbmcgaW5jb3JyZWN0IGJyYW5jaCBvZmZzZXRzIG9yIGluZGV4aW5nIHdvdWxkIHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB1bmV4cGVjdGVkIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBhIDY0LWJpdCBqdW1wIGluc3RydWN0aW9uIChCUEZfSk1QX0lNTSkgdG8gYSAzMi1iaXQganVtcCBpbnN0cnVjdGlvbiAoQlBGX0pNUDMyX0lNTSkgaW4geHNrX21hcF9nZW5fbG9va3VwKCkgd2hlbiBpbmxpbmluZyBCUEYgaW5zdHJ1Y3Rpb25zIGZvciBYU0sgbWFwIGVsZW1lbnQgbG9va3Vwcy4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgdG91Y2ggbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1ZyBpbnZvbHZpbmcgaW5jb3JyZWN0IGJyYW5jaCBvZmZzZXRzIG9yIGluZGV4aW5nIHdvdWxkIHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB1bmV4cGVjdGVkIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowtczhc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 17:56:33 +0000 UTC FinishedAt: 2026-09-10 18:24:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e4a62833adff6ef0fe7c0b90393204fe3c26b5c5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "XDP_SOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e4a62833adff6ef0fe7c0b90393204fe3c26b5c5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "XDP_SOCKETS" ], "series_id": "d9a3b075-4b81-4ee7-b09f-35151ceb47d5" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xsk_map_gen_lookup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX21hcF9nZW5fbG9va3VwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBhIDY0LWJpdCBqdW1wIGluc3RydWN0aW9uIChCUEZfSk1QX0lNTSkgdG8gYSAzMi1iaXQganVtcCBpbnN0cnVjdGlvbiAoQlBGX0pNUDMyX0lNTSkgaW4geHNrX21hcF9nZW5fbG9va3VwKCkgd2hlbiBpbmxpbmluZyBCUEYgaW5zdHJ1Y3Rpb25zIGZvciBYU0sgbWFwIGVsZW1lbnQgbG9va3Vwcy4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgdG91Y2ggbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1ZyBpbnZvbHZpbmcgaW5jb3JyZWN0IGJyYW5jaCBvZmZzZXRzIG9yIGluZGV4aW5nIHdvdWxkIHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB1bmV4cGVjdGVkIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHhza19tYXBfZ2VuX2xvb2t1cCgpIGluIG5ldC94ZHAveHNrbWFwLmMgYnkgY2hhbmdpbmcgdGhlIGVtaXR0ZWQgbG9va3VwIGluc3RydWN0aW9uIGZyb20gQlBGX0pNUF9JTU0gdG8gQlBGX0pNUDMyX0lNTSB3aGVuIHZlcmlmeWluZyBhbmQgaW5saW5pbmcgWFNLTUFQIGxvb2t1cHMuIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgQlBGL1hEUCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzViYzdhN2QyMDAxYmZmNTI2NzlmMTQwYTU2OTRkMzcwYjRiYTIzM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDE4OjIzOjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrbWFwLmMgYi9uZXQveGRwL3hza21hcC5jXG5pbmRleCAzYmZmMzQ2MzA4ZDBmLi5iZjAwZDY0NjNjMTkxIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2ttYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2ttYXAuY1xuQEAgLTEyNCw3ICYjNDM7MTI0LDcgQEAgc3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xuIFxuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHJldCwgaW5kZXgsIDApO1xuLVx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtXHUwMDNlbWF4X2VudHJpZXMsIDUpO1xuJiM0MztcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVAzMl9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtXHUwMDNlbWF4X2VudHJpZXMsIDUpO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfTFNILCByZXQsIGlsb2cyKHNpemVvZihzdHJ1Y3QgeHNrX3NvY2sgKikpKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgbXAsIG9mZnNldG9mKHN0cnVjdCB4c2tfbWFwLCB4c2tfbWFwKSk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfUkVHKEJQRl9BREQsIHJldCwgbXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX21hcF9nZW5fbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHhza19tYXBfZ2VuX2xvb2t1cCgpIGluIG5ldC94ZHAveHNrbWFwLmMgYnkgY2hhbmdpbmcgdGhlIGVtaXR0ZWQgbG9va3VwIGluc3RydWN0aW9uIGZyb20gQlBGX0pNUF9JTU0gdG8gQlBGX0pNUDMyX0lNTSB3aGVuIHZlcmlmeWluZyBhbmQgaW5saW5pbmcgWFNLTUFQIGxvb2t1cHMuIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgQlBGL1hEUCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzViYzdhN2QyMDAxYmZmNTI2NzlmMTQwYTU2OTRkMzcwYjRiYTIzMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDE4OjIzOjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2ttYXAuYyBiL25ldC94ZHAveHNrbWFwLmMKaW5kZXggM2JmZjM0NjMwOGQwZi4uYmYwMGQ2NDYzYzE5MSAxMDA2NDQKLS0tIGEvbmV0L3hkcC94c2ttYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGRwL3hza21hcC5jCkBAIC0xMjQsNyAmIzQzOzEyNCw3IEBAIHN0YXRpYyBpbnQgeHNrX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpCiAJc3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7CiAKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfVywgcmV0LCBpbmRleCwgMCk7Ci0JKmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtJmd0O21heF9lbnRyaWVzLCA1KTsKJiM0MzsJKmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUDMyX0lNTShCUEZfSkdFLCByZXQsIG1hcC0mZ3Q7bWF4X2VudHJpZXMsIDUpOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0xTSCwgcmV0LCBpbG9nMihzaXplb2Yoc3RydWN0IHhza19zb2NrICopKSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBtcCwgb2Zmc2V0b2Yoc3RydWN0IHhza19tYXAsIHhza19tYXApKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfUkVHKEJQRl9BREQsIHJldCwgbXApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDE5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB0YXNrIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcywgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2UgaW4gYG5ldC94ZHAveHNrbWFwLmNgLCBqdXN0aWZpZXMgZnV6emluZyB3aXRoIHN5emthbGxlci4gVGhlIHVzZXIgcHJvdmlkZWQgYSBnaXQgZGlmZiwgYW5kIGl0JiMzOTtzIGEgcmVsYXRpdmVseSBmb2N1c2VkIGNoYW5nZS4gU3BlY2lmaWNhbGx5OiBgQlBGX0pNUF9JTU1gIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYEJQRl9KTVAzMl9JTU1gIGluIHRoZSBgeHNrX21hcF9nZW5fbG9va3VwYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGp1bXAgaW5zdHJ1Y3Rpb24sIGFuZCBhIDMyLWJpdCBpbW1lZGlhdGUgdmFsdWUgY2hhbmdlLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBzb21lIHBvdGVudGlhbCBhcmVhcyBmb3IgY29uY2Vybi4KClNpbmNlIEkgYW0gZG9pbmcgYSByaXNrIGFuYWx5c2lzIG9uIHRoZSBwYXRjaCBJIHdpbGwgdXNlIHNvbWUgdG9vbHMuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZGVlcGVyIGluc3BlY3Rpb24uIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGBXb3J0aEZ1enppbmdgLCBgRm9jdXNTeW1ib2xzYCwgYEVuYWJsZUNvbmZpZ3NgLCBhbmQgdGhlIGBSZWFzb25pbmdgIGZvciB0aGlzIGRlY2lzaW9uLCBiZWZvcmUgY2FsbGluZyBgc2V0LXJlc3VsdHNgLgoKVG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIGltcGFjdCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIGBuZXQveGRwL3hza21hcC5jYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgeHNrX21hcF9nZW5fbG9va3VwYCBmdW5jdGlvbiBkb2VzLCBhbmQgaG93IHRoYXQgQlBGIGluc3RydWN0aW9uIGNoYW5nZSBhbHRlcnMgaXRzIGJlaGF2aW9yLiBJIHNob3VsZCBhbHNvIGNoZWNrIGBLY29uZmlnYCB0byBzZWUgaWYgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkgaXMgZ2F0ZWQgYmVoaW5kIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoYXQgd2lsbCBoZWxwIG1lIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVseSB1c2VkIHRoaXMgY29kZSBpcy4gVGhpcyBpcyBhbGwgc3RhbmRhcmQgdHJpYWdlIHByb2NlZHVyZSBmb3IgYSBuZXcgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL3hza21hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdHN5bmNocm9uaXplX25ldCgpO1xuIDEwMTpcdFx0YnBmX21hcF9hcmVhX2ZyZWUobSk7XG4gMTAyOlx0fVxuIDEwMzpcdFxuIDEwNDpcdHN0YXRpYyBpbnQgeHNrX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcbiAxMDU6XHR7XG4gMTA2Olx0XHRzdHJ1Y3QgeHNrX21hcCAqbSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCB4c2tfbWFwLCBtYXApO1xuIDEwNzpcdFx0dTMyIGluZGV4ID0ga2V5ID8gKih1MzIgKilrZXkgOiBVMzJfTUFYO1xuIDEwODpcdFx0dTMyICpuZXh0ID0gbmV4dF9rZXk7XG4gMTA5Olx0XG4gMTEwOlx0XHRpZiAoaW5kZXggXHUwMDNlPSBtLVx1MDAzZW1hcC5tYXhfZW50cmllcykge1xuIDExMTpcdFx0XHQqbmV4dCA9IDA7XG4gMTEyOlx0XHRcdHJldHVybiAwO1xuIDExMzpcdFx0fVxuIDExNDpcdFxuIDExNTpcdFx0aWYgKGluZGV4ID09IG0tXHUwMDNlbWFwLm1heF9lbnRyaWVzIC0gMSlcbiAxMTY6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMTE3Olx0XHQqbmV4dCA9IGluZGV4ICYjNDM7IDE7XG4gMTE4Olx0XHRyZXR1cm4gMDtcbiAxMTk6XHR9XG4gMTIwOlx0XG4gMTIxOlx0c3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiAxMjI6XHR7XG4gMTIzOlx0XHRjb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wLCBtcCA9IEJQRl9SRUdfMSwgaW5kZXggPSBCUEZfUkVHXzI7XG4gMTI0Olx0XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcbiAxMjU6XHRcbiAxMjY6XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCByZXQsIGluZGV4LCAwKTtcbiAxMjc6XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVAzMl9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtXHUwMDNlbWF4X2VudHJpZXMsIDUpO1xuIDEyODpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfTFNILCByZXQsIGlsb2cyKHNpemVvZihzdHJ1Y3QgeHNrX3NvY2sgKikpKTtcbiAxMjk6XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgbXAsIG9mZnNldG9mKHN0cnVjdCB4c2tfbWFwLCB4c2tfbWFwKSk7XG4gMTMwOlx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfUkVHKEJQRl9BREQsIHJldCwgbXApO1xuIDEzMTpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRihzdHJ1Y3QgeHNrX3NvY2sgKiksIHJldCwgcmV0LCAwKTtcbiAxMzI6XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XG4gMTMzOlx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTU9WNjRfSU1NKHJldCwgMCk7XG4gMTM0Olx0XHRyZXR1cm4gaW5zbiAtIGluc25fYnVmO1xuIDEzNTpcdH1cbiAxMzY6XHRcbiAxMzc6XHQvKiBFbGVtZW50cyBhcmUga2VwdCBhbGl2ZSBieSBSQ1U7IGVpdGhlciBieSByY3VfcmVhZF9sb2NrKCkgKGZyb20gc3lzY2FsbCkgb3JcbiAxMzg6XHQgKiBieSBsb2NhbF9iaF9kaXNhYmxlKCkgKGZyb20gWERQIGNhbGxzIGluc2lkZSBOQVBJKS4gVGhlXG4gMTM5Olx0ICogcmN1X3JlYWRfbG9ja19iaF9oZWxkKCkgYmVsb3cgbWFrZXMgbG9ja2RlcCBhY2NlcHQgYm90aC5cbiAxNDA6XHQgKi9cbiAxNDE6XHRzdGF0aWMgdm9pZCAqX194c2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXG4gMTQyOlx0e1xuIDE0MzpcdFx0c3RydWN0IHhza19tYXAgKm0gPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgeHNrX21hcCwgbWFwKTtcbiAxNDQ6XHRcbiAxNDU6XHRcdGlmIChrZXkgXHUwMDNlPSBtYXAtXHUwMDNlbWF4X2VudHJpZXMpXG4gMTQ2Olx0XHRcdHJldHVybiBOVUxMO1xuIDE0NzpcdFxuIDE0ODpcdFx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhtLVx1MDAzZXhza19tYXBba2V5XSwgcmN1X3JlYWRfbG9ja19iaF9oZWxkKCkpO1xuIDE0OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjE2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgWFNLIE1hcCBHZW5lcmF0b3IqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIGFuZCBkZXBlbmRlbmNpZXMgc3Vycm91bmRpbmcgYHhza19tYXBfZ2VuX2xvb2t1cGAuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gdHJhY2sgZG93biBpdHMgaW52b2NhdGlvbnMsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyAqdXNlZCogaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIHB1cnBvc2UuIFRoZW4sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCB3aGF0IEtjb25maWcgb3B0aW9ucyBlbmFibGUgdGhlIHJlbGV2YW50IGNvZGUgaW4gYG5ldC94ZHAveHNrbWFwLmNgPyAKCkkmIzM5O2xsIGNoZWNrIHRoZSBhc3NvY2lhdGVkIGJ1aWxkIGZpbGVzLCBzdGFydGluZyB3aXRoIHRoZSBgbmV0L3hkcC9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgYW55IHJlbGV2YW50IGNvbXBpbGF0aW9uIGZsYWdzLiBBZnRlciB0aGF0LCBJJiMzOTtsbCBkaXZlIGludG8gYG5ldC94ZHAvS2NvbmZpZ2AgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhlc2UgdmFyaW91cyBjb21wb25lbnRzIGFyZSBjb250cm9sbGVkIGFuZCBjb25maWd1cmVkLiBUaGF0IHNob3VsZCBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIGFuZCBjb25maWd1cmF0aW9uIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNrbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQveGRwL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub1xubmV0L3hkcC9NYWtlZmlsZS0zLW9iai0kKENPTkZJR19YRFBfU09DS0VUUykgJiM0Mzs9IHhza19idWZmX3Bvb2wub1xuLS1cbm5ldC94ZHAveHNrLmM9NDk3PWludCBfX3hza19tYXBfcmVkaXJlY3Qoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXG4tLVxubmV0L3hkcC94c2suYy01MDUtXHRpZiAoIXhzLVx1MDAzZWZsdXNoX25vZGUucHJldikge1xubmV0L3hkcC94c2suYzo1MDY6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmZsdXNoX2xpc3QgPSBicGZfbmV0X2N0eF9nZXRfeHNrbWFwX2ZsdXNoX2xpc3QoKTtcbm5ldC94ZHAveHNrLmMtNTA3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipYRFAgQ29uZmlndXJhdGlvbjogQSBRdWljayBHbGFuY2UqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtSaWdodCwgYmVmb3JlIHdlIGRpdmUgaW50byBhbnl0aGluZyB0b28gZGVlcCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IGBuZXQveGRwL0tjb25maWdgLiYjMzQ7IEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBmaXJzdCBzdG9wLCB5b3Uga25vdz8gR2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHNlZSB3aGF0IG9wdGlvbnMgYXJlIGV4cG9zZWQsIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBob3cgdGhlIHZhcmlvdXMgWERQLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLiBObyBuZWVkIHRvIHJlaW52ZW50IHRoZSB3aGVlbCwgSSBjYW4gcHJvYmFibHkgZ2V0IGEgZ2VuZXJhbCBzZW5zZSBvZiB0aGUgYnVpbGQgc3RydWN0dXJlIGp1c3QgYnkgdW5kZXJzdGFuZGluZyB0aGUgYXZhaWxhYmxlIGNvbmZpZyBmbGFncy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVjb3N5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBYRFBfU09DS0VUU1xuICAgMzpcdFx0Ym9vbCBcJiMzNDtYRFAgc29ja2V0c1wmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuICAgNTpcdFx0ZGVmYXVsdCBuXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFhEUCBzb2NrZXRzIGFsbG93cyBhIGNoYW5uZWwgYmV0d2VlbiBYRFAgcHJvZ3JhbXMgYW5kXG4gICA4Olx0XHQgIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuXG4gICA5Olx0XG4gIDEwOlx0Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O1hEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBYRFBfU09DS0VUU1xuICAxMzpcdFx0ZGVmYXVsdCBuXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIFN1cHBvcnQgZm9yIFBGX1hEUCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXG4gIDE2Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUzMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIGB4c2tfbWFwX2dlbl9sb29rdXBgIFJlZmVyZW5jZXMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHhza19tYXBfZ2VuX2xvb2t1cGAgZnVuY3Rpb24gaXMgdXNlZC4gQSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgcmVhbGx5IHRoZSAqZXNzZW50aWFsKiBvbmUgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGBuZXQveGRwL3hza21hcC5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgZGlyZWN0IGRlZmluaXRpb24gYW5kIG1vc3Qgb2YgaXRzIGxvY2FsIGNhbGxzIHRoZXJlLCBjbGVhcmx5IHNob3dpbmcgaG93IGl0IGZpdHMgd2l0aGluIHRoZSBYRFAgc29ja2V0IG1hcCYjMzk7cyBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyB0aGUgbmF0dXJhbCBwbGFjZS4KCkJ1dCwgSSBjYW4mIzM5O3Qgc3RvcCB0aGVyZS4gSSBhbHNvIGhhdmUgdG8gY29uc2lkZXIgd2hlcmUgZWxzZSwgb3V0c2lkZSBvZiB0aGUgaW1tZWRpYXRlIGRlZmluaXRpb24sIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgaW52b2tlZC4gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gbG9vayBiZXlvbmQgdGhlIGxvY2FsIGZpbGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZXh0ZXJuYWwgY2FsbHMuIEnigJlsbCBuZWVkIHRvIHRyYWNlIGRvd24gdGhlIGNhbGwgZ3JhcGguIEFyZSB0aGVyZSBvdGhlciBtb2R1bGVzIHRoYXQgbGV2ZXJhZ2UgdGhpcyBsb29rdXAsIHBlcmhhcHMgdGhyb3VnaCBhIGdlbmVyaWMgWERQIG1hcCBpbnRlcmZhY2Ugb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMgcmVsYXRlZCB0byBBRl9YRFA/IElzIGl0IGEgY3J1Y2lhbCBwYXJ0IG9mIGEgbGFyZ2VyIFhEUCBkYXRhIHBhdGggaW52b2x2aW5nIG90aGVyIG1hcHMgb3IgcHJvZ3JhbXM/IFdoZXJlJiMzOTtzIGl0IHVzZWQ/IFRoYXQmIzM5O3Mgd2hhdCBJIHdhbnQgdG8gZmluZCBvdXQuIEkgbmVlZCB0byBnZXQgYSBwaWN0dXJlIG9mICphbGwqIHRoZSBwbGFjZXMgdGhpcyBmdW5jdGlvbiBpcyBlbXBsb3llZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGNvbXBsZXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19tYXBfZ2VuX2xvb2t1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hza21hcC5jPTEwND1zdGF0aWMgaW50IHhza19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG4tLVxubmV0L3hkcC94c2ttYXAuYy0xMjAtXG5uZXQveGRwL3hza21hcC5jOjEyMTpzdGF0aWMgaW50IHhza19tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxubmV0L3hkcC94c2ttYXAuYy0xMjIte1xuLS1cbm5ldC94ZHAveHNrbWFwLmM9MjcxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyB4c2tfbWFwX29wcyA9IHtcbi0tXG5uZXQveGRwL3hza21hcC5jLTI3Ni1cdC5tYXBfbG9va3VwX2VsZW0gPSB4c2tfbWFwX2xvb2t1cF9lbGVtLFxubmV0L3hkcC94c2ttYXAuYzoyNzc6XHQubWFwX2dlbl9sb29rdXAgPSB4c2tfbWFwX2dlbl9sb29rdXAsXG5uZXQveGRwL3hza21hcC5jLTI3OC1cdC5tYXBfbG9va3VwX2VsZW1fc3lzX29ubHkgPSB4c2tfbWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTUwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgbWFwX2dlbl9sb29rdXBgIENhbGwgU2l0ZXMqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2Ugb2YgYG1hcF9nZW5fbG9va3VwYCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0cyBjYWxscyBmcm9tIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSB3YW50IHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbiBjYWxsIGluIGFsbCBpdHMgY2FsbCBzaXRlcy4KCk1vcmUgc3BlY2lmaWNhbGx5LCBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBwbGFjZXMgbGlrZSB0aGUgQlBGIHZlcmlmaWVyIG9yIGFueSBzY2VuYXJpb3Mgd2hlcmUgdGhlIEJQRiBjb21waWxlciBtaWdodCBpbmxpbmUgYSBCUEYgbWFwIGxvb2t1cCB1c2luZyB0aGF0IGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgaW5saW5pbmcgYmVoYXZpb3IgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMgYW5kIG9wdGltaXphdGlvbiwgYW5kIGZvciB1bmNvdmVyaW5nIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBUaGUgaW1wbGljYXRpb25zIHdvdWxkIGJlIHF1aXRlIHN1YnN0YW50aWFsIGlmIHRoaXMgaXMgaGFwcGVuaW5nLiBUaGUgcHJlc2VuY2Ugb2YgaXQgaXMgc29tZXRoaW5nIEkmIzM5O2xsIG5lZWQgdG8ga25vdy4KCkkmIzM5O2xsIHN0YXJ0IHRyYWNpbmcgdGhlIGNhbGwgY2hhaW4gZnJvbSB0aGVyZSwgbWFwcGluZyBvdXQgYW55IGludGVyZGVwZW5kZW5jaWVzIG9yIHN1YnRsZSBudWFuY2VzIGluIHRoZSBiZWhhdmlvciByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbiYjMzk7cyB1c2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXBfZ2VuX2xvb2t1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTg3PXN0cnVjdCBicGZfbWFwX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0xMjYtXHR2b2lkICgqbWFwX2ZkX3B1dF9wdHIpKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnB0ciwgYm9vbCBuZWVkX2RlZmVyKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MTI3Olx0aW50ICgqbWFwX2dlbl9sb29rdXApKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpO1xuaW5jbHVkZS9saW51eC9icGYuaC0xMjgtXHR1MzIgKCptYXBfZmRfc3lzX2xvb2t1cF9lbGVtKSh2b2lkICpwdHIpO1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0yMDE9c3RhdGljIGludCBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGltbSxcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjE3LS8qIGVtaXQgQlBGIGluc3RydWN0aW9ucyBlcXVpdmFsZW50IHRvIEMgY29kZSBvZiBhcnJheV9tYXBfbG9va3VwX2VsZW0oKSAqL1xua2VybmVsL2JwZi9hcnJheW1hcC5jOjIxODpzdGF0aWMgaW50IGFycmF5X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjE5LXtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9Mjc3PXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW1tLCB1MzIgKm9mZilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjkzLS8qIGVtaXQgQlBGIGluc3RydWN0aW9ucyBlcXVpdmFsZW50IHRvIEMgY29kZSBvZiBwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKCkgKi9cbmtlcm5lbC9icGYvYXJyYXltYXAuYzoyOTQ6c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yOTUte1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz04NTk9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg2OC1cdC5tYXBfZGVsZXRlX2VsZW0gPSBhcnJheV9tYXBfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODY5Olx0Lm1hcF9nZW5fbG9va3VwID0gYXJyYXlfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODcwLVx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcixcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODg2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODkyLVx0Lm1hcF9sb29rdXBfZWxlbSA9IHBlcmNwdV9hcnJheV9tYXBfbG9va3VwX2VsZW0sXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODkzOlx0Lm1hcF9nZW5fbG9va3VwID0gcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg5NC1cdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNDY0PXN0YXRpYyB2b2lkICphcnJheV9vZl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDczLVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE0NzQ6c3RhdGljIGludCBhcnJheV9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0NzUtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNTA1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9vZl9tYXBzX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE1MTQtXHQubWFwX2ZkX3N5c19sb29rdXBfZWxlbSA9IGJwZl9tYXBfZmRfc3lzX2xvb2t1cF9lbGVtLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE1MTU6XHQubWFwX2dlbl9sb29rdXAgPSBhcnJheV9vZl9tYXBfZ2VuX2xvb2t1cCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE2LVx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xNTEzPWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNDctXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwNDg6XHRcdC8qIEJQRl9FTUlUX0NBTEwoKSBhc3N1bXB0aW9ucyBpbiBzb21lIG9mIHRoZSBtYXBfZ2VuX2xvb2t1cFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDQ5LVx0XHQgKiBhbmQgb3RoZXIgaW5saW5pbmcgaGFuZGxlcnMgYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIDY0IGJpdFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjA2OC1cdFx0XHRpZiAoaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0ZVTkNfbWFwX2xvb2t1cF9lbGVtIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9maXh1cHMuYzoyMDY5Olx0XHRcdCAgICBvcHMtXHUwMDNlbWFwX2dlbl9sb29rdXApIHtcbmtlcm5lbC9icGYvZml4dXBzLmM6MjA3MDpcdFx0XHRcdGNudCA9IG9wcy1cdTAwM2VtYXBfZ2VuX2xvb2t1cChtYXBfcHRyLCBpbnNuX2J1Zik7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNzEtXHRcdFx0XHRpZiAoY250ID09IC1FT1BOT1RTVVBQKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTcxNT1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX251bGxzX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTczNS0gKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFkanVzdGVkIGJ5IEJQRiBpbnN0cnVjdGlvbnNcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjczNjogKiBpbiBodGFiX21hcF9nZW5fbG9va3VwKCkuXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy03MzctICovXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9NzU4PXN0YXRpYyB2b2lkICpodGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtNzc4LSAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6Nzc5OnN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxua2VybmVsL2JwZi9oYXNodGFiLmMtNzgwLXtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz04MTM9c3RhdGljIHZvaWQgKmh0YWJfbHJ1X21hcF9sb29rdXBfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTgxNy1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjgxODpzdGF0aWMgaW50IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy04MTktXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIzNjE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzcxLVx0Lm1hcF9kZWxldGVfZWxlbSA9IGh0YWJfbWFwX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM3MjpcdC5tYXBfZ2VuX2xvb2t1cCA9IGh0YWJfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzczLVx0Lm1hcF9zZXFfc2hvd19lbGVtID0gaHRhYl9tYXBfc2VxX3Nob3dfZWxlbSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzgzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzOTQtXHQubWFwX2RlbGV0ZV9lbGVtID0gaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM5NTpcdC5tYXBfZ2VuX2xvb2t1cCA9IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5Ni1cdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjQwNz1zdGF0aWMgdm9pZCAqaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDE3LS8qIGlubGluZSBicGZfbWFwX2xvb2t1cF9lbGVtKCkgY2FsbCBmb3IgcGVyLUNQVSBoYXNobWFwICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDE4OnN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MTkte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI1NjQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfcGVyY3B1X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjU3MC1cdC5tYXBfbG9va3VwX2VsZW0gPSBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTcxOlx0Lm1hcF9nZW5fbG9va3VwID0gaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTcyLVx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtID0gaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0sXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjY5OD1zdGF0aWMgdm9pZCAqaHRhYl9vZl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3MDctXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzA4OnN0YXRpYyBpbnQgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjcwOS1cdFx0XHRcdCAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzMyPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX29mX21hcHNfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzQxLVx0Lm1hcF9mZF9zeXNfbG9va3VwX2VsZW0gPSBicGZfbWFwX2ZkX3N5c19sb29rdXBfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3NDI6XHQubWFwX2dlbl9sb29rdXAgPSBodGFiX29mX21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc0My1cdC5tYXBfY2hlY2tfYnRmID0gbWFwX2NoZWNrX25vX2J0Zixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMDI1PXN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwODMtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDg0OnN0YXRpYyBpbnQgcmh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwODUte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MDg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUxOS1cdC5tYXBfZGVsZXRlX2VsZW0gPSByaHRhYl9tYXBfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTIwOlx0Lm1hcF9nZW5fbG9va3VwID0gcmh0YWJfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTIxLVx0Lm1hcF9zZXFfc2hvd19lbGVtID0gcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXG4tLVxubmV0L3hkcC94c2ttYXAuYz0xMDQ9c3RhdGljIGludCB4c2tfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuLS1cbm5ldC94ZHAveHNrbWFwLmMtMTIwLVxubmV0L3hkcC94c2ttYXAuYzoxMjE6c3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbm5ldC94ZHAveHNrbWFwLmMtMTIyLXtcbi0tXG5uZXQveGRwL3hza21hcC5jPTI3MT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgeHNrX21hcF9vcHMgPSB7XG4tLVxubmV0L3hkcC94c2ttYXAuYy0yNzYtXHQubWFwX2xvb2t1cF9lbGVtID0geHNrX21hcF9sb29rdXBfZWxlbSxcbm5ldC94ZHAveHNrbWFwLmM6Mjc3Olx0Lm1hcF9nZW5fbG9va3VwID0geHNrX21hcF9nZW5fbG9va3VwLFxubmV0L3hkcC94c2ttYXAuYy0yNzgtXHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0geHNrX21hcF9sb29rdXBfZWxlbV9zeXNfb25seSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wZXJjcHVfYXJyYXlfaW5uZXJfbWFwLmMtNS0gKiBUZXN0IHRoYXQgcmVwbGFjaW5nIGFuIGlubmVyIHBlcmNwdSBhcnJheSBtYXAgd2l0aCBvbmUgdGhhdCBoYXMgZGlmZmVyZW50XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wZXJjcHVfYXJyYXlfaW5uZXJfbWFwLmM6NjogKiBtYXhfZW50cmllcyBpcyByZWplY3RlZC4gIHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cCgpIGlubGluZXMgdGhlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wZXJjcHVfYXJyYXlfaW5uZXJfbWFwLmMtNy0gKiB0ZW1wbGF0ZSYjMzk7cyBpbmRleF9tYXNrLCBzbyBhbGxvd2luZyBhIHNtYWxsZXIgcmVwbGFjZW1lbnQgd291bGQgY2F1c2UgT09CLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTc3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBWdWxuZXJhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgQlBGX0pNUDMyX0lNTWAgYW5kIGBCUEZfSk1QX0lNTWAgaW4gYHhza19tYXBfZ2VuX2xvb2t1cGAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IHVzZXMgYEJQRl9KTVAzMl9JTU1gIHRvIGNvbXBhcmUgYSAzMi1iaXQgdmFsdWUgbG9hZGVkIGZyb20gYW4gaW5kZXggd2l0aCBgbWFwLSZndDttYXhfZW50cmllc2AuIFByZXZpb3VzbHksIGl0IHVzZWQgdGhlIDY0LWJpdCBqdW1wL2NvbXBhcmUsIGBCUEZfSk1QX0lNTWAuICAKClRoZSBsb2FkaW5nIGluc3RydWN0aW9uIGBCUEZfTERYX01FTShCUEZfVywgLi4uKWAgemVyby1leHRlbmRzIHRoZSAzMiBiaXRzIGludG8gNjQgYml0cy4gIFRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGUgQlBGIHZlcmlmaWVyIG9yIHRoZSBKSVQgY29tcGlsZXIgdHJlYXQgMzItYml0IGFuZCA2NC1iaXQganVtcHMgZGlmZmVyZW50bHkgaW4gYSB3YXkgdGhhdCBjcmVhdGVzIGEgdnVsbmVyYWJpbGl0eT8gVGhpcyBjb2RlIGlzIGNyaXRpY2FsIGJlY2F1c2UgaXQgcnVucyB3aGVuZXZlciBhIEJQRiBwcm9ncmFtLCB1c2luZyBgWFNLTUFQYCAod2hpY2ggaXMgYEJQRl9NQVBfVFlQRV9YU0tNQVBgKSwgY2FsbHMgYGJwZl9tYXBfbG9va3VwX2VsZW0oKWAuIFRoZSB2ZXJpZmllciBpbmxpbmVzIHRoaXMgdXNpbmcgYG1hcF9nZW5fbG9va3VwYCBkdXJpbmcgYGJwZl9kb19taXNjX2ZpeHVwcygpYC4KCk5vdywgaXMgdGhpcyByZWFjaGFibGUgaW4gYSB0eXBpY2FsIFFFTVUgZW52aXJvbm1lbnQ/IEFic29sdXRlbHkuIEJQRiBpcyBhIGNvcmUga2VybmVsIHN1YnN5c3RlbSwgYW5kIGBYU0tNQVBgIHN1cHBvcnQgKHZpYSB0aGUgQlBGIHN5c2NhbGwgYW5kIEFGX1hEUCkgbWVhbnMgdGhpcyBjb2RlIGV4ZWN1dGVzIHdoZW4gbG9hZGluZyBhIEJQRiBwcm9ncmFtIHRoYXQgcGVyZm9ybXMgYSBsb29rdXAgaW4gYW4gYFhTS01BUGAsIGFuZCB0aGVuIHdoZW4gdGhhdCBwcm9ncmFtIGV4ZWN1dGVzLiBUaGF0IG1ha2VzIHRoaXMgMTAwJSByZWFjaGFibGUgd2l0aCBzeXprYWxsZXIgZnV6emluZy4KCkxldCYjMzk7cyBjb25maXJtIHRoZSBjcml0ZXJpYS4gSXQmIzM5O3M6CiogICBSZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlOiBDb3JlIFN1YnN5c3RlbSAoQlBGIC8gbmV0d29ya2luZykuCiogICBXb3J0aEZ1enppbmcgPSB0cnVlLgoKTmV4dCBzdGVwczogTGV0JiMzOTtzIGNoZWNrIGtlcm5lbCBjb25maWdzLiBTcGVjaWZpY2FsbHksIHdlJiMzOTtsbCBuZWVkIGBDT05GSUdfWERQX1NPQ0tFVFNgICh3aGljaCBkZXBlbmRzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgKS4gSSB3aWxsIGFsc28gZ3JlcCBmb3IgJiMzNDtYU0tNQVAmIzM0OyBvciAmIzM0O0JQRl9NQVBfVFlQRV9YU0tNQVAmIzM0OyB0byBlbnN1cmUgbm8gb3RoZXIgY29uZmlncyBhcmUgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9NQVBfVFlQRV9YU0tNQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtNC09PT09PT09PT09PT09PT09PT09XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo1OkJQRl9NQVBfVFlQRV9YU0tNQVBcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTYtPT09PT09PT09PT09PT09PT09PVxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTgtLi4gbm90ZTo6XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo5OiAgIC0gYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgd2FzIGludHJvZHVjZWQgaW4ga2VybmVsIHZlcnNpb24gNC4xOFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTAtXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDoxMTpUaGUgYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgaXMgdXNlZCBhcyBhIGJhY2tlbmQgbWFwIGZvciBYRFAgQlBGIGhlbHBlclxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTItY2FsbCBgYGJwZl9yZWRpcmVjdF9tYXAoKWBgIGFuZCBgYFhEUF9SRURJUkVDVGBgIGFjdGlvbiwgbGlrZSAmIzM5O2Rldm1hcCYjMzk7IGFuZCAmIzM5O2NwdW1hcCYjMzk7LlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0PTY3PVJlZGlyZWN0IHRoZSBwYWNrZXQgdG8gdGhlIGVuZHBvaW50IHJlZmVyZW5jZWQgYnkgYGBtYXBgYCBhdCBpbmRleCBgYGtleWBgLlxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q6Njg6Rm9yIGBgQlBGX01BUF9UWVBFX1hTS01BUGBgIHRoaXMgbWFwIGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gWFNLIEZEc1xuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtNjktZm9yIHNvY2tldHMgYXR0YWNoZWQgdG8gYSBuZXRkZXYmIzM5O3MgcXVldWVzLlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0PTEzNT1LZXJuZWxcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xMzctXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDoxMzg6VGhlIGZvbGxvd2luZyBjb2RlIHNuaXBwZXQgc2hvd3MgaG93IHRvIGRlY2xhcmUgYSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYCBjYWxsZWRcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTEzOS1gYHhza3NfbWFwYGAgYW5kIGhvdyB0byByZWRpcmVjdCBwYWNrZXRzIHRvIGFuIFhTSy5cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xNDMtXHRzdHJ1Y3Qge1xuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q6MTQ0Olx0XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xNDUtXHRcdF9fdHlwZShrZXksIF9fdTMyKTtcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9yZWRpcmVjdC5yc3Q9MTI9WERQX1JFRElSRUNUIHdvcmtzIHdpdGggdGhlIGZvbGxvd2luZyBtYXAgdHlwZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvcmVkaXJlY3QucnN0LTE2LS0gYGBCUEZfTUFQX1RZUEVfQ1BVTUFQYGBcbkRvY3VtZW50YXRpb24vYnBmL3JlZGlyZWN0LnJzdDoxNzotIGBgQlBGX01BUF9UWVBFX1hTS01BUGBgXG5Eb2N1bWVudGF0aW9uL2JwZi9yZWRpcmVjdC5yc3QtMTgtXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q9NzE9SG93IGlzIHRoZW4gcGFja2V0cyBkaXN0cmlidXRlZCBmcm9tIGFuIFhEUCBwcm9ncmFtIHRvIHRoZSBYU0tzPyBUaGVyZVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q6NzI6aXMgYSBCUEYgbWFwIGNhbGxlZCBYU0tNQVAgKG9yIEJQRl9NQVBfVFlQRV9YU0tNQVAgaW4gZnVsbCkuIFRoZVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtNzMtdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBjYW4gcGxhY2UgYW4gWFNLIGF0IGFuIGFyYml0cmFyeSBwbGFjZSBpbiB0aGlzXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q9MjIwPXVzZXIuIEl0IHdpbGwgbWFrZSB5b3VyIHByb2dyYW0gYSBsb3Qgc2ltcGxlci5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTIyMS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0OjIyMjpYU0tNQVAgLyBCUEZfTUFQX1RZUEVfWFNLTUFQXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0yMjMtPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjI0LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q6MjI1Ok9uIFhEUCBzaWRlIHRoZXJlIGlzIGEgQlBGIG1hcCB0eXBlIEJQRl9NQVBfVFlQRV9YU0tNQVAgKFhTS01BUCkgdGhhdFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjI2LWlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBicGZfcmVkaXJlY3RfbWFwKCkgdG8gcGFzcyB0aGUgaW5ncmVzc1xuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTI4Mj1yb3VuZC1yb2JpbiBleGFtcGxlIG9mIGRpc3RyaWJ1dGluZyBwYWNrZXRzIGlzIHNob3duIGJlbG93OlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTI5MS0gICBzdHJ1Y3Qge1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q6MjkyOiAgICAgICBfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0yOTMtICAgICAgIF9fdWludChtYXhfZW50cmllcywgTUFYX1NPQ0tTKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTExNz1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0NQVU1BUCwgY3B1X21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTExOC0jaWYgZGVmaW5lZChDT05GSUdfWERQX1NPQ0tFVFMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjExOTpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1hTS01BUCwgeHNrX21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEyMC0jZW5kaWZcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTAwMD1lbnVtIGJwZl9tYXBfdHlwZSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwMTctXHRCUEZfTUFQX1RZUEVfQ1BVTUFQLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwMTg6XHRCUEZfTUFQX1RZUEVfWFNLTUFQLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwMTktXHRCUEZfTUFQX1RZUEVfU09DS0hBU0gsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTM4Mj1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE1MjQtXHRjYXNlIEJQRl9NQVBfVFlQRV9ERVZNQVBfSEFTSDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE1MjU6XHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNTI2LVx0XHRpZiAoIWJwZl90b2tlbl9jYXBhYmxlKHRva2VuLCBDQVBfTkVUX0FETUlOKSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkyMD1zdGF0aWMgdm9pZCByZWZpbmVfbWFwX2xvb2t1cF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTMzLVx0XHRcdHJlZy1cdTAwM2VtYXBfdWlkID0gcmVnLVx1MDAzZWlkO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzQ6XHR9IGVsc2UgaWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfWFNLTUFQKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNS1cdFx0cmVnLVx1MDAzZXR5cGUgPSBQVFJfVE9fWERQX1NPQ0sgfCBtYXliZV9udWxsO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04OTkzPXN0YXRpYyBpbnQgY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MDUyLVx0XHRicmVhaztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MDUzOlx0Y2FzZSBCUEZfTUFQX1RZUEVfWFNLTUFQOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNTQtXHRcdGlmIChmdW5jX2lkICE9IEJQRl9GVU5DX3JlZGlyZWN0X21hcCBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTE3MC1cdFx0ICAgIG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQ1BVTUFQIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjkxNzE6XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1hTS01BUClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MTcyLVx0XHRcdGdvdG8gZXJyb3I7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDY4Mj1pbnQgeGRwX2RvX3JlZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQ2ODctXG5uZXQvY29yZS9maWx0ZXIuYzo0Njg4Olx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApXG5uZXQvY29yZS9maWx0ZXIuYy00Njg5LVx0XHRyZXR1cm4gX194ZHBfZG9fcmVkaXJlY3RfeHNrKHJpLCBkZXYsIHhkcCwgeGRwX3Byb2cpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ2OTY9aW50IHhkcF9kb19yZWRpcmVjdF9mcmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00NzAyLVxubmV0L2NvcmUvZmlsdGVyLmM6NDcwMzpcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfWFNLTUFQKVxubmV0L2NvcmUvZmlsdGVyLmMtNDcwNC1cdFx0cmV0dXJuIF9feGRwX2RvX3JlZGlyZWN0X3hzayhyaSwgZGV2LCB4ZHAsIHhkcF9wcm9nKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00NzEwPXN0YXRpYyBpbnQgeGRwX2RvX2dlbmVyaWNfcmVkaXJlY3RfbWFwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDc0NC1cdFx0YnJlYWs7XG5uZXQvY29yZS9maWx0ZXIuYzo0NzQ1Olx0Y2FzZSBCUEZfTUFQX1RZUEVfWFNLTUFQOlxubmV0L2NvcmUvZmlsdGVyLmMtNDc0Ni1cdFx0ZXJyID0geHNrX2dlbmVyaWNfcmN2KGZ3ZCwgeGRwKTtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTAwMD1lbnVtIGJwZl9tYXBfdHlwZSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwMTctXHRCUEZfTUFQX1RZUEVfQ1BVTUFQLFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwMTg6XHRCUEZfTUFQX1RZUEVfWFNLTUFQLFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwMTktXHRCUEZfTUFQX1RZUEVfU09DS0hBU0gsXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xNjM9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtYXBfdHlwZV9uYW1lW10gPSB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xODEtXHRbQlBGX01BUF9UWVBFX0NQVU1BUF1cdFx0XHQ9IFwmIzM0O2NwdW1hcFwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTgyOlx0W0JQRl9NQVBfVFlQRV9YU0tNQVBdXHRcdFx0PSBcJiMzNDt4c2ttYXBcJiMzNDssXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE4My1cdFtCUEZfTUFQX1RZUEVfU09DS0hBU0hdXHRcdFx0PSBcJiMzNDtzb2NraGFzaFwmIzM0Oyxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTU0MDM9c3RhdGljIGludCBicGZfb2JqZWN0X19jcmVhdGVfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXAsIGJvb2wgaXNfaW5uZXIpXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy01NDY3LVx0Y2FzZSBCUEZfTUFQX1RZUEVfQ1BVTUFQOlxudG9vbHMvbGliL2JwZi9saWJicGYuYzo1NDY4Olx0Y2FzZSBCUEZfTUFQX1RZUEVfWFNLTUFQOlxudG9vbHMvbGliL2JwZi9saWJicGYuYy01NDY5LVx0Y2FzZSBCUEZfTUFQX1RZUEVfU09DS01BUDpcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYz0yOTI9c3RhdGljIGludCBwcm9iZV9tYXBfY3JlYXRlKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTM3NS1cdGNhc2UgQlBGX01BUF9UWVBFX0NQVU1BUDpcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jOjM3NjpcdGNhc2UgQlBGX01BUF9UWVBFX1hTS01BUDpcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTM3Ny1cdGNhc2UgQlBGX01BUF9UWVBFX1NPQ0tIQVNIOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYz00NzU9c3RydWN0IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYzo0NzY6XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMtNDc3LVx0X191aW50KG1heF9lbnRyaWVzLCBNQVhfRU5UUklFUyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jPTY4Nj1pbnQgY2dfc2tiKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMtNzAzLVx0VkVSSUZZX1RZUEUoQlBGX01BUF9UWVBFX0NQVU1BUCwgY2hlY2tfY3B1bWFwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYzo3MDQ6XHRWRVJJRllfVFlQRShCUEZfTUFQX1RZUEVfWFNLTUFQLCBjaGVja194c2ttYXApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jLTcwNS1cdFZFUklGWV9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCwgY2hlY2tfc29ja2hhc2gpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYz0xMD1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jOjExOlx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jLTEyLVx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29jay5jPTI5PXN0cnVjdCB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29jay5jOjMwOlx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NvY2suYy0zMS1cdF9fdWludChtYXhfZW50cmllcywgMSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9od19tZXRhZGF0YS5jPTg9c3RydWN0IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfaHdfbWV0YWRhdGEuYzo5Olx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9od19tZXRhZGF0YS5jLTEwLVx0X191aW50KG1heF9lbnRyaWVzLCAyNTYpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfbWV0YWRhdGEuYz04PXN0cnVjdCB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX21ldGFkYXRhLmM6OTpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfbWV0YWRhdGEuYy0xMC1cdF9fdWludChtYXhfZW50cmllcywgNCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYz0xMT1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYzoxMjpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmMtMTMtXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmM9MTAwNz1zdGF0aWMgdm9pZCBkb190ZXN0X2ZpeHVwKHN0cnVjdCBicGZfdGVzdCAqdGVzdCwgZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF92ZXJpZmllci5jLTExMzUtXHRpZiAoKmZpeHVwX21hcF94c2ttYXApIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmM6MTEzNjpcdFx0bWFwX2Zkc1sxMV0gPSBjcmVhdGVfbWFwKEJQRl9NQVBfVFlQRV9YU0tNQVAsIHNpemVvZihpbnQpLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYy0xMTM3LVx0XHRcdFx0XHRzaXplb2YoaW50KSwgMSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzE4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGBvcHMtJmd0O21hcF9nZW5fbG9va3VwYCBkdXJpbmcgVmVyaWZpZXIgRml4dXAqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYG9wcy0mZ3Q7bWFwX2dlbl9sb29rdXBgIGFuZCB0aGUgdmVyaWZpZXIgZml4dXAgcHJvY2Vzcy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBga2VybmVsL2JwZi9maXh1cHMuY2AgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBmaXh1cHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLiBJIHdhbnQgdG8gc2VlICpleGFjdGx5KiB3aGVyZSBhbmQgaG93IGBvcHMtJmd0O21hcF9nZW5fbG9va3VwYCBpcyBpbnZva2VkIGR1cmluZyB0aGUgdmVyaWZpZXImIzM5O3MgZml4dXAgc3RhZ2UuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5jdGlvbiBjYWxscywgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIGFuZCBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXRlcm1pbmVzIHdoZW4gYW5kIHdoeSBpdCYjMzk7cyB1c2VkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIHRyeWluZyB0byB1bmRlcnN0YW5kOgoKKiAgICoqQ2FsbCBTaXRlOioqIFdoZXJlIGlzIHRoZSBgb3BzLSZndDttYXBfZ2VuX2xvb2t1cGAgbWVtYmVyIGZ1bmN0aW9uIGFjdHVhbGx5ICpjYWxsZWQqIHdpdGhpbiB0aGUgZml4dXAgcHJvY2Vzcz8gV2hhdCBmdW5jdGlvbiBvciBmdW5jdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoaXM/CiogICAqKkFyZ3VtZW50czoqKiBXaGF0IGFyZ3VtZW50cyBhcmUgYmVpbmcgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24/IEtub3dpbmcgdGhlIGFyZ3VtZW50cyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB3aGF0IGRhdGEgaXMgYmVpbmcgdXNlZCB0byBtYWtlIHRoZSBsb29rdXAuCiogICAqKkNvbmRpdGlvbmFsIFVzZToqKiBJcyB0aGUgY2FsbCB0byBgb3BzLSZndDttYXBfZ2VuX2xvb2t1cGAgYWx3YXlzIGV4ZWN1dGVkLCBvciBpcyB0aGVyZSBhIHNwZWNpZmljIGNvbmRpdGlvbiB0aGF0IHRyaWdnZXJzIGl0PyBJZiBzbywgd2hhdCBpcyB0aGUgY29uZGl0aW9uPyBBcmUgdGhlcmUgc3BlY2lmaWMgQlBGIGluc3RydWN0aW9uIHR5cGVzLCBtYXAgdHlwZXMsIG9yIHByb2dyYW0gY2hhcmFjdGVyaXN0aWNzIHRoYXQgbGVhZCB0byBpdD8KKiAgICoqUHVycG9zZToqKiBXaGF0IGlzIHRoZSBpbnRlbnQgb2YgdGhlIGNhbGw/IFdoYXQgaXMgdGhlIGxvb2t1cCAqZm9yKj8gSXMgaXQgZm9yIGRhdGEgdmFsaWRhdGlvbiwgY29kZSBnZW5lcmF0aW9uLCBvcHRpbWl6YXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PwoqICAgKipFcnJvciBIYW5kbGluZzoqKiBIb3cgZG9lcyB0aGUgY29kZSBoYW5kbGUgYW55IGZhaWx1cmVzIG9yIGVycm9ycyB0aGF0IG1pZ2h0IG9jY3VyIHdpdGhpbiB0aGUgYG9wcy0mZ3Q7bWFwX2dlbl9sb29rdXBgIGZ1bmN0aW9uPyBBcmUgdGhlcmUgYW55IHJldHVybiB2YWx1ZXMgb3IgZXJyb3IgY29kZXMgdG8gbG9vayBvdXQgZm9yPwoKQnkgY2FyZWZ1bGx5IGV4YW1pbmluZyB0aGUgY29kZSBpbiBgZml4dXBzLmNgLCBJJiMzOTtsbCBnZXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWFwX2dlbl9sb29rdXBgIGNvbnRyaWJ1dGVzIHRvIHRoZSB2ZXJpZmllciYjMzk7cyBmaXh1cCBvcGVyYXRpb25zLiBUaGVuLCBJIGNhbiBpbnRlZ3JhdGUgaXQgd2l0aCBteSBjdXJyZW50IGtub3dsZWRnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2ZpeHVwcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDY1Olx0XG4yMDY2Olx0XHRcdFx0bWFwX3B0ciA9IGF1eC1cdTAwM2VtYXBfcHRyX3N0YXRlLm1hcF9wdHI7XG4yMDY3Olx0XHRcdFx0b3BzID0gbWFwX3B0ci1cdTAwM2VvcHM7XG4yMDY4Olx0XHRcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9GVU5DX21hcF9sb29rdXBfZWxlbSBcdTAwMjZcdTAwMjZcbjIwNjk6XHRcdFx0XHQgICAgb3BzLVx1MDAzZW1hcF9nZW5fbG9va3VwKSB7XG4yMDcwOlx0XHRcdFx0XHRjbnQgPSBvcHMtXHUwMDNlbWFwX2dlbl9sb29rdXAobWFwX3B0ciwgaW5zbl9idWYpO1xuMjA3MTpcdFx0XHRcdFx0aWYgKGNudCA9PSAtRU9QTk9UU1VQUClcbjIwNzI6XHRcdFx0XHRcdFx0Z290byBwYXRjaF9tYXBfb3BzX2dlbmVyaWM7XG4yMDczOlx0XHRcdFx0XHRpZiAoY250IFx1MDAzYz0gMCB8fCBjbnQgXHUwMDNlPSBJTlNOX0JVRl9TSVpFKSB7XG4yMDc0Olx0XHRcdFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0OyVkIGluc25zIGdlbmVyYXRlZCBmb3IgbWFwIGxvb2t1cFwmIzM0OywgY250KTtcbjIwNzU6XHRcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4yMDc2Olx0XHRcdFx0XHR9XG4yMDc3Olx0XG4yMDc4Olx0XHRcdFx0XHRpZiAoYnBmX21hcF9pc19wZXJjcHVfbWFwKG1hcF9wdHItXHUwMDNlbWFwX3R5cGUpKVxuMjA3OTpcdFx0XHRcdFx0XHRwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XG4yMDgwOlx0XG4yMDgxOlx0XHRcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLFxuMjA4MjpcdFx0XHRcdFx0XHRcdFx0ICAgICAgIGluc25fYnVmLCBjbnQpO1xuMjA4MzpcdFx0XHRcdFx0aWYgKCFuZXdfcHJvZylcbjIwODQ6XHRcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMDg1Olx0XG4yMDg2Olx0XHRcdFx0XHRkZWx0YSAgICAmIzQzOz0gY250IC0gMTtcbjIwODc6XHRcdFx0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZyA9IG5ld19wcm9nO1xuMjA4ODpcdFx0XHRcdFx0aW5zbiAgICAgID0gbmV3X3Byb2ctXHUwMDNlaW5zbnNpICYjNDM7IGkgJiM0MzsgZGVsdGE7XG4yMDg5Olx0XHRcdFx0XHRnb3RvIG5leHRfaW5zbjtcbjIwOTA6XHRcdFx0XHR9XG4yMDkxOlx0XG4yMDkyOlx0XHRcdFx0QlVJTERfQlVHX09OKCFfX3NhbWVfdHlwZShvcHMtXHUwMDNlbWFwX2xvb2t1cF9lbGVtLFxuMjA5MzpcdFx0XHRcdFx0ICAgICAodm9pZCAqKCopKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkpTlVMTCkpO1xuMjA5NDpcdFx0XHRcdEJVSUxEX0JVR19PTighX19zYW1lX3R5cGUob3BzLVx1MDAzZW1hcF9kZWxldGVfZWxlbSxcbjIwOTU6XHRcdFx0XHRcdCAgICAgKGxvbmcgKCopKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkpTlVMTCkpO1xuMjA5NjpcdFx0XHRcdEJVSUxEX0JVR19PTighX19zYW1lX3R5cGUob3BzLVx1MDAzZW1hcF91cGRhdGVfZWxlbSxcbjIwOTc6XHRcdFx0XHRcdCAgICAgKGxvbmcgKCopKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4yMDk4Olx0XHRcdFx0XHRcdCAgICAgIHU2NCBmbGFncykpTlVMTCkpO1xuMjA5OTpcdFx0XHRcdEJVSUxEX0JVR19PTighX19zYW1lX3R5cGUob3BzLVx1MDAzZW1hcF9wdXNoX2VsZW0sXG4yMTAwOlx0XHRcdFx0XHQgICAgIChsb25nICgqKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSxcbjIxMDE6XHRcdFx0XHRcdFx0ICAgICAgdTY0IGZsYWdzKSlOVUxMKSk7XG4yMTAyOlx0XHRcdFx0QlVJTERfQlVHX09OKCFfX3NhbWVfdHlwZShvcHMtXHUwMDNlbWFwX3BvcF9lbGVtLFxuMjEwMzpcdFx0XHRcdFx0ICAgICAobG9uZyAoKikoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUpKU5VTEwpKTtcbjIxMDQ6XHRcdFx0XHRCVUlMRF9CVUdfT04oIV9fc2FtZV90eXBlKG9wcy1cdTAwM2VtYXBfcGVla19lbGVtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYyMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgYHhza19tYXBfZ2VuX2xvb2t1cGAgaW4gWERQL1hTSyBNYXAgT3BlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBuZXQveGRwL3hza21hcC5jYC4gQSBxdWljayBjaGVjayBjb25maXJtcyBpdDogYHN0YXRpYyBpbnQgeHNrX21hcF9nZW5fbG9va3VwKC4uLilgLiBOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgaG93IHRoaXMgaW1wYWN0cyBzeW1ib2wgdGFyZ2V0aW5nLCBlc3BlY2lhbGx5IGdpdmVuIG91ciBmb2N1cyBvbiBzcGVjaWZpYyBsb2dpYyBjaGFuZ2VzLgoKVGhlIGRvY3VtZW50YXRpb24mIzM5O3MgU2VjdGlvbiA0IGlzIGtleSBoZXJlLiBJdCBkaXN0aW5ndWlzaGVzIGJldHdlZW4gc3RhdGljIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyAod2hpY2ggdHlwaWNhbGx5IGhhdmUgc3ltYm9sIGVudHJpZXMgaW4gYGthbGxzeW1zYCBvciBgdm1saW51eGApIGFuZCBzdGF0aWMgaW5saW5lcyBpbiBoZWFkZXJzICguaCksIHdoaWNoIGFyZSBnZW5lcmFsbHkgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGxhY2sgZGlzdGluY3Qgc3ltYm9scy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyBzdWJqZWN0IHRvIGlubGluaW5nLgoKQWgsIGJ1dCB3YWl0ISBUaGUgY3J1Y2lhbCBkZXRhaWwgaXMgdGhhdCBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyBhc3NpZ25lZCB0byBgeHNrX21hcF9vcHMubWFwX2dlbl9sb29rdXBgLCBhIGZ1bmN0aW9uIHBvaW50ZXIuIFRoaXMgbWVhbnMgdGhlIGNvbXBpbGVyICpjYW5ub3QqIGNvbXBsZXRlbHkgaW5saW5lIGl0IGF3YXksIGFzIGl0cyBhZGRyZXNzIGlzIHRha2VuIGFuZCB1c2VkIHdpdGhpbiBgeHNrX21hcF9vcHNgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgc3VnZ2VzdHMgYSBzeW1ib2wgZXhpc3RzIGFuZCBpcyB0aGVyZWZvcmUgdGFyZ2V0YWJsZS4KClRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIG5lZWQgdG8gY29uc2lkZXIgcmVsYXRlZCBmdW5jdGlvbnMgYW5kIHBvdGVudGlhbCBjYWxsZXJzIHdpdGhpbiBgbmV0L3hkcC94c2ttYXAuY2AuIExldCBtZSBsaXN0IHRob3NlIEkga25vdyBvZjogYHhza19tYXBfZ2VuX2xvb2t1cGAsIGB4c2tfbWFwX2FsbG9jYCwgYHhza19tYXBfbm9kZV9hbGxvY2AsIGB4c2tfbWFwX2xvb2t1cF9lbGVtYCwgYHhza19tYXBfdXBkYXRlX2VsZW1gLCBhbmQgYHhza19tYXBfZGVsZXRlX2VsZW1gLiBJIG5lZWQgdG8gcmV2aWV3IHRoZXNlIGZ1bmN0aW9ucyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIEZpbmFsbHksIEkgd2lsbCB2ZXJpZnkgdGhlIGV4aXN0aW5nIHN5bWJvbHMgaW4gYG5ldC94ZHAveHNrbWFwLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdH1cbiAyNTE6XHRcbiAyNTI6XHR2b2lkIHhza19tYXBfdHJ5X3NvY2tfZGVsZXRlKHN0cnVjdCB4c2tfbWFwICptYXAsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gMjUzOlx0XHRcdFx0ICAgICBzdHJ1Y3QgeGRwX3NvY2sgX19yY3UgKiptYXBfZW50cnkpXG4gMjU0Olx0e1xuIDI1NTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm1hcC1cdTAwM2Vsb2NrKTtcbiAyNTY6XHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoKm1hcF9lbnRyeSkgPT0geHMpIHtcbiAyNTc6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCptYXBfZW50cnksIE5VTEwpO1xuIDI1ODpcdFx0XHR4c2tfbWFwX3NvY2tfZGVsZXRlKHhzLCBtYXBfZW50cnkpO1xuIDI1OTpcdFx0fVxuIDI2MDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bWFwLVx1MDAzZWxvY2spO1xuIDI2MTpcdH1cbiAyNjI6XHRcbiAyNjM6XHRzdGF0aWMgYm9vbCB4c2tfbWFwX21ldGFfZXF1YWwoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1ldGEwLFxuIDI2NDpcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWV0YTEpXG4gMjY1Olx0e1xuIDI2NjpcdFx0cmV0dXJuIG1ldGEwLVx1MDAzZW1heF9lbnRyaWVzID09IG1ldGExLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAyNlx1MDAyNlxuIDI2NzpcdFx0XHRicGZfbWFwX21ldGFfZXF1YWwobWV0YTAsIG1ldGExKTtcbiAyNjg6XHR9XG4gMjY5Olx0XG4gMjcwOlx0QlRGX0lEX0xJU1RfU0lOR0xFKHhza19tYXBfYnRmX2lkcywgc3RydWN0LCB4c2tfbWFwKVxuIDI3MTpcdGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyB4c2tfbWFwX29wcyA9IHtcbiAyNzI6XHRcdC5tYXBfbWV0YV9lcXVhbCA9IHhza19tYXBfbWV0YV9lcXVhbCxcbiAyNzM6XHRcdC5tYXBfYWxsb2MgPSB4c2tfbWFwX2FsbG9jLFxuIDI3NDpcdFx0Lm1hcF9mcmVlID0geHNrX21hcF9mcmVlLFxuIDI3NTpcdFx0Lm1hcF9nZXRfbmV4dF9rZXkgPSB4c2tfbWFwX2dldF9uZXh0X2tleSxcbiAyNzY6XHRcdC5tYXBfbG9va3VwX2VsZW0gPSB4c2tfbWFwX2xvb2t1cF9lbGVtLFxuIDI3NzpcdFx0Lm1hcF9nZW5fbG9va3VwID0geHNrX21hcF9nZW5fbG9va3VwLFxuIDI3ODpcdFx0Lm1hcF9sb29rdXBfZWxlbV9zeXNfb25seSA9IHhza19tYXBfbG9va3VwX2VsZW1fc3lzX29ubHksXG4gMjc5Olx0XHQubWFwX3VwZGF0ZV9lbGVtID0geHNrX21hcF91cGRhdGVfZWxlbSxcbiAyODA6XHRcdC5tYXBfZGVsZXRlX2VsZW0gPSB4c2tfbWFwX2RlbGV0ZV9lbGVtLFxuIDI4MTpcdFx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxuIDI4MjpcdFx0Lm1hcF9tZW1fdXNhZ2UgPSB4c2tfbWFwX21lbV91c2FnZSxcbiAyODM6XHRcdC5tYXBfYnRmX2lkID0gXHUwMDI2eHNrX21hcF9idGZfaWRzWzBdLFxuIDI4NDpcdFx0Lm1hcF9yZWRpcmVjdCA9IHhza19tYXBfcmVkaXJlY3QsXG4gMjg1Olx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNzQKCQkJCQkJCW91dHB1dDogMTM1CgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiAgSSBzZWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYEVuYWJsZUNvbmZpZ3NgLCBzcGVjaWZpY2FsbHkgYFhEUF9TT0NLRVRTYCBhbmQsIGJlY2F1c2UgaXQmIzM5O3MgYSBkZXBlbmRlbmN5LCBgQlBGX1NZU0NBTExgLiBHb29kLiBUaGVzZSBhcmUgdGhlIHJpZ2h0IHN0YXJ0aW5nIHBvaW50cy4gYEJQRl9TWVNDQUxMYCBpcyBhIGNvcmUgQlBGIGNvbmZpZywgYW5kIGBYRFBfU09DS0VUU2AgaXMsIG9mIGNvdXJzZSwgdGhlIGtleSBmb3IgWFNLIGFuZCBgeHNrbWFwLmNgLgoKTm93LCBJJiMzOTtsbCBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9sKHMpLiBMb29raW5nIGF0IGBGb2N1c1N5bWJvbHNgLCBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyB0aGUgcGlucG9pbnQuIEkgY291bGQgcG90ZW50aWFsbHkgYnJvYWRlbiB0aGUgc2NvcGUgdG8gaW5jbHVkZSB0aGluZ3MgbGlrZSBgYnBmX2RvX21pc2NfZml4dXBzYCBvciBgeHNrX21hcF9hbGxvY2AsIGJ1dCBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyB2ZXJ5IHNwZWNpZmljLiBTdGljayB3aXRoIHRoYXQgZm9jdXMuCgpUaW1lIGZvciB0aGUgY3J1Y2lhbCBgV29ydGhGdXp6aW5nYCBkb3VibGUtY2hlY2suICBMZXQmIzM5O3Mgc2VlOgoKKiAgICoqQ29yZSBTdWJzeXN0ZW06KiogSXQgaW52b2x2ZXMgQlBGIGFuZCBYRFAgbmV0d29ya2luZywgc28geWVzLCB0aGlzIGlzIGFic29sdXRlbHkgZm91bmRhdGlvbmFsLgoqICAgKipJbnN0cnVjdGlvbiBHZW5lcmF0aW9uIExvZ2ljOioqIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBmb3IgSklUL2lubGluZWQgbWFwIGxvb2t1cHMgd2l0aGluIFhTS01BUCwgc3BlY2lmaWNhbGx5IHN3aXRjaGluZyBmcm9tIGBCUEZfSk1QX0lNTWAgdG8gYEJQRl9KTVAzMl9JTU1gLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIGhvdyBieXRlY29kZSBpcyBwcm9kdWNlZC4KKiAgICoqUmVhY2hhYmxlIFBhdGg6KiogIEl0JiMzOTtzIHRyaWdnZXJlZCB0aHJvdWdoIHRoZSBCUEYgc3lzY2FsbCB3aGVuIGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSB3aXRoIFhTS01BUCBtYXAgbG9va3Vwcy4gVGhhdCYjMzk7cyBhIHN0YW5kYXJkIGFjY2VzcyBwb2ludC4KKiAgICoqQ29uY2x1c2lvbjoqKiBUaGlzIGlzICpjbGVhcmx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIGluIGEgc2Vuc2l0aXZlIGFyZWEgdGhhdOKAmXMgcmVhZGlseSBhY2Nlc3NpYmxlLgoKT2theSwgbGV0JiMzOTtzIGZvcm1hbGl6ZSB0aGUgcmVhc29uaW5nOiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgaW5zdHJ1Y3Rpb24gZW1pc3Npb24gZm9yIFhTS01BUCBsb29rdXBzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGB4c2tfbWFwX2dlbl9sb29rdXBgLiBJbnN0ZWFkIG9mIHVzaW5nIDY0LWJpdCBqdW1wcyAoYEJQRl9KTVBfSU1NYCksIGl0JiMzOTtzIG5vdyBnZW5lcmF0aW5nIDMyLWJpdCBqdW1wcyAoYEJQRl9KTVAzMl9JTU1gKS4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIGhvdyBCUEYgYnl0ZWNvZGUgaXMgZ2VuZXJhdGVkIGFuZCBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiBBRl9YRFAgbWFwcy4gR2l2ZW4gdGhhdCB0aGVzZSBtYXBzIGFyZSBhY2Nlc3NpYmxlIGV2ZW4gaW4gYSB2YW5pbGxhIFFFTVUgZW52aXJvbm1lbnQsIGZ1enppbmcgdGhlIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGV4ZWN1dGlvbiBpbnZvbHZpbmcgWFNLTUFQcyBoYXMgYSBoaWdoIHByb2JhYmlsaXR5IG9mIHVuY292ZXJpbmcgcmVncmVzc2lvbnMgb3IgcmV2ZWFsaW5nIHVuZXhwZWN0ZWQgdmVyaWZpZXIgb3IgZXhlY3V0aW9uIGJlaGF2aW9yLiBUaGF0JiMzOTtzIGEgY2xlYXIgd2luLgoKUmlnaHQsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4c2tfbWFwX2dlbl9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgeHNrX21hcF9nZW5fbG9va3VwKCkgaW4gbmV0L3hkcC94c2ttYXAuYyBieSBjaGFuZ2luZyB0aGUgZW1pdHRlZCBsb29rdXAgaW5zdHJ1Y3Rpb24gZnJvbSBCUEZfSk1QX0lNTSB0byBCUEZfSk1QMzJfSU1NIHdoZW4gdmVyaWZ5aW5nIGFuZCBpbmxpbmluZyBYU0tNQVAgbG9va3Vwcy4gVGhpcyBtb2RpZmllcyBleGVjdXRhYmxlIGxvZ2ljIGluIHRoZSBCUEYvWERQIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX21hcF9nZW5fbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHhza19tYXBfZ2VuX2xvb2t1cCgpIGluIG5ldC94ZHAveHNrbWFwLmMgYnkgY2hhbmdpbmcgdGhlIGVtaXR0ZWQgbG9va3VwIGluc3RydWN0aW9uIGZyb20gQlBGX0pNUF9JTU0gdG8gQlBGX0pNUDMyX0lNTSB3aGVuIHZlcmlmeWluZyBhbmQgaW5saW5pbmcgWFNLTUFQIGxvb2t1cHMuIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgQlBGL1hEUCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBhIDY0LWJpdCBqdW1wIGluc3RydWN0aW9uIChCUEZfSk1QX0lNTSkgdG8gYSAzMi1iaXQganVtcCBpbnN0cnVjdGlvbiAoQlBGX0pNUDMyX0lNTSkgaW4geHNrX21hcF9nZW5fbG9va3VwKCkgd2hlbiBpbmxpbmluZyBCUEYgaW5zdHJ1Y3Rpb25zIGZvciBYU0sgbWFwIGVsZW1lbnQgbG9va3Vwcy4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgdG91Y2ggbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1ZyBpbnZvbHZpbmcgaW5jb3JyZWN0IGJyYW5jaCBvZmZzZXRzIG9yIGluZGV4aW5nIHdvdWxkIHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB1bmV4cGVjdGVkIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNWJjN2E3ZDIwMDFiZmY1MjY3OWYxNDBhNTY5NGQzNzBiNGJhMjMzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMTg6MjM6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGRwL3hza21hcC5jIGIvbmV0L3hkcC94c2ttYXAuYwppbmRleCAzYmZmMzQ2MzA4ZDBmLi5iZjAwZDY0NjNjMTkxIDEwMDY0NAotLS0gYS9uZXQveGRwL3hza21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrbWFwLmMKQEAgLTEyNCw3ICYjNDM7MTI0LDcgQEAgc3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZikKIAlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjsKIAogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCByZXQsIGluZGV4LCAwKTsKLQkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkdFLCByZXQsIG1hcC0mZ3Q7bWF4X2VudHJpZXMsIDUpOwomIzQzOwkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QMzJfSU1NKEJQRl9KR0UsIHJldCwgbWFwLSZndDttYXhfZW50cmllcywgNSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfTFNILCByZXQsIGlsb2cyKHNpemVvZihzdHJ1Y3QgeHNrX3NvY2sgKikpKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIG1wLCBvZmZzZXRvZihzdHJ1Y3QgeHNrX21hcCwgeHNrX21hcCkpOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9SRUcoQlBGX0FERCwgcmV0LCBtcCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjMxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhbiBYRFAgTWFwIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gVGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gd2l0aGluIGBuZXQveGRwL3hza21hcC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHhza19tYXBfZ2VuX2xvb2t1cGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBhZGp1c3RtZW50IHRvIHRoZSBCUEYgaW5zdHJ1Y3Rpb25zLgoKTG9va2luZyBhdCB0aGUgZGlmZiwgdGhlIGNoYW5nZSBpcyBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LiBXZSYjMzk7dmUgc3dpdGNoZWQgZnJvbSB1c2luZyBgQlBGX0pNUF9JTU1gIHRvIGBCUEZfSk1QMzJfSU1NYCBpbiB0aGUgY29tcGFyaXNvbiBpbnN0cnVjdGlvbi4gVGhpcyBqdW1wIGlzIGNvbmRpdGlvbmFsLCBhbmQgdGhlIGtleSBpcyB0aGUgc2l6ZSBvZiBgcmV0YCBhZ2FpbnN0IGBtYXAtJmd0O21heF9lbnRyaWVzYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiAqd2h5KiB0aGUgY2hhbmdlIGZyb20gYSA2NC1iaXQganVtcCB0byBhIDMyLWJpdCBvbmUgaGVyZT8gSXMgdGhlcmUgc29tZSBvcHRpbWl6YXRpb24sIG9yIGlzIGl0IGEgYnVnIGZpeD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgdHlwZXMgaW52b2x2ZWQuICBBcmUgd2Ugbm93IGV4cGVjdGluZyAzMi1iaXQgdmFsdWVzIGluc3RlYWQgb2YgNjQtYml0IGZvciBzb21lIHJlYXNvbj8gR2l2ZW4gdGhhdCB3ZSBhcmUgaW5kZXhpbmcgaW50byBhbiBhcnJheSBvZiBwb2ludGVycyB0byBgeHNrX3NvY2tgLCBJIHByZXN1bWUgYHJldGAgaXMgYW4gaW5kZXgsIHdoaWNoIGlzIHVzdWFsbHkgYSAzMi1iaXQgcXVhbnRpdHksIGJ1dCBpdCBzdGlsbCBtYWtlcyBtZSBhc2sgd2h5IHdlJiMzOTtyZSBzZWVpbmcgdGhlIGNoYW5nZS4KCkkmIzM5O2xsIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGluIHRoZSBmaWxlLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlbnQgb2YgYHhza19tYXBfZ2VuX2xvb2t1cGAgd2lsbCBiZSBjcnVjaWFsLiBXaGF0JiMzOTtzIHRoZSBtYXAmIzM5O3Mgcm9sZSBpbiB0aGUgWERQIGZyYW1ld29yaz8gSXMgdGhpcyBsb29rdXAgcGVyZm9ybWluZyBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGFycmF5IGluZGV4PyBJcyB0aGlzIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSByZWNlbnQgMzIvNjQgYml0IHBvaW50ZXIgc2l6ZSBkaXNjdXNzaW9ucz8KClVsdGltYXRlbHksIHRoZSBnb2FsIGlzIHRvIGNvbmZpcm0gdGhhdCB0aGUgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGNvcnJlY3QgZm9yIGJvdGggMzItYml0IGFuZCA2NC1iaXQgYXJjaGl0ZWN0dXJlcywgYW5kIGRvZXNuJiMzOTt0IGJyZWFrIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBvZiB0aGUgWERQIG1hcC4gSSYjMzk7bGwgcHJvYmFibHkgYWxzbyB3YW50IHRvIHJldmlldyB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiB0byBzZWUgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hkcC94c2ttYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0XHRpZiAoaW5kZXggPT0gbS1cdTAwM2VtYXAubWF4X2VudHJpZXMgLSAxKVxuIDExNjpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAxMTc6XHRcdCpuZXh0ID0gaW5kZXggJiM0MzsgMTtcbiAxMTg6XHRcdHJldHVybiAwO1xuIDExOTpcdH1cbiAxMjA6XHRcbiAxMjE6XHRzdGF0aWMgaW50IHhza19tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIDEyMjpcdHtcbiAxMjM6XHRcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzAsIG1wID0gQlBGX1JFR18xLCBpbmRleCA9IEJQRl9SRUdfMjtcbiAxMjQ6XHRcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xuIDEyNTpcdFxuIDEyNjpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHJldCwgaW5kZXgsIDApO1xuIDEyNzpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUDMyX0lNTShCUEZfSkdFLCByZXQsIG1hcC1cdTAwM2VtYXhfZW50cmllcywgNSk7XG4gMTI4Olx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9MU0gsIHJldCwgaWxvZzIoc2l6ZW9mKHN0cnVjdCB4c2tfc29jayAqKSkpO1xuIDEyOTpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBtcCwgb2Zmc2V0b2Yoc3RydWN0IHhza19tYXAsIHhza19tYXApKTtcbiAxMzA6XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9SRUcoQlBGX0FERCwgcmV0LCBtcCk7XG4gMTMxOlx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfU0laRU9GKHN0cnVjdCB4c2tfc29jayAqKSwgcmV0LCByZXQsIDApO1xuIDEzMjpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcbiAxMzM6XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9NT1Y2NF9JTU0ocmV0LCAwKTtcbiAxMzQ6XHRcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4gMTM1Olx0fVxuIDEzNjpcdFxuIDEzNzpcdC8qIEVsZW1lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IFJDVTsgZWl0aGVyIGJ5IHJjdV9yZWFkX2xvY2soKSAoZnJvbSBzeXNjYWxsKSBvclxuIDEzODpcdCAqIGJ5IGxvY2FsX2JoX2Rpc2FibGUoKSAoZnJvbSBYRFAgY2FsbHMgaW5zaWRlIE5BUEkpLiBUaGVcbiAxMzk6XHQgKiByY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSBiZWxvdyBtYWtlcyBsb2NrZGVwIGFjY2VwdCBib3RoLlxuIDE0MDpcdCAqL1xuIDE0MTpcdHN0YXRpYyB2b2lkICpfX3hza19tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSlcbiAxNDI6XHR7XG4gMTQzOlx0XHRzdHJ1Y3QgeHNrX21hcCAqbSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCB4c2tfbWFwLCBtYXApO1xuIDE0NDpcdFxuIDE0NTpcdFx0aWYgKGtleSBcdTAwM2U9IG1hcC1cdTAwM2VtYXhfZW50cmllcylcbiAxNDY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMTQ3Olx0XG4gMTQ4Olx0XHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKG0tXHUwMDNleHNrX21hcFtrZXldLCByY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSk7XG4gMTQ5Olx0fVxuIDE1MDpcdFxuIDE1MTpcdHN0YXRpYyB2b2lkICp4c2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiAxNTI6XHR7XG4gMTUzOlx0XHRyZXR1cm4gX194c2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xuIDE1NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkzNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJQRiBMb29rdXAgR2VuZXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHhza19tYXBfZ2VuX2xvb2t1cGAgZnVuY3Rpb24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdHMgam9iIGlzIHRvIGR5bmFtaWNhbGx5IGdlbmVyYXRlIHRoZSBpbmxpbmUgQlBGIGluc3RydWN0aW9ucyBuZWNlc3NhcnkgZm9yIGxvb2tpbmcgdXAgYW4gZWxlbWVudCB3aXRoaW4gYW4gYHhza19tYXBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGlzIGNvZGUgY2hhbmdlIGFuZCB3aHkgaXQgd2FzIG1hZGUuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBhdCB0aGUgdHJhbnNpdGlvbi4gTGluZSAxMjYgdXNlcyBgQlBGX0xEWF9NRU0oQlBGX1csIHJldCwgaW5kZXgsIDApYCB0byBsb2FkIHRoZSBgdTMyYCBrZXkgaW50byBgcmV0YC4gQmVmb3JlLCB0aGUgY29tcGFyaXNvbiB3YXMgZG9uZSBvbiB0aGUgNjQtYml0IHZhbHVlIHZpYSBgQlBGX0pNUF9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtJmd0O21heF9lbnRyaWVzLCA1KWAuIE5vdywgaXQmIzM5O3MgZG9uZSB2aWEgYEJQRl9KTVAzMl9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtJmd0O21heF9lbnRyaWVzLCA1KWAsIGNvbXBhcmluZyB0aGUgMzItYml0IGltbWVkaWF0ZS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgMzItYml0IGNvbXBhcmlzb24gd2FzIGludHJvZHVjZWQuIFBlcmhhcHMgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUsIG9yIHNvbWUgb3B0aW1pemF0aW9uLiBUbyBnZXQgYSBiZXR0ZXIgY29udGV4dCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgb3RoZXIgaW5zdGFuY2VzIG9mIGBtYXBfZ2VuX2xvb2t1cGAgd2l0aGluIHRoZSBrZXJuZWwgdG8gc2VlIGlmIHRoZXJlIGFyZSBzaW1pbGFyIGNoYW5nZXMgb3IgcGF0dGVybnMgdGhhdCBjb3VsZCBwcm92aWRlIHNvbWUgaW5zaWdodC4gUGVyaGFwcyB0aGVyZSBpcyBhIHBhdGNoIHNlcmllcyB0aGF0IGNvdmVycyB0aGlzIGNoYW5nZSBpbiBtb3JlIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX0pNUDMyX0lNTS4qbWF4X2VudHJpZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2ttYXAuYz0xMjE9c3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5uZXQveGRwL3hza21hcC5jLTEyNi1cdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCByZXQsIGluZGV4LCAwKTtcbm5ldC94ZHAveHNrbWFwLmM6MTI3Olx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUDMyX0lNTShCUEZfSkdFLCByZXQsIG1hcC1cdTAwM2VtYXhfZW50cmllcywgNSk7XG5uZXQveGRwL3hza21hcC5jLTEyOC1cdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0xTSCwgcmV0LCBpbG9nMihzaXplb2Yoc3RydWN0IHhza19zb2NrICopKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2ODAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IGlzOgoKKipIdW50aW5nIERvd24gYF9nZW5fbG9va3VwYCBJbXBsZW1lbnRhdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBwbGFjZXMgd2hlcmUgYF9nZW5fbG9va3VwYCBpcyBhY3R1YWxseSAqaW1wbGVtZW50ZWQqIHdpdGhpbiB0aGUga2VybmVsLiBJIGtub3cgaXQmIzM5O3MgcHJvYmFibHkgYXNzb2NpYXRlZCB3aXRoIEJQRiwgZ2l2ZW4gaXRzIG5hbWUsIHNvIEkgc2hvdWxkIGRlZmluaXRlbHkgc3RhcnQgYnkgZGlnZ2luZyB0aHJvdWdoIHRoZSBga2VybmVsL2JwZmAgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIGEgbGlrZWx5IGNhbmRpZGF0ZS4gQmV5b25kIHRoYXQsIEkgcmVtZW1iZXIgc2VlaW5nIHNpbWlsYXIgbG9va3VwIG1lY2hhbmlzbXMgcG90ZW50aWFsbHkgaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFNwZWNpZmljYWxseSwgSSByZWNhbGwgc29tZSBmaWx0ZXIgbG9naWMgaGFuZ2luZyBhcm91bmQgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBJdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gd2lkZW4gdGhlIG5ldCwgc28gdG8gc3BlYWsuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGEgYnJvYWQgc2VhcmNoIGFjcm9zcyB0aGVzZSBhcmVhcyB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHR1cm5zIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfZ2VuX2xvb2t1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTg3PXN0cnVjdCBicGZfbWFwX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0xMjYtXHR2b2lkICgqbWFwX2ZkX3B1dF9wdHIpKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnB0ciwgYm9vbCBuZWVkX2RlZmVyKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MTI3Olx0aW50ICgqbWFwX2dlbl9sb29rdXApKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpO1xuaW5jbHVkZS9saW51eC9icGYuaC0xMjgtXHR1MzIgKCptYXBfZmRfc3lzX2xvb2t1cF9lbGVtKSh2b2lkICpwdHIpO1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0yMDE9c3RhdGljIGludCBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGltbSxcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjE3LS8qIGVtaXQgQlBGIGluc3RydWN0aW9ucyBlcXVpdmFsZW50IHRvIEMgY29kZSBvZiBhcnJheV9tYXBfbG9va3VwX2VsZW0oKSAqL1xua2VybmVsL2JwZi9hcnJheW1hcC5jOjIxODpzdGF0aWMgaW50IGFycmF5X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjE5LXtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9Mjc3PXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW1tLCB1MzIgKm9mZilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjkzLS8qIGVtaXQgQlBGIGluc3RydWN0aW9ucyBlcXVpdmFsZW50IHRvIEMgY29kZSBvZiBwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKCkgKi9cbmtlcm5lbC9icGYvYXJyYXltYXAuYzoyOTQ6c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yOTUte1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz04NTk9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg2OC1cdC5tYXBfZGVsZXRlX2VsZW0gPSBhcnJheV9tYXBfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODY5Olx0Lm1hcF9nZW5fbG9va3VwID0gYXJyYXlfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODcwLVx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcixcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODg2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODkyLVx0Lm1hcF9sb29rdXBfZWxlbSA9IHBlcmNwdV9hcnJheV9tYXBfbG9va3VwX2VsZW0sXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODkzOlx0Lm1hcF9nZW5fbG9va3VwID0gcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg5NC1cdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNDY0PXN0YXRpYyB2b2lkICphcnJheV9vZl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDczLVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE0NzQ6c3RhdGljIGludCBhcnJheV9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0NzUtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNTA1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9vZl9tYXBzX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE1MTQtXHQubWFwX2ZkX3N5c19sb29rdXBfZWxlbSA9IGJwZl9tYXBfZmRfc3lzX2xvb2t1cF9lbGVtLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE1MTU6XHQubWFwX2dlbl9sb29rdXAgPSBhcnJheV9vZl9tYXBfZ2VuX2xvb2t1cCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE2LVx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xNTEzPWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNDctXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwNDg6XHRcdC8qIEJQRl9FTUlUX0NBTEwoKSBhc3N1bXB0aW9ucyBpbiBzb21lIG9mIHRoZSBtYXBfZ2VuX2xvb2t1cFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDQ5LVx0XHQgKiBhbmQgb3RoZXIgaW5saW5pbmcgaGFuZGxlcnMgYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIDY0IGJpdFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjA2OC1cdFx0XHRpZiAoaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0ZVTkNfbWFwX2xvb2t1cF9lbGVtIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9maXh1cHMuYzoyMDY5Olx0XHRcdCAgICBvcHMtXHUwMDNlbWFwX2dlbl9sb29rdXApIHtcbmtlcm5lbC9icGYvZml4dXBzLmM6MjA3MDpcdFx0XHRcdGNudCA9IG9wcy1cdTAwM2VtYXBfZ2VuX2xvb2t1cChtYXBfcHRyLCBpbnNuX2J1Zik7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNzEtXHRcdFx0XHRpZiAoY250ID09IC1FT1BOT1RTVVBQKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTcxNT1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX251bGxzX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTczNS0gKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFkanVzdGVkIGJ5IEJQRiBpbnN0cnVjdGlvbnNcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjczNjogKiBpbiBodGFiX21hcF9nZW5fbG9va3VwKCkuXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy03MzctICovXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9NzU4PXN0YXRpYyB2b2lkICpodGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtNzc4LSAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6Nzc5OnN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxua2VybmVsL2JwZi9oYXNodGFiLmMtNzgwLXtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz04MTM9c3RhdGljIHZvaWQgKmh0YWJfbHJ1X21hcF9sb29rdXBfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTgxNy1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjgxODpzdGF0aWMgaW50IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy04MTktXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIzNjE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzcxLVx0Lm1hcF9kZWxldGVfZWxlbSA9IGh0YWJfbWFwX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM3MjpcdC5tYXBfZ2VuX2xvb2t1cCA9IGh0YWJfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzczLVx0Lm1hcF9zZXFfc2hvd19lbGVtID0gaHRhYl9tYXBfc2VxX3Nob3dfZWxlbSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzgzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzOTQtXHQubWFwX2RlbGV0ZV9lbGVtID0gaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM5NTpcdC5tYXBfZ2VuX2xvb2t1cCA9IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5Ni1cdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjQwNz1zdGF0aWMgdm9pZCAqaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDE3LS8qIGlubGluZSBicGZfbWFwX2xvb2t1cF9lbGVtKCkgY2FsbCBmb3IgcGVyLUNQVSBoYXNobWFwICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDE4OnN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MTkte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI1NjQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfcGVyY3B1X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjU3MC1cdC5tYXBfbG9va3VwX2VsZW0gPSBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTcxOlx0Lm1hcF9nZW5fbG9va3VwID0gaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTcyLVx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtID0gaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0sXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjY5OD1zdGF0aWMgdm9pZCAqaHRhYl9vZl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3MDctXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzA4OnN0YXRpYyBpbnQgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjcwOS1cdFx0XHRcdCAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzMyPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX29mX21hcHNfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzQxLVx0Lm1hcF9mZF9zeXNfbG9va3VwX2VsZW0gPSBicGZfbWFwX2ZkX3N5c19sb29rdXBfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3NDI6XHQubWFwX2dlbl9sb29rdXAgPSBodGFiX29mX21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc0My1cdC5tYXBfY2hlY2tfYnRmID0gbWFwX2NoZWNrX25vX2J0Zixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMDI1PXN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwODMtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDg0OnN0YXRpYyBpbnQgcmh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwODUte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MDg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUxOS1cdC5tYXBfZGVsZXRlX2VsZW0gPSByaHRhYl9tYXBfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTIwOlx0Lm1hcF9nZW5fbG9va3VwID0gcmh0YWJfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTIxLVx0Lm1hcF9zZXFfc2hvd19lbGVtID0gcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXG4tLVxubmV0L3hkcC94c2ttYXAuYz0xMDQ9c3RhdGljIGludCB4c2tfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuLS1cbm5ldC94ZHAveHNrbWFwLmMtMTIwLVxubmV0L3hkcC94c2ttYXAuYzoxMjE6c3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbm5ldC94ZHAveHNrbWFwLmMtMTIyLXtcbi0tXG5uZXQveGRwL3hza21hcC5jPTI3MT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgeHNrX21hcF9vcHMgPSB7XG4tLVxubmV0L3hkcC94c2ttYXAuYy0yNzYtXHQubWFwX2xvb2t1cF9lbGVtID0geHNrX21hcF9sb29rdXBfZWxlbSxcbm5ldC94ZHAveHNrbWFwLmM6Mjc3Olx0Lm1hcF9nZW5fbG9va3VwID0geHNrX21hcF9nZW5fbG9va3VwLFxubmV0L3hkcC94c2ttYXAuYy0yNzgtXHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0geHNrX21hcF9sb29rdXBfZWxlbV9zeXNfb25seSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wZXJjcHVfYXJyYXlfaW5uZXJfbWFwLmMtNS0gKiBUZXN0IHRoYXQgcmVwbGFjaW5nIGFuIGlubmVyIHBlcmNwdSBhcnJheSBtYXAgd2l0aCBvbmUgdGhhdCBoYXMgZGlmZmVyZW50XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wZXJjcHVfYXJyYXlfaW5uZXJfbWFwLmM6NjogKiBtYXhfZW50cmllcyBpcyByZWplY3RlZC4gIHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cCgpIGlubGluZXMgdGhlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wZXJjcHVfYXJyYXlfaW5uZXJfbWFwLmMtNy0gKiB0ZW1wbGF0ZSYjMzk7cyBpbmRleF9tYXNrLCBzbyBhbGxvd2luZyBhIHNtYWxsZXIgcmVwbGFjZW1lbnQgd291bGQgY2F1c2UgT09CLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBBcnJheSBNYXAgTG9va3VwKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3Mgc2VlLi4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYXJyYXkgbWFwcyBhbmQgaG93IGxvb2t1cHMgYXJlIGhhbmRsZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBga2VybmVsL2JwZi9hcnJheW1hcC5jYCBhbmQgc3BlY2lmaWNhbGx5LCBhcm91bmQgdGhlIGBhcnJheV9tYXBfZ2VuX2xvb2t1cGAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvcmUgbG9naWMgZm9yIHJldHJpZXZpbmcgdmFsdWVzIGZyb20gdGhlc2UgbWFwcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgaW5kZXhpbmcsIGJvdW5kcyBjaGVja2luZyAoY3J1Y2lhbCEpLCBhbnkgcG90ZW50aWFsIGNhY2hpbmcgbWVjaGFuaXNtcywgYW5kIGVycm9yIGhhbmRsaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgdG9vIC0gcGVyaGFwcyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBpbXByb3ZlZCBpbiB0ZXJtcyBvZiBsb29rdXAgcGVyZm9ybWFuY2Ugb3IgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcnJheW1hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTc6XHQvKiBlbWl0IEJQRiBpbnN0cnVjdGlvbnMgZXF1aXZhbGVudCB0byBDIGNvZGUgb2YgYXJyYXlfbWFwX2xvb2t1cF9lbGVtKCkgKi9cbiAyMTg6XHRzdGF0aWMgaW50IGFycmF5X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4gMjE5Olx0e1xuIDIyMDpcdFx0c3RydWN0IGJwZl9hcnJheSAqYXJyYXkgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FycmF5LCBtYXApO1xuIDIyMTpcdFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4gMjIyOlx0XHR1MzIgZWxlbV9zaXplID0gYXJyYXktXHUwMDNlZWxlbV9zaXplO1xuIDIyMzpcdFx0Y29uc3QgaW50IHJldCA9IEJQRl9SRUdfMDtcbiAyMjQ6XHRcdGNvbnN0IGludCBtYXBfcHRyID0gQlBGX1JFR18xO1xuIDIyNTpcdFx0Y29uc3QgaW50IGluZGV4ID0gQlBGX1JFR18yO1xuIDIyNjpcdFxuIDIyNzpcdFx0aWYgKG1hcC1cdTAwM2VtYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX0lOTkVSX01BUClcbiAyMjg6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDIyOTpcdFxuIDIzMDpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBtYXBfcHRyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX2FycmF5LCB2YWx1ZSkpO1xuIDIzMTpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHJldCwgaW5kZXgsIDApO1xuIDIzMjpcdFx0aWYgKCFtYXAtXHUwMDNlYnlwYXNzX3NwZWNfdjEpIHtcbiAyMzM6XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtXHUwMDNlbWF4X2VudHJpZXMsIDQpO1xuIDIzNDpcdFx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVMzJfSU1NKEJQRl9BTkQsIHJldCwgYXJyYXktXHUwMDNlaW5kZXhfbWFzayk7XG4gMjM1Olx0XHR9IGVsc2Uge1xuIDIzNjpcdFx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkdFLCByZXQsIG1hcC1cdTAwM2VtYXhfZW50cmllcywgMyk7XG4gMjM3Olx0XHR9XG4gMjM4Olx0XG4gMjM5Olx0XHRpZiAoaXNfcG93ZXJfb2ZfMihlbGVtX3NpemUpKSB7XG4gMjQwOlx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX0xTSCwgcmV0LCBpbG9nMihlbGVtX3NpemUpKTtcbiAyNDE6XHRcdH0gZWxzZSB7XG4gMjQyOlx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX01VTCwgcmV0LCBlbGVtX3NpemUpO1xuIDI0MzpcdFx0fVxuIDI0NDpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X1JFRyhCUEZfQURELCByZXQsIG1hcF9wdHIpO1xuIDI0NTpcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcbiAyNDY6XHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9NT1Y2NF9JTU0ocmV0LCAwKTtcbiAyNDc6XHRcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4gMjQ4Olx0fVxuIDI0OTpcdFxuIDI1MDpcdC8qIENhbGxlZCBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xuIDI1MTpcdHN0YXRpYyB2b2lkICpwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiAyNTI6XHR7XG4gMjUzOlx0XHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XG4gMjU0Olx0XHR1MzIgaW5kZXggPSAqKHUzMiAqKWtleTtcbiAyNTU6XHRcbiAyNTY6XHRcdGlmICh1bmxpa2VseShpbmRleCBcdTAwM2U9IGFycmF5LVx1MDAzZW1hcC5tYXhfZW50cmllcykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxODgKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogNTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBJbnN0cnVjdGlvbiBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYHhza19tYXBfZ2VuX2xvb2t1cGAsIEkgc2VlIHRoZXkmIzM5O3JlIHN3aXRjaGluZyBmcm9tIGBCUEZfSk1QX0lNTWAgdG8gYEJQRl9KTVAzMl9JTU1gIHdoZW4gZG9pbmcgYSBib3VuZHMgY2hlY2sgYWdhaW5zdCBgbWFwLSZndDttYXhfZW50cmllc2AgYmVmb3JlIGluZGV4aW5nIGludG8gYG0tJmd0O3hza19tYXBgLiBCb3RoIGp1bXAgaW5zdHJ1Y3Rpb25zIGFyZSBlc3NlbnRpYWxseSBkb2luZyB0aGUgc2FtZSBqb2I6IG1ha2luZyBzdXJlIGByZXRgIGlzIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4KClRoZSB0aGluZyBpcywgdGhlIGNvZGUgYWxyZWFkeSBkb2VzIGEgMzItYml0IGxvYWQgKGBCUEZfTERYX01FTWApLCB3aGljaCBpcyB6ZXJvLWV4dGVuZGVkIGFueXdheSBvbiBhIDY0LWJpdCBCUEYgVk0uIEl0IHNlZW1zIGxpa2UgdXNpbmcgYEpNUDMyYCBtaWdodCBiZSBjbGVhbmVyIGluIGNlcnRhaW4gY29udGV4dHMsIG1heWJlIGluIHN1Yi1yZWdpc3RlciBtb2RlIG9yIHBvdGVudGlhbGx5IGJlbmVmaXRpbmcgdGhlIEpJVCBjb21waWxlci4gQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3JlIG5vdCBpbmFkdmVydGVudGx5IGV4cG9zaW5nIHNvbWV0aGluZy4KClNvLCBsZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIEtNU0FOIGNoZWNrbGlzdDoKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZToqKiBOb3BlLiBObyBkYXRhIGlzIGJlaW5nIGNvcGllZCBvdXQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBOby4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBiZWluZyB1c2VkIGluIGEgY29uZGl0aW9uYWwuCjMuICAqKkFsbG9jYXRpb24vSW5pdGlhbGl6YXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzOioqIE5vdCBhbiBpc3N1ZSBoZXJlLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb25zIG9mIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXQgcGxheS4KNC4gICoqQm91bmRzIGNoZWNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeToqKiBOb3csIGhlcmUmIzM5O3Mgd2hlcmUgaXQgKmNvdWxkKiBnZXQgaW50ZXJlc3RpbmcuIFRoaXMgKmlzKiBhIGJvdW5kcyBjaGVjaywgeWVzLCBidXQgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGZvciBhbiBhcnJheSBsb29rdXAgaW5zaWRlIGFuIFhTSyBtYXAuIElmIHRoZSBib3VuZHMgY2hlY2sgZmFpbGVkIG9yIG1pc2JlaGF2ZWQsIGl0JiMzOTtkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEtBU0FOIGlzIGJ1aWx0IHRvIGNhdGNoIHN1Y2ggYWNjZXNzZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgZHVlIHRvIHRoaXMgY2hhbmdlLgoKRXNzZW50aWFsbHksIGFsbCB0aGUgY3JpdGVyaWEgYXJlIG5lZ2F0aXZlLgoKVG8gc3VtIHVwOgoKKiAgIFRoZSBjaGFuZ2UgaW52b2x2ZXMgYSBCUEYgaW5zdHJ1Y3Rpb24gc3dpdGNoOiBhIDY0LWJpdCBqdW1wIHRvIGEgMzItYml0IGp1bXAgaW4gdGhlIGlubGluZSBCUEYgY29kZSBmb3IgWFNLIG1hcCBsb29rdXBzLgoqICAgVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlzayBvZiBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gSXQgYXZvaWRzIGFjY2Vzc2luZyBvciBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4KKiAgIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBhc3NvY2lhdGVkIHdpdGggQlBGIGFycmF5IGxvb2t1cHMgYXJlIGFscmVhZHkgYWRkcmVzc2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTiB0aHJvdWdoIGNoZWNraW5nIHRoZSBib3VuZHMuCiogICBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgcmlzayBpcyBleHRyZW1lbHkgbG93LiBJJiMzOTttIGdvaW5nIHRvIG1hcmsgdGhpcyBhcyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSBmZWVsIGNvbmZpZGVudCBpbiB0aGlzLiBJJiMzOTtsbCBqdXN0IGRvIGEgcXVpY2sgZmluYWwgcmV2aWV3IHRvIG1ha2Ugc3VyZS4gT2theSwgSSYjMzk7bSByZWFkeSB0byByZXNwb25kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGEgNjQtYml0IGp1bXAgaW5zdHJ1Y3Rpb24gKEJQRl9KTVBfSU1NKSB0byBhIDMyLWJpdCBqdW1wIGluc3RydWN0aW9uIChCUEZfSk1QMzJfSU1NKSBpbiB4c2tfbWFwX2dlbl9sb29rdXAoKSB3aGVuIGlubGluaW5nIEJQRiBpbnN0cnVjdGlvbnMgZm9yIFhTSyBtYXAgZWxlbWVudCBsb29rdXBzLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCB0b3VjaCBtZW1vcnkgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVnIGludm9sdmluZyBpbmNvcnJlY3QgYnJhbmNoIG9mZnNldHMgb3IgaW5kZXhpbmcgd291bGQgcmVzdWx0IGluIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIHVuZXhwZWN0ZWQgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgYSA2NC1iaXQganVtcCBpbnN0cnVjdGlvbiAoQlBGX0pNUF9JTU0pIHRvIGEgMzItYml0IGp1bXAgaW5zdHJ1Y3Rpb24gKEJQRl9KTVAzMl9JTU0pIGluIHhza19tYXBfZ2VuX2xvb2t1cCgpIHdoZW4gaW5saW5pbmcgQlBGIGluc3RydWN0aW9ucyBmb3IgWFNLIG1hcCBlbGVtZW50IGxvb2t1cHMuIFRoaXMgY2hhbmdlIGRvZXMgbm90IHRvdWNoIG1lbW9yeSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBidWcgaW52b2x2aW5nIGluY29ycmVjdCBicmFuY2ggb2Zmc2V0cyBvciBpbmRleGluZyB3b3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdW5leHBlY3RlZCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyMzowMy4yNzgwMDY0NDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDM0Njk1NzI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfbWFwX2dlbl9sb29rdXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgYSA2NC1iaXQganVtcCBpbnN0cnVjdGlvbiAoQlBGX0pNUF9JTU0pIHRvIGEgMzItYml0IGp1bXAgaW5zdHJ1Y3Rpb24gKEJQRl9KTVAzMl9JTU0pIGluIHhza19tYXBfZ2VuX2xvb2t1cCgpIHdoZW4gaW5saW5pbmcgQlBGIGluc3RydWN0aW9ucyBmb3IgWFNLIG1hcCBlbGVtZW50IGxvb2t1cHMuIFRoaXMgY2hhbmdlIGRvZXMgbm90IHRvdWNoIG1lbW9yeSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBidWcgaW52b2x2aW5nIGluY29ycmVjdCBicmFuY2ggb2Zmc2V0cyBvciBpbmRleGluZyB3b3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdW5leHBlY3RlZCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHhza19tYXBfZ2VuX2xvb2t1cCgpIGluIG5ldC94ZHAveHNrbWFwLmMgYnkgY2hhbmdpbmcgdGhlIGVtaXR0ZWQgbG9va3VwIGluc3RydWN0aW9uIGZyb20gQlBGX0pNUF9JTU0gdG8gQlBGX0pNUDMyX0lNTSB3aGVuIHZlcmlmeWluZyBhbmQgaW5saW5pbmcgWFNLTUFQIGxvb2t1cHMuIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgQlBGL1hEUCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyMzowMy4yNzgwMTA2MDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MzcwMTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM1YmM3YTdkMjAwMWJmZjUyNjc5ZjE0MGE1Njk0ZDM3MGI0YmEyMzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMTAgMTg6MjM6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2ttYXAuYyBiL25ldC94ZHAveHNrbWFwLmNcXG5pbmRleCAzYmZmMzQ2MzA4ZDBmLi5iZjAwZDY0NjNjMTkxIDEwMDY0NFxcbi0tLSBhL25ldC94ZHAveHNrbWFwLmNcXG4rKysgYi9uZXQveGRwL3hza21hcC5jXFxuQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgaW50IHhza19tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbiBcXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcXG4gXFxuIFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfVywgcmV0LCBpbmRleCwgMCk7XFxuLVxcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkdFLCByZXQsIG1hcC1cXHUwMDNlbWF4X2VudHJpZXMsIDUpO1xcbitcXHQqaW5zbisrID0gQlBGX0pNUDMyX0lNTShCUEZfSkdFLCByZXQsIG1hcC1cXHUwMDNlbWF4X2VudHJpZXMsIDUpO1xcbiBcXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfTFNILCByZXQsIGlsb2cyKHNpemVvZihzdHJ1Y3QgeHNrX3NvY2sgKikpKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgbXAsIG9mZnNldG9mKHN0cnVjdCB4c2tfbWFwLCB4c2tfbWFwKSk7XFxuIFxcdCppbnNuKysgPSBCUEZfQUxVNjRfUkVHKEJQRl9BREQsIHJldCwgbXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyMzowMy45NzI0MjAxMjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU2NTU3NDEyMjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza19tYXBfZ2VuX2xvb2t1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHhza19tYXBfZ2VuX2xvb2t1cCgpIGluIG5ldC94ZHAveHNrbWFwLmMgYnkgY2hhbmdpbmcgdGhlIGVtaXR0ZWQgbG9va3VwIGluc3RydWN0aW9uIGZyb20gQlBGX0pNUF9JTU0gdG8gQlBGX0pNUDMyX0lNTSB3aGVuIHZlcmlmeWluZyBhbmQgaW5saW5pbmcgWFNLTUFQIGxvb2t1cHMuIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgQlBGL1hEUCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM1YmM3YTdkMjAwMWJmZjUyNjc5ZjE0MGE1Njk0ZDM3MGI0YmEyMzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxODoyMzowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrbWFwLmMgYi9uZXQveGRwL3hza21hcC5jXG5pbmRleCAzYmZmMzQ2MzA4ZDBmLi5iZjAwZDY0NjNjMTkxIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2ttYXAuY1xuKysrIGIvbmV0L3hkcC94c2ttYXAuY1xuQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgaW50IHhza19tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4gXG4gXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHJldCwgaW5kZXgsIDApO1xuLVx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KR0UsIHJldCwgbWFwLVx1MDAzZW1heF9lbnRyaWVzLCA1KTtcbitcdCppbnNuKysgPSBCUEZfSk1QMzJfSU1NKEJQRl9KR0UsIHJldCwgbWFwLVx1MDAzZW1heF9lbnRyaWVzLCA1KTtcbiBcdCppbnNuKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9MU0gsIHJldCwgaWxvZzIoc2l6ZW9mKHN0cnVjdCB4c2tfc29jayAqKSkpO1xuIFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgbXAsIG9mZnNldG9mKHN0cnVjdCB4c2tfbWFwLCB4c2tfbWFwKSk7XG4gXHQqaW5zbisrID0gQlBGX0FMVTY0X1JFRyhCUEZfQURELCByZXQsIG1wKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjIzOjAzLjk3MjQyMTI2NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0NDI4NjY2NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMsIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlIGluIGBuZXQveGRwL3hza21hcC5jYCwganVzdGlmaWVzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZSB1c2VyIHByb3ZpZGVkIGEgZ2l0IGRpZmYsIGFuZCBpdCdzIGEgcmVsYXRpdmVseSBmb2N1c2VkIGNoYW5nZS4gU3BlY2lmaWNhbGx5OiBgQlBGX0pNUF9JTU1gIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYEJQRl9KTVAzMl9JTU1gIGluIHRoZSBgeHNrX21hcF9nZW5fbG9va3VwYCBmdW5jdGlvbi4gVGhhdCdzIGEganVtcCBpbnN0cnVjdGlvbiwgYW5kIGEgMzItYml0IGltbWVkaWF0ZSB2YWx1ZSBjaGFuZ2UsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWUgcG90ZW50aWFsIGFyZWFzIGZvciBjb25jZXJuLlxuXG5TaW5jZSBJIGFtIGRvaW5nIGEgcmlzayBhbmFseXNpcyBvbiB0aGUgcGF0Y2ggSSB3aWxsIHVzZSBzb21lIHRvb2xzLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGRlZXBlciBpbnNwZWN0aW9uLiBXZSBuZWVkIHRvIGRldGVybWluZSBgV29ydGhGdXp6aW5nYCwgYEZvY3VzU3ltYm9sc2AsIGBFbmFibGVDb25maWdzYCwgYW5kIHRoZSBgUmVhc29uaW5nYCBmb3IgdGhpcyBkZWNpc2lvbiwgYmVmb3JlIGNhbGxpbmcgYHNldC1yZXN1bHRzYC5cblxuVG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIGltcGFjdCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEknbGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgYG5ldC94ZHAveHNrbWFwLmNgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGB4c2tfbWFwX2dlbl9sb29rdXBgIGZ1bmN0aW9uIGRvZXMsIGFuZCBob3cgdGhhdCBCUEYgaW5zdHJ1Y3Rpb24gY2hhbmdlIGFsdGVycyBpdHMgYmVoYXZpb3IuIEkgc2hvdWxkIGFsc28gY2hlY2sgYEtjb25maWdgIHRvIHNlZSBpZiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSBpcyBnYXRlZCBiZWhpbmQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhhdCB3aWxsIGhlbHAgbWUgdG8gdW5kZXJzdGFuZCBob3cgd2lkZWx5IHVzZWQgdGhpcyBjb2RlIGlzLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCB0cmlhZ2UgcHJvY2VkdXJlIGZvciBhIG5ldyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAxOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjIzOjE4LjQwMTA5MjU1OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hza21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gMTAxOlxcdFxcdGJwZl9tYXBfYXJlYV9mcmVlKG0pO1xcbiAxMDI6XFx0fVxcbiAxMDM6XFx0XFxuIDEwNDpcXHRzdGF0aWMgaW50IHhza19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXFxuIDEwNTpcXHR7XFxuIDEwNjpcXHRcXHRzdHJ1Y3QgeHNrX21hcCAqbSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCB4c2tfbWFwLCBtYXApO1xcbiAxMDc6XFx0XFx0dTMyIGluZGV4ID0ga2V5ID8gKih1MzIgKilrZXkgOiBVMzJfTUFYO1xcbiAxMDg6XFx0XFx0dTMyICpuZXh0ID0gbmV4dF9rZXk7XFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdGlmIChpbmRleCBcXHUwMDNlPSBtLVxcdTAwM2VtYXAubWF4X2VudHJpZXMpIHtcXG4gMTExOlxcdFxcdFxcdCpuZXh0ID0gMDtcXG4gMTEyOlxcdFxcdFxcdHJldHVybiAwO1xcbiAxMTM6XFx0XFx0fVxcbiAxMTQ6XFx0XFxuIDExNTpcXHRcXHRpZiAoaW5kZXggPT0gbS1cXHUwMDNlbWFwLm1heF9lbnRyaWVzIC0gMSlcXG4gMTE2OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAxMTc6XFx0XFx0Km5leHQgPSBpbmRleCArIDE7XFxuIDExODpcXHRcXHRyZXR1cm4gMDtcXG4gMTE5OlxcdH1cXG4gMTIwOlxcdFxcbiAxMjE6XFx0c3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4gMTIyOlxcdHtcXG4gMTIzOlxcdFxcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzAsIG1wID0gQlBGX1JFR18xLCBpbmRleCA9IEJQRl9SRUdfMjtcXG4gMTI0OlxcdFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xcbiAxMjU6XFx0XFxuIDEyNjpcXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHJldCwgaW5kZXgsIDApO1xcbiAxMjc6XFx0XFx0Kmluc24rKyA9IEJQRl9KTVAzMl9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtXFx1MDAzZW1heF9lbnRyaWVzLCA1KTtcXG4gMTI4OlxcdFxcdCppbnNuKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9MU0gsIHJldCwgaWxvZzIoc2l6ZW9mKHN0cnVjdCB4c2tfc29jayAqKSkpO1xcbiAxMjk6XFx0XFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgbXAsIG9mZnNldG9mKHN0cnVjdCB4c2tfbWFwLCB4c2tfbWFwKSk7XFxuIDEzMDpcXHRcXHQqaW5zbisrID0gQlBGX0FMVTY0X1JFRyhCUEZfQURELCByZXQsIG1wKTtcXG4gMTMxOlxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfU0laRU9GKHN0cnVjdCB4c2tfc29jayAqKSwgcmV0LCByZXQsIDApO1xcbiAxMzI6XFx0XFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XFxuIDEzMzpcXHRcXHQqaW5zbisrID0gQlBGX01PVjY0X0lNTShyZXQsIDApO1xcbiAxMzQ6XFx0XFx0cmV0dXJuIGluc24gLSBpbnNuX2J1ZjtcXG4gMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0LyogRWxlbWVudHMgYXJlIGtlcHQgYWxpdmUgYnkgUkNVOyBlaXRoZXIgYnkgcmN1X3JlYWRfbG9jaygpIChmcm9tIHN5c2NhbGwpIG9yXFxuIDEzODpcXHQgKiBieSBsb2NhbF9iaF9kaXNhYmxlKCkgKGZyb20gWERQIGNhbGxzIGluc2lkZSBOQVBJKS4gVGhlXFxuIDEzOTpcXHQgKiByY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSBiZWxvdyBtYWtlcyBsb2NrZGVwIGFjY2VwdCBib3RoLlxcbiAxNDA6XFx0ICovXFxuIDE0MTpcXHRzdGF0aWMgdm9pZCAqX194c2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXFxuIDE0MjpcXHR7XFxuIDE0MzpcXHRcXHRzdHJ1Y3QgeHNrX21hcCAqbSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCB4c2tfbWFwLCBtYXApO1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHRpZiAoa2V5IFxcdTAwM2U9IG1hcC1cXHUwMDNlbWF4X2VudHJpZXMpXFxuIDE0NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTQ3OlxcdFxcbiAxNDg6XFx0XFx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhtLVxcdTAwM2V4c2tfbWFwW2tleV0sIHJjdV9yZWFkX2xvY2tfYmhfaGVsZCgpKTtcXG4gMTQ5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjM6MTguNDAxMjI3MTA4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg1Njc1NzM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBYU0sgTWFwIEdlbmVyYXRvcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBhbmQgZGVwZW5kZW5jaWVzIHN1cnJvdW5kaW5nIGB4c2tfbWFwX2dlbl9sb29rdXBgLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIHRvIHRyYWNrIGRvd24gaXRzIGludm9jYXRpb25zLCBzbyBJJ2xsIHN0YXJ0IGJ5IHRyYWNpbmcgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyAqdXNlZCogaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIHB1cnBvc2UuIFRoZW4sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCB3aGF0IEtjb25maWcgb3B0aW9ucyBlbmFibGUgdGhlIHJlbGV2YW50IGNvZGUgaW4gYG5ldC94ZHAveHNrbWFwLmNgPyBcblxuSSdsbCBjaGVjayB0aGUgYXNzb2NpYXRlZCBidWlsZCBmaWxlcywgc3RhcnRpbmcgd2l0aCB0aGUgYG5ldC94ZHAvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGFueSByZWxldmFudCBjb21waWxhdGlvbiBmbGFncy4gQWZ0ZXIgdGhhdCwgSSdsbCBkaXZlIGludG8gYG5ldC94ZHAvS2NvbmZpZ2AgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhlc2UgdmFyaW91cyBjb21wb25lbnRzIGFyZSBjb250cm9sbGVkIGFuZCBjb25maWd1cmVkLiBUaGF0IHNob3VsZCBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIGFuZCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjIzOjIxLjI1Nzk4ODY4NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcxNjc5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC94ZHAvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpICs9IHhzay5vIHhkcF91bWVtLm8geHNrX3F1ZXVlLm8geHNrbWFwLm9cXG5uZXQveGRwL01ha2VmaWxlLTMtb2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSArPSB4c2tfYnVmZl9wb29sLm9cXG4tLVxcbm5ldC94ZHAveHNrLmM9NDk3PWludCBfX3hza19tYXBfcmVkaXJlY3Qoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuLS1cXG5uZXQveGRwL3hzay5jLTUwNS1cXHRpZiAoIXhzLVxcdTAwM2VmbHVzaF9ub2RlLnByZXYpIHtcXG5uZXQveGRwL3hzay5jOjUwNjpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpmbHVzaF9saXN0ID0gYnBmX25ldF9jdHhfZ2V0X3hza21hcF9mbHVzaF9saXN0KCk7XFxubmV0L3hkcC94c2suYy01MDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjIzOjIxLjM2NTE2MjM5MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDc0MjUxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlhEUCBDb25maWd1cmF0aW9uOiBBIFF1aWNrIEdsYW5jZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJSaWdodCwgYmVmb3JlIHdlIGRpdmUgaW50byBhbnl0aGluZyB0b28gZGVlcCwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG5ldC94ZHAvS2NvbmZpZ2AuXCIgSXQncyB0aGUgc3RhbmRhcmQgZmlyc3Qgc3RvcCwgeW91IGtub3c/IEdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLCBzZWUgd2hhdCBvcHRpb25zIGFyZSBleHBvc2VkLCB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQgaG93IHRoZSB2YXJpb3VzIFhEUC1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtLiBObyBuZWVkIHRvIHJlaW52ZW50IHRoZSB3aGVlbCwgSSBjYW4gcHJvYmFibHkgZ2V0IGEgZ2VuZXJhbCBzZW5zZSBvZiB0aGUgYnVpbGQgc3RydWN0dXJlIGp1c3QgYnkgdW5kZXJzdGFuZGluZyB0aGUgYXZhaWxhYmxlIGNvbmZpZyBmbGFncy4gSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG8gdW5kZXJzdGFuZGluZyB0aGUgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTI3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjM6MjMuNTEyNTkwNDk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hkcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgWERQX1NPQ0tFVFNcXG4gICAzOlxcdFxcdGJvb2wgXFxcIlhEUCBzb2NrZXRzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbiAgIDU6XFx0XFx0ZGVmYXVsdCBuXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFhEUCBzb2NrZXRzIGFsbG93cyBhIGNoYW5uZWwgYmV0d2VlbiBYRFAgcHJvZ3JhbXMgYW5kXFxuICAgODpcXHRcXHQgIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBYRFBfU09DS0VUU19ESUFHXFxuICAxMTpcXHRcXHR0cmlzdGF0ZSBcXFwiWERQIHNvY2tldHM6IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBYRFBfU09DS0VUU1xcbiAgMTM6XFx0XFx0ZGVmYXVsdCBuXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFN1cHBvcnQgZm9yIFBGX1hEUCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxuICAxNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjIzOjIzLjUxMjY3NjQxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzUxNTUzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgeHNrX21hcF9nZW5fbG9va3VwYCBSZWZlcmVuY2VzKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHhza19tYXBfZ2VuX2xvb2t1cGAgZnVuY3Rpb24gaXMgdXNlZC4gQSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgcmVhbGx5IHRoZSAqZXNzZW50aWFsKiBvbmUgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGBuZXQveGRwL3hza21hcC5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgZGlyZWN0IGRlZmluaXRpb24gYW5kIG1vc3Qgb2YgaXRzIGxvY2FsIGNhbGxzIHRoZXJlLCBjbGVhcmx5IHNob3dpbmcgaG93IGl0IGZpdHMgd2l0aGluIHRoZSBYRFAgc29ja2V0IG1hcCdzIGZ1bmN0aW9uYWxpdHkuIEl0J3MgdGhlIG5hdHVyYWwgcGxhY2UuXG5cbkJ1dCwgSSBjYW4ndCBzdG9wIHRoZXJlLiBJIGFsc28gaGF2ZSB0byBjb25zaWRlciB3aGVyZSBlbHNlLCBvdXRzaWRlIG9mIHRoZSBpbW1lZGlhdGUgZGVmaW5pdGlvbiwgdGhpcyBmdW5jdGlvbiBtaWdodCBiZSBpbnZva2VkLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGxvb2sgYmV5b25kIHRoZSBsb2NhbCBmaWxlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGV4dGVybmFsIGNhbGxzLiBJ4oCZbGwgbmVlZCB0byB0cmFjZSBkb3duIHRoZSBjYWxsIGdyYXBoLiBBcmUgdGhlcmUgb3RoZXIgbW9kdWxlcyB0aGF0IGxldmVyYWdlIHRoaXMgbG9va3VwLCBwZXJoYXBzIHRocm91Z2ggYSBnZW5lcmljIFhEUCBtYXAgaW50ZXJmYWNlIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljIHJlbGF0ZWQgdG8gQUZfWERQPyBJcyBpdCBhIGNydWNpYWwgcGFydCBvZiBhIGxhcmdlciBYRFAgZGF0YSBwYXRoIGludm9sdmluZyBvdGhlciBtYXBzIG9yIHByb2dyYW1zPyBXaGVyZSdzIGl0IHVzZWQ/IFRoYXQncyB3aGF0IEkgd2FudCB0byBmaW5kIG91dC4gSSBuZWVkIHRvIGdldCBhIHBpY3R1cmUgb2YgKmFsbCogdGhlIHBsYWNlcyB0aGlzIGZ1bmN0aW9uIGlzIGVtcGxveWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgY29tcGxldGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUzMSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjM6MjUuOTg3ODMzNzA5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE3OTA0MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhza19tYXBfZ2VuX2xvb2t1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hza21hcC5jPTEwND1zdGF0aWMgaW50IHhza19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXFxuLS1cXG5uZXQveGRwL3hza21hcC5jLTEyMC1cXG5uZXQveGRwL3hza21hcC5jOjEyMTpzdGF0aWMgaW50IHhza19tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbm5ldC94ZHAveHNrbWFwLmMtMTIyLXtcXG4tLVxcbm5ldC94ZHAveHNrbWFwLmM9MjcxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyB4c2tfbWFwX29wcyA9IHtcXG4tLVxcbm5ldC94ZHAveHNrbWFwLmMtMjc2LVxcdC5tYXBfbG9va3VwX2VsZW0gPSB4c2tfbWFwX2xvb2t1cF9lbGVtLFxcbm5ldC94ZHAveHNrbWFwLmM6Mjc3OlxcdC5tYXBfZ2VuX2xvb2t1cCA9IHhza19tYXBfZ2VuX2xvb2t1cCxcXG5uZXQveGRwL3hza21hcC5jLTI3OC1cXHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0geHNrX21hcF9sb29rdXBfZWxlbV9zeXNfb25seSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjM6MjguNDA1NzQ1MjAxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MzgyNzMyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYG1hcF9nZW5fbG9va3VwYCBDYWxsIFNpdGVzKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiBgbWFwX2dlbl9sb29rdXBgIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBpdHMgY2FsbHMgZnJvbSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIEkgd2FudCB0byB0cmFjZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gY2FsbCBpbiBhbGwgaXRzIGNhbGwgc2l0ZXMuXG5cbk1vcmUgc3BlY2lmaWNhbGx5LCBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHBsYWNlcyBsaWtlIHRoZSBCUEYgdmVyaWZpZXIgb3IgYW55IHNjZW5hcmlvcyB3aGVyZSB0aGUgQlBGIGNvbXBpbGVyIG1pZ2h0IGlubGluZSBhIEJQRiBtYXAgbG9va3VwIHVzaW5nIHRoYXQgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBpbmxpbmluZyBiZWhhdmlvciBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBhbmFseXNpcyBhbmQgb3B0aW1pemF0aW9uLCBhbmQgZm9yIHVuY292ZXJpbmcgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIFRoZSBpbXBsaWNhdGlvbnMgd291bGQgYmUgcXVpdGUgc3Vic3RhbnRpYWwgaWYgdGhpcyBpcyBoYXBwZW5pbmcuIFRoZSBwcmVzZW5jZSBvZiBpdCBpcyBzb21ldGhpbmcgSSdsbCBuZWVkIHRvIGtub3cuXG5cbkknbGwgc3RhcnQgdHJhY2luZyB0aGUgY2FsbCBjaGFpbiBmcm9tIHRoZXJlLCBtYXBwaW5nIG91dCBhbnkgaW50ZXJkZXBlbmRlbmNpZXMgb3Igc3VidGxlIG51YW5jZXMgaW4gdGhlIGJlaGF2aW9yIHJlbGF0ZWQgdG8gdGhlIGZ1bmN0aW9uJ3MgdXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE1MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjIzOjMxLjA0NDAzNTg2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM5Njk4MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hcF9nZW5fbG9va3VwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9ODc9c3RydWN0IGJwZl9tYXBfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTI2LVxcdHZvaWQgKCptYXBfZmRfcHV0X3B0cikoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqcHRyLCBib29sIG5lZWRfZGVmZXIpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MTI3OlxcdGludCAoKm1hcF9nZW5fbG9va3VwKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTEyOC1cXHR1MzIgKCptYXBfZmRfc3lzX2xvb2t1cF9lbGVtKSh2b2lkICpwdHIpO1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTIwMT1zdGF0aWMgaW50IGFycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW1tLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTIxNy0vKiBlbWl0IEJQRiBpbnN0cnVjdGlvbnMgZXF1aXZhbGVudCB0byBDIGNvZGUgb2YgYXJyYXlfbWFwX2xvb2t1cF9lbGVtKCkgKi9cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MjE4OnN0YXRpYyBpbnQgYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjE5LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0yNzc9c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBpbW0sIHUzMiAqb2ZmKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI5My0vKiBlbWl0IEJQRiBpbnN0cnVjdGlvbnMgZXF1aXZhbGVudCB0byBDIGNvZGUgb2YgcGVyY3B1X2FycmF5X21hcF9sb29rdXBfZWxlbSgpICovXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI5NDpzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yOTUte1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTg1OT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NjgtXFx0Lm1hcF9kZWxldGVfZWxlbSA9IGFycmF5X21hcF9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODY5OlxcdC5tYXBfZ2VuX2xvb2t1cCA9IGFycmF5X21hcF9nZW5fbG9va3VwLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzAtXFx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcixcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODY9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg5Mi1cXHQubWFwX2xvb2t1cF9lbGVtID0gcGVyY3B1X2FycmF5X21hcF9sb29rdXBfZWxlbSxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODkzOlxcdC5tYXBfZ2VuX2xvb2t1cCA9IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODk0LVxcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE0NjQ9c3RhdGljIHZvaWQgKmFycmF5X29mX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTQ3My1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTQ3NDpzdGF0aWMgaW50IGFycmF5X29mX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0NzUtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNTA1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9vZl9tYXBzX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxNC1cXHQubWFwX2ZkX3N5c19sb29rdXBfZWxlbSA9IGJwZl9tYXBfZmRfc3lzX2xvb2t1cF9lbGVtLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxNTE1OlxcdC5tYXBfZ2VuX2xvb2t1cCA9IGFycmF5X29mX21hcF9nZW5fbG9va3VwLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE2LVxcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xNTEzPWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjA0Ny1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwNDg6XFx0XFx0LyogQlBGX0VNSVRfQ0FMTCgpIGFzc3VtcHRpb25zIGluIHNvbWUgb2YgdGhlIG1hcF9nZW5fbG9va3VwXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDQ5LVxcdFxcdCAqIGFuZCBvdGhlciBpbmxpbmluZyBoYW5kbGVycyBhcmUgY3VycmVudGx5IGxpbWl0ZWQgdG8gNjQgYml0XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNjgtXFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSA9PSBCUEZfRlVOQ19tYXBfbG9va3VwX2VsZW0gXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwNjk6XFx0XFx0XFx0ICAgIG9wcy1cXHUwMDNlbWFwX2dlbl9sb29rdXApIHtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwNzA6XFx0XFx0XFx0XFx0Y250ID0gb3BzLVxcdTAwM2VtYXBfZ2VuX2xvb2t1cChtYXBfcHRyLCBpbnNuX2J1Zik7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDcxLVxcdFxcdFxcdFxcdGlmIChjbnQgPT0gLUVPUE5PVFNVUFApXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz03MTU9c3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTczNS0gKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFkanVzdGVkIGJ5IEJQRiBpbnN0cnVjdGlvbnNcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo3MzY6ICogaW4gaHRhYl9tYXBfZ2VuX2xvb2t1cCgpLlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTczNy0gKi9cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTc1OD1zdGF0aWMgdm9pZCAqaHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNzc4LSAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjc3OTpzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy03ODAte1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9ODEzPXN0YXRpYyB2b2lkICpodGFiX2xydV9tYXBfbG9va3VwX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTgxNy1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo4MTg6c3RhdGljIGludCBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTgxOS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjM2MT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM3MS1cXHQubWFwX2RlbGV0ZV9lbGVtID0gaHRhYl9tYXBfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM3MjpcXHQubWFwX2dlbl9sb29rdXAgPSBodGFiX21hcF9nZW5fbG9va3VwLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzMtXFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gaHRhYl9tYXBfc2VxX3Nob3dfZWxlbSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIzODM9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbHJ1X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzk0LVxcdC5tYXBfZGVsZXRlX2VsZW0gPSBodGFiX2xydV9tYXBfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM5NTpcXHQubWFwX2dlbl9sb29rdXAgPSBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzk2LVxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNDA3PXN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjQxNy0vKiBpbmxpbmUgYnBmX21hcF9sb29rdXBfZWxlbSgpIGNhbGwgZm9yIHBlci1DUFUgaGFzaG1hcCAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI0MTg6c3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MTkte1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU2ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9wZXJjcHVfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1NzAtXFx0Lm1hcF9sb29rdXBfZWxlbSA9IGh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTcxOlxcdC5tYXBfZ2VuX2xvb2t1cCA9IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1NzItXFx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtID0gaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNjk4PXN0YXRpYyB2b2lkICpodGFiX29mX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzA3LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3MDg6c3RhdGljIGludCBodGFiX29mX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjcwOS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzMyPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX29mX21hcHNfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NDEtXFx0Lm1hcF9mZF9zeXNfbG9va3VwX2VsZW0gPSBicGZfbWFwX2ZkX3N5c19sb29rdXBfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzQyOlxcdC5tYXBfZ2VuX2xvb2t1cCA9IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc0My1cXHQubWFwX2NoZWNrX2J0ZiA9IG1hcF9jaGVja19ub19idGYsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMDI1PXN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzA4My1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDg0OnN0YXRpYyBpbnQgcmh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDg1LXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MDg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTE5LVxcdC5tYXBfZGVsZXRlX2VsZW0gPSByaHRhYl9tYXBfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUyMDpcXHQubWFwX2dlbl9sb29rdXAgPSByaHRhYl9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTIxLVxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IHJodGFiX21hcF9zZXFfc2hvd19lbGVtLFxcbi0tXFxubmV0L3hkcC94c2ttYXAuYz0xMDQ9c3RhdGljIGludCB4c2tfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxcbi0tXFxubmV0L3hkcC94c2ttYXAuYy0xMjAtXFxubmV0L3hkcC94c2ttYXAuYzoxMjE6c3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG5uZXQveGRwL3hza21hcC5jLTEyMi17XFxuLS1cXG5uZXQveGRwL3hza21hcC5jPTI3MT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgeHNrX21hcF9vcHMgPSB7XFxuLS1cXG5uZXQveGRwL3hza21hcC5jLTI3Ni1cXHQubWFwX2xvb2t1cF9lbGVtID0geHNrX21hcF9sb29rdXBfZWxlbSxcXG5uZXQveGRwL3hza21hcC5jOjI3NzpcXHQubWFwX2dlbl9sb29rdXAgPSB4c2tfbWFwX2dlbl9sb29rdXAsXFxubmV0L3hkcC94c2ttYXAuYy0yNzgtXFx0Lm1hcF9sb29rdXBfZWxlbV9zeXNfb25seSA9IHhza19tYXBfbG9va3VwX2VsZW1fc3lzX29ubHksXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wZXJjcHVfYXJyYXlfaW5uZXJfbWFwLmMtNS0gKiBUZXN0IHRoYXQgcmVwbGFjaW5nIGFuIGlubmVyIHBlcmNwdSBhcnJheSBtYXAgd2l0aCBvbmUgdGhhdCBoYXMgZGlmZmVyZW50XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcGVyY3B1X2FycmF5X2lubmVyX21hcC5jOjY6ICogbWF4X2VudHJpZXMgaXMgcmVqZWN0ZWQuICBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoKSBpbmxpbmVzIHRoZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3BlcmNwdV9hcnJheV9pbm5lcl9tYXAuYy03LSAqIHRlbXBsYXRlJ3MgaW5kZXhfbWFzaywgc28gYWxsb3dpbmcgYSBzbWFsbGVyIHJlcGxhY2VtZW50IHdvdWxkIGNhdXNlIE9PQi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjM6MzMuMzgzNzQwNDU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNDQwMzQxMTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgQlBGX0pNUDMyX0lNTWAgYW5kIGBCUEZfSk1QX0lNTWAgaW4gYHhza19tYXBfZ2VuX2xvb2t1cGAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IHVzZXMgYEJQRl9KTVAzMl9JTU1gIHRvIGNvbXBhcmUgYSAzMi1iaXQgdmFsdWUgbG9hZGVkIGZyb20gYW4gaW5kZXggd2l0aCBgbWFwLVx1MDAzZW1heF9lbnRyaWVzYC4gUHJldmlvdXNseSwgaXQgdXNlZCB0aGUgNjQtYml0IGp1bXAvY29tcGFyZSwgYEJQRl9KTVBfSU1NYC4gIFxuXG5UaGUgbG9hZGluZyBpbnN0cnVjdGlvbiBgQlBGX0xEWF9NRU0oQlBGX1csIC4uLilgIHplcm8tZXh0ZW5kcyB0aGUgMzIgYml0cyBpbnRvIDY0IGJpdHMuICBUaGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhlIEJQRiB2ZXJpZmllciBvciB0aGUgSklUIGNvbXBpbGVyIHRyZWF0IDMyLWJpdCBhbmQgNjQtYml0IGp1bXBzIGRpZmZlcmVudGx5IGluIGEgd2F5IHRoYXQgY3JlYXRlcyBhIHZ1bG5lcmFiaWxpdHk/IFRoaXMgY29kZSBpcyBjcml0aWNhbCBiZWNhdXNlIGl0IHJ1bnMgd2hlbmV2ZXIgYSBCUEYgcHJvZ3JhbSwgdXNpbmcgYFhTS01BUGAgKHdoaWNoIGlzIGBCUEZfTUFQX1RZUEVfWFNLTUFQYCksIGNhbGxzIGBicGZfbWFwX2xvb2t1cF9lbGVtKClgLiBUaGUgdmVyaWZpZXIgaW5saW5lcyB0aGlzIHVzaW5nIGBtYXBfZ2VuX2xvb2t1cGAgZHVyaW5nIGBicGZfZG9fbWlzY19maXh1cHMoKWAuXG5cbk5vdywgaXMgdGhpcyByZWFjaGFibGUgaW4gYSB0eXBpY2FsIFFFTVUgZW52aXJvbm1lbnQ/IEFic29sdXRlbHkuIEJQRiBpcyBhIGNvcmUga2VybmVsIHN1YnN5c3RlbSwgYW5kIGBYU0tNQVBgIHN1cHBvcnQgKHZpYSB0aGUgQlBGIHN5c2NhbGwgYW5kIEFGX1hEUCkgbWVhbnMgdGhpcyBjb2RlIGV4ZWN1dGVzIHdoZW4gbG9hZGluZyBhIEJQRiBwcm9ncmFtIHRoYXQgcGVyZm9ybXMgYSBsb29rdXAgaW4gYW4gYFhTS01BUGAsIGFuZCB0aGVuIHdoZW4gdGhhdCBwcm9ncmFtIGV4ZWN1dGVzLiBUaGF0IG1ha2VzIHRoaXMgMTAwJSByZWFjaGFibGUgd2l0aCBzeXprYWxsZXIgZnV6emluZy5cblxuTGV0J3MgY29uZmlybSB0aGUgY3JpdGVyaWEuIEl0J3M6XG4qICAgUmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZTogQ29yZSBTdWJzeXN0ZW0gKEJQRiAvIG5ldHdvcmtpbmcpLlxuKiAgIFdvcnRoRnV6emluZyA9IHRydWUuXG5cbk5leHQgc3RlcHM6IExldCdzIGNoZWNrIGtlcm5lbCBjb25maWdzLiBTcGVjaWZpY2FsbHksIHdlJ2xsIG5lZWQgYENPTkZJR19YRFBfU09DS0VUU2AgKHdoaWNoIGRlcGVuZHMgb24gYENPTkZJR19CUEZfU1lTQ0FMTGApLiBJIHdpbGwgYWxzbyBncmVwIGZvciBcIlhTS01BUFwiIG9yIFwiQlBGX01BUF9UWVBFX1hTS01BUFwiIHRvIGVuc3VyZSBubyBvdGhlciBjb25maWdzIGFyZSByZXF1aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU3NywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyMzo0My44MjQwODQ3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxNTM2MTQ2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfTUFQX1RZUEVfWFNLTUFQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTQtPT09PT09PT09PT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0OjU6QlBGX01BUF9UWVBFX1hTS01BUFxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTYtPT09PT09PT09PT09PT09PT09PVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtOC0uLiBub3RlOjpcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo5OiAgIC0gYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgd2FzIGludHJvZHVjZWQgaW4ga2VybmVsIHZlcnNpb24gNC4xOFxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTEwLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0OjExOlRoZSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYCBpcyB1c2VkIGFzIGEgYmFja2VuZCBtYXAgZm9yIFhEUCBCUEYgaGVscGVyXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTItY2FsbCBgYGJwZl9yZWRpcmVjdF9tYXAoKWBgIGFuZCBgYFhEUF9SRURJUkVDVGBgIGFjdGlvbiwgbGlrZSAnZGV2bWFwJyBhbmQgJ2NwdW1hcCcuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdD02Nz1SZWRpcmVjdCB0aGUgcGFja2V0IHRvIHRoZSBlbmRwb2ludCByZWZlcmVuY2VkIGJ5IGBgbWFwYGAgYXQgaW5kZXggYGBrZXlgYC5cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo2ODpGb3IgYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgdGhpcyBtYXAgY29udGFpbnMgcmVmZXJlbmNlcyB0byBYU0sgRkRzXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtNjktZm9yIHNvY2tldHMgYXR0YWNoZWQgdG8gYSBuZXRkZXYncyBxdWV1ZXMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdD0xMzU9S2VybmVsXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xMzctXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q6MTM4OlRoZSBmb2xsb3dpbmcgY29kZSBzbmlwcGV0IHNob3dzIGhvdyB0byBkZWNsYXJlIGEgYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgY2FsbGVkXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTM5LWBgeHNrc19tYXBgYCBhbmQgaG93IHRvIHJlZGlyZWN0IHBhY2tldHMgdG8gYW4gWFNLLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTQzLVxcdHN0cnVjdCB7XFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q6MTQ0OlxcdFxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xNDUtXFx0XFx0X190eXBlKGtleSwgX191MzIpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvcmVkaXJlY3QucnN0PTEyPVhEUF9SRURJUkVDVCB3b3JrcyB3aXRoIHRoZSBmb2xsb3dpbmcgbWFwIHR5cGVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvcmVkaXJlY3QucnN0LTE2LS0gYGBCUEZfTUFQX1RZUEVfQ1BVTUFQYGBcXG5Eb2N1bWVudGF0aW9uL2JwZi9yZWRpcmVjdC5yc3Q6MTc6LSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYFxcbkRvY3VtZW50YXRpb24vYnBmL3JlZGlyZWN0LnJzdC0xOC1cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTcxPUhvdyBpcyB0aGVuIHBhY2tldHMgZGlzdHJpYnV0ZWQgZnJvbSBhbiBYRFAgcHJvZ3JhbSB0byB0aGUgWFNLcz8gVGhlcmVcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDo3MjppcyBhIEJQRiBtYXAgY2FsbGVkIFhTS01BUCAob3IgQlBGX01BUF9UWVBFX1hTS01BUCBpbiBmdWxsKS4gVGhlXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtNzMtdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBjYW4gcGxhY2UgYW4gWFNLIGF0IGFuIGFyYml0cmFyeSBwbGFjZSBpbiB0aGlzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdD0yMjA9dXNlci4gSXQgd2lsbCBtYWtlIHlvdXIgcHJvZ3JhbSBhIGxvdCBzaW1wbGVyLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTIyMS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDoyMjI6WFNLTUFQIC8gQlBGX01BUF9UWVBFX1hTS01BUFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTIyMy09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjI0LVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0OjIyNTpPbiBYRFAgc2lkZSB0aGVyZSBpcyBhIEJQRiBtYXAgdHlwZSBCUEZfTUFQX1RZUEVfWFNLTUFQIChYU0tNQVApIHRoYXRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0yMjYtaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGJwZl9yZWRpcmVjdF9tYXAoKSB0byBwYXNzIHRoZSBpbmdyZXNzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdD0yODI9cm91bmQtcm9iaW4gZXhhbXBsZSBvZiBkaXN0cmlidXRpbmcgcGFja2V0cyBpcyBzaG93biBiZWxvdzpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTI5MS0gICBzdHJ1Y3Qge1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0OjI5MjogICAgICAgX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTI5My0gICAgICAgX191aW50KG1heF9lbnRyaWVzLCBNQVhfU09DS1MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMTc9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9DUFVNQVAsIGNwdV9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTE4LSNpZiBkZWZpbmVkKENPTkZJR19YRFBfU09DS0VUUylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjExOTpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1hTS01BUCwgeHNrX21hcF9vcHMpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMjAtI2VuZGlmXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTAwMD1lbnVtIGJwZl9tYXBfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTAxNy1cXHRCUEZfTUFQX1RZUEVfQ1BVTUFQLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDE4OlxcdEJQRl9NQVBfVFlQRV9YU0tNQVAsXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwMTktXFx0QlBGX01BUF9UWVBFX1NPQ0tIQVNILFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTM4Mj1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTUyNC1cXHRjYXNlIEJQRl9NQVBfVFlQRV9ERVZNQVBfSEFTSDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxNTI1OlxcdGNhc2UgQlBGX01BUF9UWVBFX1hTS01BUDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNTI2LVxcdFxcdGlmICghYnBmX3Rva2VuX2NhcGFibGUodG9rZW4sIENBUF9ORVRfQURNSU4pKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MjA9c3RhdGljIHZvaWQgcmVmaW5lX21hcF9sb29rdXBfdmFsdWUoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTMzLVxcdFxcdFxcdHJlZy1cXHUwMDNlbWFwX3VpZCA9IHJlZy1cXHUwMDNlaWQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzQ6XFx0fSBlbHNlIGlmIChtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNS1cXHRcXHRyZWctXFx1MDAzZXR5cGUgPSBQVFJfVE9fWERQX1NPQ0sgfCBtYXliZV9udWxsO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTg5OTM9c3RhdGljIGludCBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA1Mi1cXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTA1MzpcXHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNTQtXFx0XFx0aWYgKGZ1bmNfaWQgIT0gQlBGX0ZVTkNfcmVkaXJlY3RfbWFwIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTE3MC1cXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQ1BVTUFQIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjkxNzE6XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1hTS01BUClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTE3Mi1cXHRcXHRcXHRnb3RvIGVycm9yO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDY4Mj1pbnQgeGRwX2RvX3JlZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDY4Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzo0Njg4OlxcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfWFNLTUFQKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2ODktXFx0XFx0cmV0dXJuIF9feGRwX2RvX3JlZGlyZWN0X3hzayhyaSwgZGV2LCB4ZHAsIHhkcF9wcm9nKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQ2OTY9aW50IHhkcF9kb19yZWRpcmVjdF9mcmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ3MDItXFxubmV0L2NvcmUvZmlsdGVyLmM6NDcwMzpcXHRpZiAobWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1hTS01BUClcXG5uZXQvY29yZS9maWx0ZXIuYy00NzA0LVxcdFxcdHJldHVybiBfX3hkcF9kb19yZWRpcmVjdF94c2socmksIGRldiwgeGRwLCB4ZHBfcHJvZyk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NzEwPXN0YXRpYyBpbnQgeGRwX2RvX2dlbmVyaWNfcmVkaXJlY3RfbWFwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00NzQ0LVxcdFxcdGJyZWFrO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjQ3NDU6XFx0Y2FzZSBCUEZfTUFQX1RZUEVfWFNLTUFQOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ3NDYtXFx0XFx0ZXJyID0geHNrX2dlbmVyaWNfcmN2KGZ3ZCwgeGRwKTtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDE3LVxcdEJQRl9NQVBfVFlQRV9DUFVNQVAsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwMTg6XFx0QlBGX01BUF9UWVBFX1hTS01BUCxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTAxOS1cXHRCUEZfTUFQX1RZUEVfU09DS0hBU0gsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTE2Mz1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1hcF90eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTgxLVxcdFtCUEZfTUFQX1RZUEVfQ1BVTUFQXVxcdFxcdFxcdD0gXFxcImNwdW1hcFxcXCIsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoxODI6XFx0W0JQRl9NQVBfVFlQRV9YU0tNQVBdXFx0XFx0XFx0PSBcXFwieHNrbWFwXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE4My1cXHRbQlBGX01BUF9UWVBFX1NPQ0tIQVNIXVxcdFxcdFxcdD0gXFxcInNvY2toYXNoXFxcIixcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9NTQwMz1zdGF0aWMgaW50IGJwZl9vYmplY3RfX2NyZWF0ZV9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcCwgYm9vbCBpc19pbm5lcilcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNTQ2Ny1cXHRjYXNlIEJQRl9NQVBfVFlQRV9DUFVNQVA6XFxudG9vbHMvbGliL2JwZi9saWJicGYuYzo1NDY4OlxcdGNhc2UgQlBGX01BUF9UWVBFX1hTS01BUDpcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTU0NjktXFx0Y2FzZSBCUEZfTUFQX1RZUEVfU09DS01BUDpcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jPTI5Mj1zdGF0aWMgaW50IHByb2JlX21hcF9jcmVhdGUoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0zNzUtXFx0Y2FzZSBCUEZfTUFQX1RZUEVfQ1BVTUFQOlxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jOjM3NjpcXHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMzc3LVxcdGNhc2UgQlBGX01BUF9UWVBFX1NPQ0tIQVNIOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jPTQ3NT1zdHJ1Y3Qge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYzo0NzY6XFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYy00NzctXFx0X191aW50KG1heF9lbnRyaWVzLCBNQVhfRU5UUklFUyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmM9Njg2PWludCBjZ19za2Iodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jLTcwMy1cXHRWRVJJRllfVFlQRShCUEZfTUFQX1RZUEVfQ1BVTUFQLCBjaGVja19jcHVtYXApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYzo3MDQ6XFx0VkVSSUZZX1RZUEUoQlBGX01BUF9UWVBFX1hTS01BUCwgY2hlY2tfeHNrbWFwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMtNzA1LVxcdFZFUklGWV9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCwgY2hlY2tfc29ja2hhc2gpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jPTEwPXN0cnVjdCB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jOjExOlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMtMTItXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrLmM9Mjk9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29jay5jOjMwOlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29jay5jLTMxLVxcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2h3X21ldGFkYXRhLmM9OD1zdHJ1Y3Qge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfaHdfbWV0YWRhdGEuYzo5OlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2h3X21ldGFkYXRhLmMtMTAtXFx0X191aW50KG1heF9lbnRyaWVzLCAyNTYpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9tZXRhZGF0YS5jPTg9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX21ldGFkYXRhLmM6OTpcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9tZXRhZGF0YS5jLTEwLVxcdF9fdWludChtYXhfZW50cmllcywgNCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jPTExPXN0cnVjdCB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYzoxMjpcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYy0xMy1cXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYz0xMDA3PXN0YXRpYyB2b2lkIGRvX3Rlc3RfZml4dXAoc3RydWN0IGJwZl90ZXN0ICp0ZXN0LCBlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYy0xMTM1LVxcdGlmICgqZml4dXBfbWFwX3hza21hcCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmM6MTEzNjpcXHRcXHRtYXBfZmRzWzExXSA9IGNyZWF0ZV9tYXAoQlBGX01BUF9UWVBFX1hTS01BUCwgc2l6ZW9mKGludCksXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYy0xMTM3LVxcdFxcdFxcdFxcdFxcdHNpemVvZihpbnQpLCAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjM6NDYuMTM5NDU0MjQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzOTY4MzQzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYG9wcy1cdTAwM2VtYXBfZ2VuX2xvb2t1cGAgZHVyaW5nIFZlcmlmaWVyIEZpeHVwKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYG9wcy1cdTAwM2VtYXBfZ2VuX2xvb2t1cGAgYW5kIHRoZSB2ZXJpZmllciBmaXh1cCBwcm9jZXNzLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlIGNvZGUuIExldCdzIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYGtlcm5lbC9icGYvZml4dXBzLmNgIGZpbGUuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZml4dXBzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSB3YW50IHRvIHNlZSAqZXhhY3RseSogd2hlcmUgYW5kIGhvdyBgb3BzLVx1MDAzZW1hcF9nZW5fbG9va3VwYCBpcyBpbnZva2VkIGR1cmluZyB0aGUgdmVyaWZpZXIncyBmaXh1cCBzdGFnZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuY3Rpb24gY2FsbHMsIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lcyB3aGVuIGFuZCB3aHkgaXQncyB1c2VkLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgdHJ5aW5nIHRvIHVuZGVyc3RhbmQ6XG5cbiogICAqKkNhbGwgU2l0ZToqKiBXaGVyZSBpcyB0aGUgYG9wcy1cdTAwM2VtYXBfZ2VuX2xvb2t1cGAgbWVtYmVyIGZ1bmN0aW9uIGFjdHVhbGx5ICpjYWxsZWQqIHdpdGhpbiB0aGUgZml4dXAgcHJvY2Vzcz8gV2hhdCBmdW5jdGlvbiBvciBmdW5jdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoaXM/XG4qICAgKipBcmd1bWVudHM6KiogV2hhdCBhcmd1bWVudHMgYXJlIGJlaW5nIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uPyBLbm93aW5nIHRoZSBhcmd1bWVudHMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2hhdCBkYXRhIGlzIGJlaW5nIHVzZWQgdG8gbWFrZSB0aGUgbG9va3VwLlxuKiAgICoqQ29uZGl0aW9uYWwgVXNlOioqIElzIHRoZSBjYWxsIHRvIGBvcHMtXHUwMDNlbWFwX2dlbl9sb29rdXBgIGFsd2F5cyBleGVjdXRlZCwgb3IgaXMgdGhlcmUgYSBzcGVjaWZpYyBjb25kaXRpb24gdGhhdCB0cmlnZ2VycyBpdD8gSWYgc28sIHdoYXQgaXMgdGhlIGNvbmRpdGlvbj8gQXJlIHRoZXJlIHNwZWNpZmljIEJQRiBpbnN0cnVjdGlvbiB0eXBlcywgbWFwIHR5cGVzLCBvciBwcm9ncmFtIGNoYXJhY3RlcmlzdGljcyB0aGF0IGxlYWQgdG8gaXQ/XG4qICAgKipQdXJwb3NlOioqIFdoYXQgaXMgdGhlIGludGVudCBvZiB0aGUgY2FsbD8gV2hhdCBpcyB0aGUgbG9va3VwICpmb3IqPyBJcyBpdCBmb3IgZGF0YSB2YWxpZGF0aW9uLCBjb2RlIGdlbmVyYXRpb24sIG9wdGltaXphdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBIb3cgZG9lcyB0aGUgY29kZSBoYW5kbGUgYW55IGZhaWx1cmVzIG9yIGVycm9ycyB0aGF0IG1pZ2h0IG9jY3VyIHdpdGhpbiB0aGUgYG9wcy1cdTAwM2VtYXBfZ2VuX2xvb2t1cGAgZnVuY3Rpb24/IEFyZSB0aGVyZSBhbnkgcmV0dXJuIHZhbHVlcyBvciBlcnJvciBjb2RlcyB0byBsb29rIG91dCBmb3I/XG5cbkJ5IGNhcmVmdWxseSBleGFtaW5pbmcgdGhlIGNvZGUgaW4gYGZpeHVwcy5jYCwgSSdsbCBnZXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWFwX2dlbl9sb29rdXBgIGNvbnRyaWJ1dGVzIHRvIHRoZSB2ZXJpZmllcidzIGZpeHVwIG9wZXJhdGlvbnMuIFRoZW4sIEkgY2FuIGludGVncmF0ZSBpdCB3aXRoIG15IGN1cnJlbnQga25vd2xlZGdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMxOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjIzOjQ5LjUzNjI5MTc0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2ZpeHVwcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwNjU6XFx0XFxuMjA2NjpcXHRcXHRcXHRcXHRtYXBfcHRyID0gYXV4LVxcdTAwM2VtYXBfcHRyX3N0YXRlLm1hcF9wdHI7XFxuMjA2NzpcXHRcXHRcXHRcXHRvcHMgPSBtYXBfcHRyLVxcdTAwM2VvcHM7XFxuMjA2ODpcXHRcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlaW1tID09IEJQRl9GVU5DX21hcF9sb29rdXBfZWxlbSBcXHUwMDI2XFx1MDAyNlxcbjIwNjk6XFx0XFx0XFx0XFx0ICAgIG9wcy1cXHUwMDNlbWFwX2dlbl9sb29rdXApIHtcXG4yMDcwOlxcdFxcdFxcdFxcdFxcdGNudCA9IG9wcy1cXHUwMDNlbWFwX2dlbl9sb29rdXAobWFwX3B0ciwgaW5zbl9idWYpO1xcbjIwNzE6XFx0XFx0XFx0XFx0XFx0aWYgKGNudCA9PSAtRU9QTk9UU1VQUClcXG4yMDcyOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gcGF0Y2hfbWFwX29wc19nZW5lcmljO1xcbjIwNzM6XFx0XFx0XFx0XFx0XFx0aWYgKGNudCBcXHUwMDNjPSAwIHx8IGNudCBcXHUwMDNlPSBJTlNOX0JVRl9TSVpFKSB7XFxuMjA3NDpcXHRcXHRcXHRcXHRcXHRcXHR2ZXJpZmllcl9idWcoZW52LCBcXFwiJWQgaW5zbnMgZ2VuZXJhdGVkIGZvciBtYXAgbG9va3VwXFxcIiwgY250KTtcXG4yMDc1OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjIwNzY6XFx0XFx0XFx0XFx0XFx0fVxcbjIwNzc6XFx0XFxuMjA3ODpcXHRcXHRcXHRcXHRcXHRpZiAoYnBmX21hcF9pc19wZXJjcHVfbWFwKG1hcF9wdHItXFx1MDAzZW1hcF90eXBlKSlcXG4yMDc5OlxcdFxcdFxcdFxcdFxcdFxcdHByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XFxuMjA4MDpcXHRcXG4yMDgxOlxcdFxcdFxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSxcXG4yMDgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnNuX2J1ZiwgY250KTtcXG4yMDgzOlxcdFxcdFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuMjA4NDpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMDg1OlxcdFxcbjIwODY6XFx0XFx0XFx0XFx0XFx0ZGVsdGEgICAgKz0gY250IC0gMTtcXG4yMDg3OlxcdFxcdFxcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IHByb2cgPSBuZXdfcHJvZztcXG4yMDg4OlxcdFxcdFxcdFxcdFxcdGluc24gICAgICA9IG5ld19wcm9nLVxcdTAwM2VpbnNuc2kgKyBpICsgZGVsdGE7XFxuMjA4OTpcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHRfaW5zbjtcXG4yMDkwOlxcdFxcdFxcdFxcdH1cXG4yMDkxOlxcdFxcbjIwOTI6XFx0XFx0XFx0XFx0QlVJTERfQlVHX09OKCFfX3NhbWVfdHlwZShvcHMtXFx1MDAzZW1hcF9sb29rdXBfZWxlbSxcXG4yMDkzOlxcdFxcdFxcdFxcdFxcdCAgICAgKHZvaWQgKigqKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpKU5VTEwpKTtcXG4yMDk0OlxcdFxcdFxcdFxcdEJVSUxEX0JVR19PTighX19zYW1lX3R5cGUob3BzLVxcdTAwM2VtYXBfZGVsZXRlX2VsZW0sXFxuMjA5NTpcXHRcXHRcXHRcXHRcXHQgICAgIChsb25nICgqKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpKU5VTEwpKTtcXG4yMDk2OlxcdFxcdFxcdFxcdEJVSUxEX0JVR19PTighX19zYW1lX3R5cGUob3BzLVxcdTAwM2VtYXBfdXBkYXRlX2VsZW0sXFxuMjA5NzpcXHRcXHRcXHRcXHRcXHQgICAgIChsb25nICgqKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbjIwOTg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdTY0IGZsYWdzKSlOVUxMKSk7XFxuMjA5OTpcXHRcXHRcXHRcXHRCVUlMRF9CVUdfT04oIV9fc2FtZV90eXBlKG9wcy1cXHUwMDNlbWFwX3B1c2hfZWxlbSxcXG4yMTAwOlxcdFxcdFxcdFxcdFxcdCAgICAgKGxvbmcgKCopKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLFxcbjIxMDE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdTY0IGZsYWdzKSlOVUxMKSk7XFxuMjEwMjpcXHRcXHRcXHRcXHRCVUlMRF9CVUdfT04oIV9fc2FtZV90eXBlKG9wcy1cXHUwMDNlbWFwX3BvcF9lbGVtLFxcbjIxMDM6XFx0XFx0XFx0XFx0XFx0ICAgICAobG9uZyAoKikoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUpKU5VTEwpKTtcXG4yMTA0OlxcdFxcdFxcdFxcdEJVSUxEX0JVR19PTighX19zYW1lX3R5cGUob3BzLVxcdTAwM2VtYXBfcGVla19lbGVtLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyMzo0OS41MzY0ODQwMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjcxMjE0NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBgeHNrX21hcF9nZW5fbG9va3VwYCBpbiBYRFAvWFNLIE1hcCBPcGVyYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBuZXQveGRwL3hza21hcC5jYC4gQSBxdWljayBjaGVjayBjb25maXJtcyBpdDogYHN0YXRpYyBpbnQgeHNrX21hcF9nZW5fbG9va3VwKC4uLilgLiBOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgaG93IHRoaXMgaW1wYWN0cyBzeW1ib2wgdGFyZ2V0aW5nLCBlc3BlY2lhbGx5IGdpdmVuIG91ciBmb2N1cyBvbiBzcGVjaWZpYyBsb2dpYyBjaGFuZ2VzLlxuXG5UaGUgZG9jdW1lbnRhdGlvbidzIFNlY3Rpb24gNCBpcyBrZXkgaGVyZS4gSXQgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIHN0YXRpYyBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgKHdoaWNoIHR5cGljYWxseSBoYXZlIHN5bWJvbCBlbnRyaWVzIGluIGBrYWxsc3ltc2Agb3IgYHZtbGludXhgKSBhbmQgc3RhdGljIGlubGluZXMgaW4gaGVhZGVycyAoLmgpLCB3aGljaCBhcmUgZ2VuZXJhbGx5IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBsYWNrIGRpc3RpbmN0IHN5bWJvbHMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgYHhza19tYXBfZ2VuX2xvb2t1cGAgaXMgc3ViamVjdCB0byBpbmxpbmluZy5cblxuQWgsIGJ1dCB3YWl0ISBUaGUgY3J1Y2lhbCBkZXRhaWwgaXMgdGhhdCBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyBhc3NpZ25lZCB0byBgeHNrX21hcF9vcHMubWFwX2dlbl9sb29rdXBgLCBhIGZ1bmN0aW9uIHBvaW50ZXIuIFRoaXMgbWVhbnMgdGhlIGNvbXBpbGVyICpjYW5ub3QqIGNvbXBsZXRlbHkgaW5saW5lIGl0IGF3YXksIGFzIGl0cyBhZGRyZXNzIGlzIHRha2VuIGFuZCB1c2VkIHdpdGhpbiBgeHNrX21hcF9vcHNgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgc3VnZ2VzdHMgYSBzeW1ib2wgZXhpc3RzIGFuZCBpcyB0aGVyZWZvcmUgdGFyZ2V0YWJsZS5cblxuVG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byBjb25zaWRlciByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgcG90ZW50aWFsIGNhbGxlcnMgd2l0aGluIGBuZXQveGRwL3hza21hcC5jYC4gTGV0IG1lIGxpc3QgdGhvc2UgSSBrbm93IG9mOiBgeHNrX21hcF9nZW5fbG9va3VwYCwgYHhza19tYXBfYWxsb2NgLCBgeHNrX21hcF9ub2RlX2FsbG9jYCwgYHhza19tYXBfbG9va3VwX2VsZW1gLCBgeHNrX21hcF91cGRhdGVfZWxlbWAsIGFuZCBgeHNrX21hcF9kZWxldGVfZWxlbWAuIEkgbmVlZCB0byByZXZpZXcgdGhlc2UgZnVuY3Rpb25zIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZS4gRmluYWxseSwgSSB3aWxsIHZlcmlmeSB0aGUgZXhpc3Rpbmcgc3ltYm9scyBpbiBgbmV0L3hkcC94c2ttYXAuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjIyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjM6NTQuMjA3NzAyMjI3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hza21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1MDpcXHR9XFxuIDI1MTpcXHRcXG4gMjUyOlxcdHZvaWQgeHNrX21hcF90cnlfc29ja19kZWxldGUoc3RydWN0IHhza19tYXAgKm1hcCwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gMjUzOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHhkcF9zb2NrIF9fcmN1ICoqbWFwX2VudHJ5KVxcbiAyNTQ6XFx0e1xcbiAyNTU6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZtYXAtXFx1MDAzZWxvY2spO1xcbiAyNTY6XFx0XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcigqbWFwX2VudHJ5KSA9PSB4cykge1xcbiAyNTc6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKCptYXBfZW50cnksIE5VTEwpO1xcbiAyNTg6XFx0XFx0XFx0eHNrX21hcF9zb2NrX2RlbGV0ZSh4cywgbWFwX2VudHJ5KTtcXG4gMjU5OlxcdFxcdH1cXG4gMjYwOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZtYXAtXFx1MDAzZWxvY2spO1xcbiAyNjE6XFx0fVxcbiAyNjI6XFx0XFxuIDI2MzpcXHRzdGF0aWMgYm9vbCB4c2tfbWFwX21ldGFfZXF1YWwoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1ldGEwLFxcbiAyNjQ6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfbWFwICptZXRhMSlcXG4gMjY1OlxcdHtcXG4gMjY2OlxcdFxcdHJldHVybiBtZXRhMC1cXHUwMDNlbWF4X2VudHJpZXMgPT0gbWV0YTEtXFx1MDAzZW1heF9lbnRyaWVzIFxcdTAwMjZcXHUwMDI2XFxuIDI2NzpcXHRcXHRcXHRicGZfbWFwX21ldGFfZXF1YWwobWV0YTAsIG1ldGExKTtcXG4gMjY4OlxcdH1cXG4gMjY5OlxcdFxcbiAyNzA6XFx0QlRGX0lEX0xJU1RfU0lOR0xFKHhza19tYXBfYnRmX2lkcywgc3RydWN0LCB4c2tfbWFwKVxcbiAyNzE6XFx0Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHhza19tYXBfb3BzID0ge1xcbiAyNzI6XFx0XFx0Lm1hcF9tZXRhX2VxdWFsID0geHNrX21hcF9tZXRhX2VxdWFsLFxcbiAyNzM6XFx0XFx0Lm1hcF9hbGxvYyA9IHhza19tYXBfYWxsb2MsXFxuIDI3NDpcXHRcXHQubWFwX2ZyZWUgPSB4c2tfbWFwX2ZyZWUsXFxuIDI3NTpcXHRcXHQubWFwX2dldF9uZXh0X2tleSA9IHhza19tYXBfZ2V0X25leHRfa2V5LFxcbiAyNzY6XFx0XFx0Lm1hcF9sb29rdXBfZWxlbSA9IHhza19tYXBfbG9va3VwX2VsZW0sXFxuIDI3NzpcXHRcXHQubWFwX2dlbl9sb29rdXAgPSB4c2tfbWFwX2dlbl9sb29rdXAsXFxuIDI3ODpcXHRcXHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0geHNrX21hcF9sb29rdXBfZWxlbV9zeXNfb25seSxcXG4gMjc5OlxcdFxcdC5tYXBfdXBkYXRlX2VsZW0gPSB4c2tfbWFwX3VwZGF0ZV9lbGVtLFxcbiAyODA6XFx0XFx0Lm1hcF9kZWxldGVfZWxlbSA9IHhza19tYXBfZGVsZXRlX2VsZW0sXFxuIDI4MTpcXHRcXHQubWFwX2NoZWNrX2J0ZiA9IG1hcF9jaGVja19ub19idGYsXFxuIDI4MjpcXHRcXHQubWFwX21lbV91c2FnZSA9IHhza19tYXBfbWVtX3VzYWdlLFxcbiAyODM6XFx0XFx0Lm1hcF9idGZfaWQgPSBcXHUwMDI2eHNrX21hcF9idGZfaWRzWzBdLFxcbiAyODQ6XFx0XFx0Lm1hcF9yZWRpcmVjdCA9IHhza19tYXBfcmVkaXJlY3QsXFxuIDI4NTpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyMzo1NC4yMDc4MjMwMTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjE4OTY4NTUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gIEkgc2VlIHdlJ3JlIGxvb2tpbmcgYXQgYEVuYWJsZUNvbmZpZ3NgLCBzcGVjaWZpY2FsbHkgYFhEUF9TT0NLRVRTYCBhbmQsIGJlY2F1c2UgaXQncyBhIGRlcGVuZGVuY3ksIGBCUEZfU1lTQ0FMTGAuIEdvb2QuIFRoZXNlIGFyZSB0aGUgcmlnaHQgc3RhcnRpbmcgcG9pbnRzLiBgQlBGX1NZU0NBTExgIGlzIGEgY29yZSBCUEYgY29uZmlnLCBhbmQgYFhEUF9TT0NLRVRTYCBpcywgb2YgY291cnNlLCB0aGUga2V5IGZvciBYU0sgYW5kIGB4c2ttYXAuY2AuXG5cbk5vdywgSSdsbCBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9sKHMpLiBMb29raW5nIGF0IGBGb2N1c1N5bWJvbHNgLCBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyB0aGUgcGlucG9pbnQuIEkgY291bGQgcG90ZW50aWFsbHkgYnJvYWRlbiB0aGUgc2NvcGUgdG8gaW5jbHVkZSB0aGluZ3MgbGlrZSBgYnBmX2RvX21pc2NfZml4dXBzYCBvciBgeHNrX21hcF9hbGxvY2AsIGJ1dCBgeHNrX21hcF9nZW5fbG9va3VwYCBpcyB2ZXJ5IHNwZWNpZmljLiBTdGljayB3aXRoIHRoYXQgZm9jdXMuXG5cblRpbWUgZm9yIHRoZSBjcnVjaWFsIGBXb3J0aEZ1enppbmdgIGRvdWJsZS1jaGVjay4gIExldCdzIHNlZTpcblxuKiAgICoqQ29yZSBTdWJzeXN0ZW06KiogSXQgaW52b2x2ZXMgQlBGIGFuZCBYRFAgbmV0d29ya2luZywgc28geWVzLCB0aGlzIGlzIGFic29sdXRlbHkgZm91bmRhdGlvbmFsLlxuKiAgICoqSW5zdHJ1Y3Rpb24gR2VuZXJhdGlvbiBMb2dpYzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluc3RydWN0aW9uIGdlbmVyYXRpb24gZm9yIEpJVC9pbmxpbmVkIG1hcCBsb29rdXBzIHdpdGhpbiBYU0tNQVAsIHNwZWNpZmljYWxseSBzd2l0Y2hpbmcgZnJvbSBgQlBGX0pNUF9JTU1gIHRvIGBCUEZfSk1QMzJfSU1NYC4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIGhvdyBieXRlY29kZSBpcyBwcm9kdWNlZC5cbiogICAqKlJlYWNoYWJsZSBQYXRoOioqICBJdCdzIHRyaWdnZXJlZCB0aHJvdWdoIHRoZSBCUEYgc3lzY2FsbCB3aGVuIGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSB3aXRoIFhTS01BUCBtYXAgbG9va3Vwcy4gVGhhdCdzIGEgc3RhbmRhcmQgYWNjZXNzIHBvaW50LlxuKiAgICoqQ29uY2x1c2lvbjoqKiBUaGlzIGlzICpjbGVhcmx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIGluIGEgc2Vuc2l0aXZlIGFyZWEgdGhhdOKAmXMgcmVhZGlseSBhY2Nlc3NpYmxlLlxuXG5Pa2F5LCBsZXQncyBmb3JtYWxpemUgdGhlIHJlYXNvbmluZzogVGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGluc3RydWN0aW9uIGVtaXNzaW9uIGZvciBYU0tNQVAgbG9va3Vwcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgeHNrX21hcF9nZW5fbG9va3VwYC4gSW5zdGVhZCBvZiB1c2luZyA2NC1iaXQganVtcHMgKGBCUEZfSk1QX0lNTWApLCBpdCdzIG5vdyBnZW5lcmF0aW5nIDMyLWJpdCBqdW1wcyAoYEJQRl9KTVAzMl9JTU1gKS4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIGhvdyBCUEYgYnl0ZWNvZGUgaXMgZ2VuZXJhdGVkIGFuZCBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiBBRl9YRFAgbWFwcy4gR2l2ZW4gdGhhdCB0aGVzZSBtYXBzIGFyZSBhY2Nlc3NpYmxlIGV2ZW4gaW4gYSB2YW5pbGxhIFFFTVUgZW52aXJvbm1lbnQsIGZ1enppbmcgdGhlIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGV4ZWN1dGlvbiBpbnZvbHZpbmcgWFNLTUFQcyBoYXMgYSBoaWdoIHByb2JhYmlsaXR5IG9mIHVuY292ZXJpbmcgcmVncmVzc2lvbnMgb3IgcmV2ZWFsaW5nIHVuZXhwZWN0ZWQgdmVyaWZpZXIgb3IgZXhlY3V0aW9uIGJlaGF2aW9yLiBUaGF0J3MgYSBjbGVhciB3aW4uXG5cblJpZ2h0LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNzQsIk91dHB1dFRva2VucyI6MTM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjQ6MDAuMzk3NTEzOTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIzMTM4MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza19tYXBfZ2VuX2xvb2t1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHhza19tYXBfZ2VuX2xvb2t1cCgpIGluIG5ldC94ZHAveHNrbWFwLmMgYnkgY2hhbmdpbmcgdGhlIGVtaXR0ZWQgbG9va3VwIGluc3RydWN0aW9uIGZyb20gQlBGX0pNUF9JTU0gdG8gQlBGX0pNUDMyX0lNTSB3aGVuIHZlcmlmeWluZyBhbmQgaW5saW5pbmcgWFNLTUFQIGxvb2t1cHMuIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgQlBGL1hEUCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza19tYXBfZ2VuX2xvb2t1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHhza19tYXBfZ2VuX2xvb2t1cCgpIGluIG5ldC94ZHAveHNrbWFwLmMgYnkgY2hhbmdpbmcgdGhlIGVtaXR0ZWQgbG9va3VwIGluc3RydWN0aW9uIGZyb20gQlBGX0pNUF9JTU0gdG8gQlBGX0pNUDMyX0lNTSB3aGVuIHZlcmlmeWluZyBhbmQgaW5saW5pbmcgWFNLTUFQIGxvb2t1cHMuIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgQlBGL1hEUCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyNDowMC41Mjk4NDY2NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDk1MTAwODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjQ6MDAuNTMyOTIxMzg4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjcwOTIwMjA1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgYSA2NC1iaXQganVtcCBpbnN0cnVjdGlvbiAoQlBGX0pNUF9JTU0pIHRvIGEgMzItYml0IGp1bXAgaW5zdHJ1Y3Rpb24gKEJQRl9KTVAzMl9JTU0pIGluIHhza19tYXBfZ2VuX2xvb2t1cCgpIHdoZW4gaW5saW5pbmcgQlBGIGluc3RydWN0aW9ucyBmb3IgWFNLIG1hcCBlbGVtZW50IGxvb2t1cHMuIFRoaXMgY2hhbmdlIGRvZXMgbm90IHRvdWNoIG1lbW9yeSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBidWcgaW52b2x2aW5nIGluY29ycmVjdCBicmFuY2ggb2Zmc2V0cyBvciBpbmRleGluZyB3b3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdW5leHBlY3RlZCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM1YmM3YTdkMjAwMWJmZjUyNjc5ZjE0MGE1Njk0ZDM3MGI0YmEyMzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxODoyMzowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrbWFwLmMgYi9uZXQveGRwL3hza21hcC5jXG5pbmRleCAzYmZmMzQ2MzA4ZDBmLi5iZjAwZDY0NjNjMTkxIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2ttYXAuY1xuKysrIGIvbmV0L3hkcC94c2ttYXAuY1xuQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgaW50IHhza19tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4gXG4gXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHJldCwgaW5kZXgsIDApO1xuLVx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KR0UsIHJldCwgbWFwLVx1MDAzZW1heF9lbnRyaWVzLCA1KTtcbitcdCppbnNuKysgPSBCUEZfSk1QMzJfSU1NKEJQRl9KR0UsIHJldCwgbWFwLVx1MDAzZW1heF9lbnRyaWVzLCA1KTtcbiBcdCppbnNuKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9MU0gsIHJldCwgaWxvZzIoc2l6ZW9mKHN0cnVjdCB4c2tfc29jayAqKSkpO1xuIFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgbXAsIG9mZnNldG9mKHN0cnVjdCB4c2tfbWFwLCB4c2tfbWFwKSk7XG4gXHQqaW5zbisrID0gQlBGX0FMVTY0X1JFRyhCUEZfQURELCByZXQsIG1wKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjI0OjAwLjUzMjkyMzAyOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzA3MjUwNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhbiBYRFAgTWFwIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIFRoZSBkaWZmIHNob3dzIGEgbW9kaWZpY2F0aW9uIHdpdGhpbiBgbmV0L3hkcC94c2ttYXAuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGB4c2tfbWFwX2dlbl9sb29rdXBgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgYWRqdXN0bWVudCB0byB0aGUgQlBGIGluc3RydWN0aW9ucy5cblxuTG9va2luZyBhdCB0aGUgZGlmZiwgdGhlIGNoYW5nZSBpcyBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LiBXZSd2ZSBzd2l0Y2hlZCBmcm9tIHVzaW5nIGBCUEZfSk1QX0lNTWAgdG8gYEJQRl9KTVAzMl9JTU1gIGluIHRoZSBjb21wYXJpc29uIGluc3RydWN0aW9uLiBUaGlzIGp1bXAgaXMgY29uZGl0aW9uYWwsIGFuZCB0aGUga2V5IGlzIHRoZSBzaXplIG9mIGByZXRgIGFnYWluc3QgYG1hcC1cdTAwM2VtYXhfZW50cmllc2AuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKndoeSogdGhlIGNoYW5nZSBmcm9tIGEgNjQtYml0IGp1bXAgdG8gYSAzMi1iaXQgb25lIGhlcmU/IElzIHRoZXJlIHNvbWUgb3B0aW1pemF0aW9uLCBvciBpcyBpdCBhIGJ1ZyBmaXg/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHR5cGVzIGludm9sdmVkLiAgQXJlIHdlIG5vdyBleHBlY3RpbmcgMzItYml0IHZhbHVlcyBpbnN0ZWFkIG9mIDY0LWJpdCBmb3Igc29tZSByZWFzb24/IEdpdmVuIHRoYXQgd2UgYXJlIGluZGV4aW5nIGludG8gYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gYHhza19zb2NrYCwgSSBwcmVzdW1lIGByZXRgIGlzIGFuIGluZGV4LCB3aGljaCBpcyB1c3VhbGx5IGEgMzItYml0IHF1YW50aXR5LCBidXQgaXQgc3RpbGwgbWFrZXMgbWUgYXNrIHdoeSB3ZSdyZSBzZWVpbmcgdGhlIGNoYW5nZS5cblxuSSdsbCBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBpbiB0aGUgZmlsZS4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZW50IG9mIGB4c2tfbWFwX2dlbl9sb29rdXBgIHdpbGwgYmUgY3J1Y2lhbC4gV2hhdCdzIHRoZSBtYXAncyByb2xlIGluIHRoZSBYRFAgZnJhbWV3b3JrPyBJcyB0aGlzIGxvb2t1cCBwZXJmb3JtaW5nIGJvdW5kcyBjaGVja2luZyBvbiB0aGUgYXJyYXkgaW5kZXg/IElzIHRoaXMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIHJlY2VudCAzMi82NCBiaXQgcG9pbnRlciBzaXplIGRpc2N1c3Npb25zP1xuXG5VbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyB0byBjb25maXJtIHRoYXQgdGhlIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gZW5zdXJlIGl0J3MgY29ycmVjdCBmb3IgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBhcmNoaXRlY3R1cmVzLCBhbmQgZG9lc24ndCBicmVhayB0aGUgaW50ZW5kZWQgYmVoYXZpb3Igb2YgdGhlIFhEUCBtYXAuIEknbGwgcHJvYmFibHkgYWxzbyB3YW50IHRvIHJldmlldyB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiB0byBzZWUgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyNDowNy4yNDAxNzcxMDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrbWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE1OlxcdFxcdGlmIChpbmRleCA9PSBtLVxcdTAwM2VtYXAubWF4X2VudHJpZXMgLSAxKVxcbiAxMTY6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDExNzpcXHRcXHQqbmV4dCA9IGluZGV4ICsgMTtcXG4gMTE4OlxcdFxcdHJldHVybiAwO1xcbiAxMTk6XFx0fVxcbiAxMjA6XFx0XFxuIDEyMTpcXHRzdGF0aWMgaW50IHhza19tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbiAxMjI6XFx0e1xcbiAxMjM6XFx0XFx0Y29uc3QgaW50IHJldCA9IEJQRl9SRUdfMCwgbXAgPSBCUEZfUkVHXzEsIGluZGV4ID0gQlBGX1JFR18yO1xcbiAxMjQ6XFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxuIDEyNTpcXHRcXG4gMTI2OlxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfVywgcmV0LCBpbmRleCwgMCk7XFxuIDEyNzpcXHRcXHQqaW5zbisrID0gQlBGX0pNUDMyX0lNTShCUEZfSkdFLCByZXQsIG1hcC1cXHUwMDNlbWF4X2VudHJpZXMsIDUpO1xcbiAxMjg6XFx0XFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0xTSCwgcmV0LCBpbG9nMihzaXplb2Yoc3RydWN0IHhza19zb2NrICopKSk7XFxuIDEyOTpcXHRcXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBtcCwgb2Zmc2V0b2Yoc3RydWN0IHhza19tYXAsIHhza19tYXApKTtcXG4gMTMwOlxcdFxcdCppbnNuKysgPSBCUEZfQUxVNjRfUkVHKEJQRl9BREQsIHJldCwgbXApO1xcbiAxMzE6XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9TSVpFT0Yoc3RydWN0IHhza19zb2NrICopLCByZXQsIHJldCwgMCk7XFxuIDEzMjpcXHRcXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcXG4gMTMzOlxcdFxcdCppbnNuKysgPSBCUEZfTU9WNjRfSU1NKHJldCwgMCk7XFxuIDEzNDpcXHRcXHRyZXR1cm4gaW5zbiAtIGluc25fYnVmO1xcbiAxMzU6XFx0fVxcbiAxMzY6XFx0XFxuIDEzNzpcXHQvKiBFbGVtZW50cyBhcmUga2VwdCBhbGl2ZSBieSBSQ1U7IGVpdGhlciBieSByY3VfcmVhZF9sb2NrKCkgKGZyb20gc3lzY2FsbCkgb3JcXG4gMTM4OlxcdCAqIGJ5IGxvY2FsX2JoX2Rpc2FibGUoKSAoZnJvbSBYRFAgY2FsbHMgaW5zaWRlIE5BUEkpLiBUaGVcXG4gMTM5OlxcdCAqIHJjdV9yZWFkX2xvY2tfYmhfaGVsZCgpIGJlbG93IG1ha2VzIGxvY2tkZXAgYWNjZXB0IGJvdGguXFxuIDE0MDpcXHQgKi9cXG4gMTQxOlxcdHN0YXRpYyB2b2lkICpfX3hza19tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSlcXG4gMTQyOlxcdHtcXG4gMTQzOlxcdFxcdHN0cnVjdCB4c2tfbWFwICptID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IHhza19tYXAsIG1hcCk7XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdGlmIChrZXkgXFx1MDAzZT0gbWFwLVxcdTAwM2VtYXhfZW50cmllcylcXG4gMTQ2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAxNDc6XFx0XFxuIDE0ODpcXHRcXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKG0tXFx1MDAzZXhza19tYXBba2V5XSwgcmN1X3JlYWRfbG9ja19iaF9oZWxkKCkpO1xcbiAxNDk6XFx0fVxcbiAxNTA6XFx0XFxuIDE1MTpcXHRzdGF0aWMgdm9pZCAqeHNrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIDE1MjpcXHR7XFxuIDE1MzpcXHRcXHRyZXR1cm4gX194c2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xcbiAxNTQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyNDowNy4yNDAyODE3MTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMzODYxMzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEJQRiBMb29rdXAgR2VuZXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB4c2tfbWFwX2dlbl9sb29rdXBgIGZ1bmN0aW9uLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXRzIGpvYiBpcyB0byBkeW5hbWljYWxseSBnZW5lcmF0ZSB0aGUgaW5saW5lIEJQRiBpbnN0cnVjdGlvbnMgbmVjZXNzYXJ5IGZvciBsb29raW5nIHVwIGFuIGVsZW1lbnQgd2l0aGluIGFuIGB4c2tfbWFwYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhpcyBjb2RlIGNoYW5nZSBhbmQgd2h5IGl0IHdhcyBtYWRlLlxuXG5TcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGF0IHRoZSB0cmFuc2l0aW9uLiBMaW5lIDEyNiB1c2VzIGBCUEZfTERYX01FTShCUEZfVywgcmV0LCBpbmRleCwgMClgIHRvIGxvYWQgdGhlIGB1MzJgIGtleSBpbnRvIGByZXRgLiBCZWZvcmUsIHRoZSBjb21wYXJpc29uIHdhcyBkb25lIG9uIHRoZSA2NC1iaXQgdmFsdWUgdmlhIGBCUEZfSk1QX0lNTShCUEZfSkdFLCByZXQsIG1hcC1cdTAwM2VtYXhfZW50cmllcywgNSlgLiBOb3csIGl0J3MgZG9uZSB2aWEgYEJQRl9KTVAzMl9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtXHUwMDNlbWF4X2VudHJpZXMsIDUpYCwgY29tcGFyaW5nIHRoZSAzMi1iaXQgaW1tZWRpYXRlLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIDMyLWJpdCBjb21wYXJpc29uIHdhcyBpbnRyb2R1Y2VkLiBQZXJoYXBzIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlLCBvciBzb21lIG9wdGltaXphdGlvbi4gVG8gZ2V0IGEgYmV0dGVyIGNvbnRleHQsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIG90aGVyIGluc3RhbmNlcyBvZiBgbWFwX2dlbl9sb29rdXBgIHdpdGhpbiB0aGUga2VybmVsIHRvIHNlZSBpZiB0aGVyZSBhcmUgc2ltaWxhciBjaGFuZ2VzIG9yIHBhdHRlcm5zIHRoYXQgY291bGQgcHJvdmlkZSBzb21lIGluc2lnaHQuIFBlcmhhcHMgdGhlcmUgaXMgYSBwYXRjaCBzZXJpZXMgdGhhdCBjb3ZlcnMgdGhpcyBjaGFuZ2UgaW4gbW9yZSBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyNDoxMC41Nzg4OTgxNDFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDI3MzMwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX0pNUDMyX0lNTS4qbWF4X2VudHJpZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2ttYXAuYz0xMjE9c3RhdGljIGludCB4c2tfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4tLVxcbm5ldC94ZHAveHNrbWFwLmMtMTI2LVxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfVywgcmV0LCBpbmRleCwgMCk7XFxubmV0L3hkcC94c2ttYXAuYzoxMjc6XFx0Kmluc24rKyA9IEJQRl9KTVAzMl9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtXFx1MDAzZW1heF9lbnRyaWVzLCA1KTtcXG5uZXQveGRwL3hza21hcC5jLTEyOC1cXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfTFNILCByZXQsIGlsb2cyKHNpemVvZihzdHJ1Y3QgeHNrX3NvY2sgKikpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjQ6MTMuMTIxNjM5NjMxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNzk4MzA0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IGlzOlxuXG4qKkh1bnRpbmcgRG93biBgX2dlbl9sb29rdXBgIEltcGxlbWVudGF0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgcGxhY2VzIHdoZXJlIGBfZ2VuX2xvb2t1cGAgaXMgYWN0dWFsbHkgKmltcGxlbWVudGVkKiB3aXRoaW4gdGhlIGtlcm5lbC4gSSBrbm93IGl0J3MgcHJvYmFibHkgYXNzb2NpYXRlZCB3aXRoIEJQRiwgZ2l2ZW4gaXRzIG5hbWUsIHNvIEkgc2hvdWxkIGRlZmluaXRlbHkgc3RhcnQgYnkgZGlnZ2luZyB0aHJvdWdoIHRoZSBga2VybmVsL2JwZmAgZGlyZWN0b3J5LiBUaGF0J3MgYSBsaWtlbHkgY2FuZGlkYXRlLiBCZXlvbmQgdGhhdCwgSSByZW1lbWJlciBzZWVpbmcgc2ltaWxhciBsb29rdXAgbWVjaGFuaXNtcyBwb3RlbnRpYWxseSBpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gU3BlY2lmaWNhbGx5LCBJIHJlY2FsbCBzb21lIGZpbHRlciBsb2dpYyBoYW5naW5nIGFyb3VuZCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIEl0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHdpZGVuIHRoZSBuZXQsIHNvIHRvIHNwZWFrLiBJJ2xsIG5lZWQgdG8gdXNlIGEgYnJvYWQgc2VhcmNoIGFjcm9zcyB0aGVzZSBhcmVhcyB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLiBMZXQncyBzZWUgd2hhdCB0dXJucyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY4MCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjI0OjE2LjUwMTQ3MjU1OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3NTY4NTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfZ2VuX2xvb2t1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oPTg3PXN0cnVjdCBicGZfbWFwX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTEyNi1cXHR2b2lkICgqbWFwX2ZkX3B1dF9wdHIpKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnB0ciwgYm9vbCBuZWVkX2RlZmVyKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjEyNzpcXHRpbnQgKCptYXBfZ2VuX2xvb2t1cCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zik7XFxuaW5jbHVkZS9saW51eC9icGYuaC0xMjgtXFx0dTMyICgqbWFwX2ZkX3N5c19sb29rdXBfZWxlbSkodm9pZCAqcHRyKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0yMDE9c3RhdGljIGludCBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGltbSxcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yMTctLyogZW1pdCBCUEYgaW5zdHJ1Y3Rpb25zIGVxdWl2YWxlbnQgdG8gQyBjb2RlIG9mIGFycmF5X21hcF9sb29rdXBfZWxlbSgpICovXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjIxODpzdGF0aWMgaW50IGFycmF5X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTIxOS17XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9Mjc3PXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW1tLCB1MzIgKm9mZilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yOTMtLyogZW1pdCBCUEYgaW5zdHJ1Y3Rpb25zIGVxdWl2YWxlbnQgdG8gQyBjb2RlIG9mIHBlcmNwdV9hcnJheV9tYXBfbG9va3VwX2VsZW0oKSAqL1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoyOTQ6c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjk1LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz04NTk9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODY4LVxcdC5tYXBfZGVsZXRlX2VsZW0gPSBhcnJheV9tYXBfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg2OTpcXHQubWFwX2dlbl9sb29rdXAgPSBhcnJheV9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODcwLVxcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODg2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04OTItXFx0Lm1hcF9sb29rdXBfZWxlbSA9IHBlcmNwdV9hcnJheV9tYXBfbG9va3VwX2VsZW0sXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg5MzpcXHQubWFwX2dlbl9sb29rdXAgPSBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg5NC1cXHQubWFwX2RpcmVjdF92YWx1ZV9hZGRyID0gcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcixcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNDY0PXN0YXRpYyB2b2lkICphcnJheV9vZl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0NzMtXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE0NzQ6c3RhdGljIGludCBhcnJheV9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDc1LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MTUwNT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfb2ZfbWFwc19tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE1MTQtXFx0Lm1hcF9mZF9zeXNfbG9va3VwX2VsZW0gPSBicGZfbWFwX2ZkX3N5c19sb29rdXBfZWxlbSxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTUxNTpcXHQubWFwX2dlbl9sb29rdXAgPSBhcnJheV9vZl9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxNi1cXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTUxMz1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNDctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMDQ4OlxcdFxcdC8qIEJQRl9FTUlUX0NBTEwoKSBhc3N1bXB0aW9ucyBpbiBzb21lIG9mIHRoZSBtYXBfZ2VuX2xvb2t1cFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjA0OS1cXHRcXHQgKiBhbmQgb3RoZXIgaW5saW5pbmcgaGFuZGxlcnMgYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIDY0IGJpdFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDY4LVxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0ZVTkNfbWFwX2xvb2t1cF9lbGVtIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9maXh1cHMuYzoyMDY5OlxcdFxcdFxcdCAgICBvcHMtXFx1MDAzZW1hcF9nZW5fbG9va3VwKSB7XFxua2VybmVsL2JwZi9maXh1cHMuYzoyMDcwOlxcdFxcdFxcdFxcdGNudCA9IG9wcy1cXHUwMDNlbWFwX2dlbl9sb29rdXAobWFwX3B0ciwgaW5zbl9idWYpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMjA3MS1cXHRcXHRcXHRcXHRpZiAoY250ID09IC1FT1BOT1RTVVBQKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9NzE1PXN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy03MzUtICogVGhlIHJldHVybiB2YWx1ZSBpcyBhZGp1c3RlZCBieSBCUEYgaW5zdHJ1Y3Rpb25zXFxua2VybmVsL2JwZi9oYXNodGFiLmM6NzM2OiAqIGluIGh0YWJfbWFwX2dlbl9sb29rdXAoKS5cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy03MzctICovXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz03NTg9c3RhdGljIHZvaWQgKmh0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTc3OC0gKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo3Nzk6c3RhdGljIGludCBodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNzgwLXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTgxMz1zdGF0aWMgdm9pZCAqaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy04MTctXFxua2VybmVsL2JwZi9oYXNodGFiLmM6ODE4OnN0YXRpYyBpbnQgaHRhYl9scnVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy04MTktXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIzNjE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzEtXFx0Lm1hcF9kZWxldGVfZWxlbSA9IGh0YWJfbWFwX2RlbGV0ZV9lbGVtLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIzNzI6XFx0Lm1hcF9nZW5fbG9va3VwID0gaHRhYl9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzczLVxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzgzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5NC1cXHQubWFwX2RlbGV0ZV9lbGVtID0gaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIzOTU6XFx0Lm1hcF9nZW5fbG9va3VwID0gaHRhYl9scnVfbWFwX2dlbl9sb29rdXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5Ni1cXHQubWFwX3NlcV9zaG93X2VsZW0gPSBodGFiX21hcF9zZXFfc2hvd19lbGVtLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjQwNz1zdGF0aWMgdm9pZCAqaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MTctLyogaW5saW5lIGJwZl9tYXBfbG9va3VwX2VsZW0oKSBjYWxsIGZvciBwZXItQ1BVIGhhc2htYXAgKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDE4OnN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDE5LXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI1NjQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfcGVyY3B1X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTcwLVxcdC5tYXBfbG9va3VwX2VsZW0gPSBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjU3MTpcXHQubWFwX2dlbl9sb29rdXAgPSBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTcyLVxcdC5tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSA9IGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjY5OD1zdGF0aWMgdm9pZCAqaHRhYl9vZl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjcwNy1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzA4OnN0YXRpYyBpbnQgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3MDktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjczMj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9vZl9tYXBzX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzQxLVxcdC5tYXBfZmRfc3lzX2xvb2t1cF9lbGVtID0gYnBmX21hcF9mZF9zeXNfbG9va3VwX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc0MjpcXHQubWFwX2dlbl9sb29rdXAgPSBodGFiX29mX21hcF9nZW5fbG9va3VwLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NDMtXFx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzAyNT1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwODMtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA4NDpzdGF0aWMgaW50IHJodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzA4NS17XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTA4PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUxOS1cXHQubWFwX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2RlbGV0ZV9lbGVtLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MjA6XFx0Lm1hcF9nZW5fbG9va3VwID0gcmh0YWJfbWFwX2dlbl9sb29rdXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyMS1cXHQubWFwX3NlcV9zaG93X2VsZW0gPSByaHRhYl9tYXBfc2VxX3Nob3dfZWxlbSxcXG4tLVxcbm5ldC94ZHAveHNrbWFwLmM9MTA0PXN0YXRpYyBpbnQgeHNrX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcXG4tLVxcbm5ldC94ZHAveHNrbWFwLmMtMTIwLVxcbm5ldC94ZHAveHNrbWFwLmM6MTIxOnN0YXRpYyBpbnQgeHNrX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxubmV0L3hkcC94c2ttYXAuYy0xMjIte1xcbi0tXFxubmV0L3hkcC94c2ttYXAuYz0yNzE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHhza19tYXBfb3BzID0ge1xcbi0tXFxubmV0L3hkcC94c2ttYXAuYy0yNzYtXFx0Lm1hcF9sb29rdXBfZWxlbSA9IHhza19tYXBfbG9va3VwX2VsZW0sXFxubmV0L3hkcC94c2ttYXAuYzoyNzc6XFx0Lm1hcF9nZW5fbG9va3VwID0geHNrX21hcF9nZW5fbG9va3VwLFxcbm5ldC94ZHAveHNrbWFwLmMtMjc4LVxcdC5tYXBfbG9va3VwX2VsZW1fc3lzX29ubHkgPSB4c2tfbWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcGVyY3B1X2FycmF5X2lubmVyX21hcC5jLTUtICogVGVzdCB0aGF0IHJlcGxhY2luZyBhbiBpbm5lciBwZXJjcHUgYXJyYXkgbWFwIHdpdGggb25lIHRoYXQgaGFzIGRpZmZlcmVudFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3BlcmNwdV9hcnJheV9pbm5lcl9tYXAuYzo2OiAqIG1heF9lbnRyaWVzIGlzIHJlamVjdGVkLiAgcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwKCkgaW5saW5lcyB0aGVcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wZXJjcHVfYXJyYXlfaW5uZXJfbWFwLmMtNy0gKiB0ZW1wbGF0ZSdzIGluZGV4X21hc2ssIHNvIGFsbG93aW5nIGEgc21hbGxlciByZXBsYWNlbWVudCB3b3VsZCBjYXVzZSBPT0IuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjI0OjE4Ljc3NzE2MjcyMloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzE2MDgxNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIEFycmF5IE1hcCBMb29rdXAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc2VlLi4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBhcnJheSBtYXBzIGFuZCBob3cgbG9va3VwcyBhcmUgaGFuZGxlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvYnBmL2FycmF5bWFwLmNgIGFuZCBzcGVjaWZpY2FsbHksIGFyb3VuZCB0aGUgYGFycmF5X21hcF9nZW5fbG9va3VwYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29yZSBsb2dpYyBmb3IgcmV0cmlldmluZyB2YWx1ZXMgZnJvbSB0aGVzZSBtYXBzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIGluZGV4aW5nLCBib3VuZHMgY2hlY2tpbmcgKGNydWNpYWwhKSwgYW55IHBvdGVudGlhbCBjYWNoaW5nIG1lY2hhbmlzbXMsIGFuZCBlcnJvciBoYW5kbGluZy4gSSdsbCBiZSBsb29raW5nIGZvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgdG9vIC0gcGVyaGFwcyB0aGVyZSdzIHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIGltcHJvdmVkIGluIHRlcm1zIG9mIGxvb2t1cCBwZXJmb3JtYW5jZSBvciBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDc5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MjQ6MjEuNDkzMjQ3MDc5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2FycmF5bWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE3LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE3OlxcdC8qIGVtaXQgQlBGIGluc3RydWN0aW9ucyBlcXVpdmFsZW50IHRvIEMgY29kZSBvZiBhcnJheV9tYXBfbG9va3VwX2VsZW0oKSAqL1xcbiAyMTg6XFx0c3RhdGljIGludCBhcnJheV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbiAyMTk6XFx0e1xcbiAyMjA6XFx0XFx0c3RydWN0IGJwZl9hcnJheSAqYXJyYXkgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FycmF5LCBtYXApO1xcbiAyMjE6XFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxuIDIyMjpcXHRcXHR1MzIgZWxlbV9zaXplID0gYXJyYXktXFx1MDAzZWVsZW1fc2l6ZTtcXG4gMjIzOlxcdFxcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XFxuIDIyNDpcXHRcXHRjb25zdCBpbnQgbWFwX3B0ciA9IEJQRl9SRUdfMTtcXG4gMjI1OlxcdFxcdGNvbnN0IGludCBpbmRleCA9IEJQRl9SRUdfMjtcXG4gMjI2OlxcdFxcbiAyMjc6XFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfSU5ORVJfTUFQKVxcbiAyMjg6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBtYXBfcHRyLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX2FycmF5LCB2YWx1ZSkpO1xcbiAyMzE6XFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9XLCByZXQsIGluZGV4LCAwKTtcXG4gMjMyOlxcdFxcdGlmICghbWFwLVxcdTAwM2VieXBhc3Nfc3BlY192MSkge1xcbiAyMzM6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KR0UsIHJldCwgbWFwLVxcdTAwM2VtYXhfZW50cmllcywgNCk7XFxuIDIzNDpcXHRcXHRcXHQqaW5zbisrID0gQlBGX0FMVTMyX0lNTShCUEZfQU5ELCByZXQsIGFycmF5LVxcdTAwM2VpbmRleF9tYXNrKTtcXG4gMjM1OlxcdFxcdH0gZWxzZSB7XFxuIDIzNjpcXHRcXHRcXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pHRSwgcmV0LCBtYXAtXFx1MDAzZW1heF9lbnRyaWVzLCAzKTtcXG4gMjM3OlxcdFxcdH1cXG4gMjM4OlxcdFxcbiAyMzk6XFx0XFx0aWYgKGlzX3Bvd2VyX29mXzIoZWxlbV9zaXplKSkge1xcbiAyNDA6XFx0XFx0XFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0xTSCwgcmV0LCBpbG9nMihlbGVtX3NpemUpKTtcXG4gMjQxOlxcdFxcdH0gZWxzZSB7XFxuIDI0MjpcXHRcXHRcXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfTVVMLCByZXQsIGVsZW1fc2l6ZSk7XFxuIDI0MzpcXHRcXHR9XFxuIDI0NDpcXHRcXHQqaW5zbisrID0gQlBGX0FMVTY0X1JFRyhCUEZfQURELCByZXQsIG1hcF9wdHIpO1xcbiAyNDU6XFx0XFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XFxuIDI0NjpcXHRcXHQqaW5zbisrID0gQlBGX01PVjY0X0lNTShyZXQsIDApO1xcbiAyNDc6XFx0XFx0cmV0dXJuIGluc24gLSBpbnNuX2J1ZjtcXG4gMjQ4OlxcdH1cXG4gMjQ5OlxcdFxcbiAyNTA6XFx0LyogQ2FsbGVkIGZyb20gZUJQRiBwcm9ncmFtICovXFxuIDI1MTpcXHRzdGF0aWMgdm9pZCAqcGVyY3B1X2FycmF5X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIDI1MjpcXHR7XFxuIDI1MzpcXHRcXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XFxuIDI1NDpcXHRcXHR1MzIgaW5kZXggPSAqKHUzMiAqKWtleTtcXG4gMjU1OlxcdFxcbiAyNTY6XFx0XFx0aWYgKHVubGlrZWx5KGluZGV4IFxcdTAwM2U9IGFycmF5LVxcdTAwM2VtYXAubWF4X2VudHJpZXMpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODoyNDoyMS40OTMzOTc2MzlaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEzMTUxNDQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSW5zdHJ1Y3Rpb24gQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgeHNrX21hcF9nZW5fbG9va3VwYCwgSSBzZWUgdGhleSdyZSBzd2l0Y2hpbmcgZnJvbSBgQlBGX0pNUF9JTU1gIHRvIGBCUEZfSk1QMzJfSU1NYCB3aGVuIGRvaW5nIGEgYm91bmRzIGNoZWNrIGFnYWluc3QgYG1hcC1cdTAwM2VtYXhfZW50cmllc2AgYmVmb3JlIGluZGV4aW5nIGludG8gYG0tXHUwMDNleHNrX21hcGAuIEJvdGgganVtcCBpbnN0cnVjdGlvbnMgYXJlIGVzc2VudGlhbGx5IGRvaW5nIHRoZSBzYW1lIGpvYjogbWFraW5nIHN1cmUgYHJldGAgaXMgd2l0aGluIHRoZSB2YWxpZCByYW5nZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLlxuXG5UaGUgdGhpbmcgaXMsIHRoZSBjb2RlIGFscmVhZHkgZG9lcyBhIDMyLWJpdCBsb2FkIChgQlBGX0xEWF9NRU1gKSwgd2hpY2ggaXMgemVyby1leHRlbmRlZCBhbnl3YXkgb24gYSA2NC1iaXQgQlBGIFZNLiBJdCBzZWVtcyBsaWtlIHVzaW5nIGBKTVAzMmAgbWlnaHQgYmUgY2xlYW5lciBpbiBjZXJ0YWluIGNvbnRleHRzLCBtYXliZSBpbiBzdWItcmVnaXN0ZXIgbW9kZSBvciBwb3RlbnRpYWxseSBiZW5lZml0aW5nIHRoZSBKSVQgY29tcGlsZXIuIEJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHdlJ3JlIG5vdCBpbmFkdmVydGVudGx5IGV4cG9zaW5nIHNvbWV0aGluZy5cblxuU28sIGxldCdzIHJ1biB0aHJvdWdoIHRoZSBLTVNBTiBjaGVja2xpc3Q6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZToqKiBOb3BlLiBObyBkYXRhIGlzIGJlaW5nIGNvcGllZCBvdXQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE6KiogTm8uIFRoZXJlIGFyZW4ndCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBiZWluZyB1c2VkIGluIGEgY29uZGl0aW9uYWwuXG4zLiAgKipBbGxvY2F0aW9uL0luaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlczoqKiBOb3QgYW4gaXNzdWUgaGVyZS4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zIG9yIGluaXRpYWxpemF0aW9ucyBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGF0IHBsYXkuXG40LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OioqIE5vdywgaGVyZSdzIHdoZXJlIGl0ICpjb3VsZCogZ2V0IGludGVyZXN0aW5nLiBUaGlzICppcyogYSBib3VuZHMgY2hlY2ssIHllcywgYnV0IGl0J3Mgc3BlY2lmaWNhbGx5IGZvciBhbiBhcnJheSBsb29rdXAgaW5zaWRlIGFuIFhTSyBtYXAuIElmIHRoZSBib3VuZHMgY2hlY2sgZmFpbGVkIG9yIG1pc2JlaGF2ZWQsIGl0J2QgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gS0FTQU4gaXMgYnVpbHQgdG8gY2F0Y2ggc3VjaCBhY2Nlc3Nlcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCBkdWUgdG8gdGhpcyBjaGFuZ2UuXG5cbkVzc2VudGlhbGx5LCBhbGwgdGhlIGNyaXRlcmlhIGFyZSBuZWdhdGl2ZS5cblxuVG8gc3VtIHVwOlxuXG4qICAgVGhlIGNoYW5nZSBpbnZvbHZlcyBhIEJQRiBpbnN0cnVjdGlvbiBzd2l0Y2g6IGEgNjQtYml0IGp1bXAgdG8gYSAzMi1iaXQganVtcCBpbiB0aGUgaW5saW5lIEJQRiBjb2RlIGZvciBYU0sgbWFwIGxvb2t1cHMuXG4qICAgVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBJdCBhdm9pZHMgYWNjZXNzaW5nIG9yIGxlYWtpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuKiAgIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBhc3NvY2lhdGVkIHdpdGggQlBGIGFycmF5IGxvb2t1cHMgYXJlIGFscmVhZHkgYWRkcmVzc2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTiB0aHJvdWdoIGNoZWNraW5nIHRoZSBib3VuZHMuXG4qICAgVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcmlzayBpcyBleHRyZW1lbHkgbG93LiBJJ20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJIGZlZWwgY29uZmlkZW50IGluIHRoaXMuIEknbGwganVzdCBkbyBhIHF1aWNrIGZpbmFsIHJldmlldyB0byBtYWtlIHN1cmUuIE9rYXksIEknbSByZWFkeSB0byByZXNwb25kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTg4LCJPdXRwdXRUb2tlbnMiOjE2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjI0OjI3LjYyNDkxNDY0M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBhIDY0LWJpdCBqdW1wIGluc3RydWN0aW9uIChCUEZfSk1QX0lNTSkgdG8gYSAzMi1iaXQganVtcCBpbnN0cnVjdGlvbiAoQlBGX0pNUDMyX0lNTSkgaW4geHNrX21hcF9nZW5fbG9va3VwKCkgd2hlbiBpbmxpbmluZyBCUEYgaW5zdHJ1Y3Rpb25zIGZvciBYU0sgbWFwIGVsZW1lbnQgbG9va3Vwcy4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgdG91Y2ggbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1ZyBpbnZvbHZpbmcgaW5jb3JyZWN0IGJyYW5jaCBvZmZzZXRzIG9yIGluZGV4aW5nIHdvdWxkIHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB1bmV4cGVjdGVkIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBhIDY0LWJpdCBqdW1wIGluc3RydWN0aW9uIChCUEZfSk1QX0lNTSkgdG8gYSAzMi1iaXQganVtcCBpbnN0cnVjdGlvbiAoQlBGX0pNUDMyX0lNTSkgaW4geHNrX21hcF9nZW5fbG9va3VwKCkgd2hlbiBpbmxpbmluZyBCUEYgaW5zdHJ1Y3Rpb25zIGZvciBYU0sgbWFwIGVsZW1lbnQgbG9va3Vwcy4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgdG91Y2ggbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1ZyBpbnZvbHZpbmcgaW5jb3JyZWN0IGJyYW5jaCBvZmZzZXRzIG9yIGluZGV4aW5nIHdvdWxkIHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB1bmV4cGVjdGVkIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowtczhc[1] Phase: Succeeded StartedAt: 2026-09-10 18:24:38 +0000 UTC FinishedAt: 2026-09-10 18:24:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 18:24:38 +0000 UTC FinishedAt: 2026-09-10 18:24:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2] Phase: Succeeded StartedAt: 2026-09-10 18:24:38 +0000 UTC FinishedAt: 2026-09-10 22:09:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 18:24:38 +0000 UTC FinishedAt: 2026-09-10 22:09:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 18:24:38 +0000 UTC FinishedAt: 2026-09-10 18:24:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 18:24:38 +0000 UTC FinishedAt: 2026-09-10 18:24:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtczhc/series-workflowtczhc-convert-artifact-3777277537/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 18:24:48 +0000 UTC FinishedAt: 2026-09-10 18:44:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 18:24:48 +0000 UTC FinishedAt: 2026-09-10 18:44:42 +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:*aa9c2055-e657-4deb-857f-48034b626d84,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-workflowtczhc/series-workflowtczhc-convert-artifact-3777277537/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": "c8311dce-d9a5-46bc-acd2-7cc56809bb12", "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-workflowtczhc/series-workflowtczhc-build-action-568621967/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 18:24:48 +0000 UTC FinishedAt: 2026-09-10 18:43:47 +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:*aa9c2055-e657-4deb-857f-48034b626d84,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-workflowtczhc/series-workflowtczhc-convert-artifact-3777277537/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": "c8311dce-d9a5-46bc-acd2-7cc56809bb12", "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-workflowtczhc/series-workflowtczhc-build-action-568621967/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 18:44:42 +0000 UTC FinishedAt: 2026-09-10 18:44:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 18:44:42 +0000 UTC FinishedAt: 2026-09-10 18:44:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 18:44:43 +0000 UTC FinishedAt: 2026-09-10 18:44:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 18:44:43 +0000 UTC FinishedAt: 2026-09-10 18:44:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtczhc/series-workflowtczhc-convert-artifact-1397636532/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 18:44:58 +0000 UTC FinishedAt: 2026-09-10 18:47:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 18:44:58 +0000 UTC FinishedAt: 2026-09-10 18:47:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c8311dce-d9a5-46bc-acd2-7cc56809bb12,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-workflowtczhc/series-workflowtczhc-build-action-568621967/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 18:47:19 +0000 UTC FinishedAt: 2026-09-10 18:47:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 18:47:19 +0000 UTC FinishedAt: 2026-09-10 18:47:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 18:47:19 +0000 UTC FinishedAt: 2026-09-10 19:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 18:47:19 +0000 UTC FinishedAt: 2026-09-10 19:06:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*aa9c2055-e657-4deb-857f-48034b626d84,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-workflowtczhc/series-workflowtczhc-convert-artifact-1397636532/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": "8780db4d-1d9b-4fa7-8351-17ef8bfa7741", "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-workflowtczhc/series-workflowtczhc-build-action-3281559424/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 18:47:19 +0000 UTC FinishedAt: 2026-09-10 19:05:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*aa9c2055-e657-4deb-857f-48034b626d84,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-workflowtczhc/series-workflowtczhc-convert-artifact-1397636532/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": "8780db4d-1d9b-4fa7-8351-17ef8bfa7741", "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-workflowtczhc/series-workflowtczhc-build-action-3281559424/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 19:06:09 +0000 UTC FinishedAt: 2026-09-10 19:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 19:06:09 +0000 UTC FinishedAt: 2026-09-10 19:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 19:06:09 +0000 UTC FinishedAt: 2026-09-10 19:07:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 19:06:09 +0000 UTC FinishedAt: 2026-09-10 19:07:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8780db4d-1d9b-4fa7-8351-17ef8bfa7741,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtczhc/series-workflowtczhc-build-action-3281559424/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 19:07:34 +0000 UTC FinishedAt: 2026-09-10 22:09:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 19:07:34 +0000 UTC FinishedAt: 2026-09-10 22:09:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*c8311dce-d9a5-46bc-acd2-7cc56809bb12,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8780db4d-1d9b-4fa7-8351-17ef8bfa7741,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtczhc/series-workflowtczhc-build-action-568621967/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtczhc/series-workflowtczhc-build-action-3281559424/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 19:07:34 +0000 UTC FinishedAt: 2026-09-10 19:07:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 19:07:34 +0000 UTC FinishedAt: 2026-09-10 19:07:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtczhc/series-workflowtczhc-convert-artifact-3192940765/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 19:07:34 +0000 UTC FinishedAt: 2026-09-10 19:07:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 19:07:34 +0000 UTC FinishedAt: 2026-09-10 19:07:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 19:07:34 +0000 UTC FinishedAt: 2026-09-10 19:07:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 19:07:55 +0000 UTC FinishedAt: 2026-09-10 22:09:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtczhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_map_gen_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"d9a3b075-4b81-4ee7-b09f-35151ceb47d5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 19:07:55 +0000 UTC FinishedAt: 2026-09-10 22:09:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c8311dce-d9a5-46bc-acd2-7cc56809bb12,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8780db4d-1d9b-4fa7-8351-17ef8bfa7741,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtczhc/series-workflowtczhc-build-action-568621967/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtczhc/series-workflowtczhc-build-action-3281559424/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtczhc/series-workflowtczhc-convert-artifact-3192940765/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}