Name: series-workflowbf62g Phase: Succeeded StartedAt: 2026-08-06 15:35:31 +0000 UTC FinishedAt: 2026-08-06 20:16:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[0] Phase: Succeeded StartedAt: 2026-08-06 15:35:31 +0000 UTC FinishedAt: 2026-08-06 16:27:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 15:35:31 +0000 UTC FinishedAt: 2026-08-06 16:27:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "44871eadd07a7f004aa00cb87399461eea08c630", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "IP_SET", "IP_SET_LIST_SET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "44871eadd07a7f004aa00cb87399461eea08c630", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "IP_SET", "IP_SET_LIST_SET" ], "series_id": "29c5f188-e6f3-429e-8087-7faec5e135e0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "list_set_uadd", "ip_set_uadd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9MSVNUX1NFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xpc3Rfc2V0X3VhZGQmIzM0OywKICAgICYjMzQ7aXBfc2V0X3VhZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIG5ldGZpbHRlciBpcHNldCBzdWJzeXN0ZW0gd2hlcmUgcmVwbGFjaW5nIGFuIGVsZW1lbnQgaW4gYSBsaXN0OnNldCBpbmNvcnJlY3RseSBpbmNyZW1lbnRlZCB0aGUgZWxlbWVudCBjb3VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlIChhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rKSwgc28gaXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNiY2Y1MmY3ZDZlZTk0ODNiNWUzOGVhODA4YmM3YTc2OTAxMDlhN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDE2OjAzOjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXG5pbmRleCBjYTNlZjk0NzllODM4Li41NjYyNmY0OTQzYTkwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xuQEAgLTMwMSw4ICYjNDM7MzAxLDExIEBAIGxpc3Rfc2V0X3VhZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiBcdGUtXHUwMDNlc2V0ID0gc2V0O1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZS1cdTAwM2VsaXN0KTtcbiBcdGxpc3Rfc2V0X2luaXRfZXh0ZW5zaW9ucyhzZXQsIGV4dCwgZSk7XG4tXHRpZiAobilcbiYjNDM7XHRpZiAobikge1xuIFx0XHRsaXN0X3NldF9yZXBsYWNlKHNldCwgZSwgbik7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZWxzZSBpZiAobmV4dClcbiBcdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2ZS1cdTAwM2VsaXN0LCBcdTAwMjZuZXh0LVx1MDAzZWxpc3QpO1xuIFx0ZWxzZSBpZiAocHJldilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4yM208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJUF9TRVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0xJU1RfU0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bGlzdF9zZXRfdWFkZCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfdWFkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IHN1YnN5c3RlbSB3aGVyZSByZXBsYWNpbmcgYW4gZWxlbWVudCBpbiBhIGxpc3Q6c2V0IGluY29ycmVjdGx5IGluY3JlbWVudGVkIHRoZSBlbGVtZW50IGNvdW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgKGFjY2Vzc2libGUgdmlhIG5ldGxpbmspLCBzbyBpdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2JjZjUyZjdkNmVlOTQ4M2I1ZTM4ZWE4MDhiYzdhNzY5MDEwOWE3ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMTY6MDM6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYwppbmRleCBjYTNlZjk0NzllODM4Li41NjYyNmY0OTQzYTkwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMKQEAgLTMwMSw4ICYjNDM7MzAxLDExIEBAIGxpc3Rfc2V0X3VhZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKIAllLSZndDtzZXQgPSBzZXQ7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtlLSZndDtsaXN0KTsKIAlsaXN0X3NldF9pbml0X2V4dGVuc2lvbnMoc2V0LCBleHQsIGUpOwotCWlmIChuKQomIzQzOwlpZiAobikgewogCQlsaXN0X3NldF9yZXBsYWNlKHNldCwgZSwgbik7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogCWVsc2UgaWYgKG5leHQpCiAJCWxpc3RfYWRkX3RhaWxfcmN1KCZhbXA7ZS0mZ3Q7bGlzdCwgJmFtcDtuZXh0LSZndDtsaXN0KTsKIAllbHNlIGlmIChwcmV2KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyL2lwc2V0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgYSBjaGFuZ2UgdG8gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiBpdCYjMzk7cyBhZGRpbmcgYSBgcmV0dXJuIDA7YCBzdGF0ZW1lbnQgd2l0aGluIGFuIGBpZiAobilgIGJsb2NrIGluc2lkZSB0aGUgYGxpc3Rfc2V0X3VhZGRgIGZ1bmN0aW9uLiAgTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBkZWVtZWQgbmVjZXNzYXJ5LiBBZGRpbmcgYSBzaW1wbGUgcmV0dXJuIGxpa2UgdGhhdCBjYW4gaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBwcm9ncmFtIGZsb3csIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuCgpGaXJzdCwgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJvbGVzIG9mIGBsaXN0X3NldF91YWRkYCBhbmQgYGxpc3Rfc2V0X3JlcGxhY2VgLiBJJiMzOTtsbCBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhleSBmdW5jdGlvbiB3aXRoaW4gdGhlIGBpcHNldGAgZnJhbWV3b3JrLiBJIGtub3cgdGhleSYjMzk7cmUgcHJvYmFibHkgaGFuZGxpbmcgb3BlcmF0aW9ucyByZWxhdGVkIHRvIGFkZGluZyBhbmQvb3IgcmVwbGFjaW5nIGVsZW1lbnRzIHdpdGhpbiBhIGxpc3QtYmFzZWQgc2V0LiBUaGUgYGlmIChuKWAgY29uZGl0aW9uIGlzIHRoZSBrZXkgaGVyZS4gVGhlIGFkZGVkIGByZXR1cm4gMDtgIGltcGxpZXMgdGhhdCBpZiBgbmAgaXMgdHJ1ZSwgd2hhdGV2ZXIgbG9naWMgaXMgYmVpbmcgZXhlY3V0ZWQsIGl0IHNob3VsZCBleGl0IGltbWVkaWF0ZWx5LCByZXR1cm5pbmcgYSBzdWNjZXNzIHN0YXR1cy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2hvcnRjdXQuCgpJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB3aGF0IGBuYCByZXByZXNlbnRzLiBXaGF0IGNvbmRpdGlvbiBpcyBiZWluZyBjaGVja2VkPyBXaGF0IHdvdWxkIGhhcHBlbiBpZiB0aGUgYHJldHVybiAwO2Agd2FzbiYjMzk7dCBhZGRlZCBhbmQgdGhlIGZ1bmN0aW9uIGNvbnRpbnVlZCBleGVjdXRpbmc/IElzIHRoZSBleGlzdGluZyBsb2dpYyBmdW5kYW1lbnRhbGx5IGZsYXdlZCBvciBpcyB0aGUgcGF0Y2ggYWRkaW5nIGFuIG9wdGltaXphdGlvbiBvciBoYW5kbGluZyBhIG5ldyBlZGdlIGNhc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYXJvdW5kIGBuYCBpcyBjcnVjaWFsLiBJcyBpdCByZWxhdGVkIHRvIHNvbWUgdHlwZSBvZiBlcnJvciBjb25kaXRpb24sIGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24sIGEgc3BlY2lmaWMgaW50ZXJuYWwgc3RhdGUsIG9yIHNvbWUgb3RoZXIga2V5IHZhcmlhYmxlPyBXaGF0IGRvZXMgdGhlIGNvZGUgcHJpb3IgdG8gdGhlIGBpZmAgbG9vayBsaWtlPyBXaGF0IGRvZXMgaXQgZG8gYWZ0ZXI/IEkgd2lsbCBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhlIHJldHVybi4KClVsdGltYXRlbHksIEkgd2FudCB0byBjb25maXJtIHRoYXQgdGhpcyBwYXRjaCBpcyBjb3JyZWN0LCByb2J1c3QsIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIG9yIHN1YnRsZSByZWdyZXNzaW9ucy4gSSB3aWxsIHJlYWQgdGhlIGVudGlyZSBgbGlzdF9zZXRfdWFkZGAgYW5kIGBsaXN0X3NldF9yZXBsYWNlYCBmdW5jdGlvbnMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlzdF9zZXRfdWFkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0yMzU9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoyMzY6bGlzdF9zZXRfdWFkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0yMzctXHQgICAgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBzZXRfdmFyaWFudCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTU2MS1cdC5hZHRcdD0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzo1NjI6XHRcdFtJUFNFVF9BRERdID0gbGlzdF9zZXRfdWFkZCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTYzLVx0XHRbSVBTRVRfREVMXSA9IGxpc3Rfc2V0X3VkZWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgdGhlIGBsaXN0X3NldF91YWRkYCBjb250ZXh0OgoKKipBbmFseXppbmcgYGxpc3Rfc2V0X3VhZGRgIENvbnRleHQqKgoKQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBlc3RhYmxpc2ggdGhlIGVudmlyb25tZW50LiBJJiMzOTttIGxvb2tpbmcgYXQgYGxpc3Rfc2V0X3VhZGRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aGVyZSBpdCBmaXRzIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIElzIHRoaXMgYSBjdXN0b20gZnVuY3Rpb24sIG9yIGEgc3RhbmRhcmQgbGlicmFyeSBjYWxsPyBVbmRlcnN0YW5kaW5nIHRoZSBwcm9qZWN0JiMzOTtzIHN0cnVjdHVyZSB3aWxsIGdpdmUgbWUgY3JpdGljYWwgaW5zaWdodHMgYXMgSSBtb3ZlIGZvcndhcmQuIFdoYXQgYXJlIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgb3IgbW9kdWxlcz8gV2hhdCBraW5kIG9mIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXNlZCBpbiB0aGUgdmljaW5pdHk/IElzIHRoaXMgcGFydCBvZiBhIGNvcmUgYWxnb3JpdGhtIG9yIGEgdXRpbGl0eSBmdW5jdGlvbj8gRGV0ZXJtaW5pbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2Ugd2l0aGluIHRoaXMgbGFuZHNjYXBlIGdpdmVzIG1lIGEgc29saWQgYmFzZSB0byBjb21wcmVoZW5kLiBJdCYjMzk7cyBvZnRlbiBoZWxwZnVsIHRvIHRoaW5rIHRocm91Z2ggd2hhdCB0aGUgbmFtZSBgbGlzdF9zZXRfdWFkZGAgc3VnZ2VzdHMuICYjMzQ7TGlzdCwmIzM0OyAmIzM0O3NldCwmIzM0OyBhbmQgJiMzNDt1YWRkJiMzNDsg4oCTIGFyZSB0aGVzZSBvcGVyYXRpb25zIG9uIHRoZSBsaXN0LCBvciB0aGUgc2V0PyBJcyB0aGUgJiMzNDt1JiMzNDsgbGlrZWx5IGZvciAmIzM0O3VuaXF1ZSYjMzQ7IG9yICYjMzQ7dW5pb24mIzM0Oz8gVGhpcyBnaXZlcyBhIGZpcnN0IGd1ZXNzIG9uIHdoYXQgdG8gZXhwZWN0LiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBleGFtaW5lIHRoZSBpbW1lZGlhdGUgY29kZSBhcm91bmQgaXQuIFRoYXQgaXMsIHdoYXQgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIGl0PyBXaGF0IGlzIGl0IGRvaW5nIHdpdGggdGhvc2UgcGFyYW1ldGVycz8gSSYjMzk7bGwgbG9vayBmb3IgaW5wdXQgYW5kIG91dHB1dCwgYW5kIGVzcGVjaWFsbHkgd2hhdCBkYXRhIHR5cGVzIGFyZSBpbnZvbHZlZC4gV2hhdCBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IsIGJvdGggb24gc3VjY2VzcyBhbmQgcG90ZW50aWFsIGZhaWx1cmUgY2FzZXM/IEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgZWZmaWNpZW5jeSBjb25zaWRlcmF0aW9ucy4gQXJlIHRoZXJlIGFueSBsb29wcywgb3IgbmVzdGVkIGxvb3BzLCB0aGF0IG1pZ2h0IGluZGljYXRlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBBcmUgdGhlcmUgb3B0aW1pemF0aW9ucyB0aGF0IEkgY2FuIHN1Z2dlc3QgbGF0ZXI/IFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gKndoYXQqIGl0JiMzOTtzIGRvaW5nLCAqaG93KiBpdCYjMzk7cyBkb2luZyBpdCwgYW5kICp3aHkqIGl0JiMzOTtzIGRlc2lnbmVkIHRoYXQgd2F5LCBiZWZvcmUgSSBjYW4gcHJvdmlkZSBhIHRydWx5IGluc2lnaHRmdWwgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODA6XHRcdFx0biA9IGxpc3RfZW1wdHkoXHUwMDI2bWFwLVx1MDAzZW1lbWJlcnMpID8gTlVMTCA6XG4gMjgxOlx0XHRcdCAgICBsaXN0X2xhc3RfZW50cnkoXHUwMDI2bWFwLVx1MDAzZW1lbWJlcnMsIHN0cnVjdCBzZXRfZWxlbSwgbGlzdCk7XG4gMjgyOlx0XHR9IGVsc2UgaWYgKGQtXHUwMDNlYmVmb3JlIFx1MDAzZSAwKSB7XG4gMjgzOlx0XHRcdC8qIEluc2VydCBhZnRlciBuZXh0IGVsZW1lbnQgKi9cbiAyODQ6XHRcdFx0aWYgKCFsaXN0X2lzX2xhc3QoXHUwMDI2bmV4dC1cdTAwM2VsaXN0LCBcdTAwMjZtYXAtXHUwMDNlbWVtYmVycykpXG4gMjg1Olx0XHRcdFx0biA9IGxpc3RfbmV4dF9lbnRyeShuZXh0LCBsaXN0KTtcbiAyODY6XHRcdH0gZWxzZSB7XG4gMjg3Olx0XHRcdC8qIEluc2VydCBiZWZvcmUgcHJldiBlbGVtZW50ICovXG4gMjg4Olx0XHRcdGlmIChwcmV2LVx1MDAzZWxpc3QucHJldiAhPSBcdTAwMjZtYXAtXHUwMDNlbWVtYmVycylcbiAyODk6XHRcdFx0XHRuID0gbGlzdF9wcmV2X2VudHJ5KHByZXYsIGxpc3QpO1xuIDI5MDpcdFx0fVxuIDI5MTpcdFx0LyogQ2FuIHdlIHJlcGxhY2UgYSB0aW1lZCBvdXQgZW50cnk/ICovXG4gMjkyOlx0XHRpZiAobiBcdTAwMjZcdTAwMjZcbiAyOTM6XHRcdCAgICAhKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSBcdTAwMjZcdTAwMjZcbiAyOTQ6XHRcdCAgICAgIGlwX3NldF90aW1lb3V0X2V4cGlyZWQoZXh0X3RpbWVvdXQobiwgc2V0KSkpKVxuIDI5NTpcdFx0XHRuID0gTlVMTDtcbiAyOTY6XHRcbiAyOTc6XHRcdGUgPSBremFsbG9jKHNldC1cdTAwM2Vkc2l6ZSwgR0ZQX0FUT01JQyk7XG4gMjk4Olx0XHRpZiAoIWUpXG4gMjk5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDMwMDpcdFx0ZS1cdTAwM2VpZCA9IGQtXHUwMDNlaWQ7XG4gMzAxOlx0XHRlLVx1MDAzZXNldCA9IHNldDtcbiAzMDI6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmUtXHUwMDNlbGlzdCk7XG4gMzAzOlx0XHRsaXN0X3NldF9pbml0X2V4dGVuc2lvbnMoc2V0LCBleHQsIGUpO1xuIDMwNDpcdFx0aWYgKG4pIHtcbiAzMDU6XHRcdFx0bGlzdF9zZXRfcmVwbGFjZShzZXQsIGUsIG4pO1xuIDMwNjpcdFx0XHRyZXR1cm4gMDtcbiAzMDc6XHRcdH1cbiAzMDg6XHRcbiAzMDk6XHRcdGVsc2UgaWYgKG5leHQpXG4gMzEwOlx0XHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmUtXHUwMDNlbGlzdCwgXHUwMDI2bmV4dC1cdTAwM2VsaXN0KTtcbiAzMTE6XHRcdGVsc2UgaWYgKHByZXYpXG4gMzEyOlx0XHRcdGxpc3RfYWRkX3JjdShcdTAwMjZlLVx1MDAzZWxpc3QsIFx1MDAyNnByZXYtXHUwMDNlbGlzdCk7XG4gMzEzOlx0XHRlbHNlXG4gMzE0Olx0XHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmUtXHUwMDNlbGlzdCwgXHUwMDI2bWFwLVx1MDAzZW1lbWJlcnMpO1xuIDMxNTpcdFx0c2V0LVx1MDAzZWVsZW1lbnRzJiM0MzsmIzQzOztcbiAzMTY6XHRcbiAzMTc6XHRcdHJldHVybiAwO1xuIDMxODpcdH1cbiAzMTk6XHRcbiAzMjA6XHRzdGF0aWMgaW50XG4gMzIxOlx0bGlzdF9zZXRfdWRlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIDMyMjpcdFx0ICAgICAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbiAzMjM6XHR7XG4gMzI0Olx0XHRzdHJ1Y3QgbGlzdF9zZXQgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xuIDMyNTpcdFx0c3RydWN0IHNldF9hZHRfZWxlbSAqZCA9IHZhbHVlO1xuIDMyNjpcdFx0c3RydWN0IHNldF9lbGVtICplLCAqbiwgKm5leHQsICpwcmV2ID0gTlVMTDtcbiAzMjc6XHRcbiAzMjg6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBuLCBcdTAwMjZtYXAtXHUwMDNlbWVtYmVycywgbGlzdCkge1xuIDMyOTpcdFx0XHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbDoKCioqRml4aW5nIHRoZSBpcF9zZXRfbGlzdF9zZXQgSW5jcmVtZW50IEJ1ZyoqCgpBbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudCwgYnVnIGluIHRoZSBpcHNldCBjb2RlLiBJdCBzZWVtcyB0aGF0IGBzZXQtJmd0O2VsZW1lbnRzJiM0MzsmIzQzO2Agd2FzIGJlaW5nIGluY3JlbWVudGVkIGV2ZW4gd2hlbiB0aGUgZnVuY3Rpb24gYGxpc3Rfc2V0X3JlcGxhY2VgIHdhcyBjYWxsZWQsIHdoaWNoLCBhcyB0aGUgbmFtZSBpbXBsaWVzLCAqcmVwbGFjZXMqIGFuIGV4aXN0aW5nIGVsZW1lbnQgYW5kIHNob3VsZG4mIzM5O3QgYmUgdHJlYXRlZCBhcyBhbiBhZGRpdGlvbi4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgb2ZmLWJ5LW9uZSBlcnJvciBsdXJraW5nIGluIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jYCwgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGFkZHJlc3NlZC4gSXQmIzM5O3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBkaXN0aW5jdGlvbiwgYmVjYXVzZSB0aGF0IGNvdW50ZXIgY291bGQgYmVjb21lIHVucmVsaWFibGUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5jb3JyZWN0IGJlaGF2aW9yIGRvd24gdGhlIGxpbmUuCgpCZWZvcmUgSSBnbyB0b28gZmFyLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gSSBuZWVkIHRvIGtub3cgaG93IGBpcF9zZXRfbGlzdF9zZXQuY2AgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBXaGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhZmZlY3QgaXRzIGluY2x1c2lvbj8gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEJlc3QgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCAqaG93KiB0aGlzIHBpZWNlIG9mIGNvZGUgaXMgYnJvdWdodCBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLCB0byBlbnN1cmUgdGhhdCB0aGUgZml4IGlzIGFwcGxpZWQgaW4gdGhlIHJpZ2h0IGNvbnRleHRzIGFuZCB0aGF0IHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9uIGZvciBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHNldHVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9zZXRfbGlzdF9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGU9Mjg9b2JqLSQoQ09ORklHX0lQX1NFVF9IQVNIX05FVFBPUlRORVQpICYjNDM7PSBpcF9zZXRfaGFzaF9uZXRwb3J0bmV0Lm9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlLTMwLSMgbGlzdCB0eXBlc1xubmV0L25ldGZpbHRlci9pcHNldC9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfSVBfU0VUX0xJU1RfU0VUKSAmIzQzOz0gaXBfc2V0X2xpc3Rfc2V0Lm9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGUtMzItaWZkZWYgQ09ORklHX0dDT1ZfUFJPRklMRV9JUFNFVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2OTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUCBTZXQgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSBzZWUgdGhpcyBgQ09ORklHX0lQX1NFVF9MSVNUX1NFVGAgZmxhZywgYW5kIGl0JiMzOTtzIHBpbmdpbmcgc29tZXRoaW5nIGluIG15IG1lbW9yeS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcywgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgdGllZCB0byBpdC4gVGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoaXMgaW5mb3JtYXRpb24gaXMgZ29pbmcgdG8gYmUgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBmdW5kYW1lbnRhbCBJUCBzZXQgY29uZmlndXJhdGlvbnMgbGl2ZSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gaGVhZCB0byB1bmRlcnN0YW5kIHdoYXQgZW5hYmxpbmcgdGhhdCBwYXJ0aWN1bGFyIG9wdGlvbiB3aWxsIGludm9sdmUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9TRVRfTElTVF9TRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE1OD1jb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0Vcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2ODpjb25maWcgSVBfU0VUX0xJU1RfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY5LVx0dHJpc3RhdGUgXCYjMzQ7bGlzdDpzZXQgc2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAxMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgSVBfU0VUX0xJU1RfU0VUIEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBidXNpbmVzcy4gTXkgZmlyc3QgaW5zdGluY3QgaGVyZSBpcyB0byBqdW1wIGRpcmVjdGx5IGludG8gdGhlIEtjb25maWcgZm9yIGBJUF9TRVRfTElTVF9TRVRgLiBJdCYjMzk7cyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIElQIHNldCB0eXBlIGlzIGNvbnRyb2xsZWQgYXQgY29tcGlsZSB0aW1lLiBJIG5lZWQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaXRzIGNvbmZpZ3VyYWJpbGl0eSBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciDigJMgYmVmb3JlIEkgZXZlbiB0aGluayBhYm91dCBzcGVjaWZpYyB1c2UgY2FzZXMgb3IgcG90ZW50aWFsIGludGVncmF0aW9uIHBvaW50cy4gVGhlIEtjb25maWcgaXMgdGhlIGJsdWVwcmludCwgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBvcHRpb25zLiBUaW1lIHRvIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MDpcdFx0ZGVwZW5kcyBvbiBJUF9TRVRcbiAxNjE6XHRcdGhlbHBcbiAxNjI6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgaGFzaDpuZXQsaWZhY2Ugc2V0IHR5cGUgc3VwcG9ydCwgYnkgd2hpY2hcbiAxNjM6XHRcdCAgb25lIGNhbiBzdG9yZSBJUHY0L0lQdjYgbmV0d29yayBhZGRyZXNzL3ByZWZpeCBhbmRcbiAxNjQ6XHRcdCAgaW50ZXJmYWNlIG5hbWUgcGFpcnMgYXMgZWxlbWVudHMgaW4gYSBzZXQuXG4gMTY1Olx0XG4gMTY2Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIDE2NzpcdFxuIDE2ODpcdGNvbmZpZyBJUF9TRVRfTElTVF9TRVRcbiAxNjk6XHRcdHRyaXN0YXRlIFwmIzM0O2xpc3Q6c2V0IHNldCBzdXBwb3J0XCYjMzQ7XG4gMTcwOlx0XHRkZXBlbmRzIG9uIElQX1NFVFxuIDE3MTpcdFx0aGVscFxuIDE3MjpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBsaXN0OnNldCBzZXQgdHlwZSBzdXBwb3J0LiBJbiB0aGlzXG4gMTczOlx0XHQgIGtpbmQgb2Ygc2V0IG9uZSBjYW4gc3RvcmUgdGhlIG5hbWUgb2Ygb3RoZXIgc2V0cyBhbmQgaXQgZm9ybXNcbiAxNzQ6XHRcdCAgYW4gb3JkZXJlZCB1bmlvbiBvZiB0aGUgbWVtYmVyIHNldHMuXG4gMTc1Olx0XG4gMTc2Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIDE3NzpcdFxuIDE3ODpcdGNvbmZpZyBHQ09WX1BST0ZJTEVfSVBTRVRcbiAxNzk6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBpcHNldFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTUxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93biBpbW1lZGlhdGUgY29uc2lkZXJhdGlvbnM6CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIGhpbmdlcyBvbiB0aGlzIGBJUF9TRVRgLiBUaGF0JiMzOTtzIHRoZSBrZXkgdmFyaWFibGUgaGVyZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogKml0JiMzOTtzIGFsbCBhYm91dCBob3cgYElQX1NFVGAgaXMgYmVpbmcgdXNlZCwgYW5kIHdoYXQmIzM5O3MgY29ubmVjdGVkIHRvIGl0Ki4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSYjMzk7bSB0aGlua2luZywgJiMzNDt3aGF0IG90aGVyIGNvbXBvbmVudHMsIHN5c3RlbXMsIG9yIHJ1bGVzIHJlbHkgb24gdGhlIHN0YXRlIG9yIGNvbnRlbnRzIG9mIGBJUF9TRVRgPyYjMzQ7LiBJcyBpdCBkaXJlY3RseSBmZWVkaW5nIGludG8gZmlyZXdhbGwgcnVsZXM/IElzIGl0IGxpbmtlZCB0byBhIGR5bmFtaWMgcm91dGluZyBwcm90b2NvbD8gQXJlIHRoZXJlIG1vbml0b3JpbmcgdG9vbHMgdGhhdCBhcmUga2V5ZWQgdG8gY2hhbmdlcyBpbiB0aGF0IHNldD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBhbnkgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzIGlmIGBJUF9TRVRgIGJlaGF2ZXMgdW5leHBlY3RlZGx5LiBTbywgSSYjMzk7bGwgZ28gdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBmaWxlcywgc3lzdGVtIGxvZ3MsIGFuZCBtYXliZSBldmVuIGxvb2sgZm9yIGFueSBtb25pdG9yaW5nIGRhc2hib2FyZHMgdGhhdCByZWZlcmVuY2UgdGhhdCBpZGVudGlmaWVyLiBMZXQmIzM5O3MgZGlnIGluIGFuZCB0cmFjayBkb3duIGV2ZXJ5IGRpcmVjdCBhbmQgaW5kaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCBgSVBfU0VUYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfU0VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUgZm9yIElQX1NFVCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgSVBfU0VUYC4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O20gZ29pbmcgdG8gbG9vayBpcyB0aGUgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIHR5cGVzIG9mIGtlcm5lbCBmZWF0dXJlcyBhcmUgZGVmaW5lZCwgd2l0aCBhbGwgdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBhc3NvY2lhdGVkIHNldHRpbmdzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBgSVBfU0VUYCBzeW1ib2wgZGVmaW5lZCBoZXJlLCBhbG9uZyB3aXRoIHBvdGVudGlhbGx5IG90aGVyLCBtb3JlIGdyYW51bGFyIG9wdGlvbnMgdGhhdCBjb250cm9sIGRpZmZlcmVudCBhc3BlY3RzIG9mIGBpcHNldGAgZnVuY3Rpb25hbGl0eSwgbGlrZSBzcGVjaWZpYyBzZXQgdHlwZXMgb3IgbWF0Y2hpbmcgcnVsZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYW55IGRlcGVuZGVuY2llcyBsaXN0ZWQgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBvciBjb25maWd1cmVkIGZvciBgSVBfU0VUYCB0byB3b3JrIGNvcnJlY3RseS4gTWlnaHQgZXZlbiBmaW5kIGEgaGVscGZ1bCBkZXNjcmlwdGlvbiB0aGF0IGNsYXJpZmllcyB0aGUgcHVycG9zZSBhbmQgaW50ZW5kZWQgdXNhZ2UuIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uICpzaG91bGQqIGJlIGxpbmtlZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1NFVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyOm1lbnVjb25maWcgSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0lQIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE0PWlmIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2OmNvbmZpZyBJUF9TRVRfTUFYXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTctXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yNy1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyODpjb25maWcgSVBfU0VUX0JJVE1BUF9JUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7Yml0bWFwOmlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM2LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjM3OmNvbmZpZyBJUF9TRVRfQklUTUFQX0lQTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzgtXHR0cmlzdGF0ZSBcJiMzNDtiaXRtYXA6aXAsbWFjIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ1LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ2OmNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDpwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjU1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU2LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02NC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo2NTpjb25maWcgSVBfU0VUX0hBU0hfSVBNQVJLXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLG1hcmsgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjgzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRJUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTg0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0LGlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTkyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjkzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRORVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTAyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDQtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTEyOmNvbmZpZyBJUF9TRVRfSEFTSF9NQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTIxOmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTI5LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTMxLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzOTpjb25maWcgSVBfU0VUX0hBU0hfTkVUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQwLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNDg6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU5LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2ODpjb25maWcgSVBfU0VUX0xJU1RfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY5LVx0dHJpc3RhdGUgXCYjMzQ7bGlzdDpzZXQgc2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMxMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgdGhlIHByb3ZpZGVkIHRleHQgYW5kIHRoaW5raW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9uczoKCioqQW5hbHl6aW5nIHRoZSBJUF9TRVQgS2NvbmZpZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBJUF9TRVRgIGZ1bmN0aW9uYWxpdHkgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0uIFRoaXMgdGVsbHMgbWUgYWJvdXQgZGVwZW5kZW5jaWVzLCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB0byB0aGUgZW5kLXVzZXIgKG9yLCBtb3JlIGltcG9ydGFudGx5LCAqbWUqIHdoZW4gSSYjMzk7bSBjb25maWd1cmluZyBhIGN1c3RvbSBrZXJuZWwpLCBhbmQgYW55IHBvdGVudGlhbCBsaW1pdGF0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi4KCk15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBzdHJ1Y3R1cmUgLSBpcyBpdCBhIHNpbXBsZSBib29sZWFuLCBhIHRyaXN0YXRlLCBvciBtb3JlIGNvbXBsZXg/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBsb29raW5nIGZvciBhbnkgcHJlLXJlcXVpc2l0ZXMgZm9yIGBJUF9TRVRgIHRvIGV2ZW4gYmUgY29uc2lkZXJlZC4gQXJlIHRoZXJlIGFueSBkZWZhdWx0IHZhbHVlcyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgb3ZlcmFsbCBidWlsZD8gQXJlIHRoZXJlICphbnkqIGNvbmZsaWN0cyB3aXRoIG90aGVyIGZlYXR1cmVzIHRoYXQgSSBzaG91bGQga25vdyBhYm91dD8KCk9uY2UgSSBncmFzcCB0aGUgY29uZmlndXJhdGlvbiBtZWNoYW5pc20sIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlc2NyaXB0aW9ucyBhbmQgaGVscCB0ZXh0LiBUaGVzZSBhcmUgY3J1Y2lhbC4gVGhpcyBwYXJ0IHVzdWFsbHkgdGVsbHMgdGhlICYjMzk7d2h5JiMzOTsgb2YgdGhlIGZ1bmN0aW9uYWxpdHksIGFuZCB3aGF0IHRoZSB1c2VyIGlzICppbnRlbmRlZCogdG8gZG8gd2l0aCBpdC4gVGhpcyBzZWN0aW9uIGlzIHdoZXJlIEkmIzM5O2xsIHNlZSBob3cgcm9idXN0IGBJUF9TRVRgIGlzIGFuZCBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgdGhlIHJpZ2h0IGNob2ljZSBmb3IgbXkgc3BlY2lmaWMgdXNlLWNhc2UuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZnJvbSBhbiBhcmNoaXRlY3R1cmFsLCBwZXJmb3JtYW5jZSwgYW5kL29yIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBGaW5hbGx5LCBJIHNob3VsZCBzZWUgaG93ICpncmFudWxhciogdGhlIGNvbmZpZ3VyYWJpbGl0eSBvZiBgSVBfU0VUYCBpcyBhbmQgaWYgSSBhbSBhYmxlIHRvIHRhaWxvciBpdCB0byBteSBleGFjdCBuZWVkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51Y29uZmlnIElQX1NFVFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7SVAgc2V0IHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG4gICA1Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBJUCBzZXQgc3VwcG9ydCB0byB0aGUga2VybmVsLlxuICAgODpcdFx0ICBJbiBvcmRlciB0byBkZWZpbmUgYW5kIHVzZSB0aGUgc2V0cywgeW91IG5lZWQgdGhlIHVzZXJzcGFjZSB1dGlsaXR5XG4gICA5Olx0XHQgIGlwc2V0KDgpLiBZb3UgY2FuIHVzZSB0aGUgc2V0cyBpbiBuZXRmaWx0ZXIgdmlhIHRoZSBcJiMzNDtzZXRcJiMzNDsgbWF0Y2hcbiAgMTA6XHRcdCAgYW5kIFwmIzM0O1NFVFwmIzM0OyB0YXJnZXQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuICAxMzpcdFxuICAxNDpcdGlmIElQX1NFVFxuICAxNTpcdFxuICAxNjpcdGNvbmZpZyBJUF9TRVRfTUFYXG4gIDE3Olx0XHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1wmIzM0O1xuICAxODpcdFx0ZGVmYXVsdCAyNTZcbiAgMTk6XHRcdHJhbmdlIDIgNjU1MzRcbiAgMjA6XHRcdGRlcGVuZHMgb24gSVBfU0VUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5ODUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYElQX1NFVGAgRGVwZW5kZW5jeSBhbmQgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYElQX1NFVGAgZnVuY3Rpb25hbGl0eSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBpdHMgZGVwZW5kZW5jeSBvbiBgSU5FVCAmYW1wOyZhbXA7IE5FVEZJTFRFUmAuIEdvdHRhIHJlbWVtYmVyIHRoYXQsIGl0JiMzOTtzIGZ1bmRhbWVudGFsIHRvIGl0cyBvcGVyYXRpb24uIE5vdywgdG8gYWN0dWFsbHkgKnVzZSogdGhpcyB0aGluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgYElQX1NFVGAgYW5kIGBJUF9TRVRfTElTVF9TRVRgIGVuYWJsZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb25zLiBUaG9zZSBhcmUgdGhlIGVzc2VudGlhbHMuCgpNeSBpbW1lZGlhdGUgZm9jdXMsIHRob3VnaCwgaXMgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBJIHRoaW5rIGBsaXN0X3NldF91YWRkYCBpcyB0aGUgb25lIHRvIHN0YXJ0IHdpdGgsIGFkZGluZyBlbGVtZW50cyB0byB0aGUgbGlzdC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIGFjdGlvbi4gQnV0IEkgY2FuJiMzOTt0IGp1c3QgZml4YXRlIG9uIG9uZSBmdW5jdGlvbjsgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGxpc3Rfc2V0X3JlcGxhY2VgLCBqdXN0IGluIGNhc2UgdGhlcmUmIzM5O3MgYW5vdGhlciBjcnVjaWFsIGZ1bmN0aW9uIHRoYXQgSSBoYXZlIG92ZXJsb29rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlzdF9zZXRfcmVwbGFjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0xNjM9c3RhdGljIHZvaWRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MTY0Omxpc3Rfc2V0X3JlcGxhY2Uoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3Qgc2V0X2VsZW0gKmUsIHN0cnVjdCBzZXRfZWxlbSAqb2xkKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0xNjUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MjM2PWxpc3Rfc2V0X3VhZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTMwNC1cdGlmIChuKSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjMwNTpcdFx0bGlzdF9zZXRfcmVwbGFjZShzZXQsIGUsIG4pO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0zMDYtXHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTQ5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGxpc3Rfc2V0YCBGdW5jdGlvbiBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gb3B0aW1pemUgaXQgYmFzZWQgb24gdGhlIHByb21wdCYjMzk7cyBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBzZWUgYGxpc3Rfc2V0X3JlcGxhY2VgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIG1lbnRhbCBub3RlLiBUaGVuIEkgbm90aWNlIGBsaXN0X3NldF91YWRkYCBpcyAqYWxzbyogc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSG93ZXZlciwgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgc2V0X3ZhcmlhbnRgLCBzcGVjaWZpY2FsbHkgYXQgdGhlIGBJUFNFVF9BRERgIGluZGV4LiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbC4KCldhaXQgYSBzZWNvbmQsIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGRpc2NvdXJhZ2VzIHN0YXRpYyBmdW5jdGlvbnMgaWYgcG9zc2libGUuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIHdoeSBpcyBgbGlzdF9zZXRfdWFkZGAgc3RhdGljPyBBbmQgaXMgaXQgbmVjZXNzYXJ5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UuIE9rYXksIGxldCYjMzk7cyBzZWUsIGl0IGlzIGFzc2lnbmVkIHRvIGBzZXRfdmFyaWFudC5hZHRbSVBTRVRfQUREXWAuIE5vdywgSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgc2V0X3ZhcmlhbnRgIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGFjdHVhbGx5ICp1c2VkKi4gV2hlcmUgaXMgYHNldF92YXJpYW50YCB1dGlsaXplZD8gTGV0JiMzOTtzIGZpbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfdmFyaWFudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz01NDc9bGlzdF9zZXRfY2FuY2VsX2djKHN0cnVjdCBpcF9zZXQgKnNldClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTU1Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NTU4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBzZXRfdmFyaWFudCA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTU5LVx0LmthZHRcdD0gbGlzdF9zZXRfa2FkdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTYyMD1saXN0X3NldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy02MzUtXHRsb2NrZGVwX3NldF9jbGFzcyhcdTAwMjZzZXQtXHUwMDNlbG9jaywgXHUwMDI2bGlzdF9zZXRfbG9ja2RlcF9rZXkpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzo2MzY6XHRzZXQtXHUwMDNldmFyaWFudCA9IFx1MDAyNnNldF92YXJpYW50O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy02MzctXHRzZXQtXHUwMDNlZHNpemUgPSBpcF9zZXRfZWxlbV9sZW4oc2V0LCB0Yiwgc2l6ZW9mKHN0cnVjdCBzZXRfZWxlbSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyOTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlwX3NldF9jb3JlLmMgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYHNldC0mZ3Q7dmFyaWFudGAgaXMgbGlrZWx5IGJlaW5nIHV0aWxpemVkIHdpdGhpbiBgaXBfc2V0X2NvcmUuY2AuIFRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyBjb2RlIGJhc2UgdXN1YWxseSBtZWFucyB0aGF0IGBzZXQtJmd0O3ZhcmlhbnRgIGhhcyBhIHNpZ25pZmljYW50IHJvbGUuIEdpdmVuIHRoYXQsIEkgbmVlZCB0byBjaGVjayB0aGUgZmlsZSBgaXBfc2V0X2NvcmUuY2AgZGlyZWN0bHkgdG8gc2VlIGhvdyBgLSZndDt2YXJpYW50YCBpcyBiZWluZyB1c2VkIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgdGhlIGAtJmd0O3ZhcmlhbnQtJmd0O2FkdGAgaXMgdXNlZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2Ugc3RydWN0dXJlcyB0byBiZXR0ZXIgY29tcHJlaGVuZCB0aGUgb3ZlcmFsbCBkZXNpZ24uIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmFyaWFudC1cdTAwM2VhZHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTI0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBpczoKCioqQ2hlY2tpbmcgYGFkdGAgaW4gYGlwX3NldF9jb3JlLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBhZHRgIOKAkyB0aGUgYWJzdHJhY3QgZGF0YSB0eXBlIOKAkyB3aXRoaW4gdGhlIGBpcF9zZXRfY29yZS5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNldCBpbXBsZW1lbnRhdGlvbiBpcyBzdHJ1Y3R1cmVkIGF0IHRoZSBjb3JlIGxldmVsLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHRoaXMgZmlsZSBob2xkcyB0aGUgZm91bmRhdGlvbmFsIGRlZmluaXRpb25zIGFuZCBvcGVyYXRpb25zLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBtZW1vcnkgbGF5b3V0LCBhbnkga2V5IGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBiYXNpYyBzZXQgbWFuaXB1bGF0aW9uIHJvdXRpbmVzIHVzZWQgYnkgdGhlIHN5c3RlbS4gVW5kZXJzdGFuZGluZyBob3cgdGhlIGBhZHRgIGlzIGhhbmRsZWQgaGVyZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBwZXJmb3JtYW5jZS4gSSB3YW50IHRvIHNlZSBpZiB0aGV5JiMzOTtyZSB1c2luZyBhIHN0YW5kYXJkIGxpYnJhcnkmIzM5O3MgaW1wbGVtZW50YXRpb24sIG9yIGlmIHRoZXkmIzM5O3ZlIHJvbGxlZCB0aGVpciBvd24sIGFuZCB3aHkuIEFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucyB3aWxsIGJlIG9idmlvdXMgaGVyZS4gVGhlIGdvYWwgaXMgYSBxdWljayByZWNvbm5haXNzYW5jZSwgdG8gZ2FpbiBhIGhpZ2gtbGV2ZWwgcGljdHVyZSBiZWZvcmUgSSBkZWx2ZSBkZWVwZXIgaW50byBzcGVjaWZpYyBzZXQgdHlwZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgd2lsbCBzdGFydCBieSBsb29raW5nIGZvciBkZWNsYXJhdGlvbiBvZiB0aGUgYGFkdGAsIG9yIHVzYWdlIG9mIGFueSBleGlzdGluZyBgYWR0YCBzdHJ1Y3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwuYWR0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgyMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0JiMzOTtzIGNvbWluZyBkaXJlY3RseSBmcm9tIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGlwX3NldF9jb3JlLmNgIGZvciBBRFQgSW5zcGVjdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGxvb2sgYXQgYGlwX3NldF9jb3JlLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSB0aGUgYC0mZ3Q7YWR0YCBhc3BlY3Qgd2l0aGluIHRoYXQgZmlsZS4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21lIGludGVyYWN0aW9uIHRoZXJlIHRoYXQgd2FycmFudHMgYXR0ZW50aW9uLCBhbmQga25vd2luZyB0aGUgY29yZSYjMzk7cyBpbXBsZW1lbnRhdGlvbiBpcyBrZXkgZm9yIG1lLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCwgYW5kIEkgZXhwZWN0IHRvIHNlZSB0aGUgbG93IGxldmVsIGRldGFpbHMgSSBuZWVkIGZvciBub3cuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1cdTAwM2VhZHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE4MTg9c3RhdGljIGludCBpcF9zZXRfYWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqY3RubCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg1MS1cdFx0XHRcdCAgICAgYXR0cltJUFNFVF9BVFRSX0RBVEFdLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE4NTI6XHRcdFx0XHQgICAgIHNldC1cdTAwM2V0eXBlLVx1MDAzZWFkdF9wb2xpY3ksIE5VTEwpKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NTMtXHRcdFx0cmV0dXJuIC1JUFNFVF9FUlJfUFJPVE9DT0w7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NjItXHRcdFx0ICAgIG5sYV9wYXJzZV9uZXN0ZWQodGIsIElQU0VUX0FUVFJfQURUX01BWCwgbmxhLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE4NjM6XHRcdFx0XHRcdCAgICAgc2V0LVx1MDAzZXR5cGUtXHUwMDNlYWR0X3BvbGljeSwgTlVMTCkpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg2NC1cdFx0XHRcdHJldHVybiAtSVBTRVRfRVJSX1BST1RPQ09MO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xODg4PXN0YXRpYyBpbnQgaXBfc2V0X3V0ZXN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE5MDctXHRpZiAobmxhX3BhcnNlX25lc3RlZCh0YiwgSVBTRVRfQVRUUl9BRFRfTUFYLCBhdHRyW0lQU0VUX0FUVFJfREFUQV0sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTkwODpcdFx0XHQgICAgIHNldC1cdTAwM2V0eXBlLVx1MDAzZWFkdF9wb2xpY3ksIE5VTEwpKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE5MDktXHRcdHJldHVybiAtSVBTRVRfRVJSX1BST1RPQ09MO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ0NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIHRlcm1zOgoKKipEaXZpbmcgaW50byB0aGUgYGlwX3NldGAgQURUKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHNvbWV0aGluZyBsaWtlIGEgc2V0LCBhbmQgaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdmFyaWFudHMgYW5kIGFic3RyYWN0IGRhdGEgdHlwZXMgKEFEVHMpIHdpdGhpbiB0aGF0IHNldC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBzZXQtJmd0O3ZhcmlhbnQtJmd0O2FkdGAgY29ubmVjdGlvbi4KCkhtbSwgdGhpcyBzb3VuZHMgbGlrZSBhIHBvdGVudGlhbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIExldCYjMzk7cyBtYWtlIHN1cmUgb3VyIHVuZGVyc3RhbmRpbmcgb2YgYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YCBpcyBhY2N1cmF0ZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0byByZWZyZXNoIG15IG1lbW9yeSBvZiBob3cgdGhlIGRpZmZlcmVudCBzZXQgdHlwZXMgYXJlIHN0cnVjdHVyZWQgYW5kIHJlcHJlc2VudGVkIGludGVybmFsbHkuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD0xNDE9c3RydWN0IGlwX3NldF9hZHRfb3B0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaC0xNDktLyogU2V0IHR5cGUsIHZhcmlhbnQtc3BlY2lmaWMgcGFydCAqL1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6MTUwOnN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IHtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTE1MS1cdC8qIEtlcm5lbHNwYWNlOiB0ZXN0L2FkZC9kZWwgZW50cmllc1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oPTI0Nj1zdHJ1Y3QgaXBfc2V0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaC0yNjEtXHQvKiBUaGUgdHlwZSB2YXJpYW50IGRvaW5nIHRoZSByZWFsIGpvYiAqL1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6MjYyOlx0Y29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgKnZhcmlhbnQ7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaC0yNjMtXHQvKiBUaGUgYWN0dWFsIElORVQgZmFtaWx5IG9mIHRoZSBzZXQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MTMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YCoqCgpPa2F5LCB0aW1lIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSB2YXJpb3VzIElQIHNldCB0eXBlcyBhcmUgaGFuZGxlZCBhdCBhIGxvdyBsZXZlbC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YCB3aXRoaW4gYGluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oYC4gVGhpcyBzdHJ1Y3R1cmUgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIGZvciBob3cgZGlmZmVyZW50IElQIHNldCBpbXBsZW1lbnRhdGlvbnMgYXJlIG1hbmFnZWQgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBhYnN0cmFjdGlvbiBpcyBkZXNpZ25lZCBhbmQgaG93IHRoZSBpbnRlcmZhY2VzIGZvciBzcGVjaWZpYyB0eXBlcyBhcmUgY3JlYXRlZC4gSSYjMzk7bSBob3BpbmcgdG8gZ2FpbiBpbnNpZ2h0cyBpbnRvIGhvdyB0aGUgYmFzZSBzZXQgZGF0YSBzdHJ1Y3R1cmUgaXMgZXh0ZW5kZWQgYW5kIG9wdGltaXplZCBmb3IgZGlmZmVyZW50IHVzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0OTpcdC8qIFNldCB0eXBlLCB2YXJpYW50LXNwZWNpZmljIHBhcnQgKi9cbiAxNTA6XHRzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCB7XG4gMTUxOlx0XHQvKiBLZXJuZWxzcGFjZTogdGVzdC9hZGQvZGVsIGVudHJpZXNcbiAxNTI6XHRcdCAqXHRcdHJldHVybnMgbmVnYXRpdmUgZXJyb3IgY29kZSxcbiAxNTM6XHRcdCAqXHRcdFx0emVybyBmb3Igbm8gbWF0Y2gvc3VjY2VzcyB0byBhZGQvZGVsZXRlXG4gMTU0Olx0XHQgKlx0XHRcdHBvc2l0aXZlIGZvciBtYXRjaGluZyBlbGVtZW50ICovXG4gMTU1Olx0XHRpbnQgKCprYWR0KShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gMTU2Olx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsXG4gMTU3Olx0XHRcdCAgICBlbnVtIGlwc2V0X2FkdCBhZHQsIHN0cnVjdCBpcF9zZXRfYWR0X29wdCAqb3B0KTtcbiAxNTg6XHRcbiAxNTk6XHRcdC8qIFVzZXJzcGFjZTogdGVzdC9hZGQvZGVsIGVudHJpZXNcbiAxNjA6XHRcdCAqXHRcdHJldHVybnMgbmVnYXRpdmUgZXJyb3IgY29kZSxcbiAxNjE6XHRcdCAqXHRcdFx0emVybyBmb3Igbm8gbWF0Y2gvc3VjY2VzcyB0byBhZGQvZGVsZXRlXG4gMTYyOlx0XHQgKlx0XHRcdHBvc2l0aXZlIGZvciBtYXRjaGluZyBlbGVtZW50ICovXG4gMTYzOlx0XHRpbnQgKCp1YWR0KShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gMTY0Olx0XHRcdCAgICBlbnVtIGlwc2V0X2FkdCBhZHQsIHUzMiAqbGluZW5vLCB1MzIgZmxhZ3MsIGJvb2wgcmV0cmllZCk7XG4gMTY1Olx0XG4gMTY2Olx0XHQvKiBMb3cgbGV2ZWwgYWRkL2RlbC90ZXN0IGZ1bmN0aW9ucyAqL1xuIDE2NzpcdFx0aXBzZXRfYWR0Zm4gYWR0W0lQU0VUX0FEVF9NQVhdO1xuIDE2ODpcdFxuIDE2OTpcdFx0LyogV2hlbiBhZGRpbmcgZW50cmllcyBhbmQgc2V0IGlzIGZ1bGwsIHRyeSB0byByZXNpemUgdGhlIHNldCAqL1xuIDE3MDpcdFx0aW50ICgqcmVzaXplKShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZCk7XG4gMTcxOlx0XHQvKiBEZXN0cm95IHRoZSBzZXQgKi9cbiAxNzI6XHRcdHZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgaXBfc2V0ICpzZXQpO1xuIDE3MzpcdFx0LyogRmx1c2ggdGhlIGVsZW1lbnRzICovXG4gMTc0Olx0XHR2b2lkICgqZmx1c2gpKHN0cnVjdCBpcF9zZXQgKnNldCk7XG4gMTc1Olx0XHQvKiBFeHBpcmUgZW50cmllcyBiZWZvcmUgbGlzdGluZyAqL1xuIDE3NjpcdFx0dm9pZCAoKmV4cGlyZSkoc3RydWN0IGlwX3NldCAqc2V0KTtcbiAxNzc6XHRcdC8qIExpc3Qgc2V0IGhlYWRlciBkYXRhICovXG4gMTc4Olx0XHRpbnQgKCpoZWFkKShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY4NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyB0aGF0IEZ1bmN0aW9uIFBvaW50ZXIgQXJyYXkqKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gdGhhdCBgYWR0W0lQU0VUX0FEVF9NQVhdYCBhcnJheSwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgY29sbGVjdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVycy4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgbGlrZWx5IGEgZGlzcGF0Y2ggdGFibGUgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFsbG93aW5nIGZvciBkeW5hbWljIGZ1bmN0aW9uIGNhbGxzIGJhc2VkIG9uIHNvbWUgaW5kZXggb3IgY29uZGl0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgZnVuY3Rpb25zICpkbyouIExldCYjMzk7cyB0cmFjZSB3aGVyZSB0aGF0IGBhZHRgIHZhcmlhYmxlIGlzIGFjdHVhbGx5IHVzZWQuIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHRzIHdoZXJlIHRoZSBhcnJheSBlbGVtZW50cyBhcmUgY2FsbGVkLCBob3cgdGhlIGluZGV4IGlzIGNob3NlbiwgYW5kIHdoYXQgZGF0YSBnZXRzIHBhc3NlZC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgcmVhbCBpbnNpZ2h0IGludG8gdGhlIGludGVudCBvZiB0aGlzIHN0cnVjdHVyZSBhbmQgaXRzIHJlbGF0aW9uIHRvIG90aGVyIGVsZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZHRcXFsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYz0xMTA9Yml0bWFwX2lwX2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTExNC1cdHN0cnVjdCBiaXRtYXBfaXAgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MTE1Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTExNi1cdHN0cnVjdCBiaXRtYXBfaXBfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTEzMD1iaXRtYXBfaXBfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMTMzLVx0c3RydWN0IGJpdG1hcF9pcCAqbWFwID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYzoxMzQ6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMTM1LVx0dTMyIGlwID0gMCwgaXBfdG8gPSAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTIwOT1iaXRtYXBfaXBtYWNfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMjEzLVx0c3RydWN0IGJpdG1hcF9pcG1hYyAqbWFwID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYzoyMTQ6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMjE1LVx0c3RydWN0IGJpdG1hcF9pcG1hY19hZHRfZWxlbSBlID0geyAuaWQgPSAwLCAuYWRkX21hYyA9IDEgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYz0yNDI9Yml0bWFwX2lwbWFjX3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTI0NS1cdGNvbnN0IHN0cnVjdCBiaXRtYXBfaXBtYWMgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM6MjQ2Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTI0Ny1cdHN0cnVjdCBiaXRtYXBfaXBtYWNfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM9MTI3PWJpdG1hcF9wb3J0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMtMTMxLVx0c3RydWN0IGJpdG1hcF9wb3J0ICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6MTMyOlx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMtMTMzLVx0c3RydWN0IGJpdG1hcF9wb3J0X2FkdF9lbGVtIGUgPSB7IC5pZCA9IDAgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTE1Mz1iaXRtYXBfcG9ydF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTE1Ni1cdHN0cnVjdCBiaXRtYXBfcG9ydCAqbWFwID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jOjE1NzpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTE1OC1cdHN0cnVjdCBiaXRtYXBfcG9ydF9hZHRfZWxlbSBlID0geyAuaWQgPSAwIH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jPTgwPWhhc2hfaXA0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy04NC1cdGNvbnN0IHN0cnVjdCBoYXNoX2lwNCAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjg1Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy04Ni1cdHN0cnVjdCBoYXNoX2lwNF9lbGVtIGUgPSB7IDAgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MTAwPWhhc2hfaXA0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0xMDMtXHRzdHJ1Y3QgaGFzaF9pcDQgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzoxMDQ6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTEwNS1cdHN0cnVjdCBoYXNoX2lwNF9lbGVtIGUgPSB7IDAgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MjE2PWhhc2hfaXA2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMjAtXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzoyMjE6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIyMi1cdHN0cnVjdCBoYXNoX2lwNl9lbGVtIGUgPSB7IHsgLmFsbCA9IHsgMCB9IH0gfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MjM0PWhhc2hfaXA2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMzctXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzoyMzg6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIzOS1cdHN0cnVjdCBoYXNoX2lwNl9lbGVtIGUgPSB7IHsgLmFsbCA9IHsgMCB9IH0gfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9ODU9aGFzaF9pcG1hYzRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTg4LXtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo4OTpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtOTAtXHRzdHJ1Y3QgaGFzaF9pcG1hYzRfZWxlbSBlID0geyAuaXAgPSAwLCB7IC5mb29bMF0gPSAwLCAuZm9vWzFdID0gMCB9IH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTExMT1oYXNoX2lwbWFjNF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMTEzLXtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxMTQ6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTExNS1cdHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtIGUgPSB7IC5pcCA9IDAsIHsgLmZvb1swXSA9IDAsIC5mb29bMV0gPSAwIH0gfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9MTk4PWhhc2hfaXBtYWM2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0yMDEte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjIwMjpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMjAzLVx0c3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gZSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9MjI3PWhhc2hfaXBtYWM2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0yMjkte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjIzMDpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMjMxLVx0c3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gZSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTgwPWhhc2hfaXBtYXJrNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTg0LVx0Y29uc3Qgc3RydWN0IGhhc2hfaXBtYXJrNCAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzo4NTpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTg2LVx0c3RydWN0IGhhc2hfaXBtYXJrNF9lbGVtIGUgPSB7IH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz05Nz1oYXNoX2lwbWFyazRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0xMDAtXHRzdHJ1Y3QgaGFzaF9pcG1hcms0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjEwMTpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTEwMi1cdHN0cnVjdCBoYXNoX2lwbWFyazRfZWxlbSBlID0geyB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjE5PWhhc2hfaXBtYXJrNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTIyMy1cdGNvbnN0IHN0cnVjdCBoYXNoX2lwbWFyazYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6MjI0Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjI1LVx0c3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtIGUgPSB7IH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz0yMzY9aGFzaF9pcG1hcms2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjM5LVx0Y29uc3Qgc3RydWN0IGhhc2hfaXBtYXJrNiAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyNDA6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yNDEtXHRzdHJ1Y3QgaGFzaF9pcG1hcms2X2VsZW0gZSA9IHsgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTkxPWhhc2hfaXBwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTk0LXtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6OTU6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy05Ni1cdHN0cnVjdCBoYXNoX2lwcG9ydDRfZWxlbSBlID0geyAuaXAgPSAwIH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz0xMTI9aGFzaF9pcHBvcnQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMTE1LVx0c3RydWN0IGhhc2hfaXBwb3J0NCAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoxMTY6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0xMTctXHRzdHJ1Y3QgaGFzaF9pcHBvcnQ0X2VsZW0gZSA9IHsgLmlwID0gMCB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjY0PWhhc2hfaXBwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI2Ny17XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjI2ODpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI2OS1cdHN0cnVjdCBoYXNoX2lwcG9ydDZfZWxlbSBlID0geyAuaXAgPSB7IC5hbGwgPSB7IDAgfSB9IH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz0yODY9aGFzaF9pcHBvcnQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjg5LVx0Y29uc3Qgc3RydWN0IGhhc2hfaXBwb3J0NiAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyOTA6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0yOTEtXHRzdHJ1Y3QgaGFzaF9pcHBvcnQ2X2VsZW0gZSA9IHsgLmlwID0geyAuYWxsID0geyAwIH0gfSB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz05MD1oYXNoX2lwcG9ydGlwNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtOTMte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjk0Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy05NS1cdHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtIGUgPSB7IC5pcCA9IDAgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9MTA4PWhhc2hfaXBwb3J0aXA0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0xMTEtXHRzdHJ1Y3QgaGFzaF9pcHBvcnRpcDQgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzoxMTI6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTExMy1cdHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtIGUgPSB7IC5pcCA9IDAgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9MjYzPWhhc2hfaXBwb3J0aXA2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNjYte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjI2NzpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMjY4LVx0c3RydWN0IGhhc2hfaXBwb3J0aXA2X2VsZW0gZSA9IHsgLmlwID0geyAuYWxsID0geyAwIH0gfSB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yODE9aGFzaF9pcHBvcnRpcDZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI4NC1cdGNvbnN0IHN0cnVjdCBoYXNoX2lwcG9ydGlwNiAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjI4NTpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMjg2LVx0c3RydWN0IGhhc2hfaXBwb3J0aXA2X2VsZW0gZSA9IHsgIC5pcCA9IHsgLmFsbCA9IHsgMCB9IH0gfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTEzND1oYXNoX2lwcG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xMzgtXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjEzOTpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTE0MC1cdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDRfZWxlbSBlID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTYwPWhhc2hfaXBwb3J0bmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTE2My1cdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDQgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6MTY0Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTY1LVx0c3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIC0gMSB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9Mzk0PWhhc2hfaXBwb3J0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTM5OC1cdGNvbnN0IHN0cnVjdCBoYXNoX2lwcG9ydG5ldDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6Mzk5Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDAwLVx0c3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtIGUgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz00MjA9aGFzaF9pcHBvcnRuZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDIzLVx0Y29uc3Qgc3RydWN0IGhhc2hfaXBwb3J0bmV0NiAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzo0MjQ6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy00MjUtXHRzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0sgLSAxIH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYz03Mz1oYXNoX21hYzRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy03Ni17XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjc3Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNzgtXHRzdHJ1Y3QgaGFzaF9tYWM0X2VsZW0gZSA9IHsgeyAuZm9vWzBdID0gMCwgLmZvb1sxXSA9IDAgfSB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM9OTY9aGFzaF9tYWM0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtOTgte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYzo5OTpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTEwMC1cdHN0cnVjdCBoYXNoX21hYzRfZWxlbSBlID0geyB7IC5mb29bMF0gPSAwLCAuZm9vWzFdID0gMCB9IH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMTM9aGFzaF9uZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTE3LVx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0NCAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMTg6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMTktXHRzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gZSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTEzNj1oYXNoX25ldDRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMzktXHRzdHJ1Y3QgaGFzaF9uZXQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjE0MDpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTE0MS1cdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9Mjg3PWhhc2hfbmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTI5MS1cdGNvbnN0IHN0cnVjdCBoYXNoX25ldDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MjkyOlx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjkzLVx0c3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0zMTA9aGFzaF9uZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMzEyLXtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MzEzOlx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMzE0LVx0c3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTE1Nz1oYXNoX25ldGlmYWNlNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTYxLVx0c3RydWN0IGhhc2hfbmV0aWZhY2U0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MTYyOlx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xNjMtXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSBlID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xOTg9aGFzaF9uZXRpZmFjZTRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTIwMS1cdHN0cnVjdCBoYXNoX25ldGlmYWNlNCAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjIwMjpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMjAzLVx0c3RydWN0IGhhc2hfbmV0aWZhY2U0X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0ssIC5lbGVtID0gMSB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNzg9aGFzaF9uZXRpZmFjZTZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM4Mi1cdHN0cnVjdCBoYXNoX25ldGlmYWNlNiAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM4MzpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzg0LVx0c3RydWN0IGhhc2hfbmV0aWZhY2U2X2VsZW0gZSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9NDE3PWhhc2hfbmV0aWZhY2U2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy00MTkte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjQyMDpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtNDIxLVx0c3RydWN0IGhhc2hfbmV0aWZhY2U2X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0ssIC5lbGVtID0gMSB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTQzPWhhc2hfbmV0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTE0Ny1cdGNvbnN0IHN0cnVjdCBoYXNoX25ldG5ldDQgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MTQ4Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTQ5LVx0c3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtIGUgPSB7IH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0xNjg9aGFzaF9uZXRuZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTcxLVx0c3RydWN0IGhhc2hfbmV0bmV0NCAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxNzI6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0xNzMtXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ0X2VsZW0gZSA9IHsgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTM4ND1oYXNoX25ldG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zODgtXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRuZXQ2ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjM4OTpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTM5MC1cdHN0cnVjdCBoYXNoX25ldG5ldDZfZWxlbSBlID0geyB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9NDE0PWhhc2hfbmV0bmV0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTQxNi17XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjQxNzpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTQxOC1cdHN0cnVjdCBoYXNoX25ldG5ldDZfZWxlbSBlID0geyB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTEyOT1oYXNoX25ldHBvcnQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTEzMy1cdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzoxMzQ6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTM1LVx0c3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSBlID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTE1ND1oYXNoX25ldHBvcnQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTE1Ny1cdHN0cnVjdCBoYXNoX25ldHBvcnQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzoxNTg6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTU5LVx0c3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyAtIDEgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0zNDk9aGFzaF9uZXRwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0zNTMtXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NiAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MzU0Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM1NS1cdHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gZSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0zNzQ9aGFzaF9uZXRwb3J0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0zNzctXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NiAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6Mzc4Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM3OS1cdHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0sgIC0gMSB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTE1MT1oYXNoX25ldHBvcnRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTE1NS1cdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxNTY6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTU3LVx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSBlID0geyB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTE5MD1oYXNoX25ldHBvcnRuZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTE5My1cdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxOTQ6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTk1LVx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSBlID0geyB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTQ0OD1oYXNoX25ldHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQ1Mi1cdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzo0NTM6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDU0LVx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDZfZWxlbSBlID0geyB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTQ3Nz1oYXNoX25ldHBvcnRuZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQ4MC1cdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzo0ODE6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDgyLVx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDZfZWxlbSBlID0geyB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MzUzPWxpc3Rfc2V0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzU2LVx0c3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MzU3Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzU4LVx0c3RydWN0IHNldF9hZHRfZWxlbSBlID0geyAucmVmaWQgPSBJUFNFVF9JTlZBTElEX0lEIH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjcxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggdGhpcyBjb2RlOgoKKipBbmFseXppbmcgYGxpc3Rfc2V0X3VhZHRgKioKClJpZ2h0LCBzbyBgbGlzdF9zZXRfdWFkdGAgaXMgY2FsbGluZyBgc2V0LSZndDt2YXJpYW50LSZndDthZHRbYWR0XWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb3BlcmF0aW9uLiBPa2F5LCBJIGdldCBpdCwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNldCwgYW5kIGl0cyB2YXJpYW50IGlzIGxpa2VseSBhbiBpbXBsZW1lbnRhdGlvbiBvZiBkaWZmZXJlbnQgQURUcyAoQWJzdHJhY3QgRGF0YSBUeXBlcyksIHBvdGVudGlhbGx5IHNvbWV0aGluZyBsaWtlIGEgaGFzaCB0YWJsZSBvciBhIHRyZWUuIFRoaXMgY2FsbCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgdGhlIGBhZHRgdGggZWxlbWVudCB3aXRoaW4gdGhlIHNldCYjMzk7cyBzcGVjaWZpYyBBRFQuICBUaGUgcXVlc3Rpb24gbm93IGlzICp3aHkqPyBXaGF04oCZcyBkcml2aW5nIHRoaXMgY2FsbD8gVGltZSB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgYGxpc3Rfc2V0X3VhZHRgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gTGV0JiMzOTtzIGdvIHNwZWx1bmtpbmcgdGhyb3VnaCB0aGUgY29kZWJhc2UgYW5kIHNlZSB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhpcy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaXN0X3NldF91YWR0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTM1Mj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjM1MzpsaXN0X3NldF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzU0LVx0ICAgICAgZW51bSBpcHNldF9hZHQgYWR0LCB1MzIgKmxpbmVubywgdTMyIGZsYWdzLCBib29sIHJldHJpZWQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz01NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IHNldF92YXJpYW50ID0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NTktXHQua2FkdFx0PSBsaXN0X3NldF9rYWR0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzo1NjA6XHQudWFkdFx0PSBsaXN0X3NldF91YWR0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NjEtXHQuYWR0XHQ9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExOTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVBRFQgQXNzaWdubWVudCBhbmQgVXNhZ2UqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgbGlzdF9zZXRfdWFkdGAgaXMgYmVpbmcgYXNzaWduZWQgdG8gYHNldF92YXJpYW50LnVhZHRgLiBSaWdodCwgYW5kIHRoYXQgYHNldF92YXJpYW50LnVhZHRgIGlzIHRoZW4gaW52b2tlZCBmcm9tIGBpcF9zZXRfY29yZS5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIHRoYXQgYC0mZ3Q7dWFkdGAgbWVtYmVyIHdpdGhpbiBgaXBfc2V0X2NvcmUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIFVBRFQsIG9yIFVzZXItRGVmaW5lZCBBYnN0cmFjdCBEYXRhIFR5cGUsIGlzIGJlaW5nIHV0aWxpemVkIGluIHRoZSBjb3JlIElQIHNldCBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0IG9wZXJhdGlvbnMgYXJlIGJlaW5nIHBlcmZvcm1lZCBvbiBpdC4gSXTigJlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhc3NvY2lhdGVkIHdpdGggaXQsIGFuZCB3aGF0IHRoYXQgZGF0YSBpcyB1c2VkIGZvci4gVGhpcyBpcyBhIGtleSBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc2V0IHZhcmlhbnQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBJUCBzZXQgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDstXHUwMDNldWFkdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTc0Nj1jYWxsX2FkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKmN0bmwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE3NjMtXHRcdGlwX3NldF9sb2NrKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTc2NDpcdFx0cmV0ID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNldWFkdChzZXQsIHRiLCBhZHQsIFx1MDAyNmxpbmVubywgZmxhZ3MsIHJldHJpZWQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE3NjUtXHRcdGlwX3NldF91bmxvY2soc2V0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTg4OD1zdGF0aWMgaW50IGlwX3NldF91dGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xOTExLVx0cmN1X3JlYWRfbG9ja19iaCgpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE5MTI6XHRyZXQgPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2V1YWR0KHNldCwgdGIsIElQU0VUX1RFU1QsIFx1MDAyNmxpbmVubywgMCwgMCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTkxMy1cdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTgwOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGBpcF9zZXRgIGZ1bmN0aW9uYWxpdHkuIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9uIGBjYWxsX2FkYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBib3RoIGBpcF9zZXRfdWFkZGAgYW5kIGBpcF9zZXRfdWRlbGAuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSXQgc3VnZ2VzdHMgdGhhdCB0aGVyZSYjMzk7cyBhIGNvbW1vbiwgc2hhcmVkIGFjdGlvbiBoYXBwZW5pbmcgd2hlbiBhZGRpbmcgb3IgZGVsZXRpbmcgYW4gZWxlbWVudCBpbiBhbiBJUCBzZXQuCgoqKkFuYWx5emluZyB0aGUgYGNhbGxfYWRgIEludGVyYWN0aW9uKioKCk15IGltbWVkaWF0ZSBpbmNsaW5hdGlvbiBpcyB0byB1bmRlcnN0YW5kICp3aHkqIGBjYWxsX2FkYCBpcyBuZWVkZWQgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgYGlwX3NldGAgY29udGV4dC4gSSBzaG91bGQgcmVhbGx5IGRpdmUgaW50byB3aGF0IGBjYWxsX2FkYCBhY3R1YWxseSAqZG9lcyouIElzIGl0IHNvbWUgc29ydCBvZiBhdXhpbGlhcnkgZnVuY3Rpb24/IElzIGl0IGhhbmRsaW5nIG5vdGlmaWNhdGlvbnMsIHBlcmhhcHM/IE9yIG1heWJlIHNvbWUgc29ydCBvZiBjb25maWd1cmF0aW9uIGNoYW5nZT8gV2hhdGV2ZXIgaXQgZG9lcywgdGhlIGZhY3QgdGhhdCBib3RoIGBpcF9zZXRfdWFkZGAgKGFkZGluZykgYW5kIGBpcF9zZXRfdWRlbGAgKGRlbGV0aW5nKSBjYWxsIGl0IHBvaW50cyB0byBpdHMgY29yZSBhbmQgZnVuZGFtZW50YWwgbmF0dXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gY3J5c3RhbCBjbGVhciBvbiB0aGlzLiBOb3cgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBzY3J1dGluaXppbmcgdGhlIGBpcF9zZXRfdWFkZGAgZnVuY3Rpb24uIEkgdGhpbmsgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIG5lZWRlZCBjb250ZXh0IGZvciBgY2FsbF9hZGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldF91YWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xODE4PXN0YXRpYyBpbnQgaXBfc2V0X2FkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKmN0bmwsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NzMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTg3NDpzdGF0aWMgaW50IGlwX3NldF91YWRkKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg3NS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTIxNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIGlwX3NldF9uZXRsaW5rX3N1YnN5c19jYltJUFNFVF9NU0dfTUFYXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjE5NS1cdFtJUFNFVF9DTURfQUREXVx0PSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MjE5NjpcdFx0LmNhbGxcdFx0PSBpcF9zZXRfdWFkZCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTk3LVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfTVVURVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDU0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IHRoaW5raW5nIGdvZXMgbGlrZSB0aGlzOgoKKipBbmFseXppbmcgdGhlIE5ldGxpbmsgQ2FsbGJhY2sgZm9yIElQIFNldCBBZGRpdGlvbioqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBlbnRyeSBwb2ludCwgYXMgSSBzZWUgaXQsIGlzIHRoZSBgaXBfc2V0X3VhZGRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBhIG5ldGxpbmsgY2FsbGJhY2ssIHNvIHRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGF0IEkgbmVlZCB0byBmb2N1cyBvbi4gTm93LCB0aGUga2V5IGZ1bmN0aW9uIHJlbGF0ZWQgdG8gYWRkaW5nIGFuIGVsZW1lbnQgc2hvdWxkIGJlIGVpdGhlciBgaXBfc2V0X3VhZGRgIGl0c2VsZiwgb3IgcGVyaGFwcyBzb21ldGhpbmcgbGlrZSBgbGlzdF9zZXRfdWFkdGAuIEhtbSwgYnV0IHdhaXQgYSBtb21lbnQuLi4gdGhhdCBgbGlzdF9zZXRfdWFkdGAgZnVuY3Rpb24sIGlzbiYjMzk7dCB0aGF0IHN0YXRpYyB3aXRoaW4gYGlwX3NldF9saXN0X3NldC5jYD8gSXQmIzM5O3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkmIzM5O3ZlIGJlZW4gaW4gdGhpcyBjb2RlLiBCZXR0ZXIgZG91YmxlIGNoZWNrLCBjYW4mIzM5O3QgYXNzdW1lIGFueXRoaW5nLiBOZWVkIHRvIHZlcmlmeSB0aGF0LCB0byBlbnN1cmUgSSYjMzk7bSBiYXJraW5nIHVwIHRoZSByaWdodCB0cmVlLCBiZWZvcmUgcHJvY2VlZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlzdF9zZXRfdWFkdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0zNTI9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzozNTM6bGlzdF9zZXRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTM1NC1cdCAgICAgIGVudW0gaXBzZXRfYWR0IGFkdCwgdTMyICpsaW5lbm8sIHUzMiBmbGFncywgYm9vbCByZXRyaWVkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBzZXRfdmFyaWFudCA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTU5LVx0LmthZHRcdD0gbGlzdF9zZXRfa2FkdCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NTYwOlx0LnVhZHRcdD0gbGlzdF9zZXRfdWFkdCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTYxLVx0LmFkdFx0PSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDI2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgdGhlIFN0YXRpYyBEZWNsYXJhdGlvbiBvZiBgaXBfc2V0X3VhZGRgKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBsaXN0X3NldF91YWR0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGBpcF9zZXRfdWFkZGAgZnVuY3Rpb24gaXMgYWxzbyBkZWNsYXJlZCBhcyBzdGF0aWMuIEkgcmVjYWxsIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBpcF9zZXRfY29yZS5jYCwgYnV0IEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0byBiZSBjZXJ0YWluLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGFuZCBleGFtaW5lIHRoZSBjb2RlIGluIGBpcF9zZXRfY29yZS5jYCBhbmQgc2VhcmNoIGZvciB0aGF0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHRvIGNvbmZpcm0gaXRzIHN0YXR1cy4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldF91YWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xODE4PXN0YXRpYyBpbnQgaXBfc2V0X2FkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKmN0bmwsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NzMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTg3NDpzdGF0aWMgaW50IGlwX3NldF91YWRkKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg3NS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTIxNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIGlwX3NldF9uZXRsaW5rX3N1YnN5c19jYltJUFNFVF9NU0dfTUFYXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjE5NS1cdFtJUFNFVF9DTURfQUREXVx0PSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MjE5NjpcdFx0LmNhbGxcdFx0PSBpcF9zZXRfdWFkZCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTk3LVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfTVVURVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTY2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJUCBTZXQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gYGlwX3NldF91YWRkYCBpcyBkZWZpbml0ZWx5IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBsaW1pdHMgaXRzIGRpcmVjdCB1c2FnZSBmcm9tIG91dHNpZGUgdGhlIGN1cnJlbnQgbW9kdWxlLiBJIG5lZWQgdG8gZmluZCBhIHdheSB0byBtYW5pcHVsYXRlIHRoZSBJUCBzZXRzIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgYW5kIHRoYXQgbWVhbnMgSSBuZWVkIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZGVsdmUgaW50byBgaXBfc2V0X2NvcmUuY2AgYW5kIHNlZSB3aGF0IHB1YmxpY2x5IGF2YWlsYWJsZSBmdW5jdGlvbnMgaXQgZGVmaW5lcy4gSG9wZWZ1bGx5LCB0aGVyZSYjMzk7cyBhIGdvb2Qgc2V0IG9mIGV4cG9ydGVkIGZ1bmN0aW9ucyB0byBkbyB3aGF0IEkgbmVlZCEgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IEFQSSBmdW5jdGlvbnMgdGhhdCBJIGNhbiBsZXZlcmFnZSB0byB3b3JrIHdpdGggSVAgc2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MjA2PWlwX3NldF90eXBlX3JlZ2lzdGVyKHN0cnVjdCBpcF9zZXRfdHlwZSAqdHlwZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjM0LX1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMzU6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X3R5cGVfcmVnaXN0ZXIpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIzNi1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MjM5PWlwX3NldF90eXBlX3VucmVnaXN0ZXIoc3RydWN0IGlwX3NldF90eXBlICp0eXBlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yNTUtfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjI1NjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfdHlwZV91bnJlZ2lzdGVyKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yNTctXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTI2MD1pcF9zZXRfYWxsb2Moc2l6ZV90IHNpemUpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTI2My19XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MjY0OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9hbGxvYyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjY1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yNjc9aXBfc2V0X2ZyZWUodm9pZCAqbWVtYmVycylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjcyLX1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyNzM6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2ZyZWUpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTI3NC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9Mjg3PWlwX3NldF9nZXRfaXBhZGRyNChzdHJ1Y3QgbmxhdHRyICpubGEsICBfX2JlMzIgKmlwYWRkcilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMzAxLX1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzozMDI6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2dldF9pcGFkZHI0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zMDMtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTMwNT1pcF9zZXRfZ2V0X2lwYWRkcjYoc3RydWN0IG5sYXR0ciAqbmxhLCB1bmlvbiBuZl9pbmV0X2FkZHIgKmlwYWRkcilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMzIxLX1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzozMjI6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2dldF9pcGFkZHI2KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zMjMtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTM0Nz1pcF9zZXRfaW5pdF9jb21tZW50KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNjgtfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjM2OTpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfaW5pdF9jb21tZW50KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNzAtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTQwND1jb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dF90eXBlIGlwX3NldF9leHRlbnNpb25zW10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTQyOS19O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjQzMDpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfZXh0ZW5zaW9ucyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNDMxLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz00NDE9aXBfc2V0X2VsZW1fbGVuKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSwgc2l6ZV90IGxlbixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNDY0LX1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo0NjU6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2VsZW1fbGVuKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy00NjYtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTQ2OD1pcF9zZXRfZ2V0X2V4dGVuc2lvbnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy01MjEtfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjUyMjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfZ2V0X2V4dGVuc2lvbnMpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTUyMy1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NTY1PWlwX3NldF9wdXRfZXh0ZW5zaW9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTU4Ni19XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NTg3OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9wdXRfZXh0ZW5zaW9ucyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNTg4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz02Mzk9aXBfc2V0X21hdGNoX2V4dGVuc2lvbnMoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy02NjEtfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjY2MjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfbWF0Y2hfZXh0ZW5zaW9ucyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNjYzLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz03NDE9aXBfc2V0X3Rlc3QoaXBfc2V0X2lkX3QgaW5kZXgsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTc3My19XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6Nzc0OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF90ZXN0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03NzUtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTc3Nz1pcF9zZXRfYWRkKGlwX3NldF9pZF90IGluZGV4LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03OTUtfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjc5NjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfYWRkKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03OTctXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTc5OT1pcF9zZXRfZGVsKGlwX3NldF9pZF90IGluZGV4LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04MTctfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjgxODpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfZGVsKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04MTktXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTgyNT1pcF9zZXRfZ2V0X2J5bmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKm5hbWUsIHN0cnVjdCBpcF9zZXQgKipzZXQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTg0NC19XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6ODQ1OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9nZXRfYnluYW1lKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04NDYtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTg2Nj1pcF9zZXRfcHV0X2J5aW5kZXgoc3RydWN0IG5ldCAqbmV0LCBpcF9zZXRfaWRfdCBpbmRleClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtODcxLX1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo4NzI6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X3B1dF9ieWluZGV4KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04NzMtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTg4MD1pcF9zZXRfbmFtZV9ieWluZGV4KHN0cnVjdCBuZXQgKm5ldCwgaXBfc2V0X2lkX3QgaW5kZXgsIGNoYXIgKm5hbWUpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTg4OS19XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6ODkwOkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9uYW1lX2J5aW5kZXgpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTg5MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9OTAyPWlwX3NldF9uZm5sX2dldF9ieWluZGV4KHN0cnVjdCBuZXQgKm5ldCwgaXBfc2V0X2lkX3QgaW5kZXgpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTkxOS19XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6OTIwOkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9uZm5sX2dldF9ieWluZGV4KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy05MjEtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTkyOT1pcF9zZXRfbmZubF9wdXQoc3RydWN0IG5ldCAqbmV0LCBpcF9zZXRfaWRfdCBpbmRleClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtOTQxLX1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo5NDI6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X25mbmxfcHV0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy05NDMtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE0NTk9aXBfc2V0X3B1dF9mbGFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE0NzktfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE0ODA6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X3B1dF9mbGFncyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTQ4MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzMzIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBFeHBvcnRlZCBgaXBfc2V0X2FkZGAgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIGBpcF9zZXRfYWRkYCBpcyBleHBvcnRlZC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIGtleSBhcmVhIGZvciBhbmFseXNpcy4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0cyBleHBvcnQsIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBpdHMgaW1wbGVtZW50YXRpb24gd2l0aGluIGBpcF9zZXRfY29yZS5jYC4gVGhpcyBmdW5jdGlvbiBpcyBmdW5kYW1lbnRhbCB0byB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgY29yZSBJUCBzZXQgZnVuY3Rpb25hbGl0eSwgc28gdW5kZXJzdGFuZGluZyBpdHMgaW50ZXJuYWwgd29ya2luZ3MgaXMgY3J1Y2lhbC4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IGl04oCZcyBoYW5kbGluZyB0aGUgYWRkaXRpb24gb2YgZWxlbWVudHMgdG8gdGhlIHNldCwgdGhlIGVycm9yIGNoZWNraW5nIGludm9sdmVkLCBhbnkgbG9ja2luZyBtZWNoYW5pc21zIGl0IGVtcGxveXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIG9wZXJhdGlvbiBsaWVzLCBhbmQgYSBxdWljayBnbGFuY2UgYXQgdGhlIHNvdXJjZSB3aWxsIHRlbGwgbWUgdm9sdW1lcy4gVGhlIGRlc2lnbiBjaG9pY2VzIG1hZGUgaGVyZSBpbXBhY3QgcGVyZm9ybWFuY2UsIGNvbmN1cnJlbmN5LCBhbmQgc2VjdXJpdHkuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfc2V0X2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NjA3PXN0YXRpYyB2b2lkXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NjA4OmlwX3NldF9hZGRfYnl0ZXModTY0IGJ5dGVzLCBzdHJ1Y3QgaXBfc2V0X2NvdW50ZXIgKmNvdW50ZXIpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNjA5LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NjEzPXN0YXRpYyB2b2lkXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NjE0OmlwX3NldF9hZGRfcGFja2V0cyh1NjQgcGFja2V0cywgc3RydWN0IGlwX3NldF9jb3VudGVyICpjb3VudGVyKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTYxNS17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTYyMD1pcF9zZXRfdXBkYXRlX2NvdW50ZXIoc3RydWN0IGlwX3NldF9jb3VudGVyICpjb3VudGVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy02MjQtXHQgICAgIShmbGFncyBcdTAwMjYgSVBTRVRfRkxBR19TS0lQX0NPVU5URVJfVVBEQVRFKSkge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjYyNTpcdFx0aXBfc2V0X2FkZF9ieXRlcyhleHQtXHUwMDNlYnl0ZXMsIGNvdW50ZXIpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjYyNjpcdFx0aXBfc2V0X2FkZF9wYWNrZXRzKGV4dC1cdTAwM2VwYWNrZXRzLCBjb3VudGVyKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy02MjctXHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTc3Nj1pbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo3Nzc6aXBfc2V0X2FkZChpcF9zZXRfaWRfdCBpbmRleCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03NzgtXHQgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsIHN0cnVjdCBpcF9zZXRfYWR0X29wdCAqb3B0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03OTUtfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjc5NjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfYWRkKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03OTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTMyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBgaXBzZXRgIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgaXBzZXRgIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgZWxlbWVudCBhZGRpdGlvbiBwcm9jZXNzLiBJIGtub3cgYGlwX3NldF9hZGRgIGlzIHRoZSBrZXJuZWwtc2lkZSBmdW5jdGlvbiwgdGhhdCYjMzk7cyB0aGUgb25lIHRoYXQgYWN0dWFsbHkgZG9lcyB0aGUgd29yayBvZiBhZGRpbmcgdGhlIElQIGFkZHJlc3Mgb3IgbmV0d29yayB0byB0aGUgc2V0IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGRhdGEgc3RydWN0dXJlcy4gQnV0LCBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCB0aGUgaXNzdWUsIHRoZSBidWcgSSYjMzk7bSB0cmFja2luZyBkb3duLCBpcyBhY3R1YWxseSB3aXRoaW4gYGxpc3Rfc2V0X3VhZGRgLiBIYW5nIG9uLCB3YXNuJiMzOTt0IHRoYXQgdGhlIHVzZXJzcGFjZSBBUEk/IEFoIHllcywgYHVhZGRgIHN0YW5kcyBmb3IgdXNlcnNwYWNlIGFkZCwgZ290IGl0LgoKT2theSwgc28gYGxpc3Rfc2V0X3VhZGRgIGlzIHRoZSBoYW5kbGVyIGZvciBgW0lQU0VUX0FERF1gIGNvbW1hbmQgdXNlZCBvbiBhIGBsaXN0OnNldGAgdHlwZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZyB0aGUgY29ycmVjdCBleGVjdXRpb24gcGF0aCBoZXJlLiBMZXQgbWUgY2lyY2xlIGJhY2sgYW5kIHJlLWV4YW1pbmUgYGxpc3Rfc2V0X3VhZGRgIHZlcnkgY2FyZWZ1bGx5LiBOZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZSB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlcmZhY2luZyB3aXRoIHRoZSBrZXJuZWwgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgbWlnaHQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xpc3Rfc2V0X3VhZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MjM1PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MjM2Omxpc3Rfc2V0X3VhZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMjM3LVx0ICAgICAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTU1OD1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgc2V0X3ZhcmlhbnQgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NjEtXHQuYWR0XHQ9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NTYyOlx0XHRbSVBTRVRfQUREXSA9IGxpc3Rfc2V0X3VhZGQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTU2My1cdFx0W0lQU0VUX0RFTF0gPSBsaXN0X3NldF91ZGVsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzc2NgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBgbGlzdF9zZXRfdWFkZGAgVXNhZ2UqKgoKQWxyaWdodCwgc28gYGxpc3Rfc2V0X3VhZGRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIHR3byBkaXN0aW5jdCBjb250ZXh0czogdGhlIHVzZXJzcGFjZSBmdW5jdGlvbiBgbGlzdF9zZXRfdWFkdGAgYW5kIHRoZSBrZXJuZWxzcGFjZSBmdW5jdGlvbiBgbGlzdF9zZXRfa2FkdGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBpbW1lZGlhdGVseSByYWlzZXMgc29tZSBxdWVzdGlvbnMgYWJvdXQgaG93IHdlJiMzOTtyZSBoYW5kbGluZyBkYXRhIHRyYW5zaXRpb25zIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBCZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gdGhlIHJhYmJpdCBob2xlIG9mIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhlIGxvd2VyIGxldmVsIHdpdGggYGxpc3Rfc2V0X2thZHRgLiBMZXQgbWUgZmlyc3Qgem9vbSBpbiBvbiB0aGF0IGtlcm5lbHNwYWNlIGNhbGwgdG8gc2VlIHdoYXQgaXTigJlzIGRvaW5nLCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCwgYW5kIHdoYXQgZGF0YSBpdCYjMzk7cyBvcGVyYXRpbmcgb24uIFRoYXTigJlsbCBnaXZlIG1lIGEgc29saWQgYmFzZSB0byB1bmRlcnN0YW5kIGFueSBpc3N1ZXMgdGhhdCBtaWdodCBiZSBlbWVyZ2luZyBmcm9tIGludGVyYWN0aW9ucyBiZXR3ZWVuIHVzZXJzcGFjZSBhbmQgdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaXN0X3NldF9rYWR0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTExMz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjExNDpsaXN0X3NldF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMTE1LVx0ICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBzZXRfdmFyaWFudCA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NTU5Olx0LmthZHRcdD0gbGlzdF9zZXRfa2FkdCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTYwLVx0LnVhZHRcdD0gbGlzdF9zZXRfdWFkdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyOTcKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgYGxpc3Rfc2V0X2thZHRgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBhIGtleSBkZXRhaWwgaW4gdGhlIGBsaXN0X3NldF9rYWR0YCBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvci4gVGhlIGNlbnRyYWwgcXVlc3Rpb24gaW4gbXkgbWluZCByaWdodCBub3cgaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGludGVyYWN0cyB3aXRoIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlIOKAkyBzcGVjaWZpY2FsbHksIGRvZXMgaXQgdWx0aW1hdGVseSBtYWtlIGEgY2FsbCB0byBgc2V0LSZndDt2YXJpYW50LSZndDthZHRbYWR0XWA/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMsIHdlbGwsICp0aGUqIHVuZGVybHlpbmcgQURULiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBkaXJlY3RseSBhY2Nlc3NlcyBhbmQgbWFuaXB1bGF0ZXMgdGhlIEFEVCB0aHJvdWdoIHRoYXQgYHZhcmlhbnRgIHBvaW50ZXIgYW5kIGFycmF5IGFjY2Vzcy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gY29uZmlybSBob3cgdGhlIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0YS4gVGhpcyBkaXJlY3QgbGluayBpcyBjcml0aWNhbCBmb3IgaG93IHRoaXMgZmVhdHVyZSBpcyBkZXNpZ25lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTM6XHRzdGF0aWMgaW50XG4gMTE0Olx0bGlzdF9zZXRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gMTE1Olx0XHQgICAgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsXG4gMTE2Olx0XHQgICAgICBlbnVtIGlwc2V0X2FkdCBhZHQsIHN0cnVjdCBpcF9zZXRfYWR0X29wdCAqb3B0KVxuIDExNzpcdHtcbiAxMTg6XHRcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gMTE5Olx0XHRpbnQgcmV0ID0gLUVJTlZBTDtcbiAxMjA6XHRcbiAxMjE6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAxMjI6XHRcdHN3aXRjaCAoYWR0KSB7XG4gMTIzOlx0XHRjYXNlIElQU0VUX1RFU1Q6XG4gMTI0Olx0XHRcdHJldCA9IGxpc3Rfc2V0X2t0ZXN0KHNldCwgc2tiLCBwYXIsIG9wdCwgXHUwMDI2ZXh0KTtcbiAxMjU6XHRcdFx0YnJlYWs7XG4gMTI2Olx0XHRjYXNlIElQU0VUX0FERDpcbiAxMjc6XHRcdFx0cmV0ID0gbGlzdF9zZXRfa2FkZChzZXQsIHNrYiwgcGFyLCBvcHQsIFx1MDAyNmV4dCk7XG4gMTI4Olx0XHRcdGJyZWFrO1xuIDEyOTpcdFx0Y2FzZSBJUFNFVF9ERUw6XG4gMTMwOlx0XHRcdHJldCA9IGxpc3Rfc2V0X2tkZWwoc2V0LCBza2IsIHBhciwgb3B0LCBcdTAwMjZleHQpO1xuIDEzMTpcdFx0XHRicmVhaztcbiAxMzI6XHRcdGRlZmF1bHQ6XG4gMTMzOlx0XHRcdGJyZWFrO1xuIDEzNDpcdFx0fVxuIDEzNTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMTM2Olx0XG4gMTM3Olx0XHRyZXR1cm4gcmV0O1xuIDEzODpcdH1cbiAxMzk6XHRcbiAxNDA6XHQvKiBVc2Vyc3BhY2UgaW50ZXJmYWNlczogd2UgYXJlIHByb3RlY3RlZCBieSB0aGUgbmZubCBtdXRleCAqL1xuIDE0MTpcdFxuIDE0MjpcdHN0YXRpYyB2b2lkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTcxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlRyYWNpbmcgdGhlIERlcGVuZGVuY3kqKgoKUmlnaHQsIHNvIGBsaXN0X3NldF9rYWR0YC4uLiBpdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IHRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIGBsaXN0X3NldF9rYWRkYC4gTm8gc3VycHJpc2VzIHRoZXJlOyB0aGV5JiMzOTtyZSBwcm9iYWJseSBkZXNpZ25lZCB0byB3b3JrIGluIHRhbmRlbS4gTXkgZmlyc3QgaW5zdGluY3QsIHRoZW4sIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgYGxpc3Rfc2V0X2thZGRgLiBVbmRlcnN0YW5kaW5nICp0aGF0KiBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBrZXkgdG8gZ3Jhc3BpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcGFyYW1ldGVycywgaXRzIHJldHVybiB2YWx1ZSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2lkZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlzdF9zZXRfa2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz03Mz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjc0Omxpc3Rfc2V0X2thZGQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy03NS1cdCAgICAgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTExND1saXN0X3NldF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTEyNi1cdGNhc2UgSVBTRVRfQUREOlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoxMjc6XHRcdHJldCA9IGxpc3Rfc2V0X2thZGQoc2V0LCBza2IsIHBhciwgb3B0LCBcdTAwMjZleHQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0xMjgtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ1NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYGxpc3Rfc2V0X2thZGRgKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBvbiBgbGlzdF9zZXRfa2FkZGAuIE15IGV4cGVydCBicmFpbiBpbW1lZGlhdGVseSBzdGFydHMgdGhpbmtpbmc6ICpXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/IElzIHRoaXMgYSBkYXRhIHN0cnVjdHVyZSBmdW5jdGlvbj8gQSBsaWJyYXJ5IGNhbGw/IEEgc3BlY2lmaWMgQVBJIHdpdGhpbiBhIGRhdGFiYXNlPyogVGhlIG5hbWUgaW1wbGllcyBzb21lIGludGVyYWN0aW9uIGJldHdlZW4gbGlzdHMsIHNldHMsIGFuZCBhIGtleSwgYW5kIHRoZW4gKmFkZGl0aW9uKi4gTXkgYmFja2dyb3VuZCB0ZWxscyBtZSB0aGF0IGBrYWRkYCBzdWdnZXN0cyBhZGRpbmcgZWxlbWVudHMgdG8gYSBrZXksIGFuZCB0aGUgY29tYmluZWQgJiMzNDtsaXN0JiMzNDsgYW5kICYjMzQ7c2V0JiMzNDsgYXNwZWN0IGlzIHRoZSBwYXJ0IHRoYXQgY2F0Y2hlcyBteSBleWUuCgoqICAgKkFyZSB3ZSBkZWFsaW5nIHdpdGggYW4gb3JkZXJlZCBjb2xsZWN0aW9uIChsaXN0KSBhbmQgYW4gdW5vcmRlcmVkLCB1bmlxdWUgY29sbGVjdGlvbiAoc2V0KSBzaW11bHRhbmVvdXNseSwgcGVyaGFwcyBzdG9yaW5nIHRoZSBsaXN0IGFuZCBzZXQgYXMgc2VwYXJhdGUgZW50aXRpZXMgYnV0IGhhdmluZyB0aGVtIHJlbGF0ZWQgYnkgdGhlIHNhbWUga2V5PyogT3IsIGlzIHRoaXMgc29tZSBoeWJyaWQgZGF0YSBzdHJ1Y3R1cmU/IElzIHRoZSBsaXN0IGludGVuZGVkIHRvIG1haW50YWluIG9yZGVyLCB3aXRoIHRoZSBzZXQgZW5zdXJpbmcgbm8gZHVwbGljYXRlcyB3aGVuIG5ldyBlbGVtZW50cyBhcmUgYWRkZWQ/IEkgaW1tZWRpYXRlbHkgc3RhcnQgY29tcGFyaW5nIHRoaXMgd2l0aCBhbHRlcm5hdGl2ZSBkYXRhIHN0cnVjdHVyZSBwb3NzaWJpbGl0aWVzOiB3aGF0JiMzOTtzIHRoZSB1c2UgY2FzZT8gQ291bGQgdGhpcyBiZSB1c2VmdWwgZm9yIG1haW50YWluaW5nIGEgaGlzdG9yeSBvZiBzb21ldGhpbmcgaW4gdGhlIGxpc3QsIHRoZW4gdXNpbmcgdGhlIHNldCB0byBmaW5kIGR1cGxpY2F0ZXMsIG9yIGEgZmFzdCBsb29rdXAgb24gdGhlIGxpc3QgY29udGVudD8gSSB3b25kZXIgYWJvdXQgaG93IHRoZSBpbnNlcnRpb24gdGltZSBvZiB0aGUgbGlzdCBhbmQgc2V0IG9wZXJhdGlvbnMgaW1wYWN0IHBlcmZvcm1hbmNlLgoqICAgKldoYXQmIzM5O3MgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24/KiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBvciBsZXZlcmFnaW5nIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gYSBwcm9ncmFtbWluZyBsYW5ndWFnZSBvciBkYXRhYmFzZT8gS25vd2luZyB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBpcyBrZXkgdG8gZXZhbHVhdGluZyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgbGlrZSB0aW1lIGNvbXBsZXhpdHkgZm9yIGRpZmZlcmVudCBvcGVyYXRpb25zIChhZGRpbmcgdG8gdGhlIGxpc3QsIGFkZGluZyB0byB0aGUgc2V0LCBjaGVja2luZyBmb3IgbWVtYmVyc2hpcCBpbiBlaXRoZXIgc3RydWN0dXJlLCBldGMuKS4KCkkmIzM5O20gYWxzbyBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGRvd25zaWRlcy4gKklzIHRoZXJlIGEgbWVtb3J5IG92ZXJoZWFkIGhlcmU/IE1haW50YWluaW5nIGJvdGggc3RydWN0dXJlcyBmb3IgdGhlIHNhbWUga2V5IGNvdWxkIGJlIGNvc3RseSwgcGFydGljdWxhcmx5IGlmIHRoZSBkYXRhc2V0IGlzIGxhcmdlLiogSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBjb25mbGljdHMgYW5kIHVuaXF1ZW5lc3MuIERvZXMgaXQgcmVwbGFjZSBhbiBleGlzdGluZyBsaXN0IG9yIHNldD8gT3IgbWVyZ2Ugb3IgYXBwZW5kIHRvIHRoZSBleGlzdGluZyBsaXN0IG9yIHNldD8gT3IsIGRvZXMgaXQgcmV0dXJuIGFuIGVycm9yPwoKVWx0aW1hdGVseSwgbXkgdGhvdWdodHMgYXJlIGdvaW5nIHRvd2FyZCB3aGF0IHRoZSBmdW5jdGlvbiBhY2NvbXBsaXNoZXMgZnJvbSB0aGUgZ3JvdW5kIHVwLCBhbmQgdGhlbiBjb21wYXJpbmcgaXQgdG8gd2hhdCBJIGtub3cgdG8gYXJyaXZlIGF0IGl0cyBwb3NzaWJsZSB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDczLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzM6XHRzdGF0aWMgaW50XG4gIDc0Olx0bGlzdF9zZXRfa2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gIDc1Olx0XHQgICAgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsXG4gIDc2Olx0XHQgICAgICBzdHJ1Y3QgaXBfc2V0X2FkdF9vcHQgKm9wdCwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dClcbiAgNzc6XHR7XG4gIDc4Olx0XHRzdHJ1Y3QgbGlzdF9zZXQgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xuICA3OTpcdFx0c3RydWN0IHNldF9lbGVtICplO1xuICA4MDpcdFx0aW50IHJldDtcbiAgODE6XHRcbiAgODI6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsIFx1MDAyNm1hcC1cdTAwM2VtZW1iZXJzLCBsaXN0KSB7XG4gIDgzOlx0XHRcdGlmIChTRVRfV0lUSF9USU1FT1VUKHNldCkgXHUwMDI2XHUwMDI2XG4gIDg0Olx0XHRcdCAgICBpcF9zZXRfdGltZW91dF9leHBpcmVkKGV4dF90aW1lb3V0KGUsIHNldCkpKVxuICA4NTpcdFx0XHRcdGNvbnRpbnVlO1xuICA4NjpcdFx0XHRyZXQgPSBpcF9zZXRfYWRkKGUtXHUwMDNlaWQsIHNrYiwgcGFyLCBvcHQpO1xuICA4NzpcdFx0XHRpZiAocmV0ID09IDApXG4gIDg4Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAgODk6XHRcdH1cbiAgOTA6XHRcdHJldHVybiAwO1xuICA5MTpcdH1cbiAgOTI6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyNjYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIGBsaXN0X3NldGAgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGVzZSBgbGlzdF9zZXRgIG9wZXJhdGlvbnMgd29yay4gVGhlIHRoaW5nIHRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgZ3JhYmJpbmcgbXkgYXR0ZW50aW9uIGlzIHRoYXQgYGxpc3Rfc2V0X2thZGRgICpkb2VzbiYjMzk7dCogYXBwZWFyIHRvIGNhbGwgYGxpc3Rfc2V0X3VhZGRgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBiZWNhdXNlIHVzdWFsbHkgeW91JiMzOTtkIGV4cGVjdCBhIG1vcmUgZ3JhbnVsYXIgYWRkIGZ1bmN0aW9uIGxpa2UgYHVhZGRgICh3aGljaCBwcmVzdW1hYmx5IHN0YW5kcyBmb3IgJiMzNDt1bmlxdWUgYWRkJiMzNDsgb3Igc29tZXRoaW5nIHNpbWlsYXIpIHRvIGJlIGEgYnVpbGRpbmcgYmxvY2sgZm9yIG1vcmUgY29tcGxleCBvcGVyYXRpb25zLgoKSXQgc2VlbXMgYGxpc3Rfc2V0X3VhZGRgIGlzIG9ubHkgaW52b2tlZCBmcm9tIGBsaXN0X3NldF91YWR0YC4gVGhpcyBzdWdnZXN0cyBhIHNwZWNpZmljIHJlbGF0aW9uc2hpcCBvciBvcHRpbWl6YXRpb24sIHBlcmhhcHMgdGllZCB0byBob3cgJiMzNDt1bmlxdWUmIzM0OyBhZGRpdGlvbnMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBicm9hZGVyIGBsaXN0X3NldGAgY29udGV4dC4KClRoZXJlZm9yZSwgbGV0JiMzOTtzIHNoaWZ0IG91ciBmb2N1cyB0byBgbGlzdF9zZXRfdWFkdGAgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgbG9naWMgdGhlcmUuIFRoYXQmIzM5O3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgd2h5IGB1YWRkYCBpcyBiZWluZyB1c2VkIHRoZSB3YXkgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUyOlx0c3RhdGljIGludFxuIDM1MzpcdGxpc3Rfc2V0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIDM1NDpcdFx0ICAgICAgZW51bSBpcHNldF9hZHQgYWR0LCB1MzIgKmxpbmVubywgdTMyIGZsYWdzLCBib29sIHJldHJpZWQpXG4gMzU1Olx0e1xuIDM1NjpcdFx0c3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbiAzNTc6XHRcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gMzU4Olx0XHRzdHJ1Y3Qgc2V0X2FkdF9lbGVtIGUgPSB7IC5yZWZpZCA9IElQU0VUX0lOVkFMSURfSUQgfTtcbiAzNTk6XHRcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbiAzNjA6XHRcdHN0cnVjdCBpcF9zZXQgKnM7XG4gMzYxOlx0XHRpbnQgcmV0ID0gMDtcbiAzNjI6XHRcbiAzNjM6XHRcdGlmICh0YltJUFNFVF9BVFRSX0xJTkVOT10pXG4gMzY0Olx0XHRcdCpsaW5lbm8gPSBubGFfZ2V0X3UzMih0YltJUFNFVF9BVFRSX0xJTkVOT10pO1xuIDM2NTpcdFxuIDM2NjpcdFx0aWYgKHVubGlrZWx5KCF0YltJUFNFVF9BVFRSX05BTUVdIHx8XG4gMzY3Olx0XHRcdCAgICAgIWlwX3NldF9vcHRhdHRyX25ldG9yZGVyKHRiLCBJUFNFVF9BVFRSX0NBRFRfRkxBR1MpKSlcbiAzNjg6XHRcdFx0cmV0dXJuIC1JUFNFVF9FUlJfUFJPVE9DT0w7XG4gMzY5Olx0XG4gMzcwOlx0XHRyZXQgPSBpcF9zZXRfZ2V0X2V4dGVuc2lvbnMoc2V0LCB0YiwgXHUwMDI2ZXh0KTtcbiAzNzE6XHRcdGlmIChyZXQpXG4gMzcyOlx0XHRcdHJldHVybiByZXQ7XG4gMzczOlx0XHRlLmlkID0gaXBfc2V0X2dldF9ieW5hbWUobWFwLVx1MDAzZW5ldCwgdGJbSVBTRVRfQVRUUl9OQU1FXSwgXHUwMDI2cyk7XG4gMzc0Olx0XHRpZiAoZS5pZCA9PSBJUFNFVF9JTlZBTElEX0lEKVxuIDM3NTpcdFx0XHRyZXR1cm4gLUlQU0VUX0VSUl9OQU1FO1xuIDM3NjpcdFx0LyogXCYjMzQ7TG9vcCBkZXRlY3Rpb25cJiMzNDsgKi9cbiAzNzc6XHRcdGlmIChzLVx1MDAzZXR5cGUtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IElQU0VUX1RZUEVfTkFNRSkge1xuIDM3ODpcdFx0XHRyZXQgPSAtSVBTRVRfRVJSX0xPT1A7XG4gMzc5Olx0XHRcdGdvdG8gZmluaXNoO1xuIDM4MDpcdFx0fVxuIDM4MTpcdFxuIDM4MjpcdFx0aWYgKHRiW0lQU0VUX0FUVFJfQ0FEVF9GTEFHU10pIHtcbiAzODM6XHRcdFx0dTMyIGYgPSBpcF9zZXRfZ2V0X2gzMih0YltJUFNFVF9BVFRSX0NBRFRfRkxBR1NdKTtcbiAzODQ6XHRcbiAzODU6XHRcdFx0ZS5iZWZvcmUgPSBmIFx1MDAyNiBJUFNFVF9GTEFHX0JFRk9SRTtcbiAzODY6XHRcdH1cbiAzODc6XHRcbiAzODg6XHRcdGlmIChlLmJlZm9yZSBcdTAwMjZcdTAwMjYgIXRiW0lQU0VUX0FUVFJfTkFNRVJFRl0pIHtcbiAzODk6XHRcdFx0cmV0ID0gLUlQU0VUX0VSUl9CRUZPUkU7XG4gMzkwOlx0XHRcdGdvdG8gZmluaXNoO1xuIDM5MTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTI3NgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBhbmQgbXkgaW50ZXJuYWwgbW9ub2xvZ3VlIG9uIHRoZSBtYXR0ZXI6CgoqKkRpc3NlY3RpbmcgdGhlIGBhZHRmbmAgQ2FsbCoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgbGluZSBvZiBjb2RlLCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgYWR0Zm5gIHdpdGggdGhlIHBhcmFtZXRlcnMgYHNldGAsIGAmYW1wO2VgLCBgJmFtcDtleHRgLCBgJmFtcDtleHRgLCBhbmQgYGZsYWdzYC4gVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGllY2UgaGVyZSBpcyB0aGUgdXNlIG9mIHRob3NlICZhbXA7ZXh0IHBhcmFtZXRlcnMuIFNpbmNlIEkga25vdyB0aGlzIGNvZGUsIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIGRhdGEgc3RydWN0dXJlcy4gVGhlIHVzZSBvZiB0aGUgYWRkcmVzcy1vZiBvcGVyYXRvciBpbXBsaWVzIHRoZXNlIGFyZSBwcm9iYWJseSBwb2ludGVycy4gTGV0JiMzOTtzIHNlZS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYWR0Zm5gIGRvZXMgYW5kIHNwZWNpZmljYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggYHNldGAsIGBlYCwgYGV4dGAsIGFuZCB0aGVzZSBgZmxhZ3NgLiBUaGlzIHByb2JhYmx5IG1lYW5zIEkgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBkZWZpbml0aW9ucyBmb3IgdGhlc2UgdmFyaWFibGVzIHRvbywgYnV0IGxldCYjMzk7cyBnbyB3aXRoIHRoZSBjYWxsIGl0c2VsZiBmb3Igbm93LiBJJiMzOTttIGFzc3VtaW5nIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGVsc2V3aGVyZSBhcyB3ZWxsLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGdvIGZpbmQgaXRzIGRlZmluaXRpb24uIE5vdyB0aGF0IEkgaGF2ZSB0aGlzIGFzIHRoZSBzdGFydGluZyBwb2ludCwgbGV0JiMzOTtzIGxvb2sgYXQgYGxpc3Rfc2V0X3VhZHRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5MjpcdFxuIDM5MzpcdFx0aWYgKHRiW0lQU0VUX0FUVFJfTkFNRVJFRl0pIHtcbiAzOTQ6XHRcdFx0ZS5yZWZpZCA9IGlwX3NldF9nZXRfYnluYW1lKG1hcC1cdTAwM2VuZXQsXG4gMzk1Olx0XHRcdFx0XHRcdCAgICB0YltJUFNFVF9BVFRSX05BTUVSRUZdLFxuIDM5NjpcdFx0XHRcdFx0XHQgICAgXHUwMDI2cyk7XG4gMzk3Olx0XHRcdGlmIChlLnJlZmlkID09IElQU0VUX0lOVkFMSURfSUQpIHtcbiAzOTg6XHRcdFx0XHRyZXQgPSAtSVBTRVRfRVJSX05BTUVSRUY7XG4gMzk5Olx0XHRcdFx0Z290byBmaW5pc2g7XG4gNDAwOlx0XHRcdH1cbiA0MDE6XHRcdFx0aWYgKCFlLmJlZm9yZSlcbiA0MDI6XHRcdFx0XHRlLmJlZm9yZSA9IC0xO1xuIDQwMzpcdFx0fVxuIDQwNDpcdFx0aWYgKGFkdCAhPSBJUFNFVF9URVNUIFx1MDAyNlx1MDAyNiBTRVRfV0lUSF9USU1FT1VUKHNldCkpXG4gNDA1Olx0XHRcdHNldF9jbGVhbnVwX2VudHJpZXMoc2V0KTtcbiA0MDY6XHRcbiA0MDc6XHRcdHJldCA9IGFkdGZuKHNldCwgXHUwMDI2ZSwgXHUwMDI2ZXh0LCBcdTAwMjZleHQsIGZsYWdzKTtcbiA0MDg6XHRcbiA0MDk6XHRmaW5pc2g6XG4gNDEwOlx0XHRpZiAoZS5yZWZpZCAhPSBJUFNFVF9JTlZBTElEX0lEKVxuIDQxMTpcdFx0XHRpcF9zZXRfcHV0X2J5aW5kZXgobWFwLVx1MDAzZW5ldCwgZS5yZWZpZCk7XG4gNDEyOlx0XHRpZiAoYWR0ICE9IElQU0VUX0FERCB8fCByZXQpXG4gNDEzOlx0XHRcdGlwX3NldF9wdXRfYnlpbmRleChtYXAtXHUwMDNlbmV0LCBlLmlkKTtcbiA0MTQ6XHRcbiA0MTU6XHRcdHJldHVybiBpcF9zZXRfZWV4aXN0KHJldCwgZmxhZ3MpID8gMCA6IHJldDtcbiA0MTY6XHR9XG4gNDE3Olx0XG4gNDE4Olx0c3RhdGljIHZvaWRcbiA0MTk6XHRsaXN0X3NldF9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4gNDIwOlx0e1xuIDQyMTpcdFx0c3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbiA0MjI6XHRcdHN0cnVjdCBzZXRfZWxlbSAqZSwgKm47XG4gNDIzOlx0XG4gNDI0Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgbiwgXHUwMDI2bWFwLVx1MDAzZW1lbWJlcnMsIGxpc3QpXG4gNDI1Olx0XHRcdGxpc3Rfc2V0X2RlbChzZXQsIGUpO1xuIDQyNjpcdFx0c2V0LVx1MDAzZWVsZW1lbnRzID0gMDtcbiA0Mjc6XHRcdGF0b21pYzY0X3NldChcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUsIDApO1xuIDQyODpcdH1cbiA0Mjk6XHRcbiA0MzA6XHRzdGF0aWMgdm9pZFxuIDQzMTpcdGxpc3Rfc2V0X2Rlc3Ryb3koc3RydWN0IGlwX3NldCAqc2V0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjIyMwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERhdGEgU3RydWN0dXJlIFVwZGF0ZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBgbGlzdF9zZXRfdWFkdGAgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUsIGFuZCBpdCBjYWxscyBgYWR0Zm5gLCBzcGVjaWZpY2FsbHkgYGxpc3Rfc2V0X3VhZGRgLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSBhc2ssICYjMzQ7V2hlcmUgZWxzZSBpcyB0aGlzIGJlaW5nIGNhbGxlZD8mIzM0OyBUaGUgc3RhdGljIG5hdHVyZSBsaW1pdHMgaXRzIHNjb3BlLCBzbyBpdCYjMzk7cyBrZXkgdG8gaWRlbnRpZnkgaXRzIGVudHJ5IHBvaW50cy4KCk5vdywgdGhlIGNvbm5lY3Rpb24gc2VlbXMgdG8gYmUgdGhyb3VnaCBgc2V0LSZndDt2YXJpYW50LSZndDt1YWR0YCwgd2hpY2ggZ2V0cyBpbnZva2VkIHZpYSBgY2FsbF9hZGAgaW5zaWRlIGBpcF9zZXRfY29yZS5jYC4gSG1tLCBgY2FsbF9hZGAgaXRzZWxmIGlzIGNhbGxlZCBieSBgaXBfc2V0X3VhZGRgIGFuZCBgaXBfc2V0X3VkZWxgLiBJbnRlcmVzdGluZy4gYGlwX3NldF91YWRkYCBpcyBhbHNvIHN0YXRpYy4gVGhpcyBzdWdnZXN0cyB0aGF0IGl0IG1pZ2h0IGJlIGFuIGludGVybmFsIGhlbHBlciwgYnV0IHN0aWxsLCB3aGVyZSYjMzk7cyBpdHMgZW50cnk/CgpBaCwgaXQgc2VlbXMgYGlwX3NldF91YWRkYCBpcyByZWdpc3RlcmVkIGluIGBpcF9zZXRfbmV0bGlua19zdWJzeXNfY2JgIGluIGBpcF9zZXRfY29yZS5jYC4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdy4gVG8gYmUgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIGBpcF9zZXRfbmV0bGlua19zdWJzeXNfY2JgIGFzIHRoYXQgaXMgdGhlIHJlZ2lzdHJhdGlvbiBwb2ludCBmb3IgYGlwX3NldF91YWRkYCB3aGljaCBldmVudHVhbGx5IGdldHMgdG8gYGxpc3Rfc2V0X3VhZHRgLiBMZXQmIzM5O3MgY29uZmlybSBob3cgdGhlIG5ldGxpbmsgY2FsbGJhY2tzIGFyZSBzZXQgdXAgYW5kIGhvdyBkYXRhIGdldHMgdG8gYGlwX3NldF91YWRkYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfc2V0X25ldGxpbmtfc3Vic3lzX2NiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yMTA1PXN0YXRpYyBpbnQgaXBfc2V0X2J5aW5kZXgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjE0Ni1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMTQ3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBpcF9zZXRfbmV0bGlua19zdWJzeXNfY2JbSVBTRVRfTVNHX01BWF0gPSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjE0OC1cdFtJUFNFVF9DTURfTk9ORV1cdD0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yMjQ1PXN0YXRpYyBzdHJ1Y3QgbmZuZXRsaW5rX3N1YnN5c3RlbSBpcF9zZXRfbmV0bGlua19zdWJzeXMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjI0OC1cdC5jYl9jb3VudFx0PSBJUFNFVF9NU0dfTUFYLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjIyNDk6XHQuY2JcdFx0PSBpcF9zZXRfbmV0bGlua19zdWJzeXNfY2IsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjI1MC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzA1OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1cyBGdW5jdGlvbiBTZWxlY3Rpb24gZm9yIE5ldGxpbmsgQ29tbWFuZHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG5ldGxpbmsgY29tbWFuZHMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZmluZCBhbiBleHBvcnRlZCBmdW5jdGlvbi4gSSBjb25zaWRlcmVkIGBpcF9zZXRfYWRkYCBhdCBmaXJzdCwgYnV0IHRoYXQmIzM5O3Mga2VybmVsLXNwYWNlLCBzbyBJIG5lZWQgc29tZXRoaW5nIHVzZXItc3BhY2UgYWNjZXNzaWJsZS4gVGhlbiBJIHJlbWVtYmVyZWQgYGxpc3Rfc2V0X3VhZGRgIHdhcyBtb2RpZmllZC4gSXMgdGhpcyB0aGUgcmlnaHQgZnVuY3Rpb24/CgpUaGUgcHJvbXB0IHNwZWNpZmllcyB0aGF0IEkgc2hvdWxkIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIElmIGBsaXN0X3NldF91YWRkYCBpcyBzdGF0aWMsIHRoYXQmIzM5O3Mgbm90IGlkZWFsLiBIb3dldmVyLCBsb29raW5nIGRlZXBlciwgSSBzZWUgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGFycmF5LCBzcGVjaWZpY2FsbHkgYHNldF92YXJpYW50LmFkdFtJUFNFVF9BRERdYC4gVGhhdCYjMzk7cyB0aGUga2V5ISBCZWNhdXNlIGl0cyBhZGRyZXNzIGlzIHRha2VuLCBpdCAqY2Fubm90KiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVGhpcyBtZWFucyBpdCB3aWxsIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgZXZlbiBpZiBpdCYjMzk7cyB0ZWNobmljYWxseSBhIGhlbHBlciBmdW5jdGlvbi4gSSBjYW4mIzM5O3QgZGlyZWN0bHkgdmVyaWZ5IHRoZSBzeW1ib2wgdGFibGUgcmlnaHQgbm93LCBidXQgdGhhdCYjMzk7cyBteSBleHBlcmllbmNlIGluIHByYWN0aWNlIHdpdGggZnVuY3Rpb24gcG9pbnRlcnMuCgpTbywgYGxpc3Rfc2V0X3VhZGRgIGlzIHBlcmZlY3RseSBhY2NlcHRhYmxlIGFzIGEgZm9jdXMgZnVuY3Rpb24uIEJ1dCBsZXQmIzM5O3MgY2hlY2sgb25lIG1vcmUuIFdoYXQgYWJvdXQgYGlwX3NldF91YWRkYD8gQWgsIGl0JiMzOTtzIGFsc28gYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBgLmNhbGwgPSBpcF9zZXRfdWFkZGAuIFNhbWUgZGVhbC4gU28sIGBpcF9zZXRfdWFkZGAgaXMgYWxzbyBub24taW5saW5lZC4gSSBjYW4gcHJvdmlkZSBib3RoIGBsaXN0X3NldF91YWRkYCBhbmQgYGlwX3NldF91YWRkYCBhcyB2YWxpZCBvcHRpb25zLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBxdWlja2x5IHJldmlld2luZyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkmIzM5O20gY2hlY2tpbmcgYElQX1NFVGAgYW5kIGBJUF9TRVRfTElTVF9TRVRgIGFnYWluLiBJIG5lZWQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgYWxpZ25zIHdpdGggdGhlIG92ZXJhbGwgc3lzdGVtIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSB0aGUgZGVwZW5kZW5jaWVzIG9uIGBJTkVUICZhbXA7JmFtcDsgTkVURklMVEVSYC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBJUF9TRVRfTElTVF9TRVRgIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9TRVRfTElTVF9TRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE1OD1jb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0Vcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2ODpjb25maWcgSVBfU0VUX0xJU1RfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY5LVx0dHJpc3RhdGUgXCYjMzQ7bGlzdDpzZXQgc2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5ODUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgSVBzZXQgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIElQc2V0LiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBtZW50YWwgbWFwIHRlbGxzIG1lIHRoYXQgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2AgaXMgdGhlIGxpa2VseSBwbGFjZSBmb3IgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIHRoaW5raW5nIGFyb3VuZCBsaW5lIDE2OCBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlY3Rpb24gcHJvYmFibHkgaG9sZHMgdGhlIGtleSBwYXJhbWV0ZXJzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2NTpcdFxuIDE2NjpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNjc6XHRcbiAxNjg6XHRjb25maWcgSVBfU0VUX0xJU1RfU0VUXG4gMTY5Olx0XHR0cmlzdGF0ZSBcJiMzNDtsaXN0OnNldCBzZXQgc3VwcG9ydFwmIzM0O1xuIDE3MDpcdFx0ZGVwZW5kcyBvbiBJUF9TRVRcbiAxNzE6XHRcdGhlbHBcbiAxNzI6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgbGlzdDpzZXQgc2V0IHR5cGUgc3VwcG9ydC4gSW4gdGhpc1xuIDE3MzpcdFx0ICBraW5kIG9mIHNldCBvbmUgY2FuIHN0b3JlIHRoZSBuYW1lIG9mIG90aGVyIHNldHMgYW5kIGl0IGZvcm1zXG4gMTc0Olx0XHQgIGFuIG9yZGVyZWQgdW5pb24gb2YgdGhlIG1lbWJlciBzZXRzLlxuIDE3NTpcdFxuIDE3NjpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNzc6XHRcbiAxNzg6XHRjb25maWcgR0NPVl9QUk9GSUxFX0lQU0VUXG4gMTc5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBHQ09WIHByb2ZpbGluZyBmb3IgaXBzZXRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzOTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIElQIFNldCBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkgc2VlIGEgY29uZGl0aW9uYWwgaGVyZS4gVGhlIGJlaGF2aW9yIG9mIHdoYXRldmVyIEkmIzM5O20gbG9va2luZyBhdCBoaW5nZXMgb24gdGhlIHN0YXRlIG9mIGBJUF9TRVRgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgSVBfU0VUYCBpcyBkZWZpbmVkIGFuZCB3aGF0IGl0IGNvbnRyb2xzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiBMZXQmIzM5O3MgZGl2ZSBpbnRvIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdgLCBzdGFydGluZyByaWdodCBhdCB0aGUgdG9wLCBhcm91bmQgbGluZSAxLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGRlcGVuZGVuY3kgc3RydWN0dXJlLiBGcm9tIHRoZXJlLCBJIHNob3VsZCBiZSBhYmxlIHRvIGFzY2VydGFpbiB0aGUgY29uZGl0aW9ucyB3aGljaCBuZWNlc3NpdGF0ZSB1c2luZyBgSVBfU0VUYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudWNvbmZpZyBJUF9TRVRcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0lQIHNldCBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUlxuICAgNTpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgSVAgc2V0IHN1cHBvcnQgdG8gdGhlIGtlcm5lbC5cbiAgIDg6XHRcdCAgSW4gb3JkZXIgdG8gZGVmaW5lIGFuZCB1c2UgdGhlIHNldHMsIHlvdSBuZWVkIHRoZSB1c2Vyc3BhY2UgdXRpbGl0eVxuICAgOTpcdFx0ICBpcHNldCg4KS4gWW91IGNhbiB1c2UgdGhlIHNldHMgaW4gbmV0ZmlsdGVyIHZpYSB0aGUgXCYjMzQ7c2V0XCYjMzQ7IG1hdGNoXG4gIDEwOlx0XHQgIGFuZCBcJiMzNDtTRVRcJiMzNDsgdGFyZ2V0LlxuICAxMTpcdFxuICAxMjpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBJUF9TRVRcbiAgMTU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4MjAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIElQIFNldCBMaXN0IFNldCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcy4gVGhlIGNvZGUgcmVsaWVzIG9uIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAsIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O20gcHJldHR5IHN1cmUgdGhvc2UgYXJlIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0IGluIG1vc3QgY29uZmlncywgYnV0IGl0JiMzOTtzIGFsd2F5cyBzbWFydCB0byBkb3VibGUtY2hlY2ssIHNvIEkmIzM5O2xsIGluY2x1ZGUgdGhlbS4gQWN0dWFsbHksIHRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byBjaGVjayB0aGUgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gdGhlIEtjb25maWcgZmlsZXMgdG9vLCB0byBtYWtlIHN1cmUgSSBnZXQgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgaW5jbHVkZWQuIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAgYXJlIHByZXR0eSBzdGFuZGFyZCwgYnV0IGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBpbmNsdWRlIHRoZW0gYWxvbmdzaWRlIGBJUF9TRVRgIGFuZCBgSVBfU0VUX0xJU1RfU0VUYC4gWWVzLCBJJiMzOTtsbCBnbyB3aXRoIGBORVRGSUxURVJgLCBgSVBfU0VUYCwgYW5kIGBJUF9TRVRfTElTVF9TRVRgLgoKTm93LCBsZXQmIzM5O3MgZ28gYmFjayB0byB0aGF0IHBhdGNoLiBJIHNlZSBpdCYjMzk7cyBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY2AsIGFkZGluZyBhIGByZXR1cm4gMDtgIHdpdGhpbiB0aGUgYGlmIChuKWAgYmxvY2suIEJlZm9yZSB0aGUgcGF0Y2gsIGlmIGBuYCB3YXNuJiMzOTt0IE5VTEwsIHdlJiMzOTtkIGNhbGwgYGxpc3Rfc2V0X3JlcGxhY2VgLCBidXQgdGhlIGNvZGUgd291bGQgY29udGludWUgZXhlY3V0aW5nLiBJdCB3b3VsZCB0aGVuIGNhbGwgYHNldC0mZ3Q7ZWxlbWVudHMmIzQzOyYjNDM7O2AgYW5kIGZpbmFsbHkgYHJldHVybiAwO2AgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uIEFoLCB0aGlzIGxvb2tzIGxpa2UgYSBidWcgZml4LiBJdCBzZWVtcyBsaWtlIHRoZSBpbnRlbnRpb24gd2FzIHRvIHJldHVybiBlYXJseSBhZnRlciB0aGUgcmVwbGFjZW1lbnQuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBieSBjaGVja2luZyB0aGUgb3JpZ2luYWwgY29kZSBmb3IgYGxpc3Rfc2V0X3VhZGRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NTpcdFx0XHRuID0gTlVMTDtcbiAyOTY6XHRcbiAyOTc6XHRcdGUgPSBremFsbG9jKHNldC1cdTAwM2Vkc2l6ZSwgR0ZQX0FUT01JQyk7XG4gMjk4Olx0XHRpZiAoIWUpXG4gMjk5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDMwMDpcdFx0ZS1cdTAwM2VpZCA9IGQtXHUwMDNlaWQ7XG4gMzAxOlx0XHRlLVx1MDAzZXNldCA9IHNldDtcbiAzMDI6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmUtXHUwMDNlbGlzdCk7XG4gMzAzOlx0XHRsaXN0X3NldF9pbml0X2V4dGVuc2lvbnMoc2V0LCBleHQsIGUpO1xuIDMwNDpcdFx0aWYgKG4pIHtcbiAzMDU6XHRcdFx0bGlzdF9zZXRfcmVwbGFjZShzZXQsIGUsIG4pO1xuIDMwNjpcdFx0XHRyZXR1cm4gMDtcbiAzMDc6XHRcdH1cbiAzMDg6XHRcbiAzMDk6XHRcdGVsc2UgaWYgKG5leHQpXG4gMzEwOlx0XHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmUtXHUwMDNlbGlzdCwgXHUwMDI2bmV4dC1cdTAwM2VsaXN0KTtcbiAzMTE6XHRcdGVsc2UgaWYgKHByZXYpXG4gMzEyOlx0XHRcdGxpc3RfYWRkX3JjdShcdTAwMjZlLVx1MDAzZWxpc3QsIFx1MDAyNnByZXYtXHUwMDNlbGlzdCk7XG4gMzEzOlx0XHRlbHNlXG4gMzE0Olx0XHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmUtXHUwMDNlbGlzdCwgXHUwMDI2bWFwLVx1MDAzZW1lbWJlcnMpO1xuIDMxNTpcdFx0c2V0LVx1MDAzZWVsZW1lbnRzJiM0MzsmIzQzOztcbiAzMTY6XHRcbiAzMTc6XHRcdHJldHVybiAwO1xuIDMxODpcdH1cbiAzMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwMjAKCQkJCQkJCW91dHB1dDogMTIwCgkJCQkJCQl0aG91Z2h0czogMzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBpcHNldCBQYXRjaCoqCgpPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBQcmUtcGF0Y2gsIHRoZSBjb2RlIGxvb2tlZCBsaWtlIHRoaXM6CgpgYGBjCglpZiAobikKCQlsaXN0X3NldF9yZXBsYWNlKHNldCwgZSwgbik7CgllbHNlIGlmIChuZXh0KQoJCWxpc3RfYWRkX3RhaWxfcmN1KCZhbXA7ZS0mZ3Q7bGlzdCwgJmFtcDtuZXh0LSZndDtsaXN0KTsKCWVsc2UgaWYgKHByZXYpCgkJbGlzdF9hZGRfcmN1KCZhbXA7ZS0mZ3Q7bGlzdCwgJmFtcDtwcmV2LSZndDtsaXN0KTsKCWVsc2UKCQlsaXN0X2FkZF90YWlsX3JjdSgmYW1wO2UtJmd0O2xpc3QsICZhbXA7bWFwLSZndDttZW1iZXJzKTsKCXNldC0mZ3Q7ZWxlbWVudHMmIzQzOyYjNDM7OwoKCXJldHVybiAwOwpgYGAKClJpZ2h0LCBzbyB0aGUgbG9naWMgd2FzIHRoYXQgaWYgYG5gIHdhcyBub24temVybywgaXQgd291bGQgY2FsbCBgbGlzdF9zZXRfcmVwbGFjZWAuIFRoZSBwcm9ibGVtIGlzLCBgbGlzdF9zZXRfcmVwbGFjZWAgc2ltcGx5ICpyZXBsYWNlcyogYW4gZXhpc3RpbmcgZWxlbWVudDsgaXQgZG9lc24mIzM5O3QgYWN0dWFsbHkgKmFkZCogb25lLiBCdXQgdGhlIGNvZGUgdGhlbiBibGluZGx5IGluY3JlbWVudHMgYHNldC0mZ3Q7ZWxlbWVudHNgLCBsZWFkaW5nIHRvIGEgY291bnQgbWlzbWF0Y2guIFRoZSBwYXRjaCBjbGV2ZXJseSBpbnNlcnRzIGEgYHJldHVybiAwO2AgYWZ0ZXIgYGxpc3Rfc2V0X3JlcGxhY2VgLiBUaGlzIHByZXZlbnRzIHRoZSBzdXBlcmZsdW91cyBpbmNyZW1lbnQuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0IGZpeGVzIGEgYnVnIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IHN1YnN5c3RlbS4KCkdpdmVuIHRoYXQgYGlwc2V0YCBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHJvYnVzdG5lc3MuIFRoZSBjcml0aWNhbCBmdW5jdGlvbnMgaGVyZSBhcmUgYGxpc3Rfc2V0X3VhZGRgIGFuZCBgaXBfc2V0X3VhZGRgLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkga25vdyBJJiMzOTtsbCBuZWVkIGBORVRGSUxURVJgLCBgSVBfU0VUYCwgYW5kIGBJUF9TRVRfTElTVF9TRVRgLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2s6IGBJUF9TRVRgIHNlbGVjdHMgYE5FVEZJTFRFUl9ORVRMSU5LYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBORVRGSUxURVJgLiBQZXJmZWN0LCBzbyB0aG9zZSBjb25maWd1cmF0aW9ucyB3aWxsIGJlIGluY2x1ZGVkLgoKQWxyaWdodCwgSSYjMzk7bGwgYmUgdXNpbmcgdGhlIHNldC1yZXN1bHRzIHRvb2wgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9MSVNUX1NFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xpc3Rfc2V0X3VhZGQmIzM0OywKICAgICYjMzQ7aXBfc2V0X3VhZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIG5ldGZpbHRlciBpcHNldCBzdWJzeXN0ZW0gd2hlcmUgcmVwbGFjaW5nIGFuIGVsZW1lbnQgaW4gYSBsaXN0OnNldCBpbmNvcnJlY3RseSBpbmNyZW1lbnRlZCB0aGUgZWxlbWVudCBjb3VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlIChhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rKSwgc28gaXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O0lQX1NFVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfTElTVF9TRVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsaXN0X3NldF91YWRkJiMzNDssCiAgICAmIzM0O2lwX3NldF91YWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBuZXRmaWx0ZXIgaXBzZXQgc3Vic3lzdGVtIHdoZXJlIHJlcGxhY2luZyBhbiBlbGVtZW50IGluIGEgbGlzdDpzZXQgaW5jb3JyZWN0bHkgaW5jcmVtZW50ZWQgdGhlIGVsZW1lbnQgY291bnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSAoYWNjZXNzaWJsZSB2aWEgbmV0bGluayksIHNvIGl0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowMzozMS4wMjc0OTk3ODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE4MjkxMDIyNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiSVBfU0VUXCIsXG4gICAgXCJJUF9TRVRfTElTVF9TRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsaXN0X3NldF91YWRkXCIsXG4gICAgXCJpcF9zZXRfdWFkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBuZXRmaWx0ZXIgaXBzZXQgc3Vic3lzdGVtIHdoZXJlIHJlcGxhY2luZyBhbiBlbGVtZW50IGluIGEgbGlzdDpzZXQgaW5jb3JyZWN0bHkgaW5jcmVtZW50ZWQgdGhlIGVsZW1lbnQgY291bnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSAoYWNjZXNzaWJsZSB2aWEgbmV0bGluayksIHNvIGl0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjAzOjMxLjAyNzUwNjQ2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5ODA4NDgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNiY2Y1MmY3ZDZlZTk0ODNiNWUzOGVhODA4YmM3YTc2OTAxMDlhN2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAxNjowMzoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xcbmluZGV4IGNhM2VmOTQ3OWU4MzguLjU2NjI2ZjQ5NDNhOTAgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcXG5AQCAtMzAxLDggKzMwMSwxMSBAQCBsaXN0X3NldF91YWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIFxcdGUtXFx1MDAzZXNldCA9IHNldDtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmUtXFx1MDAzZWxpc3QpO1xcbiBcXHRsaXN0X3NldF9pbml0X2V4dGVuc2lvbnMoc2V0LCBleHQsIGUpO1xcbi1cXHRpZiAobilcXG4rXFx0aWYgKG4pIHtcXG4gXFx0XFx0bGlzdF9zZXRfcmVwbGFjZShzZXQsIGUsIG4pO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4gXFx0ZWxzZSBpZiAobmV4dClcXG4gXFx0XFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNmUtXFx1MDAzZWxpc3QsIFxcdTAwMjZuZXh0LVxcdTAwM2VsaXN0KTtcXG4gXFx0ZWxzZSBpZiAocHJldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MDM6MzIuMjI2NjI3ODk5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQxNzA5MTg4MTc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0xJU1RfU0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibGlzdF9zZXRfdWFkZFwiLFxuICAgIFwiaXBfc2V0X3VhZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IHN1YnN5c3RlbSB3aGVyZSByZXBsYWNpbmcgYW4gZWxlbWVudCBpbiBhIGxpc3Q6c2V0IGluY29ycmVjdGx5IGluY3JlbWVudGVkIHRoZSBlbGVtZW50IGNvdW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgKGFjY2Vzc2libGUgdmlhIG5ldGxpbmspLCBzbyBpdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYmNmNTJmN2Q2ZWU5NDgzYjVlMzhlYTgwOGJjN2E3NjkwMTA5YTdmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAxNjowMzoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXG5pbmRleCBjYTNlZjk0NzllODM4Li41NjYyNmY0OTQzYTkwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xuQEAgLTMwMSw4ICszMDEsMTEgQEAgbGlzdF9zZXRfdWFkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0ZS1cdTAwM2VzZXQgPSBzZXQ7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlLVx1MDAzZWxpc3QpO1xuIFx0bGlzdF9zZXRfaW5pdF9leHRlbnNpb25zKHNldCwgZXh0LCBlKTtcbi1cdGlmIChuKVxuK1x0aWYgKG4pIHtcbiBcdFx0bGlzdF9zZXRfcmVwbGFjZShzZXQsIGUsIG4pO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbiBcdGVsc2UgaWYgKG5leHQpXG4gXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmUtXHUwMDNlbGlzdCwgXHUwMDI2bmV4dC1cdTAwM2VsaXN0KTtcbiBcdGVsc2UgaWYgKHByZXYpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowMzozMi4yMjY2Mjk1MzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjkxODE5NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipBbmFseXppbmcgYSBOZXRmaWx0ZXIvaXBzZXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBhIGNoYW5nZSB0byBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g6IGl0J3MgYWRkaW5nIGEgYHJldHVybiAwO2Agc3RhdGVtZW50IHdpdGhpbiBhbiBgaWYgKG4pYCBibG9jayBpbnNpZGUgdGhlIGBsaXN0X3NldF91YWRkYCBmdW5jdGlvbi4gIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgZGVlbWVkIG5lY2Vzc2FyeS4gQWRkaW5nIGEgc2ltcGxlIHJldHVybiBsaWtlIHRoYXQgY2FuIGhhdmUgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGZvciB0aGUgcHJvZ3JhbSBmbG93LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0LlxuXG5GaXJzdCwgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJvbGVzIG9mIGBsaXN0X3NldF91YWRkYCBhbmQgYGxpc3Rfc2V0X3JlcGxhY2VgLiBJJ2xsIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGV5IGZ1bmN0aW9uIHdpdGhpbiB0aGUgYGlwc2V0YCBmcmFtZXdvcmsuIEkga25vdyB0aGV5J3JlIHByb2JhYmx5IGhhbmRsaW5nIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBhZGRpbmcgYW5kL29yIHJlcGxhY2luZyBlbGVtZW50cyB3aXRoaW4gYSBsaXN0LWJhc2VkIHNldC4gVGhlIGBpZiAobilgIGNvbmRpdGlvbiBpcyB0aGUga2V5IGhlcmUuIFRoZSBhZGRlZCBgcmV0dXJuIDA7YCBpbXBsaWVzIHRoYXQgaWYgYG5gIGlzIHRydWUsIHdoYXRldmVyIGxvZ2ljIGlzIGJlaW5nIGV4ZWN1dGVkLCBpdCBzaG91bGQgZXhpdCBpbW1lZGlhdGVseSwgcmV0dXJuaW5nIGEgc3VjY2VzcyBzdGF0dXMuIFRoYXQncyBhIGNsYXNzaWMgc2hvcnRjdXQuXG5cbkknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgd2hhdCBgbmAgcmVwcmVzZW50cy4gV2hhdCBjb25kaXRpb24gaXMgYmVpbmcgY2hlY2tlZD8gV2hhdCB3b3VsZCBoYXBwZW4gaWYgdGhlIGByZXR1cm4gMDtgIHdhc24ndCBhZGRlZCBhbmQgdGhlIGZ1bmN0aW9uIGNvbnRpbnVlZCBleGVjdXRpbmc/IElzIHRoZSBleGlzdGluZyBsb2dpYyBmdW5kYW1lbnRhbGx5IGZsYXdlZCBvciBpcyB0aGUgcGF0Y2ggYWRkaW5nIGFuIG9wdGltaXphdGlvbiBvciBoYW5kbGluZyBhIG5ldyBlZGdlIGNhc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYXJvdW5kIGBuYCBpcyBjcnVjaWFsLiBJcyBpdCByZWxhdGVkIHRvIHNvbWUgdHlwZSBvZiBlcnJvciBjb25kaXRpb24sIGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24sIGEgc3BlY2lmaWMgaW50ZXJuYWwgc3RhdGUsIG9yIHNvbWUgb3RoZXIga2V5IHZhcmlhYmxlPyBXaGF0IGRvZXMgdGhlIGNvZGUgcHJpb3IgdG8gdGhlIGBpZmAgbG9vayBsaWtlPyBXaGF0IGRvZXMgaXQgZG8gYWZ0ZXI/IEkgd2lsbCBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhlIHJldHVybi5cblxuVWx0aW1hdGVseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGlzIHBhdGNoIGlzIGNvcnJlY3QsIHJvYnVzdCwgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmZvcmVzZWVuIGlzc3VlcyBvciBzdWJ0bGUgcmVncmVzc2lvbnMuIEkgd2lsbCByZWFkIHRoZSBlbnRpcmUgYGxpc3Rfc2V0X3VhZGRgIGFuZCBgbGlzdF9zZXRfcmVwbGFjZWAgZnVuY3Rpb25zIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowMzozNy41MTg0NTIwMDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNjE0OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGlzdF9zZXRfdWFkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MjM1PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjIzNjpsaXN0X3NldF91YWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0yMzctXFx0ICAgICAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBzZXRfdmFyaWFudCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTYxLVxcdC5hZHRcXHQ9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjU2MjpcXHRcXHRbSVBTRVRfQUREXSA9IGxpc3Rfc2V0X3VhZGQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NjMtXFx0XFx0W0lQU0VUX0RFTF0gPSBsaXN0X3NldF91ZGVsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowMzozNy41NjU1MjUyNDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTMwNTcwNzk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyB0aGUgYGxpc3Rfc2V0X3VhZGRgIGNvbnRleHQ6XG5cbioqQW5hbHl6aW5nIGBsaXN0X3NldF91YWRkYCBDb250ZXh0KipcblxuQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBlc3RhYmxpc2ggdGhlIGVudmlyb25tZW50LiBJJ20gbG9va2luZyBhdCBgbGlzdF9zZXRfdWFkZGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIGl0IGZpdHMgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSXMgdGhpcyBhIGN1c3RvbSBmdW5jdGlvbiwgb3IgYSBzdGFuZGFyZCBsaWJyYXJ5IGNhbGw/IFVuZGVyc3RhbmRpbmcgdGhlIHByb2plY3QncyBzdHJ1Y3R1cmUgd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGluc2lnaHRzIGFzIEkgbW92ZSBmb3J3YXJkLiBXaGF0IGFyZSB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIG9yIG1vZHVsZXM/IFdoYXQga2luZCBvZiBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHVzZWQgaW4gdGhlIHZpY2luaXR5PyBJcyB0aGlzIHBhcnQgb2YgYSBjb3JlIGFsZ29yaXRobSBvciBhIHV0aWxpdHkgZnVuY3Rpb24/IERldGVybWluaW5nIHRoZSBmdW5jdGlvbidzIHB1cnBvc2Ugd2l0aGluIHRoaXMgbGFuZHNjYXBlIGdpdmVzIG1lIGEgc29saWQgYmFzZSB0byBjb21wcmVoZW5kLiBJdCdzIG9mdGVuIGhlbHBmdWwgdG8gdGhpbmsgdGhyb3VnaCB3aGF0IHRoZSBuYW1lIGBsaXN0X3NldF91YWRkYCBzdWdnZXN0cy4gXCJMaXN0LFwiIFwic2V0LFwiIGFuZCBcInVhZGRcIiDigJMgYXJlIHRoZXNlIG9wZXJhdGlvbnMgb24gdGhlIGxpc3QsIG9yIHRoZSBzZXQ/IElzIHRoZSBcInVcIiBsaWtlbHkgZm9yIFwidW5pcXVlXCIgb3IgXCJ1bmlvblwiPyBUaGlzIGdpdmVzIGEgZmlyc3QgZ3Vlc3Mgb24gd2hhdCB0byBleHBlY3QuIEZyb20gdGhlcmUsIEknbGwgZXhhbWluZSB0aGUgaW1tZWRpYXRlIGNvZGUgYXJvdW5kIGl0LiBUaGF0IGlzLCB3aGF0IHBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0byBpdD8gV2hhdCBpcyBpdCBkb2luZyB3aXRoIHRob3NlIHBhcmFtZXRlcnM/IEknbGwgbG9vayBmb3IgaW5wdXQgYW5kIG91dHB1dCwgYW5kIGVzcGVjaWFsbHkgd2hhdCBkYXRhIHR5cGVzIGFyZSBpbnZvbHZlZC4gV2hhdCBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IsIGJvdGggb24gc3VjY2VzcyBhbmQgcG90ZW50aWFsIGZhaWx1cmUgY2FzZXM/IEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgZWZmaWNpZW5jeSBjb25zaWRlcmF0aW9ucy4gQXJlIHRoZXJlIGFueSBsb29wcywgb3IgbmVzdGVkIGxvb3BzLCB0aGF0IG1pZ2h0IGluZGljYXRlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBBcmUgdGhlcmUgb3B0aW1pemF0aW9ucyB0aGF0IEkgY2FuIHN1Z2dlc3QgbGF0ZXI/IFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gKndoYXQqIGl0J3MgZG9pbmcsICpob3cqIGl0J3MgZG9pbmcgaXQsIGFuZCAqd2h5KiBpdCdzIGRlc2lnbmVkIHRoYXQgd2F5LCBiZWZvcmUgSSBjYW4gcHJvdmlkZSBhIHRydWx5IGluc2lnaHRmdWwgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowMzo1Ni44NzEyMzYzNTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4MDpcXHRcXHRcXHRuID0gbGlzdF9lbXB0eShcXHUwMDI2bWFwLVxcdTAwM2VtZW1iZXJzKSA/IE5VTEwgOlxcbiAyODE6XFx0XFx0XFx0ICAgIGxpc3RfbGFzdF9lbnRyeShcXHUwMDI2bWFwLVxcdTAwM2VtZW1iZXJzLCBzdHJ1Y3Qgc2V0X2VsZW0sIGxpc3QpO1xcbiAyODI6XFx0XFx0fSBlbHNlIGlmIChkLVxcdTAwM2ViZWZvcmUgXFx1MDAzZSAwKSB7XFxuIDI4MzpcXHRcXHRcXHQvKiBJbnNlcnQgYWZ0ZXIgbmV4dCBlbGVtZW50ICovXFxuIDI4NDpcXHRcXHRcXHRpZiAoIWxpc3RfaXNfbGFzdChcXHUwMDI2bmV4dC1cXHUwMDNlbGlzdCwgXFx1MDAyNm1hcC1cXHUwMDNlbWVtYmVycykpXFxuIDI4NTpcXHRcXHRcXHRcXHRuID0gbGlzdF9uZXh0X2VudHJ5KG5leHQsIGxpc3QpO1xcbiAyODY6XFx0XFx0fSBlbHNlIHtcXG4gMjg3OlxcdFxcdFxcdC8qIEluc2VydCBiZWZvcmUgcHJldiBlbGVtZW50ICovXFxuIDI4ODpcXHRcXHRcXHRpZiAocHJldi1cXHUwMDNlbGlzdC5wcmV2ICE9IFxcdTAwMjZtYXAtXFx1MDAzZW1lbWJlcnMpXFxuIDI4OTpcXHRcXHRcXHRcXHRuID0gbGlzdF9wcmV2X2VudHJ5KHByZXYsIGxpc3QpO1xcbiAyOTA6XFx0XFx0fVxcbiAyOTE6XFx0XFx0LyogQ2FuIHdlIHJlcGxhY2UgYSB0aW1lZCBvdXQgZW50cnk/ICovXFxuIDI5MjpcXHRcXHRpZiAobiBcXHUwMDI2XFx1MDAyNlxcbiAyOTM6XFx0XFx0ICAgICEoU0VUX1dJVEhfVElNRU9VVChzZXQpIFxcdTAwMjZcXHUwMDI2XFxuIDI5NDpcXHRcXHQgICAgICBpcF9zZXRfdGltZW91dF9leHBpcmVkKGV4dF90aW1lb3V0KG4sIHNldCkpKSlcXG4gMjk1OlxcdFxcdFxcdG4gPSBOVUxMO1xcbiAyOTY6XFx0XFxuIDI5NzpcXHRcXHRlID0ga3phbGxvYyhzZXQtXFx1MDAzZWRzaXplLCBHRlBfQVRPTUlDKTtcXG4gMjk4OlxcdFxcdGlmICghZSlcXG4gMjk5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzMDA6XFx0XFx0ZS1cXHUwMDNlaWQgPSBkLVxcdTAwM2VpZDtcXG4gMzAxOlxcdFxcdGUtXFx1MDAzZXNldCA9IHNldDtcXG4gMzAyOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlLVxcdTAwM2VsaXN0KTtcXG4gMzAzOlxcdFxcdGxpc3Rfc2V0X2luaXRfZXh0ZW5zaW9ucyhzZXQsIGV4dCwgZSk7XFxuIDMwNDpcXHRcXHRpZiAobikge1xcbiAzMDU6XFx0XFx0XFx0bGlzdF9zZXRfcmVwbGFjZShzZXQsIGUsIG4pO1xcbiAzMDY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDMwNzpcXHRcXHR9XFxuIDMwODpcXHRcXG4gMzA5OlxcdFxcdGVsc2UgaWYgKG5leHQpXFxuIDMxMDpcXHRcXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2ZS1cXHUwMDNlbGlzdCwgXFx1MDAyNm5leHQtXFx1MDAzZWxpc3QpO1xcbiAzMTE6XFx0XFx0ZWxzZSBpZiAocHJldilcXG4gMzEyOlxcdFxcdFxcdGxpc3RfYWRkX3JjdShcXHUwMDI2ZS1cXHUwMDNlbGlzdCwgXFx1MDAyNnByZXYtXFx1MDAzZWxpc3QpO1xcbiAzMTM6XFx0XFx0ZWxzZVxcbiAzMTQ6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNmUtXFx1MDAzZWxpc3QsIFxcdTAwMjZtYXAtXFx1MDAzZW1lbWJlcnMpO1xcbiAzMTU6XFx0XFx0c2V0LVxcdTAwM2VlbGVtZW50cysrO1xcbiAzMTY6XFx0XFxuIDMxNzpcXHRcXHRyZXR1cm4gMDtcXG4gMzE4OlxcdH1cXG4gMzE5OlxcdFxcbiAzMjA6XFx0c3RhdGljIGludFxcbiAzMjE6XFx0bGlzdF9zZXRfdWRlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbiAzMjI6XFx0XFx0ICAgICAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcXG4gMzIzOlxcdHtcXG4gMzI0OlxcdFxcdHN0cnVjdCBsaXN0X3NldCAqbWFwID0gc2V0LVxcdTAwM2VkYXRhO1xcbiAzMjU6XFx0XFx0c3RydWN0IHNldF9hZHRfZWxlbSAqZCA9IHZhbHVlO1xcbiAzMjY6XFx0XFx0c3RydWN0IHNldF9lbGVtICplLCAqbiwgKm5leHQsICpwcmV2ID0gTlVMTDtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG4sIFxcdTAwMjZtYXAtXFx1MDAzZW1lbWJlcnMsIGxpc3QpIHtcXG4gMzI5OlxcdFxcdFxcdGlmIChTRVRfV0lUSF9USU1FT1VUKHNldCkgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MDM6NTYuODcxMzI2MTgyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTcyODU4ODA3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbDpcblxuKipGaXhpbmcgdGhlIGlwX3NldF9saXN0X3NldCBJbmNyZW1lbnQgQnVnKipcblxuQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQsIGJ1ZyBpbiB0aGUgaXBzZXQgY29kZS4gSXQgc2VlbXMgdGhhdCBgc2V0LVx1MDAzZWVsZW1lbnRzKytgIHdhcyBiZWluZyBpbmNyZW1lbnRlZCBldmVuIHdoZW4gdGhlIGZ1bmN0aW9uIGBsaXN0X3NldF9yZXBsYWNlYCB3YXMgY2FsbGVkLCB3aGljaCwgYXMgdGhlIG5hbWUgaW1wbGllcywgKnJlcGxhY2VzKiBhbiBleGlzdGluZyBlbGVtZW50IGFuZCBzaG91bGRuJ3QgYmUgdHJlYXRlZCBhcyBhbiBhZGRpdGlvbi4gVGhhdCdzIGEgY2xhc3NpYyBvZmYtYnktb25lIGVycm9yIGx1cmtpbmcgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNgLCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgbmVlZHMgdG8gYmUgYWRkcmVzc2VkLiBJdCdzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgZGlzdGluY3Rpb24sIGJlY2F1c2UgdGhhdCBjb3VudGVyIGNvdWxkIGJlY29tZSB1bnJlbGlhYmxlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGluY29ycmVjdCBiZWhhdmlvciBkb3duIHRoZSBsaW5lLlxuXG5CZWZvcmUgSSBnbyB0b28gZmFyLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gSSBuZWVkIHRvIGtub3cgaG93IGBpcF9zZXRfbGlzdF9zZXQuY2AgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBXaGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhZmZlY3QgaXRzIGluY2x1c2lvbj8gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEJlc3QgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCAqaG93KiB0aGlzIHBpZWNlIG9mIGNvZGUgaXMgYnJvdWdodCBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLCB0byBlbnN1cmUgdGhhdCB0aGUgZml4IGlzIGFwcGxpZWQgaW4gdGhlIHJpZ2h0IGNvbnRleHRzIGFuZCB0aGF0IHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb24gZm9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowNTozNC4xNTcyMTAyNTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcwNjMwNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfc2V0X2xpc3Rfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9NYWtlZmlsZT0yOD1vYmotJChDT05GSUdfSVBfU0VUX0hBU0hfTkVUUE9SVE5FVCkgKz0gaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlLTMwLSMgbGlzdCB0eXBlc1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0lQX1NFVF9MSVNUX1NFVCkgKz0gaXBfc2V0X2xpc3Rfc2V0Lm9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlLTMyLWlmZGVmIENPTkZJR19HQ09WX1BST0ZJTEVfSVBTRVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MDU6MzQuMjE0Mjc4NzgzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNjE5MTI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSVAgU2V0IENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSBzZWUgdGhpcyBgQ09ORklHX0lQX1NFVF9MSVNUX1NFVGAgZmxhZywgYW5kIGl0J3MgcGluZ2luZyBzb21ldGhpbmcgaW4gbXkgbWVtb3J5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzLCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSB0aWVkIHRvIGl0LiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhpcyBpbmZvcm1hdGlvbiBpcyBnb2luZyB0byBiZSBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgZnVuZGFtZW50YWwgSVAgc2V0IGNvbmZpZ3VyYXRpb25zIGxpdmUsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gaGVhZCB0byB1bmRlcnN0YW5kIHdoYXQgZW5hYmxpbmcgdGhhdCBwYXJ0aWN1bGFyIG9wdGlvbiB3aWxsIGludm9sdmUuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY5MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjA1OjM4LjAzMDQ3MjYyMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1OTk1MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NFVF9MSVNUX1NFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE1OD1jb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0VcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2ODpjb25maWcgSVBfU0VUX0xJU1RfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2OS1cXHR0cmlzdGF0ZSBcXFwibGlzdDpzZXQgc2V0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjA1OjM4LjA3NTA3OTgzOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTcwNjgxMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgSVBfU0VUX0xJU1RfU0VUIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJ1c2luZXNzLiBNeSBmaXJzdCBpbnN0aW5jdCBoZXJlIGlzIHRvIGp1bXAgZGlyZWN0bHkgaW50byB0aGUgS2NvbmZpZyBmb3IgYElQX1NFVF9MSVNUX1NFVGAuIEl0J3MgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBJUCBzZXQgdHlwZSBpcyBjb250cm9sbGVkIGF0IGNvbXBpbGUgdGltZS4gSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGl0cyBjb25maWd1cmFiaWxpdHkgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIg4oCTIGJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgc3BlY2lmaWMgdXNlIGNhc2VzIG9yIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBwb2ludHMuIFRoZSBLY29uZmlnIGlzIHRoZSBibHVlcHJpbnQsIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgb3B0aW9ucy4gVGltZSB0byBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjA1OjQ0LjA0NTc2MzQ1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdFxcdGRlcGVuZHMgb24gSVBfU0VUXFxuIDE2MTpcXHRcXHRoZWxwXFxuIDE2MjpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGhhc2g6bmV0LGlmYWNlIHNldCB0eXBlIHN1cHBvcnQsIGJ5IHdoaWNoXFxuIDE2MzpcXHRcXHQgIG9uZSBjYW4gc3RvcmUgSVB2NC9JUHY2IG5ldHdvcmsgYWRkcmVzcy9wcmVmaXggYW5kXFxuIDE2NDpcXHRcXHQgIGludGVyZmFjZSBuYW1lIHBhaXJzIGFzIGVsZW1lbnRzIGluIGEgc2V0LlxcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNjc6XFx0XFxuIDE2ODpcXHRjb25maWcgSVBfU0VUX0xJU1RfU0VUXFxuIDE2OTpcXHRcXHR0cmlzdGF0ZSBcXFwibGlzdDpzZXQgc2V0IHN1cHBvcnRcXFwiXFxuIDE3MDpcXHRcXHRkZXBlbmRzIG9uIElQX1NFVFxcbiAxNzE6XFx0XFx0aGVscFxcbiAxNzI6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBsaXN0OnNldCBzZXQgdHlwZSBzdXBwb3J0LiBJbiB0aGlzXFxuIDE3MzpcXHRcXHQgIGtpbmQgb2Ygc2V0IG9uZSBjYW4gc3RvcmUgdGhlIG5hbWUgb2Ygb3RoZXIgc2V0cyBhbmQgaXQgZm9ybXNcXG4gMTc0OlxcdFxcdCAgYW4gb3JkZXJlZCB1bmlvbiBvZiB0aGUgbWVtYmVyIHNldHMuXFxuIDE3NTpcXHRcXG4gMTc2OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE3NzpcXHRcXG4gMTc4OlxcdGNvbmZpZyBHQ09WX1BST0ZJTEVfSVBTRVRcXG4gMTc5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBHQ09WIHByb2ZpbGluZyBmb3IgaXBzZXRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjA1OjQ0LjA0NTg2NDQ0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTUzNjA5OTM2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSBjb25zaWRlcmF0aW9uczpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIGhpbmdlcyBvbiB0aGlzIGBJUF9TRVRgLiBUaGF0J3MgdGhlIGtleSB2YXJpYWJsZSBoZXJlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiAqaXQncyBhbGwgYWJvdXQgaG93IGBJUF9TRVRgIGlzIGJlaW5nIHVzZWQsIGFuZCB3aGF0J3MgY29ubmVjdGVkIHRvIGl0Ki4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSdtIHRoaW5raW5nLCBcIndoYXQgb3RoZXIgY29tcG9uZW50cywgc3lzdGVtcywgb3IgcnVsZXMgcmVseSBvbiB0aGUgc3RhdGUgb3IgY29udGVudHMgb2YgYElQX1NFVGA/XCIuIElzIGl0IGRpcmVjdGx5IGZlZWRpbmcgaW50byBmaXJld2FsbCBydWxlcz8gSXMgaXQgbGlua2VkIHRvIGEgZHluYW1pYyByb3V0aW5nIHByb3RvY29sPyBBcmUgdGhlcmUgbW9uaXRvcmluZyB0b29scyB0aGF0IGFyZSBrZXllZCB0byBjaGFuZ2VzIGluIHRoYXQgc2V0PyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIGFueSBwb3RlbnRpYWwgcmlwcGxlIGVmZmVjdHMgaWYgYElQX1NFVGAgYmVoYXZlcyB1bmV4cGVjdGVkbHkuIFNvLCBJJ2xsIGdvIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmlsZXMsIHN5c3RlbSBsb2dzLCBhbmQgbWF5YmUgZXZlbiBsb29rIGZvciBhbnkgbW9uaXRvcmluZyBkYXNoYm9hcmRzIHRoYXQgcmVmZXJlbmNlIHRoYXQgaWRlbnRpZmllci4gTGV0J3MgZGlnIGluIGFuZCB0cmFjayBkb3duIGV2ZXJ5IGRpcmVjdCBhbmQgaW5kaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCBgSVBfU0VUYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU1MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MDc6MzkuNDA2ODYwOTY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDExNzQ3NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjA3OjM5LjQ1MDk4MzYwNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODU5MTYxMzg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgRGl2ZSBmb3IgSVBfU0VUIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYElQX1NFVGAuIFRoZSBmaXJzdCBwbGFjZSBJJ20gZ29pbmcgdG8gbG9vayBpcyB0aGUgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgdHlwZXMgb2Yga2VybmVsIGZlYXR1cmVzIGFyZSBkZWZpbmVkLCB3aXRoIGFsbCB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGFzc29jaWF0ZWQgc2V0dGluZ3MuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgYElQX1NFVGAgc3ltYm9sIGRlZmluZWQgaGVyZSwgYWxvbmcgd2l0aCBwb3RlbnRpYWxseSBvdGhlciwgbW9yZSBncmFudWxhciBvcHRpb25zIHRoYXQgY29udHJvbCBkaWZmZXJlbnQgYXNwZWN0cyBvZiBgaXBzZXRgIGZ1bmN0aW9uYWxpdHksIGxpa2Ugc3BlY2lmaWMgc2V0IHR5cGVzIG9yIG1hdGNoaW5nIHJ1bGVzLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYW55IGRlcGVuZGVuY2llcyBsaXN0ZWQgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBvciBjb25maWd1cmVkIGZvciBgSVBfU0VUYCB0byB3b3JrIGNvcnJlY3RseS4gTWlnaHQgZXZlbiBmaW5kIGEgaGVscGZ1bCBkZXNjcmlwdGlvbiB0aGF0IGNsYXJpZmllcyB0aGUgcHVycG9zZSBhbmQgaW50ZW5kZWQgdXNhZ2UuIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uICpzaG91bGQqIGJlIGxpbmtlZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTgzOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjA4OjU4LjA0MjU5OTkxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MDI1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjI6bWVudWNvbmZpZyBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSVAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9MTQ9aWYgSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjpjb25maWcgSVBfU0VUX01BWFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNy1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIElQIHNldHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjI4OmNvbmZpZyBJUF9TRVRfQklUTUFQX0lQXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJiaXRtYXA6aXAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzYtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjM3OmNvbmZpZyBJUF9TRVRfQklUTUFQX0lQTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJiaXRtYXA6aXAsbWFjIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ1LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo0Njpjb25maWcgSVBfU0VUX0JJVE1BUF9QT1JUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ3LVxcdHRyaXN0YXRlIFxcXCJiaXRtYXA6cG9ydCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01NC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NTU6Y29uZmlnIElQX1NFVF9IQVNIX0lQXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU2LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo2NTpjb25maWcgSVBfU0VUX0hBU0hfSVBNQVJLXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY2LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLG1hcmsgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzMtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjc0OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzUtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6ODM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVElQXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTg0LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLHBvcnQsaXAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTItXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjkzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTAyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMDM6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwNC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxtYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTExLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMTI6Y29uZmlnIElQX1NFVF9IQVNIX01BQ1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcImhhc2g6bWFjIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyMC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTIxOmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyMi1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQscG9ydCxuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTI5LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzA6Y29uZmlnIElQX1NFVF9IQVNIX05FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMzEtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTM5OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQwLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNDg6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQ5LVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTU4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRJRkFDRVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTktXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LGlmYWNlIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTY4OmNvbmZpZyBJUF9TRVRfTElTVF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY5LVxcdHRyaXN0YXRlIFxcXCJsaXN0OnNldCBzZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MDg6NTguMDg4MDA4Mjc0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1MjQ4MDA3NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgdGhlIHByb3ZpZGVkIHRleHQgYW5kIHRoaW5raW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9uczpcblxuKipBbmFseXppbmcgdGhlIElQX1NFVCBLY29uZmlnKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBJUF9TRVRgIGZ1bmN0aW9uYWxpdHkgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gVGhpcyB0ZWxscyBtZSBhYm91dCBkZXBlbmRlbmNpZXMsIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHRvIHRoZSBlbmQtdXNlciAob3IsIG1vcmUgaW1wb3J0YW50bHksICptZSogd2hlbiBJJ20gY29uZmlndXJpbmcgYSBjdXN0b20ga2VybmVsKSwgYW5kIGFueSBwb3RlbnRpYWwgbGltaXRhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBzdHJ1Y3R1cmUgLSBpcyBpdCBhIHNpbXBsZSBib29sZWFuLCBhIHRyaXN0YXRlLCBvciBtb3JlIGNvbXBsZXg/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXM/IEknbGwgYmUgbG9va2luZyBmb3IgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIGxvb2tpbmcgZm9yIGFueSBwcmUtcmVxdWlzaXRlcyBmb3IgYElQX1NFVGAgdG8gZXZlbiBiZSBjb25zaWRlcmVkLiBBcmUgdGhlcmUgYW55IGRlZmF1bHQgdmFsdWVzIHRoYXQgbWlnaHQgaW1wYWN0IHRoZSBvdmVyYWxsIGJ1aWxkPyBBcmUgdGhlcmUgKmFueSogY29uZmxpY3RzIHdpdGggb3RoZXIgZmVhdHVyZXMgdGhhdCBJIHNob3VsZCBrbm93IGFib3V0P1xuXG5PbmNlIEkgZ3Jhc3AgdGhlIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtLCBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlc2NyaXB0aW9ucyBhbmQgaGVscCB0ZXh0LiBUaGVzZSBhcmUgY3J1Y2lhbC4gVGhpcyBwYXJ0IHVzdWFsbHkgdGVsbHMgdGhlICd3aHknIG9mIHRoZSBmdW5jdGlvbmFsaXR5LCBhbmQgd2hhdCB0aGUgdXNlciBpcyAqaW50ZW5kZWQqIHRvIGRvIHdpdGggaXQuIFRoaXMgc2VjdGlvbiBpcyB3aGVyZSBJJ2xsIHNlZSBob3cgcm9idXN0IGBJUF9TRVRgIGlzIGFuZCBkZXRlcm1pbmUgaWYgaXQncyB0aGUgcmlnaHQgY2hvaWNlIGZvciBteSBzcGVjaWZpYyB1c2UtY2FzZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZyb20gYW4gYXJjaGl0ZWN0dXJhbCwgcGVyZm9ybWFuY2UsIGFuZC9vciBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gRmluYWxseSwgSSBzaG91bGQgc2VlIGhvdyAqZ3JhbnVsYXIqIHRoZSBjb25maWd1cmFiaWxpdHkgb2YgYElQX1NFVGAgaXMgYW5kIGlmIEkgYW0gYWJsZSB0byB0YWlsb3IgaXQgdG8gbXkgZXhhY3QgbmVlZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowOTowNy42MTI4MTI5MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIElQX1NFVFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIklQIHNldCBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbiAgIDU6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgSVAgc2V0IHN1cHBvcnQgdG8gdGhlIGtlcm5lbC5cXG4gICA4OlxcdFxcdCAgSW4gb3JkZXIgdG8gZGVmaW5lIGFuZCB1c2UgdGhlIHNldHMsIHlvdSBuZWVkIHRoZSB1c2Vyc3BhY2UgdXRpbGl0eVxcbiAgIDk6XFx0XFx0ICBpcHNldCg4KS4gWW91IGNhbiB1c2UgdGhlIHNldHMgaW4gbmV0ZmlsdGVyIHZpYSB0aGUgXFxcInNldFxcXCIgbWF0Y2hcXG4gIDEwOlxcdFxcdCAgYW5kIFxcXCJTRVRcXFwiIHRhcmdldC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgSVBfU0VUXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbmZpZyBJUF9TRVRfTUFYXFxuICAxNzpcXHRcXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIElQIHNldHNcXFwiXFxuICAxODpcXHRcXHRkZWZhdWx0IDI1NlxcbiAgMTk6XFx0XFx0cmFuZ2UgMiA2NTUzNFxcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MDk6MDcuNjEyOTA1NTkxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NjkwNDg4NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgSVBfU0VUYCBEZXBlbmRlbmN5IGFuZCBLZXkgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYElQX1NFVGAgZnVuY3Rpb25hbGl0eSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBpdHMgZGVwZW5kZW5jeSBvbiBgSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSYC4gR290dGEgcmVtZW1iZXIgdGhhdCwgaXQncyBmdW5kYW1lbnRhbCB0byBpdHMgb3BlcmF0aW9uLiBOb3csIHRvIGFjdHVhbGx5ICp1c2UqIHRoaXMgdGhpbmcsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYElQX1NFVGAgYW5kIGBJUF9TRVRfTElTVF9TRVRgIGVuYWJsZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb25zLiBUaG9zZSBhcmUgdGhlIGVzc2VudGlhbHMuXG5cbk15IGltbWVkaWF0ZSBmb2N1cywgdGhvdWdoLCBpcyBvbiB0aGUgY29yZSBmdW5jdGlvbnMuIEkgdGhpbmsgYGxpc3Rfc2V0X3VhZGRgIGlzIHRoZSBvbmUgdG8gc3RhcnQgd2l0aCwgYWRkaW5nIGVsZW1lbnRzIHRvIHRoZSBsaXN0LiBUaGF0IHNlZW1zIGxpa2UgdGhlIGNlbnRyYWwgYWN0aW9uLiBCdXQgSSBjYW4ndCBqdXN0IGZpeGF0ZSBvbiBvbmUgZnVuY3Rpb247IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGxpc3Rfc2V0X3JlcGxhY2VgLCBqdXN0IGluIGNhc2UgdGhlcmUncyBhbm90aGVyIGNydWNpYWwgZnVuY3Rpb24gdGhhdCBJIGhhdmUgb3Zlcmxvb2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTg1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxMDoyNi4zMDMzOTY3NThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTMzMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpc3Rfc2V0X3JlcGxhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTE2Mz1zdGF0aWMgdm9pZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MTY0Omxpc3Rfc2V0X3JlcGxhY2Uoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3Qgc2V0X2VsZW0gKmUsIHN0cnVjdCBzZXRfZWxlbSAqb2xkKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMTY1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MjM2PWxpc3Rfc2V0X3VhZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzA0LVxcdGlmIChuKSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzozMDU6XFx0XFx0bGlzdF9zZXRfcmVwbGFjZShzZXQsIGUsIG4pO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzA2LVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxMDoyNi4zNTE1MzQwOTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk2MjQ5MzQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBsaXN0X3NldGAgRnVuY3Rpb24gSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBvcHRpbWl6ZSBpdCBiYXNlZCBvbiB0aGUgcHJvbXB0J3MgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgc2VlIGBsaXN0X3NldF9yZXBsYWNlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgbm90ZS4gVGhlbiBJIG5vdGljZSBgbGlzdF9zZXRfdWFkZGAgaXMgKmFsc28qIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEhvd2V2ZXIsIGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgc2V0X3ZhcmlhbnRgLCBzcGVjaWZpY2FsbHkgYXQgdGhlIGBJUFNFVF9BRERgIGluZGV4LiBUaGF0J3MgYSBrZXkgZGV0YWlsLlxuXG5XYWl0IGEgc2Vjb25kLCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBkaXNjb3VyYWdlcyBzdGF0aWMgZnVuY3Rpb25zIGlmIHBvc3NpYmxlLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCB3aHkgaXMgYGxpc3Rfc2V0X3VhZGRgIHN0YXRpYz8gQW5kIGlzIGl0IG5lY2Vzc2FyeT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHVzYWdlLiBPa2F5LCBsZXQncyBzZWUsIGl0IGlzIGFzc2lnbmVkIHRvIGBzZXRfdmFyaWFudC5hZHRbSVBTRVRfQUREXWAuIE5vdywgSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgc2V0X3ZhcmlhbnRgIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGFjdHVhbGx5ICp1c2VkKi4gV2hlcmUgaXMgYHNldF92YXJpYW50YCB1dGlsaXplZD8gTGV0J3MgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MTA6MzUuMzE0MDMwODIxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTE2NzUwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfdmFyaWFudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9NTQ3PWxpc3Rfc2V0X2NhbmNlbF9nYyhzdHJ1Y3QgaXBfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTU1Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjU1ODpzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgc2V0X3ZhcmlhbnQgPSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NTktXFx0LmthZHRcXHQ9IGxpc3Rfc2V0X2thZHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTYyMD1saXN0X3NldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTYzNS1cXHRsb2NrZGVwX3NldF9jbGFzcyhcXHUwMDI2c2V0LVxcdTAwM2Vsb2NrLCBcXHUwMDI2bGlzdF9zZXRfbG9ja2RlcF9rZXkpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NjM2OlxcdHNldC1cXHUwMDNldmFyaWFudCA9IFxcdTAwMjZzZXRfdmFyaWFudDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTYzNy1cXHRzZXQtXFx1MDAzZWRzaXplID0gaXBfc2V0X2VsZW1fbGVuKHNldCwgdGIsIHNpemVvZihzdHJ1Y3Qgc2V0X2VsZW0pLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxMDozNS4zNjUyMDA3NjhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA0NzYwNjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlwX3NldF9jb3JlLmMgQ29kZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGBzZXQtXHUwMDNldmFyaWFudGAgaXMgbGlrZWx5IGJlaW5nIHV0aWxpemVkIHdpdGhpbiBgaXBfc2V0X2NvcmUuY2AuIFRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyBjb2RlIGJhc2UgdXN1YWxseSBtZWFucyB0aGF0IGBzZXQtXHUwMDNldmFyaWFudGAgaGFzIGEgc2lnbmlmaWNhbnQgcm9sZS4gR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBmaWxlIGBpcF9zZXRfY29yZS5jYCBkaXJlY3RseSB0byBzZWUgaG93IGAtXHUwMDNldmFyaWFudGAgaXMgYmVpbmcgdXNlZCBhbmQsIHNwZWNpZmljYWxseSwgaG93IHRoZSBgLVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0YCBpcyB1c2VkIHdpdGhpbiB0aGF0IGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBzdHJ1Y3R1cmVzIHRvIGJldHRlciBjb21wcmVoZW5kIHRoZSBvdmVyYWxsIGRlc2lnbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyOTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxMDo0My40MTI4MDk3MzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjUwMDA3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2YXJpYW50LVxcdTAwM2VhZHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxMDo0My40NjAwNzcwNzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU1MDg2MzU5MTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBpczpcblxuKipDaGVja2luZyBgYWR0YCBpbiBgaXBfc2V0X2NvcmUuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBhZHRgIOKAkyB0aGUgYWJzdHJhY3QgZGF0YSB0eXBlIOKAkyB3aXRoaW4gdGhlIGBpcF9zZXRfY29yZS5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNldCBpbXBsZW1lbnRhdGlvbiBpcyBzdHJ1Y3R1cmVkIGF0IHRoZSBjb3JlIGxldmVsLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHRoaXMgZmlsZSBob2xkcyB0aGUgZm91bmRhdGlvbmFsIGRlZmluaXRpb25zIGFuZCBvcGVyYXRpb25zLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIG1lbW9yeSBsYXlvdXQsIGFueSBrZXkgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGJhc2ljIHNldCBtYW5pcHVsYXRpb24gcm91dGluZXMgdXNlZCBieSB0aGUgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgYGFkdGAgaXMgaGFuZGxlZCBoZXJlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIHBlcmZvcm1hbmNlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkncmUgdXNpbmcgYSBzdGFuZGFyZCBsaWJyYXJ5J3MgaW1wbGVtZW50YXRpb24sIG9yIGlmIHRoZXkndmUgcm9sbGVkIHRoZWlyIG93biwgYW5kIHdoeS4gQW55IGNsZXZlciBvcHRpbWl6YXRpb25zIHdpbGwgYmUgb2J2aW91cyBoZXJlLiBUaGUgZ29hbCBpcyBhIHF1aWNrIHJlY29ubmFpc3NhbmNlLCB0byBnYWluIGEgaGlnaC1sZXZlbCBwaWN0dXJlIGJlZm9yZSBJIGRlbHZlIGRlZXBlciBpbnRvIHNwZWNpZmljIHNldCB0eXBlcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSB3aWxsIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGRlY2xhcmF0aW9uIG9mIHRoZSBgYWR0YCwgb3IgdXNhZ2Ugb2YgYW55IGV4aXN0aW5nIGBhZHRgIHN0cnVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUyNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjEzOjE4LjU0NjQzOTIyN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0ODA1MTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuYWR0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MTM6MTguNTkxOTI0NjI0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTg1OTMwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCdzIGNvbWluZyBkaXJlY3RseSBmcm9tIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgaXBfc2V0X2NvcmUuY2AgZm9yIEFEVCBJbnNwZWN0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIExldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGxvb2sgYXQgYGlwX3NldF9jb3JlLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSB0aGUgYC1cdTAwM2VhZHRgIGFzcGVjdCB3aXRoaW4gdGhhdCBmaWxlLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBzb21lIGludGVyYWN0aW9uIHRoZXJlIHRoYXQgd2FycmFudHMgYXR0ZW50aW9uLCBhbmQga25vd2luZyB0aGUgY29yZSdzIGltcGxlbWVudGF0aW9uIGlzIGtleSBmb3IgbWUuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSBleHBlY3QgdG8gc2VlIHRoZSBsb3cgbGV2ZWwgZGV0YWlscyBJIG5lZWQgZm9yIG5vdy4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxMzoyMi42NTA1MjAxMDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTgxNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNlYWR0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTgxOD1zdGF0aWMgaW50IGlwX3NldF9hZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpjdG5sLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NTEtXFx0XFx0XFx0XFx0ICAgICBhdHRyW0lQU0VUX0FUVFJfREFUQV0sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE4NTI6XFx0XFx0XFx0XFx0ICAgICBzZXQtXFx1MDAzZXR5cGUtXFx1MDAzZWFkdF9wb2xpY3ksIE5VTEwpKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xODUzLVxcdFxcdFxcdHJldHVybiAtSVBTRVRfRVJSX1BST1RPQ09MO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NjItXFx0XFx0XFx0ICAgIG5sYV9wYXJzZV9uZXN0ZWQodGIsIElQU0VUX0FUVFJfQURUX01BWCwgbmxhLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxODYzOlxcdFxcdFxcdFxcdFxcdCAgICAgc2V0LVxcdTAwM2V0eXBlLVxcdTAwM2VhZHRfcG9saWN5LCBOVUxMKSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg2NC1cXHRcXHRcXHRcXHRyZXR1cm4gLUlQU0VUX0VSUl9QUk9UT0NPTDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xODg4PXN0YXRpYyBpbnQgaXBfc2V0X3V0ZXN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTkwNy1cXHRpZiAobmxhX3BhcnNlX25lc3RlZCh0YiwgSVBTRVRfQVRUUl9BRFRfTUFYLCBhdHRyW0lQU0VUX0FUVFJfREFUQV0sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE5MDg6XFx0XFx0XFx0ICAgICBzZXQtXFx1MDAzZXR5cGUtXFx1MDAzZWFkdF9wb2xpY3ksIE5VTEwpKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xOTA5LVxcdFxcdHJldHVybiAtSVBTRVRfRVJSX1BST1RPQ09MO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxMzoyMi42OTQxMDU3ODNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NjkwOTEzMzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgdGVybXM6XG5cbioqRGl2aW5nIGludG8gdGhlIGBpcF9zZXRgIEFEVCoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIGxpa2UgYSBzZXQsIGFuZCBpdCBsb29rcyBsaWtlIHdlJ3JlIGludGVyZXN0ZWQgaW4gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHZhcmlhbnRzIGFuZCBhYnN0cmFjdCBkYXRhIHR5cGVzIChBRFRzKSB3aXRoaW4gdGhhdCBzZXQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0YCBjb25uZWN0aW9uLlxuXG5IbW0sIHRoaXMgc291bmRzIGxpa2UgYSBwb3RlbnRpYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsLiBMZXQncyBtYWtlIHN1cmUgb3VyIHVuZGVyc3RhbmRpbmcgb2YgYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YCBpcyBhY2N1cmF0ZS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9mIGhvdyB0aGUgZGlmZmVyZW50IHNldCB0eXBlcyBhcmUgc3RydWN0dXJlZCBhbmQgcmVwcmVzZW50ZWQgaW50ZXJuYWxseS4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDQ0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MTg6NTIuMzg1MDIyNzAzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE3MTMzNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg9MTQxPXN0cnVjdCBpcF9zZXRfYWR0X29wdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaC0xNDktLyogU2V0IHR5cGUsIHZhcmlhbnQtc3BlY2lmaWMgcGFydCAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oOjE1MDpzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCB7XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtMTUxLVxcdC8qIEtlcm5lbHNwYWNlOiB0ZXN0L2FkZC9kZWwgZW50cmllc1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg9MjQ2PXN0cnVjdCBpcF9zZXQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtMjYxLVxcdC8qIFRoZSB0eXBlIHZhcmlhbnQgZG9pbmcgdGhlIHJlYWwgam9iICovXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6MjYyOlxcdGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50ICp2YXJpYW50O1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTI2My1cXHQvKiBUaGUgYWN0dWFsIElORVQgZmFtaWx5IG9mIHRoZSBzZXQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MTg6NTIuNjI2NzQyNjE3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NzI5OTUzOTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHZhcmlvdXMgSVAgc2V0IHR5cGVzIGFyZSBoYW5kbGVkIGF0IGEgbG93IGxldmVsLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudGAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaGAuIFRoaXMgc3RydWN0dXJlIGlzIGNydWNpYWwgYmVjYXVzZSBpdCdzIHRoZSBmb3VuZGF0aW9uIGZvciBob3cgZGlmZmVyZW50IElQIHNldCBpbXBsZW1lbnRhdGlvbnMgYXJlIG1hbmFnZWQgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBhYnN0cmFjdGlvbiBpcyBkZXNpZ25lZCBhbmQgaG93IHRoZSBpbnRlcmZhY2VzIGZvciBzcGVjaWZpYyB0eXBlcyBhcmUgY3JlYXRlZC4gSSdtIGhvcGluZyB0byBnYWluIGluc2lnaHRzIGludG8gaG93IHRoZSBiYXNlIHNldCBkYXRhIHN0cnVjdHVyZSBpcyBleHRlbmRlZCBhbmQgb3B0aW1pemVkIGZvciBkaWZmZXJlbnQgdXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MTMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxOTo1MS4zNTY3MDAyNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNDksXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDk6XFx0LyogU2V0IHR5cGUsIHZhcmlhbnQtc3BlY2lmaWMgcGFydCAqL1xcbiAxNTA6XFx0c3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQge1xcbiAxNTE6XFx0XFx0LyogS2VybmVsc3BhY2U6IHRlc3QvYWRkL2RlbCBlbnRyaWVzXFxuIDE1MjpcXHRcXHQgKlxcdFxcdHJldHVybnMgbmVnYXRpdmUgZXJyb3IgY29kZSxcXG4gMTUzOlxcdFxcdCAqXFx0XFx0XFx0emVybyBmb3Igbm8gbWF0Y2gvc3VjY2VzcyB0byBhZGQvZGVsZXRlXFxuIDE1NDpcXHRcXHQgKlxcdFxcdFxcdHBvc2l0aXZlIGZvciBtYXRjaGluZyBlbGVtZW50ICovXFxuIDE1NTpcXHRcXHRpbnQgKCprYWR0KShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIDE1NjpcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbiAxNTc6XFx0XFx0XFx0ICAgIGVudW0gaXBzZXRfYWR0IGFkdCwgc3RydWN0IGlwX3NldF9hZHRfb3B0ICpvcHQpO1xcbiAxNTg6XFx0XFxuIDE1OTpcXHRcXHQvKiBVc2Vyc3BhY2U6IHRlc3QvYWRkL2RlbCBlbnRyaWVzXFxuIDE2MDpcXHRcXHQgKlxcdFxcdHJldHVybnMgbmVnYXRpdmUgZXJyb3IgY29kZSxcXG4gMTYxOlxcdFxcdCAqXFx0XFx0XFx0emVybyBmb3Igbm8gbWF0Y2gvc3VjY2VzcyB0byBhZGQvZGVsZXRlXFxuIDE2MjpcXHRcXHQgKlxcdFxcdFxcdHBvc2l0aXZlIGZvciBtYXRjaGluZyBlbGVtZW50ICovXFxuIDE2MzpcXHRcXHRpbnQgKCp1YWR0KShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuIDE2NDpcXHRcXHRcXHQgICAgZW51bSBpcHNldF9hZHQgYWR0LCB1MzIgKmxpbmVubywgdTMyIGZsYWdzLCBib29sIHJldHJpZWQpO1xcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHQvKiBMb3cgbGV2ZWwgYWRkL2RlbC90ZXN0IGZ1bmN0aW9ucyAqL1xcbiAxNjc6XFx0XFx0aXBzZXRfYWR0Zm4gYWR0W0lQU0VUX0FEVF9NQVhdO1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRcXHQvKiBXaGVuIGFkZGluZyBlbnRyaWVzIGFuZCBzZXQgaXMgZnVsbCwgdHJ5IHRvIHJlc2l6ZSB0aGUgc2V0ICovXFxuIDE3MDpcXHRcXHRpbnQgKCpyZXNpemUpKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKTtcXG4gMTcxOlxcdFxcdC8qIERlc3Ryb3kgdGhlIHNldCAqL1xcbiAxNzI6XFx0XFx0dm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBpcF9zZXQgKnNldCk7XFxuIDE3MzpcXHRcXHQvKiBGbHVzaCB0aGUgZWxlbWVudHMgKi9cXG4gMTc0OlxcdFxcdHZvaWQgKCpmbHVzaCkoc3RydWN0IGlwX3NldCAqc2V0KTtcXG4gMTc1OlxcdFxcdC8qIEV4cGlyZSBlbnRyaWVzIGJlZm9yZSBsaXN0aW5nICovXFxuIDE3NjpcXHRcXHR2b2lkICgqZXhwaXJlKShzdHJ1Y3QgaXBfc2V0ICpzZXQpO1xcbiAxNzc6XFx0XFx0LyogTGlzdCBzZXQgaGVhZGVyIGRhdGEgKi9cXG4gMTc4OlxcdFxcdGludCAoKmhlYWQpKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjE5OjUxLjM1Njc4NTQ1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzMyMTgxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGF0IEZ1bmN0aW9uIFBvaW50ZXIgQXJyYXkqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiB0aGF0IGBhZHRbSVBTRVRfQURUX01BWF1gIGFycmF5LCB0aGF0J3MgZGVmaW5pdGVseSBhIGNvbGxlY3Rpb24gb2YgZnVuY3Rpb24gcG9pbnRlcnMuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuIEl0J3MgbGlrZWx5IGEgZGlzcGF0Y2ggdGFibGUgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFsbG93aW5nIGZvciBkeW5hbWljIGZ1bmN0aW9uIGNhbGxzIGJhc2VkIG9uIHNvbWUgaW5kZXggb3IgY29uZGl0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgZnVuY3Rpb25zICpkbyouIExldCdzIHRyYWNlIHdoZXJlIHRoYXQgYGFkdGAgdmFyaWFibGUgaXMgYWN0dWFsbHkgdXNlZC4gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dHMgd2hlcmUgdGhlIGFycmF5IGVsZW1lbnRzIGFyZSBjYWxsZWQsIGhvdyB0aGUgaW5kZXggaXMgY2hvc2VuLCBhbmQgd2hhdCBkYXRhIGdldHMgcGFzc2VkLiBUaGF0J2xsIGdpdmUgbWUgdGhlIHJlYWwgaW5zaWdodCBpbnRvIHRoZSBpbnRlbnQgb2YgdGhpcyBzdHJ1Y3R1cmUgYW5kIGl0cyByZWxhdGlvbiB0byBvdGhlciBlbGVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjE5OjU1LjM5MDAwNjE2M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2NDMzNjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkdFxcXFxbXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTExMD1iaXRtYXBfaXBfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0xMTQtXFx0c3RydWN0IGJpdG1hcF9pcCAqbWFwID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jOjExNTpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMTE2LVxcdHN0cnVjdCBiaXRtYXBfaXBfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM9MTMwPWJpdG1hcF9pcF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTEzMy1cXHRzdHJ1Y3QgYml0bWFwX2lwICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MTM0OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0xMzUtXFx0dTMyIGlwID0gMCwgaXBfdG8gPSAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM9MjA5PWJpdG1hcF9pcG1hY19rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTIxMy1cXHRzdHJ1Y3QgYml0bWFwX2lwbWFjICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM6MjE0OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0yMTUtXFx0c3RydWN0IGJpdG1hcF9pcG1hY19hZHRfZWxlbSBlID0geyAuaWQgPSAwLCAuYWRkX21hYyA9IDEgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTI0Mj1iaXRtYXBfaXBtYWNfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0yNDUtXFx0Y29uc3Qgc3RydWN0IGJpdG1hcF9pcG1hYyAqbWFwID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjI0NjpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMjQ3LVxcdHN0cnVjdCBiaXRtYXBfaXBtYWNfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYz0xMjc9Yml0bWFwX3BvcnRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTEzMS1cXHRzdHJ1Y3QgYml0bWFwX3BvcnQgKm1hcCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jOjEzMjpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0xMzMtXFx0c3RydWN0IGJpdG1hcF9wb3J0X2FkdF9lbGVtIGUgPSB7IC5pZCA9IDAgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM9MTUzPWJpdG1hcF9wb3J0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0xNTYtXFx0c3RydWN0IGJpdG1hcF9wb3J0ICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYzoxNTc6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMtMTU4LVxcdHN0cnVjdCBiaXRtYXBfcG9ydF9hZHRfZWxlbSBlID0geyAuaWQgPSAwIH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9ODA9aGFzaF9pcDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtODQtXFx0Y29uc3Qgc3RydWN0IGhhc2hfaXA0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzo4NTpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTg2LVxcdHN0cnVjdCBoYXNoX2lwNF9lbGVtIGUgPSB7IDAgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0xMDA9aGFzaF9pcDRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMTAzLVxcdHN0cnVjdCBoYXNoX2lwNCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MTA0OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMTA1LVxcdHN0cnVjdCBoYXNoX2lwNF9lbGVtIGUgPSB7IDAgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMTY9aGFzaF9pcDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjIwLVxcdGNvbnN0IHN0cnVjdCBoYXNoX2lwNiAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MjIxOlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjIyLVxcdHN0cnVjdCBoYXNoX2lwNl9lbGVtIGUgPSB7IHsgLmFsbCA9IHsgMCB9IH0gfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMzQ9aGFzaF9pcDZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjM3LVxcdGNvbnN0IHN0cnVjdCBoYXNoX2lwNiAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MjM4OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjM5LVxcdHN0cnVjdCBoYXNoX2lwNl9lbGVtIGUgPSB7IHsgLmFsbCA9IHsgMCB9IH0gfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz04NT1oYXNoX2lwbWFjNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy04OC17XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjg5OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtOTAtXFx0c3RydWN0IGhhc2hfaXBtYWM0X2VsZW0gZSA9IHsgLmlwID0gMCwgeyAuZm9vWzBdID0gMCwgLmZvb1sxXSA9IDAgfSB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTExMT1oYXNoX2lwbWFjNF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0xMTMte1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxMTQ6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0xMTUtXFx0c3RydWN0IGhhc2hfaXBtYWM0X2VsZW0gZSA9IHsgLmlwID0gMCwgeyAuZm9vWzBdID0gMCwgLmZvb1sxXSA9IDAgfSB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE5OD1oYXNoX2lwbWFjNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0yMDEte1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoyMDI6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0yMDMtXFx0c3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gZSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz0yMjc9aGFzaF9pcG1hYzZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMjI5LXtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM6MjMwOlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMjMxLVxcdHN0cnVjdCBoYXNoX2lwbWFjNl9lbGVtIGUgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTgwPWhhc2hfaXBtYXJrNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtODQtXFx0Y29uc3Qgc3RydWN0IGhhc2hfaXBtYXJrNCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjg1OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTg2LVxcdHN0cnVjdCBoYXNoX2lwbWFyazRfZWxlbSBlID0geyB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz05Nz1oYXNoX2lwbWFyazRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTEwMC1cXHRzdHJ1Y3QgaGFzaF9pcG1hcms0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6MTAxOlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTEwMi1cXHRzdHJ1Y3QgaGFzaF9pcG1hcms0X2VsZW0gZSA9IHsgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjE5PWhhc2hfaXBtYXJrNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjIzLVxcdGNvbnN0IHN0cnVjdCBoYXNoX2lwbWFyazYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyMjQ6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjI1LVxcdHN0cnVjdCBoYXNoX2lwbWFyazZfZWxlbSBlID0geyB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz0yMzY9aGFzaF9pcG1hcms2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yMzktXFx0Y29uc3Qgc3RydWN0IGhhc2hfaXBtYXJrNiAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjI0MDpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yNDEtXFx0c3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtIGUgPSB7IH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTkxPWhhc2hfaXBwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtOTQte1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6OTU6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtOTYtXFx0c3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtIGUgPSB7IC5pcCA9IDAgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MTEyPWhhc2hfaXBwb3J0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMTE1LVxcdHN0cnVjdCBoYXNoX2lwcG9ydDQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoxMTY6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMTE3LVxcdHN0cnVjdCBoYXNoX2lwcG9ydDRfZWxlbSBlID0geyAuaXAgPSAwIH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTI2ND1oYXNoX2lwcG9ydDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI2Ny17XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyNjg6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjY5LVxcdHN0cnVjdCBoYXNoX2lwcG9ydDZfZWxlbSBlID0geyAuaXAgPSB7IC5hbGwgPSB7IDAgfSB9IH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTI4Nj1oYXNoX2lwcG9ydDZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI4OS1cXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnQ2ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6MjkwOlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI5MS1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnQ2X2VsZW0gZSA9IHsgLmlwID0geyAuYWxsID0geyAwIH0gfSB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTkwPWhhc2hfaXBwb3J0aXA0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTkzLXtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6OTQ6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy05NS1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRpcDRfZWxlbSBlID0geyAuaXAgPSAwIH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9MTA4PWhhc2hfaXBwb3J0aXA0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTExMS1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRpcDQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjExMjpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTExMy1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRpcDRfZWxlbSBlID0geyAuaXAgPSAwIH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9MjYzPWhhc2hfaXBwb3J0aXA2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI2Ni17XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjI2NzpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI2OC1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRpcDZfZWxlbSBlID0geyAuaXAgPSB7IC5hbGwgPSB7IDAgfSB9IH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9MjgxPWhhc2hfaXBwb3J0aXA2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI4NC1cXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRpcDYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjI4NTpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI4Ni1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRpcDZfZWxlbSBlID0geyAgLmlwID0geyAuYWxsID0geyAwIH0gfSB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0xMzQ9aGFzaF9pcHBvcnRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xMzgtXFx0Y29uc3Qgc3RydWN0IGhhc2hfaXBwb3J0bmV0NCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjEzOTpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xNDAtXFx0c3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGUgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTE2MD1oYXNoX2lwcG9ydG5ldDRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTE2My1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6MTY0OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTE2NS1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0sgLSAxIH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTM5ND1oYXNoX2lwcG9ydG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTM5OC1cXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6Mzk5OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQwMC1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2X2VsZW0gZSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9NDIwPWhhc2hfaXBwb3J0bmV0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDIzLVxcdGNvbnN0IHN0cnVjdCBoYXNoX2lwcG9ydG5ldDYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzo0MjQ6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDI1LVxcdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyAtIDEgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM9NzM9aGFzaF9tYWM0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy03Ni17XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYzo3NzpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy03OC1cXHRzdHJ1Y3QgaGFzaF9tYWM0X2VsZW0gZSA9IHsgeyAuZm9vWzBdID0gMCwgLmZvb1sxXSA9IDAgfSB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYz05Nj1oYXNoX21hYzRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTk4LXtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjk5OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTEwMC1cXHRzdHJ1Y3QgaGFzaF9tYWM0X2VsZW0gZSA9IHsgeyAuZm9vWzBdID0gMCwgLmZvb1sxXSA9IDAgfSB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMTM9aGFzaF9uZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMTctXFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0NCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjExODpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMTktXFx0c3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTEzNj1oYXNoX25ldDRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEzOS1cXHRzdHJ1Y3QgaGFzaF9uZXQ0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTQwOlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTE0MS1cXHRzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0sgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9Mjg3PWhhc2hfbmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjkxLVxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldDYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyOTI6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjkzLVxcdHN0cnVjdCBoYXNoX25ldDZfZWxlbSBlID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0zMTA9aGFzaF9uZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0zMTIte1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MzEzOlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTMxNC1cXHRzdHJ1Y3QgaGFzaF9uZXQ2X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0sgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xNTc9aGFzaF9uZXRpZmFjZTRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTYxLVxcdHN0cnVjdCBoYXNoX25ldGlmYWNlNCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MTYyOlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTYzLVxcdHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtIGUgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTk4PWhhc2hfbmV0aWZhY2U0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTIwMS1cXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjIwMjpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTIwMy1cXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSywgLmVsZW0gPSAxIH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9Mzc4PWhhc2hfbmV0aWZhY2U2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM4Mi1cXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM4MzpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM4NC1cXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTZfZWxlbSBlID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTQxNz1oYXNoX25ldGlmYWNlNl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy00MTkte1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzo0MjA6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy00MjEtXFx0c3RydWN0IGhhc2hfbmV0aWZhY2U2X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0ssIC5lbGVtID0gMSB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0xNDM9aGFzaF9uZXRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0xNDctXFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0bmV0NCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjE0ODpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0xNDktXFx0c3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtIGUgPSB7IH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTE2OD1oYXNoX25ldG5ldDRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTE3MS1cXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MTcyOlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTE3My1cXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ0X2VsZW0gZSA9IHsgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9Mzg0PWhhc2hfbmV0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzg4LVxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldG5ldDYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozODk6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzkwLVxcdHN0cnVjdCBoYXNoX25ldG5ldDZfZWxlbSBlID0geyB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz00MTQ9aGFzaF9uZXRuZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy00MTYte1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6NDE3OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTQxOC1cXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ2X2VsZW0gZSA9IHsgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTEyOT1oYXNoX25ldHBvcnQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTMzLVxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnQ0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjEzNDpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTM1LVxcdHN0cnVjdCBoYXNoX25ldHBvcnQ0X2VsZW0gZSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTE1ND1oYXNoX25ldHBvcnQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTU3LVxcdHN0cnVjdCBoYXNoX25ldHBvcnQ0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjE1ODpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTU5LVxcdHN0cnVjdCBoYXNoX25ldHBvcnQ0X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0sgLSAxIH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0zNDk9aGFzaF9uZXRwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM1My1cXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NiAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzozNTQ6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM1NS1cXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0Nl9lbGVtIGUgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0zNzQ9aGFzaF9uZXRwb3J0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM3Ny1cXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NiAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzozNzg6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM3OS1cXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0Nl9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLICAtIDEgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTE1MT1oYXNoX25ldHBvcnRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTU1LVxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjE1NjpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTU3LVxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gZSA9IHsgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTE5MD1oYXNoX25ldHBvcnRuZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTkzLVxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjE5NDpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTk1LVxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gZSA9IHsgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTQ0OD1oYXNoX25ldHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDUyLVxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjQ1MzpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDU0LVxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gZSA9IHsgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTQ3Nz1oYXNoX25ldHBvcnRuZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDgwLVxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjQ4MTpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDgyLVxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gZSA9IHsgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MzUzPWxpc3Rfc2V0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0zNTYtXFx0c3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzozNTc6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzU4LVxcdHN0cnVjdCBzZXRfYWR0X2VsZW0gZSA9IHsgLnJlZmlkID0gSVBTRVRfSU5WQUxJRF9JRCB9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxOTo1NS44MDY0NDcyOTVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjczMzU3MTcyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXBseSBmYW1pbGlhciB3aXRoIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgYGxpc3Rfc2V0X3VhZHRgKipcblxuUmlnaHQsIHNvIGBsaXN0X3NldF91YWR0YCBpcyBjYWxsaW5nIGBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XWAuIFRoYXQncyB0aGUgY29yZSBvcGVyYXRpb24uIE9rYXksIEkgZ2V0IGl0LCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzZXQsIGFuZCBpdHMgdmFyaWFudCBpcyBsaWtlbHkgYW4gaW1wbGVtZW50YXRpb24gb2YgZGlmZmVyZW50IEFEVHMgKEFic3RyYWN0IERhdGEgVHlwZXMpLCBwb3RlbnRpYWxseSBzb21ldGhpbmcgbGlrZSBhIGhhc2ggdGFibGUgb3IgYSB0cmVlLiBUaGlzIGNhbGwgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRoZSBgYWR0YHRoIGVsZW1lbnQgd2l0aGluIHRoZSBzZXQncyBzcGVjaWZpYyBBRFQuICBUaGUgcXVlc3Rpb24gbm93IGlzICp3aHkqPyBXaGF04oCZcyBkcml2aW5nIHRoaXMgY2FsbD8gVGltZSB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgYGxpc3Rfc2V0X3VhZHRgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gTGV0J3MgZ28gc3BlbHVua2luZyB0aHJvdWdoIHRoZSBjb2RlYmFzZSBhbmQgc2VlIHdoYXQncyB0cmlnZ2VyaW5nIHRoaXMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NzEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyMTowMy4xNDIxNjcyNDdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjAyNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpc3Rfc2V0X3VhZHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTM1Mj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzozNTM6bGlzdF9zZXRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0zNTQtXFx0ICAgICAgZW51bSBpcHNldF9hZHQgYWR0LCB1MzIgKmxpbmVubywgdTMyIGZsYWdzLCBib29sIHJldHJpZWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTU1OD1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgc2V0X3ZhcmlhbnQgPSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NTktXFx0LmthZHRcXHQ9IGxpc3Rfc2V0X2thZHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzo1NjA6XFx0LnVhZHRcXHQ9IGxpc3Rfc2V0X3VhZHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NjEtXFx0LmFkdFxcdD0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyMTowMy4xODczNzU4ODRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0ODg5NDI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVBRFQgQXNzaWdubWVudCBhbmQgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBsaXN0X3NldF91YWR0YCBpcyBiZWluZyBhc3NpZ25lZCB0byBgc2V0X3ZhcmlhbnQudWFkdGAuIFJpZ2h0LCBhbmQgdGhhdCBgc2V0X3ZhcmlhbnQudWFkdGAgaXMgdGhlbiBpbnZva2VkIGZyb20gYGlwX3NldF9jb3JlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhhdCBgLVx1MDAzZXVhZHRgIG1lbWJlciB3aXRoaW4gYGlwX3NldF9jb3JlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBVQURULCBvciBVc2VyLURlZmluZWQgQWJzdHJhY3QgRGF0YSBUeXBlLCBpcyBiZWluZyB1dGlsaXplZCBpbiB0aGUgY29yZSBJUCBzZXQgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBkaXZlIGludG8gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCBvcGVyYXRpb25zIGFyZSBiZWluZyBwZXJmb3JtZWQgb24gaXQuIEl04oCZcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBwb2ludGVyIGRlcmVmZXJlbmNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIGl0LCBhbmQgd2hhdCB0aGF0IGRhdGEgaXMgdXNlZCBmb3IuIFRoaXMgaXMgYSBrZXkgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIHNldCB2YXJpYW50IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgSVAgc2V0IGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExOTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyMTowNy44MzYyNzI4OTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTcwNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNldWFkdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE3NDY9Y2FsbF9hZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpjdG5sLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE3NjMtXFx0XFx0aXBfc2V0X2xvY2soc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTc2NDpcXHRcXHRyZXQgPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZXVhZHQoc2V0LCB0YiwgYWR0LCBcXHUwMDI2bGluZW5vLCBmbGFncywgcmV0cmllZCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE3NjUtXFx0XFx0aXBfc2V0X3VubG9jayhzZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE4ODg9c3RhdGljIGludCBpcF9zZXRfdXRlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xOTExLVxcdHJjdV9yZWFkX2xvY2tfYmgoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTkxMjpcXHRyZXQgPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZXVhZHQoc2V0LCB0YiwgSVBTRVRfVEVTVCwgXFx1MDAyNmxpbmVubywgMCwgMCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE5MTMtXFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjIxOjA3Ljg4MTI1MTMyMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTcwMTQ2MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgaXBfc2V0YCBmdW5jdGlvbmFsaXR5LiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgY2FsbF9hZGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYm90aCBgaXBfc2V0X3VhZGRgIGFuZCBgaXBfc2V0X3VkZWxgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSXQgc3VnZ2VzdHMgdGhhdCB0aGVyZSdzIGEgY29tbW9uLCBzaGFyZWQgYWN0aW9uIGhhcHBlbmluZyB3aGVuIGFkZGluZyBvciBkZWxldGluZyBhbiBlbGVtZW50IGluIGFuIElQIHNldC5cblxuKipBbmFseXppbmcgdGhlIGBjYWxsX2FkYCBJbnRlcmFjdGlvbioqXG5cbk15IGltbWVkaWF0ZSBpbmNsaW5hdGlvbiBpcyB0byB1bmRlcnN0YW5kICp3aHkqIGBjYWxsX2FkYCBpcyBuZWVkZWQgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBgaXBfc2V0YCBjb250ZXh0LiBJIHNob3VsZCByZWFsbHkgZGl2ZSBpbnRvIHdoYXQgYGNhbGxfYWRgIGFjdHVhbGx5ICpkb2VzKi4gSXMgaXQgc29tZSBzb3J0IG9mIGF1eGlsaWFyeSBmdW5jdGlvbj8gSXMgaXQgaGFuZGxpbmcgbm90aWZpY2F0aW9ucywgcGVyaGFwcz8gT3IgbWF5YmUgc29tZSBzb3J0IG9mIGNvbmZpZ3VyYXRpb24gY2hhbmdlPyBXaGF0ZXZlciBpdCBkb2VzLCB0aGUgZmFjdCB0aGF0IGJvdGggYGlwX3NldF91YWRkYCAoYWRkaW5nKSBhbmQgYGlwX3NldF91ZGVsYCAoZGVsZXRpbmcpIGNhbGwgaXQgcG9pbnRzIHRvIGl0cyBjb3JlIGFuZCBmdW5kYW1lbnRhbCBuYXR1cmUuIExldCdzIG1ha2Ugc3VyZSBJJ20gY3J5c3RhbCBjbGVhciBvbiB0aGlzLiBOb3cgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgYGlwX3NldF91YWRkYCBmdW5jdGlvbi4gSSB0aGluayB0aGF0IHdpbGwgcHJvdmlkZSB0aGUgbmVlZGVkIGNvbnRleHQgZm9yIGBjYWxsX2FkYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4MDksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyMToxMi40NTE0MDA2NzdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTMxNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3NldF91YWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTgxOD1zdGF0aWMgaW50IGlwX3NldF9hZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpjdG5sLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NzMtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE4NzQ6c3RhdGljIGludCBpcF9zZXRfdWFkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xODc1LVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTIxNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIGlwX3NldF9uZXRsaW5rX3N1YnN5c19jYltJUFNFVF9NU0dfTUFYXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTk1LVxcdFtJUFNFVF9DTURfQUREXVxcdD0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMTk2OlxcdFxcdC5jYWxsXFx0XFx0PSBpcF9zZXRfdWFkZCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjE5Ny1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9NVVRFWCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjE6MTIuNDk1MzM0MTQ0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NjQ3MDI5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgdGhpbmtpbmcgZ29lcyBsaWtlIHRoaXM6XG5cbioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIENhbGxiYWNrIGZvciBJUCBTZXQgQWRkaXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBlbnRyeSBwb2ludCwgYXMgSSBzZWUgaXQsIGlzIHRoZSBgaXBfc2V0X3VhZGRgIGZ1bmN0aW9uLiBJdCdzIGEgbmV0bGluayBjYWxsYmFjaywgc28gdGhhdCBpbW1lZGlhdGVseSBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLiBOb3csIHRoZSBrZXkgZnVuY3Rpb24gcmVsYXRlZCB0byBhZGRpbmcgYW4gZWxlbWVudCBzaG91bGQgYmUgZWl0aGVyIGBpcF9zZXRfdWFkZGAgaXRzZWxmLCBvciBwZXJoYXBzIHNvbWV0aGluZyBsaWtlIGBsaXN0X3NldF91YWR0YC4gSG1tLCBidXQgd2FpdCBhIG1vbWVudC4uLiB0aGF0IGBsaXN0X3NldF91YWR0YCBmdW5jdGlvbiwgaXNuJ3QgdGhhdCBzdGF0aWMgd2l0aGluIGBpcF9zZXRfbGlzdF9zZXQuY2A/IEl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkndmUgYmVlbiBpbiB0aGlzIGNvZGUuIEJldHRlciBkb3VibGUgY2hlY2ssIGNhbid0IGFzc3VtZSBhbnl0aGluZy4gTmVlZCB0byB2ZXJpZnkgdGhhdCwgdG8gZW5zdXJlIEknbSBiYXJraW5nIHVwIHRoZSByaWdodCB0cmVlLCBiZWZvcmUgcHJvY2VlZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0NTQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyMToyMC4yNjAwMzg5MloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0NDg4NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGlzdF9zZXRfdWFkdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MzUyPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjM1MzpsaXN0X3NldF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTM1NC1cXHQgICAgICBlbnVtIGlwc2V0X2FkdCBhZHQsIHUzMiAqbGluZW5vLCB1MzIgZmxhZ3MsIGJvb2wgcmV0cmllZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBzZXRfdmFyaWFudCA9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTU1OS1cXHQua2FkdFxcdD0gbGlzdF9zZXRfa2FkdCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjU2MDpcXHQudWFkdFxcdD0gbGlzdF9zZXRfdWFkdCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTU2MS1cXHQuYWR0XFx0PSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjIxOjIwLjMwNDQ5MjY2N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY3ODYwNDAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQ2hlY2tpbmcgdGhlIFN0YXRpYyBEZWNsYXJhdGlvbiBvZiBgaXBfc2V0X3VhZGRgKipcblxuQWxyaWdodCwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgbGlzdF9zZXRfdWFkdGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIE5vdywgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoZSBgaXBfc2V0X3VhZGRgIGZ1bmN0aW9uIGlzIGFsc28gZGVjbGFyZWQgYXMgc3RhdGljLiBJIHJlY2FsbCBpdCdzIGRlZmluZWQgd2l0aGluIGBpcF9zZXRfY29yZS5jYCwgYnV0IEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRvIGJlIGNlcnRhaW4uIEknbGwgbmVlZCB0byBnbyBhbmQgZXhhbWluZSB0aGUgY29kZSBpbiBgaXBfc2V0X2NvcmUuY2AgYW5kIHNlYXJjaCBmb3IgdGhhdCBmdW5jdGlvbiBkZWNsYXJhdGlvbiB0byBjb25maXJtIGl0cyBzdGF0dXMuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAyNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjIxOjU2Ljk4MzEwMDA1NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMzc2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfc2V0X3VhZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xODE4PXN0YXRpYyBpbnQgaXBfc2V0X2FkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKmN0bmwsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg3My1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTg3NDpzdGF0aWMgaW50IGlwX3NldF91YWRkKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NzUtXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MjE0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgaXBfc2V0X25ldGxpbmtfc3Vic3lzX2NiW0lQU0VUX01TR19NQVhdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIxOTUtXFx0W0lQU0VUX0NNRF9BRERdXFx0PSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjIxOTY6XFx0XFx0LmNhbGxcXHRcXHQ9IGlwX3NldF91YWRkLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTk3LVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX01VVEVYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyMTo1Ny4wMjkyNDQwMTNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyMDg3Mzk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIElQIFNldCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGBpcF9zZXRfdWFkZGAgaXMgZGVmaW5pdGVseSBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbGltaXRzIGl0cyBkaXJlY3QgdXNhZ2UgZnJvbSBvdXRzaWRlIHRoZSBjdXJyZW50IG1vZHVsZS4gSSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gbWFuaXB1bGF0ZSB0aGUgSVAgc2V0cyBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIGFuZCB0aGF0IG1lYW5zIEkgbmVlZCBhbiBleHBvcnRlZCBmdW5jdGlvbi4gTGV0J3MgZGVsdmUgaW50byBgaXBfc2V0X2NvcmUuY2AgYW5kIHNlZSB3aGF0IHB1YmxpY2x5IGF2YWlsYWJsZSBmdW5jdGlvbnMgaXQgZGVmaW5lcy4gSG9wZWZ1bGx5LCB0aGVyZSdzIGEgZ29vZCBzZXQgb2YgZXhwb3J0ZWQgZnVuY3Rpb25zIHRvIGRvIHdoYXQgSSBuZWVkISBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBBUEkgZnVuY3Rpb25zIHRoYXQgSSBjYW4gbGV2ZXJhZ2UgdG8gd29yayB3aXRoIElQIHNldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTY2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjI6MDEuMTUwMTIxMTZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTk4MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yMDY9aXBfc2V0X3R5cGVfcmVnaXN0ZXIoc3RydWN0IGlwX3NldF90eXBlICp0eXBlKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIzNC19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjIzNTpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfdHlwZV9yZWdpc3Rlcik7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIzNi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yMzk9aXBfc2V0X3R5cGVfdW5yZWdpc3RlcihzdHJ1Y3QgaXBfc2V0X3R5cGUgKnR5cGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjU1LX1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MjU2OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF90eXBlX3VucmVnaXN0ZXIpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yNTctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MjYwPWlwX3NldF9hbGxvYyhzaXplX3Qgc2l6ZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yNjMtfVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyNjQ6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2FsbG9jKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjY1LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTI2Nz1pcF9zZXRfZnJlZSh2b2lkICptZW1iZXJzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTI3Mi19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjI3MzpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfZnJlZSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTI3NC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yODc9aXBfc2V0X2dldF9pcGFkZHI0KHN0cnVjdCBubGF0dHIgKm5sYSwgIF9fYmUzMiAqaXBhZGRyKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTMwMS19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjMwMjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfZ2V0X2lwYWRkcjQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zMDMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MzA1PWlwX3NldF9nZXRfaXBhZGRyNihzdHJ1Y3QgbmxhdHRyICpubGEsIHVuaW9uIG5mX2luZXRfYWRkciAqaXBhZGRyKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTMyMS19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjMyMjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfZ2V0X2lwYWRkcjYpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zMjMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MzQ3PWlwX3NldF9pbml0X2NvbW1lbnQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaXBfc2V0X2NvbW1lbnQgKmNvbW1lbnQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMzY4LX1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MzY5OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNzAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NDA0PWNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0X3R5cGUgaXBfc2V0X2V4dGVuc2lvbnNbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy00MjktfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NDMwOkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9leHRlbnNpb25zKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNDMxLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTQ0MT1pcF9zZXRfZWxlbV9sZW4oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzaXplX3QgbGVuLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTQ2NC19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjQ2NTpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfZWxlbV9sZW4pO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy00NjYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NDY4PWlwX3NldF9nZXRfZXh0ZW5zaW9ucyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNTIxLX1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NTIyOkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9nZXRfZXh0ZW5zaW9ucyk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTUyMy1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz01NjU9aXBfc2V0X3B1dF9leHRlbnNpb25zKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpcF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy01ODYtfVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo1ODc6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X3B1dF9leHRlbnNpb25zKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNTg4LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTYzOT1pcF9zZXRfbWF0Y2hfZXh0ZW5zaW9ucyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNjYxLX1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NjYyOkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9tYXRjaF9leHRlbnNpb25zKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNjYzLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTc0MT1pcF9zZXRfdGVzdChpcF9zZXRfaWRfdCBpbmRleCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03NzMtfVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo3NzQ6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X3Rlc3QpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03NzUtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9Nzc3PWlwX3NldF9hZGQoaXBfc2V0X2lkX3QgaW5kZXgsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNzk1LX1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6Nzk2OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9hZGQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03OTctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9Nzk5PWlwX3NldF9kZWwoaXBfc2V0X2lkX3QgaW5kZXgsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtODE3LX1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6ODE4OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9kZWwpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04MTktXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9ODI1PWlwX3NldF9nZXRfYnluYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmFtZSwgc3RydWN0IGlwX3NldCAqKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04NDQtfVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo4NDU6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2dldF9ieW5hbWUpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04NDYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9ODY2PWlwX3NldF9wdXRfYnlpbmRleChzdHJ1Y3QgbmV0ICpuZXQsIGlwX3NldF9pZF90IGluZGV4KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTg3MS19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjg3MjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfcHV0X2J5aW5kZXgpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04NzMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9ODgwPWlwX3NldF9uYW1lX2J5aW5kZXgoc3RydWN0IG5ldCAqbmV0LCBpcF9zZXRfaWRfdCBpbmRleCwgY2hhciAqbmFtZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04ODktfVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo4OTA6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X25hbWVfYnlpbmRleCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTg5MS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz05MDI9aXBfc2V0X25mbmxfZ2V0X2J5aW5kZXgoc3RydWN0IG5ldCAqbmV0LCBpcF9zZXRfaWRfdCBpbmRleClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy05MTktfVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo5MjA6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X25mbmxfZ2V0X2J5aW5kZXgpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy05MjEtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9OTI5PWlwX3NldF9uZm5sX3B1dChzdHJ1Y3QgbmV0ICpuZXQsIGlwX3NldF9pZF90IGluZGV4KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTk0MS19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjk0MjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfbmZubF9wdXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy05NDMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTQ1OT1pcF9zZXRfcHV0X2ZsYWdzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNDc5LX1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTQ4MDpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfcHV0X2ZsYWdzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTQ4MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjI6MDEuMTk1MTI0MDI3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzU3MzQ0ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBFeHBvcnRlZCBgaXBfc2V0X2FkZGAgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gYGlwX3NldF9hZGRgIGlzIGV4cG9ydGVkLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEga2V5IGFyZWEgZm9yIGFuYWx5c2lzLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gaXRzIGV4cG9ydCwgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gYGlwX3NldF9jb3JlLmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGZ1bmRhbWVudGFsIHRvIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb3JlIElQIHNldCBmdW5jdGlvbmFsaXR5LCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlcm5hbCB3b3JraW5ncyBpcyBjcnVjaWFsLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgaXTigJlzIGhhbmRsaW5nIHRoZSBhZGRpdGlvbiBvZiBlbGVtZW50cyB0byB0aGUgc2V0LCB0aGUgZXJyb3IgY2hlY2tpbmcgaW52b2x2ZWQsIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgaXQgZW1wbG95cywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uIGxpZXMsIGFuZCBhIHF1aWNrIGdsYW5jZSBhdCB0aGUgc291cmNlIHdpbGwgdGVsbCBtZSB2b2x1bWVzLiBUaGUgZGVzaWduIGNob2ljZXMgbWFkZSBoZXJlIGltcGFjdCBwZXJmb3JtYW5jZSwgY29uY3VycmVuY3ksIGFuZCBzZWN1cml0eS4gVGltZSB0byBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzMyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjI6NDQuNTUyNDcyMDc3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAyMjUzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zZXRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NjA3PXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjYwODppcF9zZXRfYWRkX2J5dGVzKHU2NCBieXRlcywgc3RydWN0IGlwX3NldF9jb3VudGVyICpjb3VudGVyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy02MDkte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTYxMz1zdGF0aWMgdm9pZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo2MTQ6aXBfc2V0X2FkZF9wYWNrZXRzKHU2NCBwYWNrZXRzLCBzdHJ1Y3QgaXBfc2V0X2NvdW50ZXIgKmNvdW50ZXIpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTYxNS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NjIwPWlwX3NldF91cGRhdGVfY291bnRlcihzdHJ1Y3QgaXBfc2V0X2NvdW50ZXIgKmNvdW50ZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNjI0LVxcdCAgICAhKGZsYWdzIFxcdTAwMjYgSVBTRVRfRkxBR19TS0lQX0NPVU5URVJfVVBEQVRFKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo2MjU6XFx0XFx0aXBfc2V0X2FkZF9ieXRlcyhleHQtXFx1MDAzZWJ5dGVzLCBjb3VudGVyKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NjI2OlxcdFxcdGlwX3NldF9hZGRfcGFja2V0cyhleHQtXFx1MDAzZXBhY2tldHMsIGNvdW50ZXIpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy02MjctXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTc3Nj1pbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6Nzc3OmlwX3NldF9hZGQoaXBfc2V0X2lkX3QgaW5kZXgsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTc3OC1cXHQgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsIHN0cnVjdCBpcF9zZXRfYWR0X29wdCAqb3B0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTc5NS19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjc5NjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNzk3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyMjo0NC41OTg0OTkyOTRaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2MzI3Mjg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgYGlwc2V0YCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBpcHNldGAgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBlbGVtZW50IGFkZGl0aW9uIHByb2Nlc3MuIEkga25vdyBgaXBfc2V0X2FkZGAgaXMgdGhlIGtlcm5lbC1zaWRlIGZ1bmN0aW9uLCB0aGF0J3MgdGhlIG9uZSB0aGF0IGFjdHVhbGx5IGRvZXMgdGhlIHdvcmsgb2YgYWRkaW5nIHRoZSBJUCBhZGRyZXNzIG9yIG5ldHdvcmsgdG8gdGhlIHNldCB3aXRoaW4gdGhlIGtlcm5lbCdzIGRhdGEgc3RydWN0dXJlcy4gQnV0LCBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCB0aGUgaXNzdWUsIHRoZSBidWcgSSdtIHRyYWNraW5nIGRvd24sIGlzIGFjdHVhbGx5IHdpdGhpbiBgbGlzdF9zZXRfdWFkZGAuIEhhbmcgb24sIHdhc24ndCB0aGF0IHRoZSB1c2Vyc3BhY2UgQVBJPyBBaCB5ZXMsIGB1YWRkYCBzdGFuZHMgZm9yIHVzZXJzcGFjZSBhZGQsIGdvdCBpdC5cblxuT2theSwgc28gYGxpc3Rfc2V0X3VhZGRgIGlzIHRoZSBoYW5kbGVyIGZvciBgW0lQU0VUX0FERF1gIGNvbW1hbmQgdXNlZCBvbiBhIGBsaXN0OnNldGAgdHlwZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZSBjb3JyZWN0IGV4ZWN1dGlvbiBwYXRoIGhlcmUuIExldCBtZSBjaXJjbGUgYmFjayBhbmQgcmUtZXhhbWluZSBgbGlzdF9zZXRfdWFkZGAgdmVyeSBjYXJlZnVsbHkuIE5lZWQgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbnRlcmZhY2luZyB3aXRoIHRoZSBrZXJuZWwgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgbWlnaHQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTMyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjI6NDkuODYxNzc0NjkyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTEzNDI0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaXN0X3NldF91YWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0yMzU9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MjM2Omxpc3Rfc2V0X3VhZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTIzNy1cXHQgICAgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz01NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IHNldF92YXJpYW50ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NjEtXFx0LmFkdFxcdD0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NTYyOlxcdFxcdFtJUFNFVF9BRERdID0gbGlzdF9zZXRfdWFkZCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTU2My1cXHRcXHRbSVBTRVRfREVMXSA9IGxpc3Rfc2V0X3VkZWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjIyOjQ5LjkwNjkxMzIwOVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDYxNjk4MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgYGxpc3Rfc2V0X3VhZGRgIFVzYWdlKipcblxuQWxyaWdodCwgc28gYGxpc3Rfc2V0X3VhZGRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gdHdvIGRpc3RpbmN0IGNvbnRleHRzOiB0aGUgdXNlcnNwYWNlIGZ1bmN0aW9uIGBsaXN0X3NldF91YWR0YCBhbmQgdGhlIGtlcm5lbHNwYWNlIGZ1bmN0aW9uIGBsaXN0X3NldF9rYWR0YC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaW1tZWRpYXRlbHkgcmFpc2VzIHNvbWUgcXVlc3Rpb25zIGFib3V0IGhvdyB3ZSdyZSBoYW5kbGluZyBkYXRhIHRyYW5zaXRpb25zIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBCZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gdGhlIHJhYmJpdCBob2xlIG9mIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGhhcHBlbmluZyBhdCB0aGUgbG93ZXIgbGV2ZWwgd2l0aCBgbGlzdF9zZXRfa2FkdGAuIExldCBtZSBmaXJzdCB6b29tIGluIG9uIHRoYXQga2VybmVsc3BhY2UgY2FsbCB0byBzZWUgd2hhdCBpdOKAmXMgZG9pbmcsIGhvdyBpdCdzIGJlaW5nIHVzZWQsIGFuZCB3aGF0IGRhdGEgaXQncyBvcGVyYXRpbmcgb24uIFRoYXTigJlsbCBnaXZlIG1lIGEgc29saWQgYmFzZSB0byB1bmRlcnN0YW5kIGFueSBpc3N1ZXMgdGhhdCBtaWdodCBiZSBlbWVyZ2luZyBmcm9tIGludGVyYWN0aW9ucyBiZXR3ZWVuIHVzZXJzcGFjZSBhbmQgdGhlIGtlcm5lbC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzY2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjI6NTQuMzY4NjE0NTEyWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTc3NzYwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaXN0X3NldF9rYWR0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0xMTM9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MTE0Omxpc3Rfc2V0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMTE1LVxcdCAgICAgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBzZXRfdmFyaWFudCA9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjU1OTpcXHQua2FkdFxcdD0gbGlzdF9zZXRfa2FkdCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTU2MC1cXHQudWFkdFxcdD0gbGlzdF9zZXRfdWFkdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjI6NTQuNDM4Mzk2NDg3WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTQ2NzUxNjcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIGBsaXN0X3NldF9rYWR0YCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBhIGtleSBkZXRhaWwgaW4gdGhlIGBsaXN0X3NldF9rYWR0YCBmdW5jdGlvbidzIGJlaGF2aW9yLiBUaGUgY2VudHJhbCBxdWVzdGlvbiBpbiBteSBtaW5kIHJpZ2h0IG5vdyBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgaW50ZXJhY3RzIHdpdGggdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmUg4oCTIHNwZWNpZmljYWxseSwgZG9lcyBpdCB1bHRpbWF0ZWx5IG1ha2UgYSBjYWxsIHRvIGBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XWA/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMsIHdlbGwsICp0aGUqIHVuZGVybHlpbmcgQURULiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBkaXJlY3RseSBhY2Nlc3NlcyBhbmQgbWFuaXB1bGF0ZXMgdGhlIEFEVCB0aHJvdWdoIHRoYXQgYHZhcmlhbnRgIHBvaW50ZXIgYW5kIGFycmF5IGFjY2Vzcy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gY29uZmlybSBob3cgdGhlIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0YS4gVGhpcyBkaXJlY3QgbGluayBpcyBjcml0aWNhbCBmb3IgaG93IHRoaXMgZmVhdHVyZSBpcyBkZXNpZ25lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyOTcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyNToxNS45MDU5MTgwNjJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEzLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTEzOlxcdHN0YXRpYyBpbnRcXG4gMTE0OlxcdGxpc3Rfc2V0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAxMTU6XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbiAxMTY6XFx0XFx0ICAgICAgZW51bSBpcHNldF9hZHQgYWR0LCBzdHJ1Y3QgaXBfc2V0X2FkdF9vcHQgKm9wdClcXG4gMTE3OlxcdHtcXG4gMTE4OlxcdFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIDExOTpcXHRcXHRpbnQgcmV0ID0gLUVJTlZBTDtcXG4gMTIwOlxcdFxcbiAxMjE6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAxMjI6XFx0XFx0c3dpdGNoIChhZHQpIHtcXG4gMTIzOlxcdFxcdGNhc2UgSVBTRVRfVEVTVDpcXG4gMTI0OlxcdFxcdFxcdHJldCA9IGxpc3Rfc2V0X2t0ZXN0KHNldCwgc2tiLCBwYXIsIG9wdCwgXFx1MDAyNmV4dCk7XFxuIDEyNTpcXHRcXHRcXHRicmVhaztcXG4gMTI2OlxcdFxcdGNhc2UgSVBTRVRfQUREOlxcbiAxMjc6XFx0XFx0XFx0cmV0ID0gbGlzdF9zZXRfa2FkZChzZXQsIHNrYiwgcGFyLCBvcHQsIFxcdTAwMjZleHQpO1xcbiAxMjg6XFx0XFx0XFx0YnJlYWs7XFxuIDEyOTpcXHRcXHRjYXNlIElQU0VUX0RFTDpcXG4gMTMwOlxcdFxcdFxcdHJldCA9IGxpc3Rfc2V0X2tkZWwoc2V0LCBza2IsIHBhciwgb3B0LCBcXHUwMDI2ZXh0KTtcXG4gMTMxOlxcdFxcdFxcdGJyZWFrO1xcbiAxMzI6XFx0XFx0ZGVmYXVsdDpcXG4gMTMzOlxcdFxcdFxcdGJyZWFrO1xcbiAxMzQ6XFx0XFx0fVxcbiAxMzU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDEzNjpcXHRcXG4gMTM3OlxcdFxcdHJldHVybiByZXQ7XFxuIDEzODpcXHR9XFxuIDEzOTpcXHRcXG4gMTQwOlxcdC8qIFVzZXJzcGFjZSBpbnRlcmZhY2VzOiB3ZSBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBuZm5sIG11dGV4ICovXFxuIDE0MTpcXHRcXG4gMTQyOlxcdHN0YXRpYyB2b2lkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjI1OjE1LjkwNjA1Njg1MloiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjQxMDA0ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipUcmFjaW5nIHRoZSBEZXBlbmRlbmN5KipcblxuUmlnaHQsIHNvIGBsaXN0X3NldF9rYWR0YC4uLiBpdCdzIGltbWVkaWF0ZWx5IGFwcGFyZW50IHRoYXQgdGhpcyBmdW5jdGlvbiByZWxpZXMgb24gYGxpc3Rfc2V0X2thZGRgLiBObyBzdXJwcmlzZXMgdGhlcmU7IHRoZXkncmUgcHJvYmFibHkgZGVzaWduZWQgdG8gd29yayBpbiB0YW5kZW0uIE15IGZpcnN0IGluc3RpbmN0LCB0aGVuLCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGlubmVyIHdvcmtpbmdzIG9mIGBsaXN0X3NldF9rYWRkYC4gVW5kZXJzdGFuZGluZyAqdGhhdCogZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUga2V5IHRvIGdyYXNwaW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHBhcmFtZXRlcnMsIGl0cyByZXR1cm4gdmFsdWUsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHdpZGVyIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTcxLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyNToyMy4xNDcwNjM3NjVaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3Njg3NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpc3Rfc2V0X2thZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTczPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjc0Omxpc3Rfc2V0X2thZGQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNzUtXFx0ICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0xMTQ9bGlzdF9zZXRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTEyNi1cXHRjYXNlIElQU0VUX0FERDpcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjEyNzpcXHRcXHRyZXQgPSBsaXN0X3NldF9rYWRkKHNldCwgc2tiLCBwYXIsIG9wdCwgXFx1MDAyNmV4dCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0xMjgtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjI1OjIzLjIzNDc1NjE2OVoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjgzNDUxMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgbGlzdF9zZXRfa2FkZGAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgb24gYGxpc3Rfc2V0X2thZGRgLiBNeSBleHBlcnQgYnJhaW4gaW1tZWRpYXRlbHkgc3RhcnRzIHRoaW5raW5nOiAqV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IElzIHRoaXMgYSBkYXRhIHN0cnVjdHVyZSBmdW5jdGlvbj8gQSBsaWJyYXJ5IGNhbGw/IEEgc3BlY2lmaWMgQVBJIHdpdGhpbiBhIGRhdGFiYXNlPyogVGhlIG5hbWUgaW1wbGllcyBzb21lIGludGVyYWN0aW9uIGJldHdlZW4gbGlzdHMsIHNldHMsIGFuZCBhIGtleSwgYW5kIHRoZW4gKmFkZGl0aW9uKi4gTXkgYmFja2dyb3VuZCB0ZWxscyBtZSB0aGF0IGBrYWRkYCBzdWdnZXN0cyBhZGRpbmcgZWxlbWVudHMgdG8gYSBrZXksIGFuZCB0aGUgY29tYmluZWQgXCJsaXN0XCIgYW5kIFwic2V0XCIgYXNwZWN0IGlzIHRoZSBwYXJ0IHRoYXQgY2F0Y2hlcyBteSBleWUuXG5cbiogICAqQXJlIHdlIGRlYWxpbmcgd2l0aCBhbiBvcmRlcmVkIGNvbGxlY3Rpb24gKGxpc3QpIGFuZCBhbiB1bm9yZGVyZWQsIHVuaXF1ZSBjb2xsZWN0aW9uIChzZXQpIHNpbXVsdGFuZW91c2x5LCBwZXJoYXBzIHN0b3JpbmcgdGhlIGxpc3QgYW5kIHNldCBhcyBzZXBhcmF0ZSBlbnRpdGllcyBidXQgaGF2aW5nIHRoZW0gcmVsYXRlZCBieSB0aGUgc2FtZSBrZXk/KiBPciwgaXMgdGhpcyBzb21lIGh5YnJpZCBkYXRhIHN0cnVjdHVyZT8gSXMgdGhlIGxpc3QgaW50ZW5kZWQgdG8gbWFpbnRhaW4gb3JkZXIsIHdpdGggdGhlIHNldCBlbnN1cmluZyBubyBkdXBsaWNhdGVzIHdoZW4gbmV3IGVsZW1lbnRzIGFyZSBhZGRlZD8gSSBpbW1lZGlhdGVseSBzdGFydCBjb21wYXJpbmcgdGhpcyB3aXRoIGFsdGVybmF0aXZlIGRhdGEgc3RydWN0dXJlIHBvc3NpYmlsaXRpZXM6IHdoYXQncyB0aGUgdXNlIGNhc2U/IENvdWxkIHRoaXMgYmUgdXNlZnVsIGZvciBtYWludGFpbmluZyBhIGhpc3Rvcnkgb2Ygc29tZXRoaW5nIGluIHRoZSBsaXN0LCB0aGVuIHVzaW5nIHRoZSBzZXQgdG8gZmluZCBkdXBsaWNhdGVzLCBvciBhIGZhc3QgbG9va3VwIG9uIHRoZSBsaXN0IGNvbnRlbnQ/IEkgd29uZGVyIGFib3V0IGhvdyB0aGUgaW5zZXJ0aW9uIHRpbWUgb2YgdGhlIGxpc3QgYW5kIHNldCBvcGVyYXRpb25zIGltcGFjdCBwZXJmb3JtYW5jZS5cbiogICAqV2hhdCdzIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uPyogQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBjdXN0b20gaW1wbGVtZW50YXRpb24gb3IgbGV2ZXJhZ2luZyBleGlzdGluZyBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ugb3IgZGF0YWJhc2U/IEtub3dpbmcgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gaXMga2V5IHRvIGV2YWx1YXRpbmcgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGxpa2UgdGltZSBjb21wbGV4aXR5IGZvciBkaWZmZXJlbnQgb3BlcmF0aW9ucyAoYWRkaW5nIHRvIHRoZSBsaXN0LCBhZGRpbmcgdG8gdGhlIHNldCwgY2hlY2tpbmcgZm9yIG1lbWJlcnNoaXAgaW4gZWl0aGVyIHN0cnVjdHVyZSwgZXRjLikuXG5cbkknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZG93bnNpZGVzLiAqSXMgdGhlcmUgYSBtZW1vcnkgb3ZlcmhlYWQgaGVyZT8gTWFpbnRhaW5pbmcgYm90aCBzdHJ1Y3R1cmVzIGZvciB0aGUgc2FtZSBrZXkgY291bGQgYmUgY29zdGx5LCBwYXJ0aWN1bGFybHkgaWYgdGhlIGRhdGFzZXQgaXMgbGFyZ2UuKiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGNvbmZsaWN0cyBhbmQgdW5pcXVlbmVzcy4gRG9lcyBpdCByZXBsYWNlIGFuIGV4aXN0aW5nIGxpc3Qgb3Igc2V0PyBPciBtZXJnZSBvciBhcHBlbmQgdG8gdGhlIGV4aXN0aW5nIGxpc3Qgb3Igc2V0PyBPciwgZG9lcyBpdCByZXR1cm4gYW4gZXJyb3I/XG5cblVsdGltYXRlbHksIG15IHRob3VnaHRzIGFyZSBnb2luZyB0b3dhcmQgd2hhdCB0aGUgZnVuY3Rpb24gYWNjb21wbGlzaGVzIGZyb20gdGhlIGdyb3VuZCB1cCwgYW5kIHRoZW4gY29tcGFyaW5nIGl0IHRvIHdoYXQgSSBrbm93IHRvIGFycml2ZSBhdCBpdHMgcG9zc2libGUgdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ1NSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjI1OjI4LjkxODIxMTgxOFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MzpcXHRzdGF0aWMgaW50XFxuICA3NDpcXHRsaXN0X3NldF9rYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gIDc1OlxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcXG4gIDc2OlxcdFxcdCAgICAgIHN0cnVjdCBpcF9zZXRfYWR0X29wdCAqb3B0LCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0KVxcbiAgNzc6XFx0e1xcbiAgNzg6XFx0XFx0c3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxuICA3OTpcXHRcXHRzdHJ1Y3Qgc2V0X2VsZW0gKmU7XFxuICA4MDpcXHRcXHRpbnQgcmV0O1xcbiAgODE6XFx0XFxuICA4MjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlLCBcXHUwMDI2bWFwLVxcdTAwM2VtZW1iZXJzLCBsaXN0KSB7XFxuICA4MzpcXHRcXHRcXHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpIFxcdTAwMjZcXHUwMDI2XFxuICA4NDpcXHRcXHRcXHQgICAgaXBfc2V0X3RpbWVvdXRfZXhwaXJlZChleHRfdGltZW91dChlLCBzZXQpKSlcXG4gIDg1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAgODY6XFx0XFx0XFx0cmV0ID0gaXBfc2V0X2FkZChlLVxcdTAwM2VpZCwgc2tiLCBwYXIsIG9wdCk7XFxuICA4NzpcXHRcXHRcXHRpZiAocmV0ID09IDApXFxuICA4ODpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAgODk6XFx0XFx0fVxcbiAgOTA6XFx0XFx0cmV0dXJuIDA7XFxuICA5MTpcXHR9XFxuICA5MjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjU6MjguOTE4MzUyNzI4WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NTI2OTUxMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgYGxpc3Rfc2V0YCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGVzZSBgbGlzdF9zZXRgIG9wZXJhdGlvbnMgd29yay4gVGhlIHRoaW5nIHRoYXQncyBpbW1lZGlhdGVseSBncmFiYmluZyBteSBhdHRlbnRpb24gaXMgdGhhdCBgbGlzdF9zZXRfa2FkZGAgKmRvZXNuJ3QqIGFwcGVhciB0byBjYWxsIGBsaXN0X3NldF91YWRkYC4gVGhhdCdzIGludGVyZXN0aW5nLCBiZWNhdXNlIHVzdWFsbHkgeW91J2QgZXhwZWN0IGEgbW9yZSBncmFudWxhciBhZGQgZnVuY3Rpb24gbGlrZSBgdWFkZGAgKHdoaWNoIHByZXN1bWFibHkgc3RhbmRzIGZvciBcInVuaXF1ZSBhZGRcIiBvciBzb21ldGhpbmcgc2ltaWxhcikgdG8gYmUgYSBidWlsZGluZyBibG9jayBmb3IgbW9yZSBjb21wbGV4IG9wZXJhdGlvbnMuXG5cbkl0IHNlZW1zIGBsaXN0X3NldF91YWRkYCBpcyBvbmx5IGludm9rZWQgZnJvbSBgbGlzdF9zZXRfdWFkdGAuIFRoaXMgc3VnZ2VzdHMgYSBzcGVjaWZpYyByZWxhdGlvbnNoaXAgb3Igb3B0aW1pemF0aW9uLCBwZXJoYXBzIHRpZWQgdG8gaG93IFwidW5pcXVlXCIgYWRkaXRpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgYnJvYWRlciBgbGlzdF9zZXRgIGNvbnRleHQuXG5cblRoZXJlZm9yZSwgbGV0J3Mgc2hpZnQgb3VyIGZvY3VzIHRvIGBsaXN0X3NldF91YWR0YCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBsb2dpYyB0aGVyZS4gVGhhdCdzIHRoZSBrZXkgdG8gZmlndXJpbmcgb3V0IHdoeSBgdWFkZGAgaXMgYmVpbmcgdXNlZCB0aGUgd2F5IGl0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDI2NiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjU6MzQuNDcxMDUxNjQ2WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1MjpcXHRzdGF0aWMgaW50XFxuIDM1MzpcXHRsaXN0X3NldF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4gMzU0OlxcdFxcdCAgICAgIGVudW0gaXBzZXRfYWR0IGFkdCwgdTMyICpsaW5lbm8sIHUzMiBmbGFncywgYm9vbCByZXRyaWVkKVxcbiAzNTU6XFx0e1xcbiAzNTY6XFx0XFx0c3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxuIDM1NzpcXHRcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxuIDM1ODpcXHRcXHRzdHJ1Y3Qgc2V0X2FkdF9lbGVtIGUgPSB7IC5yZWZpZCA9IElQU0VUX0lOVkFMSURfSUQgfTtcXG4gMzU5OlxcdFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcXG4gMzYwOlxcdFxcdHN0cnVjdCBpcF9zZXQgKnM7XFxuIDM2MTpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gMzYyOlxcdFxcbiAzNjM6XFx0XFx0aWYgKHRiW0lQU0VUX0FUVFJfTElORU5PXSlcXG4gMzY0OlxcdFxcdFxcdCpsaW5lbm8gPSBubGFfZ2V0X3UzMih0YltJUFNFVF9BVFRSX0xJTkVOT10pO1xcbiAzNjU6XFx0XFxuIDM2NjpcXHRcXHRpZiAodW5saWtlbHkoIXRiW0lQU0VUX0FUVFJfTkFNRV0gfHxcXG4gMzY3OlxcdFxcdFxcdCAgICAgIWlwX3NldF9vcHRhdHRyX25ldG9yZGVyKHRiLCBJUFNFVF9BVFRSX0NBRFRfRkxBR1MpKSlcXG4gMzY4OlxcdFxcdFxcdHJldHVybiAtSVBTRVRfRVJSX1BST1RPQ09MO1xcbiAzNjk6XFx0XFxuIDM3MDpcXHRcXHRyZXQgPSBpcF9zZXRfZ2V0X2V4dGVuc2lvbnMoc2V0LCB0YiwgXFx1MDAyNmV4dCk7XFxuIDM3MTpcXHRcXHRpZiAocmV0KVxcbiAzNzI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzczOlxcdFxcdGUuaWQgPSBpcF9zZXRfZ2V0X2J5bmFtZShtYXAtXFx1MDAzZW5ldCwgdGJbSVBTRVRfQVRUUl9OQU1FXSwgXFx1MDAyNnMpO1xcbiAzNzQ6XFx0XFx0aWYgKGUuaWQgPT0gSVBTRVRfSU5WQUxJRF9JRClcXG4gMzc1OlxcdFxcdFxcdHJldHVybiAtSVBTRVRfRVJSX05BTUU7XFxuIDM3NjpcXHRcXHQvKiBcXFwiTG9vcCBkZXRlY3Rpb25cXFwiICovXFxuIDM3NzpcXHRcXHRpZiAocy1cXHUwMDNldHlwZS1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBJUFNFVF9UWVBFX05BTUUpIHtcXG4gMzc4OlxcdFxcdFxcdHJldCA9IC1JUFNFVF9FUlJfTE9PUDtcXG4gMzc5OlxcdFxcdFxcdGdvdG8gZmluaXNoO1xcbiAzODA6XFx0XFx0fVxcbiAzODE6XFx0XFxuIDM4MjpcXHRcXHRpZiAodGJbSVBTRVRfQVRUUl9DQURUX0ZMQUdTXSkge1xcbiAzODM6XFx0XFx0XFx0dTMyIGYgPSBpcF9zZXRfZ2V0X2gzMih0YltJUFNFVF9BVFRSX0NBRFRfRkxBR1NdKTtcXG4gMzg0OlxcdFxcbiAzODU6XFx0XFx0XFx0ZS5iZWZvcmUgPSBmIFxcdTAwMjYgSVBTRVRfRkxBR19CRUZPUkU7XFxuIDM4NjpcXHRcXHR9XFxuIDM4NzpcXHRcXG4gMzg4OlxcdFxcdGlmIChlLmJlZm9yZSBcXHUwMDI2XFx1MDAyNiAhdGJbSVBTRVRfQVRUUl9OQU1FUkVGXSkge1xcbiAzODk6XFx0XFx0XFx0cmV0ID0gLUlQU0VUX0VSUl9CRUZPUkU7XFxuIDM5MDpcXHRcXHRcXHRnb3RvIGZpbmlzaDtcXG4gMzkxOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjU6MzQuNDcxMjMxODQ2WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTE4NzI1NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW5kIG15IGludGVybmFsIG1vbm9sb2d1ZSBvbiB0aGUgbWF0dGVyOlxuXG4qKkRpc3NlY3RpbmcgdGhlIGBhZHRmbmAgQ2FsbCoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgdGhpcyBwYXJ0aWN1bGFyIGxpbmUgb2YgY29kZSwgYW5kIGl0J3MgY2FsbGluZyBgYWR0Zm5gIHdpdGggdGhlIHBhcmFtZXRlcnMgYHNldGAsIGBcdTAwMjZlYCwgYFx1MDAyNmV4dGAsIGBcdTAwMjZleHRgLCBhbmQgYGZsYWdzYC4gVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGllY2UgaGVyZSBpcyB0aGUgdXNlIG9mIHRob3NlIFx1MDAyNmV4dCBwYXJhbWV0ZXJzLiBTaW5jZSBJIGtub3cgdGhpcyBjb2RlLCBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIGRhdGEgc3RydWN0dXJlcy4gVGhlIHVzZSBvZiB0aGUgYWRkcmVzcy1vZiBvcGVyYXRvciBpbXBsaWVzIHRoZXNlIGFyZSBwcm9iYWJseSBwb2ludGVycy4gTGV0J3Mgc2VlLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGFkdGZuYCBkb2VzIGFuZCBzcGVjaWZpY2FsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIGBzZXRgLCBgZWAsIGBleHRgLCBhbmQgdGhlc2UgYGZsYWdzYC4gVGhpcyBwcm9iYWJseSBtZWFucyBJIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZGVmaW5pdGlvbnMgZm9yIHRoZXNlIHZhcmlhYmxlcyB0b28sIGJ1dCBsZXQncyBnbyB3aXRoIHRoZSBjYWxsIGl0c2VsZiBmb3Igbm93LiBJJ20gYXNzdW1pbmcgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgZWxzZXdoZXJlIGFzIHdlbGwsIHNvIEknbGwgbmVlZCB0byBnbyBmaW5kIGl0cyBkZWZpbml0aW9uLiBOb3cgdGhhdCBJIGhhdmUgdGhpcyBhcyB0aGUgc3RhcnRpbmcgcG9pbnQsIGxldCdzIGxvb2sgYXQgYGxpc3Rfc2V0X3VhZHRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI3NiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjU6NDkuNTg5OTYxNTE2WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5MixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM5MjpcXHRcXG4gMzkzOlxcdFxcdGlmICh0YltJUFNFVF9BVFRSX05BTUVSRUZdKSB7XFxuIDM5NDpcXHRcXHRcXHRlLnJlZmlkID0gaXBfc2V0X2dldF9ieW5hbWUobWFwLVxcdTAwM2VuZXQsXFxuIDM5NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgdGJbSVBTRVRfQVRUUl9OQU1FUkVGXSxcXG4gMzk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cyk7XFxuIDM5NzpcXHRcXHRcXHRpZiAoZS5yZWZpZCA9PSBJUFNFVF9JTlZBTElEX0lEKSB7XFxuIDM5ODpcXHRcXHRcXHRcXHRyZXQgPSAtSVBTRVRfRVJSX05BTUVSRUY7XFxuIDM5OTpcXHRcXHRcXHRcXHRnb3RvIGZpbmlzaDtcXG4gNDAwOlxcdFxcdFxcdH1cXG4gNDAxOlxcdFxcdFxcdGlmICghZS5iZWZvcmUpXFxuIDQwMjpcXHRcXHRcXHRcXHRlLmJlZm9yZSA9IC0xO1xcbiA0MDM6XFx0XFx0fVxcbiA0MDQ6XFx0XFx0aWYgKGFkdCAhPSBJUFNFVF9URVNUIFxcdTAwMjZcXHUwMDI2IFNFVF9XSVRIX1RJTUVPVVQoc2V0KSlcXG4gNDA1OlxcdFxcdFxcdHNldF9jbGVhbnVwX2VudHJpZXMoc2V0KTtcXG4gNDA2OlxcdFxcbiA0MDc6XFx0XFx0cmV0ID0gYWR0Zm4oc2V0LCBcXHUwMDI2ZSwgXFx1MDAyNmV4dCwgXFx1MDAyNmV4dCwgZmxhZ3MpO1xcbiA0MDg6XFx0XFxuIDQwOTpcXHRmaW5pc2g6XFxuIDQxMDpcXHRcXHRpZiAoZS5yZWZpZCAhPSBJUFNFVF9JTlZBTElEX0lEKVxcbiA0MTE6XFx0XFx0XFx0aXBfc2V0X3B1dF9ieWluZGV4KG1hcC1cXHUwMDNlbmV0LCBlLnJlZmlkKTtcXG4gNDEyOlxcdFxcdGlmIChhZHQgIT0gSVBTRVRfQUREIHx8IHJldClcXG4gNDEzOlxcdFxcdFxcdGlwX3NldF9wdXRfYnlpbmRleChtYXAtXFx1MDAzZW5ldCwgZS5pZCk7XFxuIDQxNDpcXHRcXG4gNDE1OlxcdFxcdHJldHVybiBpcF9zZXRfZWV4aXN0KHJldCwgZmxhZ3MpID8gMCA6IHJldDtcXG4gNDE2OlxcdH1cXG4gNDE3OlxcdFxcbiA0MTg6XFx0c3RhdGljIHZvaWRcXG4gNDE5OlxcdGxpc3Rfc2V0X2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcXG4gNDIwOlxcdHtcXG4gNDIxOlxcdFxcdHN0cnVjdCBsaXN0X3NldCAqbWFwID0gc2V0LVxcdTAwM2VkYXRhO1xcbiA0MjI6XFx0XFx0c3RydWN0IHNldF9lbGVtICplLCAqbjtcXG4gNDIzOlxcdFxcbiA0MjQ6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG4sIFxcdTAwMjZtYXAtXFx1MDAzZW1lbWJlcnMsIGxpc3QpXFxuIDQyNTpcXHRcXHRcXHRsaXN0X3NldF9kZWwoc2V0LCBlKTtcXG4gNDI2OlxcdFxcdHNldC1cXHUwMDNlZWxlbWVudHMgPSAwO1xcbiA0Mjc6XFx0XFx0YXRvbWljNjRfc2V0KFxcdTAwMjZzZXQtXFx1MDAzZWV4dF9zaXplLCAwKTtcXG4gNDI4OlxcdH1cXG4gNDI5OlxcdFxcbiA0MzA6XFx0c3RhdGljIHZvaWRcXG4gNDMxOlxcdGxpc3Rfc2V0X2Rlc3Ryb3koc3RydWN0IGlwX3NldCAqc2V0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyNTo0OS41OTAwNzczODZaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQxNzYzNzEzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEYXRhIFN0cnVjdHVyZSBVcGRhdGVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYGxpc3Rfc2V0X3VhZHRgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlLCBhbmQgaXQgY2FsbHMgYGFkdGZuYCwgc3BlY2lmaWNhbGx5IGBsaXN0X3NldF91YWRkYC4gSXQncyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSBhc2ssIFwiV2hlcmUgZWxzZSBpcyB0aGlzIGJlaW5nIGNhbGxlZD9cIiBUaGUgc3RhdGljIG5hdHVyZSBsaW1pdHMgaXRzIHNjb3BlLCBzbyBpdCdzIGtleSB0byBpZGVudGlmeSBpdHMgZW50cnkgcG9pbnRzLlxuXG5Ob3csIHRoZSBjb25uZWN0aW9uIHNlZW1zIHRvIGJlIHRocm91Z2ggYHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZXVhZHRgLCB3aGljaCBnZXRzIGludm9rZWQgdmlhIGBjYWxsX2FkYCBpbnNpZGUgYGlwX3NldF9jb3JlLmNgLiBIbW0sIGBjYWxsX2FkYCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBpcF9zZXRfdWFkZGAgYW5kIGBpcF9zZXRfdWRlbGAuIEludGVyZXN0aW5nLiBgaXBfc2V0X3VhZGRgIGlzIGFsc28gc3RhdGljLiBUaGlzIHN1Z2dlc3RzIHRoYXQgaXQgbWlnaHQgYmUgYW4gaW50ZXJuYWwgaGVscGVyLCBidXQgc3RpbGwsIHdoZXJlJ3MgaXRzIGVudHJ5P1xuXG5BaCwgaXQgc2VlbXMgYGlwX3NldF91YWRkYCBpcyByZWdpc3RlcmVkIGluIGBpcF9zZXRfbmV0bGlua19zdWJzeXNfY2JgIGluIGBpcF9zZXRfY29yZS5jYC4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmbG93LiBUbyBiZSBjZXJ0YWluLCBJIG5lZWQgdG8gY2hlY2sgYGlwX3NldF9uZXRsaW5rX3N1YnN5c19jYmAgYXMgdGhhdCBpcyB0aGUgcmVnaXN0cmF0aW9uIHBvaW50IGZvciBgaXBfc2V0X3VhZGRgIHdoaWNoIGV2ZW50dWFsbHkgZ2V0cyB0byBgbGlzdF9zZXRfdWFkdGAuIExldCdzIGNvbmZpcm0gaG93IHRoZSBuZXRsaW5rIGNhbGxiYWNrcyBhcmUgc2V0IHVwIGFuZCBob3cgZGF0YSBnZXRzIHRvIGBpcF9zZXRfdWFkZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjIzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjY6MDMuNzY2NDUzODI4WiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDU2MTU4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zZXRfbmV0bGlua19zdWJzeXNfY2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yMTA1PXN0YXRpYyBpbnQgaXBfc2V0X2J5aW5kZXgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTQ2LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMTQ3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBpcF9zZXRfbmV0bGlua19zdWJzeXNfY2JbSVBTRVRfTVNHX01BWF0gPSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIxNDgtXFx0W0lQU0VUX0NNRF9OT05FXVxcdD0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTIyNDU9c3RhdGljIHN0cnVjdCBuZm5ldGxpbmtfc3Vic3lzdGVtIGlwX3NldF9uZXRsaW5rX3N1YnN5cyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIyNDgtXFx0LmNiX2NvdW50XFx0PSBJUFNFVF9NU0dfTUFYLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMjQ5OlxcdC5jYlxcdFxcdD0gaXBfc2V0X25ldGxpbmtfc3Vic3lzX2NiLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMjUwLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjI2OjAzLjg0MTAyMjAxNFoiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjM2OTEyMzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIEZ1bmN0aW9uIFNlbGVjdGlvbiBmb3IgTmV0bGluayBDb21tYW5kcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG5ldGxpbmsgY29tbWFuZHMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZmluZCBhbiBleHBvcnRlZCBmdW5jdGlvbi4gSSBjb25zaWRlcmVkIGBpcF9zZXRfYWRkYCBhdCBmaXJzdCwgYnV0IHRoYXQncyBrZXJuZWwtc3BhY2UsIHNvIEkgbmVlZCBzb21ldGhpbmcgdXNlci1zcGFjZSBhY2Nlc3NpYmxlLiBUaGVuIEkgcmVtZW1iZXJlZCBgbGlzdF9zZXRfdWFkZGAgd2FzIG1vZGlmaWVkLiBJcyB0aGlzIHRoZSByaWdodCBmdW5jdGlvbj9cblxuVGhlIHByb21wdCBzcGVjaWZpZXMgdGhhdCBJIHNob3VsZCBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBJZiBgbGlzdF9zZXRfdWFkZGAgaXMgc3RhdGljLCB0aGF0J3Mgbm90IGlkZWFsLiBIb3dldmVyLCBsb29raW5nIGRlZXBlciwgSSBzZWUgaXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgYXJyYXksIHNwZWNpZmljYWxseSBgc2V0X3ZhcmlhbnQuYWR0W0lQU0VUX0FERF1gLiBUaGF0J3MgdGhlIGtleSEgQmVjYXVzZSBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgaXQgKmNhbm5vdCogYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFRoaXMgbWVhbnMgaXQgd2lsbCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIGV2ZW4gaWYgaXQncyB0ZWNobmljYWxseSBhIGhlbHBlciBmdW5jdGlvbi4gSSBjYW4ndCBkaXJlY3RseSB2ZXJpZnkgdGhlIHN5bWJvbCB0YWJsZSByaWdodCBub3csIGJ1dCB0aGF0J3MgbXkgZXhwZXJpZW5jZSBpbiBwcmFjdGljZSB3aXRoIGZ1bmN0aW9uIHBvaW50ZXJzLlxuXG5TbywgYGxpc3Rfc2V0X3VhZGRgIGlzIHBlcmZlY3RseSBhY2NlcHRhYmxlIGFzIGEgZm9jdXMgZnVuY3Rpb24uIEJ1dCBsZXQncyBjaGVjayBvbmUgbW9yZS4gV2hhdCBhYm91dCBgaXBfc2V0X3VhZGRgPyBBaCwgaXQncyBhbHNvIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgYC5jYWxsID0gaXBfc2V0X3VhZGRgLiBTYW1lIGRlYWwuIFNvLCBgaXBfc2V0X3VhZGRgIGlzIGFsc28gbm9uLWlubGluZWQuIEkgY2FuIHByb3ZpZGUgYm90aCBgbGlzdF9zZXRfdWFkZGAgYW5kIGBpcF9zZXRfdWFkZGAgYXMgdmFsaWQgb3B0aW9ucy5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIHF1aWNrbHkgcmV2aWV3aW5nIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSdtIGNoZWNraW5nIGBJUF9TRVRgIGFuZCBgSVBfU0VUX0xJU1RfU0VUYCBhZ2Fpbi4gSSBuZWVkIHRvIGVuc3VyZSBldmVyeXRoaW5nIGFsaWducyB3aXRoIHRoZSBvdmVyYWxsIHN5c3RlbSBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGRlcGVuZGVuY2llcyBvbiBgSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSYC4gSSdsbCBkb3VibGUtY2hlY2sgYElQX1NFVF9MSVNUX1NFVGAgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMwNTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjY6MTAuNDc3OTM5MDc5WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODM0MTk5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfU0VUX0xJU1RfU0VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9MTU4PWNvbmZpZyBJUF9TRVRfSEFTSF9ORVRJRkFDRVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTY4OmNvbmZpZyBJUF9TRVRfTElTVF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY5LVxcdHRyaXN0YXRlIFxcXCJsaXN0OnNldCBzZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjY6MTAuNTQ2Mjg2NzU0WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTMyMjczODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBJUHNldCBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciBJUHNldC4gTGV0J3MgZ2V0IHJpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBtZW50YWwgbWFwIHRlbGxzIG1lIHRoYXQgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2AgaXMgdGhlIGxpa2VseSBwbGFjZSBmb3IgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgMTY4IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgc2VjdGlvbiBwcm9iYWJseSBob2xkcyB0aGUga2V5IHBhcmFtZXRlcnMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5ODUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyNjoxNS4yMzk1MTY2NTJaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2NTpcXHRcXG4gMTY2OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE2NzpcXHRcXG4gMTY4OlxcdGNvbmZpZyBJUF9TRVRfTElTVF9TRVRcXG4gMTY5OlxcdFxcdHRyaXN0YXRlIFxcXCJsaXN0OnNldCBzZXQgc3VwcG9ydFxcXCJcXG4gMTcwOlxcdFxcdGRlcGVuZHMgb24gSVBfU0VUXFxuIDE3MTpcXHRcXHRoZWxwXFxuIDE3MjpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGxpc3Q6c2V0IHNldCB0eXBlIHN1cHBvcnQuIEluIHRoaXNcXG4gMTczOlxcdFxcdCAga2luZCBvZiBzZXQgb25lIGNhbiBzdG9yZSB0aGUgbmFtZSBvZiBvdGhlciBzZXRzIGFuZCBpdCBmb3Jtc1xcbiAxNzQ6XFx0XFx0ICBhbiBvcmRlcmVkIHVuaW9uIG9mIHRoZSBtZW1iZXIgc2V0cy5cXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTc3OlxcdFxcbiAxNzg6XFx0Y29uZmlnIEdDT1ZfUFJPRklMRV9JUFNFVFxcbiAxNzk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBpcHNldFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjY6MTUuMjM5NTg1OTcyWiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTk2NzQzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSVAgU2V0IERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIGNvbmRpdGlvbmFsIGhlcmUuIFRoZSBiZWhhdmlvciBvZiB3aGF0ZXZlciBJJ20gbG9va2luZyBhdCBoaW5nZXMgb24gdGhlIHN0YXRlIG9mIGBJUF9TRVRgLiBUaGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBJUF9TRVRgIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQgY29udHJvbHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIExldCdzIGRpdmUgaW50byBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYCwgc3RhcnRpbmcgcmlnaHQgYXQgdGhlIHRvcCwgYXJvdW5kIGxpbmUgMS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBkZXBlbmRlbmN5IHN0cnVjdHVyZS4gRnJvbSB0aGVyZSwgSSBzaG91bGQgYmUgYWJsZSB0byBhc2NlcnRhaW4gdGhlIGNvbmRpdGlvbnMgd2hpY2ggbmVjZXNzaXRhdGUgdXNpbmcgYElQX1NFVGAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDM5OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjY6MTguNTk5MjY0MDMyWiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjAzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnVjb25maWcgSVBfU0VUXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiSVAgc2V0IHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSXFxuICAgNTpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBJUCBzZXQgc3VwcG9ydCB0byB0aGUga2VybmVsLlxcbiAgIDg6XFx0XFx0ICBJbiBvcmRlciB0byBkZWZpbmUgYW5kIHVzZSB0aGUgc2V0cywgeW91IG5lZWQgdGhlIHVzZXJzcGFjZSB1dGlsaXR5XFxuICAgOTpcXHRcXHQgIGlwc2V0KDgpLiBZb3UgY2FuIHVzZSB0aGUgc2V0cyBpbiBuZXRmaWx0ZXIgdmlhIHRoZSBcXFwic2V0XFxcIiBtYXRjaFxcbiAgMTA6XFx0XFx0ICBhbmQgXFxcIlNFVFxcXCIgdGFyZ2V0LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRpZiBJUF9TRVRcXG4gIDE1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyNjoxOC41OTkzODg4MDFaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1OTE4MzU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgSVAgU2V0IExpc3QgU2V0KipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMuIFRoZSBjb2RlIHJlbGllcyBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgLCB0aGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEknbSBwcmV0dHkgc3VyZSB0aG9zZSBhcmUgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gbW9zdCBjb25maWdzLCBidXQgaXQncyBhbHdheXMgc21hcnQgdG8gZG91YmxlLWNoZWNrLCBzbyBJJ2xsIGluY2x1ZGUgdGhlbS4gQWN0dWFsbHksIHRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byBjaGVjayB0aGUgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gdGhlIEtjb25maWcgZmlsZXMgdG9vLCB0byBtYWtlIHN1cmUgSSBnZXQgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgaW5jbHVkZWQuIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAgYXJlIHByZXR0eSBzdGFuZGFyZCwgYnV0IGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIGluY2x1ZGUgdGhlbSBhbG9uZ3NpZGUgYElQX1NFVGAgYW5kIGBJUF9TRVRfTElTVF9TRVRgLiBZZXMsIEknbGwgZ28gd2l0aCBgTkVURklMVEVSYCwgYElQX1NFVGAsIGFuZCBgSVBfU0VUX0xJU1RfU0VUYC5cblxuTm93LCBsZXQncyBnbyBiYWNrIHRvIHRoYXQgcGF0Y2guIEkgc2VlIGl0J3MgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNgLCBhZGRpbmcgYSBgcmV0dXJuIDA7YCB3aXRoaW4gdGhlIGBpZiAobilgIGJsb2NrLiBCZWZvcmUgdGhlIHBhdGNoLCBpZiBgbmAgd2Fzbid0IE5VTEwsIHdlJ2QgY2FsbCBgbGlzdF9zZXRfcmVwbGFjZWAsIGJ1dCB0aGUgY29kZSB3b3VsZCBjb250aW51ZSBleGVjdXRpbmcuIEl0IHdvdWxkIHRoZW4gY2FsbCBgc2V0LVx1MDAzZWVsZW1lbnRzKys7YCBhbmQgZmluYWxseSBgcmV0dXJuIDA7YCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4gQWgsIHRoaXMgbG9va3MgbGlrZSBhIGJ1ZyBmaXguIEl0IHNlZW1zIGxpa2UgdGhlIGludGVudGlvbiB3YXMgdG8gcmV0dXJuIGVhcmx5IGFmdGVyIHRoZSByZXBsYWNlbWVudC4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGJ5IGNoZWNraW5nIHRoZSBvcmlnaW5hbCBjb2RlIGZvciBgbGlzdF9zZXRfdWFkZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0ODIwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjY6MjYuNzU4NTc2NTcxWiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5NTpcXHRcXHRcXHRuID0gTlVMTDtcXG4gMjk2OlxcdFxcbiAyOTc6XFx0XFx0ZSA9IGt6YWxsb2Moc2V0LVxcdTAwM2Vkc2l6ZSwgR0ZQX0FUT01JQyk7XFxuIDI5ODpcXHRcXHRpZiAoIWUpXFxuIDI5OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzAwOlxcdFxcdGUtXFx1MDAzZWlkID0gZC1cXHUwMDNlaWQ7XFxuIDMwMTpcXHRcXHRlLVxcdTAwM2VzZXQgPSBzZXQ7XFxuIDMwMjpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZS1cXHUwMDNlbGlzdCk7XFxuIDMwMzpcXHRcXHRsaXN0X3NldF9pbml0X2V4dGVuc2lvbnMoc2V0LCBleHQsIGUpO1xcbiAzMDQ6XFx0XFx0aWYgKG4pIHtcXG4gMzA1OlxcdFxcdFxcdGxpc3Rfc2V0X3JlcGxhY2Uoc2V0LCBlLCBuKTtcXG4gMzA2OlxcdFxcdFxcdHJldHVybiAwO1xcbiAzMDc6XFx0XFx0fVxcbiAzMDg6XFx0XFxuIDMwOTpcXHRcXHRlbHNlIGlmIChuZXh0KVxcbiAzMTA6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNmUtXFx1MDAzZWxpc3QsIFxcdTAwMjZuZXh0LVxcdTAwM2VsaXN0KTtcXG4gMzExOlxcdFxcdGVsc2UgaWYgKHByZXYpXFxuIDMxMjpcXHRcXHRcXHRsaXN0X2FkZF9yY3UoXFx1MDAyNmUtXFx1MDAzZWxpc3QsIFxcdTAwMjZwcmV2LVxcdTAwM2VsaXN0KTtcXG4gMzEzOlxcdFxcdGVsc2VcXG4gMzE0OlxcdFxcdFxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZlLVxcdTAwM2VsaXN0LCBcXHUwMDI2bWFwLVxcdTAwM2VtZW1iZXJzKTtcXG4gMzE1OlxcdFxcdHNldC1cXHUwMDNlZWxlbWVudHMrKztcXG4gMzE2OlxcdFxcbiAzMTc6XFx0XFx0cmV0dXJuIDA7XFxuIDMxODpcXHR9XFxuIDMxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjY6MjYuNzU4NzAzMDgxWiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDAwNTg2MDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBpcHNldCBQYXRjaCoqXG5cbk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIFByZS1wYXRjaCwgdGhlIGNvZGUgbG9va2VkIGxpa2UgdGhpczpcblxuYGBgY1xuXHRpZiAobilcblx0XHRsaXN0X3NldF9yZXBsYWNlKHNldCwgZSwgbik7XG5cdGVsc2UgaWYgKG5leHQpXG5cdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2ZS1cdTAwM2VsaXN0LCBcdTAwMjZuZXh0LVx1MDAzZWxpc3QpO1xuXHRlbHNlIGlmIChwcmV2KVxuXHRcdGxpc3RfYWRkX3JjdShcdTAwMjZlLVx1MDAzZWxpc3QsIFx1MDAyNnByZXYtXHUwMDNlbGlzdCk7XG5cdGVsc2Vcblx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZlLVx1MDAzZWxpc3QsIFx1MDAyNm1hcC1cdTAwM2VtZW1iZXJzKTtcblx0c2V0LVx1MDAzZWVsZW1lbnRzKys7XG5cblx0cmV0dXJuIDA7XG5gYGBcblxuUmlnaHQsIHNvIHRoZSBsb2dpYyB3YXMgdGhhdCBpZiBgbmAgd2FzIG5vbi16ZXJvLCBpdCB3b3VsZCBjYWxsIGBsaXN0X3NldF9yZXBsYWNlYC4gVGhlIHByb2JsZW0gaXMsIGBsaXN0X3NldF9yZXBsYWNlYCBzaW1wbHkgKnJlcGxhY2VzKiBhbiBleGlzdGluZyBlbGVtZW50OyBpdCBkb2Vzbid0IGFjdHVhbGx5ICphZGQqIG9uZS4gQnV0IHRoZSBjb2RlIHRoZW4gYmxpbmRseSBpbmNyZW1lbnRzIGBzZXQtXHUwMDNlZWxlbWVudHNgLCBsZWFkaW5nIHRvIGEgY291bnQgbWlzbWF0Y2guIFRoZSBwYXRjaCBjbGV2ZXJseSBpbnNlcnRzIGEgYHJldHVybiAwO2AgYWZ0ZXIgYGxpc3Rfc2V0X3JlcGxhY2VgLiBUaGlzIHByZXZlbnRzIHRoZSBzdXBlcmZsdW91cyBpbmNyZW1lbnQuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0IGZpeGVzIGEgYnVnIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IHN1YnN5c3RlbS5cblxuR2l2ZW4gdGhhdCBgaXBzZXRgIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZyB0byBlbnN1cmUgcm9idXN0bmVzcy4gVGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBoZXJlIGFyZSBgbGlzdF9zZXRfdWFkZGAgYW5kIGBpcF9zZXRfdWFkZGAuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkga25vdyBJJ2xsIG5lZWQgYE5FVEZJTFRFUmAsIGBJUF9TRVRgLCBhbmQgYElQX1NFVF9MSVNUX1NFVGAuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjazogYElQX1NFVGAgc2VsZWN0cyBgTkVURklMVEVSX05FVExJTktgLCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24gYE5FVEZJTFRFUmAuIFBlcmZlY3QsIHNvIHRob3NlIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgaW5jbHVkZWQuXG5cbkFscmlnaHQsIEknbGwgYmUgdXNpbmcgdGhlIHNldC1yZXN1bHRzIHRvb2wgZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MDIwLCJPdXRwdXRUb2tlbnMiOjEyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjI3OjA5LjE1OTI5NDEzN1oiLCJTZXEiOjc0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTIwOTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJJUF9TRVRcIixcbiAgICBcIklQX1NFVF9MSVNUX1NFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxpc3Rfc2V0X3VhZGRcIixcbiAgICBcImlwX3NldF91YWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIG5ldGZpbHRlciBpcHNldCBzdWJzeXN0ZW0gd2hlcmUgcmVwbGFjaW5nIGFuIGVsZW1lbnQgaW4gYSBsaXN0OnNldCBpbmNvcnJlY3RseSBpbmNyZW1lbnRlZCB0aGUgZWxlbWVudCBjb3VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlIChhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rKSwgc28gaXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0xJU1RfU0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibGlzdF9zZXRfdWFkZFwiLFxuICAgIFwiaXBfc2V0X3VhZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IHN1YnN5c3RlbSB3aGVyZSByZXBsYWNpbmcgYW4gZWxlbWVudCBpbiBhIGxpc3Q6c2V0IGluY29ycmVjdGx5IGluY3JlbWVudGVkIHRoZSBlbGVtZW50IGNvdW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgKGFjY2Vzc2libGUgdmlhIG5ldGxpbmspLCBzbyBpdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowbf62g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 15:35:31 +0000 UTC FinishedAt: 2026-08-06 16:27:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "44871eadd07a7f004aa00cb87399461eea08c630", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "IP_SET", "IP_SET_LIST_SET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "44871eadd07a7f004aa00cb87399461eea08c630", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "IP_SET", "IP_SET_LIST_SET" ], "series_id": "29c5f188-e6f3-429e-8087-7faec5e135e0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "list_set_uadd", "ip_set_uadd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9MSVNUX1NFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xpc3Rfc2V0X3VhZGQmIzM0OywKICAgICYjMzQ7aXBfc2V0X3VhZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIG5ldGZpbHRlciBpcHNldCBzdWJzeXN0ZW0gd2hlcmUgcmVwbGFjaW5nIGFuIGVsZW1lbnQgaW4gYSBsaXN0OnNldCBpbmNvcnJlY3RseSBpbmNyZW1lbnRlZCB0aGUgZWxlbWVudCBjb3VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlIChhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rKSwgc28gaXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNiY2Y1MmY3ZDZlZTk0ODNiNWUzOGVhODA4YmM3YTc2OTAxMDlhN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDE2OjAzOjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXG5pbmRleCBjYTNlZjk0NzllODM4Li41NjYyNmY0OTQzYTkwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xuQEAgLTMwMSw4ICYjNDM7MzAxLDExIEBAIGxpc3Rfc2V0X3VhZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiBcdGUtXHUwMDNlc2V0ID0gc2V0O1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZS1cdTAwM2VsaXN0KTtcbiBcdGxpc3Rfc2V0X2luaXRfZXh0ZW5zaW9ucyhzZXQsIGV4dCwgZSk7XG4tXHRpZiAobilcbiYjNDM7XHRpZiAobikge1xuIFx0XHRsaXN0X3NldF9yZXBsYWNlKHNldCwgZSwgbik7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZWxzZSBpZiAobmV4dClcbiBcdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2ZS1cdTAwM2VsaXN0LCBcdTAwMjZuZXh0LVx1MDAzZWxpc3QpO1xuIFx0ZWxzZSBpZiAocHJldilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4yM208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJUF9TRVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0xJU1RfU0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bGlzdF9zZXRfdWFkZCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfdWFkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IHN1YnN5c3RlbSB3aGVyZSByZXBsYWNpbmcgYW4gZWxlbWVudCBpbiBhIGxpc3Q6c2V0IGluY29ycmVjdGx5IGluY3JlbWVudGVkIHRoZSBlbGVtZW50IGNvdW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgKGFjY2Vzc2libGUgdmlhIG5ldGxpbmspLCBzbyBpdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2JjZjUyZjdkNmVlOTQ4M2I1ZTM4ZWE4MDhiYzdhNzY5MDEwOWE3ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMTY6MDM6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYwppbmRleCBjYTNlZjk0NzllODM4Li41NjYyNmY0OTQzYTkwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMKQEAgLTMwMSw4ICYjNDM7MzAxLDExIEBAIGxpc3Rfc2V0X3VhZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKIAllLSZndDtzZXQgPSBzZXQ7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtlLSZndDtsaXN0KTsKIAlsaXN0X3NldF9pbml0X2V4dGVuc2lvbnMoc2V0LCBleHQsIGUpOwotCWlmIChuKQomIzQzOwlpZiAobikgewogCQlsaXN0X3NldF9yZXBsYWNlKHNldCwgZSwgbik7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogCWVsc2UgaWYgKG5leHQpCiAJCWxpc3RfYWRkX3RhaWxfcmN1KCZhbXA7ZS0mZ3Q7bGlzdCwgJmFtcDtuZXh0LSZndDtsaXN0KTsKIAllbHNlIGlmIChwcmV2KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyL2lwc2V0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgYSBjaGFuZ2UgdG8gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiBpdCYjMzk7cyBhZGRpbmcgYSBgcmV0dXJuIDA7YCBzdGF0ZW1lbnQgd2l0aGluIGFuIGBpZiAobilgIGJsb2NrIGluc2lkZSB0aGUgYGxpc3Rfc2V0X3VhZGRgIGZ1bmN0aW9uLiAgTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBkZWVtZWQgbmVjZXNzYXJ5LiBBZGRpbmcgYSBzaW1wbGUgcmV0dXJuIGxpa2UgdGhhdCBjYW4gaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBwcm9ncmFtIGZsb3csIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuCgpGaXJzdCwgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJvbGVzIG9mIGBsaXN0X3NldF91YWRkYCBhbmQgYGxpc3Rfc2V0X3JlcGxhY2VgLiBJJiMzOTtsbCBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhleSBmdW5jdGlvbiB3aXRoaW4gdGhlIGBpcHNldGAgZnJhbWV3b3JrLiBJIGtub3cgdGhleSYjMzk7cmUgcHJvYmFibHkgaGFuZGxpbmcgb3BlcmF0aW9ucyByZWxhdGVkIHRvIGFkZGluZyBhbmQvb3IgcmVwbGFjaW5nIGVsZW1lbnRzIHdpdGhpbiBhIGxpc3QtYmFzZWQgc2V0LiBUaGUgYGlmIChuKWAgY29uZGl0aW9uIGlzIHRoZSBrZXkgaGVyZS4gVGhlIGFkZGVkIGByZXR1cm4gMDtgIGltcGxpZXMgdGhhdCBpZiBgbmAgaXMgdHJ1ZSwgd2hhdGV2ZXIgbG9naWMgaXMgYmVpbmcgZXhlY3V0ZWQsIGl0IHNob3VsZCBleGl0IGltbWVkaWF0ZWx5LCByZXR1cm5pbmcgYSBzdWNjZXNzIHN0YXR1cy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2hvcnRjdXQuCgpJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB3aGF0IGBuYCByZXByZXNlbnRzLiBXaGF0IGNvbmRpdGlvbiBpcyBiZWluZyBjaGVja2VkPyBXaGF0IHdvdWxkIGhhcHBlbiBpZiB0aGUgYHJldHVybiAwO2Agd2FzbiYjMzk7dCBhZGRlZCBhbmQgdGhlIGZ1bmN0aW9uIGNvbnRpbnVlZCBleGVjdXRpbmc/IElzIHRoZSBleGlzdGluZyBsb2dpYyBmdW5kYW1lbnRhbGx5IGZsYXdlZCBvciBpcyB0aGUgcGF0Y2ggYWRkaW5nIGFuIG9wdGltaXphdGlvbiBvciBoYW5kbGluZyBhIG5ldyBlZGdlIGNhc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYXJvdW5kIGBuYCBpcyBjcnVjaWFsLiBJcyBpdCByZWxhdGVkIHRvIHNvbWUgdHlwZSBvZiBlcnJvciBjb25kaXRpb24sIGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24sIGEgc3BlY2lmaWMgaW50ZXJuYWwgc3RhdGUsIG9yIHNvbWUgb3RoZXIga2V5IHZhcmlhYmxlPyBXaGF0IGRvZXMgdGhlIGNvZGUgcHJpb3IgdG8gdGhlIGBpZmAgbG9vayBsaWtlPyBXaGF0IGRvZXMgaXQgZG8gYWZ0ZXI/IEkgd2lsbCBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhlIHJldHVybi4KClVsdGltYXRlbHksIEkgd2FudCB0byBjb25maXJtIHRoYXQgdGhpcyBwYXRjaCBpcyBjb3JyZWN0LCByb2J1c3QsIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIG9yIHN1YnRsZSByZWdyZXNzaW9ucy4gSSB3aWxsIHJlYWQgdGhlIGVudGlyZSBgbGlzdF9zZXRfdWFkZGAgYW5kIGBsaXN0X3NldF9yZXBsYWNlYCBmdW5jdGlvbnMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlzdF9zZXRfdWFkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0yMzU9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoyMzY6bGlzdF9zZXRfdWFkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0yMzctXHQgICAgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBzZXRfdmFyaWFudCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTU2MS1cdC5hZHRcdD0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzo1NjI6XHRcdFtJUFNFVF9BRERdID0gbGlzdF9zZXRfdWFkZCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTYzLVx0XHRbSVBTRVRfREVMXSA9IGxpc3Rfc2V0X3VkZWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgdGhlIGBsaXN0X3NldF91YWRkYCBjb250ZXh0OgoKKipBbmFseXppbmcgYGxpc3Rfc2V0X3VhZGRgIENvbnRleHQqKgoKQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBlc3RhYmxpc2ggdGhlIGVudmlyb25tZW50LiBJJiMzOTttIGxvb2tpbmcgYXQgYGxpc3Rfc2V0X3VhZGRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aGVyZSBpdCBmaXRzIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIElzIHRoaXMgYSBjdXN0b20gZnVuY3Rpb24sIG9yIGEgc3RhbmRhcmQgbGlicmFyeSBjYWxsPyBVbmRlcnN0YW5kaW5nIHRoZSBwcm9qZWN0JiMzOTtzIHN0cnVjdHVyZSB3aWxsIGdpdmUgbWUgY3JpdGljYWwgaW5zaWdodHMgYXMgSSBtb3ZlIGZvcndhcmQuIFdoYXQgYXJlIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgb3IgbW9kdWxlcz8gV2hhdCBraW5kIG9mIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXNlZCBpbiB0aGUgdmljaW5pdHk/IElzIHRoaXMgcGFydCBvZiBhIGNvcmUgYWxnb3JpdGhtIG9yIGEgdXRpbGl0eSBmdW5jdGlvbj8gRGV0ZXJtaW5pbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2Ugd2l0aGluIHRoaXMgbGFuZHNjYXBlIGdpdmVzIG1lIGEgc29saWQgYmFzZSB0byBjb21wcmVoZW5kLiBJdCYjMzk7cyBvZnRlbiBoZWxwZnVsIHRvIHRoaW5rIHRocm91Z2ggd2hhdCB0aGUgbmFtZSBgbGlzdF9zZXRfdWFkZGAgc3VnZ2VzdHMuICYjMzQ7TGlzdCwmIzM0OyAmIzM0O3NldCwmIzM0OyBhbmQgJiMzNDt1YWRkJiMzNDsg4oCTIGFyZSB0aGVzZSBvcGVyYXRpb25zIG9uIHRoZSBsaXN0LCBvciB0aGUgc2V0PyBJcyB0aGUgJiMzNDt1JiMzNDsgbGlrZWx5IGZvciAmIzM0O3VuaXF1ZSYjMzQ7IG9yICYjMzQ7dW5pb24mIzM0Oz8gVGhpcyBnaXZlcyBhIGZpcnN0IGd1ZXNzIG9uIHdoYXQgdG8gZXhwZWN0LiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBleGFtaW5lIHRoZSBpbW1lZGlhdGUgY29kZSBhcm91bmQgaXQuIFRoYXQgaXMsIHdoYXQgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIGl0PyBXaGF0IGlzIGl0IGRvaW5nIHdpdGggdGhvc2UgcGFyYW1ldGVycz8gSSYjMzk7bGwgbG9vayBmb3IgaW5wdXQgYW5kIG91dHB1dCwgYW5kIGVzcGVjaWFsbHkgd2hhdCBkYXRhIHR5cGVzIGFyZSBpbnZvbHZlZC4gV2hhdCBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IsIGJvdGggb24gc3VjY2VzcyBhbmQgcG90ZW50aWFsIGZhaWx1cmUgY2FzZXM/IEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgZWZmaWNpZW5jeSBjb25zaWRlcmF0aW9ucy4gQXJlIHRoZXJlIGFueSBsb29wcywgb3IgbmVzdGVkIGxvb3BzLCB0aGF0IG1pZ2h0IGluZGljYXRlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBBcmUgdGhlcmUgb3B0aW1pemF0aW9ucyB0aGF0IEkgY2FuIHN1Z2dlc3QgbGF0ZXI/IFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gKndoYXQqIGl0JiMzOTtzIGRvaW5nLCAqaG93KiBpdCYjMzk7cyBkb2luZyBpdCwgYW5kICp3aHkqIGl0JiMzOTtzIGRlc2lnbmVkIHRoYXQgd2F5LCBiZWZvcmUgSSBjYW4gcHJvdmlkZSBhIHRydWx5IGluc2lnaHRmdWwgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODA6XHRcdFx0biA9IGxpc3RfZW1wdHkoXHUwMDI2bWFwLVx1MDAzZW1lbWJlcnMpID8gTlVMTCA6XG4gMjgxOlx0XHRcdCAgICBsaXN0X2xhc3RfZW50cnkoXHUwMDI2bWFwLVx1MDAzZW1lbWJlcnMsIHN0cnVjdCBzZXRfZWxlbSwgbGlzdCk7XG4gMjgyOlx0XHR9IGVsc2UgaWYgKGQtXHUwMDNlYmVmb3JlIFx1MDAzZSAwKSB7XG4gMjgzOlx0XHRcdC8qIEluc2VydCBhZnRlciBuZXh0IGVsZW1lbnQgKi9cbiAyODQ6XHRcdFx0aWYgKCFsaXN0X2lzX2xhc3QoXHUwMDI2bmV4dC1cdTAwM2VsaXN0LCBcdTAwMjZtYXAtXHUwMDNlbWVtYmVycykpXG4gMjg1Olx0XHRcdFx0biA9IGxpc3RfbmV4dF9lbnRyeShuZXh0LCBsaXN0KTtcbiAyODY6XHRcdH0gZWxzZSB7XG4gMjg3Olx0XHRcdC8qIEluc2VydCBiZWZvcmUgcHJldiBlbGVtZW50ICovXG4gMjg4Olx0XHRcdGlmIChwcmV2LVx1MDAzZWxpc3QucHJldiAhPSBcdTAwMjZtYXAtXHUwMDNlbWVtYmVycylcbiAyODk6XHRcdFx0XHRuID0gbGlzdF9wcmV2X2VudHJ5KHByZXYsIGxpc3QpO1xuIDI5MDpcdFx0fVxuIDI5MTpcdFx0LyogQ2FuIHdlIHJlcGxhY2UgYSB0aW1lZCBvdXQgZW50cnk/ICovXG4gMjkyOlx0XHRpZiAobiBcdTAwMjZcdTAwMjZcbiAyOTM6XHRcdCAgICAhKFNFVF9XSVRIX1RJTUVPVVQoc2V0KSBcdTAwMjZcdTAwMjZcbiAyOTQ6XHRcdCAgICAgIGlwX3NldF90aW1lb3V0X2V4cGlyZWQoZXh0X3RpbWVvdXQobiwgc2V0KSkpKVxuIDI5NTpcdFx0XHRuID0gTlVMTDtcbiAyOTY6XHRcbiAyOTc6XHRcdGUgPSBremFsbG9jKHNldC1cdTAwM2Vkc2l6ZSwgR0ZQX0FUT01JQyk7XG4gMjk4Olx0XHRpZiAoIWUpXG4gMjk5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDMwMDpcdFx0ZS1cdTAwM2VpZCA9IGQtXHUwMDNlaWQ7XG4gMzAxOlx0XHRlLVx1MDAzZXNldCA9IHNldDtcbiAzMDI6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmUtXHUwMDNlbGlzdCk7XG4gMzAzOlx0XHRsaXN0X3NldF9pbml0X2V4dGVuc2lvbnMoc2V0LCBleHQsIGUpO1xuIDMwNDpcdFx0aWYgKG4pIHtcbiAzMDU6XHRcdFx0bGlzdF9zZXRfcmVwbGFjZShzZXQsIGUsIG4pO1xuIDMwNjpcdFx0XHRyZXR1cm4gMDtcbiAzMDc6XHRcdH1cbiAzMDg6XHRcbiAzMDk6XHRcdGVsc2UgaWYgKG5leHQpXG4gMzEwOlx0XHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmUtXHUwMDNlbGlzdCwgXHUwMDI2bmV4dC1cdTAwM2VsaXN0KTtcbiAzMTE6XHRcdGVsc2UgaWYgKHByZXYpXG4gMzEyOlx0XHRcdGxpc3RfYWRkX3JjdShcdTAwMjZlLVx1MDAzZWxpc3QsIFx1MDAyNnByZXYtXHUwMDNlbGlzdCk7XG4gMzEzOlx0XHRlbHNlXG4gMzE0Olx0XHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmUtXHUwMDNlbGlzdCwgXHUwMDI2bWFwLVx1MDAzZW1lbWJlcnMpO1xuIDMxNTpcdFx0c2V0LVx1MDAzZWVsZW1lbnRzJiM0MzsmIzQzOztcbiAzMTY6XHRcbiAzMTc6XHRcdHJldHVybiAwO1xuIDMxODpcdH1cbiAzMTk6XHRcbiAzMjA6XHRzdGF0aWMgaW50XG4gMzIxOlx0bGlzdF9zZXRfdWRlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIDMyMjpcdFx0ICAgICAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbiAzMjM6XHR7XG4gMzI0Olx0XHRzdHJ1Y3QgbGlzdF9zZXQgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xuIDMyNTpcdFx0c3RydWN0IHNldF9hZHRfZWxlbSAqZCA9IHZhbHVlO1xuIDMyNjpcdFx0c3RydWN0IHNldF9lbGVtICplLCAqbiwgKm5leHQsICpwcmV2ID0gTlVMTDtcbiAzMjc6XHRcbiAzMjg6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBuLCBcdTAwMjZtYXAtXHUwMDNlbWVtYmVycywgbGlzdCkge1xuIDMyOTpcdFx0XHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbDoKCioqRml4aW5nIHRoZSBpcF9zZXRfbGlzdF9zZXQgSW5jcmVtZW50IEJ1ZyoqCgpBbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudCwgYnVnIGluIHRoZSBpcHNldCBjb2RlLiBJdCBzZWVtcyB0aGF0IGBzZXQtJmd0O2VsZW1lbnRzJiM0MzsmIzQzO2Agd2FzIGJlaW5nIGluY3JlbWVudGVkIGV2ZW4gd2hlbiB0aGUgZnVuY3Rpb24gYGxpc3Rfc2V0X3JlcGxhY2VgIHdhcyBjYWxsZWQsIHdoaWNoLCBhcyB0aGUgbmFtZSBpbXBsaWVzLCAqcmVwbGFjZXMqIGFuIGV4aXN0aW5nIGVsZW1lbnQgYW5kIHNob3VsZG4mIzM5O3QgYmUgdHJlYXRlZCBhcyBhbiBhZGRpdGlvbi4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgb2ZmLWJ5LW9uZSBlcnJvciBsdXJraW5nIGluIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jYCwgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGFkZHJlc3NlZC4gSXQmIzM5O3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBkaXN0aW5jdGlvbiwgYmVjYXVzZSB0aGF0IGNvdW50ZXIgY291bGQgYmVjb21lIHVucmVsaWFibGUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5jb3JyZWN0IGJlaGF2aW9yIGRvd24gdGhlIGxpbmUuCgpCZWZvcmUgSSBnbyB0b28gZmFyLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gSSBuZWVkIHRvIGtub3cgaG93IGBpcF9zZXRfbGlzdF9zZXQuY2AgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBXaGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhZmZlY3QgaXRzIGluY2x1c2lvbj8gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEJlc3QgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCAqaG93KiB0aGlzIHBpZWNlIG9mIGNvZGUgaXMgYnJvdWdodCBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLCB0byBlbnN1cmUgdGhhdCB0aGUgZml4IGlzIGFwcGxpZWQgaW4gdGhlIHJpZ2h0IGNvbnRleHRzIGFuZCB0aGF0IHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9uIGZvciBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHNldHVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9zZXRfbGlzdF9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGU9Mjg9b2JqLSQoQ09ORklHX0lQX1NFVF9IQVNIX05FVFBPUlRORVQpICYjNDM7PSBpcF9zZXRfaGFzaF9uZXRwb3J0bmV0Lm9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlLTMwLSMgbGlzdCB0eXBlc1xubmV0L25ldGZpbHRlci9pcHNldC9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfSVBfU0VUX0xJU1RfU0VUKSAmIzQzOz0gaXBfc2V0X2xpc3Rfc2V0Lm9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGUtMzItaWZkZWYgQ09ORklHX0dDT1ZfUFJPRklMRV9JUFNFVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2OTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUCBTZXQgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSBzZWUgdGhpcyBgQ09ORklHX0lQX1NFVF9MSVNUX1NFVGAgZmxhZywgYW5kIGl0JiMzOTtzIHBpbmdpbmcgc29tZXRoaW5nIGluIG15IG1lbW9yeS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcywgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgdGllZCB0byBpdC4gVGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoaXMgaW5mb3JtYXRpb24gaXMgZ29pbmcgdG8gYmUgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBmdW5kYW1lbnRhbCBJUCBzZXQgY29uZmlndXJhdGlvbnMgbGl2ZSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gaGVhZCB0byB1bmRlcnN0YW5kIHdoYXQgZW5hYmxpbmcgdGhhdCBwYXJ0aWN1bGFyIG9wdGlvbiB3aWxsIGludm9sdmUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9TRVRfTElTVF9TRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE1OD1jb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0Vcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2ODpjb25maWcgSVBfU0VUX0xJU1RfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY5LVx0dHJpc3RhdGUgXCYjMzQ7bGlzdDpzZXQgc2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAxMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgSVBfU0VUX0xJU1RfU0VUIEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBidXNpbmVzcy4gTXkgZmlyc3QgaW5zdGluY3QgaGVyZSBpcyB0byBqdW1wIGRpcmVjdGx5IGludG8gdGhlIEtjb25maWcgZm9yIGBJUF9TRVRfTElTVF9TRVRgLiBJdCYjMzk7cyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIElQIHNldCB0eXBlIGlzIGNvbnRyb2xsZWQgYXQgY29tcGlsZSB0aW1lLiBJIG5lZWQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaXRzIGNvbmZpZ3VyYWJpbGl0eSBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciDigJMgYmVmb3JlIEkgZXZlbiB0aGluayBhYm91dCBzcGVjaWZpYyB1c2UgY2FzZXMgb3IgcG90ZW50aWFsIGludGVncmF0aW9uIHBvaW50cy4gVGhlIEtjb25maWcgaXMgdGhlIGJsdWVwcmludCwgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBvcHRpb25zLiBUaW1lIHRvIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MDpcdFx0ZGVwZW5kcyBvbiBJUF9TRVRcbiAxNjE6XHRcdGhlbHBcbiAxNjI6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgaGFzaDpuZXQsaWZhY2Ugc2V0IHR5cGUgc3VwcG9ydCwgYnkgd2hpY2hcbiAxNjM6XHRcdCAgb25lIGNhbiBzdG9yZSBJUHY0L0lQdjYgbmV0d29yayBhZGRyZXNzL3ByZWZpeCBhbmRcbiAxNjQ6XHRcdCAgaW50ZXJmYWNlIG5hbWUgcGFpcnMgYXMgZWxlbWVudHMgaW4gYSBzZXQuXG4gMTY1Olx0XG4gMTY2Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIDE2NzpcdFxuIDE2ODpcdGNvbmZpZyBJUF9TRVRfTElTVF9TRVRcbiAxNjk6XHRcdHRyaXN0YXRlIFwmIzM0O2xpc3Q6c2V0IHNldCBzdXBwb3J0XCYjMzQ7XG4gMTcwOlx0XHRkZXBlbmRzIG9uIElQX1NFVFxuIDE3MTpcdFx0aGVscFxuIDE3MjpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBsaXN0OnNldCBzZXQgdHlwZSBzdXBwb3J0LiBJbiB0aGlzXG4gMTczOlx0XHQgIGtpbmQgb2Ygc2V0IG9uZSBjYW4gc3RvcmUgdGhlIG5hbWUgb2Ygb3RoZXIgc2V0cyBhbmQgaXQgZm9ybXNcbiAxNzQ6XHRcdCAgYW4gb3JkZXJlZCB1bmlvbiBvZiB0aGUgbWVtYmVyIHNldHMuXG4gMTc1Olx0XG4gMTc2Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIDE3NzpcdFxuIDE3ODpcdGNvbmZpZyBHQ09WX1BST0ZJTEVfSVBTRVRcbiAxNzk6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBpcHNldFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTUxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93biBpbW1lZGlhdGUgY29uc2lkZXJhdGlvbnM6CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIGhpbmdlcyBvbiB0aGlzIGBJUF9TRVRgLiBUaGF0JiMzOTtzIHRoZSBrZXkgdmFyaWFibGUgaGVyZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogKml0JiMzOTtzIGFsbCBhYm91dCBob3cgYElQX1NFVGAgaXMgYmVpbmcgdXNlZCwgYW5kIHdoYXQmIzM5O3MgY29ubmVjdGVkIHRvIGl0Ki4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSYjMzk7bSB0aGlua2luZywgJiMzNDt3aGF0IG90aGVyIGNvbXBvbmVudHMsIHN5c3RlbXMsIG9yIHJ1bGVzIHJlbHkgb24gdGhlIHN0YXRlIG9yIGNvbnRlbnRzIG9mIGBJUF9TRVRgPyYjMzQ7LiBJcyBpdCBkaXJlY3RseSBmZWVkaW5nIGludG8gZmlyZXdhbGwgcnVsZXM/IElzIGl0IGxpbmtlZCB0byBhIGR5bmFtaWMgcm91dGluZyBwcm90b2NvbD8gQXJlIHRoZXJlIG1vbml0b3JpbmcgdG9vbHMgdGhhdCBhcmUga2V5ZWQgdG8gY2hhbmdlcyBpbiB0aGF0IHNldD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBhbnkgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzIGlmIGBJUF9TRVRgIGJlaGF2ZXMgdW5leHBlY3RlZGx5LiBTbywgSSYjMzk7bGwgZ28gdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBmaWxlcywgc3lzdGVtIGxvZ3MsIGFuZCBtYXliZSBldmVuIGxvb2sgZm9yIGFueSBtb25pdG9yaW5nIGRhc2hib2FyZHMgdGhhdCByZWZlcmVuY2UgdGhhdCBpZGVudGlmaWVyLiBMZXQmIzM5O3MgZGlnIGluIGFuZCB0cmFjayBkb3duIGV2ZXJ5IGRpcmVjdCBhbmQgaW5kaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCBgSVBfU0VUYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfU0VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUgZm9yIElQX1NFVCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgSVBfU0VUYC4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O20gZ29pbmcgdG8gbG9vayBpcyB0aGUgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIHR5cGVzIG9mIGtlcm5lbCBmZWF0dXJlcyBhcmUgZGVmaW5lZCwgd2l0aCBhbGwgdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBhc3NvY2lhdGVkIHNldHRpbmdzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBgSVBfU0VUYCBzeW1ib2wgZGVmaW5lZCBoZXJlLCBhbG9uZyB3aXRoIHBvdGVudGlhbGx5IG90aGVyLCBtb3JlIGdyYW51bGFyIG9wdGlvbnMgdGhhdCBjb250cm9sIGRpZmZlcmVudCBhc3BlY3RzIG9mIGBpcHNldGAgZnVuY3Rpb25hbGl0eSwgbGlrZSBzcGVjaWZpYyBzZXQgdHlwZXMgb3IgbWF0Y2hpbmcgcnVsZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYW55IGRlcGVuZGVuY2llcyBsaXN0ZWQgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBvciBjb25maWd1cmVkIGZvciBgSVBfU0VUYCB0byB3b3JrIGNvcnJlY3RseS4gTWlnaHQgZXZlbiBmaW5kIGEgaGVscGZ1bCBkZXNjcmlwdGlvbiB0aGF0IGNsYXJpZmllcyB0aGUgcHVycG9zZSBhbmQgaW50ZW5kZWQgdXNhZ2UuIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uICpzaG91bGQqIGJlIGxpbmtlZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1NFVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyOm1lbnVjb25maWcgSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0lQIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE0PWlmIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2OmNvbmZpZyBJUF9TRVRfTUFYXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTctXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yNy1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyODpjb25maWcgSVBfU0VUX0JJVE1BUF9JUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7Yml0bWFwOmlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM2LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjM3OmNvbmZpZyBJUF9TRVRfQklUTUFQX0lQTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzgtXHR0cmlzdGF0ZSBcJiMzNDtiaXRtYXA6aXAsbWFjIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ1LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ2OmNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDpwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjU1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU2LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02NC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo2NTpjb25maWcgSVBfU0VUX0hBU0hfSVBNQVJLXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLG1hcmsgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjgzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRJUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTg0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0LGlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTkyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjkzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRORVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTAyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDQtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTEyOmNvbmZpZyBJUF9TRVRfSEFTSF9NQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTIxOmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTI5LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTMxLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzOTpjb25maWcgSVBfU0VUX0hBU0hfTkVUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQwLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNDg6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU5LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2ODpjb25maWcgSVBfU0VUX0xJU1RfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY5LVx0dHJpc3RhdGUgXCYjMzQ7bGlzdDpzZXQgc2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMxMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgdGhlIHByb3ZpZGVkIHRleHQgYW5kIHRoaW5raW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9uczoKCioqQW5hbHl6aW5nIHRoZSBJUF9TRVQgS2NvbmZpZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBJUF9TRVRgIGZ1bmN0aW9uYWxpdHkgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0uIFRoaXMgdGVsbHMgbWUgYWJvdXQgZGVwZW5kZW5jaWVzLCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB0byB0aGUgZW5kLXVzZXIgKG9yLCBtb3JlIGltcG9ydGFudGx5LCAqbWUqIHdoZW4gSSYjMzk7bSBjb25maWd1cmluZyBhIGN1c3RvbSBrZXJuZWwpLCBhbmQgYW55IHBvdGVudGlhbCBsaW1pdGF0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi4KCk15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBzdHJ1Y3R1cmUgLSBpcyBpdCBhIHNpbXBsZSBib29sZWFuLCBhIHRyaXN0YXRlLCBvciBtb3JlIGNvbXBsZXg/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBsb29raW5nIGZvciBhbnkgcHJlLXJlcXVpc2l0ZXMgZm9yIGBJUF9TRVRgIHRvIGV2ZW4gYmUgY29uc2lkZXJlZC4gQXJlIHRoZXJlIGFueSBkZWZhdWx0IHZhbHVlcyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgb3ZlcmFsbCBidWlsZD8gQXJlIHRoZXJlICphbnkqIGNvbmZsaWN0cyB3aXRoIG90aGVyIGZlYXR1cmVzIHRoYXQgSSBzaG91bGQga25vdyBhYm91dD8KCk9uY2UgSSBncmFzcCB0aGUgY29uZmlndXJhdGlvbiBtZWNoYW5pc20sIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlc2NyaXB0aW9ucyBhbmQgaGVscCB0ZXh0LiBUaGVzZSBhcmUgY3J1Y2lhbC4gVGhpcyBwYXJ0IHVzdWFsbHkgdGVsbHMgdGhlICYjMzk7d2h5JiMzOTsgb2YgdGhlIGZ1bmN0aW9uYWxpdHksIGFuZCB3aGF0IHRoZSB1c2VyIGlzICppbnRlbmRlZCogdG8gZG8gd2l0aCBpdC4gVGhpcyBzZWN0aW9uIGlzIHdoZXJlIEkmIzM5O2xsIHNlZSBob3cgcm9idXN0IGBJUF9TRVRgIGlzIGFuZCBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgdGhlIHJpZ2h0IGNob2ljZSBmb3IgbXkgc3BlY2lmaWMgdXNlLWNhc2UuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZnJvbSBhbiBhcmNoaXRlY3R1cmFsLCBwZXJmb3JtYW5jZSwgYW5kL29yIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBGaW5hbGx5LCBJIHNob3VsZCBzZWUgaG93ICpncmFudWxhciogdGhlIGNvbmZpZ3VyYWJpbGl0eSBvZiBgSVBfU0VUYCBpcyBhbmQgaWYgSSBhbSBhYmxlIHRvIHRhaWxvciBpdCB0byBteSBleGFjdCBuZWVkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51Y29uZmlnIElQX1NFVFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7SVAgc2V0IHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG4gICA1Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBJUCBzZXQgc3VwcG9ydCB0byB0aGUga2VybmVsLlxuICAgODpcdFx0ICBJbiBvcmRlciB0byBkZWZpbmUgYW5kIHVzZSB0aGUgc2V0cywgeW91IG5lZWQgdGhlIHVzZXJzcGFjZSB1dGlsaXR5XG4gICA5Olx0XHQgIGlwc2V0KDgpLiBZb3UgY2FuIHVzZSB0aGUgc2V0cyBpbiBuZXRmaWx0ZXIgdmlhIHRoZSBcJiMzNDtzZXRcJiMzNDsgbWF0Y2hcbiAgMTA6XHRcdCAgYW5kIFwmIzM0O1NFVFwmIzM0OyB0YXJnZXQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuICAxMzpcdFxuICAxNDpcdGlmIElQX1NFVFxuICAxNTpcdFxuICAxNjpcdGNvbmZpZyBJUF9TRVRfTUFYXG4gIDE3Olx0XHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1wmIzM0O1xuICAxODpcdFx0ZGVmYXVsdCAyNTZcbiAgMTk6XHRcdHJhbmdlIDIgNjU1MzRcbiAgMjA6XHRcdGRlcGVuZHMgb24gSVBfU0VUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5ODUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYElQX1NFVGAgRGVwZW5kZW5jeSBhbmQgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYElQX1NFVGAgZnVuY3Rpb25hbGl0eSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBpdHMgZGVwZW5kZW5jeSBvbiBgSU5FVCAmYW1wOyZhbXA7IE5FVEZJTFRFUmAuIEdvdHRhIHJlbWVtYmVyIHRoYXQsIGl0JiMzOTtzIGZ1bmRhbWVudGFsIHRvIGl0cyBvcGVyYXRpb24uIE5vdywgdG8gYWN0dWFsbHkgKnVzZSogdGhpcyB0aGluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgYElQX1NFVGAgYW5kIGBJUF9TRVRfTElTVF9TRVRgIGVuYWJsZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb25zLiBUaG9zZSBhcmUgdGhlIGVzc2VudGlhbHMuCgpNeSBpbW1lZGlhdGUgZm9jdXMsIHRob3VnaCwgaXMgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBJIHRoaW5rIGBsaXN0X3NldF91YWRkYCBpcyB0aGUgb25lIHRvIHN0YXJ0IHdpdGgsIGFkZGluZyBlbGVtZW50cyB0byB0aGUgbGlzdC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIGFjdGlvbi4gQnV0IEkgY2FuJiMzOTt0IGp1c3QgZml4YXRlIG9uIG9uZSBmdW5jdGlvbjsgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGxpc3Rfc2V0X3JlcGxhY2VgLCBqdXN0IGluIGNhc2UgdGhlcmUmIzM5O3MgYW5vdGhlciBjcnVjaWFsIGZ1bmN0aW9uIHRoYXQgSSBoYXZlIG92ZXJsb29rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlzdF9zZXRfcmVwbGFjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0xNjM9c3RhdGljIHZvaWRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MTY0Omxpc3Rfc2V0X3JlcGxhY2Uoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3Qgc2V0X2VsZW0gKmUsIHN0cnVjdCBzZXRfZWxlbSAqb2xkKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0xNjUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MjM2PWxpc3Rfc2V0X3VhZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTMwNC1cdGlmIChuKSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjMwNTpcdFx0bGlzdF9zZXRfcmVwbGFjZShzZXQsIGUsIG4pO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0zMDYtXHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTQ5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGxpc3Rfc2V0YCBGdW5jdGlvbiBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gb3B0aW1pemUgaXQgYmFzZWQgb24gdGhlIHByb21wdCYjMzk7cyBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBzZWUgYGxpc3Rfc2V0X3JlcGxhY2VgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIG1lbnRhbCBub3RlLiBUaGVuIEkgbm90aWNlIGBsaXN0X3NldF91YWRkYCBpcyAqYWxzbyogc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSG93ZXZlciwgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgc2V0X3ZhcmlhbnRgLCBzcGVjaWZpY2FsbHkgYXQgdGhlIGBJUFNFVF9BRERgIGluZGV4LiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbC4KCldhaXQgYSBzZWNvbmQsIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGRpc2NvdXJhZ2VzIHN0YXRpYyBmdW5jdGlvbnMgaWYgcG9zc2libGUuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIHdoeSBpcyBgbGlzdF9zZXRfdWFkZGAgc3RhdGljPyBBbmQgaXMgaXQgbmVjZXNzYXJ5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UuIE9rYXksIGxldCYjMzk7cyBzZWUsIGl0IGlzIGFzc2lnbmVkIHRvIGBzZXRfdmFyaWFudC5hZHRbSVBTRVRfQUREXWAuIE5vdywgSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgc2V0X3ZhcmlhbnRgIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGFjdHVhbGx5ICp1c2VkKi4gV2hlcmUgaXMgYHNldF92YXJpYW50YCB1dGlsaXplZD8gTGV0JiMzOTtzIGZpbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfdmFyaWFudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz01NDc9bGlzdF9zZXRfY2FuY2VsX2djKHN0cnVjdCBpcF9zZXQgKnNldClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTU1Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NTU4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBzZXRfdmFyaWFudCA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTU5LVx0LmthZHRcdD0gbGlzdF9zZXRfa2FkdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTYyMD1saXN0X3NldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy02MzUtXHRsb2NrZGVwX3NldF9jbGFzcyhcdTAwMjZzZXQtXHUwMDNlbG9jaywgXHUwMDI2bGlzdF9zZXRfbG9ja2RlcF9rZXkpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzo2MzY6XHRzZXQtXHUwMDNldmFyaWFudCA9IFx1MDAyNnNldF92YXJpYW50O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy02MzctXHRzZXQtXHUwMDNlZHNpemUgPSBpcF9zZXRfZWxlbV9sZW4oc2V0LCB0Yiwgc2l6ZW9mKHN0cnVjdCBzZXRfZWxlbSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyOTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlwX3NldF9jb3JlLmMgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYHNldC0mZ3Q7dmFyaWFudGAgaXMgbGlrZWx5IGJlaW5nIHV0aWxpemVkIHdpdGhpbiBgaXBfc2V0X2NvcmUuY2AuIFRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyBjb2RlIGJhc2UgdXN1YWxseSBtZWFucyB0aGF0IGBzZXQtJmd0O3ZhcmlhbnRgIGhhcyBhIHNpZ25pZmljYW50IHJvbGUuIEdpdmVuIHRoYXQsIEkgbmVlZCB0byBjaGVjayB0aGUgZmlsZSBgaXBfc2V0X2NvcmUuY2AgZGlyZWN0bHkgdG8gc2VlIGhvdyBgLSZndDt2YXJpYW50YCBpcyBiZWluZyB1c2VkIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgdGhlIGAtJmd0O3ZhcmlhbnQtJmd0O2FkdGAgaXMgdXNlZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2Ugc3RydWN0dXJlcyB0byBiZXR0ZXIgY29tcHJlaGVuZCB0aGUgb3ZlcmFsbCBkZXNpZ24uIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmFyaWFudC1cdTAwM2VhZHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTI0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBpczoKCioqQ2hlY2tpbmcgYGFkdGAgaW4gYGlwX3NldF9jb3JlLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBhZHRgIOKAkyB0aGUgYWJzdHJhY3QgZGF0YSB0eXBlIOKAkyB3aXRoaW4gdGhlIGBpcF9zZXRfY29yZS5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNldCBpbXBsZW1lbnRhdGlvbiBpcyBzdHJ1Y3R1cmVkIGF0IHRoZSBjb3JlIGxldmVsLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHRoaXMgZmlsZSBob2xkcyB0aGUgZm91bmRhdGlvbmFsIGRlZmluaXRpb25zIGFuZCBvcGVyYXRpb25zLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBtZW1vcnkgbGF5b3V0LCBhbnkga2V5IGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBiYXNpYyBzZXQgbWFuaXB1bGF0aW9uIHJvdXRpbmVzIHVzZWQgYnkgdGhlIHN5c3RlbS4gVW5kZXJzdGFuZGluZyBob3cgdGhlIGBhZHRgIGlzIGhhbmRsZWQgaGVyZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBwZXJmb3JtYW5jZS4gSSB3YW50IHRvIHNlZSBpZiB0aGV5JiMzOTtyZSB1c2luZyBhIHN0YW5kYXJkIGxpYnJhcnkmIzM5O3MgaW1wbGVtZW50YXRpb24sIG9yIGlmIHRoZXkmIzM5O3ZlIHJvbGxlZCB0aGVpciBvd24sIGFuZCB3aHkuIEFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucyB3aWxsIGJlIG9idmlvdXMgaGVyZS4gVGhlIGdvYWwgaXMgYSBxdWljayByZWNvbm5haXNzYW5jZSwgdG8gZ2FpbiBhIGhpZ2gtbGV2ZWwgcGljdHVyZSBiZWZvcmUgSSBkZWx2ZSBkZWVwZXIgaW50byBzcGVjaWZpYyBzZXQgdHlwZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgd2lsbCBzdGFydCBieSBsb29raW5nIGZvciBkZWNsYXJhdGlvbiBvZiB0aGUgYGFkdGAsIG9yIHVzYWdlIG9mIGFueSBleGlzdGluZyBgYWR0YCBzdHJ1Y3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwuYWR0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgyMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0JiMzOTtzIGNvbWluZyBkaXJlY3RseSBmcm9tIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGlwX3NldF9jb3JlLmNgIGZvciBBRFQgSW5zcGVjdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGxvb2sgYXQgYGlwX3NldF9jb3JlLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSB0aGUgYC0mZ3Q7YWR0YCBhc3BlY3Qgd2l0aGluIHRoYXQgZmlsZS4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21lIGludGVyYWN0aW9uIHRoZXJlIHRoYXQgd2FycmFudHMgYXR0ZW50aW9uLCBhbmQga25vd2luZyB0aGUgY29yZSYjMzk7cyBpbXBsZW1lbnRhdGlvbiBpcyBrZXkgZm9yIG1lLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCwgYW5kIEkgZXhwZWN0IHRvIHNlZSB0aGUgbG93IGxldmVsIGRldGFpbHMgSSBuZWVkIGZvciBub3cuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1cdTAwM2VhZHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE4MTg9c3RhdGljIGludCBpcF9zZXRfYWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqY3RubCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg1MS1cdFx0XHRcdCAgICAgYXR0cltJUFNFVF9BVFRSX0RBVEFdLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE4NTI6XHRcdFx0XHQgICAgIHNldC1cdTAwM2V0eXBlLVx1MDAzZWFkdF9wb2xpY3ksIE5VTEwpKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NTMtXHRcdFx0cmV0dXJuIC1JUFNFVF9FUlJfUFJPVE9DT0w7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NjItXHRcdFx0ICAgIG5sYV9wYXJzZV9uZXN0ZWQodGIsIElQU0VUX0FUVFJfQURUX01BWCwgbmxhLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE4NjM6XHRcdFx0XHRcdCAgICAgc2V0LVx1MDAzZXR5cGUtXHUwMDNlYWR0X3BvbGljeSwgTlVMTCkpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg2NC1cdFx0XHRcdHJldHVybiAtSVBTRVRfRVJSX1BST1RPQ09MO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xODg4PXN0YXRpYyBpbnQgaXBfc2V0X3V0ZXN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE5MDctXHRpZiAobmxhX3BhcnNlX25lc3RlZCh0YiwgSVBTRVRfQVRUUl9BRFRfTUFYLCBhdHRyW0lQU0VUX0FUVFJfREFUQV0sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTkwODpcdFx0XHQgICAgIHNldC1cdTAwM2V0eXBlLVx1MDAzZWFkdF9wb2xpY3ksIE5VTEwpKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE5MDktXHRcdHJldHVybiAtSVBTRVRfRVJSX1BST1RPQ09MO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ0NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIHRlcm1zOgoKKipEaXZpbmcgaW50byB0aGUgYGlwX3NldGAgQURUKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHNvbWV0aGluZyBsaWtlIGEgc2V0LCBhbmQgaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdmFyaWFudHMgYW5kIGFic3RyYWN0IGRhdGEgdHlwZXMgKEFEVHMpIHdpdGhpbiB0aGF0IHNldC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBzZXQtJmd0O3ZhcmlhbnQtJmd0O2FkdGAgY29ubmVjdGlvbi4KCkhtbSwgdGhpcyBzb3VuZHMgbGlrZSBhIHBvdGVudGlhbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIExldCYjMzk7cyBtYWtlIHN1cmUgb3VyIHVuZGVyc3RhbmRpbmcgb2YgYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YCBpcyBhY2N1cmF0ZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0byByZWZyZXNoIG15IG1lbW9yeSBvZiBob3cgdGhlIGRpZmZlcmVudCBzZXQgdHlwZXMgYXJlIHN0cnVjdHVyZWQgYW5kIHJlcHJlc2VudGVkIGludGVybmFsbHkuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD0xNDE9c3RydWN0IGlwX3NldF9hZHRfb3B0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaC0xNDktLyogU2V0IHR5cGUsIHZhcmlhbnQtc3BlY2lmaWMgcGFydCAqL1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6MTUwOnN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IHtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTE1MS1cdC8qIEtlcm5lbHNwYWNlOiB0ZXN0L2FkZC9kZWwgZW50cmllc1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oPTI0Nj1zdHJ1Y3QgaXBfc2V0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaC0yNjEtXHQvKiBUaGUgdHlwZSB2YXJpYW50IGRvaW5nIHRoZSByZWFsIGpvYiAqL1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6MjYyOlx0Y29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgKnZhcmlhbnQ7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaC0yNjMtXHQvKiBUaGUgYWN0dWFsIElORVQgZmFtaWx5IG9mIHRoZSBzZXQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MTMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YCoqCgpPa2F5LCB0aW1lIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSB2YXJpb3VzIElQIHNldCB0eXBlcyBhcmUgaGFuZGxlZCBhdCBhIGxvdyBsZXZlbC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YCB3aXRoaW4gYGluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oYC4gVGhpcyBzdHJ1Y3R1cmUgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIGZvciBob3cgZGlmZmVyZW50IElQIHNldCBpbXBsZW1lbnRhdGlvbnMgYXJlIG1hbmFnZWQgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBhYnN0cmFjdGlvbiBpcyBkZXNpZ25lZCBhbmQgaG93IHRoZSBpbnRlcmZhY2VzIGZvciBzcGVjaWZpYyB0eXBlcyBhcmUgY3JlYXRlZC4gSSYjMzk7bSBob3BpbmcgdG8gZ2FpbiBpbnNpZ2h0cyBpbnRvIGhvdyB0aGUgYmFzZSBzZXQgZGF0YSBzdHJ1Y3R1cmUgaXMgZXh0ZW5kZWQgYW5kIG9wdGltaXplZCBmb3IgZGlmZmVyZW50IHVzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0OTpcdC8qIFNldCB0eXBlLCB2YXJpYW50LXNwZWNpZmljIHBhcnQgKi9cbiAxNTA6XHRzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCB7XG4gMTUxOlx0XHQvKiBLZXJuZWxzcGFjZTogdGVzdC9hZGQvZGVsIGVudHJpZXNcbiAxNTI6XHRcdCAqXHRcdHJldHVybnMgbmVnYXRpdmUgZXJyb3IgY29kZSxcbiAxNTM6XHRcdCAqXHRcdFx0emVybyBmb3Igbm8gbWF0Y2gvc3VjY2VzcyB0byBhZGQvZGVsZXRlXG4gMTU0Olx0XHQgKlx0XHRcdHBvc2l0aXZlIGZvciBtYXRjaGluZyBlbGVtZW50ICovXG4gMTU1Olx0XHRpbnQgKCprYWR0KShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gMTU2Olx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsXG4gMTU3Olx0XHRcdCAgICBlbnVtIGlwc2V0X2FkdCBhZHQsIHN0cnVjdCBpcF9zZXRfYWR0X29wdCAqb3B0KTtcbiAxNTg6XHRcbiAxNTk6XHRcdC8qIFVzZXJzcGFjZTogdGVzdC9hZGQvZGVsIGVudHJpZXNcbiAxNjA6XHRcdCAqXHRcdHJldHVybnMgbmVnYXRpdmUgZXJyb3IgY29kZSxcbiAxNjE6XHRcdCAqXHRcdFx0emVybyBmb3Igbm8gbWF0Y2gvc3VjY2VzcyB0byBhZGQvZGVsZXRlXG4gMTYyOlx0XHQgKlx0XHRcdHBvc2l0aXZlIGZvciBtYXRjaGluZyBlbGVtZW50ICovXG4gMTYzOlx0XHRpbnQgKCp1YWR0KShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gMTY0Olx0XHRcdCAgICBlbnVtIGlwc2V0X2FkdCBhZHQsIHUzMiAqbGluZW5vLCB1MzIgZmxhZ3MsIGJvb2wgcmV0cmllZCk7XG4gMTY1Olx0XG4gMTY2Olx0XHQvKiBMb3cgbGV2ZWwgYWRkL2RlbC90ZXN0IGZ1bmN0aW9ucyAqL1xuIDE2NzpcdFx0aXBzZXRfYWR0Zm4gYWR0W0lQU0VUX0FEVF9NQVhdO1xuIDE2ODpcdFxuIDE2OTpcdFx0LyogV2hlbiBhZGRpbmcgZW50cmllcyBhbmQgc2V0IGlzIGZ1bGwsIHRyeSB0byByZXNpemUgdGhlIHNldCAqL1xuIDE3MDpcdFx0aW50ICgqcmVzaXplKShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZCk7XG4gMTcxOlx0XHQvKiBEZXN0cm95IHRoZSBzZXQgKi9cbiAxNzI6XHRcdHZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgaXBfc2V0ICpzZXQpO1xuIDE3MzpcdFx0LyogRmx1c2ggdGhlIGVsZW1lbnRzICovXG4gMTc0Olx0XHR2b2lkICgqZmx1c2gpKHN0cnVjdCBpcF9zZXQgKnNldCk7XG4gMTc1Olx0XHQvKiBFeHBpcmUgZW50cmllcyBiZWZvcmUgbGlzdGluZyAqL1xuIDE3NjpcdFx0dm9pZCAoKmV4cGlyZSkoc3RydWN0IGlwX3NldCAqc2V0KTtcbiAxNzc6XHRcdC8qIExpc3Qgc2V0IGhlYWRlciBkYXRhICovXG4gMTc4Olx0XHRpbnQgKCpoZWFkKShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY4NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyB0aGF0IEZ1bmN0aW9uIFBvaW50ZXIgQXJyYXkqKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gdGhhdCBgYWR0W0lQU0VUX0FEVF9NQVhdYCBhcnJheSwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgY29sbGVjdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVycy4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgbGlrZWx5IGEgZGlzcGF0Y2ggdGFibGUgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFsbG93aW5nIGZvciBkeW5hbWljIGZ1bmN0aW9uIGNhbGxzIGJhc2VkIG9uIHNvbWUgaW5kZXggb3IgY29uZGl0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgZnVuY3Rpb25zICpkbyouIExldCYjMzk7cyB0cmFjZSB3aGVyZSB0aGF0IGBhZHRgIHZhcmlhYmxlIGlzIGFjdHVhbGx5IHVzZWQuIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHRzIHdoZXJlIHRoZSBhcnJheSBlbGVtZW50cyBhcmUgY2FsbGVkLCBob3cgdGhlIGluZGV4IGlzIGNob3NlbiwgYW5kIHdoYXQgZGF0YSBnZXRzIHBhc3NlZC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgcmVhbCBpbnNpZ2h0IGludG8gdGhlIGludGVudCBvZiB0aGlzIHN0cnVjdHVyZSBhbmQgaXRzIHJlbGF0aW9uIHRvIG90aGVyIGVsZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZHRcXFsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYz0xMTA9Yml0bWFwX2lwX2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTExNC1cdHN0cnVjdCBiaXRtYXBfaXAgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MTE1Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTExNi1cdHN0cnVjdCBiaXRtYXBfaXBfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTEzMD1iaXRtYXBfaXBfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMTMzLVx0c3RydWN0IGJpdG1hcF9pcCAqbWFwID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYzoxMzQ6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMTM1LVx0dTMyIGlwID0gMCwgaXBfdG8gPSAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTIwOT1iaXRtYXBfaXBtYWNfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMjEzLVx0c3RydWN0IGJpdG1hcF9pcG1hYyAqbWFwID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYzoyMTQ6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMjE1LVx0c3RydWN0IGJpdG1hcF9pcG1hY19hZHRfZWxlbSBlID0geyAuaWQgPSAwLCAuYWRkX21hYyA9IDEgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYz0yNDI9Yml0bWFwX2lwbWFjX3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTI0NS1cdGNvbnN0IHN0cnVjdCBiaXRtYXBfaXBtYWMgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM6MjQ2Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTI0Ny1cdHN0cnVjdCBiaXRtYXBfaXBtYWNfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM9MTI3PWJpdG1hcF9wb3J0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMtMTMxLVx0c3RydWN0IGJpdG1hcF9wb3J0ICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6MTMyOlx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMtMTMzLVx0c3RydWN0IGJpdG1hcF9wb3J0X2FkdF9lbGVtIGUgPSB7IC5pZCA9IDAgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTE1Mz1iaXRtYXBfcG9ydF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTE1Ni1cdHN0cnVjdCBiaXRtYXBfcG9ydCAqbWFwID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jOjE1NzpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTE1OC1cdHN0cnVjdCBiaXRtYXBfcG9ydF9hZHRfZWxlbSBlID0geyAuaWQgPSAwIH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jPTgwPWhhc2hfaXA0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy04NC1cdGNvbnN0IHN0cnVjdCBoYXNoX2lwNCAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjg1Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy04Ni1cdHN0cnVjdCBoYXNoX2lwNF9lbGVtIGUgPSB7IDAgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MTAwPWhhc2hfaXA0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0xMDMtXHRzdHJ1Y3QgaGFzaF9pcDQgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzoxMDQ6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTEwNS1cdHN0cnVjdCBoYXNoX2lwNF9lbGVtIGUgPSB7IDAgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MjE2PWhhc2hfaXA2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMjAtXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzoyMjE6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIyMi1cdHN0cnVjdCBoYXNoX2lwNl9lbGVtIGUgPSB7IHsgLmFsbCA9IHsgMCB9IH0gfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9MjM0PWhhc2hfaXA2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMzctXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzoyMzg6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIzOS1cdHN0cnVjdCBoYXNoX2lwNl9lbGVtIGUgPSB7IHsgLmFsbCA9IHsgMCB9IH0gfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9ODU9aGFzaF9pcG1hYzRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTg4LXtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo4OTpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtOTAtXHRzdHJ1Y3QgaGFzaF9pcG1hYzRfZWxlbSBlID0geyAuaXAgPSAwLCB7IC5mb29bMF0gPSAwLCAuZm9vWzFdID0gMCB9IH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTExMT1oYXNoX2lwbWFjNF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMTEzLXtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxMTQ6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTExNS1cdHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtIGUgPSB7IC5pcCA9IDAsIHsgLmZvb1swXSA9IDAsIC5mb29bMV0gPSAwIH0gfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9MTk4PWhhc2hfaXBtYWM2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0yMDEte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjIwMjpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMjAzLVx0c3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gZSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9MjI3PWhhc2hfaXBtYWM2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0yMjkte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjIzMDpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMjMxLVx0c3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gZSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTgwPWhhc2hfaXBtYXJrNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTg0LVx0Y29uc3Qgc3RydWN0IGhhc2hfaXBtYXJrNCAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzo4NTpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTg2LVx0c3RydWN0IGhhc2hfaXBtYXJrNF9lbGVtIGUgPSB7IH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz05Nz1oYXNoX2lwbWFyazRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0xMDAtXHRzdHJ1Y3QgaGFzaF9pcG1hcms0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjEwMTpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTEwMi1cdHN0cnVjdCBoYXNoX2lwbWFyazRfZWxlbSBlID0geyB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjE5PWhhc2hfaXBtYXJrNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTIyMy1cdGNvbnN0IHN0cnVjdCBoYXNoX2lwbWFyazYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6MjI0Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjI1LVx0c3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtIGUgPSB7IH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz0yMzY9aGFzaF9pcG1hcms2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjM5LVx0Y29uc3Qgc3RydWN0IGhhc2hfaXBtYXJrNiAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyNDA6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yNDEtXHRzdHJ1Y3QgaGFzaF9pcG1hcms2X2VsZW0gZSA9IHsgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTkxPWhhc2hfaXBwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTk0LXtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6OTU6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy05Ni1cdHN0cnVjdCBoYXNoX2lwcG9ydDRfZWxlbSBlID0geyAuaXAgPSAwIH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz0xMTI9aGFzaF9pcHBvcnQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMTE1LVx0c3RydWN0IGhhc2hfaXBwb3J0NCAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoxMTY6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0xMTctXHRzdHJ1Y3QgaGFzaF9pcHBvcnQ0X2VsZW0gZSA9IHsgLmlwID0gMCB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjY0PWhhc2hfaXBwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI2Ny17XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjI2ODpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI2OS1cdHN0cnVjdCBoYXNoX2lwcG9ydDZfZWxlbSBlID0geyAuaXAgPSB7IC5hbGwgPSB7IDAgfSB9IH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz0yODY9aGFzaF9pcHBvcnQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjg5LVx0Y29uc3Qgc3RydWN0IGhhc2hfaXBwb3J0NiAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyOTA6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0yOTEtXHRzdHJ1Y3QgaGFzaF9pcHBvcnQ2X2VsZW0gZSA9IHsgLmlwID0geyAuYWxsID0geyAwIH0gfSB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz05MD1oYXNoX2lwcG9ydGlwNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtOTMte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjk0Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy05NS1cdHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtIGUgPSB7IC5pcCA9IDAgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9MTA4PWhhc2hfaXBwb3J0aXA0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0xMTEtXHRzdHJ1Y3QgaGFzaF9pcHBvcnRpcDQgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzoxMTI6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTExMy1cdHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtIGUgPSB7IC5pcCA9IDAgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9MjYzPWhhc2hfaXBwb3J0aXA2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNjYte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjI2NzpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMjY4LVx0c3RydWN0IGhhc2hfaXBwb3J0aXA2X2VsZW0gZSA9IHsgLmlwID0geyAuYWxsID0geyAwIH0gfSB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yODE9aGFzaF9pcHBvcnRpcDZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI4NC1cdGNvbnN0IHN0cnVjdCBoYXNoX2lwcG9ydGlwNiAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjI4NTpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMjg2LVx0c3RydWN0IGhhc2hfaXBwb3J0aXA2X2VsZW0gZSA9IHsgIC5pcCA9IHsgLmFsbCA9IHsgMCB9IH0gfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTEzND1oYXNoX2lwcG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xMzgtXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjEzOTpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTE0MC1cdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDRfZWxlbSBlID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTYwPWhhc2hfaXBwb3J0bmV0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTE2My1cdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDQgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6MTY0Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTY1LVx0c3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIC0gMSB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9Mzk0PWhhc2hfaXBwb3J0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTM5OC1cdGNvbnN0IHN0cnVjdCBoYXNoX2lwcG9ydG5ldDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6Mzk5Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDAwLVx0c3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtIGUgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz00MjA9aGFzaF9pcHBvcnRuZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDIzLVx0Y29uc3Qgc3RydWN0IGhhc2hfaXBwb3J0bmV0NiAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzo0MjQ6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy00MjUtXHRzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0sgLSAxIH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYz03Mz1oYXNoX21hYzRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy03Ni17XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjc3Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNzgtXHRzdHJ1Y3QgaGFzaF9tYWM0X2VsZW0gZSA9IHsgeyAuZm9vWzBdID0gMCwgLmZvb1sxXSA9IDAgfSB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM9OTY9aGFzaF9tYWM0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtOTgte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYzo5OTpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTEwMC1cdHN0cnVjdCBoYXNoX21hYzRfZWxlbSBlID0geyB7IC5mb29bMF0gPSAwLCAuZm9vWzFdID0gMCB9IH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMTM9aGFzaF9uZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTE3LVx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0NCAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMTg6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMTktXHRzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gZSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTEzNj1oYXNoX25ldDRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMzktXHRzdHJ1Y3QgaGFzaF9uZXQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjE0MDpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTE0MS1cdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9Mjg3PWhhc2hfbmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTI5MS1cdGNvbnN0IHN0cnVjdCBoYXNoX25ldDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MjkyOlx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjkzLVx0c3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0zMTA9aGFzaF9uZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMzEyLXtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MzEzOlx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMzE0LVx0c3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLIH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTE1Nz1oYXNoX25ldGlmYWNlNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTYxLVx0c3RydWN0IGhhc2hfbmV0aWZhY2U0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MTYyOlx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xNjMtXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSBlID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xOTg9aGFzaF9uZXRpZmFjZTRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTIwMS1cdHN0cnVjdCBoYXNoX25ldGlmYWNlNCAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjIwMjpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMjAzLVx0c3RydWN0IGhhc2hfbmV0aWZhY2U0X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0ssIC5lbGVtID0gMSB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNzg9aGFzaF9uZXRpZmFjZTZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM4Mi1cdHN0cnVjdCBoYXNoX25ldGlmYWNlNiAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM4MzpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzg0LVx0c3RydWN0IGhhc2hfbmV0aWZhY2U2X2VsZW0gZSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9NDE3PWhhc2hfbmV0aWZhY2U2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy00MTkte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjQyMDpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtNDIxLVx0c3RydWN0IGhhc2hfbmV0aWZhY2U2X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0ssIC5lbGVtID0gMSB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTQzPWhhc2hfbmV0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTE0Ny1cdGNvbnN0IHN0cnVjdCBoYXNoX25ldG5ldDQgKmggPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MTQ4Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTQ5LVx0c3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtIGUgPSB7IH07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0xNjg9aGFzaF9uZXRuZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTcxLVx0c3RydWN0IGhhc2hfbmV0bmV0NCAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxNzI6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0xNzMtXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ0X2VsZW0gZSA9IHsgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTM4ND1oYXNoX25ldG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zODgtXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRuZXQ2ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjM4OTpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTM5MC1cdHN0cnVjdCBoYXNoX25ldG5ldDZfZWxlbSBlID0geyB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9NDE0PWhhc2hfbmV0bmV0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTQxNi17XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjQxNzpcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTQxOC1cdHN0cnVjdCBoYXNoX25ldG5ldDZfZWxlbSBlID0geyB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTEyOT1oYXNoX25ldHBvcnQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTEzMy1cdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzoxMzQ6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTM1LVx0c3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSBlID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTE1ND1oYXNoX25ldHBvcnQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTE1Ny1cdHN0cnVjdCBoYXNoX25ldHBvcnQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzoxNTg6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTU5LVx0c3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyAtIDEgfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0zNDk9aGFzaF9uZXRwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0zNTMtXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NiAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MzU0Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM1NS1cdHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gZSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0zNzQ9aGFzaF9uZXRwb3J0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0zNzctXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NiAqaCA9IHNldC1cdTAwM2VkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6Mzc4Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM3OS1cdHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0sgIC0gMSB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTE1MT1oYXNoX25ldHBvcnRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTE1NS1cdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxNTY6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTU3LVx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSBlID0geyB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTE5MD1oYXNoX25ldHBvcnRuZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTE5My1cdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxOTQ6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTk1LVx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSBlID0geyB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTQ0OD1oYXNoX25ldHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQ1Mi1cdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzo0NTM6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDU0LVx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDZfZWxlbSBlID0geyB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTQ3Nz1oYXNoX25ldHBvcnRuZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQ4MC1cdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2ICpoID0gc2V0LVx1MDAzZWRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzo0ODE6XHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDgyLVx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDZfZWxlbSBlID0geyB9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MzUzPWxpc3Rfc2V0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzU2LVx0c3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MzU3Olx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzU4LVx0c3RydWN0IHNldF9hZHRfZWxlbSBlID0geyAucmVmaWQgPSBJUFNFVF9JTlZBTElEX0lEIH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjcxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggdGhpcyBjb2RlOgoKKipBbmFseXppbmcgYGxpc3Rfc2V0X3VhZHRgKioKClJpZ2h0LCBzbyBgbGlzdF9zZXRfdWFkdGAgaXMgY2FsbGluZyBgc2V0LSZndDt2YXJpYW50LSZndDthZHRbYWR0XWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb3BlcmF0aW9uLiBPa2F5LCBJIGdldCBpdCwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNldCwgYW5kIGl0cyB2YXJpYW50IGlzIGxpa2VseSBhbiBpbXBsZW1lbnRhdGlvbiBvZiBkaWZmZXJlbnQgQURUcyAoQWJzdHJhY3QgRGF0YSBUeXBlcyksIHBvdGVudGlhbGx5IHNvbWV0aGluZyBsaWtlIGEgaGFzaCB0YWJsZSBvciBhIHRyZWUuIFRoaXMgY2FsbCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgdGhlIGBhZHRgdGggZWxlbWVudCB3aXRoaW4gdGhlIHNldCYjMzk7cyBzcGVjaWZpYyBBRFQuICBUaGUgcXVlc3Rpb24gbm93IGlzICp3aHkqPyBXaGF04oCZcyBkcml2aW5nIHRoaXMgY2FsbD8gVGltZSB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgYGxpc3Rfc2V0X3VhZHRgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gTGV0JiMzOTtzIGdvIHNwZWx1bmtpbmcgdGhyb3VnaCB0aGUgY29kZWJhc2UgYW5kIHNlZSB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhpcy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaXN0X3NldF91YWR0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTM1Mj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjM1MzpsaXN0X3NldF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzU0LVx0ICAgICAgZW51bSBpcHNldF9hZHQgYWR0LCB1MzIgKmxpbmVubywgdTMyIGZsYWdzLCBib29sIHJldHJpZWQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz01NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IHNldF92YXJpYW50ID0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NTktXHQua2FkdFx0PSBsaXN0X3NldF9rYWR0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzo1NjA6XHQudWFkdFx0PSBsaXN0X3NldF91YWR0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NjEtXHQuYWR0XHQ9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExOTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVBRFQgQXNzaWdubWVudCBhbmQgVXNhZ2UqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgbGlzdF9zZXRfdWFkdGAgaXMgYmVpbmcgYXNzaWduZWQgdG8gYHNldF92YXJpYW50LnVhZHRgLiBSaWdodCwgYW5kIHRoYXQgYHNldF92YXJpYW50LnVhZHRgIGlzIHRoZW4gaW52b2tlZCBmcm9tIGBpcF9zZXRfY29yZS5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIHRoYXQgYC0mZ3Q7dWFkdGAgbWVtYmVyIHdpdGhpbiBgaXBfc2V0X2NvcmUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIFVBRFQsIG9yIFVzZXItRGVmaW5lZCBBYnN0cmFjdCBEYXRhIFR5cGUsIGlzIGJlaW5nIHV0aWxpemVkIGluIHRoZSBjb3JlIElQIHNldCBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0IG9wZXJhdGlvbnMgYXJlIGJlaW5nIHBlcmZvcm1lZCBvbiBpdC4gSXTigJlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhc3NvY2lhdGVkIHdpdGggaXQsIGFuZCB3aGF0IHRoYXQgZGF0YSBpcyB1c2VkIGZvci4gVGhpcyBpcyBhIGtleSBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc2V0IHZhcmlhbnQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBJUCBzZXQgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDstXHUwMDNldWFkdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTc0Nj1jYWxsX2FkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKmN0bmwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE3NjMtXHRcdGlwX3NldF9sb2NrKHNldCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTc2NDpcdFx0cmV0ID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNldWFkdChzZXQsIHRiLCBhZHQsIFx1MDAyNmxpbmVubywgZmxhZ3MsIHJldHJpZWQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE3NjUtXHRcdGlwX3NldF91bmxvY2soc2V0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTg4OD1zdGF0aWMgaW50IGlwX3NldF91dGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xOTExLVx0cmN1X3JlYWRfbG9ja19iaCgpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE5MTI6XHRyZXQgPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2V1YWR0KHNldCwgdGIsIElQU0VUX1RFU1QsIFx1MDAyNmxpbmVubywgMCwgMCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTkxMy1cdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTgwOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGBpcF9zZXRgIGZ1bmN0aW9uYWxpdHkuIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9uIGBjYWxsX2FkYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBib3RoIGBpcF9zZXRfdWFkZGAgYW5kIGBpcF9zZXRfdWRlbGAuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSXQgc3VnZ2VzdHMgdGhhdCB0aGVyZSYjMzk7cyBhIGNvbW1vbiwgc2hhcmVkIGFjdGlvbiBoYXBwZW5pbmcgd2hlbiBhZGRpbmcgb3IgZGVsZXRpbmcgYW4gZWxlbWVudCBpbiBhbiBJUCBzZXQuCgoqKkFuYWx5emluZyB0aGUgYGNhbGxfYWRgIEludGVyYWN0aW9uKioKCk15IGltbWVkaWF0ZSBpbmNsaW5hdGlvbiBpcyB0byB1bmRlcnN0YW5kICp3aHkqIGBjYWxsX2FkYCBpcyBuZWVkZWQgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgYGlwX3NldGAgY29udGV4dC4gSSBzaG91bGQgcmVhbGx5IGRpdmUgaW50byB3aGF0IGBjYWxsX2FkYCBhY3R1YWxseSAqZG9lcyouIElzIGl0IHNvbWUgc29ydCBvZiBhdXhpbGlhcnkgZnVuY3Rpb24/IElzIGl0IGhhbmRsaW5nIG5vdGlmaWNhdGlvbnMsIHBlcmhhcHM/IE9yIG1heWJlIHNvbWUgc29ydCBvZiBjb25maWd1cmF0aW9uIGNoYW5nZT8gV2hhdGV2ZXIgaXQgZG9lcywgdGhlIGZhY3QgdGhhdCBib3RoIGBpcF9zZXRfdWFkZGAgKGFkZGluZykgYW5kIGBpcF9zZXRfdWRlbGAgKGRlbGV0aW5nKSBjYWxsIGl0IHBvaW50cyB0byBpdHMgY29yZSBhbmQgZnVuZGFtZW50YWwgbmF0dXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gY3J5c3RhbCBjbGVhciBvbiB0aGlzLiBOb3cgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBzY3J1dGluaXppbmcgdGhlIGBpcF9zZXRfdWFkZGAgZnVuY3Rpb24uIEkgdGhpbmsgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIG5lZWRlZCBjb250ZXh0IGZvciBgY2FsbF9hZGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldF91YWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xODE4PXN0YXRpYyBpbnQgaXBfc2V0X2FkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKmN0bmwsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NzMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTg3NDpzdGF0aWMgaW50IGlwX3NldF91YWRkKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg3NS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTIxNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIGlwX3NldF9uZXRsaW5rX3N1YnN5c19jYltJUFNFVF9NU0dfTUFYXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjE5NS1cdFtJUFNFVF9DTURfQUREXVx0PSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MjE5NjpcdFx0LmNhbGxcdFx0PSBpcF9zZXRfdWFkZCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTk3LVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfTVVURVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDU0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IHRoaW5raW5nIGdvZXMgbGlrZSB0aGlzOgoKKipBbmFseXppbmcgdGhlIE5ldGxpbmsgQ2FsbGJhY2sgZm9yIElQIFNldCBBZGRpdGlvbioqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBlbnRyeSBwb2ludCwgYXMgSSBzZWUgaXQsIGlzIHRoZSBgaXBfc2V0X3VhZGRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBhIG5ldGxpbmsgY2FsbGJhY2ssIHNvIHRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGF0IEkgbmVlZCB0byBmb2N1cyBvbi4gTm93LCB0aGUga2V5IGZ1bmN0aW9uIHJlbGF0ZWQgdG8gYWRkaW5nIGFuIGVsZW1lbnQgc2hvdWxkIGJlIGVpdGhlciBgaXBfc2V0X3VhZGRgIGl0c2VsZiwgb3IgcGVyaGFwcyBzb21ldGhpbmcgbGlrZSBgbGlzdF9zZXRfdWFkdGAuIEhtbSwgYnV0IHdhaXQgYSBtb21lbnQuLi4gdGhhdCBgbGlzdF9zZXRfdWFkdGAgZnVuY3Rpb24sIGlzbiYjMzk7dCB0aGF0IHN0YXRpYyB3aXRoaW4gYGlwX3NldF9saXN0X3NldC5jYD8gSXQmIzM5O3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkmIzM5O3ZlIGJlZW4gaW4gdGhpcyBjb2RlLiBCZXR0ZXIgZG91YmxlIGNoZWNrLCBjYW4mIzM5O3QgYXNzdW1lIGFueXRoaW5nLiBOZWVkIHRvIHZlcmlmeSB0aGF0LCB0byBlbnN1cmUgSSYjMzk7bSBiYXJraW5nIHVwIHRoZSByaWdodCB0cmVlLCBiZWZvcmUgcHJvY2VlZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlzdF9zZXRfdWFkdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0zNTI9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzozNTM6bGlzdF9zZXRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTM1NC1cdCAgICAgIGVudW0gaXBzZXRfYWR0IGFkdCwgdTMyICpsaW5lbm8sIHUzMiBmbGFncywgYm9vbCByZXRyaWVkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBzZXRfdmFyaWFudCA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTU5LVx0LmthZHRcdD0gbGlzdF9zZXRfa2FkdCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NTYwOlx0LnVhZHRcdD0gbGlzdF9zZXRfdWFkdCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTYxLVx0LmFkdFx0PSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDI2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgdGhlIFN0YXRpYyBEZWNsYXJhdGlvbiBvZiBgaXBfc2V0X3VhZGRgKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBsaXN0X3NldF91YWR0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGBpcF9zZXRfdWFkZGAgZnVuY3Rpb24gaXMgYWxzbyBkZWNsYXJlZCBhcyBzdGF0aWMuIEkgcmVjYWxsIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBpcF9zZXRfY29yZS5jYCwgYnV0IEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0byBiZSBjZXJ0YWluLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGFuZCBleGFtaW5lIHRoZSBjb2RlIGluIGBpcF9zZXRfY29yZS5jYCBhbmQgc2VhcmNoIGZvciB0aGF0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHRvIGNvbmZpcm0gaXRzIHN0YXR1cy4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldF91YWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xODE4PXN0YXRpYyBpbnQgaXBfc2V0X2FkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKmN0bmwsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NzMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTg3NDpzdGF0aWMgaW50IGlwX3NldF91YWRkKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg3NS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTIxNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIGlwX3NldF9uZXRsaW5rX3N1YnN5c19jYltJUFNFVF9NU0dfTUFYXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjE5NS1cdFtJUFNFVF9DTURfQUREXVx0PSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MjE5NjpcdFx0LmNhbGxcdFx0PSBpcF9zZXRfdWFkZCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTk3LVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfTVVURVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTY2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJUCBTZXQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gYGlwX3NldF91YWRkYCBpcyBkZWZpbml0ZWx5IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBsaW1pdHMgaXRzIGRpcmVjdCB1c2FnZSBmcm9tIG91dHNpZGUgdGhlIGN1cnJlbnQgbW9kdWxlLiBJIG5lZWQgdG8gZmluZCBhIHdheSB0byBtYW5pcHVsYXRlIHRoZSBJUCBzZXRzIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgYW5kIHRoYXQgbWVhbnMgSSBuZWVkIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZGVsdmUgaW50byBgaXBfc2V0X2NvcmUuY2AgYW5kIHNlZSB3aGF0IHB1YmxpY2x5IGF2YWlsYWJsZSBmdW5jdGlvbnMgaXQgZGVmaW5lcy4gSG9wZWZ1bGx5LCB0aGVyZSYjMzk7cyBhIGdvb2Qgc2V0IG9mIGV4cG9ydGVkIGZ1bmN0aW9ucyB0byBkbyB3aGF0IEkgbmVlZCEgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IEFQSSBmdW5jdGlvbnMgdGhhdCBJIGNhbiBsZXZlcmFnZSB0byB3b3JrIHdpdGggSVAgc2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MjA2PWlwX3NldF90eXBlX3JlZ2lzdGVyKHN0cnVjdCBpcF9zZXRfdHlwZSAqdHlwZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjM0LX1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMzU6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X3R5cGVfcmVnaXN0ZXIpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIzNi1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MjM5PWlwX3NldF90eXBlX3VucmVnaXN0ZXIoc3RydWN0IGlwX3NldF90eXBlICp0eXBlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yNTUtfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjI1NjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfdHlwZV91bnJlZ2lzdGVyKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yNTctXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTI2MD1pcF9zZXRfYWxsb2Moc2l6ZV90IHNpemUpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTI2My19XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MjY0OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9hbGxvYyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjY1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yNjc9aXBfc2V0X2ZyZWUodm9pZCAqbWVtYmVycylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjcyLX1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyNzM6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2ZyZWUpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTI3NC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9Mjg3PWlwX3NldF9nZXRfaXBhZGRyNChzdHJ1Y3QgbmxhdHRyICpubGEsICBfX2JlMzIgKmlwYWRkcilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMzAxLX1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzozMDI6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2dldF9pcGFkZHI0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zMDMtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTMwNT1pcF9zZXRfZ2V0X2lwYWRkcjYoc3RydWN0IG5sYXR0ciAqbmxhLCB1bmlvbiBuZl9pbmV0X2FkZHIgKmlwYWRkcilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMzIxLX1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzozMjI6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2dldF9pcGFkZHI2KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zMjMtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTM0Nz1pcF9zZXRfaW5pdF9jb21tZW50KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNjgtfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjM2OTpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfaW5pdF9jb21tZW50KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNzAtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTQwND1jb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dF90eXBlIGlwX3NldF9leHRlbnNpb25zW10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTQyOS19O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjQzMDpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfZXh0ZW5zaW9ucyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNDMxLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz00NDE9aXBfc2V0X2VsZW1fbGVuKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSwgc2l6ZV90IGxlbixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNDY0LX1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo0NjU6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2VsZW1fbGVuKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy00NjYtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTQ2OD1pcF9zZXRfZ2V0X2V4dGVuc2lvbnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy01MjEtfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjUyMjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfZ2V0X2V4dGVuc2lvbnMpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTUyMy1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NTY1PWlwX3NldF9wdXRfZXh0ZW5zaW9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTU4Ni19XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NTg3OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9wdXRfZXh0ZW5zaW9ucyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNTg4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz02Mzk9aXBfc2V0X21hdGNoX2V4dGVuc2lvbnMoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy02NjEtfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjY2MjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfbWF0Y2hfZXh0ZW5zaW9ucyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNjYzLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz03NDE9aXBfc2V0X3Rlc3QoaXBfc2V0X2lkX3QgaW5kZXgsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTc3My19XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6Nzc0OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF90ZXN0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03NzUtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTc3Nz1pcF9zZXRfYWRkKGlwX3NldF9pZF90IGluZGV4LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03OTUtfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjc5NjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfYWRkKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03OTctXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTc5OT1pcF9zZXRfZGVsKGlwX3NldF9pZF90IGluZGV4LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04MTctfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjgxODpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfZGVsKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04MTktXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTgyNT1pcF9zZXRfZ2V0X2J5bmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKm5hbWUsIHN0cnVjdCBpcF9zZXQgKipzZXQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTg0NC19XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6ODQ1OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9nZXRfYnluYW1lKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04NDYtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTg2Nj1pcF9zZXRfcHV0X2J5aW5kZXgoc3RydWN0IG5ldCAqbmV0LCBpcF9zZXRfaWRfdCBpbmRleClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtODcxLX1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo4NzI6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X3B1dF9ieWluZGV4KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04NzMtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTg4MD1pcF9zZXRfbmFtZV9ieWluZGV4KHN0cnVjdCBuZXQgKm5ldCwgaXBfc2V0X2lkX3QgaW5kZXgsIGNoYXIgKm5hbWUpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTg4OS19XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6ODkwOkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9uYW1lX2J5aW5kZXgpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTg5MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9OTAyPWlwX3NldF9uZm5sX2dldF9ieWluZGV4KHN0cnVjdCBuZXQgKm5ldCwgaXBfc2V0X2lkX3QgaW5kZXgpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTkxOS19XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6OTIwOkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9uZm5sX2dldF9ieWluZGV4KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy05MjEtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTkyOT1pcF9zZXRfbmZubF9wdXQoc3RydWN0IG5ldCAqbmV0LCBpcF9zZXRfaWRfdCBpbmRleClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtOTQxLX1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo5NDI6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X25mbmxfcHV0KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy05NDMtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE0NTk9aXBfc2V0X3B1dF9mbGFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE0NzktfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE0ODA6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X3B1dF9mbGFncyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTQ4MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzMzIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBFeHBvcnRlZCBgaXBfc2V0X2FkZGAgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIGBpcF9zZXRfYWRkYCBpcyBleHBvcnRlZC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIGtleSBhcmVhIGZvciBhbmFseXNpcy4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0cyBleHBvcnQsIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBpdHMgaW1wbGVtZW50YXRpb24gd2l0aGluIGBpcF9zZXRfY29yZS5jYC4gVGhpcyBmdW5jdGlvbiBpcyBmdW5kYW1lbnRhbCB0byB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgY29yZSBJUCBzZXQgZnVuY3Rpb25hbGl0eSwgc28gdW5kZXJzdGFuZGluZyBpdHMgaW50ZXJuYWwgd29ya2luZ3MgaXMgY3J1Y2lhbC4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IGl04oCZcyBoYW5kbGluZyB0aGUgYWRkaXRpb24gb2YgZWxlbWVudHMgdG8gdGhlIHNldCwgdGhlIGVycm9yIGNoZWNraW5nIGludm9sdmVkLCBhbnkgbG9ja2luZyBtZWNoYW5pc21zIGl0IGVtcGxveXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIG9wZXJhdGlvbiBsaWVzLCBhbmQgYSBxdWljayBnbGFuY2UgYXQgdGhlIHNvdXJjZSB3aWxsIHRlbGwgbWUgdm9sdW1lcy4gVGhlIGRlc2lnbiBjaG9pY2VzIG1hZGUgaGVyZSBpbXBhY3QgcGVyZm9ybWFuY2UsIGNvbmN1cnJlbmN5LCBhbmQgc2VjdXJpdHkuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfc2V0X2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NjA3PXN0YXRpYyB2b2lkXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NjA4OmlwX3NldF9hZGRfYnl0ZXModTY0IGJ5dGVzLCBzdHJ1Y3QgaXBfc2V0X2NvdW50ZXIgKmNvdW50ZXIpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNjA5LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NjEzPXN0YXRpYyB2b2lkXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NjE0OmlwX3NldF9hZGRfcGFja2V0cyh1NjQgcGFja2V0cywgc3RydWN0IGlwX3NldF9jb3VudGVyICpjb3VudGVyKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTYxNS17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTYyMD1pcF9zZXRfdXBkYXRlX2NvdW50ZXIoc3RydWN0IGlwX3NldF9jb3VudGVyICpjb3VudGVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy02MjQtXHQgICAgIShmbGFncyBcdTAwMjYgSVBTRVRfRkxBR19TS0lQX0NPVU5URVJfVVBEQVRFKSkge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjYyNTpcdFx0aXBfc2V0X2FkZF9ieXRlcyhleHQtXHUwMDNlYnl0ZXMsIGNvdW50ZXIpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjYyNjpcdFx0aXBfc2V0X2FkZF9wYWNrZXRzKGV4dC1cdTAwM2VwYWNrZXRzLCBjb3VudGVyKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy02MjctXHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTc3Nj1pbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo3Nzc6aXBfc2V0X2FkZChpcF9zZXRfaWRfdCBpbmRleCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03NzgtXHQgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsIHN0cnVjdCBpcF9zZXRfYWR0X29wdCAqb3B0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03OTUtfVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjc5NjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfYWRkKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03OTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTMyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBgaXBzZXRgIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgaXBzZXRgIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgZWxlbWVudCBhZGRpdGlvbiBwcm9jZXNzLiBJIGtub3cgYGlwX3NldF9hZGRgIGlzIHRoZSBrZXJuZWwtc2lkZSBmdW5jdGlvbiwgdGhhdCYjMzk7cyB0aGUgb25lIHRoYXQgYWN0dWFsbHkgZG9lcyB0aGUgd29yayBvZiBhZGRpbmcgdGhlIElQIGFkZHJlc3Mgb3IgbmV0d29yayB0byB0aGUgc2V0IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGRhdGEgc3RydWN0dXJlcy4gQnV0LCBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCB0aGUgaXNzdWUsIHRoZSBidWcgSSYjMzk7bSB0cmFja2luZyBkb3duLCBpcyBhY3R1YWxseSB3aXRoaW4gYGxpc3Rfc2V0X3VhZGRgLiBIYW5nIG9uLCB3YXNuJiMzOTt0IHRoYXQgdGhlIHVzZXJzcGFjZSBBUEk/IEFoIHllcywgYHVhZGRgIHN0YW5kcyBmb3IgdXNlcnNwYWNlIGFkZCwgZ290IGl0LgoKT2theSwgc28gYGxpc3Rfc2V0X3VhZGRgIGlzIHRoZSBoYW5kbGVyIGZvciBgW0lQU0VUX0FERF1gIGNvbW1hbmQgdXNlZCBvbiBhIGBsaXN0OnNldGAgdHlwZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZyB0aGUgY29ycmVjdCBleGVjdXRpb24gcGF0aCBoZXJlLiBMZXQgbWUgY2lyY2xlIGJhY2sgYW5kIHJlLWV4YW1pbmUgYGxpc3Rfc2V0X3VhZGRgIHZlcnkgY2FyZWZ1bGx5LiBOZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZSB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlcmZhY2luZyB3aXRoIHRoZSBrZXJuZWwgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgbWlnaHQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xpc3Rfc2V0X3VhZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MjM1PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MjM2Omxpc3Rfc2V0X3VhZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMjM3LVx0ICAgICAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTU1OD1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgc2V0X3ZhcmlhbnQgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NjEtXHQuYWR0XHQ9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NTYyOlx0XHRbSVBTRVRfQUREXSA9IGxpc3Rfc2V0X3VhZGQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTU2My1cdFx0W0lQU0VUX0RFTF0gPSBsaXN0X3NldF91ZGVsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzc2NgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBgbGlzdF9zZXRfdWFkZGAgVXNhZ2UqKgoKQWxyaWdodCwgc28gYGxpc3Rfc2V0X3VhZGRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIHR3byBkaXN0aW5jdCBjb250ZXh0czogdGhlIHVzZXJzcGFjZSBmdW5jdGlvbiBgbGlzdF9zZXRfdWFkdGAgYW5kIHRoZSBrZXJuZWxzcGFjZSBmdW5jdGlvbiBgbGlzdF9zZXRfa2FkdGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBpbW1lZGlhdGVseSByYWlzZXMgc29tZSBxdWVzdGlvbnMgYWJvdXQgaG93IHdlJiMzOTtyZSBoYW5kbGluZyBkYXRhIHRyYW5zaXRpb25zIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBCZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gdGhlIHJhYmJpdCBob2xlIG9mIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhlIGxvd2VyIGxldmVsIHdpdGggYGxpc3Rfc2V0X2thZHRgLiBMZXQgbWUgZmlyc3Qgem9vbSBpbiBvbiB0aGF0IGtlcm5lbHNwYWNlIGNhbGwgdG8gc2VlIHdoYXQgaXTigJlzIGRvaW5nLCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCwgYW5kIHdoYXQgZGF0YSBpdCYjMzk7cyBvcGVyYXRpbmcgb24uIFRoYXTigJlsbCBnaXZlIG1lIGEgc29saWQgYmFzZSB0byB1bmRlcnN0YW5kIGFueSBpc3N1ZXMgdGhhdCBtaWdodCBiZSBlbWVyZ2luZyBmcm9tIGludGVyYWN0aW9ucyBiZXR3ZWVuIHVzZXJzcGFjZSBhbmQgdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaXN0X3NldF9rYWR0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTExMz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjExNDpsaXN0X3NldF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMTE1LVx0ICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBzZXRfdmFyaWFudCA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NTU5Olx0LmthZHRcdD0gbGlzdF9zZXRfa2FkdCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTYwLVx0LnVhZHRcdD0gbGlzdF9zZXRfdWFkdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyOTcKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgYGxpc3Rfc2V0X2thZHRgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBhIGtleSBkZXRhaWwgaW4gdGhlIGBsaXN0X3NldF9rYWR0YCBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvci4gVGhlIGNlbnRyYWwgcXVlc3Rpb24gaW4gbXkgbWluZCByaWdodCBub3cgaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGludGVyYWN0cyB3aXRoIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlIOKAkyBzcGVjaWZpY2FsbHksIGRvZXMgaXQgdWx0aW1hdGVseSBtYWtlIGEgY2FsbCB0byBgc2V0LSZndDt2YXJpYW50LSZndDthZHRbYWR0XWA/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMsIHdlbGwsICp0aGUqIHVuZGVybHlpbmcgQURULiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBkaXJlY3RseSBhY2Nlc3NlcyBhbmQgbWFuaXB1bGF0ZXMgdGhlIEFEVCB0aHJvdWdoIHRoYXQgYHZhcmlhbnRgIHBvaW50ZXIgYW5kIGFycmF5IGFjY2Vzcy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gY29uZmlybSBob3cgdGhlIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0YS4gVGhpcyBkaXJlY3QgbGluayBpcyBjcml0aWNhbCBmb3IgaG93IHRoaXMgZmVhdHVyZSBpcyBkZXNpZ25lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTM6XHRzdGF0aWMgaW50XG4gMTE0Olx0bGlzdF9zZXRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gMTE1Olx0XHQgICAgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsXG4gMTE2Olx0XHQgICAgICBlbnVtIGlwc2V0X2FkdCBhZHQsIHN0cnVjdCBpcF9zZXRfYWR0X29wdCAqb3B0KVxuIDExNzpcdHtcbiAxMTg6XHRcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gMTE5Olx0XHRpbnQgcmV0ID0gLUVJTlZBTDtcbiAxMjA6XHRcbiAxMjE6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAxMjI6XHRcdHN3aXRjaCAoYWR0KSB7XG4gMTIzOlx0XHRjYXNlIElQU0VUX1RFU1Q6XG4gMTI0Olx0XHRcdHJldCA9IGxpc3Rfc2V0X2t0ZXN0KHNldCwgc2tiLCBwYXIsIG9wdCwgXHUwMDI2ZXh0KTtcbiAxMjU6XHRcdFx0YnJlYWs7XG4gMTI2Olx0XHRjYXNlIElQU0VUX0FERDpcbiAxMjc6XHRcdFx0cmV0ID0gbGlzdF9zZXRfa2FkZChzZXQsIHNrYiwgcGFyLCBvcHQsIFx1MDAyNmV4dCk7XG4gMTI4Olx0XHRcdGJyZWFrO1xuIDEyOTpcdFx0Y2FzZSBJUFNFVF9ERUw6XG4gMTMwOlx0XHRcdHJldCA9IGxpc3Rfc2V0X2tkZWwoc2V0LCBza2IsIHBhciwgb3B0LCBcdTAwMjZleHQpO1xuIDEzMTpcdFx0XHRicmVhaztcbiAxMzI6XHRcdGRlZmF1bHQ6XG4gMTMzOlx0XHRcdGJyZWFrO1xuIDEzNDpcdFx0fVxuIDEzNTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMTM2Olx0XG4gMTM3Olx0XHRyZXR1cm4gcmV0O1xuIDEzODpcdH1cbiAxMzk6XHRcbiAxNDA6XHQvKiBVc2Vyc3BhY2UgaW50ZXJmYWNlczogd2UgYXJlIHByb3RlY3RlZCBieSB0aGUgbmZubCBtdXRleCAqL1xuIDE0MTpcdFxuIDE0MjpcdHN0YXRpYyB2b2lkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTcxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlRyYWNpbmcgdGhlIERlcGVuZGVuY3kqKgoKUmlnaHQsIHNvIGBsaXN0X3NldF9rYWR0YC4uLiBpdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IHRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIGBsaXN0X3NldF9rYWRkYC4gTm8gc3VycHJpc2VzIHRoZXJlOyB0aGV5JiMzOTtyZSBwcm9iYWJseSBkZXNpZ25lZCB0byB3b3JrIGluIHRhbmRlbS4gTXkgZmlyc3QgaW5zdGluY3QsIHRoZW4sIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgYGxpc3Rfc2V0X2thZGRgLiBVbmRlcnN0YW5kaW5nICp0aGF0KiBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBrZXkgdG8gZ3Jhc3BpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcGFyYW1ldGVycywgaXRzIHJldHVybiB2YWx1ZSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2lkZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlzdF9zZXRfa2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz03Mz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjc0Omxpc3Rfc2V0X2thZGQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy03NS1cdCAgICAgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTExND1saXN0X3NldF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTEyNi1cdGNhc2UgSVBTRVRfQUREOlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoxMjc6XHRcdHJldCA9IGxpc3Rfc2V0X2thZGQoc2V0LCBza2IsIHBhciwgb3B0LCBcdTAwMjZleHQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0xMjgtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ1NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYGxpc3Rfc2V0X2thZGRgKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBvbiBgbGlzdF9zZXRfa2FkZGAuIE15IGV4cGVydCBicmFpbiBpbW1lZGlhdGVseSBzdGFydHMgdGhpbmtpbmc6ICpXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/IElzIHRoaXMgYSBkYXRhIHN0cnVjdHVyZSBmdW5jdGlvbj8gQSBsaWJyYXJ5IGNhbGw/IEEgc3BlY2lmaWMgQVBJIHdpdGhpbiBhIGRhdGFiYXNlPyogVGhlIG5hbWUgaW1wbGllcyBzb21lIGludGVyYWN0aW9uIGJldHdlZW4gbGlzdHMsIHNldHMsIGFuZCBhIGtleSwgYW5kIHRoZW4gKmFkZGl0aW9uKi4gTXkgYmFja2dyb3VuZCB0ZWxscyBtZSB0aGF0IGBrYWRkYCBzdWdnZXN0cyBhZGRpbmcgZWxlbWVudHMgdG8gYSBrZXksIGFuZCB0aGUgY29tYmluZWQgJiMzNDtsaXN0JiMzNDsgYW5kICYjMzQ7c2V0JiMzNDsgYXNwZWN0IGlzIHRoZSBwYXJ0IHRoYXQgY2F0Y2hlcyBteSBleWUuCgoqICAgKkFyZSB3ZSBkZWFsaW5nIHdpdGggYW4gb3JkZXJlZCBjb2xsZWN0aW9uIChsaXN0KSBhbmQgYW4gdW5vcmRlcmVkLCB1bmlxdWUgY29sbGVjdGlvbiAoc2V0KSBzaW11bHRhbmVvdXNseSwgcGVyaGFwcyBzdG9yaW5nIHRoZSBsaXN0IGFuZCBzZXQgYXMgc2VwYXJhdGUgZW50aXRpZXMgYnV0IGhhdmluZyB0aGVtIHJlbGF0ZWQgYnkgdGhlIHNhbWUga2V5PyogT3IsIGlzIHRoaXMgc29tZSBoeWJyaWQgZGF0YSBzdHJ1Y3R1cmU/IElzIHRoZSBsaXN0IGludGVuZGVkIHRvIG1haW50YWluIG9yZGVyLCB3aXRoIHRoZSBzZXQgZW5zdXJpbmcgbm8gZHVwbGljYXRlcyB3aGVuIG5ldyBlbGVtZW50cyBhcmUgYWRkZWQ/IEkgaW1tZWRpYXRlbHkgc3RhcnQgY29tcGFyaW5nIHRoaXMgd2l0aCBhbHRlcm5hdGl2ZSBkYXRhIHN0cnVjdHVyZSBwb3NzaWJpbGl0aWVzOiB3aGF0JiMzOTtzIHRoZSB1c2UgY2FzZT8gQ291bGQgdGhpcyBiZSB1c2VmdWwgZm9yIG1haW50YWluaW5nIGEgaGlzdG9yeSBvZiBzb21ldGhpbmcgaW4gdGhlIGxpc3QsIHRoZW4gdXNpbmcgdGhlIHNldCB0byBmaW5kIGR1cGxpY2F0ZXMsIG9yIGEgZmFzdCBsb29rdXAgb24gdGhlIGxpc3QgY29udGVudD8gSSB3b25kZXIgYWJvdXQgaG93IHRoZSBpbnNlcnRpb24gdGltZSBvZiB0aGUgbGlzdCBhbmQgc2V0IG9wZXJhdGlvbnMgaW1wYWN0IHBlcmZvcm1hbmNlLgoqICAgKldoYXQmIzM5O3MgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24/KiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBvciBsZXZlcmFnaW5nIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gYSBwcm9ncmFtbWluZyBsYW5ndWFnZSBvciBkYXRhYmFzZT8gS25vd2luZyB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBpcyBrZXkgdG8gZXZhbHVhdGluZyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgbGlrZSB0aW1lIGNvbXBsZXhpdHkgZm9yIGRpZmZlcmVudCBvcGVyYXRpb25zIChhZGRpbmcgdG8gdGhlIGxpc3QsIGFkZGluZyB0byB0aGUgc2V0LCBjaGVja2luZyBmb3IgbWVtYmVyc2hpcCBpbiBlaXRoZXIgc3RydWN0dXJlLCBldGMuKS4KCkkmIzM5O20gYWxzbyBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGRvd25zaWRlcy4gKklzIHRoZXJlIGEgbWVtb3J5IG92ZXJoZWFkIGhlcmU/IE1haW50YWluaW5nIGJvdGggc3RydWN0dXJlcyBmb3IgdGhlIHNhbWUga2V5IGNvdWxkIGJlIGNvc3RseSwgcGFydGljdWxhcmx5IGlmIHRoZSBkYXRhc2V0IGlzIGxhcmdlLiogSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBjb25mbGljdHMgYW5kIHVuaXF1ZW5lc3MuIERvZXMgaXQgcmVwbGFjZSBhbiBleGlzdGluZyBsaXN0IG9yIHNldD8gT3IgbWVyZ2Ugb3IgYXBwZW5kIHRvIHRoZSBleGlzdGluZyBsaXN0IG9yIHNldD8gT3IsIGRvZXMgaXQgcmV0dXJuIGFuIGVycm9yPwoKVWx0aW1hdGVseSwgbXkgdGhvdWdodHMgYXJlIGdvaW5nIHRvd2FyZCB3aGF0IHRoZSBmdW5jdGlvbiBhY2NvbXBsaXNoZXMgZnJvbSB0aGUgZ3JvdW5kIHVwLCBhbmQgdGhlbiBjb21wYXJpbmcgaXQgdG8gd2hhdCBJIGtub3cgdG8gYXJyaXZlIGF0IGl0cyBwb3NzaWJsZSB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDczLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzM6XHRzdGF0aWMgaW50XG4gIDc0Olx0bGlzdF9zZXRfa2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gIDc1Olx0XHQgICAgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsXG4gIDc2Olx0XHQgICAgICBzdHJ1Y3QgaXBfc2V0X2FkdF9vcHQgKm9wdCwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dClcbiAgNzc6XHR7XG4gIDc4Olx0XHRzdHJ1Y3QgbGlzdF9zZXQgKm1hcCA9IHNldC1cdTAwM2VkYXRhO1xuICA3OTpcdFx0c3RydWN0IHNldF9lbGVtICplO1xuICA4MDpcdFx0aW50IHJldDtcbiAgODE6XHRcbiAgODI6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsIFx1MDAyNm1hcC1cdTAwM2VtZW1iZXJzLCBsaXN0KSB7XG4gIDgzOlx0XHRcdGlmIChTRVRfV0lUSF9USU1FT1VUKHNldCkgXHUwMDI2XHUwMDI2XG4gIDg0Olx0XHRcdCAgICBpcF9zZXRfdGltZW91dF9leHBpcmVkKGV4dF90aW1lb3V0KGUsIHNldCkpKVxuICA4NTpcdFx0XHRcdGNvbnRpbnVlO1xuICA4NjpcdFx0XHRyZXQgPSBpcF9zZXRfYWRkKGUtXHUwMDNlaWQsIHNrYiwgcGFyLCBvcHQpO1xuICA4NzpcdFx0XHRpZiAocmV0ID09IDApXG4gIDg4Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAgODk6XHRcdH1cbiAgOTA6XHRcdHJldHVybiAwO1xuICA5MTpcdH1cbiAgOTI6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyNjYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIGBsaXN0X3NldGAgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGVzZSBgbGlzdF9zZXRgIG9wZXJhdGlvbnMgd29yay4gVGhlIHRoaW5nIHRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgZ3JhYmJpbmcgbXkgYXR0ZW50aW9uIGlzIHRoYXQgYGxpc3Rfc2V0X2thZGRgICpkb2VzbiYjMzk7dCogYXBwZWFyIHRvIGNhbGwgYGxpc3Rfc2V0X3VhZGRgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBiZWNhdXNlIHVzdWFsbHkgeW91JiMzOTtkIGV4cGVjdCBhIG1vcmUgZ3JhbnVsYXIgYWRkIGZ1bmN0aW9uIGxpa2UgYHVhZGRgICh3aGljaCBwcmVzdW1hYmx5IHN0YW5kcyBmb3IgJiMzNDt1bmlxdWUgYWRkJiMzNDsgb3Igc29tZXRoaW5nIHNpbWlsYXIpIHRvIGJlIGEgYnVpbGRpbmcgYmxvY2sgZm9yIG1vcmUgY29tcGxleCBvcGVyYXRpb25zLgoKSXQgc2VlbXMgYGxpc3Rfc2V0X3VhZGRgIGlzIG9ubHkgaW52b2tlZCBmcm9tIGBsaXN0X3NldF91YWR0YC4gVGhpcyBzdWdnZXN0cyBhIHNwZWNpZmljIHJlbGF0aW9uc2hpcCBvciBvcHRpbWl6YXRpb24sIHBlcmhhcHMgdGllZCB0byBob3cgJiMzNDt1bmlxdWUmIzM0OyBhZGRpdGlvbnMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBicm9hZGVyIGBsaXN0X3NldGAgY29udGV4dC4KClRoZXJlZm9yZSwgbGV0JiMzOTtzIHNoaWZ0IG91ciBmb2N1cyB0byBgbGlzdF9zZXRfdWFkdGAgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgbG9naWMgdGhlcmUuIFRoYXQmIzM5O3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgd2h5IGB1YWRkYCBpcyBiZWluZyB1c2VkIHRoZSB3YXkgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUyOlx0c3RhdGljIGludFxuIDM1MzpcdGxpc3Rfc2V0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIDM1NDpcdFx0ICAgICAgZW51bSBpcHNldF9hZHQgYWR0LCB1MzIgKmxpbmVubywgdTMyIGZsYWdzLCBib29sIHJldHJpZWQpXG4gMzU1Olx0e1xuIDM1NjpcdFx0c3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbiAzNTc6XHRcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gMzU4Olx0XHRzdHJ1Y3Qgc2V0X2FkdF9lbGVtIGUgPSB7IC5yZWZpZCA9IElQU0VUX0lOVkFMSURfSUQgfTtcbiAzNTk6XHRcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcbiAzNjA6XHRcdHN0cnVjdCBpcF9zZXQgKnM7XG4gMzYxOlx0XHRpbnQgcmV0ID0gMDtcbiAzNjI6XHRcbiAzNjM6XHRcdGlmICh0YltJUFNFVF9BVFRSX0xJTkVOT10pXG4gMzY0Olx0XHRcdCpsaW5lbm8gPSBubGFfZ2V0X3UzMih0YltJUFNFVF9BVFRSX0xJTkVOT10pO1xuIDM2NTpcdFxuIDM2NjpcdFx0aWYgKHVubGlrZWx5KCF0YltJUFNFVF9BVFRSX05BTUVdIHx8XG4gMzY3Olx0XHRcdCAgICAgIWlwX3NldF9vcHRhdHRyX25ldG9yZGVyKHRiLCBJUFNFVF9BVFRSX0NBRFRfRkxBR1MpKSlcbiAzNjg6XHRcdFx0cmV0dXJuIC1JUFNFVF9FUlJfUFJPVE9DT0w7XG4gMzY5Olx0XG4gMzcwOlx0XHRyZXQgPSBpcF9zZXRfZ2V0X2V4dGVuc2lvbnMoc2V0LCB0YiwgXHUwMDI2ZXh0KTtcbiAzNzE6XHRcdGlmIChyZXQpXG4gMzcyOlx0XHRcdHJldHVybiByZXQ7XG4gMzczOlx0XHRlLmlkID0gaXBfc2V0X2dldF9ieW5hbWUobWFwLVx1MDAzZW5ldCwgdGJbSVBTRVRfQVRUUl9OQU1FXSwgXHUwMDI2cyk7XG4gMzc0Olx0XHRpZiAoZS5pZCA9PSBJUFNFVF9JTlZBTElEX0lEKVxuIDM3NTpcdFx0XHRyZXR1cm4gLUlQU0VUX0VSUl9OQU1FO1xuIDM3NjpcdFx0LyogXCYjMzQ7TG9vcCBkZXRlY3Rpb25cJiMzNDsgKi9cbiAzNzc6XHRcdGlmIChzLVx1MDAzZXR5cGUtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IElQU0VUX1RZUEVfTkFNRSkge1xuIDM3ODpcdFx0XHRyZXQgPSAtSVBTRVRfRVJSX0xPT1A7XG4gMzc5Olx0XHRcdGdvdG8gZmluaXNoO1xuIDM4MDpcdFx0fVxuIDM4MTpcdFxuIDM4MjpcdFx0aWYgKHRiW0lQU0VUX0FUVFJfQ0FEVF9GTEFHU10pIHtcbiAzODM6XHRcdFx0dTMyIGYgPSBpcF9zZXRfZ2V0X2gzMih0YltJUFNFVF9BVFRSX0NBRFRfRkxBR1NdKTtcbiAzODQ6XHRcbiAzODU6XHRcdFx0ZS5iZWZvcmUgPSBmIFx1MDAyNiBJUFNFVF9GTEFHX0JFRk9SRTtcbiAzODY6XHRcdH1cbiAzODc6XHRcbiAzODg6XHRcdGlmIChlLmJlZm9yZSBcdTAwMjZcdTAwMjYgIXRiW0lQU0VUX0FUVFJfTkFNRVJFRl0pIHtcbiAzODk6XHRcdFx0cmV0ID0gLUlQU0VUX0VSUl9CRUZPUkU7XG4gMzkwOlx0XHRcdGdvdG8gZmluaXNoO1xuIDM5MTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTI3NgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBhbmQgbXkgaW50ZXJuYWwgbW9ub2xvZ3VlIG9uIHRoZSBtYXR0ZXI6CgoqKkRpc3NlY3RpbmcgdGhlIGBhZHRmbmAgQ2FsbCoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgbGluZSBvZiBjb2RlLCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgYWR0Zm5gIHdpdGggdGhlIHBhcmFtZXRlcnMgYHNldGAsIGAmYW1wO2VgLCBgJmFtcDtleHRgLCBgJmFtcDtleHRgLCBhbmQgYGZsYWdzYC4gVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGllY2UgaGVyZSBpcyB0aGUgdXNlIG9mIHRob3NlICZhbXA7ZXh0IHBhcmFtZXRlcnMuIFNpbmNlIEkga25vdyB0aGlzIGNvZGUsIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIGRhdGEgc3RydWN0dXJlcy4gVGhlIHVzZSBvZiB0aGUgYWRkcmVzcy1vZiBvcGVyYXRvciBpbXBsaWVzIHRoZXNlIGFyZSBwcm9iYWJseSBwb2ludGVycy4gTGV0JiMzOTtzIHNlZS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYWR0Zm5gIGRvZXMgYW5kIHNwZWNpZmljYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggYHNldGAsIGBlYCwgYGV4dGAsIGFuZCB0aGVzZSBgZmxhZ3NgLiBUaGlzIHByb2JhYmx5IG1lYW5zIEkgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBkZWZpbml0aW9ucyBmb3IgdGhlc2UgdmFyaWFibGVzIHRvbywgYnV0IGxldCYjMzk7cyBnbyB3aXRoIHRoZSBjYWxsIGl0c2VsZiBmb3Igbm93LiBJJiMzOTttIGFzc3VtaW5nIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGVsc2V3aGVyZSBhcyB3ZWxsLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGdvIGZpbmQgaXRzIGRlZmluaXRpb24uIE5vdyB0aGF0IEkgaGF2ZSB0aGlzIGFzIHRoZSBzdGFydGluZyBwb2ludCwgbGV0JiMzOTtzIGxvb2sgYXQgYGxpc3Rfc2V0X3VhZHRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5MjpcdFxuIDM5MzpcdFx0aWYgKHRiW0lQU0VUX0FUVFJfTkFNRVJFRl0pIHtcbiAzOTQ6XHRcdFx0ZS5yZWZpZCA9IGlwX3NldF9nZXRfYnluYW1lKG1hcC1cdTAwM2VuZXQsXG4gMzk1Olx0XHRcdFx0XHRcdCAgICB0YltJUFNFVF9BVFRSX05BTUVSRUZdLFxuIDM5NjpcdFx0XHRcdFx0XHQgICAgXHUwMDI2cyk7XG4gMzk3Olx0XHRcdGlmIChlLnJlZmlkID09IElQU0VUX0lOVkFMSURfSUQpIHtcbiAzOTg6XHRcdFx0XHRyZXQgPSAtSVBTRVRfRVJSX05BTUVSRUY7XG4gMzk5Olx0XHRcdFx0Z290byBmaW5pc2g7XG4gNDAwOlx0XHRcdH1cbiA0MDE6XHRcdFx0aWYgKCFlLmJlZm9yZSlcbiA0MDI6XHRcdFx0XHRlLmJlZm9yZSA9IC0xO1xuIDQwMzpcdFx0fVxuIDQwNDpcdFx0aWYgKGFkdCAhPSBJUFNFVF9URVNUIFx1MDAyNlx1MDAyNiBTRVRfV0lUSF9USU1FT1VUKHNldCkpXG4gNDA1Olx0XHRcdHNldF9jbGVhbnVwX2VudHJpZXMoc2V0KTtcbiA0MDY6XHRcbiA0MDc6XHRcdHJldCA9IGFkdGZuKHNldCwgXHUwMDI2ZSwgXHUwMDI2ZXh0LCBcdTAwMjZleHQsIGZsYWdzKTtcbiA0MDg6XHRcbiA0MDk6XHRmaW5pc2g6XG4gNDEwOlx0XHRpZiAoZS5yZWZpZCAhPSBJUFNFVF9JTlZBTElEX0lEKVxuIDQxMTpcdFx0XHRpcF9zZXRfcHV0X2J5aW5kZXgobWFwLVx1MDAzZW5ldCwgZS5yZWZpZCk7XG4gNDEyOlx0XHRpZiAoYWR0ICE9IElQU0VUX0FERCB8fCByZXQpXG4gNDEzOlx0XHRcdGlwX3NldF9wdXRfYnlpbmRleChtYXAtXHUwMDNlbmV0LCBlLmlkKTtcbiA0MTQ6XHRcbiA0MTU6XHRcdHJldHVybiBpcF9zZXRfZWV4aXN0KHJldCwgZmxhZ3MpID8gMCA6IHJldDtcbiA0MTY6XHR9XG4gNDE3Olx0XG4gNDE4Olx0c3RhdGljIHZvaWRcbiA0MTk6XHRsaXN0X3NldF9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4gNDIwOlx0e1xuIDQyMTpcdFx0c3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbiA0MjI6XHRcdHN0cnVjdCBzZXRfZWxlbSAqZSwgKm47XG4gNDIzOlx0XG4gNDI0Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgbiwgXHUwMDI2bWFwLVx1MDAzZW1lbWJlcnMsIGxpc3QpXG4gNDI1Olx0XHRcdGxpc3Rfc2V0X2RlbChzZXQsIGUpO1xuIDQyNjpcdFx0c2V0LVx1MDAzZWVsZW1lbnRzID0gMDtcbiA0Mjc6XHRcdGF0b21pYzY0X3NldChcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUsIDApO1xuIDQyODpcdH1cbiA0Mjk6XHRcbiA0MzA6XHRzdGF0aWMgdm9pZFxuIDQzMTpcdGxpc3Rfc2V0X2Rlc3Ryb3koc3RydWN0IGlwX3NldCAqc2V0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjIyMwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERhdGEgU3RydWN0dXJlIFVwZGF0ZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBgbGlzdF9zZXRfdWFkdGAgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUsIGFuZCBpdCBjYWxscyBgYWR0Zm5gLCBzcGVjaWZpY2FsbHkgYGxpc3Rfc2V0X3VhZGRgLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSBhc2ssICYjMzQ7V2hlcmUgZWxzZSBpcyB0aGlzIGJlaW5nIGNhbGxlZD8mIzM0OyBUaGUgc3RhdGljIG5hdHVyZSBsaW1pdHMgaXRzIHNjb3BlLCBzbyBpdCYjMzk7cyBrZXkgdG8gaWRlbnRpZnkgaXRzIGVudHJ5IHBvaW50cy4KCk5vdywgdGhlIGNvbm5lY3Rpb24gc2VlbXMgdG8gYmUgdGhyb3VnaCBgc2V0LSZndDt2YXJpYW50LSZndDt1YWR0YCwgd2hpY2ggZ2V0cyBpbnZva2VkIHZpYSBgY2FsbF9hZGAgaW5zaWRlIGBpcF9zZXRfY29yZS5jYC4gSG1tLCBgY2FsbF9hZGAgaXRzZWxmIGlzIGNhbGxlZCBieSBgaXBfc2V0X3VhZGRgIGFuZCBgaXBfc2V0X3VkZWxgLiBJbnRlcmVzdGluZy4gYGlwX3NldF91YWRkYCBpcyBhbHNvIHN0YXRpYy4gVGhpcyBzdWdnZXN0cyB0aGF0IGl0IG1pZ2h0IGJlIGFuIGludGVybmFsIGhlbHBlciwgYnV0IHN0aWxsLCB3aGVyZSYjMzk7cyBpdHMgZW50cnk/CgpBaCwgaXQgc2VlbXMgYGlwX3NldF91YWRkYCBpcyByZWdpc3RlcmVkIGluIGBpcF9zZXRfbmV0bGlua19zdWJzeXNfY2JgIGluIGBpcF9zZXRfY29yZS5jYC4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdy4gVG8gYmUgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIGBpcF9zZXRfbmV0bGlua19zdWJzeXNfY2JgIGFzIHRoYXQgaXMgdGhlIHJlZ2lzdHJhdGlvbiBwb2ludCBmb3IgYGlwX3NldF91YWRkYCB3aGljaCBldmVudHVhbGx5IGdldHMgdG8gYGxpc3Rfc2V0X3VhZHRgLiBMZXQmIzM5O3MgY29uZmlybSBob3cgdGhlIG5ldGxpbmsgY2FsbGJhY2tzIGFyZSBzZXQgdXAgYW5kIGhvdyBkYXRhIGdldHMgdG8gYGlwX3NldF91YWRkYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfc2V0X25ldGxpbmtfc3Vic3lzX2NiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yMTA1PXN0YXRpYyBpbnQgaXBfc2V0X2J5aW5kZXgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjE0Ni1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMTQ3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBpcF9zZXRfbmV0bGlua19zdWJzeXNfY2JbSVBTRVRfTVNHX01BWF0gPSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjE0OC1cdFtJUFNFVF9DTURfTk9ORV1cdD0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yMjQ1PXN0YXRpYyBzdHJ1Y3QgbmZuZXRsaW5rX3N1YnN5c3RlbSBpcF9zZXRfbmV0bGlua19zdWJzeXMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjI0OC1cdC5jYl9jb3VudFx0PSBJUFNFVF9NU0dfTUFYLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjIyNDk6XHQuY2JcdFx0PSBpcF9zZXRfbmV0bGlua19zdWJzeXNfY2IsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjI1MC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzA1OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1cyBGdW5jdGlvbiBTZWxlY3Rpb24gZm9yIE5ldGxpbmsgQ29tbWFuZHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG5ldGxpbmsgY29tbWFuZHMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZmluZCBhbiBleHBvcnRlZCBmdW5jdGlvbi4gSSBjb25zaWRlcmVkIGBpcF9zZXRfYWRkYCBhdCBmaXJzdCwgYnV0IHRoYXQmIzM5O3Mga2VybmVsLXNwYWNlLCBzbyBJIG5lZWQgc29tZXRoaW5nIHVzZXItc3BhY2UgYWNjZXNzaWJsZS4gVGhlbiBJIHJlbWVtYmVyZWQgYGxpc3Rfc2V0X3VhZGRgIHdhcyBtb2RpZmllZC4gSXMgdGhpcyB0aGUgcmlnaHQgZnVuY3Rpb24/CgpUaGUgcHJvbXB0IHNwZWNpZmllcyB0aGF0IEkgc2hvdWxkIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIElmIGBsaXN0X3NldF91YWRkYCBpcyBzdGF0aWMsIHRoYXQmIzM5O3Mgbm90IGlkZWFsLiBIb3dldmVyLCBsb29raW5nIGRlZXBlciwgSSBzZWUgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGFycmF5LCBzcGVjaWZpY2FsbHkgYHNldF92YXJpYW50LmFkdFtJUFNFVF9BRERdYC4gVGhhdCYjMzk7cyB0aGUga2V5ISBCZWNhdXNlIGl0cyBhZGRyZXNzIGlzIHRha2VuLCBpdCAqY2Fubm90KiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVGhpcyBtZWFucyBpdCB3aWxsIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgZXZlbiBpZiBpdCYjMzk7cyB0ZWNobmljYWxseSBhIGhlbHBlciBmdW5jdGlvbi4gSSBjYW4mIzM5O3QgZGlyZWN0bHkgdmVyaWZ5IHRoZSBzeW1ib2wgdGFibGUgcmlnaHQgbm93LCBidXQgdGhhdCYjMzk7cyBteSBleHBlcmllbmNlIGluIHByYWN0aWNlIHdpdGggZnVuY3Rpb24gcG9pbnRlcnMuCgpTbywgYGxpc3Rfc2V0X3VhZGRgIGlzIHBlcmZlY3RseSBhY2NlcHRhYmxlIGFzIGEgZm9jdXMgZnVuY3Rpb24uIEJ1dCBsZXQmIzM5O3MgY2hlY2sgb25lIG1vcmUuIFdoYXQgYWJvdXQgYGlwX3NldF91YWRkYD8gQWgsIGl0JiMzOTtzIGFsc28gYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBgLmNhbGwgPSBpcF9zZXRfdWFkZGAuIFNhbWUgZGVhbC4gU28sIGBpcF9zZXRfdWFkZGAgaXMgYWxzbyBub24taW5saW5lZC4gSSBjYW4gcHJvdmlkZSBib3RoIGBsaXN0X3NldF91YWRkYCBhbmQgYGlwX3NldF91YWRkYCBhcyB2YWxpZCBvcHRpb25zLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBxdWlja2x5IHJldmlld2luZyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkmIzM5O20gY2hlY2tpbmcgYElQX1NFVGAgYW5kIGBJUF9TRVRfTElTVF9TRVRgIGFnYWluLiBJIG5lZWQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgYWxpZ25zIHdpdGggdGhlIG92ZXJhbGwgc3lzdGVtIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSB0aGUgZGVwZW5kZW5jaWVzIG9uIGBJTkVUICZhbXA7JmFtcDsgTkVURklMVEVSYC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBJUF9TRVRfTElTVF9TRVRgIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9TRVRfTElTVF9TRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE1OD1jb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0Vcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2ODpjb25maWcgSVBfU0VUX0xJU1RfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY5LVx0dHJpc3RhdGUgXCYjMzQ7bGlzdDpzZXQgc2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5ODUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgSVBzZXQgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIElQc2V0LiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBtZW50YWwgbWFwIHRlbGxzIG1lIHRoYXQgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2AgaXMgdGhlIGxpa2VseSBwbGFjZSBmb3IgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIHRoaW5raW5nIGFyb3VuZCBsaW5lIDE2OCBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlY3Rpb24gcHJvYmFibHkgaG9sZHMgdGhlIGtleSBwYXJhbWV0ZXJzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2NTpcdFxuIDE2NjpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNjc6XHRcbiAxNjg6XHRjb25maWcgSVBfU0VUX0xJU1RfU0VUXG4gMTY5Olx0XHR0cmlzdGF0ZSBcJiMzNDtsaXN0OnNldCBzZXQgc3VwcG9ydFwmIzM0O1xuIDE3MDpcdFx0ZGVwZW5kcyBvbiBJUF9TRVRcbiAxNzE6XHRcdGhlbHBcbiAxNzI6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgbGlzdDpzZXQgc2V0IHR5cGUgc3VwcG9ydC4gSW4gdGhpc1xuIDE3MzpcdFx0ICBraW5kIG9mIHNldCBvbmUgY2FuIHN0b3JlIHRoZSBuYW1lIG9mIG90aGVyIHNldHMgYW5kIGl0IGZvcm1zXG4gMTc0Olx0XHQgIGFuIG9yZGVyZWQgdW5pb24gb2YgdGhlIG1lbWJlciBzZXRzLlxuIDE3NTpcdFxuIDE3NjpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNzc6XHRcbiAxNzg6XHRjb25maWcgR0NPVl9QUk9GSUxFX0lQU0VUXG4gMTc5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBHQ09WIHByb2ZpbGluZyBmb3IgaXBzZXRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzOTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIElQIFNldCBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkgc2VlIGEgY29uZGl0aW9uYWwgaGVyZS4gVGhlIGJlaGF2aW9yIG9mIHdoYXRldmVyIEkmIzM5O20gbG9va2luZyBhdCBoaW5nZXMgb24gdGhlIHN0YXRlIG9mIGBJUF9TRVRgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgSVBfU0VUYCBpcyBkZWZpbmVkIGFuZCB3aGF0IGl0IGNvbnRyb2xzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiBMZXQmIzM5O3MgZGl2ZSBpbnRvIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdgLCBzdGFydGluZyByaWdodCBhdCB0aGUgdG9wLCBhcm91bmQgbGluZSAxLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGRlcGVuZGVuY3kgc3RydWN0dXJlLiBGcm9tIHRoZXJlLCBJIHNob3VsZCBiZSBhYmxlIHRvIGFzY2VydGFpbiB0aGUgY29uZGl0aW9ucyB3aGljaCBuZWNlc3NpdGF0ZSB1c2luZyBgSVBfU0VUYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudWNvbmZpZyBJUF9TRVRcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0lQIHNldCBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUlxuICAgNTpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgSVAgc2V0IHN1cHBvcnQgdG8gdGhlIGtlcm5lbC5cbiAgIDg6XHRcdCAgSW4gb3JkZXIgdG8gZGVmaW5lIGFuZCB1c2UgdGhlIHNldHMsIHlvdSBuZWVkIHRoZSB1c2Vyc3BhY2UgdXRpbGl0eVxuICAgOTpcdFx0ICBpcHNldCg4KS4gWW91IGNhbiB1c2UgdGhlIHNldHMgaW4gbmV0ZmlsdGVyIHZpYSB0aGUgXCYjMzQ7c2V0XCYjMzQ7IG1hdGNoXG4gIDEwOlx0XHQgIGFuZCBcJiMzNDtTRVRcJiMzNDsgdGFyZ2V0LlxuICAxMTpcdFxuICAxMjpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBJUF9TRVRcbiAgMTU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4MjAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIElQIFNldCBMaXN0IFNldCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcy4gVGhlIGNvZGUgcmVsaWVzIG9uIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAsIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O20gcHJldHR5IHN1cmUgdGhvc2UgYXJlIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0IGluIG1vc3QgY29uZmlncywgYnV0IGl0JiMzOTtzIGFsd2F5cyBzbWFydCB0byBkb3VibGUtY2hlY2ssIHNvIEkmIzM5O2xsIGluY2x1ZGUgdGhlbS4gQWN0dWFsbHksIHRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byBjaGVjayB0aGUgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gdGhlIEtjb25maWcgZmlsZXMgdG9vLCB0byBtYWtlIHN1cmUgSSBnZXQgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgaW5jbHVkZWQuIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAgYXJlIHByZXR0eSBzdGFuZGFyZCwgYnV0IGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBpbmNsdWRlIHRoZW0gYWxvbmdzaWRlIGBJUF9TRVRgIGFuZCBgSVBfU0VUX0xJU1RfU0VUYC4gWWVzLCBJJiMzOTtsbCBnbyB3aXRoIGBORVRGSUxURVJgLCBgSVBfU0VUYCwgYW5kIGBJUF9TRVRfTElTVF9TRVRgLgoKTm93LCBsZXQmIzM5O3MgZ28gYmFjayB0byB0aGF0IHBhdGNoLiBJIHNlZSBpdCYjMzk7cyBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY2AsIGFkZGluZyBhIGByZXR1cm4gMDtgIHdpdGhpbiB0aGUgYGlmIChuKWAgYmxvY2suIEJlZm9yZSB0aGUgcGF0Y2gsIGlmIGBuYCB3YXNuJiMzOTt0IE5VTEwsIHdlJiMzOTtkIGNhbGwgYGxpc3Rfc2V0X3JlcGxhY2VgLCBidXQgdGhlIGNvZGUgd291bGQgY29udGludWUgZXhlY3V0aW5nLiBJdCB3b3VsZCB0aGVuIGNhbGwgYHNldC0mZ3Q7ZWxlbWVudHMmIzQzOyYjNDM7O2AgYW5kIGZpbmFsbHkgYHJldHVybiAwO2AgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uIEFoLCB0aGlzIGxvb2tzIGxpa2UgYSBidWcgZml4LiBJdCBzZWVtcyBsaWtlIHRoZSBpbnRlbnRpb24gd2FzIHRvIHJldHVybiBlYXJseSBhZnRlciB0aGUgcmVwbGFjZW1lbnQuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBieSBjaGVja2luZyB0aGUgb3JpZ2luYWwgY29kZSBmb3IgYGxpc3Rfc2V0X3VhZGRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NTpcdFx0XHRuID0gTlVMTDtcbiAyOTY6XHRcbiAyOTc6XHRcdGUgPSBremFsbG9jKHNldC1cdTAwM2Vkc2l6ZSwgR0ZQX0FUT01JQyk7XG4gMjk4Olx0XHRpZiAoIWUpXG4gMjk5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDMwMDpcdFx0ZS1cdTAwM2VpZCA9IGQtXHUwMDNlaWQ7XG4gMzAxOlx0XHRlLVx1MDAzZXNldCA9IHNldDtcbiAzMDI6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmUtXHUwMDNlbGlzdCk7XG4gMzAzOlx0XHRsaXN0X3NldF9pbml0X2V4dGVuc2lvbnMoc2V0LCBleHQsIGUpO1xuIDMwNDpcdFx0aWYgKG4pIHtcbiAzMDU6XHRcdFx0bGlzdF9zZXRfcmVwbGFjZShzZXQsIGUsIG4pO1xuIDMwNjpcdFx0XHRyZXR1cm4gMDtcbiAzMDc6XHRcdH1cbiAzMDg6XHRcbiAzMDk6XHRcdGVsc2UgaWYgKG5leHQpXG4gMzEwOlx0XHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmUtXHUwMDNlbGlzdCwgXHUwMDI2bmV4dC1cdTAwM2VsaXN0KTtcbiAzMTE6XHRcdGVsc2UgaWYgKHByZXYpXG4gMzEyOlx0XHRcdGxpc3RfYWRkX3JjdShcdTAwMjZlLVx1MDAzZWxpc3QsIFx1MDAyNnByZXYtXHUwMDNlbGlzdCk7XG4gMzEzOlx0XHRlbHNlXG4gMzE0Olx0XHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmUtXHUwMDNlbGlzdCwgXHUwMDI2bWFwLVx1MDAzZW1lbWJlcnMpO1xuIDMxNTpcdFx0c2V0LVx1MDAzZWVsZW1lbnRzJiM0MzsmIzQzOztcbiAzMTY6XHRcbiAzMTc6XHRcdHJldHVybiAwO1xuIDMxODpcdH1cbiAzMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwMjAKCQkJCQkJCW91dHB1dDogMTIwCgkJCQkJCQl0aG91Z2h0czogMzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBpcHNldCBQYXRjaCoqCgpPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBQcmUtcGF0Y2gsIHRoZSBjb2RlIGxvb2tlZCBsaWtlIHRoaXM6CgpgYGBjCglpZiAobikKCQlsaXN0X3NldF9yZXBsYWNlKHNldCwgZSwgbik7CgllbHNlIGlmIChuZXh0KQoJCWxpc3RfYWRkX3RhaWxfcmN1KCZhbXA7ZS0mZ3Q7bGlzdCwgJmFtcDtuZXh0LSZndDtsaXN0KTsKCWVsc2UgaWYgKHByZXYpCgkJbGlzdF9hZGRfcmN1KCZhbXA7ZS0mZ3Q7bGlzdCwgJmFtcDtwcmV2LSZndDtsaXN0KTsKCWVsc2UKCQlsaXN0X2FkZF90YWlsX3JjdSgmYW1wO2UtJmd0O2xpc3QsICZhbXA7bWFwLSZndDttZW1iZXJzKTsKCXNldC0mZ3Q7ZWxlbWVudHMmIzQzOyYjNDM7OwoKCXJldHVybiAwOwpgYGAKClJpZ2h0LCBzbyB0aGUgbG9naWMgd2FzIHRoYXQgaWYgYG5gIHdhcyBub24temVybywgaXQgd291bGQgY2FsbCBgbGlzdF9zZXRfcmVwbGFjZWAuIFRoZSBwcm9ibGVtIGlzLCBgbGlzdF9zZXRfcmVwbGFjZWAgc2ltcGx5ICpyZXBsYWNlcyogYW4gZXhpc3RpbmcgZWxlbWVudDsgaXQgZG9lc24mIzM5O3QgYWN0dWFsbHkgKmFkZCogb25lLiBCdXQgdGhlIGNvZGUgdGhlbiBibGluZGx5IGluY3JlbWVudHMgYHNldC0mZ3Q7ZWxlbWVudHNgLCBsZWFkaW5nIHRvIGEgY291bnQgbWlzbWF0Y2guIFRoZSBwYXRjaCBjbGV2ZXJseSBpbnNlcnRzIGEgYHJldHVybiAwO2AgYWZ0ZXIgYGxpc3Rfc2V0X3JlcGxhY2VgLiBUaGlzIHByZXZlbnRzIHRoZSBzdXBlcmZsdW91cyBpbmNyZW1lbnQuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0IGZpeGVzIGEgYnVnIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IHN1YnN5c3RlbS4KCkdpdmVuIHRoYXQgYGlwc2V0YCBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHJvYnVzdG5lc3MuIFRoZSBjcml0aWNhbCBmdW5jdGlvbnMgaGVyZSBhcmUgYGxpc3Rfc2V0X3VhZGRgIGFuZCBgaXBfc2V0X3VhZGRgLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkga25vdyBJJiMzOTtsbCBuZWVkIGBORVRGSUxURVJgLCBgSVBfU0VUYCwgYW5kIGBJUF9TRVRfTElTVF9TRVRgLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2s6IGBJUF9TRVRgIHNlbGVjdHMgYE5FVEZJTFRFUl9ORVRMSU5LYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBORVRGSUxURVJgLiBQZXJmZWN0LCBzbyB0aG9zZSBjb25maWd1cmF0aW9ucyB3aWxsIGJlIGluY2x1ZGVkLgoKQWxyaWdodCwgSSYjMzk7bGwgYmUgdXNpbmcgdGhlIHNldC1yZXN1bHRzIHRvb2wgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9MSVNUX1NFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xpc3Rfc2V0X3VhZGQmIzM0OywKICAgICYjMzQ7aXBfc2V0X3VhZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIG5ldGZpbHRlciBpcHNldCBzdWJzeXN0ZW0gd2hlcmUgcmVwbGFjaW5nIGFuIGVsZW1lbnQgaW4gYSBsaXN0OnNldCBpbmNvcnJlY3RseSBpbmNyZW1lbnRlZCB0aGUgZWxlbWVudCBjb3VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlIChhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rKSwgc28gaXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O0lQX1NFVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfTElTVF9TRVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsaXN0X3NldF91YWRkJiMzNDssCiAgICAmIzM0O2lwX3NldF91YWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBuZXRmaWx0ZXIgaXBzZXQgc3Vic3lzdGVtIHdoZXJlIHJlcGxhY2luZyBhbiBlbGVtZW50IGluIGEgbGlzdDpzZXQgaW5jb3JyZWN0bHkgaW5jcmVtZW50ZWQgdGhlIGVsZW1lbnQgY291bnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSAoYWNjZXNzaWJsZSB2aWEgbmV0bGluayksIHNvIGl0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowMzozMS4wMjc0OTk3ODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE4MjkxMDIyNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiSVBfU0VUXCIsXG4gICAgXCJJUF9TRVRfTElTVF9TRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsaXN0X3NldF91YWRkXCIsXG4gICAgXCJpcF9zZXRfdWFkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBuZXRmaWx0ZXIgaXBzZXQgc3Vic3lzdGVtIHdoZXJlIHJlcGxhY2luZyBhbiBlbGVtZW50IGluIGEgbGlzdDpzZXQgaW5jb3JyZWN0bHkgaW5jcmVtZW50ZWQgdGhlIGVsZW1lbnQgY291bnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSAoYWNjZXNzaWJsZSB2aWEgbmV0bGluayksIHNvIGl0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjAzOjMxLjAyNzUwNjQ2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5ODA4NDgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNiY2Y1MmY3ZDZlZTk0ODNiNWUzOGVhODA4YmM3YTc2OTAxMDlhN2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAxNjowMzoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xcbmluZGV4IGNhM2VmOTQ3OWU4MzguLjU2NjI2ZjQ5NDNhOTAgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcXG5AQCAtMzAxLDggKzMwMSwxMSBAQCBsaXN0X3NldF91YWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIFxcdGUtXFx1MDAzZXNldCA9IHNldDtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmUtXFx1MDAzZWxpc3QpO1xcbiBcXHRsaXN0X3NldF9pbml0X2V4dGVuc2lvbnMoc2V0LCBleHQsIGUpO1xcbi1cXHRpZiAobilcXG4rXFx0aWYgKG4pIHtcXG4gXFx0XFx0bGlzdF9zZXRfcmVwbGFjZShzZXQsIGUsIG4pO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4gXFx0ZWxzZSBpZiAobmV4dClcXG4gXFx0XFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNmUtXFx1MDAzZWxpc3QsIFxcdTAwMjZuZXh0LVxcdTAwM2VsaXN0KTtcXG4gXFx0ZWxzZSBpZiAocHJldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MDM6MzIuMjI2NjI3ODk5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQxNzA5MTg4MTc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0xJU1RfU0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibGlzdF9zZXRfdWFkZFwiLFxuICAgIFwiaXBfc2V0X3VhZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IHN1YnN5c3RlbSB3aGVyZSByZXBsYWNpbmcgYW4gZWxlbWVudCBpbiBhIGxpc3Q6c2V0IGluY29ycmVjdGx5IGluY3JlbWVudGVkIHRoZSBlbGVtZW50IGNvdW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgKGFjY2Vzc2libGUgdmlhIG5ldGxpbmspLCBzbyBpdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYmNmNTJmN2Q2ZWU5NDgzYjVlMzhlYTgwOGJjN2E3NjkwMTA5YTdmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAxNjowMzoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXG5pbmRleCBjYTNlZjk0NzllODM4Li41NjYyNmY0OTQzYTkwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xuQEAgLTMwMSw4ICszMDEsMTEgQEAgbGlzdF9zZXRfdWFkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0ZS1cdTAwM2VzZXQgPSBzZXQ7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlLVx1MDAzZWxpc3QpO1xuIFx0bGlzdF9zZXRfaW5pdF9leHRlbnNpb25zKHNldCwgZXh0LCBlKTtcbi1cdGlmIChuKVxuK1x0aWYgKG4pIHtcbiBcdFx0bGlzdF9zZXRfcmVwbGFjZShzZXQsIGUsIG4pO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbiBcdGVsc2UgaWYgKG5leHQpXG4gXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmUtXHUwMDNlbGlzdCwgXHUwMDI2bmV4dC1cdTAwM2VsaXN0KTtcbiBcdGVsc2UgaWYgKHByZXYpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowMzozMi4yMjY2Mjk1MzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjkxODE5NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipBbmFseXppbmcgYSBOZXRmaWx0ZXIvaXBzZXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBhIGNoYW5nZSB0byBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g6IGl0J3MgYWRkaW5nIGEgYHJldHVybiAwO2Agc3RhdGVtZW50IHdpdGhpbiBhbiBgaWYgKG4pYCBibG9jayBpbnNpZGUgdGhlIGBsaXN0X3NldF91YWRkYCBmdW5jdGlvbi4gIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgZGVlbWVkIG5lY2Vzc2FyeS4gQWRkaW5nIGEgc2ltcGxlIHJldHVybiBsaWtlIHRoYXQgY2FuIGhhdmUgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGZvciB0aGUgcHJvZ3JhbSBmbG93LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0LlxuXG5GaXJzdCwgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJvbGVzIG9mIGBsaXN0X3NldF91YWRkYCBhbmQgYGxpc3Rfc2V0X3JlcGxhY2VgLiBJJ2xsIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGV5IGZ1bmN0aW9uIHdpdGhpbiB0aGUgYGlwc2V0YCBmcmFtZXdvcmsuIEkga25vdyB0aGV5J3JlIHByb2JhYmx5IGhhbmRsaW5nIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBhZGRpbmcgYW5kL29yIHJlcGxhY2luZyBlbGVtZW50cyB3aXRoaW4gYSBsaXN0LWJhc2VkIHNldC4gVGhlIGBpZiAobilgIGNvbmRpdGlvbiBpcyB0aGUga2V5IGhlcmUuIFRoZSBhZGRlZCBgcmV0dXJuIDA7YCBpbXBsaWVzIHRoYXQgaWYgYG5gIGlzIHRydWUsIHdoYXRldmVyIGxvZ2ljIGlzIGJlaW5nIGV4ZWN1dGVkLCBpdCBzaG91bGQgZXhpdCBpbW1lZGlhdGVseSwgcmV0dXJuaW5nIGEgc3VjY2VzcyBzdGF0dXMuIFRoYXQncyBhIGNsYXNzaWMgc2hvcnRjdXQuXG5cbkknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgd2hhdCBgbmAgcmVwcmVzZW50cy4gV2hhdCBjb25kaXRpb24gaXMgYmVpbmcgY2hlY2tlZD8gV2hhdCB3b3VsZCBoYXBwZW4gaWYgdGhlIGByZXR1cm4gMDtgIHdhc24ndCBhZGRlZCBhbmQgdGhlIGZ1bmN0aW9uIGNvbnRpbnVlZCBleGVjdXRpbmc/IElzIHRoZSBleGlzdGluZyBsb2dpYyBmdW5kYW1lbnRhbGx5IGZsYXdlZCBvciBpcyB0aGUgcGF0Y2ggYWRkaW5nIGFuIG9wdGltaXphdGlvbiBvciBoYW5kbGluZyBhIG5ldyBlZGdlIGNhc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYXJvdW5kIGBuYCBpcyBjcnVjaWFsLiBJcyBpdCByZWxhdGVkIHRvIHNvbWUgdHlwZSBvZiBlcnJvciBjb25kaXRpb24sIGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24sIGEgc3BlY2lmaWMgaW50ZXJuYWwgc3RhdGUsIG9yIHNvbWUgb3RoZXIga2V5IHZhcmlhYmxlPyBXaGF0IGRvZXMgdGhlIGNvZGUgcHJpb3IgdG8gdGhlIGBpZmAgbG9vayBsaWtlPyBXaGF0IGRvZXMgaXQgZG8gYWZ0ZXI/IEkgd2lsbCBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhlIHJldHVybi5cblxuVWx0aW1hdGVseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGlzIHBhdGNoIGlzIGNvcnJlY3QsIHJvYnVzdCwgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmZvcmVzZWVuIGlzc3VlcyBvciBzdWJ0bGUgcmVncmVzc2lvbnMuIEkgd2lsbCByZWFkIHRoZSBlbnRpcmUgYGxpc3Rfc2V0X3VhZGRgIGFuZCBgbGlzdF9zZXRfcmVwbGFjZWAgZnVuY3Rpb25zIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowMzozNy41MTg0NTIwMDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNjE0OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGlzdF9zZXRfdWFkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MjM1PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjIzNjpsaXN0X3NldF91YWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0yMzctXFx0ICAgICAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBzZXRfdmFyaWFudCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNTYxLVxcdC5hZHRcXHQ9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjU2MjpcXHRcXHRbSVBTRVRfQUREXSA9IGxpc3Rfc2V0X3VhZGQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NjMtXFx0XFx0W0lQU0VUX0RFTF0gPSBsaXN0X3NldF91ZGVsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowMzozNy41NjU1MjUyNDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTMwNTcwNzk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyB0aGUgYGxpc3Rfc2V0X3VhZGRgIGNvbnRleHQ6XG5cbioqQW5hbHl6aW5nIGBsaXN0X3NldF91YWRkYCBDb250ZXh0KipcblxuQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBlc3RhYmxpc2ggdGhlIGVudmlyb25tZW50LiBJJ20gbG9va2luZyBhdCBgbGlzdF9zZXRfdWFkZGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIGl0IGZpdHMgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSXMgdGhpcyBhIGN1c3RvbSBmdW5jdGlvbiwgb3IgYSBzdGFuZGFyZCBsaWJyYXJ5IGNhbGw/IFVuZGVyc3RhbmRpbmcgdGhlIHByb2plY3QncyBzdHJ1Y3R1cmUgd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGluc2lnaHRzIGFzIEkgbW92ZSBmb3J3YXJkLiBXaGF0IGFyZSB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIG9yIG1vZHVsZXM/IFdoYXQga2luZCBvZiBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHVzZWQgaW4gdGhlIHZpY2luaXR5PyBJcyB0aGlzIHBhcnQgb2YgYSBjb3JlIGFsZ29yaXRobSBvciBhIHV0aWxpdHkgZnVuY3Rpb24/IERldGVybWluaW5nIHRoZSBmdW5jdGlvbidzIHB1cnBvc2Ugd2l0aGluIHRoaXMgbGFuZHNjYXBlIGdpdmVzIG1lIGEgc29saWQgYmFzZSB0byBjb21wcmVoZW5kLiBJdCdzIG9mdGVuIGhlbHBmdWwgdG8gdGhpbmsgdGhyb3VnaCB3aGF0IHRoZSBuYW1lIGBsaXN0X3NldF91YWRkYCBzdWdnZXN0cy4gXCJMaXN0LFwiIFwic2V0LFwiIGFuZCBcInVhZGRcIiDigJMgYXJlIHRoZXNlIG9wZXJhdGlvbnMgb24gdGhlIGxpc3QsIG9yIHRoZSBzZXQ/IElzIHRoZSBcInVcIiBsaWtlbHkgZm9yIFwidW5pcXVlXCIgb3IgXCJ1bmlvblwiPyBUaGlzIGdpdmVzIGEgZmlyc3QgZ3Vlc3Mgb24gd2hhdCB0byBleHBlY3QuIEZyb20gdGhlcmUsIEknbGwgZXhhbWluZSB0aGUgaW1tZWRpYXRlIGNvZGUgYXJvdW5kIGl0LiBUaGF0IGlzLCB3aGF0IHBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0byBpdD8gV2hhdCBpcyBpdCBkb2luZyB3aXRoIHRob3NlIHBhcmFtZXRlcnM/IEknbGwgbG9vayBmb3IgaW5wdXQgYW5kIG91dHB1dCwgYW5kIGVzcGVjaWFsbHkgd2hhdCBkYXRhIHR5cGVzIGFyZSBpbnZvbHZlZC4gV2hhdCBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IsIGJvdGggb24gc3VjY2VzcyBhbmQgcG90ZW50aWFsIGZhaWx1cmUgY2FzZXM/IEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgZWZmaWNpZW5jeSBjb25zaWRlcmF0aW9ucy4gQXJlIHRoZXJlIGFueSBsb29wcywgb3IgbmVzdGVkIGxvb3BzLCB0aGF0IG1pZ2h0IGluZGljYXRlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBBcmUgdGhlcmUgb3B0aW1pemF0aW9ucyB0aGF0IEkgY2FuIHN1Z2dlc3QgbGF0ZXI/IFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gKndoYXQqIGl0J3MgZG9pbmcsICpob3cqIGl0J3MgZG9pbmcgaXQsIGFuZCAqd2h5KiBpdCdzIGRlc2lnbmVkIHRoYXQgd2F5LCBiZWZvcmUgSSBjYW4gcHJvdmlkZSBhIHRydWx5IGluc2lnaHRmdWwgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowMzo1Ni44NzEyMzYzNTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4MDpcXHRcXHRcXHRuID0gbGlzdF9lbXB0eShcXHUwMDI2bWFwLVxcdTAwM2VtZW1iZXJzKSA/IE5VTEwgOlxcbiAyODE6XFx0XFx0XFx0ICAgIGxpc3RfbGFzdF9lbnRyeShcXHUwMDI2bWFwLVxcdTAwM2VtZW1iZXJzLCBzdHJ1Y3Qgc2V0X2VsZW0sIGxpc3QpO1xcbiAyODI6XFx0XFx0fSBlbHNlIGlmIChkLVxcdTAwM2ViZWZvcmUgXFx1MDAzZSAwKSB7XFxuIDI4MzpcXHRcXHRcXHQvKiBJbnNlcnQgYWZ0ZXIgbmV4dCBlbGVtZW50ICovXFxuIDI4NDpcXHRcXHRcXHRpZiAoIWxpc3RfaXNfbGFzdChcXHUwMDI2bmV4dC1cXHUwMDNlbGlzdCwgXFx1MDAyNm1hcC1cXHUwMDNlbWVtYmVycykpXFxuIDI4NTpcXHRcXHRcXHRcXHRuID0gbGlzdF9uZXh0X2VudHJ5KG5leHQsIGxpc3QpO1xcbiAyODY6XFx0XFx0fSBlbHNlIHtcXG4gMjg3OlxcdFxcdFxcdC8qIEluc2VydCBiZWZvcmUgcHJldiBlbGVtZW50ICovXFxuIDI4ODpcXHRcXHRcXHRpZiAocHJldi1cXHUwMDNlbGlzdC5wcmV2ICE9IFxcdTAwMjZtYXAtXFx1MDAzZW1lbWJlcnMpXFxuIDI4OTpcXHRcXHRcXHRcXHRuID0gbGlzdF9wcmV2X2VudHJ5KHByZXYsIGxpc3QpO1xcbiAyOTA6XFx0XFx0fVxcbiAyOTE6XFx0XFx0LyogQ2FuIHdlIHJlcGxhY2UgYSB0aW1lZCBvdXQgZW50cnk/ICovXFxuIDI5MjpcXHRcXHRpZiAobiBcXHUwMDI2XFx1MDAyNlxcbiAyOTM6XFx0XFx0ICAgICEoU0VUX1dJVEhfVElNRU9VVChzZXQpIFxcdTAwMjZcXHUwMDI2XFxuIDI5NDpcXHRcXHQgICAgICBpcF9zZXRfdGltZW91dF9leHBpcmVkKGV4dF90aW1lb3V0KG4sIHNldCkpKSlcXG4gMjk1OlxcdFxcdFxcdG4gPSBOVUxMO1xcbiAyOTY6XFx0XFxuIDI5NzpcXHRcXHRlID0ga3phbGxvYyhzZXQtXFx1MDAzZWRzaXplLCBHRlBfQVRPTUlDKTtcXG4gMjk4OlxcdFxcdGlmICghZSlcXG4gMjk5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzMDA6XFx0XFx0ZS1cXHUwMDNlaWQgPSBkLVxcdTAwM2VpZDtcXG4gMzAxOlxcdFxcdGUtXFx1MDAzZXNldCA9IHNldDtcXG4gMzAyOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlLVxcdTAwM2VsaXN0KTtcXG4gMzAzOlxcdFxcdGxpc3Rfc2V0X2luaXRfZXh0ZW5zaW9ucyhzZXQsIGV4dCwgZSk7XFxuIDMwNDpcXHRcXHRpZiAobikge1xcbiAzMDU6XFx0XFx0XFx0bGlzdF9zZXRfcmVwbGFjZShzZXQsIGUsIG4pO1xcbiAzMDY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDMwNzpcXHRcXHR9XFxuIDMwODpcXHRcXG4gMzA5OlxcdFxcdGVsc2UgaWYgKG5leHQpXFxuIDMxMDpcXHRcXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2ZS1cXHUwMDNlbGlzdCwgXFx1MDAyNm5leHQtXFx1MDAzZWxpc3QpO1xcbiAzMTE6XFx0XFx0ZWxzZSBpZiAocHJldilcXG4gMzEyOlxcdFxcdFxcdGxpc3RfYWRkX3JjdShcXHUwMDI2ZS1cXHUwMDNlbGlzdCwgXFx1MDAyNnByZXYtXFx1MDAzZWxpc3QpO1xcbiAzMTM6XFx0XFx0ZWxzZVxcbiAzMTQ6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNmUtXFx1MDAzZWxpc3QsIFxcdTAwMjZtYXAtXFx1MDAzZW1lbWJlcnMpO1xcbiAzMTU6XFx0XFx0c2V0LVxcdTAwM2VlbGVtZW50cysrO1xcbiAzMTY6XFx0XFxuIDMxNzpcXHRcXHRyZXR1cm4gMDtcXG4gMzE4OlxcdH1cXG4gMzE5OlxcdFxcbiAzMjA6XFx0c3RhdGljIGludFxcbiAzMjE6XFx0bGlzdF9zZXRfdWRlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbiAzMjI6XFx0XFx0ICAgICAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcXG4gMzIzOlxcdHtcXG4gMzI0OlxcdFxcdHN0cnVjdCBsaXN0X3NldCAqbWFwID0gc2V0LVxcdTAwM2VkYXRhO1xcbiAzMjU6XFx0XFx0c3RydWN0IHNldF9hZHRfZWxlbSAqZCA9IHZhbHVlO1xcbiAzMjY6XFx0XFx0c3RydWN0IHNldF9lbGVtICplLCAqbiwgKm5leHQsICpwcmV2ID0gTlVMTDtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG4sIFxcdTAwMjZtYXAtXFx1MDAzZW1lbWJlcnMsIGxpc3QpIHtcXG4gMzI5OlxcdFxcdFxcdGlmIChTRVRfV0lUSF9USU1FT1VUKHNldCkgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MDM6NTYuODcxMzI2MTgyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTcyODU4ODA3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbDpcblxuKipGaXhpbmcgdGhlIGlwX3NldF9saXN0X3NldCBJbmNyZW1lbnQgQnVnKipcblxuQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQsIGJ1ZyBpbiB0aGUgaXBzZXQgY29kZS4gSXQgc2VlbXMgdGhhdCBgc2V0LVx1MDAzZWVsZW1lbnRzKytgIHdhcyBiZWluZyBpbmNyZW1lbnRlZCBldmVuIHdoZW4gdGhlIGZ1bmN0aW9uIGBsaXN0X3NldF9yZXBsYWNlYCB3YXMgY2FsbGVkLCB3aGljaCwgYXMgdGhlIG5hbWUgaW1wbGllcywgKnJlcGxhY2VzKiBhbiBleGlzdGluZyBlbGVtZW50IGFuZCBzaG91bGRuJ3QgYmUgdHJlYXRlZCBhcyBhbiBhZGRpdGlvbi4gVGhhdCdzIGEgY2xhc3NpYyBvZmYtYnktb25lIGVycm9yIGx1cmtpbmcgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNgLCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgbmVlZHMgdG8gYmUgYWRkcmVzc2VkLiBJdCdzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgZGlzdGluY3Rpb24sIGJlY2F1c2UgdGhhdCBjb3VudGVyIGNvdWxkIGJlY29tZSB1bnJlbGlhYmxlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGluY29ycmVjdCBiZWhhdmlvciBkb3duIHRoZSBsaW5lLlxuXG5CZWZvcmUgSSBnbyB0b28gZmFyLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gSSBuZWVkIHRvIGtub3cgaG93IGBpcF9zZXRfbGlzdF9zZXQuY2AgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBXaGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhZmZlY3QgaXRzIGluY2x1c2lvbj8gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEJlc3QgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCAqaG93KiB0aGlzIHBpZWNlIG9mIGNvZGUgaXMgYnJvdWdodCBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLCB0byBlbnN1cmUgdGhhdCB0aGUgZml4IGlzIGFwcGxpZWQgaW4gdGhlIHJpZ2h0IGNvbnRleHRzIGFuZCB0aGF0IHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb24gZm9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowNTozNC4xNTcyMTAyNTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcwNjMwNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfc2V0X2xpc3Rfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9NYWtlZmlsZT0yOD1vYmotJChDT05GSUdfSVBfU0VUX0hBU0hfTkVUUE9SVE5FVCkgKz0gaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlLTMwLSMgbGlzdCB0eXBlc1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0lQX1NFVF9MSVNUX1NFVCkgKz0gaXBfc2V0X2xpc3Rfc2V0Lm9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L01ha2VmaWxlLTMyLWlmZGVmIENPTkZJR19HQ09WX1BST0ZJTEVfSVBTRVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MDU6MzQuMjE0Mjc4NzgzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNjE5MTI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSVAgU2V0IENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSBzZWUgdGhpcyBgQ09ORklHX0lQX1NFVF9MSVNUX1NFVGAgZmxhZywgYW5kIGl0J3MgcGluZ2luZyBzb21ldGhpbmcgaW4gbXkgbWVtb3J5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzLCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSB0aWVkIHRvIGl0LiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhpcyBpbmZvcm1hdGlvbiBpcyBnb2luZyB0byBiZSBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgZnVuZGFtZW50YWwgSVAgc2V0IGNvbmZpZ3VyYXRpb25zIGxpdmUsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gaGVhZCB0byB1bmRlcnN0YW5kIHdoYXQgZW5hYmxpbmcgdGhhdCBwYXJ0aWN1bGFyIG9wdGlvbiB3aWxsIGludm9sdmUuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY5MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjA1OjM4LjAzMDQ3MjYyMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1OTk1MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NFVF9MSVNUX1NFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE1OD1jb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0VcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2ODpjb25maWcgSVBfU0VUX0xJU1RfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2OS1cXHR0cmlzdGF0ZSBcXFwibGlzdDpzZXQgc2V0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjA1OjM4LjA3NTA3OTgzOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTcwNjgxMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgSVBfU0VUX0xJU1RfU0VUIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJ1c2luZXNzLiBNeSBmaXJzdCBpbnN0aW5jdCBoZXJlIGlzIHRvIGp1bXAgZGlyZWN0bHkgaW50byB0aGUgS2NvbmZpZyBmb3IgYElQX1NFVF9MSVNUX1NFVGAuIEl0J3MgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBJUCBzZXQgdHlwZSBpcyBjb250cm9sbGVkIGF0IGNvbXBpbGUgdGltZS4gSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGl0cyBjb25maWd1cmFiaWxpdHkgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIg4oCTIGJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgc3BlY2lmaWMgdXNlIGNhc2VzIG9yIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBwb2ludHMuIFRoZSBLY29uZmlnIGlzIHRoZSBibHVlcHJpbnQsIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgb3B0aW9ucy4gVGltZSB0byBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjA1OjQ0LjA0NTc2MzQ1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdFxcdGRlcGVuZHMgb24gSVBfU0VUXFxuIDE2MTpcXHRcXHRoZWxwXFxuIDE2MjpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGhhc2g6bmV0LGlmYWNlIHNldCB0eXBlIHN1cHBvcnQsIGJ5IHdoaWNoXFxuIDE2MzpcXHRcXHQgIG9uZSBjYW4gc3RvcmUgSVB2NC9JUHY2IG5ldHdvcmsgYWRkcmVzcy9wcmVmaXggYW5kXFxuIDE2NDpcXHRcXHQgIGludGVyZmFjZSBuYW1lIHBhaXJzIGFzIGVsZW1lbnRzIGluIGEgc2V0LlxcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNjc6XFx0XFxuIDE2ODpcXHRjb25maWcgSVBfU0VUX0xJU1RfU0VUXFxuIDE2OTpcXHRcXHR0cmlzdGF0ZSBcXFwibGlzdDpzZXQgc2V0IHN1cHBvcnRcXFwiXFxuIDE3MDpcXHRcXHRkZXBlbmRzIG9uIElQX1NFVFxcbiAxNzE6XFx0XFx0aGVscFxcbiAxNzI6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBsaXN0OnNldCBzZXQgdHlwZSBzdXBwb3J0LiBJbiB0aGlzXFxuIDE3MzpcXHRcXHQgIGtpbmQgb2Ygc2V0IG9uZSBjYW4gc3RvcmUgdGhlIG5hbWUgb2Ygb3RoZXIgc2V0cyBhbmQgaXQgZm9ybXNcXG4gMTc0OlxcdFxcdCAgYW4gb3JkZXJlZCB1bmlvbiBvZiB0aGUgbWVtYmVyIHNldHMuXFxuIDE3NTpcXHRcXG4gMTc2OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE3NzpcXHRcXG4gMTc4OlxcdGNvbmZpZyBHQ09WX1BST0ZJTEVfSVBTRVRcXG4gMTc5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBHQ09WIHByb2ZpbGluZyBmb3IgaXBzZXRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjA1OjQ0LjA0NTg2NDQ0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTUzNjA5OTM2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSBjb25zaWRlcmF0aW9uczpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIGhpbmdlcyBvbiB0aGlzIGBJUF9TRVRgLiBUaGF0J3MgdGhlIGtleSB2YXJpYWJsZSBoZXJlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiAqaXQncyBhbGwgYWJvdXQgaG93IGBJUF9TRVRgIGlzIGJlaW5nIHVzZWQsIGFuZCB3aGF0J3MgY29ubmVjdGVkIHRvIGl0Ki4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSdtIHRoaW5raW5nLCBcIndoYXQgb3RoZXIgY29tcG9uZW50cywgc3lzdGVtcywgb3IgcnVsZXMgcmVseSBvbiB0aGUgc3RhdGUgb3IgY29udGVudHMgb2YgYElQX1NFVGA/XCIuIElzIGl0IGRpcmVjdGx5IGZlZWRpbmcgaW50byBmaXJld2FsbCBydWxlcz8gSXMgaXQgbGlua2VkIHRvIGEgZHluYW1pYyByb3V0aW5nIHByb3RvY29sPyBBcmUgdGhlcmUgbW9uaXRvcmluZyB0b29scyB0aGF0IGFyZSBrZXllZCB0byBjaGFuZ2VzIGluIHRoYXQgc2V0PyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIGFueSBwb3RlbnRpYWwgcmlwcGxlIGVmZmVjdHMgaWYgYElQX1NFVGAgYmVoYXZlcyB1bmV4cGVjdGVkbHkuIFNvLCBJJ2xsIGdvIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmlsZXMsIHN5c3RlbSBsb2dzLCBhbmQgbWF5YmUgZXZlbiBsb29rIGZvciBhbnkgbW9uaXRvcmluZyBkYXNoYm9hcmRzIHRoYXQgcmVmZXJlbmNlIHRoYXQgaWRlbnRpZmllci4gTGV0J3MgZGlnIGluIGFuZCB0cmFjayBkb3duIGV2ZXJ5IGRpcmVjdCBhbmQgaW5kaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCBgSVBfU0VUYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU1MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MDc6MzkuNDA2ODYwOTY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDExNzQ3NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjA3OjM5LjQ1MDk4MzYwNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODU5MTYxMzg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgRGl2ZSBmb3IgSVBfU0VUIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYElQX1NFVGAuIFRoZSBmaXJzdCBwbGFjZSBJJ20gZ29pbmcgdG8gbG9vayBpcyB0aGUgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgdHlwZXMgb2Yga2VybmVsIGZlYXR1cmVzIGFyZSBkZWZpbmVkLCB3aXRoIGFsbCB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGFzc29jaWF0ZWQgc2V0dGluZ3MuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgYElQX1NFVGAgc3ltYm9sIGRlZmluZWQgaGVyZSwgYWxvbmcgd2l0aCBwb3RlbnRpYWxseSBvdGhlciwgbW9yZSBncmFudWxhciBvcHRpb25zIHRoYXQgY29udHJvbCBkaWZmZXJlbnQgYXNwZWN0cyBvZiBgaXBzZXRgIGZ1bmN0aW9uYWxpdHksIGxpa2Ugc3BlY2lmaWMgc2V0IHR5cGVzIG9yIG1hdGNoaW5nIHJ1bGVzLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYW55IGRlcGVuZGVuY2llcyBsaXN0ZWQgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBvciBjb25maWd1cmVkIGZvciBgSVBfU0VUYCB0byB3b3JrIGNvcnJlY3RseS4gTWlnaHQgZXZlbiBmaW5kIGEgaGVscGZ1bCBkZXNjcmlwdGlvbiB0aGF0IGNsYXJpZmllcyB0aGUgcHVycG9zZSBhbmQgaW50ZW5kZWQgdXNhZ2UuIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uICpzaG91bGQqIGJlIGxpbmtlZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTgzOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjA4OjU4LjA0MjU5OTkxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MDI1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjI6bWVudWNvbmZpZyBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSVAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9MTQ9aWYgSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjpjb25maWcgSVBfU0VUX01BWFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNy1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIElQIHNldHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjI4OmNvbmZpZyBJUF9TRVRfQklUTUFQX0lQXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJiaXRtYXA6aXAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzYtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjM3OmNvbmZpZyBJUF9TRVRfQklUTUFQX0lQTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJiaXRtYXA6aXAsbWFjIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ1LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo0Njpjb25maWcgSVBfU0VUX0JJVE1BUF9QT1JUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ3LVxcdHRyaXN0YXRlIFxcXCJiaXRtYXA6cG9ydCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01NC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NTU6Y29uZmlnIElQX1NFVF9IQVNIX0lQXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU2LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo2NTpjb25maWcgSVBfU0VUX0hBU0hfSVBNQVJLXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY2LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLG1hcmsgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzMtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjc0OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzUtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6ODM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVElQXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTg0LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLHBvcnQsaXAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTItXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjkzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTAyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMDM6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwNC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxtYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTExLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMTI6Y29uZmlnIElQX1NFVF9IQVNIX01BQ1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcImhhc2g6bWFjIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyMC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTIxOmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyMi1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQscG9ydCxuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTI5LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzA6Y29uZmlnIElQX1NFVF9IQVNIX05FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMzEtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTM5OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQwLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNDg6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQ5LVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTU4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRJRkFDRVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTktXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LGlmYWNlIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTY4OmNvbmZpZyBJUF9TRVRfTElTVF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY5LVxcdHRyaXN0YXRlIFxcXCJsaXN0OnNldCBzZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MDg6NTguMDg4MDA4Mjc0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1MjQ4MDA3NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgdGhlIHByb3ZpZGVkIHRleHQgYW5kIHRoaW5raW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9uczpcblxuKipBbmFseXppbmcgdGhlIElQX1NFVCBLY29uZmlnKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBJUF9TRVRgIGZ1bmN0aW9uYWxpdHkgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gVGhpcyB0ZWxscyBtZSBhYm91dCBkZXBlbmRlbmNpZXMsIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHRvIHRoZSBlbmQtdXNlciAob3IsIG1vcmUgaW1wb3J0YW50bHksICptZSogd2hlbiBJJ20gY29uZmlndXJpbmcgYSBjdXN0b20ga2VybmVsKSwgYW5kIGFueSBwb3RlbnRpYWwgbGltaXRhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBzdHJ1Y3R1cmUgLSBpcyBpdCBhIHNpbXBsZSBib29sZWFuLCBhIHRyaXN0YXRlLCBvciBtb3JlIGNvbXBsZXg/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXM/IEknbGwgYmUgbG9va2luZyBmb3IgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIGxvb2tpbmcgZm9yIGFueSBwcmUtcmVxdWlzaXRlcyBmb3IgYElQX1NFVGAgdG8gZXZlbiBiZSBjb25zaWRlcmVkLiBBcmUgdGhlcmUgYW55IGRlZmF1bHQgdmFsdWVzIHRoYXQgbWlnaHQgaW1wYWN0IHRoZSBvdmVyYWxsIGJ1aWxkPyBBcmUgdGhlcmUgKmFueSogY29uZmxpY3RzIHdpdGggb3RoZXIgZmVhdHVyZXMgdGhhdCBJIHNob3VsZCBrbm93IGFib3V0P1xuXG5PbmNlIEkgZ3Jhc3AgdGhlIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtLCBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlc2NyaXB0aW9ucyBhbmQgaGVscCB0ZXh0LiBUaGVzZSBhcmUgY3J1Y2lhbC4gVGhpcyBwYXJ0IHVzdWFsbHkgdGVsbHMgdGhlICd3aHknIG9mIHRoZSBmdW5jdGlvbmFsaXR5LCBhbmQgd2hhdCB0aGUgdXNlciBpcyAqaW50ZW5kZWQqIHRvIGRvIHdpdGggaXQuIFRoaXMgc2VjdGlvbiBpcyB3aGVyZSBJJ2xsIHNlZSBob3cgcm9idXN0IGBJUF9TRVRgIGlzIGFuZCBkZXRlcm1pbmUgaWYgaXQncyB0aGUgcmlnaHQgY2hvaWNlIGZvciBteSBzcGVjaWZpYyB1c2UtY2FzZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZyb20gYW4gYXJjaGl0ZWN0dXJhbCwgcGVyZm9ybWFuY2UsIGFuZC9vciBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gRmluYWxseSwgSSBzaG91bGQgc2VlIGhvdyAqZ3JhbnVsYXIqIHRoZSBjb25maWd1cmFiaWxpdHkgb2YgYElQX1NFVGAgaXMgYW5kIGlmIEkgYW0gYWJsZSB0byB0YWlsb3IgaXQgdG8gbXkgZXhhY3QgbmVlZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowOTowNy42MTI4MTI5MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIElQX1NFVFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIklQIHNldCBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbiAgIDU6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgSVAgc2V0IHN1cHBvcnQgdG8gdGhlIGtlcm5lbC5cXG4gICA4OlxcdFxcdCAgSW4gb3JkZXIgdG8gZGVmaW5lIGFuZCB1c2UgdGhlIHNldHMsIHlvdSBuZWVkIHRoZSB1c2Vyc3BhY2UgdXRpbGl0eVxcbiAgIDk6XFx0XFx0ICBpcHNldCg4KS4gWW91IGNhbiB1c2UgdGhlIHNldHMgaW4gbmV0ZmlsdGVyIHZpYSB0aGUgXFxcInNldFxcXCIgbWF0Y2hcXG4gIDEwOlxcdFxcdCAgYW5kIFxcXCJTRVRcXFwiIHRhcmdldC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgSVBfU0VUXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbmZpZyBJUF9TRVRfTUFYXFxuICAxNzpcXHRcXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIElQIHNldHNcXFwiXFxuICAxODpcXHRcXHRkZWZhdWx0IDI1NlxcbiAgMTk6XFx0XFx0cmFuZ2UgMiA2NTUzNFxcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MDk6MDcuNjEyOTA1NTkxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NjkwNDg4NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgSVBfU0VUYCBEZXBlbmRlbmN5IGFuZCBLZXkgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYElQX1NFVGAgZnVuY3Rpb25hbGl0eSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBpdHMgZGVwZW5kZW5jeSBvbiBgSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSYC4gR290dGEgcmVtZW1iZXIgdGhhdCwgaXQncyBmdW5kYW1lbnRhbCB0byBpdHMgb3BlcmF0aW9uLiBOb3csIHRvIGFjdHVhbGx5ICp1c2UqIHRoaXMgdGhpbmcsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYElQX1NFVGAgYW5kIGBJUF9TRVRfTElTVF9TRVRgIGVuYWJsZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb25zLiBUaG9zZSBhcmUgdGhlIGVzc2VudGlhbHMuXG5cbk15IGltbWVkaWF0ZSBmb2N1cywgdGhvdWdoLCBpcyBvbiB0aGUgY29yZSBmdW5jdGlvbnMuIEkgdGhpbmsgYGxpc3Rfc2V0X3VhZGRgIGlzIHRoZSBvbmUgdG8gc3RhcnQgd2l0aCwgYWRkaW5nIGVsZW1lbnRzIHRvIHRoZSBsaXN0LiBUaGF0IHNlZW1zIGxpa2UgdGhlIGNlbnRyYWwgYWN0aW9uLiBCdXQgSSBjYW4ndCBqdXN0IGZpeGF0ZSBvbiBvbmUgZnVuY3Rpb247IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGxpc3Rfc2V0X3JlcGxhY2VgLCBqdXN0IGluIGNhc2UgdGhlcmUncyBhbm90aGVyIGNydWNpYWwgZnVuY3Rpb24gdGhhdCBJIGhhdmUgb3Zlcmxvb2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTg1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxMDoyNi4zMDMzOTY3NThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTMzMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpc3Rfc2V0X3JlcGxhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTE2Mz1zdGF0aWMgdm9pZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MTY0Omxpc3Rfc2V0X3JlcGxhY2Uoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3Qgc2V0X2VsZW0gKmUsIHN0cnVjdCBzZXRfZWxlbSAqb2xkKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMTY1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MjM2PWxpc3Rfc2V0X3VhZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzA0LVxcdGlmIChuKSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzozMDU6XFx0XFx0bGlzdF9zZXRfcmVwbGFjZShzZXQsIGUsIG4pO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzA2LVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxMDoyNi4zNTE1MzQwOTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk2MjQ5MzQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBsaXN0X3NldGAgRnVuY3Rpb24gSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBvcHRpbWl6ZSBpdCBiYXNlZCBvbiB0aGUgcHJvbXB0J3MgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgc2VlIGBsaXN0X3NldF9yZXBsYWNlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgbm90ZS4gVGhlbiBJIG5vdGljZSBgbGlzdF9zZXRfdWFkZGAgaXMgKmFsc28qIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEhvd2V2ZXIsIGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgc2V0X3ZhcmlhbnRgLCBzcGVjaWZpY2FsbHkgYXQgdGhlIGBJUFNFVF9BRERgIGluZGV4LiBUaGF0J3MgYSBrZXkgZGV0YWlsLlxuXG5XYWl0IGEgc2Vjb25kLCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBkaXNjb3VyYWdlcyBzdGF0aWMgZnVuY3Rpb25zIGlmIHBvc3NpYmxlLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCB3aHkgaXMgYGxpc3Rfc2V0X3VhZGRgIHN0YXRpYz8gQW5kIGlzIGl0IG5lY2Vzc2FyeT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHVzYWdlLiBPa2F5LCBsZXQncyBzZWUsIGl0IGlzIGFzc2lnbmVkIHRvIGBzZXRfdmFyaWFudC5hZHRbSVBTRVRfQUREXWAuIE5vdywgSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgc2V0X3ZhcmlhbnRgIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGFjdHVhbGx5ICp1c2VkKi4gV2hlcmUgaXMgYHNldF92YXJpYW50YCB1dGlsaXplZD8gTGV0J3MgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MTA6MzUuMzE0MDMwODIxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTE2NzUwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfdmFyaWFudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9NTQ3PWxpc3Rfc2V0X2NhbmNlbF9nYyhzdHJ1Y3QgaXBfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTU1Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjU1ODpzdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgc2V0X3ZhcmlhbnQgPSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NTktXFx0LmthZHRcXHQ9IGxpc3Rfc2V0X2thZHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTYyMD1saXN0X3NldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTYzNS1cXHRsb2NrZGVwX3NldF9jbGFzcyhcXHUwMDI2c2V0LVxcdTAwM2Vsb2NrLCBcXHUwMDI2bGlzdF9zZXRfbG9ja2RlcF9rZXkpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NjM2OlxcdHNldC1cXHUwMDNldmFyaWFudCA9IFxcdTAwMjZzZXRfdmFyaWFudDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTYzNy1cXHRzZXQtXFx1MDAzZWRzaXplID0gaXBfc2V0X2VsZW1fbGVuKHNldCwgdGIsIHNpemVvZihzdHJ1Y3Qgc2V0X2VsZW0pLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxMDozNS4zNjUyMDA3NjhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA0NzYwNjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlwX3NldF9jb3JlLmMgQ29kZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGBzZXQtXHUwMDNldmFyaWFudGAgaXMgbGlrZWx5IGJlaW5nIHV0aWxpemVkIHdpdGhpbiBgaXBfc2V0X2NvcmUuY2AuIFRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyBjb2RlIGJhc2UgdXN1YWxseSBtZWFucyB0aGF0IGBzZXQtXHUwMDNldmFyaWFudGAgaGFzIGEgc2lnbmlmaWNhbnQgcm9sZS4gR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBmaWxlIGBpcF9zZXRfY29yZS5jYCBkaXJlY3RseSB0byBzZWUgaG93IGAtXHUwMDNldmFyaWFudGAgaXMgYmVpbmcgdXNlZCBhbmQsIHNwZWNpZmljYWxseSwgaG93IHRoZSBgLVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0YCBpcyB1c2VkIHdpdGhpbiB0aGF0IGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBzdHJ1Y3R1cmVzIHRvIGJldHRlciBjb21wcmVoZW5kIHRoZSBvdmVyYWxsIGRlc2lnbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyOTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxMDo0My40MTI4MDk3MzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjUwMDA3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2YXJpYW50LVxcdTAwM2VhZHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxMDo0My40NjAwNzcwNzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU1MDg2MzU5MTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBpczpcblxuKipDaGVja2luZyBgYWR0YCBpbiBgaXBfc2V0X2NvcmUuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBhZHRgIOKAkyB0aGUgYWJzdHJhY3QgZGF0YSB0eXBlIOKAkyB3aXRoaW4gdGhlIGBpcF9zZXRfY29yZS5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNldCBpbXBsZW1lbnRhdGlvbiBpcyBzdHJ1Y3R1cmVkIGF0IHRoZSBjb3JlIGxldmVsLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHRoaXMgZmlsZSBob2xkcyB0aGUgZm91bmRhdGlvbmFsIGRlZmluaXRpb25zIGFuZCBvcGVyYXRpb25zLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIG1lbW9yeSBsYXlvdXQsIGFueSBrZXkgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGJhc2ljIHNldCBtYW5pcHVsYXRpb24gcm91dGluZXMgdXNlZCBieSB0aGUgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgYGFkdGAgaXMgaGFuZGxlZCBoZXJlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIHBlcmZvcm1hbmNlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkncmUgdXNpbmcgYSBzdGFuZGFyZCBsaWJyYXJ5J3MgaW1wbGVtZW50YXRpb24sIG9yIGlmIHRoZXkndmUgcm9sbGVkIHRoZWlyIG93biwgYW5kIHdoeS4gQW55IGNsZXZlciBvcHRpbWl6YXRpb25zIHdpbGwgYmUgb2J2aW91cyBoZXJlLiBUaGUgZ29hbCBpcyBhIHF1aWNrIHJlY29ubmFpc3NhbmNlLCB0byBnYWluIGEgaGlnaC1sZXZlbCBwaWN0dXJlIGJlZm9yZSBJIGRlbHZlIGRlZXBlciBpbnRvIHNwZWNpZmljIHNldCB0eXBlcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSB3aWxsIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGRlY2xhcmF0aW9uIG9mIHRoZSBgYWR0YCwgb3IgdXNhZ2Ugb2YgYW55IGV4aXN0aW5nIGBhZHRgIHN0cnVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUyNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjEzOjE4LjU0NjQzOTIyN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0ODA1MTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuYWR0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MTM6MTguNTkxOTI0NjI0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTg1OTMwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCdzIGNvbWluZyBkaXJlY3RseSBmcm9tIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgaXBfc2V0X2NvcmUuY2AgZm9yIEFEVCBJbnNwZWN0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIExldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGxvb2sgYXQgYGlwX3NldF9jb3JlLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSB0aGUgYC1cdTAwM2VhZHRgIGFzcGVjdCB3aXRoaW4gdGhhdCBmaWxlLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBzb21lIGludGVyYWN0aW9uIHRoZXJlIHRoYXQgd2FycmFudHMgYXR0ZW50aW9uLCBhbmQga25vd2luZyB0aGUgY29yZSdzIGltcGxlbWVudGF0aW9uIGlzIGtleSBmb3IgbWUuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSBleHBlY3QgdG8gc2VlIHRoZSBsb3cgbGV2ZWwgZGV0YWlscyBJIG5lZWQgZm9yIG5vdy4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxMzoyMi42NTA1MjAxMDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTgxNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNlYWR0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTgxOD1zdGF0aWMgaW50IGlwX3NldF9hZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpjdG5sLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NTEtXFx0XFx0XFx0XFx0ICAgICBhdHRyW0lQU0VUX0FUVFJfREFUQV0sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE4NTI6XFx0XFx0XFx0XFx0ICAgICBzZXQtXFx1MDAzZXR5cGUtXFx1MDAzZWFkdF9wb2xpY3ksIE5VTEwpKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xODUzLVxcdFxcdFxcdHJldHVybiAtSVBTRVRfRVJSX1BST1RPQ09MO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NjItXFx0XFx0XFx0ICAgIG5sYV9wYXJzZV9uZXN0ZWQodGIsIElQU0VUX0FUVFJfQURUX01BWCwgbmxhLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxODYzOlxcdFxcdFxcdFxcdFxcdCAgICAgc2V0LVxcdTAwM2V0eXBlLVxcdTAwM2VhZHRfcG9saWN5LCBOVUxMKSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg2NC1cXHRcXHRcXHRcXHRyZXR1cm4gLUlQU0VUX0VSUl9QUk9UT0NPTDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xODg4PXN0YXRpYyBpbnQgaXBfc2V0X3V0ZXN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTkwNy1cXHRpZiAobmxhX3BhcnNlX25lc3RlZCh0YiwgSVBTRVRfQVRUUl9BRFRfTUFYLCBhdHRyW0lQU0VUX0FUVFJfREFUQV0sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE5MDg6XFx0XFx0XFx0ICAgICBzZXQtXFx1MDAzZXR5cGUtXFx1MDAzZWFkdF9wb2xpY3ksIE5VTEwpKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xOTA5LVxcdFxcdHJldHVybiAtSVBTRVRfRVJSX1BST1RPQ09MO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxMzoyMi42OTQxMDU3ODNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NjkwOTEzMzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgdGVybXM6XG5cbioqRGl2aW5nIGludG8gdGhlIGBpcF9zZXRgIEFEVCoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIGxpa2UgYSBzZXQsIGFuZCBpdCBsb29rcyBsaWtlIHdlJ3JlIGludGVyZXN0ZWQgaW4gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHZhcmlhbnRzIGFuZCBhYnN0cmFjdCBkYXRhIHR5cGVzIChBRFRzKSB3aXRoaW4gdGhhdCBzZXQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0YCBjb25uZWN0aW9uLlxuXG5IbW0sIHRoaXMgc291bmRzIGxpa2UgYSBwb3RlbnRpYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsLiBMZXQncyBtYWtlIHN1cmUgb3VyIHVuZGVyc3RhbmRpbmcgb2YgYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YCBpcyBhY2N1cmF0ZS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9mIGhvdyB0aGUgZGlmZmVyZW50IHNldCB0eXBlcyBhcmUgc3RydWN0dXJlZCBhbmQgcmVwcmVzZW50ZWQgaW50ZXJuYWxseS4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDQ0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MTg6NTIuMzg1MDIyNzAzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE3MTMzNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg9MTQxPXN0cnVjdCBpcF9zZXRfYWR0X29wdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaC0xNDktLyogU2V0IHR5cGUsIHZhcmlhbnQtc3BlY2lmaWMgcGFydCAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oOjE1MDpzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCB7XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtMTUxLVxcdC8qIEtlcm5lbHNwYWNlOiB0ZXN0L2FkZC9kZWwgZW50cmllc1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg9MjQ2PXN0cnVjdCBpcF9zZXQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtMjYxLVxcdC8qIFRoZSB0eXBlIHZhcmlhbnQgZG9pbmcgdGhlIHJlYWwgam9iICovXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6MjYyOlxcdGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50ICp2YXJpYW50O1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTI2My1cXHQvKiBUaGUgYWN0dWFsIElORVQgZmFtaWx5IG9mIHRoZSBzZXQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MTg6NTIuNjI2NzQyNjE3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NzI5OTUzOTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHZhcmlvdXMgSVAgc2V0IHR5cGVzIGFyZSBoYW5kbGVkIGF0IGEgbG93IGxldmVsLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudGAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaGAuIFRoaXMgc3RydWN0dXJlIGlzIGNydWNpYWwgYmVjYXVzZSBpdCdzIHRoZSBmb3VuZGF0aW9uIGZvciBob3cgZGlmZmVyZW50IElQIHNldCBpbXBsZW1lbnRhdGlvbnMgYXJlIG1hbmFnZWQgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBhYnN0cmFjdGlvbiBpcyBkZXNpZ25lZCBhbmQgaG93IHRoZSBpbnRlcmZhY2VzIGZvciBzcGVjaWZpYyB0eXBlcyBhcmUgY3JlYXRlZC4gSSdtIGhvcGluZyB0byBnYWluIGluc2lnaHRzIGludG8gaG93IHRoZSBiYXNlIHNldCBkYXRhIHN0cnVjdHVyZSBpcyBleHRlbmRlZCBhbmQgb3B0aW1pemVkIGZvciBkaWZmZXJlbnQgdXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MTMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxOTo1MS4zNTY3MDAyNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNDksXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDk6XFx0LyogU2V0IHR5cGUsIHZhcmlhbnQtc3BlY2lmaWMgcGFydCAqL1xcbiAxNTA6XFx0c3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQge1xcbiAxNTE6XFx0XFx0LyogS2VybmVsc3BhY2U6IHRlc3QvYWRkL2RlbCBlbnRyaWVzXFxuIDE1MjpcXHRcXHQgKlxcdFxcdHJldHVybnMgbmVnYXRpdmUgZXJyb3IgY29kZSxcXG4gMTUzOlxcdFxcdCAqXFx0XFx0XFx0emVybyBmb3Igbm8gbWF0Y2gvc3VjY2VzcyB0byBhZGQvZGVsZXRlXFxuIDE1NDpcXHRcXHQgKlxcdFxcdFxcdHBvc2l0aXZlIGZvciBtYXRjaGluZyBlbGVtZW50ICovXFxuIDE1NTpcXHRcXHRpbnQgKCprYWR0KShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIDE1NjpcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbiAxNTc6XFx0XFx0XFx0ICAgIGVudW0gaXBzZXRfYWR0IGFkdCwgc3RydWN0IGlwX3NldF9hZHRfb3B0ICpvcHQpO1xcbiAxNTg6XFx0XFxuIDE1OTpcXHRcXHQvKiBVc2Vyc3BhY2U6IHRlc3QvYWRkL2RlbCBlbnRyaWVzXFxuIDE2MDpcXHRcXHQgKlxcdFxcdHJldHVybnMgbmVnYXRpdmUgZXJyb3IgY29kZSxcXG4gMTYxOlxcdFxcdCAqXFx0XFx0XFx0emVybyBmb3Igbm8gbWF0Y2gvc3VjY2VzcyB0byBhZGQvZGVsZXRlXFxuIDE2MjpcXHRcXHQgKlxcdFxcdFxcdHBvc2l0aXZlIGZvciBtYXRjaGluZyBlbGVtZW50ICovXFxuIDE2MzpcXHRcXHRpbnQgKCp1YWR0KShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuIDE2NDpcXHRcXHRcXHQgICAgZW51bSBpcHNldF9hZHQgYWR0LCB1MzIgKmxpbmVubywgdTMyIGZsYWdzLCBib29sIHJldHJpZWQpO1xcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHQvKiBMb3cgbGV2ZWwgYWRkL2RlbC90ZXN0IGZ1bmN0aW9ucyAqL1xcbiAxNjc6XFx0XFx0aXBzZXRfYWR0Zm4gYWR0W0lQU0VUX0FEVF9NQVhdO1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRcXHQvKiBXaGVuIGFkZGluZyBlbnRyaWVzIGFuZCBzZXQgaXMgZnVsbCwgdHJ5IHRvIHJlc2l6ZSB0aGUgc2V0ICovXFxuIDE3MDpcXHRcXHRpbnQgKCpyZXNpemUpKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKTtcXG4gMTcxOlxcdFxcdC8qIERlc3Ryb3kgdGhlIHNldCAqL1xcbiAxNzI6XFx0XFx0dm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBpcF9zZXQgKnNldCk7XFxuIDE3MzpcXHRcXHQvKiBGbHVzaCB0aGUgZWxlbWVudHMgKi9cXG4gMTc0OlxcdFxcdHZvaWQgKCpmbHVzaCkoc3RydWN0IGlwX3NldCAqc2V0KTtcXG4gMTc1OlxcdFxcdC8qIEV4cGlyZSBlbnRyaWVzIGJlZm9yZSBsaXN0aW5nICovXFxuIDE3NjpcXHRcXHR2b2lkICgqZXhwaXJlKShzdHJ1Y3QgaXBfc2V0ICpzZXQpO1xcbiAxNzc6XFx0XFx0LyogTGlzdCBzZXQgaGVhZGVyIGRhdGEgKi9cXG4gMTc4OlxcdFxcdGludCAoKmhlYWQpKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjE5OjUxLjM1Njc4NTQ1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzMyMTgxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGF0IEZ1bmN0aW9uIFBvaW50ZXIgQXJyYXkqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiB0aGF0IGBhZHRbSVBTRVRfQURUX01BWF1gIGFycmF5LCB0aGF0J3MgZGVmaW5pdGVseSBhIGNvbGxlY3Rpb24gb2YgZnVuY3Rpb24gcG9pbnRlcnMuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuIEl0J3MgbGlrZWx5IGEgZGlzcGF0Y2ggdGFibGUgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFsbG93aW5nIGZvciBkeW5hbWljIGZ1bmN0aW9uIGNhbGxzIGJhc2VkIG9uIHNvbWUgaW5kZXggb3IgY29uZGl0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgZnVuY3Rpb25zICpkbyouIExldCdzIHRyYWNlIHdoZXJlIHRoYXQgYGFkdGAgdmFyaWFibGUgaXMgYWN0dWFsbHkgdXNlZC4gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dHMgd2hlcmUgdGhlIGFycmF5IGVsZW1lbnRzIGFyZSBjYWxsZWQsIGhvdyB0aGUgaW5kZXggaXMgY2hvc2VuLCBhbmQgd2hhdCBkYXRhIGdldHMgcGFzc2VkLiBUaGF0J2xsIGdpdmUgbWUgdGhlIHJlYWwgaW5zaWdodCBpbnRvIHRoZSBpbnRlbnQgb2YgdGhpcyBzdHJ1Y3R1cmUgYW5kIGl0cyByZWxhdGlvbiB0byBvdGhlciBlbGVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjE5OjU1LjM5MDAwNjE2M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2NDMzNjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkdFxcXFxbXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTExMD1iaXRtYXBfaXBfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0xMTQtXFx0c3RydWN0IGJpdG1hcF9pcCAqbWFwID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jOjExNTpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMTE2LVxcdHN0cnVjdCBiaXRtYXBfaXBfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM9MTMwPWJpdG1hcF9pcF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTEzMy1cXHRzdHJ1Y3QgYml0bWFwX2lwICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MTM0OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0xMzUtXFx0dTMyIGlwID0gMCwgaXBfdG8gPSAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM9MjA5PWJpdG1hcF9pcG1hY19rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTIxMy1cXHRzdHJ1Y3QgYml0bWFwX2lwbWFjICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM6MjE0OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0yMTUtXFx0c3RydWN0IGJpdG1hcF9pcG1hY19hZHRfZWxlbSBlID0geyAuaWQgPSAwLCAuYWRkX21hYyA9IDEgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTI0Mj1iaXRtYXBfaXBtYWNfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0yNDUtXFx0Y29uc3Qgc3RydWN0IGJpdG1hcF9pcG1hYyAqbWFwID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjI0NjpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMtMjQ3LVxcdHN0cnVjdCBiaXRtYXBfaXBtYWNfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYz0xMjc9Yml0bWFwX3BvcnRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jLTEzMS1cXHRzdHJ1Y3QgYml0bWFwX3BvcnQgKm1hcCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jOjEzMjpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0xMzMtXFx0c3RydWN0IGJpdG1hcF9wb3J0X2FkdF9lbGVtIGUgPSB7IC5pZCA9IDAgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM9MTUzPWJpdG1hcF9wb3J0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0xNTYtXFx0c3RydWN0IGJpdG1hcF9wb3J0ICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYzoxNTc6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMtMTU4LVxcdHN0cnVjdCBiaXRtYXBfcG9ydF9hZHRfZWxlbSBlID0geyAuaWQgPSAwIH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9ODA9aGFzaF9pcDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtODQtXFx0Y29uc3Qgc3RydWN0IGhhc2hfaXA0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzo4NTpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTg2LVxcdHN0cnVjdCBoYXNoX2lwNF9lbGVtIGUgPSB7IDAgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0xMDA9aGFzaF9pcDRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMTAzLVxcdHN0cnVjdCBoYXNoX2lwNCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MTA0OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMTA1LVxcdHN0cnVjdCBoYXNoX2lwNF9lbGVtIGUgPSB7IDAgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMTY9aGFzaF9pcDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjIwLVxcdGNvbnN0IHN0cnVjdCBoYXNoX2lwNiAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MjIxOlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjIyLVxcdHN0cnVjdCBoYXNoX2lwNl9lbGVtIGUgPSB7IHsgLmFsbCA9IHsgMCB9IH0gfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMzQ9aGFzaF9pcDZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjM3LVxcdGNvbnN0IHN0cnVjdCBoYXNoX2lwNiAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MjM4OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjM5LVxcdHN0cnVjdCBoYXNoX2lwNl9lbGVtIGUgPSB7IHsgLmFsbCA9IHsgMCB9IH0gfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz04NT1oYXNoX2lwbWFjNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy04OC17XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jOjg5OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtOTAtXFx0c3RydWN0IGhhc2hfaXBtYWM0X2VsZW0gZSA9IHsgLmlwID0gMCwgeyAuZm9vWzBdID0gMCwgLmZvb1sxXSA9IDAgfSB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTExMT1oYXNoX2lwbWFjNF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0xMTMte1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxMTQ6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0xMTUtXFx0c3RydWN0IGhhc2hfaXBtYWM0X2VsZW0gZSA9IHsgLmlwID0gMCwgeyAuZm9vWzBdID0gMCwgLmZvb1sxXSA9IDAgfSB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE5OD1oYXNoX2lwbWFjNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0yMDEte1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoyMDI6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0yMDMtXFx0c3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gZSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz0yMjc9aGFzaF9pcG1hYzZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMjI5LXtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM6MjMwOlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtMjMxLVxcdHN0cnVjdCBoYXNoX2lwbWFjNl9lbGVtIGUgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTgwPWhhc2hfaXBtYXJrNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtODQtXFx0Y29uc3Qgc3RydWN0IGhhc2hfaXBtYXJrNCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjg1OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTg2LVxcdHN0cnVjdCBoYXNoX2lwbWFyazRfZWxlbSBlID0geyB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz05Nz1oYXNoX2lwbWFyazRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTEwMC1cXHRzdHJ1Y3QgaGFzaF9pcG1hcms0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6MTAxOlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTEwMi1cXHRzdHJ1Y3QgaGFzaF9pcG1hcms0X2VsZW0gZSA9IHsgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjE5PWhhc2hfaXBtYXJrNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjIzLVxcdGNvbnN0IHN0cnVjdCBoYXNoX2lwbWFyazYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyMjQ6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjI1LVxcdHN0cnVjdCBoYXNoX2lwbWFyazZfZWxlbSBlID0geyB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz0yMzY9aGFzaF9pcG1hcms2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yMzktXFx0Y29uc3Qgc3RydWN0IGhhc2hfaXBtYXJrNiAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjI0MDpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yNDEtXFx0c3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtIGUgPSB7IH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTkxPWhhc2hfaXBwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtOTQte1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6OTU6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtOTYtXFx0c3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtIGUgPSB7IC5pcCA9IDAgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MTEyPWhhc2hfaXBwb3J0NF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMTE1LVxcdHN0cnVjdCBoYXNoX2lwcG9ydDQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoxMTY6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMTE3LVxcdHN0cnVjdCBoYXNoX2lwcG9ydDRfZWxlbSBlID0geyAuaXAgPSAwIH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTI2ND1oYXNoX2lwcG9ydDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI2Ny17XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyNjg6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjY5LVxcdHN0cnVjdCBoYXNoX2lwcG9ydDZfZWxlbSBlID0geyAuaXAgPSB7IC5hbGwgPSB7IDAgfSB9IH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTI4Nj1oYXNoX2lwcG9ydDZfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI4OS1cXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnQ2ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6MjkwOlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI5MS1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnQ2X2VsZW0gZSA9IHsgLmlwID0geyAuYWxsID0geyAwIH0gfSB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTkwPWhhc2hfaXBwb3J0aXA0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTkzLXtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6OTQ6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy05NS1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRpcDRfZWxlbSBlID0geyAuaXAgPSAwIH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9MTA4PWhhc2hfaXBwb3J0aXA0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTExMS1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRpcDQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjExMjpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTExMy1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRpcDRfZWxlbSBlID0geyAuaXAgPSAwIH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9MjYzPWhhc2hfaXBwb3J0aXA2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI2Ni17XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjI2NzpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI2OC1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRpcDZfZWxlbSBlID0geyAuaXAgPSB7IC5hbGwgPSB7IDAgfSB9IH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9MjgxPWhhc2hfaXBwb3J0aXA2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI4NC1cXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRpcDYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jOjI4NTpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI4Ni1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRpcDZfZWxlbSBlID0geyAgLmlwID0geyAuYWxsID0geyAwIH0gfSB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0xMzQ9aGFzaF9pcHBvcnRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xMzgtXFx0Y29uc3Qgc3RydWN0IGhhc2hfaXBwb3J0bmV0NCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjEzOTpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xNDAtXFx0c3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGUgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTE2MD1oYXNoX2lwcG9ydG5ldDRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTE2My1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6MTY0OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTE2NS1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0sgLSAxIH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jPTM5ND1oYXNoX2lwcG9ydG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTM5OC1cXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM6Mzk5OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTQwMC1cXHRzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2X2VsZW0gZSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9NDIwPWhhc2hfaXBwb3J0bmV0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDIzLVxcdGNvbnN0IHN0cnVjdCBoYXNoX2lwcG9ydG5ldDYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzo0MjQ6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtNDI1LVxcdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSyAtIDEgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM9NzM9aGFzaF9tYWM0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy03Ni17XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYzo3NzpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYy03OC1cXHRzdHJ1Y3QgaGFzaF9tYWM0X2VsZW0gZSA9IHsgeyAuZm9vWzBdID0gMCwgLmZvb1sxXSA9IDAgfSB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9tYWMuYz05Nj1oYXNoX21hYzRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTk4LXtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjk5OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTEwMC1cXHRzdHJ1Y3QgaGFzaF9tYWM0X2VsZW0gZSA9IHsgeyAuZm9vWzBdID0gMCwgLmZvb1sxXSA9IDAgfSB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMTM9aGFzaF9uZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMTctXFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0NCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjExODpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMTktXFx0c3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jPTEzNj1oYXNoX25ldDRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEzOS1cXHRzdHJ1Y3QgaGFzaF9uZXQ0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MTQwOlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTE0MS1cXHRzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0sgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9Mjg3PWhhc2hfbmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjkxLVxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldDYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyOTI6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjkzLVxcdHN0cnVjdCBoYXNoX25ldDZfZWxlbSBlID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0zMTA9aGFzaF9uZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0zMTIte1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MzEzOlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTMxNC1cXHRzdHJ1Y3QgaGFzaF9uZXQ2X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0sgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xNTc9aGFzaF9uZXRpZmFjZTRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTYxLVxcdHN0cnVjdCBoYXNoX25ldGlmYWNlNCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MTYyOlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTYzLVxcdHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtIGUgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTk4PWhhc2hfbmV0aWZhY2U0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTIwMS1cXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjIwMjpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTIwMy1cXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSBlID0geyAuY2lkciA9IEhPU1RfTUFTSywgLmVsZW0gPSAxIH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9Mzc4PWhhc2hfbmV0aWZhY2U2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM4Mi1cXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM4MzpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM4NC1cXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTZfZWxlbSBlID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTQxNz1oYXNoX25ldGlmYWNlNl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy00MTkte1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzo0MjA6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy00MjEtXFx0c3RydWN0IGhhc2hfbmV0aWZhY2U2X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0ssIC5lbGVtID0gMSB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0xNDM9aGFzaF9uZXRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0xNDctXFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0bmV0NCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjE0ODpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0xNDktXFx0c3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtIGUgPSB7IH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jPTE2OD1oYXNoX25ldG5ldDRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTE3MS1cXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6MTcyOlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTE3My1cXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ0X2VsZW0gZSA9IHsgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9Mzg0PWhhc2hfbmV0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzg4LVxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldG5ldDYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozODk6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzkwLVxcdHN0cnVjdCBoYXNoX25ldG5ldDZfZWxlbSBlID0geyB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz00MTQ9aGFzaF9uZXRuZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy00MTYte1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM6NDE3OlxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTQxOC1cXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ2X2VsZW0gZSA9IHsgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTEyOT1oYXNoX25ldHBvcnQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTMzLVxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnQ0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjEzNDpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTM1LVxcdHN0cnVjdCBoYXNoX25ldHBvcnQ0X2VsZW0gZSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTE1ND1oYXNoX25ldHBvcnQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTU3LVxcdHN0cnVjdCBoYXNoX25ldHBvcnQ0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjE1ODpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTU5LVxcdHN0cnVjdCBoYXNoX25ldHBvcnQ0X2VsZW0gZSA9IHsgLmNpZHIgPSBIT1NUX01BU0sgLSAxIH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0zNDk9aGFzaF9uZXRwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM1My1cXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NiAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzozNTQ6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM1NS1cXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0Nl9lbGVtIGUgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0zNzQ9aGFzaF9uZXRwb3J0Nl91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM3Ny1cXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NiAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzozNzg6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM3OS1cXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0Nl9lbGVtIGUgPSB7IC5jaWRyID0gSE9TVF9NQVNLICAtIDEgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTE1MT1oYXNoX25ldHBvcnRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTU1LVxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjE1NjpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTU3LVxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gZSA9IHsgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTE5MD1oYXNoX25ldHBvcnRuZXQ0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTkzLVxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjE5NDpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTk1LVxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gZSA9IHsgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTQ0OD1oYXNoX25ldHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDUyLVxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjQ1MzpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDU0LVxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gZSA9IHsgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTQ3Nz1oYXNoX25ldHBvcnRuZXQ2X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDgwLVxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjQ4MTpcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDgyLVxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gZSA9IHsgfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MzUzPWxpc3Rfc2V0X3VhZHQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0zNTYtXFx0c3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzozNTc6XFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMzU4LVxcdHN0cnVjdCBzZXRfYWR0X2VsZW0gZSA9IHsgLnJlZmlkID0gSVBTRVRfSU5WQUxJRF9JRCB9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoxOTo1NS44MDY0NDcyOTVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjczMzU3MTcyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXBseSBmYW1pbGlhciB3aXRoIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgYGxpc3Rfc2V0X3VhZHRgKipcblxuUmlnaHQsIHNvIGBsaXN0X3NldF91YWR0YCBpcyBjYWxsaW5nIGBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XWAuIFRoYXQncyB0aGUgY29yZSBvcGVyYXRpb24uIE9rYXksIEkgZ2V0IGl0LCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzZXQsIGFuZCBpdHMgdmFyaWFudCBpcyBsaWtlbHkgYW4gaW1wbGVtZW50YXRpb24gb2YgZGlmZmVyZW50IEFEVHMgKEFic3RyYWN0IERhdGEgVHlwZXMpLCBwb3RlbnRpYWxseSBzb21ldGhpbmcgbGlrZSBhIGhhc2ggdGFibGUgb3IgYSB0cmVlLiBUaGlzIGNhbGwgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRoZSBgYWR0YHRoIGVsZW1lbnQgd2l0aGluIHRoZSBzZXQncyBzcGVjaWZpYyBBRFQuICBUaGUgcXVlc3Rpb24gbm93IGlzICp3aHkqPyBXaGF04oCZcyBkcml2aW5nIHRoaXMgY2FsbD8gVGltZSB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgYGxpc3Rfc2V0X3VhZHRgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gTGV0J3MgZ28gc3BlbHVua2luZyB0aHJvdWdoIHRoZSBjb2RlYmFzZSBhbmQgc2VlIHdoYXQncyB0cmlnZ2VyaW5nIHRoaXMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NzEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyMTowMy4xNDIxNjcyNDdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjAyNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpc3Rfc2V0X3VhZHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTM1Mj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzozNTM6bGlzdF9zZXRfdWFkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0zNTQtXFx0ICAgICAgZW51bSBpcHNldF9hZHQgYWR0LCB1MzIgKmxpbmVubywgdTMyIGZsYWdzLCBib29sIHJldHJpZWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTU1OD1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgc2V0X3ZhcmlhbnQgPSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NTktXFx0LmthZHRcXHQ9IGxpc3Rfc2V0X2thZHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzo1NjA6XFx0LnVhZHRcXHQ9IGxpc3Rfc2V0X3VhZHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NjEtXFx0LmFkdFxcdD0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyMTowMy4xODczNzU4ODRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0ODg5NDI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVBRFQgQXNzaWdubWVudCBhbmQgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBsaXN0X3NldF91YWR0YCBpcyBiZWluZyBhc3NpZ25lZCB0byBgc2V0X3ZhcmlhbnQudWFkdGAuIFJpZ2h0LCBhbmQgdGhhdCBgc2V0X3ZhcmlhbnQudWFkdGAgaXMgdGhlbiBpbnZva2VkIGZyb20gYGlwX3NldF9jb3JlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhhdCBgLVx1MDAzZXVhZHRgIG1lbWJlciB3aXRoaW4gYGlwX3NldF9jb3JlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBVQURULCBvciBVc2VyLURlZmluZWQgQWJzdHJhY3QgRGF0YSBUeXBlLCBpcyBiZWluZyB1dGlsaXplZCBpbiB0aGUgY29yZSBJUCBzZXQgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBkaXZlIGludG8gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCBvcGVyYXRpb25zIGFyZSBiZWluZyBwZXJmb3JtZWQgb24gaXQuIEl04oCZcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBwb2ludGVyIGRlcmVmZXJlbmNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIGl0LCBhbmQgd2hhdCB0aGF0IGRhdGEgaXMgdXNlZCBmb3IuIFRoaXMgaXMgYSBrZXkgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIHNldCB2YXJpYW50IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgSVAgc2V0IGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExOTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyMTowNy44MzYyNzI4OTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTcwNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNldWFkdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE3NDY9Y2FsbF9hZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpjdG5sLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE3NjMtXFx0XFx0aXBfc2V0X2xvY2soc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTc2NDpcXHRcXHRyZXQgPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZXVhZHQoc2V0LCB0YiwgYWR0LCBcXHUwMDI2bGluZW5vLCBmbGFncywgcmV0cmllZCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE3NjUtXFx0XFx0aXBfc2V0X3VubG9jayhzZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE4ODg9c3RhdGljIGludCBpcF9zZXRfdXRlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xOTExLVxcdHJjdV9yZWFkX2xvY2tfYmgoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTkxMjpcXHRyZXQgPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZXVhZHQoc2V0LCB0YiwgSVBTRVRfVEVTVCwgXFx1MDAyNmxpbmVubywgMCwgMCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE5MTMtXFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjIxOjA3Ljg4MTI1MTMyMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTcwMTQ2MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgaXBfc2V0YCBmdW5jdGlvbmFsaXR5LiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgY2FsbF9hZGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYm90aCBgaXBfc2V0X3VhZGRgIGFuZCBgaXBfc2V0X3VkZWxgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSXQgc3VnZ2VzdHMgdGhhdCB0aGVyZSdzIGEgY29tbW9uLCBzaGFyZWQgYWN0aW9uIGhhcHBlbmluZyB3aGVuIGFkZGluZyBvciBkZWxldGluZyBhbiBlbGVtZW50IGluIGFuIElQIHNldC5cblxuKipBbmFseXppbmcgdGhlIGBjYWxsX2FkYCBJbnRlcmFjdGlvbioqXG5cbk15IGltbWVkaWF0ZSBpbmNsaW5hdGlvbiBpcyB0byB1bmRlcnN0YW5kICp3aHkqIGBjYWxsX2FkYCBpcyBuZWVkZWQgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBgaXBfc2V0YCBjb250ZXh0LiBJIHNob3VsZCByZWFsbHkgZGl2ZSBpbnRvIHdoYXQgYGNhbGxfYWRgIGFjdHVhbGx5ICpkb2VzKi4gSXMgaXQgc29tZSBzb3J0IG9mIGF1eGlsaWFyeSBmdW5jdGlvbj8gSXMgaXQgaGFuZGxpbmcgbm90aWZpY2F0aW9ucywgcGVyaGFwcz8gT3IgbWF5YmUgc29tZSBzb3J0IG9mIGNvbmZpZ3VyYXRpb24gY2hhbmdlPyBXaGF0ZXZlciBpdCBkb2VzLCB0aGUgZmFjdCB0aGF0IGJvdGggYGlwX3NldF91YWRkYCAoYWRkaW5nKSBhbmQgYGlwX3NldF91ZGVsYCAoZGVsZXRpbmcpIGNhbGwgaXQgcG9pbnRzIHRvIGl0cyBjb3JlIGFuZCBmdW5kYW1lbnRhbCBuYXR1cmUuIExldCdzIG1ha2Ugc3VyZSBJJ20gY3J5c3RhbCBjbGVhciBvbiB0aGlzLiBOb3cgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgYGlwX3NldF91YWRkYCBmdW5jdGlvbi4gSSB0aGluayB0aGF0IHdpbGwgcHJvdmlkZSB0aGUgbmVlZGVkIGNvbnRleHQgZm9yIGBjYWxsX2FkYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4MDksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyMToxMi40NTE0MDA2NzdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTMxNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3NldF91YWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTgxOD1zdGF0aWMgaW50IGlwX3NldF9hZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpjdG5sLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NzMtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE4NzQ6c3RhdGljIGludCBpcF9zZXRfdWFkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xODc1LVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTIxNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIGlwX3NldF9uZXRsaW5rX3N1YnN5c19jYltJUFNFVF9NU0dfTUFYXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTk1LVxcdFtJUFNFVF9DTURfQUREXVxcdD0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMTk2OlxcdFxcdC5jYWxsXFx0XFx0PSBpcF9zZXRfdWFkZCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjE5Ny1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9NVVRFWCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjE6MTIuNDk1MzM0MTQ0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NjQ3MDI5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgdGhpbmtpbmcgZ29lcyBsaWtlIHRoaXM6XG5cbioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIENhbGxiYWNrIGZvciBJUCBTZXQgQWRkaXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBlbnRyeSBwb2ludCwgYXMgSSBzZWUgaXQsIGlzIHRoZSBgaXBfc2V0X3VhZGRgIGZ1bmN0aW9uLiBJdCdzIGEgbmV0bGluayBjYWxsYmFjaywgc28gdGhhdCBpbW1lZGlhdGVseSBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLiBOb3csIHRoZSBrZXkgZnVuY3Rpb24gcmVsYXRlZCB0byBhZGRpbmcgYW4gZWxlbWVudCBzaG91bGQgYmUgZWl0aGVyIGBpcF9zZXRfdWFkZGAgaXRzZWxmLCBvciBwZXJoYXBzIHNvbWV0aGluZyBsaWtlIGBsaXN0X3NldF91YWR0YC4gSG1tLCBidXQgd2FpdCBhIG1vbWVudC4uLiB0aGF0IGBsaXN0X3NldF91YWR0YCBmdW5jdGlvbiwgaXNuJ3QgdGhhdCBzdGF0aWMgd2l0aGluIGBpcF9zZXRfbGlzdF9zZXQuY2A/IEl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkndmUgYmVlbiBpbiB0aGlzIGNvZGUuIEJldHRlciBkb3VibGUgY2hlY2ssIGNhbid0IGFzc3VtZSBhbnl0aGluZy4gTmVlZCB0byB2ZXJpZnkgdGhhdCwgdG8gZW5zdXJlIEknbSBiYXJraW5nIHVwIHRoZSByaWdodCB0cmVlLCBiZWZvcmUgcHJvY2VlZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0NTQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyMToyMC4yNjAwMzg5MloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0NDg4NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGlzdF9zZXRfdWFkdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9MzUyPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjM1MzpsaXN0X3NldF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTM1NC1cXHQgICAgICBlbnVtIGlwc2V0X2FkdCBhZHQsIHUzMiAqbGluZW5vLCB1MzIgZmxhZ3MsIGJvb2wgcmV0cmllZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBzZXRfdmFyaWFudCA9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTU1OS1cXHQua2FkdFxcdD0gbGlzdF9zZXRfa2FkdCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjU2MDpcXHQudWFkdFxcdD0gbGlzdF9zZXRfdWFkdCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTU2MS1cXHQuYWR0XFx0PSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjIxOjIwLjMwNDQ5MjY2N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY3ODYwNDAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQ2hlY2tpbmcgdGhlIFN0YXRpYyBEZWNsYXJhdGlvbiBvZiBgaXBfc2V0X3VhZGRgKipcblxuQWxyaWdodCwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgbGlzdF9zZXRfdWFkdGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIE5vdywgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoZSBgaXBfc2V0X3VhZGRgIGZ1bmN0aW9uIGlzIGFsc28gZGVjbGFyZWQgYXMgc3RhdGljLiBJIHJlY2FsbCBpdCdzIGRlZmluZWQgd2l0aGluIGBpcF9zZXRfY29yZS5jYCwgYnV0IEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRvIGJlIGNlcnRhaW4uIEknbGwgbmVlZCB0byBnbyBhbmQgZXhhbWluZSB0aGUgY29kZSBpbiBgaXBfc2V0X2NvcmUuY2AgYW5kIHNlYXJjaCBmb3IgdGhhdCBmdW5jdGlvbiBkZWNsYXJhdGlvbiB0byBjb25maXJtIGl0cyBzdGF0dXMuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAyNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjIxOjU2Ljk4MzEwMDA1NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMzc2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfc2V0X3VhZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xODE4PXN0YXRpYyBpbnQgaXBfc2V0X2FkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKmN0bmwsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg3My1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTg3NDpzdGF0aWMgaW50IGlwX3NldF91YWRkKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NzUtXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MjE0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgaXBfc2V0X25ldGxpbmtfc3Vic3lzX2NiW0lQU0VUX01TR19NQVhdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIxOTUtXFx0W0lQU0VUX0NNRF9BRERdXFx0PSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjIxOTY6XFx0XFx0LmNhbGxcXHRcXHQ9IGlwX3NldF91YWRkLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTk3LVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX01VVEVYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyMTo1Ny4wMjkyNDQwMTNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyMDg3Mzk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIElQIFNldCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGBpcF9zZXRfdWFkZGAgaXMgZGVmaW5pdGVseSBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbGltaXRzIGl0cyBkaXJlY3QgdXNhZ2UgZnJvbSBvdXRzaWRlIHRoZSBjdXJyZW50IG1vZHVsZS4gSSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gbWFuaXB1bGF0ZSB0aGUgSVAgc2V0cyBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIGFuZCB0aGF0IG1lYW5zIEkgbmVlZCBhbiBleHBvcnRlZCBmdW5jdGlvbi4gTGV0J3MgZGVsdmUgaW50byBgaXBfc2V0X2NvcmUuY2AgYW5kIHNlZSB3aGF0IHB1YmxpY2x5IGF2YWlsYWJsZSBmdW5jdGlvbnMgaXQgZGVmaW5lcy4gSG9wZWZ1bGx5LCB0aGVyZSdzIGEgZ29vZCBzZXQgb2YgZXhwb3J0ZWQgZnVuY3Rpb25zIHRvIGRvIHdoYXQgSSBuZWVkISBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBBUEkgZnVuY3Rpb25zIHRoYXQgSSBjYW4gbGV2ZXJhZ2UgdG8gd29yayB3aXRoIElQIHNldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTY2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjI6MDEuMTUwMTIxMTZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTk4MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yMDY9aXBfc2V0X3R5cGVfcmVnaXN0ZXIoc3RydWN0IGlwX3NldF90eXBlICp0eXBlKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIzNC19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjIzNTpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfdHlwZV9yZWdpc3Rlcik7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIzNi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yMzk9aXBfc2V0X3R5cGVfdW5yZWdpc3RlcihzdHJ1Y3QgaXBfc2V0X3R5cGUgKnR5cGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjU1LX1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MjU2OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF90eXBlX3VucmVnaXN0ZXIpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yNTctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MjYwPWlwX3NldF9hbGxvYyhzaXplX3Qgc2l6ZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yNjMtfVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyNjQ6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2FsbG9jKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjY1LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTI2Nz1pcF9zZXRfZnJlZSh2b2lkICptZW1iZXJzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTI3Mi19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjI3MzpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfZnJlZSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTI3NC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yODc9aXBfc2V0X2dldF9pcGFkZHI0KHN0cnVjdCBubGF0dHIgKm5sYSwgIF9fYmUzMiAqaXBhZGRyKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTMwMS19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjMwMjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfZ2V0X2lwYWRkcjQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zMDMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MzA1PWlwX3NldF9nZXRfaXBhZGRyNihzdHJ1Y3QgbmxhdHRyICpubGEsIHVuaW9uIG5mX2luZXRfYWRkciAqaXBhZGRyKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTMyMS19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjMyMjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfZ2V0X2lwYWRkcjYpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zMjMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MzQ3PWlwX3NldF9pbml0X2NvbW1lbnQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaXBfc2V0X2NvbW1lbnQgKmNvbW1lbnQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMzY4LX1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MzY5OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0zNzAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NDA0PWNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0X3R5cGUgaXBfc2V0X2V4dGVuc2lvbnNbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy00MjktfTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NDMwOkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9leHRlbnNpb25zKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNDMxLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTQ0MT1pcF9zZXRfZWxlbV9sZW4oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzaXplX3QgbGVuLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTQ2NC19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjQ2NTpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfZWxlbV9sZW4pO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy00NjYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NDY4PWlwX3NldF9nZXRfZXh0ZW5zaW9ucyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNTIxLX1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NTIyOkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9nZXRfZXh0ZW5zaW9ucyk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTUyMy1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz01NjU9aXBfc2V0X3B1dF9leHRlbnNpb25zKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpcF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy01ODYtfVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo1ODc6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X3B1dF9leHRlbnNpb25zKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNTg4LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTYzOT1pcF9zZXRfbWF0Y2hfZXh0ZW5zaW9ucyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNjYxLX1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NjYyOkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9tYXRjaF9leHRlbnNpb25zKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNjYzLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTc0MT1pcF9zZXRfdGVzdChpcF9zZXRfaWRfdCBpbmRleCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03NzMtfVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo3NzQ6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X3Rlc3QpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03NzUtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9Nzc3PWlwX3NldF9hZGQoaXBfc2V0X2lkX3QgaW5kZXgsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNzk1LX1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6Nzk2OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9hZGQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy03OTctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9Nzk5PWlwX3NldF9kZWwoaXBfc2V0X2lkX3QgaW5kZXgsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtODE3LX1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6ODE4OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9kZWwpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04MTktXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9ODI1PWlwX3NldF9nZXRfYnluYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmFtZSwgc3RydWN0IGlwX3NldCAqKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04NDQtfVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo4NDU6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2dldF9ieW5hbWUpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04NDYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9ODY2PWlwX3NldF9wdXRfYnlpbmRleChzdHJ1Y3QgbmV0ICpuZXQsIGlwX3NldF9pZF90IGluZGV4KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTg3MS19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjg3MjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfcHV0X2J5aW5kZXgpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04NzMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9ODgwPWlwX3NldF9uYW1lX2J5aW5kZXgoc3RydWN0IG5ldCAqbmV0LCBpcF9zZXRfaWRfdCBpbmRleCwgY2hhciAqbmFtZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy04ODktfVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo4OTA6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X25hbWVfYnlpbmRleCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTg5MS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz05MDI9aXBfc2V0X25mbmxfZ2V0X2J5aW5kZXgoc3RydWN0IG5ldCAqbmV0LCBpcF9zZXRfaWRfdCBpbmRleClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy05MTktfVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo5MjA6RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X25mbmxfZ2V0X2J5aW5kZXgpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy05MjEtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9OTI5PWlwX3NldF9uZm5sX3B1dChzdHJ1Y3QgbmV0ICpuZXQsIGlwX3NldF9pZF90IGluZGV4KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTk0MS19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjk0MjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfbmZubF9wdXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy05NDMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTQ1OT1pcF9zZXRfcHV0X2ZsYWdzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNDc5LX1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTQ4MDpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfcHV0X2ZsYWdzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTQ4MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjI6MDEuMTk1MTI0MDI3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzU3MzQ0ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBFeHBvcnRlZCBgaXBfc2V0X2FkZGAgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gYGlwX3NldF9hZGRgIGlzIGV4cG9ydGVkLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEga2V5IGFyZWEgZm9yIGFuYWx5c2lzLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gaXRzIGV4cG9ydCwgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gYGlwX3NldF9jb3JlLmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGZ1bmRhbWVudGFsIHRvIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb3JlIElQIHNldCBmdW5jdGlvbmFsaXR5LCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlcm5hbCB3b3JraW5ncyBpcyBjcnVjaWFsLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgaXTigJlzIGhhbmRsaW5nIHRoZSBhZGRpdGlvbiBvZiBlbGVtZW50cyB0byB0aGUgc2V0LCB0aGUgZXJyb3IgY2hlY2tpbmcgaW52b2x2ZWQsIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgaXQgZW1wbG95cywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uIGxpZXMsIGFuZCBhIHF1aWNrIGdsYW5jZSBhdCB0aGUgc291cmNlIHdpbGwgdGVsbCBtZSB2b2x1bWVzLiBUaGUgZGVzaWduIGNob2ljZXMgbWFkZSBoZXJlIGltcGFjdCBwZXJmb3JtYW5jZSwgY29uY3VycmVuY3ksIGFuZCBzZWN1cml0eS4gVGltZSB0byBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzMyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjI6NDQuNTUyNDcyMDc3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAyMjUzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zZXRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NjA3PXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjYwODppcF9zZXRfYWRkX2J5dGVzKHU2NCBieXRlcywgc3RydWN0IGlwX3NldF9jb3VudGVyICpjb3VudGVyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy02MDkte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTYxMz1zdGF0aWMgdm9pZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo2MTQ6aXBfc2V0X2FkZF9wYWNrZXRzKHU2NCBwYWNrZXRzLCBzdHJ1Y3QgaXBfc2V0X2NvdW50ZXIgKmNvdW50ZXIpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTYxNS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NjIwPWlwX3NldF91cGRhdGVfY291bnRlcihzdHJ1Y3QgaXBfc2V0X2NvdW50ZXIgKmNvdW50ZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNjI0LVxcdCAgICAhKGZsYWdzIFxcdTAwMjYgSVBTRVRfRkxBR19TS0lQX0NPVU5URVJfVVBEQVRFKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo2MjU6XFx0XFx0aXBfc2V0X2FkZF9ieXRlcyhleHQtXFx1MDAzZWJ5dGVzLCBjb3VudGVyKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NjI2OlxcdFxcdGlwX3NldF9hZGRfcGFja2V0cyhleHQtXFx1MDAzZXBhY2tldHMsIGNvdW50ZXIpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy02MjctXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTc3Nj1pbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6Nzc3OmlwX3NldF9hZGQoaXBfc2V0X2lkX3QgaW5kZXgsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTc3OC1cXHQgICBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIsIHN0cnVjdCBpcF9zZXRfYWR0X29wdCAqb3B0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTc5NS19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjc5NjpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNzk3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyMjo0NC41OTg0OTkyOTRaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2MzI3Mjg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgYGlwc2V0YCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBpcHNldGAgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBlbGVtZW50IGFkZGl0aW9uIHByb2Nlc3MuIEkga25vdyBgaXBfc2V0X2FkZGAgaXMgdGhlIGtlcm5lbC1zaWRlIGZ1bmN0aW9uLCB0aGF0J3MgdGhlIG9uZSB0aGF0IGFjdHVhbGx5IGRvZXMgdGhlIHdvcmsgb2YgYWRkaW5nIHRoZSBJUCBhZGRyZXNzIG9yIG5ldHdvcmsgdG8gdGhlIHNldCB3aXRoaW4gdGhlIGtlcm5lbCdzIGRhdGEgc3RydWN0dXJlcy4gQnV0LCBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCB0aGUgaXNzdWUsIHRoZSBidWcgSSdtIHRyYWNraW5nIGRvd24sIGlzIGFjdHVhbGx5IHdpdGhpbiBgbGlzdF9zZXRfdWFkZGAuIEhhbmcgb24sIHdhc24ndCB0aGF0IHRoZSB1c2Vyc3BhY2UgQVBJPyBBaCB5ZXMsIGB1YWRkYCBzdGFuZHMgZm9yIHVzZXJzcGFjZSBhZGQsIGdvdCBpdC5cblxuT2theSwgc28gYGxpc3Rfc2V0X3VhZGRgIGlzIHRoZSBoYW5kbGVyIGZvciBgW0lQU0VUX0FERF1gIGNvbW1hbmQgdXNlZCBvbiBhIGBsaXN0OnNldGAgdHlwZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZSBjb3JyZWN0IGV4ZWN1dGlvbiBwYXRoIGhlcmUuIExldCBtZSBjaXJjbGUgYmFjayBhbmQgcmUtZXhhbWluZSBgbGlzdF9zZXRfdWFkZGAgdmVyeSBjYXJlZnVsbHkuIE5lZWQgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbnRlcmZhY2luZyB3aXRoIHRoZSBrZXJuZWwgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgbWlnaHQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTMyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjI6NDkuODYxNzc0NjkyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTEzNDI0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaXN0X3NldF91YWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0yMzU9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MjM2Omxpc3Rfc2V0X3VhZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTIzNy1cXHQgICAgICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz01NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IHNldF92YXJpYW50ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy01NjEtXFx0LmFkdFxcdD0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6NTYyOlxcdFxcdFtJUFNFVF9BRERdID0gbGlzdF9zZXRfdWFkZCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTU2My1cXHRcXHRbSVBTRVRfREVMXSA9IGxpc3Rfc2V0X3VkZWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjIyOjQ5LjkwNjkxMzIwOVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDYxNjk4MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgYGxpc3Rfc2V0X3VhZGRgIFVzYWdlKipcblxuQWxyaWdodCwgc28gYGxpc3Rfc2V0X3VhZGRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gdHdvIGRpc3RpbmN0IGNvbnRleHRzOiB0aGUgdXNlcnNwYWNlIGZ1bmN0aW9uIGBsaXN0X3NldF91YWR0YCBhbmQgdGhlIGtlcm5lbHNwYWNlIGZ1bmN0aW9uIGBsaXN0X3NldF9rYWR0YC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaW1tZWRpYXRlbHkgcmFpc2VzIHNvbWUgcXVlc3Rpb25zIGFib3V0IGhvdyB3ZSdyZSBoYW5kbGluZyBkYXRhIHRyYW5zaXRpb25zIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBCZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gdGhlIHJhYmJpdCBob2xlIG9mIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGhhcHBlbmluZyBhdCB0aGUgbG93ZXIgbGV2ZWwgd2l0aCBgbGlzdF9zZXRfa2FkdGAuIExldCBtZSBmaXJzdCB6b29tIGluIG9uIHRoYXQga2VybmVsc3BhY2UgY2FsbCB0byBzZWUgd2hhdCBpdOKAmXMgZG9pbmcsIGhvdyBpdCdzIGJlaW5nIHVzZWQsIGFuZCB3aGF0IGRhdGEgaXQncyBvcGVyYXRpbmcgb24uIFRoYXTigJlsbCBnaXZlIG1lIGEgc29saWQgYmFzZSB0byB1bmRlcnN0YW5kIGFueSBpc3N1ZXMgdGhhdCBtaWdodCBiZSBlbWVyZ2luZyBmcm9tIGludGVyYWN0aW9ucyBiZXR3ZWVuIHVzZXJzcGFjZSBhbmQgdGhlIGtlcm5lbC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzY2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjI6NTQuMzY4NjE0NTEyWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTc3NzYwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaXN0X3NldF9rYWR0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0xMTM9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MTE0Omxpc3Rfc2V0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMTE1LVxcdCAgICAgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBzZXRfdmFyaWFudCA9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjU1OTpcXHQua2FkdFxcdD0gbGlzdF9zZXRfa2FkdCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTU2MC1cXHQudWFkdFxcdD0gbGlzdF9zZXRfdWFkdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjI6NTQuNDM4Mzk2NDg3WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTQ2NzUxNjcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIGBsaXN0X3NldF9rYWR0YCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBhIGtleSBkZXRhaWwgaW4gdGhlIGBsaXN0X3NldF9rYWR0YCBmdW5jdGlvbidzIGJlaGF2aW9yLiBUaGUgY2VudHJhbCBxdWVzdGlvbiBpbiBteSBtaW5kIHJpZ2h0IG5vdyBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgaW50ZXJhY3RzIHdpdGggdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmUg4oCTIHNwZWNpZmljYWxseSwgZG9lcyBpdCB1bHRpbWF0ZWx5IG1ha2UgYSBjYWxsIHRvIGBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XWA/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMsIHdlbGwsICp0aGUqIHVuZGVybHlpbmcgQURULiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBkaXJlY3RseSBhY2Nlc3NlcyBhbmQgbWFuaXB1bGF0ZXMgdGhlIEFEVCB0aHJvdWdoIHRoYXQgYHZhcmlhbnRgIHBvaW50ZXIgYW5kIGFycmF5IGFjY2Vzcy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gY29uZmlybSBob3cgdGhlIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0YS4gVGhpcyBkaXJlY3QgbGluayBpcyBjcml0aWNhbCBmb3IgaG93IHRoaXMgZmVhdHVyZSBpcyBkZXNpZ25lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyOTcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyNToxNS45MDU5MTgwNjJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEzLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTEzOlxcdHN0YXRpYyBpbnRcXG4gMTE0OlxcdGxpc3Rfc2V0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAxMTU6XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbiAxMTY6XFx0XFx0ICAgICAgZW51bSBpcHNldF9hZHQgYWR0LCBzdHJ1Y3QgaXBfc2V0X2FkdF9vcHQgKm9wdClcXG4gMTE3OlxcdHtcXG4gMTE4OlxcdFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIDExOTpcXHRcXHRpbnQgcmV0ID0gLUVJTlZBTDtcXG4gMTIwOlxcdFxcbiAxMjE6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAxMjI6XFx0XFx0c3dpdGNoIChhZHQpIHtcXG4gMTIzOlxcdFxcdGNhc2UgSVBTRVRfVEVTVDpcXG4gMTI0OlxcdFxcdFxcdHJldCA9IGxpc3Rfc2V0X2t0ZXN0KHNldCwgc2tiLCBwYXIsIG9wdCwgXFx1MDAyNmV4dCk7XFxuIDEyNTpcXHRcXHRcXHRicmVhaztcXG4gMTI2OlxcdFxcdGNhc2UgSVBTRVRfQUREOlxcbiAxMjc6XFx0XFx0XFx0cmV0ID0gbGlzdF9zZXRfa2FkZChzZXQsIHNrYiwgcGFyLCBvcHQsIFxcdTAwMjZleHQpO1xcbiAxMjg6XFx0XFx0XFx0YnJlYWs7XFxuIDEyOTpcXHRcXHRjYXNlIElQU0VUX0RFTDpcXG4gMTMwOlxcdFxcdFxcdHJldCA9IGxpc3Rfc2V0X2tkZWwoc2V0LCBza2IsIHBhciwgb3B0LCBcXHUwMDI2ZXh0KTtcXG4gMTMxOlxcdFxcdFxcdGJyZWFrO1xcbiAxMzI6XFx0XFx0ZGVmYXVsdDpcXG4gMTMzOlxcdFxcdFxcdGJyZWFrO1xcbiAxMzQ6XFx0XFx0fVxcbiAxMzU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDEzNjpcXHRcXG4gMTM3OlxcdFxcdHJldHVybiByZXQ7XFxuIDEzODpcXHR9XFxuIDEzOTpcXHRcXG4gMTQwOlxcdC8qIFVzZXJzcGFjZSBpbnRlcmZhY2VzOiB3ZSBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBuZm5sIG11dGV4ICovXFxuIDE0MTpcXHRcXG4gMTQyOlxcdHN0YXRpYyB2b2lkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjI1OjE1LjkwNjA1Njg1MloiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjQxMDA0ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipUcmFjaW5nIHRoZSBEZXBlbmRlbmN5KipcblxuUmlnaHQsIHNvIGBsaXN0X3NldF9rYWR0YC4uLiBpdCdzIGltbWVkaWF0ZWx5IGFwcGFyZW50IHRoYXQgdGhpcyBmdW5jdGlvbiByZWxpZXMgb24gYGxpc3Rfc2V0X2thZGRgLiBObyBzdXJwcmlzZXMgdGhlcmU7IHRoZXkncmUgcHJvYmFibHkgZGVzaWduZWQgdG8gd29yayBpbiB0YW5kZW0uIE15IGZpcnN0IGluc3RpbmN0LCB0aGVuLCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGlubmVyIHdvcmtpbmdzIG9mIGBsaXN0X3NldF9rYWRkYC4gVW5kZXJzdGFuZGluZyAqdGhhdCogZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUga2V5IHRvIGdyYXNwaW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHBhcmFtZXRlcnMsIGl0cyByZXR1cm4gdmFsdWUsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHdpZGVyIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTcxLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyNToyMy4xNDcwNjM3NjVaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3Njg3NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpc3Rfc2V0X2thZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTczPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjc0Omxpc3Rfc2V0X2thZGQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtNzUtXFx0ICAgICAgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0xMTQ9bGlzdF9zZXRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTEyNi1cXHRjYXNlIElQU0VUX0FERDpcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jOjEyNzpcXHRcXHRyZXQgPSBsaXN0X3NldF9rYWRkKHNldCwgc2tiLCBwYXIsIG9wdCwgXFx1MDAyNmV4dCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0xMjgtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjI1OjIzLjIzNDc1NjE2OVoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjgzNDUxMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgbGlzdF9zZXRfa2FkZGAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgb24gYGxpc3Rfc2V0X2thZGRgLiBNeSBleHBlcnQgYnJhaW4gaW1tZWRpYXRlbHkgc3RhcnRzIHRoaW5raW5nOiAqV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IElzIHRoaXMgYSBkYXRhIHN0cnVjdHVyZSBmdW5jdGlvbj8gQSBsaWJyYXJ5IGNhbGw/IEEgc3BlY2lmaWMgQVBJIHdpdGhpbiBhIGRhdGFiYXNlPyogVGhlIG5hbWUgaW1wbGllcyBzb21lIGludGVyYWN0aW9uIGJldHdlZW4gbGlzdHMsIHNldHMsIGFuZCBhIGtleSwgYW5kIHRoZW4gKmFkZGl0aW9uKi4gTXkgYmFja2dyb3VuZCB0ZWxscyBtZSB0aGF0IGBrYWRkYCBzdWdnZXN0cyBhZGRpbmcgZWxlbWVudHMgdG8gYSBrZXksIGFuZCB0aGUgY29tYmluZWQgXCJsaXN0XCIgYW5kIFwic2V0XCIgYXNwZWN0IGlzIHRoZSBwYXJ0IHRoYXQgY2F0Y2hlcyBteSBleWUuXG5cbiogICAqQXJlIHdlIGRlYWxpbmcgd2l0aCBhbiBvcmRlcmVkIGNvbGxlY3Rpb24gKGxpc3QpIGFuZCBhbiB1bm9yZGVyZWQsIHVuaXF1ZSBjb2xsZWN0aW9uIChzZXQpIHNpbXVsdGFuZW91c2x5LCBwZXJoYXBzIHN0b3JpbmcgdGhlIGxpc3QgYW5kIHNldCBhcyBzZXBhcmF0ZSBlbnRpdGllcyBidXQgaGF2aW5nIHRoZW0gcmVsYXRlZCBieSB0aGUgc2FtZSBrZXk/KiBPciwgaXMgdGhpcyBzb21lIGh5YnJpZCBkYXRhIHN0cnVjdHVyZT8gSXMgdGhlIGxpc3QgaW50ZW5kZWQgdG8gbWFpbnRhaW4gb3JkZXIsIHdpdGggdGhlIHNldCBlbnN1cmluZyBubyBkdXBsaWNhdGVzIHdoZW4gbmV3IGVsZW1lbnRzIGFyZSBhZGRlZD8gSSBpbW1lZGlhdGVseSBzdGFydCBjb21wYXJpbmcgdGhpcyB3aXRoIGFsdGVybmF0aXZlIGRhdGEgc3RydWN0dXJlIHBvc3NpYmlsaXRpZXM6IHdoYXQncyB0aGUgdXNlIGNhc2U/IENvdWxkIHRoaXMgYmUgdXNlZnVsIGZvciBtYWludGFpbmluZyBhIGhpc3Rvcnkgb2Ygc29tZXRoaW5nIGluIHRoZSBsaXN0LCB0aGVuIHVzaW5nIHRoZSBzZXQgdG8gZmluZCBkdXBsaWNhdGVzLCBvciBhIGZhc3QgbG9va3VwIG9uIHRoZSBsaXN0IGNvbnRlbnQ/IEkgd29uZGVyIGFib3V0IGhvdyB0aGUgaW5zZXJ0aW9uIHRpbWUgb2YgdGhlIGxpc3QgYW5kIHNldCBvcGVyYXRpb25zIGltcGFjdCBwZXJmb3JtYW5jZS5cbiogICAqV2hhdCdzIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uPyogQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBjdXN0b20gaW1wbGVtZW50YXRpb24gb3IgbGV2ZXJhZ2luZyBleGlzdGluZyBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ugb3IgZGF0YWJhc2U/IEtub3dpbmcgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gaXMga2V5IHRvIGV2YWx1YXRpbmcgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGxpa2UgdGltZSBjb21wbGV4aXR5IGZvciBkaWZmZXJlbnQgb3BlcmF0aW9ucyAoYWRkaW5nIHRvIHRoZSBsaXN0LCBhZGRpbmcgdG8gdGhlIHNldCwgY2hlY2tpbmcgZm9yIG1lbWJlcnNoaXAgaW4gZWl0aGVyIHN0cnVjdHVyZSwgZXRjLikuXG5cbkknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZG93bnNpZGVzLiAqSXMgdGhlcmUgYSBtZW1vcnkgb3ZlcmhlYWQgaGVyZT8gTWFpbnRhaW5pbmcgYm90aCBzdHJ1Y3R1cmVzIGZvciB0aGUgc2FtZSBrZXkgY291bGQgYmUgY29zdGx5LCBwYXJ0aWN1bGFybHkgaWYgdGhlIGRhdGFzZXQgaXMgbGFyZ2UuKiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGNvbmZsaWN0cyBhbmQgdW5pcXVlbmVzcy4gRG9lcyBpdCByZXBsYWNlIGFuIGV4aXN0aW5nIGxpc3Qgb3Igc2V0PyBPciBtZXJnZSBvciBhcHBlbmQgdG8gdGhlIGV4aXN0aW5nIGxpc3Qgb3Igc2V0PyBPciwgZG9lcyBpdCByZXR1cm4gYW4gZXJyb3I/XG5cblVsdGltYXRlbHksIG15IHRob3VnaHRzIGFyZSBnb2luZyB0b3dhcmQgd2hhdCB0aGUgZnVuY3Rpb24gYWNjb21wbGlzaGVzIGZyb20gdGhlIGdyb3VuZCB1cCwgYW5kIHRoZW4gY29tcGFyaW5nIGl0IHRvIHdoYXQgSSBrbm93IHRvIGFycml2ZSBhdCBpdHMgcG9zc2libGUgdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ1NSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjI1OjI4LjkxODIxMTgxOFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MzpcXHRzdGF0aWMgaW50XFxuICA3NDpcXHRsaXN0X3NldF9rYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gIDc1OlxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcixcXG4gIDc2OlxcdFxcdCAgICAgIHN0cnVjdCBpcF9zZXRfYWR0X29wdCAqb3B0LCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0KVxcbiAgNzc6XFx0e1xcbiAgNzg6XFx0XFx0c3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxuICA3OTpcXHRcXHRzdHJ1Y3Qgc2V0X2VsZW0gKmU7XFxuICA4MDpcXHRcXHRpbnQgcmV0O1xcbiAgODE6XFx0XFxuICA4MjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlLCBcXHUwMDI2bWFwLVxcdTAwM2VtZW1iZXJzLCBsaXN0KSB7XFxuICA4MzpcXHRcXHRcXHRpZiAoU0VUX1dJVEhfVElNRU9VVChzZXQpIFxcdTAwMjZcXHUwMDI2XFxuICA4NDpcXHRcXHRcXHQgICAgaXBfc2V0X3RpbWVvdXRfZXhwaXJlZChleHRfdGltZW91dChlLCBzZXQpKSlcXG4gIDg1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAgODY6XFx0XFx0XFx0cmV0ID0gaXBfc2V0X2FkZChlLVxcdTAwM2VpZCwgc2tiLCBwYXIsIG9wdCk7XFxuICA4NzpcXHRcXHRcXHRpZiAocmV0ID09IDApXFxuICA4ODpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAgODk6XFx0XFx0fVxcbiAgOTA6XFx0XFx0cmV0dXJuIDA7XFxuICA5MTpcXHR9XFxuICA5MjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjU6MjguOTE4MzUyNzI4WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NTI2OTUxMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgYGxpc3Rfc2V0YCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGVzZSBgbGlzdF9zZXRgIG9wZXJhdGlvbnMgd29yay4gVGhlIHRoaW5nIHRoYXQncyBpbW1lZGlhdGVseSBncmFiYmluZyBteSBhdHRlbnRpb24gaXMgdGhhdCBgbGlzdF9zZXRfa2FkZGAgKmRvZXNuJ3QqIGFwcGVhciB0byBjYWxsIGBsaXN0X3NldF91YWRkYC4gVGhhdCdzIGludGVyZXN0aW5nLCBiZWNhdXNlIHVzdWFsbHkgeW91J2QgZXhwZWN0IGEgbW9yZSBncmFudWxhciBhZGQgZnVuY3Rpb24gbGlrZSBgdWFkZGAgKHdoaWNoIHByZXN1bWFibHkgc3RhbmRzIGZvciBcInVuaXF1ZSBhZGRcIiBvciBzb21ldGhpbmcgc2ltaWxhcikgdG8gYmUgYSBidWlsZGluZyBibG9jayBmb3IgbW9yZSBjb21wbGV4IG9wZXJhdGlvbnMuXG5cbkl0IHNlZW1zIGBsaXN0X3NldF91YWRkYCBpcyBvbmx5IGludm9rZWQgZnJvbSBgbGlzdF9zZXRfdWFkdGAuIFRoaXMgc3VnZ2VzdHMgYSBzcGVjaWZpYyByZWxhdGlvbnNoaXAgb3Igb3B0aW1pemF0aW9uLCBwZXJoYXBzIHRpZWQgdG8gaG93IFwidW5pcXVlXCIgYWRkaXRpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgYnJvYWRlciBgbGlzdF9zZXRgIGNvbnRleHQuXG5cblRoZXJlZm9yZSwgbGV0J3Mgc2hpZnQgb3VyIGZvY3VzIHRvIGBsaXN0X3NldF91YWR0YCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBsb2dpYyB0aGVyZS4gVGhhdCdzIHRoZSBrZXkgdG8gZmlndXJpbmcgb3V0IHdoeSBgdWFkZGAgaXMgYmVpbmcgdXNlZCB0aGUgd2F5IGl0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDI2NiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjU6MzQuNDcxMDUxNjQ2WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1MjpcXHRzdGF0aWMgaW50XFxuIDM1MzpcXHRsaXN0X3NldF91YWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4gMzU0OlxcdFxcdCAgICAgIGVudW0gaXBzZXRfYWR0IGFkdCwgdTMyICpsaW5lbm8sIHUzMiBmbGFncywgYm9vbCByZXRyaWVkKVxcbiAzNTU6XFx0e1xcbiAzNTY6XFx0XFx0c3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxuIDM1NzpcXHRcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxuIDM1ODpcXHRcXHRzdHJ1Y3Qgc2V0X2FkdF9lbGVtIGUgPSB7IC5yZWZpZCA9IElQU0VUX0lOVkFMSURfSUQgfTtcXG4gMzU5OlxcdFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX1VFWFQoc2V0KTtcXG4gMzYwOlxcdFxcdHN0cnVjdCBpcF9zZXQgKnM7XFxuIDM2MTpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gMzYyOlxcdFxcbiAzNjM6XFx0XFx0aWYgKHRiW0lQU0VUX0FUVFJfTElORU5PXSlcXG4gMzY0OlxcdFxcdFxcdCpsaW5lbm8gPSBubGFfZ2V0X3UzMih0YltJUFNFVF9BVFRSX0xJTkVOT10pO1xcbiAzNjU6XFx0XFxuIDM2NjpcXHRcXHRpZiAodW5saWtlbHkoIXRiW0lQU0VUX0FUVFJfTkFNRV0gfHxcXG4gMzY3OlxcdFxcdFxcdCAgICAgIWlwX3NldF9vcHRhdHRyX25ldG9yZGVyKHRiLCBJUFNFVF9BVFRSX0NBRFRfRkxBR1MpKSlcXG4gMzY4OlxcdFxcdFxcdHJldHVybiAtSVBTRVRfRVJSX1BST1RPQ09MO1xcbiAzNjk6XFx0XFxuIDM3MDpcXHRcXHRyZXQgPSBpcF9zZXRfZ2V0X2V4dGVuc2lvbnMoc2V0LCB0YiwgXFx1MDAyNmV4dCk7XFxuIDM3MTpcXHRcXHRpZiAocmV0KVxcbiAzNzI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzczOlxcdFxcdGUuaWQgPSBpcF9zZXRfZ2V0X2J5bmFtZShtYXAtXFx1MDAzZW5ldCwgdGJbSVBTRVRfQVRUUl9OQU1FXSwgXFx1MDAyNnMpO1xcbiAzNzQ6XFx0XFx0aWYgKGUuaWQgPT0gSVBTRVRfSU5WQUxJRF9JRClcXG4gMzc1OlxcdFxcdFxcdHJldHVybiAtSVBTRVRfRVJSX05BTUU7XFxuIDM3NjpcXHRcXHQvKiBcXFwiTG9vcCBkZXRlY3Rpb25cXFwiICovXFxuIDM3NzpcXHRcXHRpZiAocy1cXHUwMDNldHlwZS1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBJUFNFVF9UWVBFX05BTUUpIHtcXG4gMzc4OlxcdFxcdFxcdHJldCA9IC1JUFNFVF9FUlJfTE9PUDtcXG4gMzc5OlxcdFxcdFxcdGdvdG8gZmluaXNoO1xcbiAzODA6XFx0XFx0fVxcbiAzODE6XFx0XFxuIDM4MjpcXHRcXHRpZiAodGJbSVBTRVRfQVRUUl9DQURUX0ZMQUdTXSkge1xcbiAzODM6XFx0XFx0XFx0dTMyIGYgPSBpcF9zZXRfZ2V0X2gzMih0YltJUFNFVF9BVFRSX0NBRFRfRkxBR1NdKTtcXG4gMzg0OlxcdFxcbiAzODU6XFx0XFx0XFx0ZS5iZWZvcmUgPSBmIFxcdTAwMjYgSVBTRVRfRkxBR19CRUZPUkU7XFxuIDM4NjpcXHRcXHR9XFxuIDM4NzpcXHRcXG4gMzg4OlxcdFxcdGlmIChlLmJlZm9yZSBcXHUwMDI2XFx1MDAyNiAhdGJbSVBTRVRfQVRUUl9OQU1FUkVGXSkge1xcbiAzODk6XFx0XFx0XFx0cmV0ID0gLUlQU0VUX0VSUl9CRUZPUkU7XFxuIDM5MDpcXHRcXHRcXHRnb3RvIGZpbmlzaDtcXG4gMzkxOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjU6MzQuNDcxMjMxODQ2WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTE4NzI1NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW5kIG15IGludGVybmFsIG1vbm9sb2d1ZSBvbiB0aGUgbWF0dGVyOlxuXG4qKkRpc3NlY3RpbmcgdGhlIGBhZHRmbmAgQ2FsbCoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgdGhpcyBwYXJ0aWN1bGFyIGxpbmUgb2YgY29kZSwgYW5kIGl0J3MgY2FsbGluZyBgYWR0Zm5gIHdpdGggdGhlIHBhcmFtZXRlcnMgYHNldGAsIGBcdTAwMjZlYCwgYFx1MDAyNmV4dGAsIGBcdTAwMjZleHRgLCBhbmQgYGZsYWdzYC4gVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGllY2UgaGVyZSBpcyB0aGUgdXNlIG9mIHRob3NlIFx1MDAyNmV4dCBwYXJhbWV0ZXJzLiBTaW5jZSBJIGtub3cgdGhpcyBjb2RlLCBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIGRhdGEgc3RydWN0dXJlcy4gVGhlIHVzZSBvZiB0aGUgYWRkcmVzcy1vZiBvcGVyYXRvciBpbXBsaWVzIHRoZXNlIGFyZSBwcm9iYWJseSBwb2ludGVycy4gTGV0J3Mgc2VlLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGFkdGZuYCBkb2VzIGFuZCBzcGVjaWZpY2FsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIGBzZXRgLCBgZWAsIGBleHRgLCBhbmQgdGhlc2UgYGZsYWdzYC4gVGhpcyBwcm9iYWJseSBtZWFucyBJIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZGVmaW5pdGlvbnMgZm9yIHRoZXNlIHZhcmlhYmxlcyB0b28sIGJ1dCBsZXQncyBnbyB3aXRoIHRoZSBjYWxsIGl0c2VsZiBmb3Igbm93LiBJJ20gYXNzdW1pbmcgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgZWxzZXdoZXJlIGFzIHdlbGwsIHNvIEknbGwgbmVlZCB0byBnbyBmaW5kIGl0cyBkZWZpbml0aW9uLiBOb3cgdGhhdCBJIGhhdmUgdGhpcyBhcyB0aGUgc3RhcnRpbmcgcG9pbnQsIGxldCdzIGxvb2sgYXQgYGxpc3Rfc2V0X3VhZHRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI3NiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjU6NDkuNTg5OTYxNTE2WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5MixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM5MjpcXHRcXG4gMzkzOlxcdFxcdGlmICh0YltJUFNFVF9BVFRSX05BTUVSRUZdKSB7XFxuIDM5NDpcXHRcXHRcXHRlLnJlZmlkID0gaXBfc2V0X2dldF9ieW5hbWUobWFwLVxcdTAwM2VuZXQsXFxuIDM5NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgdGJbSVBTRVRfQVRUUl9OQU1FUkVGXSxcXG4gMzk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cyk7XFxuIDM5NzpcXHRcXHRcXHRpZiAoZS5yZWZpZCA9PSBJUFNFVF9JTlZBTElEX0lEKSB7XFxuIDM5ODpcXHRcXHRcXHRcXHRyZXQgPSAtSVBTRVRfRVJSX05BTUVSRUY7XFxuIDM5OTpcXHRcXHRcXHRcXHRnb3RvIGZpbmlzaDtcXG4gNDAwOlxcdFxcdFxcdH1cXG4gNDAxOlxcdFxcdFxcdGlmICghZS5iZWZvcmUpXFxuIDQwMjpcXHRcXHRcXHRcXHRlLmJlZm9yZSA9IC0xO1xcbiA0MDM6XFx0XFx0fVxcbiA0MDQ6XFx0XFx0aWYgKGFkdCAhPSBJUFNFVF9URVNUIFxcdTAwMjZcXHUwMDI2IFNFVF9XSVRIX1RJTUVPVVQoc2V0KSlcXG4gNDA1OlxcdFxcdFxcdHNldF9jbGVhbnVwX2VudHJpZXMoc2V0KTtcXG4gNDA2OlxcdFxcbiA0MDc6XFx0XFx0cmV0ID0gYWR0Zm4oc2V0LCBcXHUwMDI2ZSwgXFx1MDAyNmV4dCwgXFx1MDAyNmV4dCwgZmxhZ3MpO1xcbiA0MDg6XFx0XFxuIDQwOTpcXHRmaW5pc2g6XFxuIDQxMDpcXHRcXHRpZiAoZS5yZWZpZCAhPSBJUFNFVF9JTlZBTElEX0lEKVxcbiA0MTE6XFx0XFx0XFx0aXBfc2V0X3B1dF9ieWluZGV4KG1hcC1cXHUwMDNlbmV0LCBlLnJlZmlkKTtcXG4gNDEyOlxcdFxcdGlmIChhZHQgIT0gSVBTRVRfQUREIHx8IHJldClcXG4gNDEzOlxcdFxcdFxcdGlwX3NldF9wdXRfYnlpbmRleChtYXAtXFx1MDAzZW5ldCwgZS5pZCk7XFxuIDQxNDpcXHRcXG4gNDE1OlxcdFxcdHJldHVybiBpcF9zZXRfZWV4aXN0KHJldCwgZmxhZ3MpID8gMCA6IHJldDtcXG4gNDE2OlxcdH1cXG4gNDE3OlxcdFxcbiA0MTg6XFx0c3RhdGljIHZvaWRcXG4gNDE5OlxcdGxpc3Rfc2V0X2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcXG4gNDIwOlxcdHtcXG4gNDIxOlxcdFxcdHN0cnVjdCBsaXN0X3NldCAqbWFwID0gc2V0LVxcdTAwM2VkYXRhO1xcbiA0MjI6XFx0XFx0c3RydWN0IHNldF9lbGVtICplLCAqbjtcXG4gNDIzOlxcdFxcbiA0MjQ6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG4sIFxcdTAwMjZtYXAtXFx1MDAzZW1lbWJlcnMsIGxpc3QpXFxuIDQyNTpcXHRcXHRcXHRsaXN0X3NldF9kZWwoc2V0LCBlKTtcXG4gNDI2OlxcdFxcdHNldC1cXHUwMDNlZWxlbWVudHMgPSAwO1xcbiA0Mjc6XFx0XFx0YXRvbWljNjRfc2V0KFxcdTAwMjZzZXQtXFx1MDAzZWV4dF9zaXplLCAwKTtcXG4gNDI4OlxcdH1cXG4gNDI5OlxcdFxcbiA0MzA6XFx0c3RhdGljIHZvaWRcXG4gNDMxOlxcdGxpc3Rfc2V0X2Rlc3Ryb3koc3RydWN0IGlwX3NldCAqc2V0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyNTo0OS41OTAwNzczODZaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQxNzYzNzEzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEYXRhIFN0cnVjdHVyZSBVcGRhdGVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYGxpc3Rfc2V0X3VhZHRgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlLCBhbmQgaXQgY2FsbHMgYGFkdGZuYCwgc3BlY2lmaWNhbGx5IGBsaXN0X3NldF91YWRkYC4gSXQncyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSBhc2ssIFwiV2hlcmUgZWxzZSBpcyB0aGlzIGJlaW5nIGNhbGxlZD9cIiBUaGUgc3RhdGljIG5hdHVyZSBsaW1pdHMgaXRzIHNjb3BlLCBzbyBpdCdzIGtleSB0byBpZGVudGlmeSBpdHMgZW50cnkgcG9pbnRzLlxuXG5Ob3csIHRoZSBjb25uZWN0aW9uIHNlZW1zIHRvIGJlIHRocm91Z2ggYHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZXVhZHRgLCB3aGljaCBnZXRzIGludm9rZWQgdmlhIGBjYWxsX2FkYCBpbnNpZGUgYGlwX3NldF9jb3JlLmNgLiBIbW0sIGBjYWxsX2FkYCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBpcF9zZXRfdWFkZGAgYW5kIGBpcF9zZXRfdWRlbGAuIEludGVyZXN0aW5nLiBgaXBfc2V0X3VhZGRgIGlzIGFsc28gc3RhdGljLiBUaGlzIHN1Z2dlc3RzIHRoYXQgaXQgbWlnaHQgYmUgYW4gaW50ZXJuYWwgaGVscGVyLCBidXQgc3RpbGwsIHdoZXJlJ3MgaXRzIGVudHJ5P1xuXG5BaCwgaXQgc2VlbXMgYGlwX3NldF91YWRkYCBpcyByZWdpc3RlcmVkIGluIGBpcF9zZXRfbmV0bGlua19zdWJzeXNfY2JgIGluIGBpcF9zZXRfY29yZS5jYC4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmbG93LiBUbyBiZSBjZXJ0YWluLCBJIG5lZWQgdG8gY2hlY2sgYGlwX3NldF9uZXRsaW5rX3N1YnN5c19jYmAgYXMgdGhhdCBpcyB0aGUgcmVnaXN0cmF0aW9uIHBvaW50IGZvciBgaXBfc2V0X3VhZGRgIHdoaWNoIGV2ZW50dWFsbHkgZ2V0cyB0byBgbGlzdF9zZXRfdWFkdGAuIExldCdzIGNvbmZpcm0gaG93IHRoZSBuZXRsaW5rIGNhbGxiYWNrcyBhcmUgc2V0IHVwIGFuZCBob3cgZGF0YSBnZXRzIHRvIGBpcF9zZXRfdWFkZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjIzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjY6MDMuNzY2NDUzODI4WiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDU2MTU4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zZXRfbmV0bGlua19zdWJzeXNfY2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yMTA1PXN0YXRpYyBpbnQgaXBfc2V0X2J5aW5kZXgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTQ2LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMTQ3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBpcF9zZXRfbmV0bGlua19zdWJzeXNfY2JbSVBTRVRfTVNHX01BWF0gPSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIxNDgtXFx0W0lQU0VUX0NNRF9OT05FXVxcdD0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTIyNDU9c3RhdGljIHN0cnVjdCBuZm5ldGxpbmtfc3Vic3lzdGVtIGlwX3NldF9uZXRsaW5rX3N1YnN5cyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIyNDgtXFx0LmNiX2NvdW50XFx0PSBJUFNFVF9NU0dfTUFYLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMjQ5OlxcdC5jYlxcdFxcdD0gaXBfc2V0X25ldGxpbmtfc3Vic3lzX2NiLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMjUwLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjI2OjAzLjg0MTAyMjAxNFoiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjM2OTEyMzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIEZ1bmN0aW9uIFNlbGVjdGlvbiBmb3IgTmV0bGluayBDb21tYW5kcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG5ldGxpbmsgY29tbWFuZHMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZmluZCBhbiBleHBvcnRlZCBmdW5jdGlvbi4gSSBjb25zaWRlcmVkIGBpcF9zZXRfYWRkYCBhdCBmaXJzdCwgYnV0IHRoYXQncyBrZXJuZWwtc3BhY2UsIHNvIEkgbmVlZCBzb21ldGhpbmcgdXNlci1zcGFjZSBhY2Nlc3NpYmxlLiBUaGVuIEkgcmVtZW1iZXJlZCBgbGlzdF9zZXRfdWFkZGAgd2FzIG1vZGlmaWVkLiBJcyB0aGlzIHRoZSByaWdodCBmdW5jdGlvbj9cblxuVGhlIHByb21wdCBzcGVjaWZpZXMgdGhhdCBJIHNob3VsZCBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBJZiBgbGlzdF9zZXRfdWFkZGAgaXMgc3RhdGljLCB0aGF0J3Mgbm90IGlkZWFsLiBIb3dldmVyLCBsb29raW5nIGRlZXBlciwgSSBzZWUgaXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgYXJyYXksIHNwZWNpZmljYWxseSBgc2V0X3ZhcmlhbnQuYWR0W0lQU0VUX0FERF1gLiBUaGF0J3MgdGhlIGtleSEgQmVjYXVzZSBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgaXQgKmNhbm5vdCogYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFRoaXMgbWVhbnMgaXQgd2lsbCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIGV2ZW4gaWYgaXQncyB0ZWNobmljYWxseSBhIGhlbHBlciBmdW5jdGlvbi4gSSBjYW4ndCBkaXJlY3RseSB2ZXJpZnkgdGhlIHN5bWJvbCB0YWJsZSByaWdodCBub3csIGJ1dCB0aGF0J3MgbXkgZXhwZXJpZW5jZSBpbiBwcmFjdGljZSB3aXRoIGZ1bmN0aW9uIHBvaW50ZXJzLlxuXG5TbywgYGxpc3Rfc2V0X3VhZGRgIGlzIHBlcmZlY3RseSBhY2NlcHRhYmxlIGFzIGEgZm9jdXMgZnVuY3Rpb24uIEJ1dCBsZXQncyBjaGVjayBvbmUgbW9yZS4gV2hhdCBhYm91dCBgaXBfc2V0X3VhZGRgPyBBaCwgaXQncyBhbHNvIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgYC5jYWxsID0gaXBfc2V0X3VhZGRgLiBTYW1lIGRlYWwuIFNvLCBgaXBfc2V0X3VhZGRgIGlzIGFsc28gbm9uLWlubGluZWQuIEkgY2FuIHByb3ZpZGUgYm90aCBgbGlzdF9zZXRfdWFkZGAgYW5kIGBpcF9zZXRfdWFkZGAgYXMgdmFsaWQgb3B0aW9ucy5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIHF1aWNrbHkgcmV2aWV3aW5nIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSdtIGNoZWNraW5nIGBJUF9TRVRgIGFuZCBgSVBfU0VUX0xJU1RfU0VUYCBhZ2Fpbi4gSSBuZWVkIHRvIGVuc3VyZSBldmVyeXRoaW5nIGFsaWducyB3aXRoIHRoZSBvdmVyYWxsIHN5c3RlbSBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGRlcGVuZGVuY2llcyBvbiBgSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSYC4gSSdsbCBkb3VibGUtY2hlY2sgYElQX1NFVF9MSVNUX1NFVGAgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMwNTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjY6MTAuNDc3OTM5MDc5WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODM0MTk5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfU0VUX0xJU1RfU0VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9MTU4PWNvbmZpZyBJUF9TRVRfSEFTSF9ORVRJRkFDRVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTY4OmNvbmZpZyBJUF9TRVRfTElTVF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY5LVxcdHRyaXN0YXRlIFxcXCJsaXN0OnNldCBzZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjY6MTAuNTQ2Mjg2NzU0WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTMyMjczODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBJUHNldCBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciBJUHNldC4gTGV0J3MgZ2V0IHJpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBtZW50YWwgbWFwIHRlbGxzIG1lIHRoYXQgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2AgaXMgdGhlIGxpa2VseSBwbGFjZSBmb3IgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgMTY4IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgc2VjdGlvbiBwcm9iYWJseSBob2xkcyB0aGUga2V5IHBhcmFtZXRlcnMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5ODUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyNjoxNS4yMzk1MTY2NTJaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2NTpcXHRcXG4gMTY2OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE2NzpcXHRcXG4gMTY4OlxcdGNvbmZpZyBJUF9TRVRfTElTVF9TRVRcXG4gMTY5OlxcdFxcdHRyaXN0YXRlIFxcXCJsaXN0OnNldCBzZXQgc3VwcG9ydFxcXCJcXG4gMTcwOlxcdFxcdGRlcGVuZHMgb24gSVBfU0VUXFxuIDE3MTpcXHRcXHRoZWxwXFxuIDE3MjpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGxpc3Q6c2V0IHNldCB0eXBlIHN1cHBvcnQuIEluIHRoaXNcXG4gMTczOlxcdFxcdCAga2luZCBvZiBzZXQgb25lIGNhbiBzdG9yZSB0aGUgbmFtZSBvZiBvdGhlciBzZXRzIGFuZCBpdCBmb3Jtc1xcbiAxNzQ6XFx0XFx0ICBhbiBvcmRlcmVkIHVuaW9uIG9mIHRoZSBtZW1iZXIgc2V0cy5cXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTc3OlxcdFxcbiAxNzg6XFx0Y29uZmlnIEdDT1ZfUFJPRklMRV9JUFNFVFxcbiAxNzk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBpcHNldFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjY6MTUuMjM5NTg1OTcyWiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTk2NzQzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSVAgU2V0IERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIGNvbmRpdGlvbmFsIGhlcmUuIFRoZSBiZWhhdmlvciBvZiB3aGF0ZXZlciBJJ20gbG9va2luZyBhdCBoaW5nZXMgb24gdGhlIHN0YXRlIG9mIGBJUF9TRVRgLiBUaGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBJUF9TRVRgIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQgY29udHJvbHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIExldCdzIGRpdmUgaW50byBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYCwgc3RhcnRpbmcgcmlnaHQgYXQgdGhlIHRvcCwgYXJvdW5kIGxpbmUgMS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBkZXBlbmRlbmN5IHN0cnVjdHVyZS4gRnJvbSB0aGVyZSwgSSBzaG91bGQgYmUgYWJsZSB0byBhc2NlcnRhaW4gdGhlIGNvbmRpdGlvbnMgd2hpY2ggbmVjZXNzaXRhdGUgdXNpbmcgYElQX1NFVGAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDM5OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjY6MTguNTk5MjY0MDMyWiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjAzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnVjb25maWcgSVBfU0VUXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiSVAgc2V0IHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSXFxuICAgNTpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBJUCBzZXQgc3VwcG9ydCB0byB0aGUga2VybmVsLlxcbiAgIDg6XFx0XFx0ICBJbiBvcmRlciB0byBkZWZpbmUgYW5kIHVzZSB0aGUgc2V0cywgeW91IG5lZWQgdGhlIHVzZXJzcGFjZSB1dGlsaXR5XFxuICAgOTpcXHRcXHQgIGlwc2V0KDgpLiBZb3UgY2FuIHVzZSB0aGUgc2V0cyBpbiBuZXRmaWx0ZXIgdmlhIHRoZSBcXFwic2V0XFxcIiBtYXRjaFxcbiAgMTA6XFx0XFx0ICBhbmQgXFxcIlNFVFxcXCIgdGFyZ2V0LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRpZiBJUF9TRVRcXG4gIDE1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjoyNjoxOC41OTkzODg4MDFaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1OTE4MzU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgSVAgU2V0IExpc3QgU2V0KipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMuIFRoZSBjb2RlIHJlbGllcyBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgLCB0aGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEknbSBwcmV0dHkgc3VyZSB0aG9zZSBhcmUgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gbW9zdCBjb25maWdzLCBidXQgaXQncyBhbHdheXMgc21hcnQgdG8gZG91YmxlLWNoZWNrLCBzbyBJJ2xsIGluY2x1ZGUgdGhlbS4gQWN0dWFsbHksIHRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byBjaGVjayB0aGUgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gdGhlIEtjb25maWcgZmlsZXMgdG9vLCB0byBtYWtlIHN1cmUgSSBnZXQgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgaW5jbHVkZWQuIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAgYXJlIHByZXR0eSBzdGFuZGFyZCwgYnV0IGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIGluY2x1ZGUgdGhlbSBhbG9uZ3NpZGUgYElQX1NFVGAgYW5kIGBJUF9TRVRfTElTVF9TRVRgLiBZZXMsIEknbGwgZ28gd2l0aCBgTkVURklMVEVSYCwgYElQX1NFVGAsIGFuZCBgSVBfU0VUX0xJU1RfU0VUYC5cblxuTm93LCBsZXQncyBnbyBiYWNrIHRvIHRoYXQgcGF0Y2guIEkgc2VlIGl0J3MgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNgLCBhZGRpbmcgYSBgcmV0dXJuIDA7YCB3aXRoaW4gdGhlIGBpZiAobilgIGJsb2NrLiBCZWZvcmUgdGhlIHBhdGNoLCBpZiBgbmAgd2Fzbid0IE5VTEwsIHdlJ2QgY2FsbCBgbGlzdF9zZXRfcmVwbGFjZWAsIGJ1dCB0aGUgY29kZSB3b3VsZCBjb250aW51ZSBleGVjdXRpbmcuIEl0IHdvdWxkIHRoZW4gY2FsbCBgc2V0LVx1MDAzZWVsZW1lbnRzKys7YCBhbmQgZmluYWxseSBgcmV0dXJuIDA7YCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4gQWgsIHRoaXMgbG9va3MgbGlrZSBhIGJ1ZyBmaXguIEl0IHNlZW1zIGxpa2UgdGhlIGludGVudGlvbiB3YXMgdG8gcmV0dXJuIGVhcmx5IGFmdGVyIHRoZSByZXBsYWNlbWVudC4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGJ5IGNoZWNraW5nIHRoZSBvcmlnaW5hbCBjb2RlIGZvciBgbGlzdF9zZXRfdWFkZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0ODIwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjY6MjYuNzU4NTc2NTcxWiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5NTpcXHRcXHRcXHRuID0gTlVMTDtcXG4gMjk2OlxcdFxcbiAyOTc6XFx0XFx0ZSA9IGt6YWxsb2Moc2V0LVxcdTAwM2Vkc2l6ZSwgR0ZQX0FUT01JQyk7XFxuIDI5ODpcXHRcXHRpZiAoIWUpXFxuIDI5OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzAwOlxcdFxcdGUtXFx1MDAzZWlkID0gZC1cXHUwMDNlaWQ7XFxuIDMwMTpcXHRcXHRlLVxcdTAwM2VzZXQgPSBzZXQ7XFxuIDMwMjpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZS1cXHUwMDNlbGlzdCk7XFxuIDMwMzpcXHRcXHRsaXN0X3NldF9pbml0X2V4dGVuc2lvbnMoc2V0LCBleHQsIGUpO1xcbiAzMDQ6XFx0XFx0aWYgKG4pIHtcXG4gMzA1OlxcdFxcdFxcdGxpc3Rfc2V0X3JlcGxhY2Uoc2V0LCBlLCBuKTtcXG4gMzA2OlxcdFxcdFxcdHJldHVybiAwO1xcbiAzMDc6XFx0XFx0fVxcbiAzMDg6XFx0XFxuIDMwOTpcXHRcXHRlbHNlIGlmIChuZXh0KVxcbiAzMTA6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNmUtXFx1MDAzZWxpc3QsIFxcdTAwMjZuZXh0LVxcdTAwM2VsaXN0KTtcXG4gMzExOlxcdFxcdGVsc2UgaWYgKHByZXYpXFxuIDMxMjpcXHRcXHRcXHRsaXN0X2FkZF9yY3UoXFx1MDAyNmUtXFx1MDAzZWxpc3QsIFxcdTAwMjZwcmV2LVxcdTAwM2VsaXN0KTtcXG4gMzEzOlxcdFxcdGVsc2VcXG4gMzE0OlxcdFxcdFxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZlLVxcdTAwM2VsaXN0LCBcXHUwMDI2bWFwLVxcdTAwM2VtZW1iZXJzKTtcXG4gMzE1OlxcdFxcdHNldC1cXHUwMDNlZWxlbWVudHMrKztcXG4gMzE2OlxcdFxcbiAzMTc6XFx0XFx0cmV0dXJuIDA7XFxuIDMxODpcXHR9XFxuIDMxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MjY6MjYuNzU4NzAzMDgxWiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDAwNTg2MDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBpcHNldCBQYXRjaCoqXG5cbk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIFByZS1wYXRjaCwgdGhlIGNvZGUgbG9va2VkIGxpa2UgdGhpczpcblxuYGBgY1xuXHRpZiAobilcblx0XHRsaXN0X3NldF9yZXBsYWNlKHNldCwgZSwgbik7XG5cdGVsc2UgaWYgKG5leHQpXG5cdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2ZS1cdTAwM2VsaXN0LCBcdTAwMjZuZXh0LVx1MDAzZWxpc3QpO1xuXHRlbHNlIGlmIChwcmV2KVxuXHRcdGxpc3RfYWRkX3JjdShcdTAwMjZlLVx1MDAzZWxpc3QsIFx1MDAyNnByZXYtXHUwMDNlbGlzdCk7XG5cdGVsc2Vcblx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZlLVx1MDAzZWxpc3QsIFx1MDAyNm1hcC1cdTAwM2VtZW1iZXJzKTtcblx0c2V0LVx1MDAzZWVsZW1lbnRzKys7XG5cblx0cmV0dXJuIDA7XG5gYGBcblxuUmlnaHQsIHNvIHRoZSBsb2dpYyB3YXMgdGhhdCBpZiBgbmAgd2FzIG5vbi16ZXJvLCBpdCB3b3VsZCBjYWxsIGBsaXN0X3NldF9yZXBsYWNlYC4gVGhlIHByb2JsZW0gaXMsIGBsaXN0X3NldF9yZXBsYWNlYCBzaW1wbHkgKnJlcGxhY2VzKiBhbiBleGlzdGluZyBlbGVtZW50OyBpdCBkb2Vzbid0IGFjdHVhbGx5ICphZGQqIG9uZS4gQnV0IHRoZSBjb2RlIHRoZW4gYmxpbmRseSBpbmNyZW1lbnRzIGBzZXQtXHUwMDNlZWxlbWVudHNgLCBsZWFkaW5nIHRvIGEgY291bnQgbWlzbWF0Y2guIFRoZSBwYXRjaCBjbGV2ZXJseSBpbnNlcnRzIGEgYHJldHVybiAwO2AgYWZ0ZXIgYGxpc3Rfc2V0X3JlcGxhY2VgLiBUaGlzIHByZXZlbnRzIHRoZSBzdXBlcmZsdW91cyBpbmNyZW1lbnQuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0IGZpeGVzIGEgYnVnIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IHN1YnN5c3RlbS5cblxuR2l2ZW4gdGhhdCBgaXBzZXRgIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZyB0byBlbnN1cmUgcm9idXN0bmVzcy4gVGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBoZXJlIGFyZSBgbGlzdF9zZXRfdWFkZGAgYW5kIGBpcF9zZXRfdWFkZGAuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkga25vdyBJJ2xsIG5lZWQgYE5FVEZJTFRFUmAsIGBJUF9TRVRgLCBhbmQgYElQX1NFVF9MSVNUX1NFVGAuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjazogYElQX1NFVGAgc2VsZWN0cyBgTkVURklMVEVSX05FVExJTktgLCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24gYE5FVEZJTFRFUmAuIFBlcmZlY3QsIHNvIHRob3NlIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgaW5jbHVkZWQuXG5cbkFscmlnaHQsIEknbGwgYmUgdXNpbmcgdGhlIHNldC1yZXN1bHRzIHRvb2wgZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MDIwLCJPdXRwdXRUb2tlbnMiOjEyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjI3OjA5LjE1OTI5NDEzN1oiLCJTZXEiOjc0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTIwOTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJJUF9TRVRcIixcbiAgICBcIklQX1NFVF9MSVNUX1NFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxpc3Rfc2V0X3VhZGRcIixcbiAgICBcImlwX3NldF91YWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIG5ldGZpbHRlciBpcHNldCBzdWJzeXN0ZW0gd2hlcmUgcmVwbGFjaW5nIGFuIGVsZW1lbnQgaW4gYSBsaXN0OnNldCBpbmNvcnJlY3RseSBpbmNyZW1lbnRlZCB0aGUgZWxlbWVudCBjb3VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlIChhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rKSwgc28gaXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0xJU1RfU0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibGlzdF9zZXRfdWFkZFwiLFxuICAgIFwiaXBfc2V0X3VhZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IHN1YnN5c3RlbSB3aGVyZSByZXBsYWNpbmcgYW4gZWxlbWVudCBpbiBhIGxpc3Q6c2V0IGluY29ycmVjdGx5IGluY3JlbWVudGVkIHRoZSBlbGVtZW50IGNvdW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgKGFjY2Vzc2libGUgdmlhIG5ldGxpbmspLCBzbyBpdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowbf62g[1] Phase: Succeeded StartedAt: 2026-08-06 16:27:21 +0000 UTC FinishedAt: 2026-08-06 16:27:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 16:27:21 +0000 UTC FinishedAt: 2026-08-06 16:27:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2] Phase: Succeeded StartedAt: 2026-08-06 16:27:21 +0000 UTC FinishedAt: 2026-08-06 20:16:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-06 16:27:21 +0000 UTC FinishedAt: 2026-08-06 20:16:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-06 16:27:21 +0000 UTC FinishedAt: 2026-08-06 16:27:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-06 16:27:21 +0000 UTC FinishedAt: 2026-08-06 16:27:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbf62g/series-workflowbf62g-convert-artifact-3933985956/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-06 16:27:31 +0000 UTC FinishedAt: 2026-08-06 16:47:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-06 16:27:31 +0000 UTC FinishedAt: 2026-08-06 16:47:38 +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:*e414d457-bb44-4178-b848-11b8d2182e91,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-workflowbf62g/series-workflowbf62g-convert-artifact-3933985956/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": "d4bbaa30-2873-4036-bc2f-34d558b4e202", "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-workflowbf62g/series-workflowbf62g-build-action-1660645090/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-06 16:27:31 +0000 UTC FinishedAt: 2026-08-06 16:47:11 +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:*e414d457-bb44-4178-b848-11b8d2182e91,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-workflowbf62g/series-workflowbf62g-convert-artifact-3933985956/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": "d4bbaa30-2873-4036-bc2f-34d558b4e202", "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-workflowbf62g/series-workflowbf62g-build-action-1660645090/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-06 16:47:38 +0000 UTC FinishedAt: 2026-08-06 16:47:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-06 16:47:38 +0000 UTC FinishedAt: 2026-08-06 16:47:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-06 16:47:38 +0000 UTC FinishedAt: 2026-08-06 16:47:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-06 16:47:38 +0000 UTC FinishedAt: 2026-08-06 16:47:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbf62g/series-workflowbf62g-convert-artifact-4070724771/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-06 16:47:48 +0000 UTC FinishedAt: 2026-08-06 16:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-06 16:47:48 +0000 UTC FinishedAt: 2026-08-06 16:49:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d4bbaa30-2873-4036-bc2f-34d558b4e202,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-workflowbf62g/series-workflowbf62g-build-action-1660645090/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-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-06 16:50:04 +0000 UTC FinishedAt: 2026-08-06 16:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-06 16:50:04 +0000 UTC FinishedAt: 2026-08-06 16:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-06 16:50:04 +0000 UTC FinishedAt: 2026-08-06 17:11:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-06 16:50:04 +0000 UTC FinishedAt: 2026-08-06 17:11:18 +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:*e414d457-bb44-4178-b848-11b8d2182e91,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-workflowbf62g/series-workflowbf62g-convert-artifact-4070724771/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": "e16dddab-4f6c-406c-ab5d-074fe6822af8", "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-workflowbf62g/series-workflowbf62g-build-action-446519639/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-06 16:50:04 +0000 UTC FinishedAt: 2026-08-06 17:10:57 +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:*e414d457-bb44-4178-b848-11b8d2182e91,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-workflowbf62g/series-workflowbf62g-convert-artifact-4070724771/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": "e16dddab-4f6c-406c-ab5d-074fe6822af8", "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-workflowbf62g/series-workflowbf62g-build-action-446519639/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-06 17:11:18 +0000 UTC FinishedAt: 2026-08-06 17:11:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-06 17:11:18 +0000 UTC FinishedAt: 2026-08-06 17:11:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-06 17:11:18 +0000 UTC FinishedAt: 2026-08-06 17:13:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-06 17:11:18 +0000 UTC FinishedAt: 2026-08-06 17:13:06 +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:*e16dddab-4f6c-406c-ab5d-074fe6822af8,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-workflowbf62g/series-workflowbf62g-build-action-446519639/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-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-06 17:13:18 +0000 UTC FinishedAt: 2026-08-06 20:16:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-06 17:13:18 +0000 UTC FinishedAt: 2026-08-06 20:16:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"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:*d4bbaa30-2873-4036-bc2f-34d558b4e202,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e16dddab-4f6c-406c-ab5d-074fe6822af8,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-workflowbf62g/series-workflowbf62g-build-action-1660645090/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-workflowbf62g/series-workflowbf62g-build-action-446519639/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-06 17:13:18 +0000 UTC FinishedAt: 2026-08-06 17:13:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-06 17:13:18 +0000 UTC FinishedAt: 2026-08-06 17:13:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"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-workflowbf62g/series-workflowbf62g-convert-artifact-3357063868/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-06 17:13:18 +0000 UTC FinishedAt: 2026-08-06 17:13:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-06 17:13:18 +0000 UTC FinishedAt: 2026-08-06 17:13:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-06 17:13:18 +0000 UTC FinishedAt: 2026-08-06 17:13:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-06 17:13:29 +0000 UTC FinishedAt: 2026-08-06 20:16:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbf62g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["list_set_uadd","ip_set_uadd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","IP_SET","IP_SET_LIST_SET"],"series_id":"29c5f188-e6f3-429e-8087-7faec5e135e0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-06 17:13:29 +0000 UTC FinishedAt: 2026-08-06 20:15:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d4bbaa30-2873-4036-bc2f-34d558b4e202,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e16dddab-4f6c-406c-ab5d-074fe6822af8,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-workflowbf62g/series-workflowbf62g-build-action-1660645090/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-workflowbf62g/series-workflowbf62g-build-action-446519639/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-workflowbf62g/series-workflowbf62g-convert-artifact-3357063868/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,}