Name: series-workflowm9rm4 Phase: Succeeded StartedAt: 2026-08-29 17:39:18 +0000 UTC FinishedAt: 2026-08-29 21:39:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[0] Phase: Succeeded StartedAt: 2026-08-29 17:39:18 +0000 UTC FinishedAt: 2026-08-29 17:59:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 17:39:18 +0000 UTC FinishedAt: 2026-08-29 17:59:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "series_id": "6f952a7f-fd35-4c3e-87be-5e997edb619a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "folio_end_dropbehind", "folio_unmap_invalidate" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fZW5kX2Ryb3BiZWhpbmQmIzM0OywKICAgICYjMzQ7Zm9saW9fdW5tYXBfaW52YWxpZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKClgIHRvIGFkZCBhIGAhZm9saW9fbWFwcGVkKGZvbGlvKWAgY2hlY2sgYmVmb3JlIGludm9raW5nIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlKClgLCBwcmV2ZW50aW5nIGRyb3BiZWhpbmQgaW52YWxpZGF0aW9uIG9mIGZvbGlvcyB0aGF0IGFyZSBjdXJyZW50bHkgbWFwcGVkIGludG8gdXNlciBwYWdlIHRhYmxlcy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIHN0YWNrL2hlYXAgYnVmZmVyIGNvcHlpbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBJdCBvbmx5IGFkZHMgYSBzdGF0ZSBjaGVjayBvbiBleGlzdGluZyBsb2NrZWQgZm9saW9zIHdpdGhpbiB0aGUgcGFnZSBjYWNoZS4gQW55IGlzc3VlcyByZWxhdGVkIHRvIGZvbGlvIGxpZmVjeWNsZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBtZW1vcnkgc2FmZXR5IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zIChlLmcuIGBWTV9CVUdfT05fRk9MSU9gKSBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHBhZ2UgY2FjaGUgZHJvcGJlaGluZCBpbnZhbGlkYXRpb24gbG9naWMgaW4gZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpIGJ5IGFkZGluZyBhIGNoZWNrICghZm9saW9fbWFwcGVkKGZvbGlvKSkgYmVmb3JlIGNhbGxpbmcgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpLiBUaGlzIGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdW5jYWNoZWQgLyBkcm9wYmVoaW5kIEkvTyBwcm9jZXNzaW5nIChlLmcuIFJXRl9ET05UQ0FDSEUpIGFuZCB3cml0ZWJhY2sgY29tcGxldGlvbiBpbiByZWFjaGFibGUsIHN0YW5kYXJkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFmM2ZhYWJjODM5NzZmMmI4MjExZWZhZTA4YjRlNmVhNzc4NTQ5MGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxNzo1NTo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDZhZmVjNjM2ODgxZmIuLjAwZmQ4OWNmNmY1NTAgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZpbGVtYXAuY1xuQEAgLTE2MTYsNyAmIzQzOzE2MTYsNyBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdHJldHVybjtcbiBcdGlmICghZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuLVx0aWYgKG1hcHBpbmcpXG4mIzQzO1x0aWYgKG1hcHBpbmcgXHUwMDI2XHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKVxuIFx0XHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19lbmRfZHJvcGJlaGluZCYjMzQ7LAogICAgJiMzNDtmb2xpb191bm1hcF9pbnZhbGlkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgcGFnZSBjYWNoZSBkcm9wYmVoaW5kIGludmFsaWRhdGlvbiBsb2dpYyBpbiBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKCkgYnkgYWRkaW5nIGEgY2hlY2sgKCFmb2xpb19tYXBwZWQoZm9saW8pKSBiZWZvcmUgY2FsbGluZyBmb2xpb191bm1hcF9pbnZhbGlkYXRlKCkuIFRoaXMgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB1bmNhY2hlZCAvIGRyb3BiZWhpbmQgSS9PIHByb2Nlc3NpbmcgKGUuZy4gUldGX0RPTlRDQUNIRSkgYW5kIHdyaXRlYmFjayBjb21wbGV0aW9uIGluIHJlYWNoYWJsZSwgc3RhbmRhcmQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWYzZmFhYmM4Mzk3NmYyYjgyMTFlZmFlMDhiNGU2ZWE3Nzg1NDkwZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDE3OjU1OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDZhZmVjNjM2ODgxZmIuLjAwZmQ4OWNmNmY1NTAgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTE2MTYsNyAmIzQzOzE2MTYsNyBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCXJldHVybjsKIAlpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpCiAJCXJldHVybjsKLQlpZiAobWFwcGluZykKJiM0MzsJaWYgKG1hcHBpbmcgJmFtcDsmYW1wOyAhZm9saW9fbWFwcGVkKGZvbGlvKSkKIAkJZm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBhbmFseXNpcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0IHRocm91Z2g6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBEcm9wYmVoaW5kIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIEkmIzM5O3ZlIGdvdCBhIGRpZmYgdG8gbG9vayBhdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUga2VybmVsIGNvZGUgc3Vycm91bmRpbmcgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9maWxlbWFwLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIG1pc2NoaWVmLCBkZXBlbmRpbmcgb24gdGhlIGNoYW5nZSEpIHJlbGF0ZWQgdG8gZHJvcC1iZWhpbmQgcGFnZSBjYWNoaW5nIGxpa2VseSByZXNpZGVzLgoKSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UgLSB3aGF0IHRyaWdnZXJlZCB0aGlzLCBhbmQgd2hhdCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaXMuIFRvIGRvIHRoYXQsIEkmIzM5O2xsIGxldmVyYWdlIG15IHRvb2xzLiBJIGNhbiB1c2UgYHJlYWQtZmlsZWAgdG8gbmF2aWdhdGUgdGhlIGNvZGUgZGlyZWN0bHksIG9yIHBlcmhhcHMgYGdyZXBwZXJgIHRvIHNlYXJjaCBtb3JlIGJyb2FkbHkgZm9yIHJlbGV2YW50IGNhbGwgc2l0ZXMgYW5kIHVzYWdlcyBvZiB0aGUgZnVuY3Rpb24sIGFuZCByZWxhdGVkIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIGFueSBpbXBsZW1lbnRhdGlvbiBudWFuY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGlzIGtleSBrZXJuZWwgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9maWxlbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MDA6XHRcdFx0cmV0ID0gZm9saW9fd2FpdF9iaXRfa2lsbGFibGUoZm9saW8sIFBHX3ByaXZhdGVfMik7XG4xNjAxOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNjAyOlx0XHRcdFx0YnJlYWs7XG4xNjAzOlx0XHR9XG4xNjA0Olx0XG4xNjA1Olx0XHRyZXR1cm4gcmV0O1xuMTYwNjpcdH1cbjE2MDc6XHRFWFBPUlRfU1lNQk9MKGZvbGlvX3dhaXRfcHJpdmF0ZV8yX2tpbGxhYmxlKTtcbjE2MDg6XHRcbjE2MDk6XHRzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4xNjEwOlx0e1xuMTYxMTpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpby1cdTAwM2VtYXBwaW5nO1xuMTYxMjpcdFxuMTYxMzpcdFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbjE2MTQ6XHRcbjE2MTU6XHRcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHwgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXG4xNjE2Olx0XHRcdHJldHVybjtcbjE2MTc6XHRcdGlmICghZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSlcbjE2MTg6XHRcdFx0cmV0dXJuO1xuMTYxOTpcdFx0aWYgKG1hcHBpbmcgXHUwMDI2XHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKVxuMTYyMDpcdFx0XHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcbjE2MjE6XHR9XG4xNjIyOlx0XG4xNjIzOlx0LypcbjE2MjQ6XHQgKiBJZiBmb2xpbyB3YXMgbWFya2VkIGFzIGRyb3BiZWhpbmQsIHRoZW4gcGFnZXMgc2hvdWxkIGJlIGRyb3BwZWQgd2hlbiB3cml0ZWJhY2tcbjE2MjU6XHQgKiBjb21wbGV0ZXMuIERvIHRoYXQgbm93LiBJZiB3ZSBmYWlsLCBpdCYjMzk7cyBsaWtlbHkgYmVjYXVzZSBvZiBhIGJpZyBmb2xpbyAtXG4xNjI2Olx0ICoganVzdCByZXNldCBkcm9wYmVoaW5kIGZvciB0aGF0IGNhc2UgYW5kIGxhdHRlciBjb21wbGV0aW9ucyBzaG91bGQgaW52YWxpZGF0ZS5cbjE2Mjc6XHQgKi9cbjE2Mjg6XHR2b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4xNjI5Olx0e1xuMTYzMDpcdFx0aWYgKCFmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuMTYzMTpcdFx0XHRyZXR1cm47XG4xNjMyOlx0XG4xNjMzOlx0XHQvKlxuMTYzNDpcdFx0ICogSGl0dGluZyAhaW5fdGFzaygpIHNob3VsZCBub3QgaGFwcGVuIG9mZiBSV0ZfRE9OVENBQ0hFIHdyaXRlYmFjayxcbjE2MzU6XHRcdCAqIGJ1dCBjYW4gaGFwcGVuIGlmIG5vcm1hbCB3cml0ZWJhY2sganVzdCBoYXBwZW5zIHRvIGZpbmQgZGlydHkgZm9saW9zXG4xNjM2Olx0XHQgKiB0aGF0IHdlcmUgY3JlYXRlZCBhcyBwYXJ0IG9mIHVuY2FjaGVkIHdyaXRlYmFjaywgYW5kIHRoYXQgd3JpdGViYWNrXG4xNjM3Olx0XHQgKiB3b3VsZCBvdGhlcndpc2Ugbm90IG5lZWQgbm9uLUlSUSBoYW5kbGluZy4gSnVzdCBza2lwIHRoZVxuMTYzODpcdFx0ICogaW52YWxpZGF0aW9uIGluIHRoYXQgY2FzZS5cbjE2Mzk6XHRcdCAqL1xuMTY0MDpcdFx0aWYgKGluX3Rhc2soKSBcdTAwMjZcdTAwMjYgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbjE2NDE6XHRcdFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7XG4xNjQyOlx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4xNjQzOlx0XHR9XG4xNjQ0Olx0fVxuMTY0NTpcdEVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF9kcm9wYmVoaW5kKTtcbjE2NDY6XHRcbjE2NDc6XHQvKipcbjE2NDg6XHQgKiBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQgLSBFbmQgd3JpdGViYWNrIGFnYWluc3QgYSBmb2xpby5cbjE2NDk6XHQgKiBAZm9saW86IFRoZSBmb2xpby5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc2CgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBEcm9wYmVoaW5kIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAsIGBmb2xpb19lbmRfZHJvcGJlaGluZGAsIGFuZCB0aGF0IGBSV0ZfRE9OVENBQ0hFYCBmbGFnLiBNeSBnb2FsIGhlcmUgaXMgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IGRyb3BiZWhpbmQgd29ya3MgYXQgdGhlIGZpbGUgc3lzdGVtIGFuZCBmb2xpbyBsZXZlbHMsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gY2FjaGUgbWFuYWdlbWVudC4gSSYjMzk7bSBnb2luZyB0byBmaXJlIHVwIHRoZSBncmVwcGVyIGFuZCBydW4gaXQgYWNyb3NzIHRoZSBrZXJuZWwgc291cmNlIHRvIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZSBgZHJvcGJlaGluZGAgdGVybWlub2xvZ3kgYXJlIGFjdHVhbGx5IHVzZWQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBvdmVyYWxsIHVzZSB3aXRoaW4gdGhlIHJlbGV2YW50IGZpbGUgc3lzdGVtIGNvZGUgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiByZWFkIGFuZCB3cml0ZSBjYWNoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Ryb3BiZWhpbmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYnVmZmVyLmM9MTA4NT1zdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuLS1cbmZzL2J1ZmZlci5jLTExMDktXG5mcy9idWZmZXIuYzoxMTEwOlx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC1cdTAwM2ViX2ZvbGlvKSBcdTAwMjZcdTAwMjYgb3BfaXNfd3JpdGUob3BmKSlcbmZzL2J1ZmZlci5jLTExMTEtXHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcbi0tXG5mcy9mcy13cml0ZWJhY2suYz00MDU9c3RhdGljIGJvb2wgaW5vZGVfZG9fc3dpdGNoX3dicyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jLTQzNS1cdFx0XHR3Yl9zdGF0X21vZChuZXdfd2IsIFdCX1JFQ0xBSU1BQkxFLCBucik7XG5mcy9mcy13cml0ZWJhY2suYzo0MzY6XHRcdFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpIHtcbmZzL2ZzLXdyaXRlYmFjay5jLTQzNy1cdFx0XHRcdHdiX3N0YXRfbW9kKG9sZF93YiwgV0JfRE9OVENBQ0hFX0RJUlRZLCAtbnIpO1xuLS1cbmZzL2lvbWFwL2lvZW5kLmM9MjEzPXNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuZnMvaW9tYXAvaW9lbmQuYy0yNTctXG5mcy9pb21hcC9pb2VuZC5jOjI1ODpcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuZnMvaW9tYXAvaW9lbmQuYy0yNTktXHRcdGJpb19zZXRfZmxhZyhcdTAwMjZpb2VuZC1cdTAwM2Vpb19iaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcbi0tXG5mcy9uZnMvZmlsZS5jPTM2MD1zdGF0aWMgYm9vbCBuZnNfd2FudF9yZWFkX21vZGlmeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9uZnMvZmlsZS5jLTM3Mi1cdFx0cmV0dXJuIHRydWU7XG5mcy9uZnMvZmlsZS5jOjM3MzpcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuZnMvbmZzL2ZpbGUuYy0zNzQtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5mcy9uZnMvZmlsZS5jPTM4OT1zdGF0aWMgaW50IG5mc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvbmZzL2ZpbGUuYy00MTktXHRcdG9uY2VfdGhydSA9IDE7XG5mcy9uZnMvZmlsZS5jOjQyMDpcdFx0Zm9saW9fY2xlYXJfZHJvcGJlaGluZChmb2xpbyk7XG5mcy9uZnMvZmlsZS5jLTQyMS1cdFx0cmV0ID0gbmZzX3JlYWRfZm9saW8oZmlsZSwgZm9saW8pO1xuLS1cbmZzL25mcy93cml0ZS5jPTI5NT1zdGF0aWMgdm9pZCBuZnNfZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL25mcy93cml0ZS5jLTI5OC1cbmZzL25mcy93cml0ZS5jOjI5OTpcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG5mcy9uZnMvd3JpdGUuYy0zMDAtXHRpZiAoYXRvbWljX2xvbmdfZGVjX3JldHVybihcdTAwMjZuZnNzLVx1MDAzZXdyaXRlYmFjaykgXHUwMDNjXG4tLVxuZnMvbmZzL3dyaXRlLmM9NzM1PXN0YXRpYyB2b2lkIG5mc19pbm9kZV9yZW1vdmVfcmVxdWVzdChzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSlcbi0tXG5mcy9uZnMvd3JpdGUuYy03NTEtXG5mcy9uZnMvd3JpdGUuYzo3NTI6XHRcdFx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xuZnMvbmZzL3dyaXRlLmMtNzUzLVx0XHR9XG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmM9Mzk9REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKG5mc2RfZHNyX2ZvcHMsIG5mc2RfZHNyX2dldCwgbmZzZF9kc3Jfc2V0LCBcJiMzNDslbGx1XFxuXCYjMzQ7KTtcbi0tXG5mcy9uZnNkL2RlYnVnZnMuYy00NS0gKiAgICUwOiBORlMgUkVBRCB3aWxsIHVzZSBidWZmZXJlZCBJT1xuZnMvbmZzZC9kZWJ1Z2ZzLmM6NDY6ICogICAlMTogTkZTIFJFQUQgd2lsbCB1c2UgZG9udGNhY2hlIChidWZmZXJlZCBJTyB3LyBkcm9wYmVoaW5kKVxuZnMvbmZzZC9kZWJ1Z2ZzLmMtNDctICogICAlMjogTkZTIFJFQUQgd2lsbCB1c2UgZGlyZWN0IElPXG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmM9ODQ9REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKG5mc2RfaW9fY2FjaGVfcmVhZF9mb3BzLCBuZnNkX2lvX2NhY2hlX3JlYWRfZ2V0LFxuLS1cbmZzL25mc2QvZGVidWdmcy5jLTkxLSAqICAgJTA6IE5GUyBXUklURSB3aWxsIHVzZSBidWZmZXJlZCBJT1xuZnMvbmZzZC9kZWJ1Z2ZzLmM6OTI6ICogICAlMTogTkZTIFdSSVRFIHdpbGwgdXNlIGRvbnRjYWNoZSAoYnVmZmVyZWQgSU8gdy8gZHJvcGJlaGluZClcbmZzL25mc2QvZGVidWdmcy5jLTkzLSAqXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9OTM9ZW51bSBwYWdlZmxhZ3Mge1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTExMi1cdFBHX3VuZXZpY3RhYmxlLFx0XHQvKiBQYWdlIGlzIFwmIzM0O3VuZXZpY3RhYmxlXCYjMzQ7ICAqL1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTEzOlx0UEdfZHJvcGJlaGluZCxcdFx0LyogZHJvcCBwYWdlcyBvbiBJTyBjb21wbGV0aW9uICovXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMTQtI2lmZGVmIENPTkZJR19NTVVcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD01OTg9Rk9MSU9fRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC02MDAtXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2MDE6Rk9MSU9fRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2MDI6XHRGT0xJT19URVNUX0NMRUFSX0ZMQUcoZHJvcGJlaGluZCwgRk9MSU9fSEVBRF9QQUdFKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NjAzOlx0X19GT0xJT19TRVRfRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC02MDQtXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTMxMD12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxMzExOnZvaWQgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTMxMjp2b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTMxMy12b2lkIGZvbGlvX3dhaXRfc3RhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTE0MDg9c3RydWN0IHJlYWRhaGVhZF9jb250cm9sIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDE1LVx0dW5zaWduZWQgaW50IF9iYXRjaF9jb3VudDtcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjE0MTY6XHRib29sIGRyb3BiZWhpbmQ7XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDE3LVx0Ym9vbCBfd29ya2luZ3NldDtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmg9Njk9VFJBQ0VfREVGSU5FX0VOVU0oX19fR0ZQX0xBU1RfQklUKTtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmgtMTUzLVx0REVGX1BBR0VGTEFHX05BTUUodW5ldmljdGFibGUpLFx0XHRcdFx0XHRcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oOjE1NDpcdERFRl9QQUdFRkxBR19OQU1FKGRyb3BiZWhpbmQpXHRcdFx0XHRcdFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmgtMTU1LUlGX0hBVkVfUEdfTUxPQ0sobWxvY2tlZClcdFx0XHRcdFx0XHRcXFxuLS1cbm1tL2ZpbGVtYXAuYz0xNjA3PUVYUE9SVF9TWU1CT0woZm9saW9fd2FpdF9wcml2YXRlXzJfa2lsbGFibGUpO1xubW0vZmlsZW1hcC5jLTE2MDgtXG5tbS9maWxlbWFwLmM6MTYwOTpzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9maWxlbWFwLmMtMTYxMC17XG4tLVxubW0vZmlsZW1hcC5jLTE2MTYtXHRcdHJldHVybjtcbm1tL2ZpbGVtYXAuYzoxNjE3Olx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKVxubW0vZmlsZW1hcC5jLTE2MTgtXHRcdHJldHVybjtcbi0tXG5tbS9maWxlbWFwLmMtMTYyMy0vKlxubW0vZmlsZW1hcC5jOjE2MjQ6ICogSWYgZm9saW8gd2FzIG1hcmtlZCBhcyBkcm9wYmVoaW5kLCB0aGVuIHBhZ2VzIHNob3VsZCBiZSBkcm9wcGVkIHdoZW4gd3JpdGViYWNrXG5tbS9maWxlbWFwLmMtMTYyNS0gKiBjb21wbGV0ZXMuIERvIHRoYXQgbm93LiBJZiB3ZSBmYWlsLCBpdCYjMzk7cyBsaWtlbHkgYmVjYXVzZSBvZiBhIGJpZyBmb2xpbyAtXG5tbS9maWxlbWFwLmM6MTYyNjogKiBqdXN0IHJlc2V0IGRyb3BiZWhpbmQgZm9yIHRoYXQgY2FzZSBhbmQgbGF0dGVyIGNvbXBsZXRpb25zIHNob3VsZCBpbnZhbGlkYXRlLlxubW0vZmlsZW1hcC5jLTE2MjctICovXG5tbS9maWxlbWFwLmM6MTYyODp2b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9maWxlbWFwLmMtMTYyOS17XG5tbS9maWxlbWFwLmM6MTYzMDpcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbm1tL2ZpbGVtYXAuYy0xNjMxLVx0XHRyZXR1cm47XG4tLVxubW0vZmlsZW1hcC5jLTE2NDAtXHRpZiAoaW5fdGFzaygpIFx1MDAyNlx1MDAyNiBmb2xpb190cnlsb2NrKGZvbGlvKSkge1xubW0vZmlsZW1hcC5jOjE2NDE6XHRcdGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xubW0vZmlsZW1hcC5jLTE2NDItXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tLVxubW0vZmlsZW1hcC5jLTE2NDQtfVxubW0vZmlsZW1hcC5jOjE2NDU6RVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX2Ryb3BiZWhpbmQpO1xubW0vZmlsZW1hcC5jLTE2NDYtXG5tbS9maWxlbWFwLmMtMTY0Ny0vKipcbm1tL2ZpbGVtYXAuYzoxNjQ4OiAqIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCAtIEVuZCB3cml0ZWJhY2sgYWdhaW5zdCBhIGZvbGlvLlxubW0vZmlsZW1hcC5jLTE2NDktICogQGZvbGlvOiBUaGUgZm9saW8uXG4tLVxubW0vZmlsZW1hcC5jLTE2NTEtICogVGhlIGZvbGlvIG11c3QgYWN0dWFsbHkgYmUgdW5kZXIgd3JpdGViYWNrLlxubW0vZmlsZW1hcC5jOjE2NTI6ICogVGhpcyBjYWxsIGlzIGludGVuZGVkIGZvciBmaWxlc3lzdGVtcyB0aGF0IG5lZWQgdG8gZGVmZXIgZHJvcGJlaGluZC5cbm1tL2ZpbGVtYXAuYy0xNjUzLSAqXG4tLVxubW0vZmlsZW1hcC5jLTE2NTUtICovXG5tbS9maWxlbWFwLmM6MTY1Njp2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vZmlsZW1hcC5jLTE2NTcte1xuLS1cbm1tL2ZpbGVtYXAuYy0xNjc2LX1cbm1tL2ZpbGVtYXAuYzoxNjc3OkVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCk7XG5tbS9maWxlbWFwLmMtMTY3OC1cbi0tXG5tbS9maWxlbWFwLmM9MTY4Nz12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMTY5Ny1cdGZvbGlvX2dldChmb2xpbyk7XG5tbS9maWxlbWFwLmM6MTY5ODpcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG5tbS9maWxlbWFwLmM6MTY5OTpcdGZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0xNzAwLVx0Zm9saW9fcHV0KGZvbGlvKTtcbi0tXG5tbS9maWxlbWFwLmM9MTk0Nz1zdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9maWxlbWFwLmMtMjAyNS1cdFx0XHRpZiAoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfRE9OVENBQ0hFKVxubW0vZmlsZW1hcC5jOjIwMjY6XHRcdFx0XHRfX2ZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0yMDI3LVxuLS1cbm1tL2ZpbGVtYXAuYy0yMDYwLVx0Lyogbm90IGFuIHVuY2FjaGVkIGxvb2t1cCwgY2xlYXIgdW5jYWNoZWQgaWYgc2V0ICovXG5tbS9maWxlbWFwLmM6MjA2MTpcdGlmICghKGZncF9mbGFncyBcdTAwMjYgRkdQX0RPTlRDQUNIRSkgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpIHtcbm1tL2ZpbGVtYXAuYy0yMDYyLVx0XHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG4tLVxubW0vZmlsZW1hcC5jPTI2MTk9c3RhdGljIGludCBmaWxlbWFwX2NyZWF0ZV9mb2xpbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxuLS1cbm1tL2ZpbGVtYXAuYy0yNjMzLVx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRE9OVENBQ0hFKVxubW0vZmlsZW1hcC5jOjI2MzQ6XHRcdF9fZm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xubW0vZmlsZW1hcC5jLTI2MzUtXG4tLVxubW0vZmlsZW1hcC5jPTI2NzI9c3RhdGljIGludCBmaWxlbWFwX3JlYWRhaGVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbm1tL2ZpbGVtYXAuYy0yNjgwLVx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRE9OVENBQ0hFKVxubW0vZmlsZW1hcC5jOjI2ODE6XHRcdHJhY3RsLmRyb3BiZWhpbmQgPSAxO1xubW0vZmlsZW1hcC5jLTI2ODItXHRwYWdlX2NhY2hlX2FzeW5jX3JhKFx1MDAyNnJhY3RsLCBmb2xpbywgbGFzdF9pbmRleCAtIGZvbGlvLVx1MDAzZWluZGV4KTtcbi0tXG5tbS9maWxlbWFwLmM9MjY4Nj1zdGF0aWMgaW50IGZpbGVtYXBfZ2V0X3BhZ2VzKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGNvdW50LFxuLS1cbm1tL2ZpbGVtYXAuYy0yNzEyLVx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ET05UQ0FDSEUpXG5tbS9maWxlbWFwLmM6MjcxMzpcdFx0XHRyYWN0bC5kcm9wYmVoaW5kID0gMTtcbm1tL2ZpbGVtYXAuYy0yNzE0LVx0XHRwYWdlX2NhY2hlX3N5bmNfcmEoXHUwMDI2cmFjdGwsIGxhc3RfaW5kZXggLSBpbmRleCk7XG4tLVxubW0vZmlsZW1hcC5jPTI3NTU9c3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMjc2MS1cbm1tL2ZpbGVtYXAuYzoyNzYyOnN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vZmlsZW1hcC5jLTI3NjMte1xubW0vZmlsZW1hcC5jOjI3NjQ6XHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG5tbS9maWxlbWFwLmMtMjc2NS1cdFx0cmV0dXJuO1xuLS1cbm1tL2ZpbGVtYXAuYy0yNzY4LVx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG5tbS9maWxlbWFwLmM6Mjc2OTpcdFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7XG5tbS9maWxlbWFwLmMtMjc3MC1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi0tXG5tbS9maWxlbWFwLmM9Mjc4Nz1zc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5tbS9maWxlbWFwLmMtMjg4OS1cbm1tL2ZpbGVtYXAuYzoyODkwOlx0XHRcdGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChmb2xpbyk7XG5tbS9maWxlbWFwLmMtMjg5MS1cdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLS1cbm1tL2ZvbGlvLmM9NDIyPXZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vZm9saW8uYy00MjMte1xubW0vZm9saW8uYzo0MjQ6XHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbm1tL2ZvbGlvLmMtNDI1LVx0XHRyZXR1cm47XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zNjg1PXN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM3NDQtXHRcdFx0XHQgKDFMIFx1MDAzY1x1MDAzYyBQR19kaXJ0eSkgfFxubW0vaHVnZV9tZW1vcnkuYzozNzQ1Olx0XHRcdFx0ICgxTCBcdTAwM2NcdTAwM2MgUEdfZHJvcGJlaGluZCkgfFxubW0vaHVnZV9tZW1vcnkuYy0zNzQ2LVx0XHRcdFx0IExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX01BU0spKTtcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jPTI2MDM9c3RhdGljIHZvaWQgZm9saW9fYWNjb3VudF9kaXJ0aWVkKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0yNjE3LVx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfRElSVFksIG5yKTtcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjYxODpcdFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2MTktXHRcdFx0d2Jfc3RhdF9tb2Qod2IsIFdCX0RPTlRDQUNIRV9ESVJUWSwgbnIpO1xuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9MjYzNj12b2lkIGZvbGlvX2FjY291bnRfY2xlYW5lZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0yNjQwLVx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX0RJUlRZLCAtbnIpO1xubW0vcGFnZS13cml0ZWJhY2suYzoyNjQxOlx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2NDItXHRcdHdiX3N0YXRfbW9kKHdiLCBXQl9ET05UQ0FDSEVfRElSVFksIC1ucik7XG4tLVxubW0vcGFnZS13cml0ZWJhY2suYz0yODY2PWJvb2wgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0yOTE2LVx0XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9ESVJUWSwgLW5yKTtcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjkxNzpcdFx0XHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjkxOC1cdFx0XHRcdHdiX3N0YXRfbW9kKHdiLCBXQl9ET05UQ0FDSEVfRElSVFksIC1ucik7XG4tLVxubW0vcmVhZGFoZWFkLmM9MTk1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnJhY3RsX2FsbG9jX2ZvbGlvKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4tLVxubW0vcmVhZGFoZWFkLmMtMjAwLVx0Zm9saW8gPSBmaWxlbWFwX2FsbG9jX2ZvbGlvKGdmcF9tYXNrLCBvcmRlciwgTlVMTCk7XG5tbS9yZWFkYWhlYWQuYzoyMDE6XHRpZiAoZm9saW8gXHUwMDI2XHUwMDI2IHJhY3RsLVx1MDAzZWRyb3BiZWhpbmQpXG5tbS9yZWFkYWhlYWQuYzoyMDI6XHRcdF9fZm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xubW0vcmVhZGFoZWFkLmMtMjAzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb21taXQ6IEEgRm9saW8mIzM5O3MgSm91cm5leSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29tbWl0LiBUaGUgY29yZSBmdW5jdGlvbiBpcyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQuIFRoZSBkaWZmIHNob3dzIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBgaWZgIHN0YXRlbWVudC4gUHJldmlvdXNseSwgaXQgbG9va2VkIGxpa2UgdGhpczogYGlmIChtYXBwaW5nKWAuIE5vdywgaXQmIzM5O3MgYGlmIChtYXBwaW5nICZhbXA7JmFtcDsgIWZvbGlvX21hcHBlZChmb2xpbykpYC4KClNvLCB0aGUgb3JpZ2luYWwgY29kZSB3b3VsZCB1bm1hcCBhbmQgaW52YWxpZGF0ZSBhIGZvbGlvIGlmIHRoZSBgbWFwcGluZ2Agd2FzbiYjMzk7dCBOVUxMLiBUaGUgbmV3IGNoZWNrIGFkZHMgYW4gZXh0cmEgcmVxdWlyZW1lbnQ6IHRoZSBmb2xpbyAqbXVzdCBub3QqIGJlIG1hcHBlZC4gSW50ZXJlc3RpbmcuIFRoaXMgbGlrZWx5IGFpbXMgdG8gcHJldmVudCBpbnZhbGlkYXRpbmcgcGFnZXMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlbHkgaW4gdXNlLCBwb3RlbnRpYWxseSBpbXByb3ZpbmcgcGVyZm9ybWFuY2Ugb3IgcHJldmVudGluZyBkYXRhIGNvcnJ1cHRpb24uIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayB3aGF0IGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBkb2VzLCBhcyBpdCBzZWVtcyBsaWtlIGl0cyBiZWhhdmlvciBub3cgaGluZ2VzIG9uIHRoaXMgYGZvbGlvX21hcHBlZGAgY2hlY2suIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IHRoaXMgaW1wYWN0cyBwYWdlIHJlY2xhaW0gaW4gZGlmZmVyZW50IHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb191bm1hcF9pbnZhbGlkYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ZpbGVtYXAuYz0xNjA5PXN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMTYxOS1cdGlmIChtYXBwaW5nIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL2ZpbGVtYXAuYzoxNjIwOlx0XHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcbm1tL2ZpbGVtYXAuYy0xNjIxLX1cbi0tXG5tbS9pbnRlcm5hbC5oPTU5Nz1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5tbS9pbnRlcm5hbC5oOjU5ODppbnQgZm9saW9fdW5tYXBfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2ludGVybmFsLmgtNTk5LVx0XHRcdCAgIGdmcF90IGdmcCk7XG4tLVxubW0vdHJ1bmNhdGUuYz02MDY9c3RhdGljIGludCBmb2xpb19sYXVuZGVyKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3RydW5jYXRlLmMtNjIxLSAqL1xubW0vdHJ1bmNhdGUuYzo2MjI6aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS90cnVuY2F0ZS5jLTYyMy1cdFx0XHQgICBnZnBfdCBnZnApXG4tLVxubW0vdHJ1bmNhdGUuYz02NzY9aW50IGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3RydW5jYXRlLmMtNzI1LVx0XHRcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcbm1tL3RydW5jYXRlLmM6NzI2Olx0XHRcdHJldDIgPSBmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCBHRlBfS0VSTkVMKTtcbm1tL3RydW5jYXRlLmMtNzI3LVx0XHRcdGlmIChyZXQyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoZSBmb2xpbyB1bm1hcCBhbmQgaW52YWxpZGF0aW9uIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgd2l0aGluIGBtbS90cnVuY2F0ZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB0aGUga2VybmVsIGFjdHVhbGx5IGRlYWxzIHdpdGggdGhlIG5pdHR5LWdyaXR0eSBvZiByZW1vdmluZyBwYWdlIG1hcHBpbmdzIGFuZCBwb3RlbnRpYWxseSBpbnZhbGlkYXRpbmcgZGF0YSBkdXJpbmcgYSB0cnVuY2F0aW9uIG9wZXJhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgdGVhcmluZyBkb3duIHBhZ2UgdGFibGVzIGFuZCBoYW5kbGluZyBhbnkgbmVjZXNzYXJ5IGNhY2hlIGNvaGVyZW5jZS4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMsIGxpa2UgdGhlIHBhZ2UgY2FjaGUsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBrZWVwIGluIG1pbmQuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdHJ1bmNhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjIwOlx0ICogc2l0dGluZyBpbiB0aGUgZm9saW9fYWRkX2xydSgpIGNhY2hlcy5cbiA2MjE6XHQgKi9cbiA2MjI6XHRpbnQgZm9saW9fdW5tYXBfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiA2MjM6XHRcdFx0XHQgICBnZnBfdCBnZnApXG4gNjI0Olx0e1xuIDYyNTpcdFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcbiA2MjY6XHRcdGludCByZXQ7XG4gNjI3Olx0XG4gNjI4Olx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuIDYyOTpcdFxuIDYzMDpcdFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpXG4gNjMxOlx0XHRcdHVubWFwX21hcHBpbmdfZm9saW8oZm9saW8pO1xuIDYzMjpcdFx0QlVHX09OKGZvbGlvX21hcHBlZChmb2xpbykpO1xuIDYzMzpcdFxuIDYzNDpcdFx0cmV0ID0gZm9saW9fbGF1bmRlcihtYXBwaW5nLCBmb2xpbyk7XG4gNjM1Olx0XHRpZiAocmV0KVxuIDYzNjpcdFx0XHRyZXR1cm4gcmV0O1xuIDYzNzpcdFx0aWYgKGZvbGlvLVx1MDAzZW1hcHBpbmcgIT0gbWFwcGluZylcbiA2Mzg6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiA2Mzk6XHRcdGlmICghZmlsZW1hcF9yZWxlYXNlX2ZvbGlvKGZvbGlvLCBnZnApKVxuIDY0MDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDY0MTpcdFxuIDY0MjpcdFx0c3Bpbl9sb2NrKFx1MDAyNm1hcHBpbmctXHUwMDNlaG9zdC1cdTAwM2VpX2xvY2spO1xuIDY0MzpcdFx0eGFfbG9ja19pcnEoXHUwMDI2bWFwcGluZy1cdTAwM2VpX3BhZ2VzKTtcbiA2NDQ6XHRcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcbiA2NDU6XHRcdFx0Z290byBmYWlsZWQ7XG4gNjQ2Olx0XG4gNjQ3Olx0XHRCVUdfT04oZm9saW9faGFzX3ByaXZhdGUoZm9saW8pKTtcbiA2NDg6XHRcdF9fZmlsZW1hcF9yZW1vdmVfZm9saW8oZm9saW8sIE5VTEwpO1xuIDY0OTpcdFx0eGFfdW5sb2NrX2lycShcdTAwMjZtYXBwaW5nLVx1MDAzZWlfcGFnZXMpO1xuIDY1MDpcdFx0aWYgKG1hcHBpbmdfc2hyaW5rYWJsZShtYXBwaW5nKSlcbiA2NTE6XHRcdFx0aW5vZGVfbHJ1X2xpc3RfYWRkKG1hcHBpbmctXHUwMDNlaG9zdCk7XG4gNjUyOlx0XHRmcmVlX2ZvbGlvID0gbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VmcmVlX2ZvbGlvO1xuIDY1MzpcdFx0c3Bpbl91bmxvY2soXHUwMDI2bWFwcGluZy1cdTAwM2Vob3N0LVx1MDAzZWlfbG9jayk7XG4gNjU0Olx0XG4gNjU1Olx0XHRpZiAoZnJlZV9mb2xpbylcbiA2NTY6XHRcdFx0ZnJlZV9mb2xpbyhmb2xpbyk7XG4gNjU3Olx0XHRmb2xpb19wdXRfcmVmcyhmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbiA2NTg6XHRcdHJldHVybiAxO1xuIDY1OTpcdGZhaWxlZDpcbiA2NjA6XHRcdHhhX3VubG9ja19pcnEoXHUwMDI2bWFwcGluZy1cdTAwM2VpX3BhZ2VzKTtcbiA2NjE6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1hcHBpbmctXHUwMDNlaG9zdC1cdTAwM2VpX2xvY2spO1xuIDY2MjpcdFx0cmV0dXJuIC1FQlVTWTtcbiA2NjM6XHR9XG4gNjY0Olx0XG4gNjY1Olx0LyoqXG4gNjY2Olx0ICogaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UgLSByZW1vdmUgcmFuZ2Ugb2YgcGFnZXMgZnJvbSBhbiBhZGRyZXNzX3NwYWNlXG4gNjY3Olx0ICogQG1hcHBpbmc6IHRoZSBhZGRyZXNzX3NwYWNlXG4gNjY4Olx0ICogQHN0YXJ0OiB0aGUgcGFnZSBvZmZzZXQgJiMzOTtmcm9tJiMzOTsgd2hpY2ggdG8gaW52YWxpZGF0ZVxuIDY2OTpcdCAqIEBlbmQ6IHRoZSBwYWdlIG9mZnNldCAmIzM5O3RvJiMzOTsgd2hpY2ggdG8gaW52YWxpZGF0ZSAoaW5jbHVzaXZlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjIwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIEZpbGVtYXAgRHJvcGJlaGluZCBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIGluIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4gU3BlY2lmaWNhbGx5LCBpZiBhIGZvbGlvIGlzbiYjMzk7dCBtYXBwZWQsIHRoZW4gd2UgY2FsbCB0aGUgdW5tYXAgZnVuY3Rpb24uIEJ1dCwgaWYgaXQgKmlzKiBtYXBwZWQsIHRoZW4gd2Ugc2tpcCB0aGUgY2FsbC4gVGhlIHJlYXNvbiBpcyB0aGF0IHVubWFwcGluZyBhIGZvbGlvIHRoYXQmIzM5O3MgbWFwcGVkIGluIHVzZXJzcGFjZSAobGlrZSB0aHJvdWdoIGBtbWFwYCkgZHVyaW5nIHRoZSBkcm9wYmVoaW5kIHByb2Nlc3MgY291bGQgYmUgZXhwZW5zaXZlLCBjYXVzZSBwcm9ibGVtcywgb3IgaW50cm9kdWNlIGxvY2sgaW52ZXJzaW9uLiBNYWtlcyBzZW5zZS4gSXQmIzM5O3MgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGF2b2lkaW5nIHRoZSBvdmVyaGVhZCB3aGVuIHRoZSBmb2xpbyBpcyBtYXBwZWQuCgpUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgb3B0aW1pemF0aW9uIHdvcnRoeSBvZiBmdXp6aW5nPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93biB1c2luZyBteSBjcml0ZXJpYSBmb3IgZGV0ZXJtaW5pbmcgZnV6emluZyB3b3J0aGluZXNzLgoKRmlyc3QsIGlzIHRoaXMganVzdCBkb2NzLCBsb2dnaW5nLCBvciB0cml2aWFsIGNoYW5nZXM/IE5vLiBJdCB0b3VjaGVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgYG1tL2ZpbGVtYXAuY2AsIGFuZCB0aGUgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgIGZ1bmN0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgZHJvcGJlaGluZCBvcHRpbWl6YXRpb24uIEl0IGlzIG5vdCBjb3NtZXRpYy4KClNlY29uZCwgZG9lcyBpdCB0b3VjaCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gSS9PIG9wZXJhdGlvbnMgbGlrZSBgcmVhZGAsIGB3cml0ZWAgd2l0aCBgUldGX0RPTlRDQUNIRWAsIG9yIGBwb3NpeF9mYWR2aXNlYCwgb3IgdW5jYWNoZWQgSS9PLCBvciBidWZmZXJlZCBJL08gY291cGxlZCB3aXRoIGBtbWFwYCBhbGwgY2FuIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpHaXZlbiB0aGF0IGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBJJiMzOTttIGdvaW5nIHRvIHNheSBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIFRoaXMgaXMgYSBjbGVhciBjYXNlIGZvciBpdC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGZ1enppbmcgdGFyZ2V0LiBXaGF0IGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGZ1enplZD8gTGV0JiMzOTtzIGZpbmQgdGhvc2UgdGhhdCBhcmUgcmVsYXRlZCB0byBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAuIEkga25vdyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAgaXMgc3RhdGljLCBidXQgbGV0JiMzOTtzIHNlZSB3aGljaCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSBpdCBvciBjYWxsIGl0LCBhbmQgd2hpY2ggb2YgdGhvc2UgYXJlIG5vdCBzdGF0aWMuCgpUaGUgZm9sbG93aW5nIGNhbGwgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgOgoqICAgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCB3aGljaCBpcyBleHBvcnRlZC4KKiAgIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWRgIHdoaWNoIGlzIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBmaWxlbWFwX3JlYWRgLgoqICAgYGZvbGlvX2VuZF93cml0ZWJhY2tgIGlzIGV4cG9ydGVkLgoqICAgYGZpbGVtYXBfcmVhZGAgd2hpY2ggdGFrZXMgYXJndW1lbnRzIGFuZCByZXR1cm5zIGEgYHNzaXplX3RgLgoqICAgYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgIHdoaWNoIGNhbGxzIGBmaWxlbWFwX3JlYWRgLgoKU28sIHRoZSBmb2N1cyBzeW1ib2xzIHdvdWxkIGJlIGBmb2xpb19lbmRfZHJvcGJlaGluZGAsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYW5kIGBmaWxlbWFwX3JlYWRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19lbmRfZHJvcGJlaGluZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZnMvd3JpdGUuYz03MzU9c3RhdGljIHZvaWQgbmZzX2lub2RlX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCBuZnNfcGFnZSAqcmVxKVxuLS1cbmZzL25mcy93cml0ZS5jLTc1MS1cbmZzL25mcy93cml0ZS5jOjc1MjpcdFx0XHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XG5mcy9uZnMvd3JpdGUuYy03NTMtXHRcdH1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xMzExPXZvaWQgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTMxMjp2b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTMxMy12b2lkIGZvbGlvX3dhaXRfc3RhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbm1tL2ZpbGVtYXAuYz0xNjA5PXN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMTYyNy0gKi9cbm1tL2ZpbGVtYXAuYzoxNjI4OnZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2ZpbGVtYXAuYy0xNjI5LXtcbi0tXG5tbS9maWxlbWFwLmMtMTY0NC19XG5tbS9maWxlbWFwLmM6MTY0NTpFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfZHJvcGJlaGluZCk7XG5tbS9maWxlbWFwLmMtMTY0Ni1cbi0tXG5tbS9maWxlbWFwLmM9MTY4Nz12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMTY5OC1cdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG5tbS9maWxlbWFwLmM6MTY5OTpcdGZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0xNzAwLVx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NjcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIERyb3BiZWhpbmQgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiBob3cgdGhpcyAmIzM0O2Ryb3BiZWhpbmQmIzM0OyBmdW5jdGlvbmFsaXR5IGlzIGluaXRpYXRlZCBhbmQsIHVsdGltYXRlbHksIGFjdGl2YXRlZCB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGNvcmUgbWVjaGFuaXNtcy4gQSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgZmlsZSBJL08sIGlzIHRoZSBgZmlsZW1hcF9yZWFkYCBmdW5jdGlvbi4gSXTigJlzIGEgZm91bmRhdGlvbmFsIHBpZWNlIGZvciByZWFkaW5nIGRhdGEgZnJvbSBmaWxlcywgc28gSSBzdXNwZWN0IGl0IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIG1hbmFnaW5nIHRoZSBjYWNoaW5nIGFuZCBldmljdGlvbiBiZWhhdmlvciB0aGF0IHVuZGVycGlucyBkcm9wYmVoaW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHZhcmlhYmxlcyBhbmQgY29uZGl0aW9ucyB3aXRoaW4gYGZpbGVtYXBfcmVhZGAgYXJlIHJlc3BvbnNpYmxlIGZvciBtYXJraW5nIHBhZ2VzIGZvciBwb3RlbnRpYWwgZHJvcHBpbmcsIGFuZCB0aGUgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCB0aGlzICYjMzQ7ZHJvcGJlaGluZCYjMzQ7IGZsYWcgaXMgYWN0dWFsbHkgc2V0LiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBkZXRlcm1pbmVzIHdoZXRoZXIgdG8ga2VlcCBhIHBhZ2UgaW4gdGhlIGNhY2hlIG9yIHByaW9yaXRpemUgaXRzIGV2aWN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHByb2JsZW1zKSBsaWtlbHkgbGllcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGBmaWxlbWFwX3JlYWRgIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODgwOlx0XG4yODgxOlx0XHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpIHtcbjI4ODI6XHRcdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbjI4ODM6XHRcdFx0XHRcdGJyZWFrO1xuMjg4NDpcdFx0XHRcdH1cbjI4ODU6XHRcdFx0fVxuMjg4NjpcdHB1dF9mb2xpb3M6XG4yODg3Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX2JhdGNoX2NvdW50KFx1MDAyNmZiYXRjaCk7IGkmIzQzOyYjNDM7KSB7XG4yODg4Olx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGZiYXRjaC5mb2xpb3NbaV07XG4yODg5Olx0XG4yODkwOlx0XHRcdFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKGZvbGlvKTtcbjI4OTE6XHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMjg5MjpcdFx0XHR9XG4yODkzOlx0XHRcdGZvbGlvX2JhdGNoX2luaXQoXHUwMDI2ZmJhdGNoKTtcbjI4OTQ6XHRcdH0gd2hpbGUgKGlvdl9pdGVyX2NvdW50KGl0ZXIpIFx1MDAyNlx1MDAyNiBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2MgaXNpemUgXHUwMDI2XHUwMDI2ICFlcnJvcik7XG4yODk1Olx0XG4yODk2Olx0XHRmaWxlX2FjY2Vzc2VkKGZpbHApO1xuMjg5NzpcdFx0cmEtXHUwMDNlcHJldl9wb3MgPSBsYXN0X3BvcztcbjI4OTg6XHRcdHJldHVybiBhbHJlYWR5X3JlYWQgPyBhbHJlYWR5X3JlYWQgOiBlcnJvcjtcbjI4OTk6XHR9XG4yOTAwOlx0RVhQT1JUX1NZTUJPTF9HUEwoZmlsZW1hcF9yZWFkKTtcbjI5MDE6XHRcbjI5MDI6XHRpbnQga2lvY2Jfd3JpdGVfYW5kX3dhaXQoc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgY291bnQpXG4yOTAzOlx0e1xuMjkwNDpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nO1xuMjkwNTpcdFx0bG9mZl90IHBvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuMjkwNjpcdFx0bG9mZl90IGVuZCA9IHBvcyAmIzQzOyBjb3VudCAtIDE7XG4yOTA3Olx0XG4yOTA4Olx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpIHtcbjI5MDk6XHRcdFx0aWYgKGZpbGVtYXBfcmFuZ2VfbmVlZHNfd3JpdGViYWNrKG1hcHBpbmcsIHBvcywgZW5kKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MDYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNTeW1ib2wgRGV0ZXJtaW5hdGlvbiBmb3IgRmlsZSBTeXN0ZW0gRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgZ29vZCBjYW5kaWRhdGVzIGZvciBgRm9jdXNTeW1ib2xzYCwga2VlcGluZyBmdXp6aW5nIGRpc3RyaWJ1dGlvbiBpbiBtaW5kLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBmb2N1cyBvbiBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgbmVlZCBoZWF2eSBmdXp6aW5nLCBhdm9pZGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gV2Ugd2FudCBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgcmF0aGVyIHRoYW4gaW50ZXJuYWwsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLgoKUmlnaHQsIGxldCYjMzk7cyBzdGFydCB3aXRoIGBmb2xpb19lbmRfZHJvcGJlaGluZGAuIEl0JiMzOTtzIGEgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb24sIGV4cG9ydGVkIGZyb20gYG1tL2ZpbGVtYXAuY2AuIE5vdywgaXMgaXQgYSBnZW5lcmljIGhvdC1wYXRoPyBObywgaXQgbG9va3MgcHJldHR5IHNwZWNpZmljIHRvIHRoZSBkcm9wYmVoaW5kIG1lY2hhbmlzbSDigJMgdGhlIHVuY2FjaGVkL0RPTlRDQUNIRSBJL08gcGFnZSBjYWNoZSBpbnZhbGlkYXRpb24uIFRoYXQgc2VlbXMgcHJvbWlzaW5nLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gZHJvcGJlaGluZCBvciB0aGlzIHVuY2FjaGVkIEkvTyBwYXRoIHRoYXQgd2UgbWlnaHQgYWxzbyBjb25zaWRlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nIHJlbGV2YW50LiBJIGtub3cgb2YgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCwgYW5kIG5vdyBJIHJlbWVtYmVyIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4uLgoKTGV0JiMzOTtzIGxvb2sgYXQgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgLiBBaCwgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbW0vdHJ1bmNhdGUuY2AuIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBpdCYjMzk7cyBhbHNvIG5vbi1zdGF0aWMhIFNvIGl0JiMzOTtzIGFub3RoZXIgZ29vZCBjYW5kaWRhdGUuIGBpbnQgZm9saW9fdW5tYXBfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKWAsIGxvb2tzIHJpZ2h0LiBJdCYjMzk7cyBkZWNsYXJlZCBpbiBgbW0vaW50ZXJuYWwuaGAuCgpCZWZvcmUgSSBjb21taXQgdG8gdGhlc2UsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiBhbnkgc3BlY2lmaWMgYENPTkZJR19gIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSBgbW0vZmlsZW1hcC5jYCBvciB0aGUgZHJvcGJlaGluZCBmZWF0dXJlcy4gSSBuZWVkIHRvIGxvb2sgYXQgYG1tL01ha2VmaWxlYCBhbmQgYG1tL0tjb25maWdgIHRvIHNlZSBob3cgYGZpbGVtYXAub2AgaXMgYnVpbHQsIGFuZCBpZiBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHBsYXkgYSByb2xlIGhlcmUsIHRvIG1ha2Ugc3VyZSB0aGVzZSBhcmUgYWN0dWFsbHkgcmVsZXZhbnQgdG8gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHdlJiMzOTtyZSB0YXJnZXRpbmcuIEkgY2FuJiMzOTt0IGJlIG92ZXJsb29raW5nIHRob3NlIGRldGFpbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGVtYXBcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTQ5PWVuZGlmXG5tbS9NYWtlZmlsZS01MC1cbm1tL01ha2VmaWxlOjUxOm9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxubW0vTWFrZWZpbGUtNTItXHRcdFx0ICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgdGhlIEJ1aWxkIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYGZpbGVtYXAub2AgaXMgY29uc2lzdGVudGx5IGJlaW5nIGJ1aWx0LCBpbmRpY2F0ZWQgYnkgdGhlIGBvYmoteWAgYXNzaWdubWVudC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3c7IGl0JiMzOTtzIGEgY29yZSBjb21wb25lbnQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWdzIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgaXQgYmVoYXZlcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHBhZ2UgbWFuYWdlbWVudC4gVGhlIGhpbnRzIG9mIGBQR19kcm9wYmVoaW5kYCBhbmQgYGZvbGlvX21hcHBlZGAgbWFrZSBtZSB0aGluayB0aGF0IHRoZSBjb2RlIGRlYWxzIHdpdGggcGFnZSBjYWNoaW5nIHN0cmF0ZWdpZXMsIHBlcmhhcHMgcmVsYXRlZCB0byB0aGUgZmlsZXN5c3RlbSBjYWNoZSBhbmQgd3JpdGUtYmVoaW5kIGJlaGF2aW9yLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBoZWFkZXIgZmlsZSB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIGxvb2sgZm9yIG1vcmUgaW5mb3JtYXRpb24uIExldCYjMzk7cyBnbyBjaGVjayB0aGUgZGVmaW5pdGlvbiBmb3IgYFBHX2Ryb3BiZWhpbmRgIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwNTpcdFx0UEdfb3duZXJfMixcdFx0LyogT3duZXIgdXNlLiBJZiBwYWdlY2FjaGUsIGZzIG1heSB1c2UgKi9cbiAxMDY6XHRcdFBHX2FyY2hfMSxcbiAxMDc6XHRcdFBHX3Jlc2VydmVkLFxuIDEwODpcdFx0UEdfcHJpdmF0ZSxcdFx0LyogSWYgcGFnZWNhY2hlLCBoYXMgZnMtcHJpdmF0ZSBkYXRhICovXG4gMTA5Olx0XHRQR19wcml2YXRlXzIsXHRcdC8qIElmIHBhZ2VjYWNoZSwgaGFzIGZzIGF1eCBkYXRhICovXG4gMTEwOlx0XHRQR19yZWNsYWltLFx0XHQvKiBUbyBiZSByZWNsYWltZWQgYXNhcCAqL1xuIDExMTpcdFx0UEdfc3dhcGJhY2tlZCxcdFx0LyogUGFnZSBpcyBiYWNrZWQgYnkgUkFNL3N3YXAgKi9cbiAxMTI6XHRcdFBHX3VuZXZpY3RhYmxlLFx0XHQvKiBQYWdlIGlzIFwmIzM0O3VuZXZpY3RhYmxlXCYjMzQ7ICAqL1xuIDExMzpcdFx0UEdfZHJvcGJlaGluZCxcdFx0LyogZHJvcCBwYWdlcyBvbiBJTyBjb21wbGV0aW9uICovXG4gMTE0Olx0I2lmZGVmIENPTkZJR19NTVVcbiAxMTU6XHRcdFBHX21sb2NrZWQsXHRcdC8qIFBhZ2UgaXMgdm1hIG1sb2NrZWQgKi9cbiAxMTY6XHQjZW5kaWZcbiAxMTc6XHQjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4gMTE4Olx0XHRQR19od3BvaXNvbixcdFx0LyogaGFyZHdhcmUgcG9pc29uZWQgcGFnZS4gRG9uJiMzOTt0IHRvdWNoICovXG4gMTE5Olx0I2VuZGlmXG4gMTIwOlx0I2lmIGRlZmluZWQoQ09ORklHX1BBR0VfSURMRV9GTEFHKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG4gMTIxOlx0XHRQR195b3VuZyxcbiAxMjI6XHRcdFBHX2lkbGUsXG4gMTIzOlx0I2VuZGlmXG4gMTI0Olx0I2lmZGVmIENPTkZJR19BUkNIX1VTRVNfUEdfQVJDSF8yXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjA4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBJc3N1ZSB3aXRoIFBhZ2UgRmxhZ3MqKgoKT2theSwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgUEdfZHJvcGJlaGluZGAgZmxhZyBhbmQgSSBzZWUgaXQmIzM5O3Mgbm90IGd1YXJkZWQgYnkgYW4gYCNpZmRlZmAgaW4gYHBhZ2VmbGFnc2AuIFRoYXQmIzM5O3MgYSBsaXR0bGUgdW51c3VhbCwgYW5kIGl0IG1ha2VzIG1lIHdvbmRlciBpZiB0aGVyZSYjMzk7cyBhbiBpbnRlbmRlZCBwbGF0Zm9ybSBkZXBlbmRlbmN5IGhlcmUgdGhhdCYjMzk7cyBiZWluZyBvdmVybG9va2VkLiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHRoZSB1c2Ugb2YgYGZvbGlvX21hcHBlZGAgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSByZWxhdGVkIGxvZ2ljIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGdvaW5nIG9uIHRoZXJlLCBvciBpZiBzb21ldGhpbmcgaGFzIGdvbmUgYXdyeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZsYWcmIzM5O3MgdmlzaWJpbGl0eSBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZm9saW8gbWFwcGluZyBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGFuZCB3aGVyZSB0aGUgZmxhZyBpcyBiZWluZyBzZXQgYW5kIGNsZWFyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX21hcHBlZFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9tbS9mbHVzaC5jPTMzNj12b2lkIGZsdXNoX2RjYWNoZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmFyY2gvYXJtL21tL2ZsdXNoLmMtMzU1LVx0aWYgKCFjYWNoZV9vcHNfbmVlZF9icm9hZGNhc3QoKSBcdTAwMjZcdTAwMjZcbmFyY2gvYXJtL21tL2ZsdXNoLmM6MzU2Olx0ICAgIG1hcHBpbmcgXHUwMDI2XHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKVxuYXJjaC9hcm0vbW0vZmx1c2guYy0zNTctXHRcdGNsZWFyX2JpdChQR19kY2FjaGVfY2xlYW4sIFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLS1cbmFyY2gvY3NreS9hYml2MS9jYWNoZWZsdXNoLmM9MTg9dm9pZCBmbHVzaF9kY2FjaGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5hcmNoL2Nza3kvYWJpdjEvY2FjaGVmbHVzaC5jLTI2LVxuYXJjaC9jc2t5L2FiaXYxL2NhY2hlZmx1c2guYzoyNzpcdGlmIChtYXBwaW5nIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcbmFyY2gvY3NreS9hYml2MS9jYWNoZWZsdXNoLmMtMjgtXHRcdGNsZWFyX2JpdChQR19kY2FjaGVfY2xlYW4sIFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLS1cbmFyY2gvbWlwcy9tbS9jLXI0ay5jPTUzNz1zdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfcjRrX2ZsdXNoX2NhY2hlX3BhZ2Uodm9pZCAqYXJncylcbi0tXG5hcmNoL21pcHMvbW0vYy1yNGsuYy01NzYtXHRcdG1hcF9jb2hlcmVudCA9IChjcHVfaGFzX2RjX2FsaWFzZXMgXHUwMDI2XHUwMDI2XG5hcmNoL21pcHMvbW0vYy1yNGsuYzo1Nzc6XHRcdFx0XHRmb2xpb19tYXBwZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuYXJjaC9taXBzL21tL2MtcjRrLmMtNTc4LVx0XHRcdFx0IWZvbGlvX3Rlc3RfZGNhY2hlX2RpcnR5KGZvbGlvKSk7XG4tLVxuYXJjaC9taXBzL21tL2NhY2hlLmM9MTI3PXZvaWQgX19mbHVzaF9hbm9uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdm1hZGRyKVxuLS1cbmFyY2gvbWlwcy9tbS9jYWNoZS5jLTEzMi1cdGlmIChwYWdlc19kb19hbGlhcyhhZGRyLCB2bWFkZHIpKSB7XG5hcmNoL21pcHMvbW0vY2FjaGUuYzoxMzM6XHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9kY2FjaGVfZGlydHkoZm9saW8pKSB7XG5hcmNoL21pcHMvbW0vY2FjaGUuYy0xMzQtXHRcdFx0dm9pZCAqa2FkZHI7XG4tLVxuYXJjaC9taXBzL21tL2luaXQuYz0xNjA9dm9pZCBjb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSxcbi0tXG5hcmNoL21pcHMvbW0vaW5pdC5jLTE2Ny1cdGlmIChjcHVfaGFzX2RjX2FsaWFzZXMgXHUwMDI2XHUwMDI2XG5hcmNoL21pcHMvbW0vaW5pdC5jOjE2ODpcdCAgICBmb2xpb19tYXBwZWQoc3JjKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfZGNhY2hlX2RpcnR5KHNyYykpIHtcbmFyY2gvbWlwcy9tbS9pbml0LmMtMTY5LVx0XHR2ZnJvbSA9IGttYXBfY29oZXJlbnQoZnJvbSwgdmFkZHIpO1xuLS1cbmFyY2gvbWlwcy9tbS9pbml0LmM9MTg1PXZvaWQgY29weV90b191c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9taXBzL21tL2luaXQuYy0xOTEtXHRpZiAoY3B1X2hhc19kY19hbGlhc2VzIFx1MDAyNlx1MDAyNlxuYXJjaC9taXBzL21tL2luaXQuYzoxOTI6XHQgICAgZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfZGNhY2hlX2RpcnR5KGZvbGlvKSkge1xuYXJjaC9taXBzL21tL2luaXQuYy0xOTMtXHRcdHZvaWQgKnZ0byA9IGttYXBfY29oZXJlbnQocGFnZSwgdmFkZHIpICYjNDM7ICh2YWRkciBcdTAwMjYgflBBR0VfTUFTSyk7XG4tLVxuYXJjaC9taXBzL21tL2luaXQuYz0yMDU9dm9pZCBjb3B5X2Zyb21fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvbWlwcy9tbS9pbml0LmMtMjExLVx0aWYgKGNwdV9oYXNfZGNfYWxpYXNlcyBcdTAwMjZcdTAwMjZcbmFyY2gvbWlwcy9tbS9pbml0LmM6MjEyOlx0ICAgIGZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X2RjYWNoZV9kaXJ0eShmb2xpbykpIHtcbmFyY2gvbWlwcy9tbS9pbml0LmMtMjEzLVx0XHR2b2lkICp2ZnJvbSA9IGttYXBfY29oZXJlbnQocGFnZSwgdmFkZHIpICYjNDM7ICh2YWRkciBcdTAwMjYgflBBR0VfTUFTSyk7XG4tLVxuYXJjaC9zaC9tbS9jYWNoZS1zaDQuYz0yMTQ9c3RhdGljIHZvaWQgc2g0X2ZsdXNoX2NhY2hlX3BhZ2Uodm9pZCAqYXJncylcbi0tXG5hcmNoL3NoL21tL2NhY2hlLXNoNC5jLTI1MC1cdFx0XHR0ZXN0X2JpdChQR19kY2FjaGVfY2xlYW4sIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkgXHUwMDI2XHUwMDI2XG5hcmNoL3NoL21tL2NhY2hlLXNoNC5jOjI1MTpcdFx0XHRmb2xpb19tYXBwZWQoZm9saW8pKTtcbmFyY2gvc2gvbW0vY2FjaGUtc2g0LmMtMjUyLVx0XHRpZiAobWFwX2NvaGVyZW50KVxuLS1cbmFyY2gvc2gvbW0vY2FjaGUuYz02MD12b2lkIGNvcHlfdG9fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5hcmNoL3NoL21tL2NhY2hlLmMtNjUtXG5hcmNoL3NoL21tL2NhY2hlLmM6NjY6XHRpZiAoYm9vdF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzIFx1MDAyNlx1MDAyNiBmb2xpb19tYXBwZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuYXJjaC9zaC9tbS9jYWNoZS5jLTY3LVx0ICAgIHRlc3RfYml0KFBHX2RjYWNoZV9jbGVhbiwgXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZikpIHtcbi0tXG5hcmNoL3NoL21tL2NhY2hlLmM9ODE9dm9pZCBjb3B5X2Zyb21fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5hcmNoL3NoL21tL2NhY2hlLmMtODYtXG5hcmNoL3NoL21tL2NhY2hlLmM6ODc6XHRpZiAoYm9vdF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzIFx1MDAyNlx1MDAyNiBmb2xpb19tYXBwZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuYXJjaC9zaC9tbS9jYWNoZS5jLTg4LVx0ICAgIHRlc3RfYml0KFBHX2RjYWNoZV9jbGVhbiwgXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZikpIHtcbi0tXG5hcmNoL3NoL21tL2NhY2hlLmM9OTk9dm9pZCBjb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSxcbi0tXG5hcmNoL3NoL21tL2NhY2hlLmMtMTA2LVxuYXJjaC9zaC9tbS9jYWNoZS5jOjEwNzpcdGlmIChib290X2NwdV9kYXRhLmRjYWNoZS5uX2FsaWFzZXMgXHUwMDI2XHUwMDI2IGZvbGlvX21hcHBlZChzcmMpIFx1MDAyNlx1MDAyNlxuYXJjaC9zaC9tbS9jYWNoZS5jLTEwOC1cdCAgICB0ZXN0X2JpdChQR19kY2FjaGVfY2xlYW4sIFx1MDAyNnNyYy1cdTAwM2VmbGFncy5mKSkge1xuLS1cbmFyY2gvc2gvbW0vY2FjaGUuYz0xNTg9dm9pZCBfX2ZsdXNoX2Fub25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpXG4tLVxuYXJjaC9zaC9tbS9jYWNoZS5jLTE2My1cdGlmIChwYWdlc19kb19hbGlhcyhhZGRyLCB2bWFkZHIpKSB7XG5hcmNoL3NoL21tL2NhY2hlLmM6MTY0Olx0XHRpZiAoYm9vdF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzIFx1MDAyNlx1MDAyNiBmb2xpb19tYXBwZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuYXJjaC9zaC9tbS9jYWNoZS5jLTE2NS1cdFx0ICAgIHRlc3RfYml0KFBHX2RjYWNoZV9jbGVhbiwgXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZikpIHtcbi0tXG5hcmNoL3h0ZW5zYS9tbS90bGIuYz0yMzI9c3RhdGljIGludCBjaGVja190bGJfZW50cnkodW5zaWduZWQgdywgdW5zaWduZWQgZSwgYm9vbCBkdGxiKVxuLS1cbmFyY2gveHRlbnNhL21tL3RsYi5jLTI2NC1cdFx0XHRcdFx0cmMgfD0gVExCX0lOU0FORTtcbmFyY2gveHRlbnNhL21tL3RsYi5jOjI2NTpcdFx0XHRcdGVsc2UgaWYgKGZvbGlvX21hcHBlZChmKSlcbmFyY2gveHRlbnNhL21tL3RsYi5jLTI2Ni1cdFx0XHRcdFx0cmMgfD0gVExCX1NVU1BJQ0lPVVM7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmM9MzA3PXZvaWQgX19zaG1lbV93cml0ZWJhY2soc2l6ZV90IHNpemUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jLTMyNC1cdHdoaWxlICgoZm9saW8gPSB3cml0ZWJhY2tfaXRlcihtYXBwaW5nLCBcdTAwMjZ3YmMsIGZvbGlvLCBcdTAwMjZlcnJvcikpKSB7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0uYzozMjU6XHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtMzI2LVx0XHRcdGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZShcdTAwMjZ3YmMsIGZvbGlvKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iYWNrdXAuYz0xMDM9dHRtX2JhY2t1cF9iYWNrdXBfZm9saW8oc3RydWN0IGZpbGUgKmJhY2t1cCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iYWNrdXAuYy0xNTktXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iYWNrdXAuYzoxNjA6XHRcdGlmICh3cml0ZWJhY2sgXHUwMDI2XHUwMDI2ICFmb2xpb19tYXBwZWQodG9fZm9saW8pIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYmFja3VwLmMtMTYxLVx0XHQgICAgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHRvX2ZvbGlvKSkge1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0xNzA2PXN0YXRpYyB2b2lkIG1wYWdlX3JlbGVhc2VfdW51c2VkX3BhZ2VzKHN0cnVjdCBtcGFnZV9kYV9kYXRhICptcGQsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTE3NTAtXHRcdFx0aWYgKGludmFsaWRhdGUpIHtcbmZzL2V4dDQvaW5vZGUuYzoxNzUxOlx0XHRcdFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpIHtcbmZzL2V4dDQvaW5vZGUuYy0xNzUyLVx0XHRcdFx0XHRmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8oZm9saW8pO1xuLS1cbmZzL2Z1c2UvZGV2LmM9MTA5OD1zdGF0aWMgaW50IGZ1c2VfY2hlY2tfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbmZzL2Z1c2UvZGV2LmMtMTA5OS17XG5mcy9mdXNlL2Rldi5jOjExMDA6XHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSB8fFxuZnMvZnVzZS9kZXYuYy0xMTAxLVx0ICAgIGZvbGlvLVx1MDAzZW1hcHBpbmcgIT0gTlVMTCB8fFxuLS1cbmZzL2Z1c2UvZGV2LmM9MTEyMz1zdGF0aWMgaW50IGZ1c2VfdHJ5X21vdmVfZm9saW8oc3RydWN0IGZ1c2VfY29weV9zdGF0ZSAqY3MsIHN0cnVjdCBmb2xpbyAqKmZvbGlvcClcbi0tXG5mcy9mdXNlL2Rldi5jLTExNjctXHQgKi9cbmZzL2Z1c2UvZGV2LmM6MTE2ODpcdGlmIChXQVJOX09OKGZvbGlvX21hcHBlZChvbGRmb2xpbykpKVxuZnMvZnVzZS9kZXYuYy0xMTY5LVx0XHRnb3RvIG91dF9mYWxsYmFja191bmxvY2s7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NDk4PXN0YXRpYyB2b2lkIHJlbW92ZV9pbm9kZV9zaW5nbGVfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy01MTAtXHRmb2xpb19sb2NrKGZvbGlvKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUxMTpcdGlmICh1bmxpa2VseShmb2xpb19tYXBwZWQoZm9saW8pKSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTUxMi1cdFx0aHVnZXRsYl91bm1hcF9maWxlX2ZvbGlvKGgsIG1hcHBpbmcsIGZvbGlvLCBpbmRleCk7XG4tLVxuZnMvcHJvYy9wYWdlLmM9MTQ2PXU2NCBzdGFibGVfcGFnZV9mbGFncyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5mcy9wcm9jL3BhZ2UuYy0xNjYtXHQgKi9cbmZzL3Byb2MvcGFnZS5jOjE2NzpcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKVxuZnMvcHJvYy9wYWdlLmMtMTY4LVx0XHR1IHw9IEJJVF9VTEwoS1BGX01NQVApO1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xOTQ3PXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX21hcGNvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTE5NjUtICovXG5pbmNsdWRlL2xpbnV4L21tLmg6MTk2NjpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWFwcGVkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L21tLmgtMTk2Ny17XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTI5OTQ9c3RhdGljIGlubGluZSBib29sIGZvbGlvX21heWJlX21hcHBlZF9zaGFyZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMzAzMi0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjMwMzM6ICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIG9uIGFuIHVubWFwcGVkIGZvbGlvIC0tICFmb2xpb19tYXBwZWQoKSAtLSB0aGF0IGlzXG5pbmNsdWRlL2xpbnV4L21tLmgtMzAzNC0gKiBsb2NrZWQgd2lsbCByZXR1cm4gYSBzdGFibGUgcmVzdWx0LlxuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oPTEzNT1zdGF0aWMgaW5saW5lIHZvaWQgX19mb2xpb19sYXJnZV9tYXBjb3VudF9zYW5pdHlfY2hlY2tzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmgtMTU4LVx0XHRcdGZvbGlvLVx1MDAzZV9tbV9pZF9tYXBjb3VudFsxXSBcdTAwM2MgMCk7XG5pbmNsdWRlL2xpbnV4L3JtYXAuaDoxNTk6XHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2XG5pbmNsdWRlL2xpbnV4L3JtYXAuaC0xNjAtXHRcdFx0dGVzdF9iaXQoRk9MSU9fTU1fSURTX1NIQVJFRF9CSVROVU0sIFx1MDAyNmZvbGlvLVx1MDAzZV9tbV9pZHMpKTtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9wYWdlbWFwLmgtMjAtXHQoZm9saW9fdGVzdF9hbm9uKGZvbGlvKVx0XHQ/IFBBR0VNQVBfQU5PTllNT1VTICA6IFBBR0VNQVBfRklMRSkgfCBcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvcGFnZW1hcC5oOjIxOlx0KGZvbGlvX21hcHBlZChmb2xpbylcdFx0PyBQQUdFTUFQX01BUFBFRCAgICAgOiAwKSB8IFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9wYWdlbWFwLmgtMjItXHQoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pXHQ/IFBBR0VNQVBfU1dBUENBQ0hFICA6IDApIHwgXFxcbi0tXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz00MDU9c3RhdGljIGludCBfX3Vwcm9iZV93cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy00NTMtXHRmb2xpb19yZW1vdmVfcm1hcF9wdGUoZm9saW8sIGZ3LVx1MDAzZXBhZ2UsIHZtYSk7XG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzo0NTQ6XHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTQ1NS1cdCAgICAgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTc0PXZvaWQgZGFtb25fZm9saW9fbWtvbGQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTgwLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE4MTpcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSB8fCAhZm9saW9fcmF3X21hcHBpbmcoZm9saW8pKSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTgyLVx0XHRmb2xpb19zZXRfaWRsZShmb2xpbyk7XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTIzNj1ib29sIGRhbW9uX2ZvbGlvX3lvdW5nKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI0NC1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoyNDU6XHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykgfHwgIWZvbGlvX3Jhd19tYXBwaW5nKGZvbGlvKSkge1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI0Ni1cdFx0aWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI2MT1ib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI5My1cdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQ6XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6Mjk0Olx0XHRtYXRjaGVkID0gIWZvbGlvX21hcHBlZChmb2xpbykgfHwgIWZvbGlvX3Jhd19tYXBwaW5nKGZvbGlvKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yOTUtXHRcdGJyZWFrO1xuLS1cbm1tL2ZpbGVtYXAuYz0xNTA9c3RhdGljIHZvaWQgZmlsZW1hcF91bmFjY291bnRfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vZmlsZW1hcC5jLTE1NC1cbm1tL2ZpbGVtYXAuYzoxNTU6XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fbWFwcGVkKGZvbGlvKSwgZm9saW8pO1xubW0vZmlsZW1hcC5jOjE1NjpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfREVCVUdfVk0pIFx1MDAyNlx1MDAyNiB1bmxpa2VseShmb2xpb19tYXBwZWQoZm9saW8pKSkge1xubW0vZmlsZW1hcC5jLTE1Ny1cdFx0cHJfYWxlcnQoXCYjMzQ7QlVHOiBCYWQgcGFnZSBjYWNoZSBpbiBwcm9jZXNzICVzICBwZm46JTA1bHhcXG5cJiMzNDssXG4tLVxubW0vZmlsZW1hcC5jPTE2MDk9c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZpbGVtYXAuYy0xNjE4LVx0XHRyZXR1cm47XG5tbS9maWxlbWFwLmM6MTYxOTpcdGlmIChtYXBwaW5nIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL2ZpbGVtYXAuYy0xNjIwLVx0XHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcbi0tXG5tbS9mb2xpby5jPTUzMT1zdGF0aWMgdm9pZCBscnVfZGVhY3RpdmF0ZV9maWxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTUzOS1cdC8qIFNvbWUgcHJvY2Vzc2VzIGFyZSB1c2luZyB0aGUgZm9saW8gKi9cbm1tL2ZvbGlvLmM6NTQwOlx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpXG5tbS9mb2xpby5jLTU0MS1cdFx0cmV0dXJuO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDM2Mz1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQzNjYtXG5tbS9odWdlX21lbW9yeS5jOjQzNjc6XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fbWFwcGVkKGZvbGlvKSwgZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYy00MzY4LVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbi0tXG5tbS9odWdldGxiLmM9NTE4NT12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUzMDItXHRcdGlmICghaC1cdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXMgXHUwMDI2XHUwMDI2IF9fdm1hX3ByaXZhdGVfbG9jayh2bWEpIFx1MDAyNlx1MDAyNlxubW0vaHVnZXRsYi5jOjUzMDM6XHRcdCAgICAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xubW0vaHVnZXRsYi5jLTUzMDQtXHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjI0Mj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0MjYtXG5tbS9raHVnZXBhZ2VkLmM6MjQyNzpcdFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpXG5tbS9raHVnZXBhZ2VkLmMtMjQyOC1cdFx0XHR0cnlfdG9fdW5tYXAoZm9saW8sXG4tLVxubW0va3NtLmM9MTEyNj1zdGF0aWMgaW50IHJlbW92ZV9zdGFibGVfbm9kZShzdHJ1Y3Qga3NtX3N0YWJsZV9ub2RlICpzdGFibGVfbm9kZSlcbi0tXG5tbS9rc20uYy0xMTQ0LVx0ZXJyID0gLUVCVVNZO1xubW0va3NtLmM6MTE0NTpcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSkge1xubW0va3NtLmMtMTE0Ni1cdFx0Lypcbi0tXG5tbS9rc20uYz0xMzk0PXN0YXRpYyBpbnQgcmVwbGFjZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9rc20uYy0xNDc1LVx0Zm9saW9fcmVtb3ZlX3JtYXBfcHRlKGZvbGlvLCBwYWdlLCB2bWEpO1xubW0va3NtLmM6MTQ3NjpcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL2tzbS5jLTE0NzctXHRcdGZvbGlvX2ZyZWVfc3dhcChmb2xpbyk7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNTY4PWludCB1bm1hcF9wb2lzb25lZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBtdXN0X2tpbGwpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjE2LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNjE3Olx0cmV0dXJuIGZvbGlvX21hcHBlZChmb2xpbykgPyAtRUJVU1kgOiAwO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjE4LX1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE2MjQ9c3RhdGljIGJvb2wgaHdwb2lzb25fdXNlcl9tYXBwaW5ncyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcCxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NDUtXHQgKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTY0NjpcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTY0Ny1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzM2PWludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzgyLVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzgzOlx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc4NC1cdFx0dW5wb2lzb25fcHJfaW5mbyhcJiMzNDslI2x4OiBzb21lb25lIG1hcHMgdGhlIGh3cG9pc29uIHBhZ2VcXG5cJiMzNDssXG4tLVxubW0vbWVtb3J5LmM9NDg4MT12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy01MjE0LVx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fbnJfcGFnZXMoZm9saW8pICE9IG5yX3BhZ2VzLCBmb2xpbyk7XG5tbS9tZW1vcnkuYzo1MjE1Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fbWFwcGVkKGZvbGlvKSwgZm9saW8pO1xubW0vbWVtb3J5LmMtNTIxNi1cdFx0Zm9saW9fYWRkX25ld19hbm9uX3JtYXAoZm9saW8sIHZtYSwgYWRkcmVzcywgcm1hcF9mbGFncyk7XG4tLVxubW0vbWVtb3J5LmM9NTU0MT1zdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTU1NzYtXHRcdGlmIChyZXQgXHUwMDI2IFZNX0ZBVUxUX0xPQ0tFRCkge1xubW0vbWVtb3J5LmM6NTU3NzpcdFx0XHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL21lbW9yeS5jLTU1NzgtXHRcdFx0XHR1bm1hcF9tYXBwaW5nX2ZvbGlvKGZvbGlvKTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE4NDY9c3RhdGljIHZvaWQgZG9fbWlncmF0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTg3Ny1cdFx0XHRcdGdvdG8gcHV0X2ZvbGlvO1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxODc4Olx0XHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKSB7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE4NzktXHRcdFx0XHRmb2xpb19sb2NrKGZvbGlvKTtcbi0tXG5tbS9taWdyYXRlLmM9MTIxMz1zdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fdW5tYXAobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMTMzMy1cdFx0fVxubW0vbWlncmF0ZS5jOjEzMzQ6XHR9IGVsc2UgaWYgKGZvbGlvX21hcHBlZChzcmMpKSB7XG5tbS9taWdyYXRlLmMtMTMzNS1cdFx0LyogRXN0YWJsaXNoIG1pZ3JhdGlvbiBwdGVzICovXG4tLVxubW0vbWlncmF0ZS5jLTEzNDEtXG5tbS9taWdyYXRlLmM6MTM0MjpcdGlmICghZm9saW9fbWFwcGVkKHNyYykpIHtcbm1tL21pZ3JhdGUuYy0xMzQzLVx0XHRfX21pZ3JhdGVfZm9saW9fcmVjb3JkKGRzdCwgb2xkX2ZvbGlvX3N0YXRlLCBhbm9uX3ZtYSk7XG4tLVxubW0vbWlncmF0ZS5jPTE0ODA9c3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdldGxiX2ZvbGlvKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTE1MjktXG5tbS9taWdyYXRlLmM6MTUzMDpcdGlmIChmb2xpb19tYXBwZWQoc3JjKSkge1xubW0vbWlncmF0ZS5jLTE1MzEtXHRcdGlmICghZm9saW9fdGVzdF9hbm9uKHNyYykpIHtcbi0tXG5tbS9taWdyYXRlLmMtMTU0OC1cbm1tL21pZ3JhdGUuYzoxNTQ5Olx0aWYgKCFmb2xpb19tYXBwZWQoc3JjKSlcbm1tL21pZ3JhdGUuYy0xNTUwLVx0XHRyYyA9IG1vdmVfdG9fbmV3X2ZvbGlvKGRzdCwgc3JjLCBtb2RlKTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTU3MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV91bm1hcCh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTYxOC1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NjE5Olx0XHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjIwLVx0XHRcdHRyeV90b19taWdyYXRlKGZvbGlvLCAwKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjIxLVxubW0vbWlncmF0ZV9kZXZpY2UuYzo2MjI6XHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pIHx8XG5tbS9taWdyYXRlX2RldmljZS5jLTYyMy1cdFx0ICAgICFtaWdyYXRlX3ZtYV9jaGVja19wYWdlKHBhZ2UsIGZhdWx0X3BhZ2UpKSB7XG4tLVxubW0vcGFnZV9pZGxlLmM9OTc9c3RhdGljIHZvaWQgcGFnZV9pZGxlX2NsZWFyX3B0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vcGFnZV9pZGxlLmMtMTA3LVxubW0vcGFnZV9pZGxlLmM6MTA4Olx0aWYgKCFmb2xpb19tYXBwZWQoZm9saW8pIHx8ICFmb2xpb19yYXdfbWFwcGluZyhmb2xpbykpXG5tbS9wYWdlX2lkbGUuYy0xMDktXHRcdHJldHVybjtcbi0tXG5tbS9ybWFwLmM9NTUyPXZvaWQgX19pbml0IGFub25fdm1hX2luaXQodm9pZClcbi0tXG5tbS9ybWFwLmMtNTczLSAqIGVuc3VyZSB0aGF0IGFueSBhbm9uX3ZtYSBvYnRhaW5lZCBmcm9tIHRoZSBwYWdlIHdpbGwgc3RpbGwgYmUgdmFsaWQgZm9yIGFzXG5tbS9ybWFwLmM6NTc0OiAqIGxvbmcgYXMgd2Ugb2JzZXJ2ZSBmb2xpb19tYXBwZWQoKSBbIGhlbmNlIGFsbCB0aG9zZSBmb2xpb19tYXBwZWQoKSB0ZXN0cyBdLlxubW0vcm1hcC5jLTU3NS0gKlxuLS1cbm1tL3JtYXAuYz01ODc9c3RydWN0IGFub25fdm1hICpmb2xpb19nZXRfYW5vbl92bWEoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9ybWFwLmMtNTk3LVx0XHRnb3RvIG91dDtcbm1tL3JtYXAuYzo1OTg6XHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykpXG5tbS9ybWFwLmMtNTk5LVx0XHRnb3RvIG91dDtcbi0tXG5tbS9ybWFwLmMtNjEzLVx0ICovXG5tbS9ybWFwLmM6NjE0Olx0aWYgKCFmb2xpb19tYXBwZWQoZm9saW8pKSB7XG5tbS9ybWFwLmMtNjE1LVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5tbS9ybWFwLmM9NjMzPXN0cnVjdCBhbm9uX3ZtYSAqZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTY0NS1cdFx0Z290byBvdXQ7XG5tbS9ybWFwLmM6NjQ2Olx0aWYgKCFmb2xpb19tYXBwZWQoZm9saW8pKVxubW0vcm1hcC5jLTY0Ny1cdFx0Z290byBvdXQ7XG4tLVxubW0vcm1hcC5jLTY1Ni1cdFx0ICovXG5tbS9ybWFwLmM6NjU3Olx0XHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykpIHtcbm1tL3JtYXAuYy02NTgtXHRcdFx0dXBfcmVhZChcdTAwMjZyb290X2Fub25fdm1hLVx1MDAzZXJ3c2VtKTtcbi0tXG5tbS9ybWFwLmMtNjc1LVxubW0vcm1hcC5jOjY3NjpcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSkge1xubW0vcm1hcC5jLTY3Ny1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubW0vcm1hcC5jPTEyMDM9aW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9ybWFwLmMtMTIxNC1cbm1tL3JtYXAuYzoxMjE1Olx0aWYgKCFmb2xpb19tYXBwZWQoZm9saW8pKVxubW0vcm1hcC5jLTEyMTYtXHRcdHJldHVybiAwO1xuLS1cbm1tL3JtYXAuYz0yMjAxPXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTIyMTctXHQgKiBpbiBiZXR3ZWVuIGl0cyBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbCgpIGFuZCBmb2xpb19yZW1vdmVfcm1hcF8qKCksXG5tbS9ybWFwLmM6MjIxODpcdCAqIHRyeV90b191bm1hcCgpIG1heSByZXR1cm4gYmVmb3JlIGZvbGlvX21hcHBlZCgpIGhhcyBiZWNvbWUgZmFsc2UsXG5tbS9ybWFwLmMtMjIxOS1cdCAqIGlmIHBhZ2UgdGFibGUgbG9ja2luZyBpcyBza2lwcGVkOiB1c2UgVFRVX1NZTkMgdG8gd2FpdCBmb3IgdGhhdC5cbi0tXG5tbS9ybWFwLmM9MjQyNz1zdGF0aWMgaW50IGZvbGlvX25vdF9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3JtYXAuYy0yNDI4LXtcbm1tL3JtYXAuYzoyNDI5Olx0cmV0dXJuICFmb2xpb19tYXBwZWQoZm9saW8pO1xubW0vcm1hcC5jLTI0MzAtfVxuLS1cbm1tL3JtYXAuYz0yNDY1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjQ4MC1cdCAqIGluIGJldHdlZW4gaXRzIHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKCkgYW5kIGZvbGlvX3JlbW92ZV9ybWFwXyooKSxcbm1tL3JtYXAuYzoyNDgxOlx0ICogdHJ5X3RvX21pZ3JhdGUoKSBtYXkgcmV0dXJuIGJlZm9yZSBmb2xpb19tYXBwZWQoKSBoYXMgYmVjb21lIGZhbHNlLFxubW0vcm1hcC5jLTI0ODItXHQgKiBpZiBwYWdlIHRhYmxlIGxvY2tpbmcgaXMgc2tpcHBlZDogdXNlIFRUVV9TWU5DIHRvIHdhaXQgZm9yIHRoYXQuXG4tLVxubW0vcm1hcC5jPTI5NzU9c3RhdGljIHN0cnVjdCBhbm9uX3ZtYSAqcm1hcF93YWxrX2Fub25fbG9jayhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy0yOTg0LVx0ICogTm90ZTogcmVtb3ZlX21pZ3JhdGlvbl9wdGVzKCkgY2Fubm90IHVzZSBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoKVxubW0vcm1hcC5jOjI5ODU6XHQgKiBiZWNhdXNlIHRoYXQgZGVwZW5kcyBvbiBmb2xpb19tYXBwZWQoKTsgYnV0IG5vdCBhbGwgaXRzIHVzYWdlc1xubW0vcm1hcC5jLTI5ODYtXHQgKiBhcmUgaG9sZGluZyBtbWFwX2xvY2suIFVzZXJzIHdpdGhvdXQgbW1hcF9sb2NrIGFyZSByZXF1aXJlZCB0b1xuLS1cbm1tL3NobWVtLmM9MTYwNz1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vc2htZW0uYy0xNzE3LVxubW0vc2htZW0uYzoxNzE4Olx0XHRCVUdfT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XG5tbS9zaG1lbS5jLTE3MTktXHRcdGVycm9yID0gc3dhcF93cml0ZW91dChjdHgsIGZvbGlvKTtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NTUyPXZvaWQgZnJlZV9zd2FwX2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9zd2FwX3N0YXRlLmMtNTUzLXtcbm1tL3N3YXBfc3RhdGUuYzo1NTQ6XHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbm1tL3N3YXBfc3RhdGUuYy01NTUtXHQgICAgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbi0tXG5tbS9zd2FwZmlsZS5jPTE5OD1zdGF0aWMgaW50IF9fdHJ5X3RvX3JlY2xhaW1fc3dhcChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0yMzUtXHRuZWVkX3JlY2xhaW0gPSAoKGZsYWdzIFx1MDAyNiBUVFJTX0FOWVdBWSkgfHxcbm1tL3N3YXBmaWxlLmM6MjM2Olx0XHRcdCgoZmxhZ3MgXHUwMDI2IFRUUlNfVU5NQVBQRUQpIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSkgfHxcbm1tL3N3YXBmaWxlLmMtMjM3LVx0XHRcdCgoZmxhZ3MgXHUwMDI2IFRUUlNfRlVMTCkgXHUwMDI2XHUwMDI2IG1lbV9jZ3JvdXBfc3dhcF9mdWxsKGZvbGlvKSkpO1xuLS1cbm1tL3RydW5jYXRlLmM9MTU0PXN0YXRpYyB2b2lkIHRydW5jYXRlX2NsZWFudXBfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3RydW5jYXRlLmMtMTU1LXtcbm1tL3RydW5jYXRlLmM6MTU2Olx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpXG5tbS90cnVuY2F0ZS5jLTE1Ny1cdFx0dW5tYXBfbWFwcGluZ19mb2xpbyhmb2xpbyk7XG4tLVxubW0vdHJ1bmNhdGUuYz0xODA9c3RhdGljIGludCBmb2xpb19zcGxpdF9vcl91bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsXG4tLVxubW0vdHJ1bmNhdGUuYy0xOTktXHRcdHRyeV90b191bm1hcChmb2xpbywgdHR1X2ZsYWdzKTtcbm1tL3RydW5jYXRlLmM6MjAwOlx0XHRXQVJOX09OKGZvbGlvX21hcHBlZChmb2xpbykpO1xubW0vdHJ1bmNhdGUuYy0yMDEtXHR9XG4tLVxubW0vdHJ1bmNhdGUuYz02MjI9aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdHJ1bmNhdGUuYy02MjktXG5tbS90cnVuY2F0ZS5jOjYzMDpcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKVxubW0vdHJ1bmNhdGUuYy02MzEtXHRcdHVubWFwX21hcHBpbmdfZm9saW8oZm9saW8pO1xubW0vdHJ1bmNhdGUuYzo2MzI6XHRCVUdfT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XG5tbS90cnVuY2F0ZS5jLTYzMy1cbi0tXG5tbS90cnVuY2F0ZS5jPTY3Nj1pbnQgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vdHJ1bmNhdGUuYy03MDgtXG5tbS90cnVuY2F0ZS5jOjcwOTpcdFx0XHRpZiAoIWRpZF9yYW5nZV91bm1hcCBcdTAwMjZcdTAwMjYgZm9saW9fbWFwcGVkKGZvbGlvKSkge1xubW0vdHJ1bmNhdGUuYy03MTAtXHRcdFx0XHQvKlxuLS1cbm1tL3Ztc2Nhbi5jPTEwNTg9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTExMTYtXG5tbS92bXNjYW4uYzoxMTE3Olx0XHRpZiAoIXNjLVx1MDAzZW1heV91bm1hcCBcdTAwMjZcdTAwMjYgZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL3Ztc2Nhbi5jLTExMTgtXHRcdFx0Z290byBrZWVwX2xvY2tlZDtcbi0tXG5tbS92bXNjYW4uYy0xMzI3LVx0XHQgKi9cbm1tL3Ztc2Nhbi5jOjEzMjg6XHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKSB7XG5tbS92bXNjYW4uYy0xMzI5LVx0XHRcdGVudW0gdHR1X2ZsYWdzIGZsYWdzID0gVFRVX0JBVENIX0ZMVVNIO1xuLS1cbm1tL3Ztc2Nhbi5jLTEzNDktXHRcdFx0dHJ5X3RvX3VubWFwKGZvbGlvLCBmbGFncyk7XG5tbS92bXNjYW4uYzoxMzUwOlx0XHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKSB7XG5tbS92bXNjYW4uYy0xMzUxLVx0XHRcdFx0c3RhdC1cdTAwM2Vucl91bm1hcF9mYWlsICYjNDM7PSBucl9wYWdlcztcbi0tXG5tbS92bXNjYW4uYz0xNjc5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4tLVxubW0vdm1zY2FuLmMtMTcyMi1cdFx0XHRnb3RvIG1vdmU7XG5tbS92bXNjYW4uYzoxNzIzOlx0XHRpZiAoIXNjLVx1MDAzZW1heV91bm1hcCBcdTAwMjZcdTAwMjYgZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL3Ztc2Nhbi5jLTE3MjQtXHRcdFx0Z290byBtb3ZlO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ4NzU9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNDkyNy1cdFx0LyogcmV0cnkgZm9saW9zIHRoYXQgbWF5IGhhdmUgbWlzc2VkIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG5tbS92bXNjYW4uYzo0OTI4Olx0XHRpZiAoIXNraXBfcmV0cnkgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtNDkyOS1cdFx0ICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI4NQoJCQkJCQkJb3V0cHV0OiAxMjMKCQkJCQkJCXRob3VnaHRzOiAyNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRmlsZW1hcCBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggY29uY2VybmluZyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAsIHNwZWNpZmljYWxseSB0aGUgaW50ZXJuYWwgc3RhdGljIGhlbHBlci4gVGhlIGtleSBleHBvcnRlZCBmdW5jdGlvbnMgYXJlIGBmb2xpb19lbmRfZHJvcGJlaGluZGAgYW5kIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4gSSBzaG91bGQgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIGBtbS9maWxlbWFwLmNgIGFuZCBlbHNld2hlcmUgdG8gc2VlIGlmIGFueSByZWxhdGVkIGZ1bmN0aW9ucyB3YXJyYW50IGNsb3NlciBzY3J1dGlueS4gU2luY2UgdGhvc2UgYXJlIHRoZSByZWxldmFudCBmdW5jdGlvbnMuCgpOb3csIGNvbmZpZ3VyYXRpb24td2lzZSwgSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIGV4cGxpY2l0bHkgcmVxdWlyZWQuIFRoZSBzb3VyY2UgZmlsZSwgYG1tL2ZpbGVtYXAuY2AsIGlzIGJ1aWx0IHVuY29uZGl0aW9uYWxseSAob2JqLXkpLCBzbyB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgZW1wdHksIHdoaWNoIGFsaWducyB3aXRoIG15IGluaXRpYWwgYXNzZXNzbWVudC4gTm8gcmVhbCBrbm9icyB0byB0d2VhayB0aGVyZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTttIGdvaW5nIHRvIHJlLWNvbmZpcm0gdGhhdCB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGlzIHNldCB0byB0cnVlLiBCYXNlZCBvbiB0aGUgcmVhc29uaW5nIHByb3ZpZGVkLCB0aGF0IG1ha2VzIHNlbnNlLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgZnVuZGFtZW50YWwgcGFnZSBjYWNoZSBsb2dpYzogYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKWAgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWRkIGEgY2hlY2sgZm9yIGZvbGlvIG1hcHBpbmcgYmVmb3JlIGNhbGxpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKWAuIFRoaXMgaW1wYWN0cyB1bmNhY2hlZCBJL08gYW5kIHBhZ2UgY2FjaGUgZXZpY3Rpb24gcGF0aHMuIFRoaXMgaXMgZGVmaW5pdGVseSBmdXp6YWJsZS4gQW5kIHRoaXMgc291bmRzIGxpa2UgYSB2ZXJ5IHZhbHVhYmxlIGNoYW5nZS4KClNvIHRvIHJlY2FwOiBJJiMzOTttIGZvY3VzZWQgb24gYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCBhbmQgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgLiBObyBzcGVjaWFsIGNvbmZpZ3MgYXJlIG5lZWRlZC4gRXZlcnl0aGluZyBpcyBpbiBvcmRlci4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19lbmRfZHJvcGJlaGluZCYjMzQ7LAogICAgJiMzNDtmb2xpb191bm1hcF9pbnZhbGlkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgcGFnZSBjYWNoZSBkcm9wYmVoaW5kIGludmFsaWRhdGlvbiBsb2dpYyBpbiBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKCkgYnkgYWRkaW5nIGEgY2hlY2sgKCFmb2xpb19tYXBwZWQoZm9saW8pKSBiZWZvcmUgY2FsbGluZyBmb2xpb191bm1hcF9pbnZhbGlkYXRlKCkuIFRoaXMgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB1bmNhY2hlZCAvIGRyb3BiZWhpbmQgSS9PIHByb2Nlc3NpbmcgKGUuZy4gUldGX0RPTlRDQUNIRSkgYW5kIHdyaXRlYmFjayBjb21wbGV0aW9uIGluIHJlYWNoYWJsZSwgc3RhbmRhcmQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX2VuZF9kcm9wYmVoaW5kJiMzNDssCiAgICAmIzM0O2ZvbGlvX3VubWFwX2ludmFsaWRhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBwYWdlIGNhY2hlIGRyb3BiZWhpbmQgaW52YWxpZGF0aW9uIGxvZ2ljIGluIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKSBieSBhZGRpbmcgYSBjaGVjayAoIWZvbGlvX21hcHBlZChmb2xpbykpIGJlZm9yZSBjYWxsaW5nIGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKS4gVGhpcyBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHVuY2FjaGVkIC8gZHJvcGJlaGluZCBJL08gcHJvY2Vzc2luZyAoZS5nLiBSV0ZfRE9OVENBQ0hFKSBhbmQgd3JpdGViYWNrIGNvbXBsZXRpb24gaW4gcmVhY2hhYmxlLCBzdGFuZGFyZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpYCB0byBhZGQgYSBgIWZvbGlvX21hcHBlZChmb2xpbylgIGNoZWNrIGJlZm9yZSBpbnZva2luZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpYCwgcHJldmVudGluZyBkcm9wYmVoaW5kIGludmFsaWRhdGlvbiBvZiBmb2xpb3MgdGhhdCBhcmUgY3VycmVudGx5IG1hcHBlZCBpbnRvIHVzZXIgcGFnZSB0YWJsZXMuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjay9oZWFwIGJ1ZmZlciBjb3B5aW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gSXQgb25seSBhZGRzIGEgc3RhdGUgY2hlY2sgb24gZXhpc3RpbmcgbG9ja2VkIGZvbGlvcyB3aXRoaW4gdGhlIHBhZ2UgY2FjaGUuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byBmb2xpbyBsaWZlY3ljbGUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgbWVtb3J5IHNhZmV0eSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyAoZS5nLiBgVk1fQlVHX09OX0ZPTElPYCkgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWYzZmFhYmM4Mzk3NmYyYjgyMTFlZmFlMDhiNGU2ZWE3Nzg1NDkwZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDE3OjU1OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDZhZmVjNjM2ODgxZmIuLjAwZmQ4OWNmNmY1NTAgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTE2MTYsNyAmIzQzOzE2MTYsNyBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCXJldHVybjsKIAlpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpCiAJCXJldHVybjsKLQlpZiAobWFwcGluZykKJiM0MzsJaWYgKG1hcHBpbmcgJmFtcDsmYW1wOyAhZm9saW9fbWFwcGVkKGZvbGlvKSkKIAkJZm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBsYW5kZWQgaW4gbXkgcXVldWUsIGFuZCB0aGUgZmlyc3QgdGhvdWdodCB0aGF0IGhpdHMgbWUgaXM6IGRvZXMgdGhpcyB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbj8gTGV0JiMzOTtzIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGdvb2QsIGhhcmQgbG9vayBhdCB0aGlzIGRpZmY6CgpgYGBkaWZmCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggNmFmZWM2MzY4ODFmYi4uMDBmZDg5Y2Y2ZjU1MAotLS0gYS9tbS9maWxlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jCkBAIC0xNjE2LDcgJiM0MzsxNjE2LDcgQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlyZXR1cm47CiAJaWYgKCFmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKQogCQlyZXR1cm47Ci0JaWYgKG1hcHBpbmcpCiYjNDM7CWlmIChtYXBwaW5nICZhbXA7JmFtcDsgIWZvbGlvX21hcHBlZChmb2xpbykpCiAJCWZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApOwogfQpgYGAKCkl0JiMzOTtzIGEgc3VidGxlIGNoYW5nZSwgaXQgbG9va3MgbGlrZSB0aGVyZSBpcyBhIG5ldyBjb25kaXRpb24gb24gYSBmb2xpbyB1bm1hcCwgY2hlY2tpbmcgaWYgaXQmIzM5O3MgbWFwcGVkIGJlZm9yZSBpbnZhbGlkYXRpbmcgaXQsIHdoaWNoIGFwcGVhcnMgdG8gYmUgd2l0aGluIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYC4gSSBuZWVkIHRvIHJldmlldyB0aGUgbG9naWMgYXJvdW5kIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCBpdHNlbGYgYW5kIGdldCBhIGZlZWwgZm9yIGhvdyBvZnRlbiB0aGlzIGNvZGUgcGF0aCBpcyBoaXQgYW5kIHdoYXQgc29ydCBvZiBvYmplY3RzIGFyZSBiZWluZyBtYW5pcHVsYXRlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGJhc2lzIGZvciBkZWNpZGluZyBpZiB3ZSBuZWVkIHRvIGV4cGFuZCB0aGUgc2NvcGUgZm9yIGZ1enppbmcgdGhpcyBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2ZpbGVtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYwMDpcdFx0XHRyZXQgPSBmb2xpb193YWl0X2JpdF9raWxsYWJsZShmb2xpbywgUEdfcHJpdmF0ZV8yKTtcbjE2MDE6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE2MDI6XHRcdFx0XHRicmVhaztcbjE2MDM6XHRcdH1cbjE2MDQ6XHRcbjE2MDU6XHRcdHJldHVybiByZXQ7XG4xNjA2Olx0fVxuMTYwNzpcdEVYUE9SVF9TWU1CT0woZm9saW9fd2FpdF9wcml2YXRlXzJfa2lsbGFibGUpO1xuMTYwODpcdFxuMTYwOTpcdHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbjE2MTA6XHR7XG4xNjExOlx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvLVx1MDAzZW1hcHBpbmc7XG4xNjEyOlx0XG4xNjEzOlx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuMTYxNDpcdFxuMTYxNTpcdFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSB8fCBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcbjE2MTY6XHRcdFx0cmV0dXJuO1xuMTYxNzpcdFx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKVxuMTYxODpcdFx0XHRyZXR1cm47XG4xNjE5Olx0XHRpZiAobWFwcGluZyBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXG4xNjIwOlx0XHRcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xuMTYyMTpcdH1cbjE2MjI6XHRcbjE2MjM6XHQvKlxuMTYyNDpcdCAqIElmIGZvbGlvIHdhcyBtYXJrZWQgYXMgZHJvcGJlaGluZCwgdGhlbiBwYWdlcyBzaG91bGQgYmUgZHJvcHBlZCB3aGVuIHdyaXRlYmFja1xuMTYyNTpcdCAqIGNvbXBsZXRlcy4gRG8gdGhhdCBub3cuIElmIHdlIGZhaWwsIGl0JiMzOTtzIGxpa2VseSBiZWNhdXNlIG9mIGEgYmlnIGZvbGlvIC1cbjE2MjY6XHQgKiBqdXN0IHJlc2V0IGRyb3BiZWhpbmQgZm9yIHRoYXQgY2FzZSBhbmQgbGF0dGVyIGNvbXBsZXRpb25zIHNob3VsZCBpbnZhbGlkYXRlLlxuMTYyNzpcdCAqL1xuMTYyODpcdHZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbjE2Mjk6XHR7XG4xNjMwOlx0XHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG4xNjMxOlx0XHRcdHJldHVybjtcbjE2MzI6XHRcbjE2MzM6XHRcdC8qXG4xNjM0Olx0XHQgKiBIaXR0aW5nICFpbl90YXNrKCkgc2hvdWxkIG5vdCBoYXBwZW4gb2ZmIFJXRl9ET05UQ0FDSEUgd3JpdGViYWNrLFxuMTYzNTpcdFx0ICogYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZCBkaXJ0eSBmb2xpb3NcbjE2MzY6XHRcdCAqIHRoYXQgd2VyZSBjcmVhdGVkIGFzIHBhcnQgb2YgdW5jYWNoZWQgd3JpdGViYWNrLCBhbmQgdGhhdCB3cml0ZWJhY2tcbjE2Mzc6XHRcdCAqIHdvdWxkIG90aGVyd2lzZSBub3QgbmVlZCBub24tSVJRIGhhbmRsaW5nLiBKdXN0IHNraXAgdGhlXG4xNjM4Olx0XHQgKiBpbnZhbGlkYXRpb24gaW4gdGhhdCBjYXNlLlxuMTYzOTpcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCBzcGVha2luZyBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgRmlsZSBNYXBwaW5nIGFuZCBJbnZhbGlkYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCBhbmQgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgcGxheSBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBmaWxlIGNhY2hpbmcsIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIG9mIHBhZ2VzIHRoYXQgYXJlIGJhY2tlZCBieSBmaWxlcy4gSSBuZWVkIHRvIHJlbWVtYmVyIGV4YWN0bHkgd2hhdCBlYWNoIG9mIHRoZW0gaXMgcmVzcG9uc2libGUgZm9yIGRvaW5nLiBBcmUgdGhleSByZWxhdGVkPyBEbyB0aGV5IGNhbGwgZWFjaCBvdGhlcj8gRG8gdGhleSBpbnRlcmFjdCB3aXRoIGFueSBvZiB0aGUgc2FtZSBzdHJ1Y3R1cmVzLCBvciB3b3JrIG9uIHNpbWlsYXIga2luZHMgb2YgZGF0YT8gV2hhdCBraW5kIG9mIGNvbnRleHQgdHJpZ2dlcnMgdGhlaXIgdXNlPyBIb3cgZG8gdGhleSBhZmZlY3QgdGhlIGZpbGVzeXN0ZW0gbWV0YWRhdGEsIGFuZCB0aGUgcGFnZSBjYWNoZT8gVWx0aW1hdGVseSwgSSYjMzk7bSBhaW1pbmcgdG8gdmlzdWFsaXplIHRoZSBjb250cm9sIGZsb3csIHNvIEkga25vdyBob3cgdG8gb3B0aW1pemUgb3IgdHJvdWJsZXNob290IHRoZXNlIG9wZXJhdGlvbnMuIEkgd2FudCB0byBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGVzZSBwaWVjZXMgZml0IGluIHRoZSBwdXp6bGUgb2YgZ2V0dGluZyBkYXRhIHRvIGFuZCBmcm9tIHBlcnNpc3RlbnQgc3RvcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdW5tYXBfaW52YWxpZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmM9MTYwOT1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZmlsZW1hcC5jLTE2MTktXHRpZiAobWFwcGluZyBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXG5tbS9maWxlbWFwLmM6MTYyMDpcdFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XG5tbS9maWxlbWFwLmMtMTYyMS19XG4tLVxubW0vaW50ZXJuYWwuaD01OTc9aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xubW0vaW50ZXJuYWwuaDo1OTg6aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9pbnRlcm5hbC5oLTU5OS1cdFx0XHQgICBnZnBfdCBnZnApO1xuLS1cbm1tL3RydW5jYXRlLmM9NjA2PXN0YXRpYyBpbnQgZm9saW9fbGF1bmRlcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS90cnVuY2F0ZS5jLTYyMS0gKi9cbm1tL3RydW5jYXRlLmM6NjIyOmludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vdHJ1bmNhdGUuYy02MjMtXHRcdFx0ICAgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL3RydW5jYXRlLmM9Njc2PWludCBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS90cnVuY2F0ZS5jLTcyNS1cdFx0XHRmb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbyk7XG5tbS90cnVuY2F0ZS5jOjcyNjpcdFx0XHRyZXQyID0gZm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgR0ZQX0tFUk5FTCk7XG5tbS90cnVuY2F0ZS5jLTcyNy1cdFx0XHRpZiAocmV0MiBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkyMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIFRydW5jYXRpb24gSXNzdWUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMuIEkmIzM5O20gdGhpbmtpbmcgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgZWl0aGVyIGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBjb21taXQgaGlzdG9yeSB0byBzZWUgaWYgdGhlcmUgaGF2ZSBiZWVuIGFueSByZWNlbnQsIHJlbGF0ZWQgY2hhbmdlcywgb3IgcG9zc2libHkganVtcCByaWdodCBpbnRvIGBtbS90cnVuY2F0ZS5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgdGhlIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBzcG90IHdoZXJlIHNvbWUgb2YgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBmaWxlIHRydW5jYXRpb24gcHJvY2VzcyBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggcGFnZSB1bm1hcHBpbmcgbWlnaHQgYmUgaGFuZGxlZC4gSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZvbGlvIGludmFsaWRhdGlvbiB3b3JrcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdHJ1bmNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS90cnVuY2F0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MjA6XHQgKiBzaXR0aW5nIGluIHRoZSBmb2xpb19hZGRfbHJ1KCkgY2FjaGVzLlxuIDYyMTpcdCAqL1xuIDYyMjpcdGludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIDYyMzpcdFx0XHRcdCAgIGdmcF90IGdmcClcbiA2MjQ6XHR7XG4gNjI1Olx0XHR2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopO1xuIDYyNjpcdFx0aW50IHJldDtcbiA2Mjc6XHRcbiA2Mjg6XHRcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4gNjI5Olx0XG4gNjMwOlx0XHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcbiA2MzE6XHRcdFx0dW5tYXBfbWFwcGluZ19mb2xpbyhmb2xpbyk7XG4gNjMyOlx0XHRCVUdfT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XG4gNjMzOlx0XG4gNjM0Olx0XHRyZXQgPSBmb2xpb19sYXVuZGVyKG1hcHBpbmcsIGZvbGlvKTtcbiA2MzU6XHRcdGlmIChyZXQpXG4gNjM2Olx0XHRcdHJldHVybiByZXQ7XG4gNjM3Olx0XHRpZiAoZm9saW8tXHUwMDNlbWFwcGluZyAhPSBtYXBwaW5nKVxuIDYzODpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDYzOTpcdFx0aWYgKCFmaWxlbWFwX3JlbGVhc2VfZm9saW8oZm9saW8sIGdmcCkpXG4gNjQwOlx0XHRcdHJldHVybiAtRUJVU1k7XG4gNjQxOlx0XG4gNjQyOlx0XHRzcGluX2xvY2soXHUwMDI2bWFwcGluZy1cdTAwM2Vob3N0LVx1MDAzZWlfbG9jayk7XG4gNjQzOlx0XHR4YV9sb2NrX2lycShcdTAwMjZtYXBwaW5nLVx1MDAzZWlfcGFnZXMpO1xuIDY0NDpcdFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuIDY0NTpcdFx0XHRnb3RvIGZhaWxlZDtcbiA2NDY6XHRcbiA2NDc6XHRcdEJVR19PTihmb2xpb19oYXNfcHJpdmF0ZShmb2xpbykpO1xuIDY0ODpcdFx0X19maWxlbWFwX3JlbW92ZV9mb2xpbyhmb2xpbywgTlVMTCk7XG4gNjQ5Olx0XHR4YV91bmxvY2tfaXJxKFx1MDAyNm1hcHBpbmctXHUwMDNlaV9wYWdlcyk7XG4gNjUwOlx0XHRpZiAobWFwcGluZ19zaHJpbmthYmxlKG1hcHBpbmcpKVxuIDY1MTpcdFx0XHRpbm9kZV9scnVfbGlzdF9hZGQobWFwcGluZy1cdTAwM2Vob3N0KTtcbiA2NTI6XHRcdGZyZWVfZm9saW8gPSBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWZyZWVfZm9saW87XG4gNjUzOlx0XHRzcGluX3VubG9jayhcdTAwMjZtYXBwaW5nLVx1MDAzZWhvc3QtXHUwMDNlaV9sb2NrKTtcbiA2NTQ6XHRcbiA2NTU6XHRcdGlmIChmcmVlX2ZvbGlvKVxuIDY1NjpcdFx0XHRmcmVlX2ZvbGlvKGZvbGlvKTtcbiA2NTc6XHRcdGZvbGlvX3B1dF9yZWZzKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuIDY1ODpcdFx0cmV0dXJuIDE7XG4gNjU5Olx0ZmFpbGVkOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzM5CgkJCQkJCQlvdXRwdXQ6IDE3MQoJCQkJCQkJdGhvdWdodHM6IDQ5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBFdmFsdWF0aW9uOiBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGFkZGluZyBhIGAhZm9saW9fbWFwcGVkKGZvbGlvKWAgY2hlY2sgaW4gYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKWAgYmVmb3JlIGNhbGxpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKWAuIFRoaXMgaXMgdG8gcHJldmVudCBpbnZhbGlkYXRpbmcgbWFwcGVkIGZvbGlvcyBkdXJpbmcgdGhlIGRyb3BiZWhpbmQgcGFnZSBjYWNoZSBvcGVyYXRpb24uIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIEtNU0FOIGlzc3Vlcy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyBubywgYnV0IGxldCYjMzk7cyBiZSB0aG9yb3VnaC4gS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBhbmQgaW5mb3JtYXRpb24gbGVha3MsIHBhcnRpY3VsYXJseSB0byB1c2Vyc3BhY2UuIFdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vcGUuIFRoaXMgaXNuJiMzOTt0IGFib3V0IHNlbmRpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgZGF0YSB0byB0aGUgdXNlci4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vLCB0aGUgYGZvbGlvX21hcHBlZChmb2xpbylgIGNoZWNrIGp1c3QgbG9va3MgYXQgdGhlIGZvbGlvJiMzOTtzIGludGVybmFsIHN0YXRlIGZsYWdzIGFuZCByZWZlcmVuY2UgY291bnRzLiBJdCYjMzk7cyBub3QgZGVwZW5kZW50IG9uIHNvbWUgcHJldmlvdXNseSB1bmluaXRpYWxpemVkIGZpZWxkLgozLiAgKipBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLCB0aGlzIGlzIG5vdCBhIG5ldyBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiwgYW5kIHRoZXJlJiMzOTtzIG5vIGluaXRpYWxpemF0aW9uIG9mIGFueSBuZXcgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhdmUgdW5pbml0aWFsaXplZCBmaWVsZHMuCjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBieXRlcz8qKiBOby4gVGhpcyBpc24mIzM5O3QgYWJvdXQgYm91bmRzIGNoZWNraW5nIG9yIGxlbmd0aHMgdGhhdCBtaWdodCBsZWFkIHRvIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoaXMgaXMgZnVuZGFtZW50YWxseSBhIHBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIGNoZWNrIGR1cmluZyBgZHJvcGJlaGluZGAgYW5kIGl0IGFwcGVhcnMgaXQgaXMgcHVyZWx5IGFib3V0IHBhZ2UgY2FjaGUgbWFuYWdlbWVudCwgbm90IG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBCdWdzIGluIHRoaXMgYXJlYSB3b3VsZCBiZSBjYXVnaHQgYnkgdGhlIHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scywgdGhlIHBhZ2UgY2FjaGUgbG9naWMsIEtBU0FOLCBhbmQgbG9ja2RlcC4gUHJvYmxlbXMgaGVyZSB3b3VsZCBzaG93IHVwIGFzIHJlZmNvdW50IGVycm9ycywgdXNlLWFmdGVyLWZyZWUsIG9yIGFzc2VydGlvbnMgZmFpbHVyZXMgKGxpa2UgYEJVR19PTmBzKSB0aGF0IGFyZSBzdGFuZGFyZCBrZXJuZWwtbGV2ZWwgZGVidWdnaW5nLgoKU28sIHRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhlIHBhdGNoIGl0c2VsZiBqdXN0IGFkZHMgdGhlIGNoZWNrIGFuZCBub3RoaW5nIG1vcmUsIGl0IGRvZXNuJiMzOTt0IHRvdWNoIGFueXRoaW5nIHRoYXQgd291bGQgYmUgcmVsZXZhbnQgdG8gS01TQU4uIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgdGhlIHVzdWFsIGtlcm5lbCBkZWJ1Z2dpbmcuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKWAgdG8gYWRkIGEgYCFmb2xpb19tYXBwZWQoZm9saW8pYCBjaGVjayBiZWZvcmUgaW52b2tpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKWAsIHByZXZlbnRpbmcgZHJvcGJlaGluZCBpbnZhbGlkYXRpb24gb2YgZm9saW9zIHRoYXQgYXJlIGN1cnJlbnRseSBtYXBwZWQgaW50byB1c2VyIHBhZ2UgdGFibGVzLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2svaGVhcCBidWZmZXIgY29weWluZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEl0IG9ubHkgYWRkcyBhIHN0YXRlIGNoZWNrIG9uIGV4aXN0aW5nIGxvY2tlZCBmb2xpb3Mgd2l0aGluIHRoZSBwYWdlIGNhY2hlLiBBbnkgaXNzdWVzIHJlbGF0ZWQgdG8gZm9saW8gbGlmZWN5Y2xlLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIG1lbW9yeSBzYWZldHkgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgKGUuZy4gYFZNX0JVR19PTl9GT0xJT2ApIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpYCB0byBhZGQgYSBgIWZvbGlvX21hcHBlZChmb2xpbylgIGNoZWNrIGJlZm9yZSBpbnZva2luZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpYCwgcHJldmVudGluZyBkcm9wYmVoaW5kIGludmFsaWRhdGlvbiBvZiBmb2xpb3MgdGhhdCBhcmUgY3VycmVudGx5IG1hcHBlZCBpbnRvIHVzZXIgcGFnZSB0YWJsZXMuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjay9oZWFwIGJ1ZmZlciBjb3B5aW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gSXQgb25seSBhZGRzIGEgc3RhdGUgY2hlY2sgb24gZXhpc3RpbmcgbG9ja2VkIGZvbGlvcyB3aXRoaW4gdGhlIHBhZ2UgY2FjaGUuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byBmb2xpbyBsaWZlY3ljbGUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgbWVtb3J5IHNhZmV0eSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyAoZS5nLiBgVk1fQlVHX09OX0ZPTElPYCkgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTU6NTkuNTI1MTczOTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY0OTc2MTIyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fZW5kX2Ryb3BiZWhpbmRcIixcbiAgICBcImZvbGlvX3VubWFwX2ludmFsaWRhdGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKClgIHRvIGFkZCBhIGAhZm9saW9fbWFwcGVkKGZvbGlvKWAgY2hlY2sgYmVmb3JlIGludm9raW5nIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlKClgLCBwcmV2ZW50aW5nIGRyb3BiZWhpbmQgaW52YWxpZGF0aW9uIG9mIGZvbGlvcyB0aGF0IGFyZSBjdXJyZW50bHkgbWFwcGVkIGludG8gdXNlciBwYWdlIHRhYmxlcy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2svaGVhcCBidWZmZXIgY29weWluZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEl0IG9ubHkgYWRkcyBhIHN0YXRlIGNoZWNrIG9uIGV4aXN0aW5nIGxvY2tlZCBmb2xpb3Mgd2l0aGluIHRoZSBwYWdlIGNhY2hlLiBBbnkgaXNzdWVzIHJlbGF0ZWQgdG8gZm9saW8gbGlmZWN5Y2xlLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIG1lbW9yeSBzYWZldHkgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgKGUuZy4gYFZNX0JVR19PTl9GT0xJT2ApIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBwYWdlIGNhY2hlIGRyb3BiZWhpbmQgaW52YWxpZGF0aW9uIGxvZ2ljIGluIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKSBieSBhZGRpbmcgYSBjaGVjayAoIWZvbGlvX21hcHBlZChmb2xpbykpIGJlZm9yZSBjYWxsaW5nIGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKS4gVGhpcyBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHVuY2FjaGVkIC8gZHJvcGJlaGluZCBJL08gcHJvY2Vzc2luZyAoZS5nLiBSV0ZfRE9OVENBQ0hFKSBhbmQgd3JpdGViYWNrIGNvbXBsZXRpb24gaW4gcmVhY2hhYmxlLCBzdGFuZGFyZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU1OjU5LjUyNTIwMjkyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTY4NDI1MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZjNmYWFiYzgzOTc2ZjJiODIxMWVmYWUwOGI0ZTZlYTc3ODU0OTBmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDI5IDE3OjU1OjU4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xcbmluZGV4IDZhZmVjNjM2ODgxZmIuLjAwZmQ4OWNmNmY1NTAgMTAwNjQ0XFxuLS0tIGEvbW0vZmlsZW1hcC5jXFxuKysrIGIvbW0vZmlsZW1hcC5jXFxuQEAgLTE2MTYsNyArMTYxNiw3IEBAIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0aWYgKG1hcHBpbmcpXFxuK1xcdGlmIChtYXBwaW5nIFxcdTAwMjZcXHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKVxcbiBcXHRcXHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTU6NTkuODgyODM4ODE0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDAxMTk3NTY1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fZW5kX2Ryb3BiZWhpbmRcIixcbiAgICBcImZvbGlvX3VubWFwX2ludmFsaWRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHBhZ2UgY2FjaGUgZHJvcGJlaGluZCBpbnZhbGlkYXRpb24gbG9naWMgaW4gZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpIGJ5IGFkZGluZyBhIGNoZWNrICghZm9saW9fbWFwcGVkKGZvbGlvKSkgYmVmb3JlIGNhbGxpbmcgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpLiBUaGlzIGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdW5jYWNoZWQgLyBkcm9wYmVoaW5kIEkvTyBwcm9jZXNzaW5nIChlLmcuIFJXRl9ET05UQ0FDSEUpIGFuZCB3cml0ZWJhY2sgY29tcGxldGlvbiBpbiByZWFjaGFibGUsIHN0YW5kYXJkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWYzZmFhYmM4Mzk3NmYyYjgyMTFlZmFlMDhiNGU2ZWE3Nzg1NDkwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDE3OjU1OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCA2YWZlYzYzNjg4MWZiLi4wMGZkODljZjZmNTUwIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4rKysgYi9tbS9maWxlbWFwLmNcbkBAIC0xNjE2LDcgKzE2MTYsNyBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdHJldHVybjtcbiBcdGlmICghZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuLVx0aWYgKG1hcHBpbmcpXG4rXHRpZiAobWFwcGluZyBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXG4gXHRcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU1OjU5Ljg4Mjg0MDQ5NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzMjU3NTg2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIGFuYWx5c2lzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQgdGhyb3VnaDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgRHJvcGJlaGluZCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIEkndmUgZ290IGEgZGlmZiB0byBsb29rIGF0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXJuZWwgY29kZSBzdXJyb3VuZGluZyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL2ZpbGVtYXAuY2AuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBtaXNjaGllZiwgZGVwZW5kaW5nIG9uIHRoZSBjaGFuZ2UhKSByZWxhdGVkIHRvIGRyb3AtYmVoaW5kIHBhZ2UgY2FjaGluZyBsaWtlbHkgcmVzaWRlcy5cblxuSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZSAtIHdoYXQgdHJpZ2dlcmVkIHRoaXMsIGFuZCB3aGF0IHRoZSBpbnRlbmRlZCBiZWhhdmlvciBpcy4gVG8gZG8gdGhhdCwgSSdsbCBsZXZlcmFnZSBteSB0b29scy4gSSBjYW4gdXNlIGByZWFkLWZpbGVgIHRvIG5hdmlnYXRlIHRoZSBjb2RlIGRpcmVjdGx5LCBvciBwZXJoYXBzIGBncmVwcGVyYCB0byBzZWFyY2ggbW9yZSBicm9hZGx5IGZvciByZWxldmFudCBjYWxsIHNpdGVzIGFuZCB1c2FnZXMgb2YgdGhlIGZ1bmN0aW9uLCBhbmQgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCBhbnkgaW1wbGVtZW50YXRpb24gbnVhbmNlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBrZXkga2VybmVsIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzo1NjowNi4yMDg2MDIxNzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZmlsZW1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MDA6XFx0XFx0XFx0cmV0ID0gZm9saW9fd2FpdF9iaXRfa2lsbGFibGUoZm9saW8sIFBHX3ByaXZhdGVfMik7XFxuMTYwMTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNjAyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE2MDM6XFx0XFx0fVxcbjE2MDQ6XFx0XFxuMTYwNTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE2MDY6XFx0fVxcbjE2MDc6XFx0RVhQT1JUX1NZTUJPTChmb2xpb193YWl0X3ByaXZhdGVfMl9raWxsYWJsZSk7XFxuMTYwODpcXHRcXG4xNjA5OlxcdHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4xNjEwOlxcdHtcXG4xNjExOlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW8tXFx1MDAzZW1hcHBpbmc7XFxuMTYxMjpcXHRcXG4xNjEzOlxcdFxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuMTYxNDpcXHRcXG4xNjE1OlxcdFxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHwgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXFxuMTYxNjpcXHRcXHRcXHRyZXR1cm47XFxuMTYxNzpcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpXFxuMTYxODpcXHRcXHRcXHRyZXR1cm47XFxuMTYxOTpcXHRcXHRpZiAobWFwcGluZyBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcXG4xNjIwOlxcdFxcdFxcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xcbjE2MjE6XFx0fVxcbjE2MjI6XFx0XFxuMTYyMzpcXHQvKlxcbjE2MjQ6XFx0ICogSWYgZm9saW8gd2FzIG1hcmtlZCBhcyBkcm9wYmVoaW5kLCB0aGVuIHBhZ2VzIHNob3VsZCBiZSBkcm9wcGVkIHdoZW4gd3JpdGViYWNrXFxuMTYyNTpcXHQgKiBjb21wbGV0ZXMuIERvIHRoYXQgbm93LiBJZiB3ZSBmYWlsLCBpdCdzIGxpa2VseSBiZWNhdXNlIG9mIGEgYmlnIGZvbGlvIC1cXG4xNjI2OlxcdCAqIGp1c3QgcmVzZXQgZHJvcGJlaGluZCBmb3IgdGhhdCBjYXNlIGFuZCBsYXR0ZXIgY29tcGxldGlvbnMgc2hvdWxkIGludmFsaWRhdGUuXFxuMTYyNzpcXHQgKi9cXG4xNjI4OlxcdHZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4xNjI5OlxcdHtcXG4xNjMwOlxcdFxcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG4xNjMxOlxcdFxcdFxcdHJldHVybjtcXG4xNjMyOlxcdFxcbjE2MzM6XFx0XFx0LypcXG4xNjM0OlxcdFxcdCAqIEhpdHRpbmcgIWluX3Rhc2soKSBzaG91bGQgbm90IGhhcHBlbiBvZmYgUldGX0RPTlRDQUNIRSB3cml0ZWJhY2ssXFxuMTYzNTpcXHRcXHQgKiBidXQgY2FuIGhhcHBlbiBpZiBub3JtYWwgd3JpdGViYWNrIGp1c3QgaGFwcGVucyB0byBmaW5kIGRpcnR5IGZvbGlvc1xcbjE2MzY6XFx0XFx0ICogdGhhdCB3ZXJlIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2ssIGFuZCB0aGF0IHdyaXRlYmFja1xcbjE2Mzc6XFx0XFx0ICogd291bGQgb3RoZXJ3aXNlIG5vdCBuZWVkIG5vbi1JUlEgaGFuZGxpbmcuIEp1c3Qgc2tpcCB0aGVcXG4xNjM4OlxcdFxcdCAqIGludmFsaWRhdGlvbiBpbiB0aGF0IGNhc2UuXFxuMTYzOTpcXHRcXHQgKi9cXG4xNjQwOlxcdFxcdGlmIChpbl90YXNrKCkgXFx1MDAyNlxcdTAwMjYgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG4xNjQxOlxcdFxcdFxcdGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xcbjE2NDI6XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4xNjQzOlxcdFxcdH1cXG4xNjQ0OlxcdH1cXG4xNjQ1OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF9kcm9wYmVoaW5kKTtcXG4xNjQ2OlxcdFxcbjE2NDc6XFx0LyoqXFxuMTY0ODpcXHQgKiBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQgLSBFbmQgd3JpdGViYWNrIGFnYWluc3QgYSBmb2xpby5cXG4xNjQ5OlxcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzo1NjowNi4yMDg3ODEwMTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzE4ODI0ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIERyb3BiZWhpbmQgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAsIGBmb2xpb19lbmRfZHJvcGJlaGluZGAsIGFuZCB0aGF0IGBSV0ZfRE9OVENBQ0hFYCBmbGFnLiBNeSBnb2FsIGhlcmUgaXMgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IGRyb3BiZWhpbmQgd29ya3MgYXQgdGhlIGZpbGUgc3lzdGVtIGFuZCBmb2xpbyBsZXZlbHMsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gY2FjaGUgbWFuYWdlbWVudC4gSSdtIGdvaW5nIHRvIGZpcmUgdXAgdGhlIGdyZXBwZXIgYW5kIHJ1biBpdCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgdG8gc2VlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIGBkcm9wYmVoaW5kYCB0ZXJtaW5vbG9neSBhcmUgYWN0dWFsbHkgdXNlZC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIG92ZXJhbGwgdXNlIHdpdGhpbiB0aGUgcmVsZXZhbnQgZmlsZSBzeXN0ZW0gY29kZSB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHJlYWQgYW5kIHdyaXRlIGNhY2hpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNzYsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU2OjA4LjkyNzYwODY2NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc5MDk0NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRyb3BiZWhpbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYnVmZmVyLmM9MTA4NT1zdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxcbi0tXFxuZnMvYnVmZmVyLmMtMTEwOS1cXG5mcy9idWZmZXIuYzoxMTEwOlxcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXFx1MDAzZWJfZm9saW8pIFxcdTAwMjZcXHUwMDI2IG9wX2lzX3dyaXRlKG9wZikpXFxuZnMvYnVmZmVyLmMtMTExMS1cXHRcXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYz00MDU9c3RhdGljIGJvb2wgaW5vZGVfZG9fc3dpdGNoX3dicyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtNDM1LVxcdFxcdFxcdHdiX3N0YXRfbW9kKG5ld193YiwgV0JfUkVDTEFJTUFCTEUsIG5yKTtcXG5mcy9mcy13cml0ZWJhY2suYzo0MzY6XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpIHtcXG5mcy9mcy13cml0ZWJhY2suYy00MzctXFx0XFx0XFx0XFx0d2Jfc3RhdF9tb2Qob2xkX3diLCBXQl9ET05UQ0FDSEVfRElSVFksIC1ucik7XFxuLS1cXG5mcy9pb21hcC9pb2VuZC5jPTIxMz1zc2l6ZV90IGlvbWFwX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvaW9tYXAvaW9lbmQuYy0yNTctXFxuZnMvaW9tYXAvaW9lbmQuYzoyNTg6XFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxuZnMvaW9tYXAvaW9lbmQuYy0yNTktXFx0XFx0YmlvX3NldF9mbGFnKFxcdTAwMjZpb2VuZC1cXHUwMDNlaW9fYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XFxuLS1cXG5mcy9uZnMvZmlsZS5jPTM2MD1zdGF0aWMgYm9vbCBuZnNfd2FudF9yZWFkX21vZGlmeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL25mcy9maWxlLmMtMzcyLVxcdFxcdHJldHVybiB0cnVlO1xcbmZzL25mcy9maWxlLmM6MzczOlxcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxcbmZzL25mcy9maWxlLmMtMzc0LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmZzL25mcy9maWxlLmM9Mzg5PXN0YXRpYyBpbnQgbmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4tLVxcbmZzL25mcy9maWxlLmMtNDE5LVxcdFxcdG9uY2VfdGhydSA9IDE7XFxuZnMvbmZzL2ZpbGUuYzo0MjA6XFx0XFx0Zm9saW9fY2xlYXJfZHJvcGJlaGluZChmb2xpbyk7XFxuZnMvbmZzL2ZpbGUuYy00MjEtXFx0XFx0cmV0ID0gbmZzX3JlYWRfZm9saW8oZmlsZSwgZm9saW8pO1xcbi0tXFxuZnMvbmZzL3dyaXRlLmM9Mjk1PXN0YXRpYyB2b2lkIG5mc19mb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9uZnMvd3JpdGUuYy0yOTgtXFxuZnMvbmZzL3dyaXRlLmM6Mjk5OlxcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XFxuZnMvbmZzL3dyaXRlLmMtMzAwLVxcdGlmIChhdG9taWNfbG9uZ19kZWNfcmV0dXJuKFxcdTAwMjZuZnNzLVxcdTAwM2V3cml0ZWJhY2spIFxcdTAwM2NcXG4tLVxcbmZzL25mcy93cml0ZS5jPTczNT1zdGF0aWMgdm9pZCBuZnNfaW5vZGVfcmVtb3ZlX3JlcXVlc3Qoc3RydWN0IG5mc19wYWdlICpyZXEpXFxuLS1cXG5mcy9uZnMvd3JpdGUuYy03NTEtXFxuZnMvbmZzL3dyaXRlLmM6NzUyOlxcdFxcdFxcdGZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcXG5mcy9uZnMvd3JpdGUuYy03NTMtXFx0XFx0fVxcbi0tXFxuZnMvbmZzZC9kZWJ1Z2ZzLmM9Mzk9REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKG5mc2RfZHNyX2ZvcHMsIG5mc2RfZHNyX2dldCwgbmZzZF9kc3Jfc2V0LCBcXFwiJWxsdVxcXFxuXFxcIik7XFxuLS1cXG5mcy9uZnNkL2RlYnVnZnMuYy00NS0gKiAgICUwOiBORlMgUkVBRCB3aWxsIHVzZSBidWZmZXJlZCBJT1xcbmZzL25mc2QvZGVidWdmcy5jOjQ2OiAqICAgJTE6IE5GUyBSRUFEIHdpbGwgdXNlIGRvbnRjYWNoZSAoYnVmZmVyZWQgSU8gdy8gZHJvcGJlaGluZClcXG5mcy9uZnNkL2RlYnVnZnMuYy00Ny0gKiAgICUyOiBORlMgUkVBRCB3aWxsIHVzZSBkaXJlY3QgSU9cXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jPTg0PURFRklORV9ERUJVR0ZTX0FUVFJJQlVURShuZnNkX2lvX2NhY2hlX3JlYWRfZm9wcywgbmZzZF9pb19jYWNoZV9yZWFkX2dldCxcXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jLTkxLSAqICAgJTA6IE5GUyBXUklURSB3aWxsIHVzZSBidWZmZXJlZCBJT1xcbmZzL25mc2QvZGVidWdmcy5jOjkyOiAqICAgJTE6IE5GUyBXUklURSB3aWxsIHVzZSBkb250Y2FjaGUgKGJ1ZmZlcmVkIElPIHcvIGRyb3BiZWhpbmQpXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtOTMtICpcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTkzPWVudW0gcGFnZWZsYWdzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTExMi1cXHRQR191bmV2aWN0YWJsZSxcXHRcXHQvKiBQYWdlIGlzIFxcXCJ1bmV2aWN0YWJsZVxcXCIgICovXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTEzOlxcdFBHX2Ryb3BiZWhpbmQsXFx0XFx0LyogZHJvcCBwYWdlcyBvbiBJTyBjb21wbGV0aW9uICovXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTE0LSNpZmRlZiBDT05GSUdfTU1VXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD01OTg9Rk9MSU9fRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTYwMC1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2MDE6Rk9MSU9fRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NjAyOlxcdEZPTElPX1RFU1RfQ0xFQVJfRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NjAzOlxcdF9fRk9MSU9fU0VUX0ZMQUcoZHJvcGJlaGluZCwgRk9MSU9fSEVBRF9QQUdFKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTYwNC1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTEzMTA9dm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjEzMTE6dm9pZCBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTMxMjp2b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTEzMTMtdm9pZCBmb2xpb193YWl0X3N0YWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTE0MDg9c3RydWN0IHJlYWRhaGVhZF9jb250cm9sIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MTUtXFx0dW5zaWduZWQgaW50IF9iYXRjaF9jb3VudDtcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxNDE2OlxcdGJvb2wgZHJvcGJlaGluZDtcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDE3LVxcdGJvb2wgX3dvcmtpbmdzZXQ7XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmg9Njk9VFJBQ0VfREVGSU5FX0VOVU0oX19fR0ZQX0xBU1RfQklUKTtcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaC0xNTMtXFx0REVGX1BBR0VGTEFHX05BTUUodW5ldmljdGFibGUpLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmg6MTU0OlxcdERFRl9QQUdFRkxBR19OQU1FKGRyb3BiZWhpbmQpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaC0xNTUtSUZfSEFWRV9QR19NTE9DSyhtbG9ja2VkKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbm1tL2ZpbGVtYXAuYz0xNjA3PUVYUE9SVF9TWU1CT0woZm9saW9fd2FpdF9wcml2YXRlXzJfa2lsbGFibGUpO1xcbm1tL2ZpbGVtYXAuYy0xNjA4LVxcbm1tL2ZpbGVtYXAuYzoxNjA5OnN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9maWxlbWFwLmMtMTYxMC17XFxuLS1cXG5tbS9maWxlbWFwLmMtMTYxNi1cXHRcXHRyZXR1cm47XFxubW0vZmlsZW1hcC5jOjE2MTc6XFx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKVxcbm1tL2ZpbGVtYXAuYy0xNjE4LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjIzLS8qXFxubW0vZmlsZW1hcC5jOjE2MjQ6ICogSWYgZm9saW8gd2FzIG1hcmtlZCBhcyBkcm9wYmVoaW5kLCB0aGVuIHBhZ2VzIHNob3VsZCBiZSBkcm9wcGVkIHdoZW4gd3JpdGViYWNrXFxubW0vZmlsZW1hcC5jLTE2MjUtICogY29tcGxldGVzLiBEbyB0aGF0IG5vdy4gSWYgd2UgZmFpbCwgaXQncyBsaWtlbHkgYmVjYXVzZSBvZiBhIGJpZyBmb2xpbyAtXFxubW0vZmlsZW1hcC5jOjE2MjY6ICoganVzdCByZXNldCBkcm9wYmVoaW5kIGZvciB0aGF0IGNhc2UgYW5kIGxhdHRlciBjb21wbGV0aW9ucyBzaG91bGQgaW52YWxpZGF0ZS5cXG5tbS9maWxlbWFwLmMtMTYyNy0gKi9cXG5tbS9maWxlbWFwLmM6MTYyODp2b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZmlsZW1hcC5jLTE2Mjkte1xcbm1tL2ZpbGVtYXAuYzoxNjMwOlxcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG5tbS9maWxlbWFwLmMtMTYzMS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9maWxlbWFwLmMtMTY0MC1cXHRpZiAoaW5fdGFzaygpIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxubW0vZmlsZW1hcC5jOjE2NDE6XFx0XFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jLTE2NDItXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjQ0LX1cXG5tbS9maWxlbWFwLmM6MTY0NTpFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfZHJvcGJlaGluZCk7XFxubW0vZmlsZW1hcC5jLTE2NDYtXFxubW0vZmlsZW1hcC5jLTE2NDctLyoqXFxubW0vZmlsZW1hcC5jOjE2NDg6ICogZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kIC0gRW5kIHdyaXRlYmFjayBhZ2FpbnN0IGEgZm9saW8uXFxubW0vZmlsZW1hcC5jLTE2NDktICogQGZvbGlvOiBUaGUgZm9saW8uXFxuLS1cXG5tbS9maWxlbWFwLmMtMTY1MS0gKiBUaGUgZm9saW8gbXVzdCBhY3R1YWxseSBiZSB1bmRlciB3cml0ZWJhY2suXFxubW0vZmlsZW1hcC5jOjE2NTI6ICogVGhpcyBjYWxsIGlzIGludGVuZGVkIGZvciBmaWxlc3lzdGVtcyB0aGF0IG5lZWQgdG8gZGVmZXIgZHJvcGJlaGluZC5cXG5tbS9maWxlbWFwLmMtMTY1My0gKlxcbi0tXFxubW0vZmlsZW1hcC5jLTE2NTUtICovXFxubW0vZmlsZW1hcC5jOjE2NTY6dm9pZCBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9maWxlbWFwLmMtMTY1Ny17XFxuLS1cXG5tbS9maWxlbWFwLmMtMTY3Ni19XFxubW0vZmlsZW1hcC5jOjE2Nzc6RVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcXG5tbS9maWxlbWFwLmMtMTY3OC1cXG4tLVxcbm1tL2ZpbGVtYXAuYz0xNjg3PXZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTE2OTctXFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG5tbS9maWxlbWFwLmM6MTY5ODpcXHRmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYzoxNjk5OlxcdGZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcXG5tbS9maWxlbWFwLmMtMTcwMC1cXHRmb2xpb19wdXQoZm9saW8pO1xcbi0tXFxubW0vZmlsZW1hcC5jPTE5NDc9c3RydWN0IGZvbGlvICpfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2woc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9maWxlbWFwLmMtMjAyNS1cXHRcXHRcXHRpZiAoZmdwX2ZsYWdzIFxcdTAwMjYgRkdQX0RPTlRDQUNIRSlcXG5tbS9maWxlbWFwLmM6MjAyNjpcXHRcXHRcXHRcXHRfX2ZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcXG5tbS9maWxlbWFwLmMtMjAyNy1cXG4tLVxcbm1tL2ZpbGVtYXAuYy0yMDYwLVxcdC8qIG5vdCBhbiB1bmNhY2hlZCBsb29rdXAsIGNsZWFyIHVuY2FjaGVkIGlmIHNldCAqL1xcbm1tL2ZpbGVtYXAuYzoyMDYxOlxcdGlmICghKGZncF9mbGFncyBcXHUwMDI2IEZHUF9ET05UQ0FDSEUpIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpIHtcXG5tbS9maWxlbWFwLmMtMjA2Mi1cXHRcXHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL2ZpbGVtYXAuYz0yNjE5PXN0YXRpYyBpbnQgZmlsZW1hcF9jcmVhdGVfZm9saW8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaClcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yNjMzLVxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRE9OVENBQ0hFKVxcbm1tL2ZpbGVtYXAuYzoyNjM0OlxcdFxcdF9fZm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYy0yNjM1LVxcbi0tXFxubW0vZmlsZW1hcC5jPTI2NzI9c3RhdGljIGludCBmaWxlbWFwX3JlYWRhaGVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxubW0vZmlsZW1hcC5jLTI2ODAtXFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9ET05UQ0FDSEUpXFxubW0vZmlsZW1hcC5jOjI2ODE6XFx0XFx0cmFjdGwuZHJvcGJlaGluZCA9IDE7XFxubW0vZmlsZW1hcC5jLTI2ODItXFx0cGFnZV9jYWNoZV9hc3luY19yYShcXHUwMDI2cmFjdGwsIGZvbGlvLCBsYXN0X2luZGV4IC0gZm9saW8tXFx1MDAzZWluZGV4KTtcXG4tLVxcbm1tL2ZpbGVtYXAuYz0yNjg2PXN0YXRpYyBpbnQgZmlsZW1hcF9nZXRfcGFnZXMoc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgY291bnQsXFxuLS1cXG5tbS9maWxlbWFwLmMtMjcxMi1cXHRcXHRpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RPTlRDQUNIRSlcXG5tbS9maWxlbWFwLmM6MjcxMzpcXHRcXHRcXHRyYWN0bC5kcm9wYmVoaW5kID0gMTtcXG5tbS9maWxlbWFwLmMtMjcxNC1cXHRcXHRwYWdlX2NhY2hlX3N5bmNfcmEoXFx1MDAyNnJhY3RsLCBsYXN0X2luZGV4IC0gaW5kZXgpO1xcbi0tXFxubW0vZmlsZW1hcC5jPTI3NTU9c3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yNzYxLVxcbm1tL2ZpbGVtYXAuYzoyNzYyOnN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZpbGVtYXAuYy0yNzYzLXtcXG5tbS9maWxlbWFwLmM6Mjc2NDpcXHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxubW0vZmlsZW1hcC5jLTI3NjUtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZmlsZW1hcC5jLTI3NjgtXFx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxubW0vZmlsZW1hcC5jOjI3Njk6XFx0XFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jLTI3NzAtXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tLVxcbm1tL2ZpbGVtYXAuYz0yNzg3PXNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxubW0vZmlsZW1hcC5jLTI4ODktXFxubW0vZmlsZW1hcC5jOjI4OTA6XFx0XFx0XFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKGZvbGlvKTtcXG5tbS9maWxlbWFwLmMtMjg5MS1cXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi0tXFxubW0vZm9saW8uYz00MjI9dm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZm9saW8uYy00MjMte1xcbm1tL2ZvbGlvLmM6NDI0OlxcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxcbm1tL2ZvbGlvLmMtNDI1LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzY4NT1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM3NDQtXFx0XFx0XFx0XFx0ICgxTCBcXHUwMDNjXFx1MDAzYyBQR19kaXJ0eSkgfFxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzc0NTpcXHRcXHRcXHRcXHQgKDFMIFxcdTAwM2NcXHUwMDNjIFBHX2Ryb3BiZWhpbmQpIHxcXG5tbS9odWdlX21lbW9yeS5jLTM3NDYtXFx0XFx0XFx0XFx0IExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX01BU0spKTtcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmM9MjYwMz1zdGF0aWMgdm9pZCBmb2xpb19hY2NvdW50X2RpcnRpZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjYxNy1cXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfRElSVFksIG5yKTtcXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI2MTg6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxubW0vcGFnZS13cml0ZWJhY2suYy0yNjE5LVxcdFxcdFxcdHdiX3N0YXRfbW9kKHdiLCBXQl9ET05UQ0FDSEVfRElSVFksIG5yKTtcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmM9MjYzNj12b2lkIGZvbGlvX2FjY291bnRfY2xlYW5lZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2NDAtXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX0RJUlRZLCAtbnIpO1xcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjY0MTpcXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2NDItXFx0XFx0d2Jfc3RhdF9tb2Qod2IsIFdCX0RPTlRDQUNIRV9ESVJUWSwgLW5yKTtcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmM9Mjg2Nj1ib29sIGZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYy0yOTE2LVxcdFxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9ESVJUWSwgLW5yKTtcXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI5MTc6XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxubW0vcGFnZS13cml0ZWJhY2suYy0yOTE4LVxcdFxcdFxcdFxcdHdiX3N0YXRfbW9kKHdiLCBXQl9ET05UQ0FDSEVfRElSVFksIC1ucik7XFxuLS1cXG5tbS9yZWFkYWhlYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBmb2xpbyAqcmFjdGxfYWxsb2NfZm9saW8oc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTIwMC1cXHRmb2xpbyA9IGZpbGVtYXBfYWxsb2NfZm9saW8oZ2ZwX21hc2ssIG9yZGVyLCBOVUxMKTtcXG5tbS9yZWFkYWhlYWQuYzoyMDE6XFx0aWYgKGZvbGlvIFxcdTAwMjZcXHUwMDI2IHJhY3RsLVxcdTAwM2Vkcm9wYmVoaW5kKVxcbm1tL3JlYWRhaGVhZC5jOjIwMjpcXHRcXHRfX2ZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcXG5tbS9yZWFkYWhlYWQuYy0yMDMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU2OjEwLjcwNjcwOTExOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1MTE1NzIyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb21taXQ6IEEgRm9saW8ncyBKb3VybmV5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29tbWl0LiBUaGUgY29yZSBmdW5jdGlvbiBpcyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZC4gVGhlIGRpZmYgc2hvd3MgYSBzdWJ0bGUsIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwsIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIGBpZmAgc3RhdGVtZW50LiBQcmV2aW91c2x5LCBpdCBsb29rZWQgbGlrZSB0aGlzOiBgaWYgKG1hcHBpbmcpYC4gTm93LCBpdCdzIGBpZiAobWFwcGluZyBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpYC5cblxuU28sIHRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIHVubWFwIGFuZCBpbnZhbGlkYXRlIGEgZm9saW8gaWYgdGhlIGBtYXBwaW5nYCB3YXNuJ3QgTlVMTC4gVGhlIG5ldyBjaGVjayBhZGRzIGFuIGV4dHJhIHJlcXVpcmVtZW50OiB0aGUgZm9saW8gKm11c3Qgbm90KiBiZSBtYXBwZWQuIEludGVyZXN0aW5nLiBUaGlzIGxpa2VseSBhaW1zIHRvIHByZXZlbnQgaW52YWxpZGF0aW5nIHBhZ2VzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZWx5IGluIHVzZSwgcG90ZW50aWFsbHkgaW1wcm92aW5nIHBlcmZvcm1hbmNlIG9yIHByZXZlbnRpbmcgZGF0YSBjb3JydXB0aW9uLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayB3aGF0IGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBkb2VzLCBhcyBpdCBzZWVtcyBsaWtlIGl0cyBiZWhhdmlvciBub3cgaGluZ2VzIG9uIHRoaXMgYGZvbGlvX21hcHBlZGAgY2hlY2suIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgdGhpcyBpbXBhY3RzIHBhZ2UgcmVjbGFpbSBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDIzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU2OjE2LjIxODI4MzUwNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAyNTgyMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3VubWFwX2ludmFsaWRhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZmlsZW1hcC5jPTE2MDk9c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTE2MTktXFx0aWYgKG1hcHBpbmcgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXFxubW0vZmlsZW1hcC5jOjE2MjA6XFx0XFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XFxubW0vZmlsZW1hcC5jLTE2MjEtfVxcbi0tXFxubW0vaW50ZXJuYWwuaD01OTc9aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbm1tL2ludGVybmFsLmg6NTk4OmludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL2ludGVybmFsLmgtNTk5LVxcdFxcdFxcdCAgIGdmcF90IGdmcCk7XFxuLS1cXG5tbS90cnVuY2F0ZS5jPTYwNj1zdGF0aWMgaW50IGZvbGlvX2xhdW5kZXIoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTYyMS0gKi9cXG5tbS90cnVuY2F0ZS5jOjYyMjppbnQgZm9saW9fdW5tYXBfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS90cnVuY2F0ZS5jLTYyMy1cXHRcXHRcXHQgICBnZnBfdCBnZnApXFxuLS1cXG5tbS90cnVuY2F0ZS5jPTY3Nj1pbnQgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTcyNS1cXHRcXHRcXHRmb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbyk7XFxubW0vdHJ1bmNhdGUuYzo3MjY6XFx0XFx0XFx0cmV0MiA9IGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIEdGUF9LRVJORUwpO1xcbm1tL3RydW5jYXRlLmMtNzI3LVxcdFxcdFxcdGlmIChyZXQyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTY6MTcuOTIwODcyMzU1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgxODU1OTg0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoZSBmb2xpbyB1bm1hcCBhbmQgaW52YWxpZGF0aW9uIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCB3aXRoaW4gYG1tL3RydW5jYXRlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSBrZXJuZWwgYWN0dWFsbHkgZGVhbHMgd2l0aCB0aGUgbml0dHktZ3JpdHR5IG9mIHJlbW92aW5nIHBhZ2UgbWFwcGluZ3MgYW5kIHBvdGVudGlhbGx5IGludmFsaWRhdGluZyBkYXRhIGR1cmluZyBhIHRydW5jYXRpb24gb3BlcmF0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIHRlYXJpbmcgZG93biBwYWdlIHRhYmxlcyBhbmQgaGFuZGxpbmcgYW55IG5lY2Vzc2FyeSBjYWNoZSBjb2hlcmVuY2UuIEknbGwgYmUgbG9va2luZyB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMsIGxpa2UgdGhlIHBhZ2UgY2FjaGUsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBrZWVwIGluIG1pbmQuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIxNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU2OjM2LjEwNjQ3NTY4OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdHJ1bmNhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MjA6XFx0ICogc2l0dGluZyBpbiB0aGUgZm9saW9fYWRkX2xydSgpIGNhY2hlcy5cXG4gNjIxOlxcdCAqL1xcbiA2MjI6XFx0aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIDYyMzpcXHRcXHRcXHRcXHQgICBnZnBfdCBnZnApXFxuIDYyNDpcXHR7XFxuIDYyNTpcXHRcXHR2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopO1xcbiA2MjY6XFx0XFx0aW50IHJldDtcXG4gNjI3OlxcdFxcbiA2Mjg6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcXG4gNjI5OlxcdFxcbiA2MzA6XFx0XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpXFxuIDYzMTpcXHRcXHRcXHR1bm1hcF9tYXBwaW5nX2ZvbGlvKGZvbGlvKTtcXG4gNjMyOlxcdFxcdEJVR19PTihmb2xpb19tYXBwZWQoZm9saW8pKTtcXG4gNjMzOlxcdFxcbiA2MzQ6XFx0XFx0cmV0ID0gZm9saW9fbGF1bmRlcihtYXBwaW5nLCBmb2xpbyk7XFxuIDYzNTpcXHRcXHRpZiAocmV0KVxcbiA2MzY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNjM3OlxcdFxcdGlmIChmb2xpby1cXHUwMDNlbWFwcGluZyAhPSBtYXBwaW5nKVxcbiA2Mzg6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNjM5OlxcdFxcdGlmICghZmlsZW1hcF9yZWxlYXNlX2ZvbGlvKGZvbGlvLCBnZnApKVxcbiA2NDA6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNjQxOlxcdFxcbiA2NDI6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZtYXBwaW5nLVxcdTAwM2Vob3N0LVxcdTAwM2VpX2xvY2spO1xcbiA2NDM6XFx0XFx0eGFfbG9ja19pcnEoXFx1MDAyNm1hcHBpbmctXFx1MDAzZWlfcGFnZXMpO1xcbiA2NDQ6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxcbiA2NDU6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuIDY0NjpcXHRcXG4gNjQ3OlxcdFxcdEJVR19PTihmb2xpb19oYXNfcHJpdmF0ZShmb2xpbykpO1xcbiA2NDg6XFx0XFx0X19maWxlbWFwX3JlbW92ZV9mb2xpbyhmb2xpbywgTlVMTCk7XFxuIDY0OTpcXHRcXHR4YV91bmxvY2tfaXJxKFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzKTtcXG4gNjUwOlxcdFxcdGlmIChtYXBwaW5nX3Nocmlua2FibGUobWFwcGluZykpXFxuIDY1MTpcXHRcXHRcXHRpbm9kZV9scnVfbGlzdF9hZGQobWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuIDY1MjpcXHRcXHRmcmVlX2ZvbGlvID0gbWFwcGluZy1cXHUwMDNlYV9vcHMtXFx1MDAzZWZyZWVfZm9saW87XFxuIDY1MzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bWFwcGluZy1cXHUwMDNlaG9zdC1cXHUwMDNlaV9sb2NrKTtcXG4gNjU0OlxcdFxcbiA2NTU6XFx0XFx0aWYgKGZyZWVfZm9saW8pXFxuIDY1NjpcXHRcXHRcXHRmcmVlX2ZvbGlvKGZvbGlvKTtcXG4gNjU3OlxcdFxcdGZvbGlvX3B1dF9yZWZzKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbiA2NTg6XFx0XFx0cmV0dXJuIDE7XFxuIDY1OTpcXHRmYWlsZWQ6XFxuIDY2MDpcXHRcXHR4YV91bmxvY2tfaXJxKFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzKTtcXG4gNjYxOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtYXBwaW5nLVxcdTAwM2Vob3N0LVxcdTAwM2VpX2xvY2spO1xcbiA2NjI6XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNjYzOlxcdH1cXG4gNjY0OlxcdFxcbiA2NjU6XFx0LyoqXFxuIDY2NjpcXHQgKiBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSAtIHJlbW92ZSByYW5nZSBvZiBwYWdlcyBmcm9tIGFuIGFkZHJlc3Nfc3BhY2VcXG4gNjY3OlxcdCAqIEBtYXBwaW5nOiB0aGUgYWRkcmVzc19zcGFjZVxcbiA2Njg6XFx0ICogQHN0YXJ0OiB0aGUgcGFnZSBvZmZzZXQgJ2Zyb20nIHdoaWNoIHRvIGludmFsaWRhdGVcXG4gNjY5OlxcdCAqIEBlbmQ6IHRoZSBwYWdlIG9mZnNldCAndG8nIHdoaWNoIHRvIGludmFsaWRhdGUgKGluY2x1c2l2ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTY6MzYuMTA2NjYxNDg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4ODk4NzA2NzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIEZpbGVtYXAgRHJvcGJlaGluZCBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAuIFNwZWNpZmljYWxseSwgaWYgYSBmb2xpbyBpc24ndCBtYXBwZWQsIHRoZW4gd2UgY2FsbCB0aGUgdW5tYXAgZnVuY3Rpb24uIEJ1dCwgaWYgaXQgKmlzKiBtYXBwZWQsIHRoZW4gd2Ugc2tpcCB0aGUgY2FsbC4gVGhlIHJlYXNvbiBpcyB0aGF0IHVubWFwcGluZyBhIGZvbGlvIHRoYXQncyBtYXBwZWQgaW4gdXNlcnNwYWNlIChsaWtlIHRocm91Z2ggYG1tYXBgKSBkdXJpbmcgdGhlIGRyb3BiZWhpbmQgcHJvY2VzcyBjb3VsZCBiZSBleHBlbnNpdmUsIGNhdXNlIHByb2JsZW1zLCBvciBpbnRyb2R1Y2UgbG9jayBpbnZlcnNpb24uIE1ha2VzIHNlbnNlLiBJdCdzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhdm9pZGluZyB0aGUgb3ZlcmhlYWQgd2hlbiB0aGUgZm9saW8gaXMgbWFwcGVkLlxuXG5UaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgb3B0aW1pemF0aW9uIHdvcnRoeSBvZiBmdXp6aW5nPyBMZXQncyBicmVhayBpdCBkb3duIHVzaW5nIG15IGNyaXRlcmlhIGZvciBkZXRlcm1pbmluZyBmdXp6aW5nIHdvcnRoaW5lc3MuXG5cbkZpcnN0LCBpcyB0aGlzIGp1c3QgZG9jcywgbG9nZ2luZywgb3IgdHJpdmlhbCBjaGFuZ2VzPyBOby4gSXQgdG91Y2hlcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGBtbS9maWxlbWFwLmNgLCBhbmQgdGhlIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCBmdW5jdGlvbiwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIGRyb3BiZWhpbmQgb3B0aW1pemF0aW9uLiBJdCBpcyBub3QgY29zbWV0aWMuXG5cblNlY29uZCwgZG9lcyBpdCB0b3VjaCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gSS9PIG9wZXJhdGlvbnMgbGlrZSBgcmVhZGAsIGB3cml0ZWAgd2l0aCBgUldGX0RPTlRDQUNIRWAsIG9yIGBwb3NpeF9mYWR2aXNlYCwgb3IgdW5jYWNoZWQgSS9PLCBvciBidWZmZXJlZCBJL08gY291cGxlZCB3aXRoIGBtbWFwYCBhbGwgY2FuIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbkdpdmVuIHRoYXQgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgY2FuIGJlIHRlc3RlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIEknbSBnb2luZyB0byBzYXkgYFdvcnRoRnV6emluZyA9IHRydWVgLiBUaGlzIGlzIGEgY2xlYXIgY2FzZSBmb3IgaXQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZnV6emluZyB0YXJnZXQuIFdoYXQgZnVuY3Rpb25zIG5lZWQgdG8gYmUgZnV6emVkPyBMZXQncyBmaW5kIHRob3NlIHRoYXQgYXJlIHJlbGF0ZWQgdG8gYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgLiBJIGtub3cgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgIGlzIHN0YXRpYywgYnV0IGxldCdzIHNlZSB3aGljaCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSBpdCBvciBjYWxsIGl0LCBhbmQgd2hpY2ggb2YgdGhvc2UgYXJlIG5vdCBzdGF0aWMuXG5cblRoZSBmb2xsb3dpbmcgY2FsbCBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGA6XG4qICAgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCB3aGljaCBpcyBleHBvcnRlZC5cbiogICBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkYCB3aGljaCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgZmlsZW1hcF9yZWFkYC5cbiogICBgZm9saW9fZW5kX3dyaXRlYmFja2AgaXMgZXhwb3J0ZWQuXG4qICAgYGZpbGVtYXBfcmVhZGAgd2hpY2ggdGFrZXMgYXJndW1lbnRzIGFuZCByZXR1cm5zIGEgYHNzaXplX3RgLlxuKiAgIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCB3aGljaCBjYWxscyBgZmlsZW1hcF9yZWFkYC5cblxuU28sIHRoZSBmb2N1cyBzeW1ib2xzIHdvdWxkIGJlIGBmb2xpb19lbmRfZHJvcGJlaGluZGAsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYW5kIGBmaWxlbWFwX3JlYWRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjIwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTc6MDUuMDA1MzcwOTcxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2NzkxMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX2VuZF9kcm9wYmVoaW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mcy93cml0ZS5jPTczNT1zdGF0aWMgdm9pZCBuZnNfaW5vZGVfcmVtb3ZlX3JlcXVlc3Qoc3RydWN0IG5mc19wYWdlICpyZXEpXFxuLS1cXG5mcy9uZnMvd3JpdGUuYy03NTEtXFxuZnMvbmZzL3dyaXRlLmM6NzUyOlxcdFxcdFxcdGZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcXG5mcy9uZnMvd3JpdGUuYy03NTMtXFx0XFx0fVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTMxMT12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxMzEyOnZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTMxMy12b2lkIGZvbGlvX3dhaXRfc3RhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi0tXFxubW0vZmlsZW1hcC5jPTE2MDk9c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTE2MjctICovXFxubW0vZmlsZW1hcC5jOjE2Mjg6dm9pZCBmb2xpb19lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZpbGVtYXAuYy0xNjI5LXtcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjQ0LX1cXG5tbS9maWxlbWFwLmM6MTY0NTpFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfZHJvcGJlaGluZCk7XFxubW0vZmlsZW1hcC5jLTE2NDYtXFxuLS1cXG5tbS9maWxlbWFwLmM9MTY4Nz12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjk4LVxcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jOjE2OTk6XFx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYy0xNzAwLVxcdGZvbGlvX3B1dChmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU3OjA2LjYzMjE2ODk4NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NzM5OTk4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRHJvcGJlaGluZCBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgaG93IHRoaXMgXCJkcm9wYmVoaW5kXCIgZnVuY3Rpb25hbGl0eSBpcyBpbml0aWF0ZWQgYW5kLCB1bHRpbWF0ZWx5LCBhY3RpdmF0ZWQgd2l0aGluIHRoZSBzeXN0ZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjb3JlIG1lY2hhbmlzbXMuIEEgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGZpbGUgSS9PLCBpcyB0aGUgYGZpbGVtYXBfcmVhZGAgZnVuY3Rpb24uIEl04oCZcyBhIGZvdW5kYXRpb25hbCBwaWVjZSBmb3IgcmVhZGluZyBkYXRhIGZyb20gZmlsZXMsIHNvIEkgc3VzcGVjdCBpdCBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBtYW5hZ2luZyB0aGUgY2FjaGluZyBhbmQgZXZpY3Rpb24gYmVoYXZpb3IgdGhhdCB1bmRlcnBpbnMgZHJvcGJlaGluZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB2YXJpYWJsZXMgYW5kIGNvbmRpdGlvbnMgd2l0aGluIGBmaWxlbWFwX3JlYWRgIGFyZSByZXNwb25zaWJsZSBmb3IgbWFya2luZyBwYWdlcyBmb3IgcG90ZW50aWFsIGRyb3BwaW5nLCBhbmQgdGhlIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggdGhpcyBcImRyb3BiZWhpbmRcIiBmbGFnIGlzIGFjdHVhbGx5IHNldC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBkZXRlcm1pbmVzIHdoZXRoZXIgdG8ga2VlcCBhIHBhZ2UgaW4gdGhlIGNhY2hlIG9yIHByaW9yaXRpemUgaXRzIGV2aWN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHByb2JsZW1zKSBsaWtlbHkgbGllcy4gTGV0J3Mgc2VlIHdoYXQgYGZpbGVtYXBfcmVhZGAgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzo1NzoxNi4zNzIxNzAwMzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ZpbGVtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODgwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODgwOlxcdFxcbjI4ODE6XFx0XFx0XFx0XFx0aWYgKGNvcGllZCBcXHUwMDNjIGJ5dGVzKSB7XFxuMjg4MjpcXHRcXHRcXHRcXHRcXHRlcnJvciA9IC1FRkFVTFQ7XFxuMjg4MzpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yODg0OlxcdFxcdFxcdFxcdH1cXG4yODg1OlxcdFxcdFxcdH1cXG4yODg2OlxcdHB1dF9mb2xpb3M6XFxuMjg4NzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZm9saW9fYmF0Y2hfY291bnQoXFx1MDAyNmZiYXRjaCk7IGkrKykge1xcbjI4ODg6XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGZiYXRjaC5mb2xpb3NbaV07XFxuMjg4OTpcXHRcXG4yODkwOlxcdFxcdFxcdFxcdGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChmb2xpbyk7XFxuMjg5MTpcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjI4OTI6XFx0XFx0XFx0fVxcbjI4OTM6XFx0XFx0XFx0Zm9saW9fYmF0Y2hfaW5pdChcXHUwMDI2ZmJhdGNoKTtcXG4yODk0OlxcdFxcdH0gd2hpbGUgKGlvdl9pdGVyX2NvdW50KGl0ZXIpIFxcdTAwMjZcXHUwMDI2IGlvY2ItXFx1MDAzZWtpX3BvcyBcXHUwMDNjIGlzaXplIFxcdTAwMjZcXHUwMDI2ICFlcnJvcik7XFxuMjg5NTpcXHRcXG4yODk2OlxcdFxcdGZpbGVfYWNjZXNzZWQoZmlscCk7XFxuMjg5NzpcXHRcXHRyYS1cXHUwMDNlcHJldl9wb3MgPSBsYXN0X3BvcztcXG4yODk4OlxcdFxcdHJldHVybiBhbHJlYWR5X3JlYWQgPyBhbHJlYWR5X3JlYWQgOiBlcnJvcjtcXG4yODk5OlxcdH1cXG4yOTAwOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGZpbGVtYXBfcmVhZCk7XFxuMjkwMTpcXHRcXG4yOTAyOlxcdGludCBraW9jYl93cml0ZV9hbmRfd2FpdChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBjb3VudClcXG4yOTAzOlxcdHtcXG4yOTA0OlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW9jYi1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9tYXBwaW5nO1xcbjI5MDU6XFx0XFx0bG9mZl90IHBvcyA9IGlvY2ItXFx1MDAzZWtpX3BvcztcXG4yOTA2OlxcdFxcdGxvZmZfdCBlbmQgPSBwb3MgKyBjb3VudCAtIDE7XFxuMjkwNzpcXHRcXG4yOTA4OlxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9XQUlUKSB7XFxuMjkwOTpcXHRcXHRcXHRpZiAoZmlsZW1hcF9yYW5nZV9uZWVkc193cml0ZWJhY2sobWFwcGluZywgcG9zLCBlbmQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzo1NzoxNi4zNzIzNjY0MjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk0NjQ5NzE3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNTeW1ib2wgRGV0ZXJtaW5hdGlvbiBmb3IgRmlsZSBTeXN0ZW0gRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgYEZvY3VzU3ltYm9sc2AsIGtlZXBpbmcgZnV6emluZyBkaXN0cmlidXRpb24gaW4gbWluZC4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gZm9jdXMgb24gc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IG5lZWQgaGVhdnkgZnV6emluZywgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFdlIHdhbnQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHJhdGhlciB0aGFuIGludGVybmFsLCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy5cblxuUmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggYGZvbGlvX2VuZF9kcm9wYmVoaW5kYC4gSXQncyBhIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9uLCBleHBvcnRlZCBmcm9tIGBtbS9maWxlbWFwLmNgLiBOb3csIGlzIGl0IGEgZ2VuZXJpYyBob3QtcGF0aD8gTm8sIGl0IGxvb2tzIHByZXR0eSBzcGVjaWZpYyB0byB0aGUgZHJvcGJlaGluZCBtZWNoYW5pc20g4oCTIHRoZSB1bmNhY2hlZC9ET05UQ0FDSEUgSS9PIHBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uLiBUaGF0IHNlZW1zIHByb21pc2luZy5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBkcm9wYmVoaW5kIG9yIHRoaXMgdW5jYWNoZWQgSS9PIHBhdGggdGhhdCB3ZSBtaWdodCBhbHNvIGNvbnNpZGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyByZWxldmFudC4gSSBrbm93IG9mIGBmb2xpb19lbmRfZHJvcGJlaGluZGAsIGFuZCBub3cgSSByZW1lbWJlciBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAuLi5cblxuTGV0J3MgbG9vayBhdCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAuIEFoLCBpdCdzIGRlZmluZWQgaW4gYG1tL3RydW5jYXRlLmNgLiBBIHF1aWNrIGNoZWNrIHNob3dzIHRoYXQgaXQncyBhbHNvIG5vbi1zdGF0aWMhIFNvIGl0J3MgYW5vdGhlciBnb29kIGNhbmRpZGF0ZS4gYGludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApYCwgbG9va3MgcmlnaHQuIEl0J3MgZGVjbGFyZWQgaW4gYG1tL2ludGVybmFsLmhgLlxuXG5CZWZvcmUgSSBjb21taXQgdG8gdGhlc2UsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiBhbnkgc3BlY2lmaWMgYENPTkZJR19gIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSBgbW0vZmlsZW1hcC5jYCBvciB0aGUgZHJvcGJlaGluZCBmZWF0dXJlcy4gSSBuZWVkIHRvIGxvb2sgYXQgYG1tL01ha2VmaWxlYCBhbmQgYG1tL0tjb25maWdgIHRvIHNlZSBob3cgYGZpbGVtYXAub2AgaXMgYnVpbHQsIGFuZCBpZiBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHBsYXkgYSByb2xlIGhlcmUsIHRvIG1ha2Ugc3VyZSB0aGVzZSBhcmUgYWN0dWFsbHkgcmVsZXZhbnQgdG8gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHdlJ3JlIHRhcmdldGluZy4gSSBjYW4ndCBiZSBvdmVybG9va2luZyB0aG9zZSBkZXRhaWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcwNiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU3OjU1LjgzNzM0MTUzM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0OTExNTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGVtYXBcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTQ5PWVuZGlmXFxubW0vTWFrZWZpbGUtNTAtXFxubW0vTWFrZWZpbGU6NTE6b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG5tbS9NYWtlZmlsZS01Mi1cXHRcXHRcXHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU3OjU2LjE1MjI1ODEyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwODM1ODY3NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgdGhlIEJ1aWxkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgZmlsZW1hcC5vYCBpcyBjb25zaXN0ZW50bHkgYmVpbmcgYnVpbHQsIGluZGljYXRlZCBieSB0aGUgYG9iai15YCBhc3NpZ25tZW50LiBUaGF0J3MgZ29vZCB0byBrbm93OyBpdCdzIGEgY29yZSBjb21wb25lbnQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWdzIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgaXQgYmVoYXZlcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHBhZ2UgbWFuYWdlbWVudC4gVGhlIGhpbnRzIG9mIGBQR19kcm9wYmVoaW5kYCBhbmQgYGZvbGlvX21hcHBlZGAgbWFrZSBtZSB0aGluayB0aGF0IHRoZSBjb2RlIGRlYWxzIHdpdGggcGFnZSBjYWNoaW5nIHN0cmF0ZWdpZXMsIHBlcmhhcHMgcmVsYXRlZCB0byB0aGUgZmlsZXN5c3RlbSBjYWNoZSBhbmQgd3JpdGUtYmVoaW5kIGJlaGF2aW9yLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGhlYWRlciBmaWxlIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhbmQgbG9vayBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gTGV0J3MgZ28gY2hlY2sgdGhlIGRlZmluaXRpb24gZm9yIGBQR19kcm9wYmVoaW5kYCBpbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU3NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU4OjA2Ljk4ODEyNzc3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDczMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTA1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTA1OlxcdFxcdFBHX293bmVyXzIsXFx0XFx0LyogT3duZXIgdXNlLiBJZiBwYWdlY2FjaGUsIGZzIG1heSB1c2UgKi9cXG4gMTA2OlxcdFxcdFBHX2FyY2hfMSxcXG4gMTA3OlxcdFxcdFBHX3Jlc2VydmVkLFxcbiAxMDg6XFx0XFx0UEdfcHJpdmF0ZSxcXHRcXHQvKiBJZiBwYWdlY2FjaGUsIGhhcyBmcy1wcml2YXRlIGRhdGEgKi9cXG4gMTA5OlxcdFxcdFBHX3ByaXZhdGVfMixcXHRcXHQvKiBJZiBwYWdlY2FjaGUsIGhhcyBmcyBhdXggZGF0YSAqL1xcbiAxMTA6XFx0XFx0UEdfcmVjbGFpbSxcXHRcXHQvKiBUbyBiZSByZWNsYWltZWQgYXNhcCAqL1xcbiAxMTE6XFx0XFx0UEdfc3dhcGJhY2tlZCxcXHRcXHQvKiBQYWdlIGlzIGJhY2tlZCBieSBSQU0vc3dhcCAqL1xcbiAxMTI6XFx0XFx0UEdfdW5ldmljdGFibGUsXFx0XFx0LyogUGFnZSBpcyBcXFwidW5ldmljdGFibGVcXFwiICAqL1xcbiAxMTM6XFx0XFx0UEdfZHJvcGJlaGluZCxcXHRcXHQvKiBkcm9wIHBhZ2VzIG9uIElPIGNvbXBsZXRpb24gKi9cXG4gMTE0OlxcdCNpZmRlZiBDT05GSUdfTU1VXFxuIDExNTpcXHRcXHRQR19tbG9ja2VkLFxcdFxcdC8qIFBhZ2UgaXMgdm1hIG1sb2NrZWQgKi9cXG4gMTE2OlxcdCNlbmRpZlxcbiAxMTc6XFx0I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbiAxMTg6XFx0XFx0UEdfaHdwb2lzb24sXFx0XFx0LyogaGFyZHdhcmUgcG9pc29uZWQgcGFnZS4gRG9uJ3QgdG91Y2ggKi9cXG4gMTE5OlxcdCNlbmRpZlxcbiAxMjA6XFx0I2lmIGRlZmluZWQoQ09ORklHX1BBR0VfSURMRV9GTEFHKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcXG4gMTIxOlxcdFxcdFBHX3lvdW5nLFxcbiAxMjI6XFx0XFx0UEdfaWRsZSxcXG4gMTIzOlxcdCNlbmRpZlxcbiAxMjQ6XFx0I2lmZGVmIENPTkZJR19BUkNIX1VTRVNfUEdfQVJDSF8yXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU4OjA2Ljk4ODIzNzI0N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzgyMTYwMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgSXNzdWUgd2l0aCBQYWdlIEZsYWdzKipcblxuT2theSwgSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBQR19kcm9wYmVoaW5kYCBmbGFnIGFuZCBJIHNlZSBpdCdzIG5vdCBndWFyZGVkIGJ5IGFuIGAjaWZkZWZgIGluIGBwYWdlZmxhZ3NgLiBUaGF0J3MgYSBsaXR0bGUgdW51c3VhbCwgYW5kIGl0IG1ha2VzIG1lIHdvbmRlciBpZiB0aGVyZSdzIGFuIGludGVuZGVkIHBsYXRmb3JtIGRlcGVuZGVuY3kgaGVyZSB0aGF0J3MgYmVpbmcgb3Zlcmxvb2tlZC4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSB1c2Ugb2YgYGZvbGlvX21hcHBlZGAgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IHJlbGF0ZWQgbG9naWMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZ29pbmcgb24gdGhlcmUsIG9yIGlmIHNvbWV0aGluZyBoYXMgZ29uZSBhd3J5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZmxhZydzIHZpc2liaWxpdHkgYWNyb3NzIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGZvbGlvIG1hcHBpbmcgc3RydWN0dXJlcy4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGFuZCB3aGVyZSB0aGUgZmxhZyBpcyBiZWluZyBzZXQgYW5kIGNsZWFyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjA4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzo1ODoxMi4zNzA0MDA1ODlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDMxNjI5MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fbWFwcGVkXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vbW0vZmx1c2guYz0zMzY9dm9pZCBmbHVzaF9kY2FjaGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmFyY2gvYXJtL21tL2ZsdXNoLmMtMzU1LVxcdGlmICghY2FjaGVfb3BzX25lZWRfYnJvYWRjYXN0KCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL2FybS9tbS9mbHVzaC5jOjM1NjpcXHQgICAgbWFwcGluZyBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5hcmNoL2FybS9tbS9mbHVzaC5jLTM1Ny1cXHRcXHRjbGVhcl9iaXQoUEdfZGNhY2hlX2NsZWFuLCBcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYpO1xcbi0tXFxuYXJjaC9jc2t5L2FiaXYxL2NhY2hlZmx1c2guYz0xOD12b2lkIGZsdXNoX2RjYWNoZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuYXJjaC9jc2t5L2FiaXYxL2NhY2hlZmx1c2guYy0yNi1cXG5hcmNoL2Nza3kvYWJpdjEvY2FjaGVmbHVzaC5jOjI3OlxcdGlmIChtYXBwaW5nIFxcdTAwMjZcXHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKVxcbmFyY2gvY3NreS9hYml2MS9jYWNoZWZsdXNoLmMtMjgtXFx0XFx0Y2xlYXJfYml0KFBHX2RjYWNoZV9jbGVhbiwgXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4tLVxcbmFyY2gvbWlwcy9tbS9jLXI0ay5jPTUzNz1zdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfcjRrX2ZsdXNoX2NhY2hlX3BhZ2Uodm9pZCAqYXJncylcXG4tLVxcbmFyY2gvbWlwcy9tbS9jLXI0ay5jLTU3Ni1cXHRcXHRtYXBfY29oZXJlbnQgPSAoY3B1X2hhc19kY19hbGlhc2VzIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9taXBzL21tL2MtcjRrLmM6NTc3OlxcdFxcdFxcdFxcdGZvbGlvX21hcHBlZChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL21pcHMvbW0vYy1yNGsuYy01NzgtXFx0XFx0XFx0XFx0IWZvbGlvX3Rlc3RfZGNhY2hlX2RpcnR5KGZvbGlvKSk7XFxuLS1cXG5hcmNoL21pcHMvbW0vY2FjaGUuYz0xMjc9dm9pZCBfX2ZsdXNoX2Fub25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpXFxuLS1cXG5hcmNoL21pcHMvbW0vY2FjaGUuYy0xMzItXFx0aWYgKHBhZ2VzX2RvX2FsaWFzKGFkZHIsIHZtYWRkcikpIHtcXG5hcmNoL21pcHMvbW0vY2FjaGUuYzoxMzM6XFx0XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfZGNhY2hlX2RpcnR5KGZvbGlvKSkge1xcbmFyY2gvbWlwcy9tbS9jYWNoZS5jLTEzNC1cXHRcXHRcXHR2b2lkICprYWRkcjtcXG4tLVxcbmFyY2gvbWlwcy9tbS9pbml0LmM9MTYwPXZvaWQgY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sXFxuLS1cXG5hcmNoL21pcHMvbW0vaW5pdC5jLTE2Ny1cXHRpZiAoY3B1X2hhc19kY19hbGlhc2VzIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9taXBzL21tL2luaXQuYzoxNjg6XFx0ICAgIGZvbGlvX21hcHBlZChzcmMpIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X2RjYWNoZV9kaXJ0eShzcmMpKSB7XFxuYXJjaC9taXBzL21tL2luaXQuYy0xNjktXFx0XFx0dmZyb20gPSBrbWFwX2NvaGVyZW50KGZyb20sIHZhZGRyKTtcXG4tLVxcbmFyY2gvbWlwcy9tbS9pbml0LmM9MTg1PXZvaWQgY29weV90b191c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL21pcHMvbW0vaW5pdC5jLTE5MS1cXHRpZiAoY3B1X2hhc19kY19hbGlhc2VzIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9taXBzL21tL2luaXQuYzoxOTI6XFx0ICAgIGZvbGlvX21hcHBlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfZGNhY2hlX2RpcnR5KGZvbGlvKSkge1xcbmFyY2gvbWlwcy9tbS9pbml0LmMtMTkzLVxcdFxcdHZvaWQgKnZ0byA9IGttYXBfY29oZXJlbnQocGFnZSwgdmFkZHIpICsgKHZhZGRyIFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuLS1cXG5hcmNoL21pcHMvbW0vaW5pdC5jPTIwNT12b2lkIGNvcHlfZnJvbV91c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL21pcHMvbW0vaW5pdC5jLTIxMS1cXHRpZiAoY3B1X2hhc19kY19hbGlhc2VzIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9taXBzL21tL2luaXQuYzoyMTI6XFx0ICAgIGZvbGlvX21hcHBlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfZGNhY2hlX2RpcnR5KGZvbGlvKSkge1xcbmFyY2gvbWlwcy9tbS9pbml0LmMtMjEzLVxcdFxcdHZvaWQgKnZmcm9tID0ga21hcF9jb2hlcmVudChwYWdlLCB2YWRkcikgKyAodmFkZHIgXFx1MDAyNiB+UEFHRV9NQVNLKTtcXG4tLVxcbmFyY2gvc2gvbW0vY2FjaGUtc2g0LmM9MjE0PXN0YXRpYyB2b2lkIHNoNF9mbHVzaF9jYWNoZV9wYWdlKHZvaWQgKmFyZ3MpXFxuLS1cXG5hcmNoL3NoL21tL2NhY2hlLXNoNC5jLTI1MC1cXHRcXHRcXHR0ZXN0X2JpdChQR19kY2FjaGVfY2xlYW4sIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3NoL21tL2NhY2hlLXNoNC5jOjI1MTpcXHRcXHRcXHRmb2xpb19tYXBwZWQoZm9saW8pKTtcXG5hcmNoL3NoL21tL2NhY2hlLXNoNC5jLTI1Mi1cXHRcXHRpZiAobWFwX2NvaGVyZW50KVxcbi0tXFxuYXJjaC9zaC9tbS9jYWNoZS5jPTYwPXZvaWQgY29weV90b191c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuYXJjaC9zaC9tbS9jYWNoZS5jLTY1LVxcbmFyY2gvc2gvbW0vY2FjaGUuYzo2NjpcXHRpZiAoYm9vdF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzIFxcdTAwMjZcXHUwMDI2IGZvbGlvX21hcHBlZChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3NoL21tL2NhY2hlLmMtNjctXFx0ICAgIHRlc3RfYml0KFBHX2RjYWNoZV9jbGVhbiwgXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mKSkge1xcbi0tXFxuYXJjaC9zaC9tbS9jYWNoZS5jPTgxPXZvaWQgY29weV9mcm9tX3VzZXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5hcmNoL3NoL21tL2NhY2hlLmMtODYtXFxuYXJjaC9zaC9tbS9jYWNoZS5jOjg3OlxcdGlmIChib290X2NwdV9kYXRhLmRjYWNoZS5uX2FsaWFzZXMgXFx1MDAyNlxcdTAwMjYgZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gvc2gvbW0vY2FjaGUuYy04OC1cXHQgICAgdGVzdF9iaXQoUEdfZGNhY2hlX2NsZWFuLCBcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYpKSB7XFxuLS1cXG5hcmNoL3NoL21tL2NhY2hlLmM9OTk9dm9pZCBjb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSxcXG4tLVxcbmFyY2gvc2gvbW0vY2FjaGUuYy0xMDYtXFxuYXJjaC9zaC9tbS9jYWNoZS5jOjEwNzpcXHRpZiAoYm9vdF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzIFxcdTAwMjZcXHUwMDI2IGZvbGlvX21hcHBlZChzcmMpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9zaC9tbS9jYWNoZS5jLTEwOC1cXHQgICAgdGVzdF9iaXQoUEdfZGNhY2hlX2NsZWFuLCBcXHUwMDI2c3JjLVxcdTAwM2VmbGFncy5mKSkge1xcbi0tXFxuYXJjaC9zaC9tbS9jYWNoZS5jPTE1OD12b2lkIF9fZmx1c2hfYW5vbl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZtYWRkcilcXG4tLVxcbmFyY2gvc2gvbW0vY2FjaGUuYy0xNjMtXFx0aWYgKHBhZ2VzX2RvX2FsaWFzKGFkZHIsIHZtYWRkcikpIHtcXG5hcmNoL3NoL21tL2NhY2hlLmM6MTY0OlxcdFxcdGlmIChib290X2NwdV9kYXRhLmRjYWNoZS5uX2FsaWFzZXMgXFx1MDAyNlxcdTAwMjYgZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gvc2gvbW0vY2FjaGUuYy0xNjUtXFx0XFx0ICAgIHRlc3RfYml0KFBHX2RjYWNoZV9jbGVhbiwgXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mKSkge1xcbi0tXFxuYXJjaC94dGVuc2EvbW0vdGxiLmM9MjMyPXN0YXRpYyBpbnQgY2hlY2tfdGxiX2VudHJ5KHVuc2lnbmVkIHcsIHVuc2lnbmVkIGUsIGJvb2wgZHRsYilcXG4tLVxcbmFyY2gveHRlbnNhL21tL3RsYi5jLTI2NC1cXHRcXHRcXHRcXHRcXHRyYyB8PSBUTEJfSU5TQU5FO1xcbmFyY2gveHRlbnNhL21tL3RsYi5jOjI2NTpcXHRcXHRcXHRcXHRlbHNlIGlmIChmb2xpb19tYXBwZWQoZikpXFxuYXJjaC94dGVuc2EvbW0vdGxiLmMtMjY2LVxcdFxcdFxcdFxcdFxcdHJjIHw9IFRMQl9TVVNQSUNJT1VTO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmM9MzA3PXZvaWQgX19zaG1lbV93cml0ZWJhY2soc2l6ZV90IHNpemUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtMzI0LVxcdHdoaWxlICgoZm9saW8gPSB3cml0ZWJhY2tfaXRlcihtYXBwaW5nLCBcXHUwMDI2d2JjLCBmb2xpbywgXFx1MDAyNmVycm9yKSkpIHtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0uYzozMjU6XFx0XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtMzI2LVxcdFxcdFxcdGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZShcXHUwMDI2d2JjLCBmb2xpbyk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iYWNrdXAuYz0xMDM9dHRtX2JhY2t1cF9iYWNrdXBfZm9saW8oc3RydWN0IGZpbGUgKmJhY2t1cCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JhY2t1cC5jLTE1OS1cXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iYWNrdXAuYzoxNjA6XFx0XFx0aWYgKHdyaXRlYmFjayBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKHRvX2ZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JhY2t1cC5jLTE2MS1cXHRcXHQgICAgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHRvX2ZvbGlvKSkge1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTE3MDY9c3RhdGljIHZvaWQgbXBhZ2VfcmVsZWFzZV91bnVzZWRfcGFnZXMoc3RydWN0IG1wYWdlX2RhX2RhdGEgKm1wZCxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0xNzUwLVxcdFxcdFxcdGlmIChpbnZhbGlkYXRlKSB7XFxuZnMvZXh0NC9pbm9kZS5jOjE3NTE6XFx0XFx0XFx0XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpIHtcXG5mcy9leHQ0L2lub2RlLmMtMTc1Mi1cXHRcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8oZm9saW8pO1xcbi0tXFxuZnMvZnVzZS9kZXYuYz0xMDk4PXN0YXRpYyBpbnQgZnVzZV9jaGVja19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmZzL2Z1c2UvZGV2LmMtMTA5OS17XFxuZnMvZnVzZS9kZXYuYzoxMTAwOlxcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pIHx8XFxuZnMvZnVzZS9kZXYuYy0xMTAxLVxcdCAgICBmb2xpby1cXHUwMDNlbWFwcGluZyAhPSBOVUxMIHx8XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTExMjM9c3RhdGljIGludCBmdXNlX3RyeV9tb3ZlX2ZvbGlvKHN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgKmNzLCBzdHJ1Y3QgZm9saW8gKipmb2xpb3ApXFxuLS1cXG5mcy9mdXNlL2Rldi5jLTExNjctXFx0ICovXFxuZnMvZnVzZS9kZXYuYzoxMTY4OlxcdGlmIChXQVJOX09OKGZvbGlvX21hcHBlZChvbGRmb2xpbykpKVxcbmZzL2Z1c2UvZGV2LmMtMTE2OS1cXHRcXHRnb3RvIG91dF9mYWxsYmFja191bmxvY2s7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz00OTg9c3RhdGljIHZvaWQgcmVtb3ZlX2lub2RlX3NpbmdsZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTEwLVxcdGZvbGlvX2xvY2soZm9saW8pO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUxMTpcXHRpZiAodW5saWtlbHkoZm9saW9fbWFwcGVkKGZvbGlvKSkpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTEyLVxcdFxcdGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpbyhoLCBtYXBwaW5nLCBmb2xpbywgaW5kZXgpO1xcbi0tXFxuZnMvcHJvYy9wYWdlLmM9MTQ2PXU2NCBzdGFibGVfcGFnZV9mbGFncyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmZzL3Byb2MvcGFnZS5jLTE2Ni1cXHQgKi9cXG5mcy9wcm9jL3BhZ2UuYzoxNjc6XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpXFxuZnMvcHJvYy9wYWdlLmMtMTY4LVxcdFxcdHUgfD0gQklUX1VMTChLUEZfTU1BUCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MTk0Nz1zdGF0aWMgaW5saW5lIGludCBmb2xpb19tYXBjb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTE5NjUtICovXFxuaW5jbHVkZS9saW51eC9tbS5oOjE5NjY6c3RhdGljIGlubGluZSBib29sIGZvbGlvX21hcHBlZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvbW0uaC0xOTY3LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0yOTk0PXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tYXliZV9tYXBwZWRfc2hhcmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMzAzMi0gKlxcbmluY2x1ZGUvbGludXgvbW0uaDozMDMzOiAqIENhbGxpbmcgdGhpcyBmdW5jdGlvbiBvbiBhbiB1bm1hcHBlZCBmb2xpbyAtLSAhZm9saW9fbWFwcGVkKCkgLS0gdGhhdCBpc1xcbmluY2x1ZGUvbGludXgvbW0uaC0zMDM0LSAqIGxvY2tlZCB3aWxsIHJldHVybiBhIHN0YWJsZSByZXN1bHQuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD0xMzU9c3RhdGljIGlubGluZSB2b2lkIF9fZm9saW9fbGFyZ2VfbWFwY291bnRfc2FuaXR5X2NoZWNrcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtMTU4LVxcdFxcdFxcdGZvbGlvLVxcdTAwM2VfbW1faWRfbWFwY291bnRbMV0gXFx1MDAzYyAwKTtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDoxNTk6XFx0Vk1fV0FSTl9PTl9PTkNFKCFmb2xpb19tYXBwZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuaW5jbHVkZS9saW51eC9ybWFwLmgtMTYwLVxcdFxcdFxcdHRlc3RfYml0KEZPTElPX01NX0lEU19TSEFSRURfQklUTlVNLCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9tbV9pZHMpKTtcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3BhZ2VtYXAuaC0yMC1cXHQoZm9saW9fdGVzdF9hbm9uKGZvbGlvKVxcdFxcdD8gUEFHRU1BUF9BTk9OWU1PVVMgIDogUEFHRU1BUF9GSUxFKSB8IFxcXFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9wYWdlbWFwLmg6MjE6XFx0KGZvbGlvX21hcHBlZChmb2xpbylcXHRcXHQ/IFBBR0VNQVBfTUFQUEVEICAgICA6IDApIHwgXFxcXFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3BhZ2VtYXAuaC0yMi1cXHQoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pXFx0PyBQQUdFTUFQX1NXQVBDQUNIRSAgOiAwKSB8IFxcXFxcXG4tLVxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jPTQwNT1zdGF0aWMgaW50IF9fdXByb2JlX3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNDUzLVxcdGZvbGlvX3JlbW92ZV9ybWFwX3B0ZShmb2xpbywgZnctXFx1MDAzZXBhZ2UsIHZtYSk7XFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmM6NDU0OlxcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy00NTUtXFx0ICAgICBmb2xpb190cnlsb2NrKGZvbGlvKSkge1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE3ND12b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTgwLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxODE6XFx0aWYgKCFmb2xpb19tYXBwZWQoZm9saW8pIHx8ICFmb2xpb19yYXdfbWFwcGluZyhmb2xpbykpIHtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTgyLVxcdFxcdGZvbGlvX3NldF9pZGxlKGZvbGlvKTtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz0yMzY9Ym9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI0NC1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjQ1OlxcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSB8fCAhZm9saW9fcmF3X21hcHBpbmcoZm9saW8pKSB7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI0Ni1cXHRcXHRpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSlcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz0yNjE9Ym9vbCBkYW1vc19mb2xpb19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI5My1cXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1VOTUFQUEVEOlxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyOTQ6XFx0XFx0bWF0Y2hlZCA9ICFmb2xpb19tYXBwZWQoZm9saW8pIHx8ICFmb2xpb19yYXdfbWFwcGluZyhmb2xpbyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI5NS1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2ZpbGVtYXAuYz0xNTA9c3RhdGljIHZvaWQgZmlsZW1hcF91bmFjY291bnRfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9maWxlbWFwLmMtMTU0LVxcbm1tL2ZpbGVtYXAuYzoxNTU6XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX21hcHBlZChmb2xpbyksIGZvbGlvKTtcXG5tbS9maWxlbWFwLmM6MTU2OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfREVCVUdfVk0pIFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KGZvbGlvX21hcHBlZChmb2xpbykpKSB7XFxubW0vZmlsZW1hcC5jLTE1Ny1cXHRcXHRwcl9hbGVydChcXFwiQlVHOiBCYWQgcGFnZSBjYWNoZSBpbiBwcm9jZXNzICVzICBwZm46JTA1bHhcXFxcblxcXCIsXFxuLS1cXG5tbS9maWxlbWFwLmM9MTYwOT1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9maWxlbWFwLmMtMTYxOC1cXHRcXHRyZXR1cm47XFxubW0vZmlsZW1hcC5jOjE2MTk6XFx0aWYgKG1hcHBpbmcgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXFxubW0vZmlsZW1hcC5jLTE2MjAtXFx0XFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XFxuLS1cXG5tbS9mb2xpby5jPTUzMT1zdGF0aWMgdm9pZCBscnVfZGVhY3RpdmF0ZV9maWxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNTM5LVxcdC8qIFNvbWUgcHJvY2Vzc2VzIGFyZSB1c2luZyB0aGUgZm9saW8gKi9cXG5tbS9mb2xpby5jOjU0MDpcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS9mb2xpby5jLTU0MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQzNjM9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQzNjYtXFxubW0vaHVnZV9tZW1vcnkuYzo0MzY3OlxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19tYXBwZWQoZm9saW8pLCBmb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYy00MzY4LVxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuLS1cXG5tbS9odWdldGxiLmM9NTE4NT12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTMwMi1cXHRcXHRpZiAoIWgtXFx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlcyBcXHUwMDI2XFx1MDAyNiBfX3ZtYV9wcml2YXRlX2xvY2sodm1hKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2h1Z2V0bGIuYzo1MzAzOlxcdFxcdCAgICAhZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XFxubW0vaHVnZXRsYi5jLTUzMDQtXFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMjQyPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNDI2LVxcbm1tL2todWdlcGFnZWQuYzoyNDI3OlxcdFxcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKVxcbm1tL2todWdlcGFnZWQuYy0yNDI4LVxcdFxcdFxcdHRyeV90b191bm1hcChmb2xpbyxcXG4tLVxcbm1tL2tzbS5jPTExMjY9c3RhdGljIGludCByZW1vdmVfc3RhYmxlX25vZGUoc3RydWN0IGtzbV9zdGFibGVfbm9kZSAqc3RhYmxlX25vZGUpXFxuLS1cXG5tbS9rc20uYy0xMTQ0LVxcdGVyciA9IC1FQlVTWTtcXG5tbS9rc20uYzoxMTQ1OlxcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSkge1xcbm1tL2tzbS5jLTExNDYtXFx0XFx0LypcXG4tLVxcbm1tL2tzbS5jPTEzOTQ9c3RhdGljIGludCByZXBsYWNlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0va3NtLmMtMTQ3NS1cXHRmb2xpb19yZW1vdmVfcm1hcF9wdGUoZm9saW8sIHBhZ2UsIHZtYSk7XFxubW0va3NtLmM6MTQ3NjpcXHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykpXFxubW0va3NtLmMtMTQ3Ny1cXHRcXHRmb2xpb19mcmVlX3N3YXAoZm9saW8pO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNTY4PWludCB1bm1hcF9wb2lzb25lZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBtdXN0X2tpbGwpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2MTYtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNjE3OlxcdHJldHVybiBmb2xpb19tYXBwZWQoZm9saW8pID8gLUVCVVNZIDogMDtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2MTgtfVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNjI0PXN0YXRpYyBib29sIGh3cG9pc29uX3VzZXJfbWFwcGluZ3Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnAsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NDUtXFx0ICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNjQ2OlxcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NDctXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3MzY9aW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc4Mi1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3ODM6XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3ODQtXFx0XFx0dW5wb2lzb25fcHJfaW5mbyhcXFwiJSNseDogc29tZW9uZSBtYXBzIHRoZSBod3BvaXNvbiBwYWdlXFxcXG5cXFwiLFxcbi0tXFxubW0vbWVtb3J5LmM9NDg4MT12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTUyMTQtXFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAhPSBucl9wYWdlcywgZm9saW8pO1xcbm1tL21lbW9yeS5jOjUyMTU6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX21hcHBlZChmb2xpbyksIGZvbGlvKTtcXG5tbS9tZW1vcnkuYy01MjE2LVxcdFxcdGZvbGlvX2FkZF9uZXdfYW5vbl9ybWFwKGZvbGlvLCB2bWEsIGFkZHJlc3MsIHJtYXBfZmxhZ3MpO1xcbi0tXFxubW0vbWVtb3J5LmM9NTU0MT1zdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTU3Ni1cXHRcXHRpZiAocmV0IFxcdTAwMjYgVk1fRkFVTFRfTE9DS0VEKSB7XFxubW0vbWVtb3J5LmM6NTU3NzpcXHRcXHRcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS9tZW1vcnkuYy01NTc4LVxcdFxcdFxcdFxcdHVubWFwX21hcHBpbmdfZm9saW8oZm9saW8pO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xODQ2PXN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTg3Ny1cXHRcXHRcXHRcXHRnb3RvIHB1dF9mb2xpbztcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE4Nzg6XFx0XFx0XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpIHtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE4NzktXFx0XFx0XFx0XFx0Zm9saW9fbG9jayhmb2xpbyk7XFxuLS1cXG5tbS9taWdyYXRlLmM9MTIxMz1zdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fdW5tYXAobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xMzMzLVxcdFxcdH1cXG5tbS9taWdyYXRlLmM6MTMzNDpcXHR9IGVsc2UgaWYgKGZvbGlvX21hcHBlZChzcmMpKSB7XFxubW0vbWlncmF0ZS5jLTEzMzUtXFx0XFx0LyogRXN0YWJsaXNoIG1pZ3JhdGlvbiBwdGVzICovXFxuLS1cXG5tbS9taWdyYXRlLmMtMTM0MS1cXG5tbS9taWdyYXRlLmM6MTM0MjpcXHRpZiAoIWZvbGlvX21hcHBlZChzcmMpKSB7XFxubW0vbWlncmF0ZS5jLTEzNDMtXFx0XFx0X19taWdyYXRlX2ZvbGlvX3JlY29yZChkc3QsIG9sZF9mb2xpb19zdGF0ZSwgYW5vbl92bWEpO1xcbi0tXFxubW0vbWlncmF0ZS5jPTE0ODA9c3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdldGxiX2ZvbGlvKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTUyOS1cXG5tbS9taWdyYXRlLmM6MTUzMDpcXHRpZiAoZm9saW9fbWFwcGVkKHNyYykpIHtcXG5tbS9taWdyYXRlLmMtMTUzMS1cXHRcXHRpZiAoIWZvbGlvX3Rlc3RfYW5vbihzcmMpKSB7XFxuLS1cXG5tbS9taWdyYXRlLmMtMTU0OC1cXG5tbS9taWdyYXRlLmM6MTU0OTpcXHRpZiAoIWZvbGlvX21hcHBlZChzcmMpKVxcbm1tL21pZ3JhdGUuYy0xNTUwLVxcdFxcdHJjID0gbW92ZV90b19uZXdfZm9saW8oZHN0LCBzcmMsIG1vZGUpO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz01NzE9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfdW5tYXAodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTYxOC1cXG5tbS9taWdyYXRlX2RldmljZS5jOjYxOTpcXHRcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTYyMC1cXHRcXHRcXHR0cnlfdG9fbWlncmF0ZShmb2xpbywgMCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy02MjEtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo2MjI6XFx0XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykgfHxcXG5tbS9taWdyYXRlX2RldmljZS5jLTYyMy1cXHRcXHQgICAgIW1pZ3JhdGVfdm1hX2NoZWNrX3BhZ2UocGFnZSwgZmF1bHRfcGFnZSkpIHtcXG4tLVxcbm1tL3BhZ2VfaWRsZS5jPTk3PXN0YXRpYyB2b2lkIHBhZ2VfaWRsZV9jbGVhcl9wdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vcGFnZV9pZGxlLmMtMTA3LVxcbm1tL3BhZ2VfaWRsZS5jOjEwODpcXHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykgfHwgIWZvbGlvX3Jhd19tYXBwaW5nKGZvbGlvKSlcXG5tbS9wYWdlX2lkbGUuYy0xMDktXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vcm1hcC5jPTU1Mj12b2lkIF9faW5pdCBhbm9uX3ZtYV9pbml0KHZvaWQpXFxuLS1cXG5tbS9ybWFwLmMtNTczLSAqIGVuc3VyZSB0aGF0IGFueSBhbm9uX3ZtYSBvYnRhaW5lZCBmcm9tIHRoZSBwYWdlIHdpbGwgc3RpbGwgYmUgdmFsaWQgZm9yIGFzXFxubW0vcm1hcC5jOjU3NDogKiBsb25nIGFzIHdlIG9ic2VydmUgZm9saW9fbWFwcGVkKCkgWyBoZW5jZSBhbGwgdGhvc2UgZm9saW9fbWFwcGVkKCkgdGVzdHMgXS5cXG5tbS9ybWFwLmMtNTc1LSAqXFxuLS1cXG5tbS9ybWFwLmM9NTg3PXN0cnVjdCBhbm9uX3ZtYSAqZm9saW9fZ2V0X2Fub25fdm1hKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9ybWFwLmMtNTk3LVxcdFxcdGdvdG8gb3V0O1xcbm1tL3JtYXAuYzo1OTg6XFx0aWYgKCFmb2xpb19tYXBwZWQoZm9saW8pKVxcbm1tL3JtYXAuYy01OTktXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5tbS9ybWFwLmMtNjEzLVxcdCAqL1xcbm1tL3JtYXAuYzo2MTQ6XFx0aWYgKCFmb2xpb19tYXBwZWQoZm9saW8pKSB7XFxubW0vcm1hcC5jLTYxNS1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm1tL3JtYXAuYz02MzM9c3RydWN0IGFub25fdm1hICpmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy02NDUtXFx0XFx0Z290byBvdXQ7XFxubW0vcm1hcC5jOjY0NjpcXHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykpXFxubW0vcm1hcC5jLTY0Ny1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL3JtYXAuYy02NTYtXFx0XFx0ICovXFxubW0vcm1hcC5jOjY1NzpcXHRcXHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykpIHtcXG5tbS9ybWFwLmMtNjU4LVxcdFxcdFxcdHVwX3JlYWQoXFx1MDAyNnJvb3RfYW5vbl92bWEtXFx1MDAzZXJ3c2VtKTtcXG4tLVxcbm1tL3JtYXAuYy02NzUtXFxubW0vcm1hcC5jOjY3NjpcXHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykpIHtcXG5tbS9ybWFwLmMtNjc3LVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubW0vcm1hcC5jPTEyMDM9aW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3JtYXAuYy0xMjE0LVxcbm1tL3JtYXAuYzoxMjE1OlxcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS9ybWFwLmMtMTIxNi1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3JtYXAuYz0yMjAxPXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjIxNy1cXHQgKiBpbiBiZXR3ZWVuIGl0cyBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbCgpIGFuZCBmb2xpb19yZW1vdmVfcm1hcF8qKCksXFxubW0vcm1hcC5jOjIyMTg6XFx0ICogdHJ5X3RvX3VubWFwKCkgbWF5IHJldHVybiBiZWZvcmUgZm9saW9fbWFwcGVkKCkgaGFzIGJlY29tZSBmYWxzZSxcXG5tbS9ybWFwLmMtMjIxOS1cXHQgKiBpZiBwYWdlIHRhYmxlIGxvY2tpbmcgaXMgc2tpcHBlZDogdXNlIFRUVV9TWU5DIHRvIHdhaXQgZm9yIHRoYXQuXFxuLS1cXG5tbS9ybWFwLmM9MjQyNz1zdGF0aWMgaW50IGZvbGlvX25vdF9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9ybWFwLmMtMjQyOC17XFxubW0vcm1hcC5jOjI0Mjk6XFx0cmV0dXJuICFmb2xpb19tYXBwZWQoZm9saW8pO1xcbm1tL3JtYXAuYy0yNDMwLX1cXG4tLVxcbm1tL3JtYXAuYz0yNDY1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yNDgwLVxcdCAqIGluIGJldHdlZW4gaXRzIHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKCkgYW5kIGZvbGlvX3JlbW92ZV9ybWFwXyooKSxcXG5tbS9ybWFwLmM6MjQ4MTpcXHQgKiB0cnlfdG9fbWlncmF0ZSgpIG1heSByZXR1cm4gYmVmb3JlIGZvbGlvX21hcHBlZCgpIGhhcyBiZWNvbWUgZmFsc2UsXFxubW0vcm1hcC5jLTI0ODItXFx0ICogaWYgcGFnZSB0YWJsZSBsb2NraW5nIGlzIHNraXBwZWQ6IHVzZSBUVFVfU1lOQyB0byB3YWl0IGZvciB0aGF0Llxcbi0tXFxubW0vcm1hcC5jPTI5NzU9c3RhdGljIHN0cnVjdCBhbm9uX3ZtYSAqcm1hcF93YWxrX2Fub25fbG9jayhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTI5ODQtXFx0ICogTm90ZTogcmVtb3ZlX21pZ3JhdGlvbl9wdGVzKCkgY2Fubm90IHVzZSBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoKVxcbm1tL3JtYXAuYzoyOTg1OlxcdCAqIGJlY2F1c2UgdGhhdCBkZXBlbmRzIG9uIGZvbGlvX21hcHBlZCgpOyBidXQgbm90IGFsbCBpdHMgdXNhZ2VzXFxubW0vcm1hcC5jLTI5ODYtXFx0ICogYXJlIGhvbGRpbmcgbW1hcF9sb2NrLiBVc2VycyB3aXRob3V0IG1tYXBfbG9jayBhcmUgcmVxdWlyZWQgdG9cXG4tLVxcbm1tL3NobWVtLmM9MTYwNz1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zaG1lbS5jLTE3MTctXFxubW0vc2htZW0uYzoxNzE4OlxcdFxcdEJVR19PTihmb2xpb19tYXBwZWQoZm9saW8pKTtcXG5tbS9zaG1lbS5jLTE3MTktXFx0XFx0ZXJyb3IgPSBzd2FwX3dyaXRlb3V0KGN0eCwgZm9saW8pO1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTU1Mj12b2lkIGZyZWVfc3dhcF9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3N3YXBfc3RhdGUuYy01NTMte1xcbm1tL3N3YXBfc3RhdGUuYzo1NTQ6XFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3N3YXBfc3RhdGUuYy01NTUtXFx0ICAgIGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE5OD1zdGF0aWMgaW50IF9fdHJ5X3RvX3JlY2xhaW1fc3dhcChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIzNS1cXHRuZWVkX3JlY2xhaW0gPSAoKGZsYWdzIFxcdTAwMjYgVFRSU19BTllXQVkpIHx8XFxubW0vc3dhcGZpbGUuYzoyMzY6XFx0XFx0XFx0KChmbGFncyBcXHUwMDI2IFRUUlNfVU5NQVBQRUQpIFxcdTAwMjZcXHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKSB8fFxcbm1tL3N3YXBmaWxlLmMtMjM3LVxcdFxcdFxcdCgoZmxhZ3MgXFx1MDAyNiBUVFJTX0ZVTEwpIFxcdTAwMjZcXHUwMDI2IG1lbV9jZ3JvdXBfc3dhcF9mdWxsKGZvbGlvKSkpO1xcbi0tXFxubW0vdHJ1bmNhdGUuYz0xNTQ9c3RhdGljIHZvaWQgdHJ1bmNhdGVfY2xlYW51cF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3RydW5jYXRlLmMtMTU1LXtcXG5tbS90cnVuY2F0ZS5jOjE1NjpcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS90cnVuY2F0ZS5jLTE1Ny1cXHRcXHR1bm1hcF9tYXBwaW5nX2ZvbGlvKGZvbGlvKTtcXG4tLVxcbm1tL3RydW5jYXRlLmM9MTgwPXN0YXRpYyBpbnQgZm9saW9fc3BsaXRfb3JfdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LFxcbi0tXFxubW0vdHJ1bmNhdGUuYy0xOTktXFx0XFx0dHJ5X3RvX3VubWFwKGZvbGlvLCB0dHVfZmxhZ3MpO1xcbm1tL3RydW5jYXRlLmM6MjAwOlxcdFxcdFdBUk5fT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XFxubW0vdHJ1bmNhdGUuYy0yMDEtXFx0fVxcbi0tXFxubW0vdHJ1bmNhdGUuYz02MjI9aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTYyOS1cXG5tbS90cnVuY2F0ZS5jOjYzMDpcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS90cnVuY2F0ZS5jLTYzMS1cXHRcXHR1bm1hcF9tYXBwaW5nX2ZvbGlvKGZvbGlvKTtcXG5tbS90cnVuY2F0ZS5jOjYzMjpcXHRCVUdfT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XFxubW0vdHJ1bmNhdGUuYy02MzMtXFxuLS1cXG5tbS90cnVuY2F0ZS5jPTY3Nj1pbnQgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTcwOC1cXG5tbS90cnVuY2F0ZS5jOjcwOTpcXHRcXHRcXHRpZiAoIWRpZF9yYW5nZV91bm1hcCBcXHUwMDI2XFx1MDAyNiBmb2xpb19tYXBwZWQoZm9saW8pKSB7XFxubW0vdHJ1bmNhdGUuYy03MTAtXFx0XFx0XFx0XFx0LypcXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwNTg9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTExNi1cXG5tbS92bXNjYW4uYzoxMTE3OlxcdFxcdGlmICghc2MtXFx1MDAzZW1heV91bm1hcCBcXHUwMDI2XFx1MDAyNiBmb2xpb19tYXBwZWQoZm9saW8pKVxcbm1tL3Ztc2Nhbi5jLTExMTgtXFx0XFx0XFx0Z290byBrZWVwX2xvY2tlZDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTEzMjctXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6MTMyODpcXHRcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSkge1xcbm1tL3Ztc2Nhbi5jLTEzMjktXFx0XFx0XFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSBUVFVfQkFUQ0hfRkxVU0g7XFxuLS1cXG5tbS92bXNjYW4uYy0xMzQ5LVxcdFxcdFxcdHRyeV90b191bm1hcChmb2xpbywgZmxhZ3MpO1xcbm1tL3Ztc2Nhbi5jOjEzNTA6XFx0XFx0XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpIHtcXG5tbS92bXNjYW4uYy0xMzUxLVxcdFxcdFxcdFxcdHN0YXQtXFx1MDAzZW5yX3VubWFwX2ZhaWwgKz0gbnJfcGFnZXM7XFxuLS1cXG5tbS92bXNjYW4uYz0xNjc5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuLS1cXG5tbS92bXNjYW4uYy0xNzIyLVxcdFxcdFxcdGdvdG8gbW92ZTtcXG5tbS92bXNjYW4uYzoxNzIzOlxcdFxcdGlmICghc2MtXFx1MDAzZW1heV91bm1hcCBcXHUwMDI2XFx1MDAyNiBmb2xpb19tYXBwZWQoZm9saW8pKVxcbm1tL3Ztc2Nhbi5jLTE3MjQtXFx0XFx0XFx0Z290byBtb3ZlO1xcbi0tXFxubW0vdm1zY2FuLmM9NDg3NT1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MjctXFx0XFx0LyogcmV0cnkgZm9saW9zIHRoYXQgbWF5IGhhdmUgbWlzc2VkIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXFxubW0vdm1zY2FuLmM6NDkyODpcXHRcXHRpZiAoIXNraXBfcmV0cnkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTQ5MjktXFx0XFx0ICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU4OjE0LjMxMzU2OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Njg5MDAwMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZpbGVtYXAgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIGNvbmNlcm5pbmcgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgLCBzcGVjaWZpY2FsbHkgdGhlIGludGVybmFsIHN0YXRpYyBoZWxwZXIuIFRoZSBrZXkgZXhwb3J0ZWQgZnVuY3Rpb25zIGFyZSBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIGFuZCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAuIEkgc2hvdWxkIHRha2UgYSBxdWljayBsb29rIGFyb3VuZCBgbW0vZmlsZW1hcC5jYCBhbmQgZWxzZXdoZXJlIHRvIHNlZSBpZiBhbnkgcmVsYXRlZCBmdW5jdGlvbnMgd2FycmFudCBjbG9zZXIgc2NydXRpbnkuIFNpbmNlIHRob3NlIGFyZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLlxuXG5Ob3csIGNvbmZpZ3VyYXRpb24td2lzZSwgSSBkb24ndCBzZWUgYW55dGhpbmcgZXhwbGljaXRseSByZXF1aXJlZC4gVGhlIHNvdXJjZSBmaWxlLCBgbW0vZmlsZW1hcC5jYCwgaXMgYnVpbHQgdW5jb25kaXRpb25hbGx5IChvYmoteSksIHNvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBlbXB0eSwgd2hpY2ggYWxpZ25zIHdpdGggbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBObyByZWFsIGtub2JzIHRvIHR3ZWFrIHRoZXJlLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdtIGdvaW5nIHRvIHJlLWNvbmZpcm0gdGhhdCB0aGUgXCJXb3J0aEZ1enppbmdcIiBmbGFnIGlzIHNldCB0byB0cnVlLiBCYXNlZCBvbiB0aGUgcmVhc29uaW5nIHByb3ZpZGVkLCB0aGF0IG1ha2VzIHNlbnNlLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgZnVuZGFtZW50YWwgcGFnZSBjYWNoZSBsb2dpYzogYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKWAgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWRkIGEgY2hlY2sgZm9yIGZvbGlvIG1hcHBpbmcgYmVmb3JlIGNhbGxpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKWAuIFRoaXMgaW1wYWN0cyB1bmNhY2hlZCBJL08gYW5kIHBhZ2UgY2FjaGUgZXZpY3Rpb24gcGF0aHMuIFRoaXMgaXMgZGVmaW5pdGVseSBmdXp6YWJsZS4gQW5kIHRoaXMgc291bmRzIGxpa2UgYSB2ZXJ5IHZhbHVhYmxlIGNoYW5nZS5cblxuU28gdG8gcmVjYXA6IEknbSBmb2N1c2VkIG9uIGBmb2xpb19lbmRfZHJvcGJlaGluZGAgYW5kIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4gTm8gc3BlY2lhbCBjb25maWdzIGFyZSBuZWVkZWQuIEV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI4NSwiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTg6MjAuMDAyNTcwNDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX2VuZF9kcm9wYmVoaW5kXCIsXG4gICAgXCJmb2xpb191bm1hcF9pbnZhbGlkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBwYWdlIGNhY2hlIGRyb3BiZWhpbmQgaW52YWxpZGF0aW9uIGxvZ2ljIGluIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKSBieSBhZGRpbmcgYSBjaGVjayAoIWZvbGlvX21hcHBlZChmb2xpbykpIGJlZm9yZSBjYWxsaW5nIGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKS4gVGhpcyBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHVuY2FjaGVkIC8gZHJvcGJlaGluZCBJL08gcHJvY2Vzc2luZyAoZS5nLiBSV0ZfRE9OVENBQ0hFKSBhbmQgd3JpdGViYWNrIGNvbXBsZXRpb24gaW4gcmVhY2hhYmxlLCBzdGFuZGFyZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fZW5kX2Ryb3BiZWhpbmRcIixcbiAgICBcImZvbGlvX3VubWFwX2ludmFsaWRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHBhZ2UgY2FjaGUgZHJvcGJlaGluZCBpbnZhbGlkYXRpb24gbG9naWMgaW4gZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpIGJ5IGFkZGluZyBhIGNoZWNrICghZm9saW9fbWFwcGVkKGZvbGlvKSkgYmVmb3JlIGNhbGxpbmcgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpLiBUaGlzIGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdW5jYWNoZWQgLyBkcm9wYmVoaW5kIEkvTyBwcm9jZXNzaW5nIChlLmcuIFJXRl9ET05UQ0FDSEUpIGFuZCB3cml0ZWJhY2sgY29tcGxldGlvbiBpbiByZWFjaGFibGUsIHN0YW5kYXJkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTg6MjAuMDAyNTk3NTE5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAyMDE3OTE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU4OjIwLjAwMzAxNjIxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDYwMTk3NTYxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKClgIHRvIGFkZCBhIGAhZm9saW9fbWFwcGVkKGZvbGlvKWAgY2hlY2sgYmVmb3JlIGludm9raW5nIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlKClgLCBwcmV2ZW50aW5nIGRyb3BiZWhpbmQgaW52YWxpZGF0aW9uIG9mIGZvbGlvcyB0aGF0IGFyZSBjdXJyZW50bHkgbWFwcGVkIGludG8gdXNlciBwYWdlIHRhYmxlcy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2svaGVhcCBidWZmZXIgY29weWluZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEl0IG9ubHkgYWRkcyBhIHN0YXRlIGNoZWNrIG9uIGV4aXN0aW5nIGxvY2tlZCBmb2xpb3Mgd2l0aGluIHRoZSBwYWdlIGNhY2hlLiBBbnkgaXNzdWVzIHJlbGF0ZWQgdG8gZm9saW8gbGlmZWN5Y2xlLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIG1lbW9yeSBzYWZldHkgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgKGUuZy4gYFZNX0JVR19PTl9GT0xJT2ApIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWYzZmFhYmM4Mzk3NmYyYjgyMTFlZmFlMDhiNGU2ZWE3Nzg1NDkwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDE3OjU1OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCA2YWZlYzYzNjg4MWZiLi4wMGZkODljZjZmNTUwIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4rKysgYi9tbS9maWxlbWFwLmNcbkBAIC0xNjE2LDcgKzE2MTYsNyBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdHJldHVybjtcbiBcdGlmICghZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuLVx0aWYgKG1hcHBpbmcpXG4rXHRpZiAobWFwcGluZyBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXG4gXHRcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU4OjIwLjAwMzAxNjk5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc1Njc4MDQzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGxhbmRlZCBpbiBteSBxdWV1ZSwgYW5kIHRoZSBmaXJzdCB0aG91Z2h0IHRoYXQgaGl0cyBtZSBpczogZG9lcyB0aGlzIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uPyBMZXQncyBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0LCBzbyBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGdvb2QsIGhhcmQgbG9vayBhdCB0aGlzIGRpZmY6XG5cbmBgYGRpZmZcbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDZhZmVjNjM2ODgxZmIuLjAwZmQ4OWNmNmY1NTBcbi0tLSBhL21tL2ZpbGVtYXAuY1xuKysrIGIvbW0vZmlsZW1hcC5jXG5AQCAtMTYxNiw3ICsxNjE2LDcgQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRyZXR1cm47XG4gXHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpXG4gXHRcdHJldHVybjtcbi1cdGlmIChtYXBwaW5nKVxuK1x0aWYgKG1hcHBpbmcgXHUwMDI2XHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKVxuIFx0XHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcbiB9XG5gYGBcblxuSXQncyBhIHN1YnRsZSBjaGFuZ2UsIGl0IGxvb2tzIGxpa2UgdGhlcmUgaXMgYSBuZXcgY29uZGl0aW9uIG9uIGEgZm9saW8gdW5tYXAsIGNoZWNraW5nIGlmIGl0J3MgbWFwcGVkIGJlZm9yZSBpbnZhbGlkYXRpbmcgaXQsIHdoaWNoIGFwcGVhcnMgdG8gYmUgd2l0aGluIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYC4gSSBuZWVkIHRvIHJldmlldyB0aGUgbG9naWMgYXJvdW5kIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCBpdHNlbGYgYW5kIGdldCBhIGZlZWwgZm9yIGhvdyBvZnRlbiB0aGlzIGNvZGUgcGF0aCBpcyBoaXQgYW5kIHdoYXQgc29ydCBvZiBvYmplY3RzIGFyZSBiZWluZyBtYW5pcHVsYXRlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGJhc2lzIGZvciBkZWNpZGluZyBpZiB3ZSBuZWVkIHRvIGV4cGFuZCB0aGUgc2NvcGUgZm9yIGZ1enppbmcgdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTg6MjcuNTcwODIzOTA5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9maWxlbWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTYwMDpcXHRcXHRcXHRyZXQgPSBmb2xpb193YWl0X2JpdF9raWxsYWJsZShmb2xpbywgUEdfcHJpdmF0ZV8yKTtcXG4xNjAxOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE2MDI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTYwMzpcXHRcXHR9XFxuMTYwNDpcXHRcXG4xNjA1OlxcdFxcdHJldHVybiByZXQ7XFxuMTYwNjpcXHR9XFxuMTYwNzpcXHRFWFBPUlRfU1lNQk9MKGZvbGlvX3dhaXRfcHJpdmF0ZV8yX2tpbGxhYmxlKTtcXG4xNjA4OlxcdFxcbjE2MDk6XFx0c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjE2MTA6XFx0e1xcbjE2MTE6XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpby1cXHUwMDNlbWFwcGluZztcXG4xNjEyOlxcdFxcbjE2MTM6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcXG4xNjE0OlxcdFxcbjE2MTU6XFx0XFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSB8fCBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcXG4xNjE2OlxcdFxcdFxcdHJldHVybjtcXG4xNjE3OlxcdFxcdGlmICghZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSlcXG4xNjE4OlxcdFxcdFxcdHJldHVybjtcXG4xNjE5OlxcdFxcdGlmIChtYXBwaW5nIFxcdTAwMjZcXHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKVxcbjE2MjA6XFx0XFx0XFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XFxuMTYyMTpcXHR9XFxuMTYyMjpcXHRcXG4xNjIzOlxcdC8qXFxuMTYyNDpcXHQgKiBJZiBmb2xpbyB3YXMgbWFya2VkIGFzIGRyb3BiZWhpbmQsIHRoZW4gcGFnZXMgc2hvdWxkIGJlIGRyb3BwZWQgd2hlbiB3cml0ZWJhY2tcXG4xNjI1OlxcdCAqIGNvbXBsZXRlcy4gRG8gdGhhdCBub3cuIElmIHdlIGZhaWwsIGl0J3MgbGlrZWx5IGJlY2F1c2Ugb2YgYSBiaWcgZm9saW8gLVxcbjE2MjY6XFx0ICoganVzdCByZXNldCBkcm9wYmVoaW5kIGZvciB0aGF0IGNhc2UgYW5kIGxhdHRlciBjb21wbGV0aW9ucyBzaG91bGQgaW52YWxpZGF0ZS5cXG4xNjI3OlxcdCAqL1xcbjE2Mjg6XFx0dm9pZCBmb2xpb19lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjE2Mjk6XFx0e1xcbjE2MzA6XFx0XFx0aWYgKCFmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxcbjE2MzE6XFx0XFx0XFx0cmV0dXJuO1xcbjE2MzI6XFx0XFxuMTYzMzpcXHRcXHQvKlxcbjE2MzQ6XFx0XFx0ICogSGl0dGluZyAhaW5fdGFzaygpIHNob3VsZCBub3QgaGFwcGVuIG9mZiBSV0ZfRE9OVENBQ0hFIHdyaXRlYmFjayxcXG4xNjM1OlxcdFxcdCAqIGJ1dCBjYW4gaGFwcGVuIGlmIG5vcm1hbCB3cml0ZWJhY2sganVzdCBoYXBwZW5zIHRvIGZpbmQgZGlydHkgZm9saW9zXFxuMTYzNjpcXHRcXHQgKiB0aGF0IHdlcmUgY3JlYXRlZCBhcyBwYXJ0IG9mIHVuY2FjaGVkIHdyaXRlYmFjaywgYW5kIHRoYXQgd3JpdGViYWNrXFxuMTYzNzpcXHRcXHQgKiB3b3VsZCBvdGhlcndpc2Ugbm90IG5lZWQgbm9uLUlSUSBoYW5kbGluZy4gSnVzdCBza2lwIHRoZVxcbjE2Mzg6XFx0XFx0ICogaW52YWxpZGF0aW9uIGluIHRoYXQgY2FzZS5cXG4xNjM5OlxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzo1ODoyNy41NzEyNzgwODlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODY2ODk5NjY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMsIHNwZWFraW5nIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIEZpbGUgTWFwcGluZyBhbmQgSW52YWxpZGF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgIGFuZCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBwbGF5IGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIGZpbGUgY2FjaGluZywgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBpbnRlcmFjdGlvbiBvZiBwYWdlcyB0aGF0IGFyZSBiYWNrZWQgYnkgZmlsZXMuIEkgbmVlZCB0byByZW1lbWJlciBleGFjdGx5IHdoYXQgZWFjaCBvZiB0aGVtIGlzIHJlc3BvbnNpYmxlIGZvciBkb2luZy4gQXJlIHRoZXkgcmVsYXRlZD8gRG8gdGhleSBjYWxsIGVhY2ggb3RoZXI/IERvIHRoZXkgaW50ZXJhY3Qgd2l0aCBhbnkgb2YgdGhlIHNhbWUgc3RydWN0dXJlcywgb3Igd29yayBvbiBzaW1pbGFyIGtpbmRzIG9mIGRhdGE/IFdoYXQga2luZCBvZiBjb250ZXh0IHRyaWdnZXJzIHRoZWlyIHVzZT8gSG93IGRvIHRoZXkgYWZmZWN0IHRoZSBmaWxlc3lzdGVtIG1ldGFkYXRhLCBhbmQgdGhlIHBhZ2UgY2FjaGU/IFVsdGltYXRlbHksIEknbSBhaW1pbmcgdG8gdmlzdWFsaXplIHRoZSBjb250cm9sIGZsb3csIHNvIEkga25vdyBob3cgdG8gb3B0aW1pemUgb3IgdHJvdWJsZXNob290IHRoZXNlIG9wZXJhdGlvbnMuIEkgd2FudCB0byBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGVzZSBwaWVjZXMgZml0IGluIHRoZSBwdXp6bGUgb2YgZ2V0dGluZyBkYXRhIHRvIGFuZCBmcm9tIHBlcnNpc3RlbnQgc3RvcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTg6MzYuMjQwMjc5MDk4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc3NjI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb191bm1hcF9pbnZhbGlkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmM9MTYwOT1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9maWxlbWFwLmMtMTYxOS1cXHRpZiAobWFwcGluZyBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS9maWxlbWFwLmM6MTYyMDpcXHRcXHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcXG5tbS9maWxlbWFwLmMtMTYyMS19XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTU5Nz1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxubW0vaW50ZXJuYWwuaDo1OTg6aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaW50ZXJuYWwuaC01OTktXFx0XFx0XFx0ICAgZ2ZwX3QgZ2ZwKTtcXG4tLVxcbm1tL3RydW5jYXRlLmM9NjA2PXN0YXRpYyBpbnQgZm9saW9fbGF1bmRlcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3RydW5jYXRlLmMtNjIxLSAqL1xcbm1tL3RydW5jYXRlLmM6NjIyOmludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3RydW5jYXRlLmMtNjIzLVxcdFxcdFxcdCAgIGdmcF90IGdmcClcXG4tLVxcbm1tL3RydW5jYXRlLmM9Njc2PWludCBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3RydW5jYXRlLmMtNzI1LVxcdFxcdFxcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcXG5tbS90cnVuY2F0ZS5jOjcyNjpcXHRcXHRcXHRyZXQyID0gZm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgR0ZQX0tFUk5FTCk7XFxubW0vdHJ1bmNhdGUuYy03MjctXFx0XFx0XFx0aWYgKHJldDIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzo1ODozNi4yOTEwNjE3MzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE5ODQwODkxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFRydW5jYXRpb24gSXNzdWUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGlzLiBJJ20gdGhpbmtpbmcgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgZWl0aGVyIGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBjb21taXQgaGlzdG9yeSB0byBzZWUgaWYgdGhlcmUgaGF2ZSBiZWVuIGFueSByZWNlbnQsIHJlbGF0ZWQgY2hhbmdlcywgb3IgcG9zc2libHkganVtcCByaWdodCBpbnRvIGBtbS90cnVuY2F0ZS5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCB0aGUgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHNwb3Qgd2hlcmUgc29tZSBvZiB0aGUgaW50cmljYWNpZXMgb2YgdGhlIGZpbGUgdHJ1bmNhdGlvbiBwcm9jZXNzIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBwYWdlIHVubWFwcGluZyBtaWdodCBiZSBoYW5kbGVkLiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZm9saW8gaW52YWxpZGF0aW9uIHdvcmtzIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0cnVuY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTIyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTg6NDguMjc1MTUzMzE2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS90cnVuY2F0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYyMDpcXHQgKiBzaXR0aW5nIGluIHRoZSBmb2xpb19hZGRfbHJ1KCkgY2FjaGVzLlxcbiA2MjE6XFx0ICovXFxuIDYyMjpcXHRpbnQgZm9saW9fdW5tYXBfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gNjIzOlxcdFxcdFxcdFxcdCAgIGdmcF90IGdmcClcXG4gNjI0OlxcdHtcXG4gNjI1OlxcdFxcdHZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7XFxuIDYyNjpcXHRcXHRpbnQgcmV0O1xcbiA2Mjc6XFx0XFxuIDYyODpcXHRcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xcbiA2Mjk6XFx0XFxuIDYzMDpcXHRcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcXG4gNjMxOlxcdFxcdFxcdHVubWFwX21hcHBpbmdfZm9saW8oZm9saW8pO1xcbiA2MzI6XFx0XFx0QlVHX09OKGZvbGlvX21hcHBlZChmb2xpbykpO1xcbiA2MzM6XFx0XFxuIDYzNDpcXHRcXHRyZXQgPSBmb2xpb19sYXVuZGVyKG1hcHBpbmcsIGZvbGlvKTtcXG4gNjM1OlxcdFxcdGlmIChyZXQpXFxuIDYzNjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA2Mzc6XFx0XFx0aWYgKGZvbGlvLVxcdTAwM2VtYXBwaW5nICE9IG1hcHBpbmcpXFxuIDYzODpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiA2Mzk6XFx0XFx0aWYgKCFmaWxlbWFwX3JlbGVhc2VfZm9saW8oZm9saW8sIGdmcCkpXFxuIDY0MDpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiA2NDE6XFx0XFxuIDY0MjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1hcHBpbmctXFx1MDAzZWhvc3QtXFx1MDAzZWlfbG9jayk7XFxuIDY0MzpcXHRcXHR4YV9sb2NrX2lycShcXHUwMDI2bWFwcGluZy1cXHUwMDNlaV9wYWdlcyk7XFxuIDY0NDpcXHRcXHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXFxuIDY0NTpcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4gNjQ2OlxcdFxcbiA2NDc6XFx0XFx0QlVHX09OKGZvbGlvX2hhc19wcml2YXRlKGZvbGlvKSk7XFxuIDY0ODpcXHRcXHRfX2ZpbGVtYXBfcmVtb3ZlX2ZvbGlvKGZvbGlvLCBOVUxMKTtcXG4gNjQ5OlxcdFxcdHhhX3VubG9ja19pcnEoXFx1MDAyNm1hcHBpbmctXFx1MDAzZWlfcGFnZXMpO1xcbiA2NTA6XFx0XFx0aWYgKG1hcHBpbmdfc2hyaW5rYWJsZShtYXBwaW5nKSlcXG4gNjUxOlxcdFxcdFxcdGlub2RlX2xydV9saXN0X2FkZChtYXBwaW5nLVxcdTAwM2Vob3N0KTtcXG4gNjUyOlxcdFxcdGZyZWVfZm9saW8gPSBtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZnJlZV9mb2xpbztcXG4gNjUzOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtYXBwaW5nLVxcdTAwM2Vob3N0LVxcdTAwM2VpX2xvY2spO1xcbiA2NTQ6XFx0XFxuIDY1NTpcXHRcXHRpZiAoZnJlZV9mb2xpbylcXG4gNjU2OlxcdFxcdFxcdGZyZWVfZm9saW8oZm9saW8pO1xcbiA2NTc6XFx0XFx0Zm9saW9fcHV0X3JlZnMoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuIDY1ODpcXHRcXHRyZXR1cm4gMTtcXG4gNjU5OlxcdGZhaWxlZDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTg6NDguMjc1MjU4MzA1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NzQ3NDg5NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0J3MgYWRkaW5nIGEgYCFmb2xpb19tYXBwZWQoZm9saW8pYCBjaGVjayBpbiBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpYCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpYC4gVGhpcyBpcyB0byBwcmV2ZW50IGludmFsaWRhdGluZyBtYXBwZWQgZm9saW9zIGR1cmluZyB0aGUgZHJvcGJlaGluZCBwYWdlIGNhY2hlIG9wZXJhdGlvbi4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBwb3RlbnRpYWwgS01TQU4gaXNzdWVzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgbm8sIGJ1dCBsZXQncyBiZSB0aG9yb3VnaC4gS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBhbmQgaW5mb3JtYXRpb24gbGVha3MsIHBhcnRpY3VsYXJseSB0byB1c2Vyc3BhY2UuIFdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZS4gVGhpcyBpc24ndCBhYm91dCBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEgdG8gdGhlIHVzZXIuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE/KiogTm8sIHRoZSBgZm9saW9fbWFwcGVkKGZvbGlvKWAgY2hlY2sganVzdCBsb29rcyBhdCB0aGUgZm9saW8ncyBpbnRlcm5hbCBzdGF0ZSBmbGFncyBhbmQgcmVmZXJlbmNlIGNvdW50cy4gSXQncyBub3QgZGVwZW5kZW50IG9uIHNvbWUgcHJldmlvdXNseSB1bmluaXRpYWxpemVkIGZpZWxkLlxuMy4gICoqQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBObywgdGhpcyBpcyBub3QgYSBuZXcgc3RydWN0dXJlIGFsbG9jYXRpb24sIGFuZCB0aGVyZSdzIG5vIGluaXRpYWxpemF0aW9uIG9mIGFueSBuZXcgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhdmUgdW5pbml0aWFsaXplZCBmaWVsZHMuXG40LiAgKipCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/KiogTm8uIFRoaXMgaXNuJ3QgYWJvdXQgYm91bmRzIGNoZWNraW5nIG9yIGxlbmd0aHMgdGhhdCBtaWdodCBsZWFkIHRvIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGEgcGFnZSBjYWNoZSBpbnZhbGlkYXRpb24gY2hlY2sgZHVyaW5nIGBkcm9wYmVoaW5kYCBhbmQgaXQgYXBwZWFycyBpdCBpcyBwdXJlbHkgYWJvdXQgcGFnZSBjYWNoZSBtYW5hZ2VtZW50LCBub3QgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIEJ1Z3MgaW4gdGhpcyBhcmVhIHdvdWxkIGJlIGNhdWdodCBieSB0aGUgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLCB0aGUgcGFnZSBjYWNoZSBsb2dpYywgS0FTQU4sIGFuZCBsb2NrZGVwLiBQcm9ibGVtcyBoZXJlIHdvdWxkIHNob3cgdXAgYXMgcmVmY291bnQgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgYXNzZXJ0aW9ucyBmYWlsdXJlcyAobGlrZSBgQlVHX09OYHMpIHRoYXQgYXJlIHN0YW5kYXJkIGtlcm5lbC1sZXZlbCBkZWJ1Z2dpbmcuXG5cblNvLCB0aGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQuIFRoZSBwYXRjaCBpdHNlbGYganVzdCBhZGRzIHRoZSBjaGVjayBhbmQgbm90aGluZyBtb3JlLCBpdCBkb2Vzbid0IHRvdWNoIGFueXRoaW5nIHRoYXQgd291bGQgYmUgcmVsZXZhbnQgdG8gS01TQU4uIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgdGhlIHVzdWFsIGtlcm5lbCBkZWJ1Z2dpbmcuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzM5LCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU5OjA2LjAyMjc1MDQwNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKWAgdG8gYWRkIGEgYCFmb2xpb19tYXBwZWQoZm9saW8pYCBjaGVjayBiZWZvcmUgaW52b2tpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKWAsIHByZXZlbnRpbmcgZHJvcGJlaGluZCBpbnZhbGlkYXRpb24gb2YgZm9saW9zIHRoYXQgYXJlIGN1cnJlbnRseSBtYXBwZWQgaW50byB1c2VyIHBhZ2UgdGFibGVzLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjay9oZWFwIGJ1ZmZlciBjb3B5aW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gSXQgb25seSBhZGRzIGEgc3RhdGUgY2hlY2sgb24gZXhpc3RpbmcgbG9ja2VkIGZvbGlvcyB3aXRoaW4gdGhlIHBhZ2UgY2FjaGUuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byBmb2xpbyBsaWZlY3ljbGUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgbWVtb3J5IHNhZmV0eSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyAoZS5nLiBgVk1fQlVHX09OX0ZPTElPYCkgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpYCB0byBhZGQgYSBgIWZvbGlvX21hcHBlZChmb2xpbylgIGNoZWNrIGJlZm9yZSBpbnZva2luZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpYCwgcHJldmVudGluZyBkcm9wYmVoaW5kIGludmFsaWRhdGlvbiBvZiBmb2xpb3MgdGhhdCBhcmUgY3VycmVudGx5IG1hcHBlZCBpbnRvIHVzZXIgcGFnZSB0YWJsZXMuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIHN0YWNrL2hlYXAgYnVmZmVyIGNvcHlpbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBJdCBvbmx5IGFkZHMgYSBzdGF0ZSBjaGVjayBvbiBleGlzdGluZyBsb2NrZWQgZm9saW9zIHdpdGhpbiB0aGUgcGFnZSBjYWNoZS4gQW55IGlzc3VlcyByZWxhdGVkIHRvIGZvbGlvIGxpZmVjeWNsZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBtZW1vcnkgc2FmZXR5IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zIChlLmcuIGBWTV9CVUdfT05fRk9MSU9gKSBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowm9rm4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 17:39:18 +0000 UTC FinishedAt: 2026-08-29 17:59:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "series_id": "6f952a7f-fd35-4c3e-87be-5e997edb619a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "folio_end_dropbehind", "folio_unmap_invalidate" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fZW5kX2Ryb3BiZWhpbmQmIzM0OywKICAgICYjMzQ7Zm9saW9fdW5tYXBfaW52YWxpZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKClgIHRvIGFkZCBhIGAhZm9saW9fbWFwcGVkKGZvbGlvKWAgY2hlY2sgYmVmb3JlIGludm9raW5nIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlKClgLCBwcmV2ZW50aW5nIGRyb3BiZWhpbmQgaW52YWxpZGF0aW9uIG9mIGZvbGlvcyB0aGF0IGFyZSBjdXJyZW50bHkgbWFwcGVkIGludG8gdXNlciBwYWdlIHRhYmxlcy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIHN0YWNrL2hlYXAgYnVmZmVyIGNvcHlpbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBJdCBvbmx5IGFkZHMgYSBzdGF0ZSBjaGVjayBvbiBleGlzdGluZyBsb2NrZWQgZm9saW9zIHdpdGhpbiB0aGUgcGFnZSBjYWNoZS4gQW55IGlzc3VlcyByZWxhdGVkIHRvIGZvbGlvIGxpZmVjeWNsZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBtZW1vcnkgc2FmZXR5IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zIChlLmcuIGBWTV9CVUdfT05fRk9MSU9gKSBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHBhZ2UgY2FjaGUgZHJvcGJlaGluZCBpbnZhbGlkYXRpb24gbG9naWMgaW4gZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpIGJ5IGFkZGluZyBhIGNoZWNrICghZm9saW9fbWFwcGVkKGZvbGlvKSkgYmVmb3JlIGNhbGxpbmcgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpLiBUaGlzIGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdW5jYWNoZWQgLyBkcm9wYmVoaW5kIEkvTyBwcm9jZXNzaW5nIChlLmcuIFJXRl9ET05UQ0FDSEUpIGFuZCB3cml0ZWJhY2sgY29tcGxldGlvbiBpbiByZWFjaGFibGUsIHN0YW5kYXJkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFmM2ZhYWJjODM5NzZmMmI4MjExZWZhZTA4YjRlNmVhNzc4NTQ5MGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxNzo1NTo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDZhZmVjNjM2ODgxZmIuLjAwZmQ4OWNmNmY1NTAgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZpbGVtYXAuY1xuQEAgLTE2MTYsNyAmIzQzOzE2MTYsNyBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdHJldHVybjtcbiBcdGlmICghZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuLVx0aWYgKG1hcHBpbmcpXG4mIzQzO1x0aWYgKG1hcHBpbmcgXHUwMDI2XHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKVxuIFx0XHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19lbmRfZHJvcGJlaGluZCYjMzQ7LAogICAgJiMzNDtmb2xpb191bm1hcF9pbnZhbGlkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgcGFnZSBjYWNoZSBkcm9wYmVoaW5kIGludmFsaWRhdGlvbiBsb2dpYyBpbiBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKCkgYnkgYWRkaW5nIGEgY2hlY2sgKCFmb2xpb19tYXBwZWQoZm9saW8pKSBiZWZvcmUgY2FsbGluZyBmb2xpb191bm1hcF9pbnZhbGlkYXRlKCkuIFRoaXMgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB1bmNhY2hlZCAvIGRyb3BiZWhpbmQgSS9PIHByb2Nlc3NpbmcgKGUuZy4gUldGX0RPTlRDQUNIRSkgYW5kIHdyaXRlYmFjayBjb21wbGV0aW9uIGluIHJlYWNoYWJsZSwgc3RhbmRhcmQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWYzZmFhYmM4Mzk3NmYyYjgyMTFlZmFlMDhiNGU2ZWE3Nzg1NDkwZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDE3OjU1OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDZhZmVjNjM2ODgxZmIuLjAwZmQ4OWNmNmY1NTAgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTE2MTYsNyAmIzQzOzE2MTYsNyBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCXJldHVybjsKIAlpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpCiAJCXJldHVybjsKLQlpZiAobWFwcGluZykKJiM0MzsJaWYgKG1hcHBpbmcgJmFtcDsmYW1wOyAhZm9saW9fbWFwcGVkKGZvbGlvKSkKIAkJZm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBhbmFseXNpcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0IHRocm91Z2g6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBEcm9wYmVoaW5kIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIEkmIzM5O3ZlIGdvdCBhIGRpZmYgdG8gbG9vayBhdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUga2VybmVsIGNvZGUgc3Vycm91bmRpbmcgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9maWxlbWFwLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIG1pc2NoaWVmLCBkZXBlbmRpbmcgb24gdGhlIGNoYW5nZSEpIHJlbGF0ZWQgdG8gZHJvcC1iZWhpbmQgcGFnZSBjYWNoaW5nIGxpa2VseSByZXNpZGVzLgoKSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UgLSB3aGF0IHRyaWdnZXJlZCB0aGlzLCBhbmQgd2hhdCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaXMuIFRvIGRvIHRoYXQsIEkmIzM5O2xsIGxldmVyYWdlIG15IHRvb2xzLiBJIGNhbiB1c2UgYHJlYWQtZmlsZWAgdG8gbmF2aWdhdGUgdGhlIGNvZGUgZGlyZWN0bHksIG9yIHBlcmhhcHMgYGdyZXBwZXJgIHRvIHNlYXJjaCBtb3JlIGJyb2FkbHkgZm9yIHJlbGV2YW50IGNhbGwgc2l0ZXMgYW5kIHVzYWdlcyBvZiB0aGUgZnVuY3Rpb24sIGFuZCByZWxhdGVkIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIGFueSBpbXBsZW1lbnRhdGlvbiBudWFuY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGlzIGtleSBrZXJuZWwgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9maWxlbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MDA6XHRcdFx0cmV0ID0gZm9saW9fd2FpdF9iaXRfa2lsbGFibGUoZm9saW8sIFBHX3ByaXZhdGVfMik7XG4xNjAxOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNjAyOlx0XHRcdFx0YnJlYWs7XG4xNjAzOlx0XHR9XG4xNjA0Olx0XG4xNjA1Olx0XHRyZXR1cm4gcmV0O1xuMTYwNjpcdH1cbjE2MDc6XHRFWFBPUlRfU1lNQk9MKGZvbGlvX3dhaXRfcHJpdmF0ZV8yX2tpbGxhYmxlKTtcbjE2MDg6XHRcbjE2MDk6XHRzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4xNjEwOlx0e1xuMTYxMTpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpby1cdTAwM2VtYXBwaW5nO1xuMTYxMjpcdFxuMTYxMzpcdFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbjE2MTQ6XHRcbjE2MTU6XHRcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHwgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXG4xNjE2Olx0XHRcdHJldHVybjtcbjE2MTc6XHRcdGlmICghZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSlcbjE2MTg6XHRcdFx0cmV0dXJuO1xuMTYxOTpcdFx0aWYgKG1hcHBpbmcgXHUwMDI2XHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKVxuMTYyMDpcdFx0XHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcbjE2MjE6XHR9XG4xNjIyOlx0XG4xNjIzOlx0LypcbjE2MjQ6XHQgKiBJZiBmb2xpbyB3YXMgbWFya2VkIGFzIGRyb3BiZWhpbmQsIHRoZW4gcGFnZXMgc2hvdWxkIGJlIGRyb3BwZWQgd2hlbiB3cml0ZWJhY2tcbjE2MjU6XHQgKiBjb21wbGV0ZXMuIERvIHRoYXQgbm93LiBJZiB3ZSBmYWlsLCBpdCYjMzk7cyBsaWtlbHkgYmVjYXVzZSBvZiBhIGJpZyBmb2xpbyAtXG4xNjI2Olx0ICoganVzdCByZXNldCBkcm9wYmVoaW5kIGZvciB0aGF0IGNhc2UgYW5kIGxhdHRlciBjb21wbGV0aW9ucyBzaG91bGQgaW52YWxpZGF0ZS5cbjE2Mjc6XHQgKi9cbjE2Mjg6XHR2b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4xNjI5Olx0e1xuMTYzMDpcdFx0aWYgKCFmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuMTYzMTpcdFx0XHRyZXR1cm47XG4xNjMyOlx0XG4xNjMzOlx0XHQvKlxuMTYzNDpcdFx0ICogSGl0dGluZyAhaW5fdGFzaygpIHNob3VsZCBub3QgaGFwcGVuIG9mZiBSV0ZfRE9OVENBQ0hFIHdyaXRlYmFjayxcbjE2MzU6XHRcdCAqIGJ1dCBjYW4gaGFwcGVuIGlmIG5vcm1hbCB3cml0ZWJhY2sganVzdCBoYXBwZW5zIHRvIGZpbmQgZGlydHkgZm9saW9zXG4xNjM2Olx0XHQgKiB0aGF0IHdlcmUgY3JlYXRlZCBhcyBwYXJ0IG9mIHVuY2FjaGVkIHdyaXRlYmFjaywgYW5kIHRoYXQgd3JpdGViYWNrXG4xNjM3Olx0XHQgKiB3b3VsZCBvdGhlcndpc2Ugbm90IG5lZWQgbm9uLUlSUSBoYW5kbGluZy4gSnVzdCBza2lwIHRoZVxuMTYzODpcdFx0ICogaW52YWxpZGF0aW9uIGluIHRoYXQgY2FzZS5cbjE2Mzk6XHRcdCAqL1xuMTY0MDpcdFx0aWYgKGluX3Rhc2soKSBcdTAwMjZcdTAwMjYgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbjE2NDE6XHRcdFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7XG4xNjQyOlx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4xNjQzOlx0XHR9XG4xNjQ0Olx0fVxuMTY0NTpcdEVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF9kcm9wYmVoaW5kKTtcbjE2NDY6XHRcbjE2NDc6XHQvKipcbjE2NDg6XHQgKiBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQgLSBFbmQgd3JpdGViYWNrIGFnYWluc3QgYSBmb2xpby5cbjE2NDk6XHQgKiBAZm9saW86IFRoZSBmb2xpby5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc2CgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBEcm9wYmVoaW5kIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAsIGBmb2xpb19lbmRfZHJvcGJlaGluZGAsIGFuZCB0aGF0IGBSV0ZfRE9OVENBQ0hFYCBmbGFnLiBNeSBnb2FsIGhlcmUgaXMgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IGRyb3BiZWhpbmQgd29ya3MgYXQgdGhlIGZpbGUgc3lzdGVtIGFuZCBmb2xpbyBsZXZlbHMsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gY2FjaGUgbWFuYWdlbWVudC4gSSYjMzk7bSBnb2luZyB0byBmaXJlIHVwIHRoZSBncmVwcGVyIGFuZCBydW4gaXQgYWNyb3NzIHRoZSBrZXJuZWwgc291cmNlIHRvIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZSBgZHJvcGJlaGluZGAgdGVybWlub2xvZ3kgYXJlIGFjdHVhbGx5IHVzZWQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBvdmVyYWxsIHVzZSB3aXRoaW4gdGhlIHJlbGV2YW50IGZpbGUgc3lzdGVtIGNvZGUgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiByZWFkIGFuZCB3cml0ZSBjYWNoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Ryb3BiZWhpbmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYnVmZmVyLmM9MTA4NT1zdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuLS1cbmZzL2J1ZmZlci5jLTExMDktXG5mcy9idWZmZXIuYzoxMTEwOlx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC1cdTAwM2ViX2ZvbGlvKSBcdTAwMjZcdTAwMjYgb3BfaXNfd3JpdGUob3BmKSlcbmZzL2J1ZmZlci5jLTExMTEtXHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcbi0tXG5mcy9mcy13cml0ZWJhY2suYz00MDU9c3RhdGljIGJvb2wgaW5vZGVfZG9fc3dpdGNoX3dicyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jLTQzNS1cdFx0XHR3Yl9zdGF0X21vZChuZXdfd2IsIFdCX1JFQ0xBSU1BQkxFLCBucik7XG5mcy9mcy13cml0ZWJhY2suYzo0MzY6XHRcdFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpIHtcbmZzL2ZzLXdyaXRlYmFjay5jLTQzNy1cdFx0XHRcdHdiX3N0YXRfbW9kKG9sZF93YiwgV0JfRE9OVENBQ0hFX0RJUlRZLCAtbnIpO1xuLS1cbmZzL2lvbWFwL2lvZW5kLmM9MjEzPXNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuZnMvaW9tYXAvaW9lbmQuYy0yNTctXG5mcy9pb21hcC9pb2VuZC5jOjI1ODpcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuZnMvaW9tYXAvaW9lbmQuYy0yNTktXHRcdGJpb19zZXRfZmxhZyhcdTAwMjZpb2VuZC1cdTAwM2Vpb19iaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcbi0tXG5mcy9uZnMvZmlsZS5jPTM2MD1zdGF0aWMgYm9vbCBuZnNfd2FudF9yZWFkX21vZGlmeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9uZnMvZmlsZS5jLTM3Mi1cdFx0cmV0dXJuIHRydWU7XG5mcy9uZnMvZmlsZS5jOjM3MzpcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuZnMvbmZzL2ZpbGUuYy0zNzQtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5mcy9uZnMvZmlsZS5jPTM4OT1zdGF0aWMgaW50IG5mc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvbmZzL2ZpbGUuYy00MTktXHRcdG9uY2VfdGhydSA9IDE7XG5mcy9uZnMvZmlsZS5jOjQyMDpcdFx0Zm9saW9fY2xlYXJfZHJvcGJlaGluZChmb2xpbyk7XG5mcy9uZnMvZmlsZS5jLTQyMS1cdFx0cmV0ID0gbmZzX3JlYWRfZm9saW8oZmlsZSwgZm9saW8pO1xuLS1cbmZzL25mcy93cml0ZS5jPTI5NT1zdGF0aWMgdm9pZCBuZnNfZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL25mcy93cml0ZS5jLTI5OC1cbmZzL25mcy93cml0ZS5jOjI5OTpcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG5mcy9uZnMvd3JpdGUuYy0zMDAtXHRpZiAoYXRvbWljX2xvbmdfZGVjX3JldHVybihcdTAwMjZuZnNzLVx1MDAzZXdyaXRlYmFjaykgXHUwMDNjXG4tLVxuZnMvbmZzL3dyaXRlLmM9NzM1PXN0YXRpYyB2b2lkIG5mc19pbm9kZV9yZW1vdmVfcmVxdWVzdChzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSlcbi0tXG5mcy9uZnMvd3JpdGUuYy03NTEtXG5mcy9uZnMvd3JpdGUuYzo3NTI6XHRcdFx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xuZnMvbmZzL3dyaXRlLmMtNzUzLVx0XHR9XG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmM9Mzk9REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKG5mc2RfZHNyX2ZvcHMsIG5mc2RfZHNyX2dldCwgbmZzZF9kc3Jfc2V0LCBcJiMzNDslbGx1XFxuXCYjMzQ7KTtcbi0tXG5mcy9uZnNkL2RlYnVnZnMuYy00NS0gKiAgICUwOiBORlMgUkVBRCB3aWxsIHVzZSBidWZmZXJlZCBJT1xuZnMvbmZzZC9kZWJ1Z2ZzLmM6NDY6ICogICAlMTogTkZTIFJFQUQgd2lsbCB1c2UgZG9udGNhY2hlIChidWZmZXJlZCBJTyB3LyBkcm9wYmVoaW5kKVxuZnMvbmZzZC9kZWJ1Z2ZzLmMtNDctICogICAlMjogTkZTIFJFQUQgd2lsbCB1c2UgZGlyZWN0IElPXG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmM9ODQ9REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKG5mc2RfaW9fY2FjaGVfcmVhZF9mb3BzLCBuZnNkX2lvX2NhY2hlX3JlYWRfZ2V0LFxuLS1cbmZzL25mc2QvZGVidWdmcy5jLTkxLSAqICAgJTA6IE5GUyBXUklURSB3aWxsIHVzZSBidWZmZXJlZCBJT1xuZnMvbmZzZC9kZWJ1Z2ZzLmM6OTI6ICogICAlMTogTkZTIFdSSVRFIHdpbGwgdXNlIGRvbnRjYWNoZSAoYnVmZmVyZWQgSU8gdy8gZHJvcGJlaGluZClcbmZzL25mc2QvZGVidWdmcy5jLTkzLSAqXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9OTM9ZW51bSBwYWdlZmxhZ3Mge1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTExMi1cdFBHX3VuZXZpY3RhYmxlLFx0XHQvKiBQYWdlIGlzIFwmIzM0O3VuZXZpY3RhYmxlXCYjMzQ7ICAqL1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTEzOlx0UEdfZHJvcGJlaGluZCxcdFx0LyogZHJvcCBwYWdlcyBvbiBJTyBjb21wbGV0aW9uICovXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMTQtI2lmZGVmIENPTkZJR19NTVVcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD01OTg9Rk9MSU9fRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC02MDAtXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2MDE6Rk9MSU9fRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2MDI6XHRGT0xJT19URVNUX0NMRUFSX0ZMQUcoZHJvcGJlaGluZCwgRk9MSU9fSEVBRF9QQUdFKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NjAzOlx0X19GT0xJT19TRVRfRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC02MDQtXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTMxMD12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxMzExOnZvaWQgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTMxMjp2b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTMxMy12b2lkIGZvbGlvX3dhaXRfc3RhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTE0MDg9c3RydWN0IHJlYWRhaGVhZF9jb250cm9sIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDE1LVx0dW5zaWduZWQgaW50IF9iYXRjaF9jb3VudDtcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjE0MTY6XHRib29sIGRyb3BiZWhpbmQ7XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDE3LVx0Ym9vbCBfd29ya2luZ3NldDtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmg9Njk9VFJBQ0VfREVGSU5FX0VOVU0oX19fR0ZQX0xBU1RfQklUKTtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmgtMTUzLVx0REVGX1BBR0VGTEFHX05BTUUodW5ldmljdGFibGUpLFx0XHRcdFx0XHRcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oOjE1NDpcdERFRl9QQUdFRkxBR19OQU1FKGRyb3BiZWhpbmQpXHRcdFx0XHRcdFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmgtMTU1LUlGX0hBVkVfUEdfTUxPQ0sobWxvY2tlZClcdFx0XHRcdFx0XHRcXFxuLS1cbm1tL2ZpbGVtYXAuYz0xNjA3PUVYUE9SVF9TWU1CT0woZm9saW9fd2FpdF9wcml2YXRlXzJfa2lsbGFibGUpO1xubW0vZmlsZW1hcC5jLTE2MDgtXG5tbS9maWxlbWFwLmM6MTYwOTpzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9maWxlbWFwLmMtMTYxMC17XG4tLVxubW0vZmlsZW1hcC5jLTE2MTYtXHRcdHJldHVybjtcbm1tL2ZpbGVtYXAuYzoxNjE3Olx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKVxubW0vZmlsZW1hcC5jLTE2MTgtXHRcdHJldHVybjtcbi0tXG5tbS9maWxlbWFwLmMtMTYyMy0vKlxubW0vZmlsZW1hcC5jOjE2MjQ6ICogSWYgZm9saW8gd2FzIG1hcmtlZCBhcyBkcm9wYmVoaW5kLCB0aGVuIHBhZ2VzIHNob3VsZCBiZSBkcm9wcGVkIHdoZW4gd3JpdGViYWNrXG5tbS9maWxlbWFwLmMtMTYyNS0gKiBjb21wbGV0ZXMuIERvIHRoYXQgbm93LiBJZiB3ZSBmYWlsLCBpdCYjMzk7cyBsaWtlbHkgYmVjYXVzZSBvZiBhIGJpZyBmb2xpbyAtXG5tbS9maWxlbWFwLmM6MTYyNjogKiBqdXN0IHJlc2V0IGRyb3BiZWhpbmQgZm9yIHRoYXQgY2FzZSBhbmQgbGF0dGVyIGNvbXBsZXRpb25zIHNob3VsZCBpbnZhbGlkYXRlLlxubW0vZmlsZW1hcC5jLTE2MjctICovXG5tbS9maWxlbWFwLmM6MTYyODp2b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9maWxlbWFwLmMtMTYyOS17XG5tbS9maWxlbWFwLmM6MTYzMDpcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbm1tL2ZpbGVtYXAuYy0xNjMxLVx0XHRyZXR1cm47XG4tLVxubW0vZmlsZW1hcC5jLTE2NDAtXHRpZiAoaW5fdGFzaygpIFx1MDAyNlx1MDAyNiBmb2xpb190cnlsb2NrKGZvbGlvKSkge1xubW0vZmlsZW1hcC5jOjE2NDE6XHRcdGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xubW0vZmlsZW1hcC5jLTE2NDItXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tLVxubW0vZmlsZW1hcC5jLTE2NDQtfVxubW0vZmlsZW1hcC5jOjE2NDU6RVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX2Ryb3BiZWhpbmQpO1xubW0vZmlsZW1hcC5jLTE2NDYtXG5tbS9maWxlbWFwLmMtMTY0Ny0vKipcbm1tL2ZpbGVtYXAuYzoxNjQ4OiAqIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCAtIEVuZCB3cml0ZWJhY2sgYWdhaW5zdCBhIGZvbGlvLlxubW0vZmlsZW1hcC5jLTE2NDktICogQGZvbGlvOiBUaGUgZm9saW8uXG4tLVxubW0vZmlsZW1hcC5jLTE2NTEtICogVGhlIGZvbGlvIG11c3QgYWN0dWFsbHkgYmUgdW5kZXIgd3JpdGViYWNrLlxubW0vZmlsZW1hcC5jOjE2NTI6ICogVGhpcyBjYWxsIGlzIGludGVuZGVkIGZvciBmaWxlc3lzdGVtcyB0aGF0IG5lZWQgdG8gZGVmZXIgZHJvcGJlaGluZC5cbm1tL2ZpbGVtYXAuYy0xNjUzLSAqXG4tLVxubW0vZmlsZW1hcC5jLTE2NTUtICovXG5tbS9maWxlbWFwLmM6MTY1Njp2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vZmlsZW1hcC5jLTE2NTcte1xuLS1cbm1tL2ZpbGVtYXAuYy0xNjc2LX1cbm1tL2ZpbGVtYXAuYzoxNjc3OkVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCk7XG5tbS9maWxlbWFwLmMtMTY3OC1cbi0tXG5tbS9maWxlbWFwLmM9MTY4Nz12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMTY5Ny1cdGZvbGlvX2dldChmb2xpbyk7XG5tbS9maWxlbWFwLmM6MTY5ODpcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG5tbS9maWxlbWFwLmM6MTY5OTpcdGZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0xNzAwLVx0Zm9saW9fcHV0KGZvbGlvKTtcbi0tXG5tbS9maWxlbWFwLmM9MTk0Nz1zdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9maWxlbWFwLmMtMjAyNS1cdFx0XHRpZiAoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfRE9OVENBQ0hFKVxubW0vZmlsZW1hcC5jOjIwMjY6XHRcdFx0XHRfX2ZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0yMDI3LVxuLS1cbm1tL2ZpbGVtYXAuYy0yMDYwLVx0Lyogbm90IGFuIHVuY2FjaGVkIGxvb2t1cCwgY2xlYXIgdW5jYWNoZWQgaWYgc2V0ICovXG5tbS9maWxlbWFwLmM6MjA2MTpcdGlmICghKGZncF9mbGFncyBcdTAwMjYgRkdQX0RPTlRDQUNIRSkgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpIHtcbm1tL2ZpbGVtYXAuYy0yMDYyLVx0XHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG4tLVxubW0vZmlsZW1hcC5jPTI2MTk9c3RhdGljIGludCBmaWxlbWFwX2NyZWF0ZV9mb2xpbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxuLS1cbm1tL2ZpbGVtYXAuYy0yNjMzLVx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRE9OVENBQ0hFKVxubW0vZmlsZW1hcC5jOjI2MzQ6XHRcdF9fZm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xubW0vZmlsZW1hcC5jLTI2MzUtXG4tLVxubW0vZmlsZW1hcC5jPTI2NzI9c3RhdGljIGludCBmaWxlbWFwX3JlYWRhaGVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbm1tL2ZpbGVtYXAuYy0yNjgwLVx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRE9OVENBQ0hFKVxubW0vZmlsZW1hcC5jOjI2ODE6XHRcdHJhY3RsLmRyb3BiZWhpbmQgPSAxO1xubW0vZmlsZW1hcC5jLTI2ODItXHRwYWdlX2NhY2hlX2FzeW5jX3JhKFx1MDAyNnJhY3RsLCBmb2xpbywgbGFzdF9pbmRleCAtIGZvbGlvLVx1MDAzZWluZGV4KTtcbi0tXG5tbS9maWxlbWFwLmM9MjY4Nj1zdGF0aWMgaW50IGZpbGVtYXBfZ2V0X3BhZ2VzKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGNvdW50LFxuLS1cbm1tL2ZpbGVtYXAuYy0yNzEyLVx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ET05UQ0FDSEUpXG5tbS9maWxlbWFwLmM6MjcxMzpcdFx0XHRyYWN0bC5kcm9wYmVoaW5kID0gMTtcbm1tL2ZpbGVtYXAuYy0yNzE0LVx0XHRwYWdlX2NhY2hlX3N5bmNfcmEoXHUwMDI2cmFjdGwsIGxhc3RfaW5kZXggLSBpbmRleCk7XG4tLVxubW0vZmlsZW1hcC5jPTI3NTU9c3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMjc2MS1cbm1tL2ZpbGVtYXAuYzoyNzYyOnN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vZmlsZW1hcC5jLTI3NjMte1xubW0vZmlsZW1hcC5jOjI3NjQ6XHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG5tbS9maWxlbWFwLmMtMjc2NS1cdFx0cmV0dXJuO1xuLS1cbm1tL2ZpbGVtYXAuYy0yNzY4LVx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG5tbS9maWxlbWFwLmM6Mjc2OTpcdFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7XG5tbS9maWxlbWFwLmMtMjc3MC1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi0tXG5tbS9maWxlbWFwLmM9Mjc4Nz1zc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5tbS9maWxlbWFwLmMtMjg4OS1cbm1tL2ZpbGVtYXAuYzoyODkwOlx0XHRcdGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChmb2xpbyk7XG5tbS9maWxlbWFwLmMtMjg5MS1cdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLS1cbm1tL2ZvbGlvLmM9NDIyPXZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vZm9saW8uYy00MjMte1xubW0vZm9saW8uYzo0MjQ6XHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbm1tL2ZvbGlvLmMtNDI1LVx0XHRyZXR1cm47XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zNjg1PXN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM3NDQtXHRcdFx0XHQgKDFMIFx1MDAzY1x1MDAzYyBQR19kaXJ0eSkgfFxubW0vaHVnZV9tZW1vcnkuYzozNzQ1Olx0XHRcdFx0ICgxTCBcdTAwM2NcdTAwM2MgUEdfZHJvcGJlaGluZCkgfFxubW0vaHVnZV9tZW1vcnkuYy0zNzQ2LVx0XHRcdFx0IExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX01BU0spKTtcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jPTI2MDM9c3RhdGljIHZvaWQgZm9saW9fYWNjb3VudF9kaXJ0aWVkKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0yNjE3LVx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfRElSVFksIG5yKTtcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjYxODpcdFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2MTktXHRcdFx0d2Jfc3RhdF9tb2Qod2IsIFdCX0RPTlRDQUNIRV9ESVJUWSwgbnIpO1xuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9MjYzNj12b2lkIGZvbGlvX2FjY291bnRfY2xlYW5lZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0yNjQwLVx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX0RJUlRZLCAtbnIpO1xubW0vcGFnZS13cml0ZWJhY2suYzoyNjQxOlx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2NDItXHRcdHdiX3N0YXRfbW9kKHdiLCBXQl9ET05UQ0FDSEVfRElSVFksIC1ucik7XG4tLVxubW0vcGFnZS13cml0ZWJhY2suYz0yODY2PWJvb2wgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0yOTE2LVx0XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9ESVJUWSwgLW5yKTtcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjkxNzpcdFx0XHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjkxOC1cdFx0XHRcdHdiX3N0YXRfbW9kKHdiLCBXQl9ET05UQ0FDSEVfRElSVFksIC1ucik7XG4tLVxubW0vcmVhZGFoZWFkLmM9MTk1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnJhY3RsX2FsbG9jX2ZvbGlvKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4tLVxubW0vcmVhZGFoZWFkLmMtMjAwLVx0Zm9saW8gPSBmaWxlbWFwX2FsbG9jX2ZvbGlvKGdmcF9tYXNrLCBvcmRlciwgTlVMTCk7XG5tbS9yZWFkYWhlYWQuYzoyMDE6XHRpZiAoZm9saW8gXHUwMDI2XHUwMDI2IHJhY3RsLVx1MDAzZWRyb3BiZWhpbmQpXG5tbS9yZWFkYWhlYWQuYzoyMDI6XHRcdF9fZm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xubW0vcmVhZGFoZWFkLmMtMjAzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb21taXQ6IEEgRm9saW8mIzM5O3MgSm91cm5leSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29tbWl0LiBUaGUgY29yZSBmdW5jdGlvbiBpcyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQuIFRoZSBkaWZmIHNob3dzIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBgaWZgIHN0YXRlbWVudC4gUHJldmlvdXNseSwgaXQgbG9va2VkIGxpa2UgdGhpczogYGlmIChtYXBwaW5nKWAuIE5vdywgaXQmIzM5O3MgYGlmIChtYXBwaW5nICZhbXA7JmFtcDsgIWZvbGlvX21hcHBlZChmb2xpbykpYC4KClNvLCB0aGUgb3JpZ2luYWwgY29kZSB3b3VsZCB1bm1hcCBhbmQgaW52YWxpZGF0ZSBhIGZvbGlvIGlmIHRoZSBgbWFwcGluZ2Agd2FzbiYjMzk7dCBOVUxMLiBUaGUgbmV3IGNoZWNrIGFkZHMgYW4gZXh0cmEgcmVxdWlyZW1lbnQ6IHRoZSBmb2xpbyAqbXVzdCBub3QqIGJlIG1hcHBlZC4gSW50ZXJlc3RpbmcuIFRoaXMgbGlrZWx5IGFpbXMgdG8gcHJldmVudCBpbnZhbGlkYXRpbmcgcGFnZXMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlbHkgaW4gdXNlLCBwb3RlbnRpYWxseSBpbXByb3ZpbmcgcGVyZm9ybWFuY2Ugb3IgcHJldmVudGluZyBkYXRhIGNvcnJ1cHRpb24uIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayB3aGF0IGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBkb2VzLCBhcyBpdCBzZWVtcyBsaWtlIGl0cyBiZWhhdmlvciBub3cgaGluZ2VzIG9uIHRoaXMgYGZvbGlvX21hcHBlZGAgY2hlY2suIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IHRoaXMgaW1wYWN0cyBwYWdlIHJlY2xhaW0gaW4gZGlmZmVyZW50IHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb191bm1hcF9pbnZhbGlkYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ZpbGVtYXAuYz0xNjA5PXN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMTYxOS1cdGlmIChtYXBwaW5nIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL2ZpbGVtYXAuYzoxNjIwOlx0XHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcbm1tL2ZpbGVtYXAuYy0xNjIxLX1cbi0tXG5tbS9pbnRlcm5hbC5oPTU5Nz1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5tbS9pbnRlcm5hbC5oOjU5ODppbnQgZm9saW9fdW5tYXBfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2ludGVybmFsLmgtNTk5LVx0XHRcdCAgIGdmcF90IGdmcCk7XG4tLVxubW0vdHJ1bmNhdGUuYz02MDY9c3RhdGljIGludCBmb2xpb19sYXVuZGVyKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3RydW5jYXRlLmMtNjIxLSAqL1xubW0vdHJ1bmNhdGUuYzo2MjI6aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS90cnVuY2F0ZS5jLTYyMy1cdFx0XHQgICBnZnBfdCBnZnApXG4tLVxubW0vdHJ1bmNhdGUuYz02NzY9aW50IGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3RydW5jYXRlLmMtNzI1LVx0XHRcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcbm1tL3RydW5jYXRlLmM6NzI2Olx0XHRcdHJldDIgPSBmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCBHRlBfS0VSTkVMKTtcbm1tL3RydW5jYXRlLmMtNzI3LVx0XHRcdGlmIChyZXQyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoZSBmb2xpbyB1bm1hcCBhbmQgaW52YWxpZGF0aW9uIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgd2l0aGluIGBtbS90cnVuY2F0ZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB0aGUga2VybmVsIGFjdHVhbGx5IGRlYWxzIHdpdGggdGhlIG5pdHR5LWdyaXR0eSBvZiByZW1vdmluZyBwYWdlIG1hcHBpbmdzIGFuZCBwb3RlbnRpYWxseSBpbnZhbGlkYXRpbmcgZGF0YSBkdXJpbmcgYSB0cnVuY2F0aW9uIG9wZXJhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgdGVhcmluZyBkb3duIHBhZ2UgdGFibGVzIGFuZCBoYW5kbGluZyBhbnkgbmVjZXNzYXJ5IGNhY2hlIGNvaGVyZW5jZS4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMsIGxpa2UgdGhlIHBhZ2UgY2FjaGUsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBrZWVwIGluIG1pbmQuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdHJ1bmNhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjIwOlx0ICogc2l0dGluZyBpbiB0aGUgZm9saW9fYWRkX2xydSgpIGNhY2hlcy5cbiA2MjE6XHQgKi9cbiA2MjI6XHRpbnQgZm9saW9fdW5tYXBfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiA2MjM6XHRcdFx0XHQgICBnZnBfdCBnZnApXG4gNjI0Olx0e1xuIDYyNTpcdFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcbiA2MjY6XHRcdGludCByZXQ7XG4gNjI3Olx0XG4gNjI4Olx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuIDYyOTpcdFxuIDYzMDpcdFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpXG4gNjMxOlx0XHRcdHVubWFwX21hcHBpbmdfZm9saW8oZm9saW8pO1xuIDYzMjpcdFx0QlVHX09OKGZvbGlvX21hcHBlZChmb2xpbykpO1xuIDYzMzpcdFxuIDYzNDpcdFx0cmV0ID0gZm9saW9fbGF1bmRlcihtYXBwaW5nLCBmb2xpbyk7XG4gNjM1Olx0XHRpZiAocmV0KVxuIDYzNjpcdFx0XHRyZXR1cm4gcmV0O1xuIDYzNzpcdFx0aWYgKGZvbGlvLVx1MDAzZW1hcHBpbmcgIT0gbWFwcGluZylcbiA2Mzg6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiA2Mzk6XHRcdGlmICghZmlsZW1hcF9yZWxlYXNlX2ZvbGlvKGZvbGlvLCBnZnApKVxuIDY0MDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDY0MTpcdFxuIDY0MjpcdFx0c3Bpbl9sb2NrKFx1MDAyNm1hcHBpbmctXHUwMDNlaG9zdC1cdTAwM2VpX2xvY2spO1xuIDY0MzpcdFx0eGFfbG9ja19pcnEoXHUwMDI2bWFwcGluZy1cdTAwM2VpX3BhZ2VzKTtcbiA2NDQ6XHRcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcbiA2NDU6XHRcdFx0Z290byBmYWlsZWQ7XG4gNjQ2Olx0XG4gNjQ3Olx0XHRCVUdfT04oZm9saW9faGFzX3ByaXZhdGUoZm9saW8pKTtcbiA2NDg6XHRcdF9fZmlsZW1hcF9yZW1vdmVfZm9saW8oZm9saW8sIE5VTEwpO1xuIDY0OTpcdFx0eGFfdW5sb2NrX2lycShcdTAwMjZtYXBwaW5nLVx1MDAzZWlfcGFnZXMpO1xuIDY1MDpcdFx0aWYgKG1hcHBpbmdfc2hyaW5rYWJsZShtYXBwaW5nKSlcbiA2NTE6XHRcdFx0aW5vZGVfbHJ1X2xpc3RfYWRkKG1hcHBpbmctXHUwMDNlaG9zdCk7XG4gNjUyOlx0XHRmcmVlX2ZvbGlvID0gbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VmcmVlX2ZvbGlvO1xuIDY1MzpcdFx0c3Bpbl91bmxvY2soXHUwMDI2bWFwcGluZy1cdTAwM2Vob3N0LVx1MDAzZWlfbG9jayk7XG4gNjU0Olx0XG4gNjU1Olx0XHRpZiAoZnJlZV9mb2xpbylcbiA2NTY6XHRcdFx0ZnJlZV9mb2xpbyhmb2xpbyk7XG4gNjU3Olx0XHRmb2xpb19wdXRfcmVmcyhmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbiA2NTg6XHRcdHJldHVybiAxO1xuIDY1OTpcdGZhaWxlZDpcbiA2NjA6XHRcdHhhX3VubG9ja19pcnEoXHUwMDI2bWFwcGluZy1cdTAwM2VpX3BhZ2VzKTtcbiA2NjE6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1hcHBpbmctXHUwMDNlaG9zdC1cdTAwM2VpX2xvY2spO1xuIDY2MjpcdFx0cmV0dXJuIC1FQlVTWTtcbiA2NjM6XHR9XG4gNjY0Olx0XG4gNjY1Olx0LyoqXG4gNjY2Olx0ICogaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UgLSByZW1vdmUgcmFuZ2Ugb2YgcGFnZXMgZnJvbSBhbiBhZGRyZXNzX3NwYWNlXG4gNjY3Olx0ICogQG1hcHBpbmc6IHRoZSBhZGRyZXNzX3NwYWNlXG4gNjY4Olx0ICogQHN0YXJ0OiB0aGUgcGFnZSBvZmZzZXQgJiMzOTtmcm9tJiMzOTsgd2hpY2ggdG8gaW52YWxpZGF0ZVxuIDY2OTpcdCAqIEBlbmQ6IHRoZSBwYWdlIG9mZnNldCAmIzM5O3RvJiMzOTsgd2hpY2ggdG8gaW52YWxpZGF0ZSAoaW5jbHVzaXZlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjIwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIEZpbGVtYXAgRHJvcGJlaGluZCBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIGluIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4gU3BlY2lmaWNhbGx5LCBpZiBhIGZvbGlvIGlzbiYjMzk7dCBtYXBwZWQsIHRoZW4gd2UgY2FsbCB0aGUgdW5tYXAgZnVuY3Rpb24uIEJ1dCwgaWYgaXQgKmlzKiBtYXBwZWQsIHRoZW4gd2Ugc2tpcCB0aGUgY2FsbC4gVGhlIHJlYXNvbiBpcyB0aGF0IHVubWFwcGluZyBhIGZvbGlvIHRoYXQmIzM5O3MgbWFwcGVkIGluIHVzZXJzcGFjZSAobGlrZSB0aHJvdWdoIGBtbWFwYCkgZHVyaW5nIHRoZSBkcm9wYmVoaW5kIHByb2Nlc3MgY291bGQgYmUgZXhwZW5zaXZlLCBjYXVzZSBwcm9ibGVtcywgb3IgaW50cm9kdWNlIGxvY2sgaW52ZXJzaW9uLiBNYWtlcyBzZW5zZS4gSXQmIzM5O3MgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGF2b2lkaW5nIHRoZSBvdmVyaGVhZCB3aGVuIHRoZSBmb2xpbyBpcyBtYXBwZWQuCgpUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgb3B0aW1pemF0aW9uIHdvcnRoeSBvZiBmdXp6aW5nPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93biB1c2luZyBteSBjcml0ZXJpYSBmb3IgZGV0ZXJtaW5pbmcgZnV6emluZyB3b3J0aGluZXNzLgoKRmlyc3QsIGlzIHRoaXMganVzdCBkb2NzLCBsb2dnaW5nLCBvciB0cml2aWFsIGNoYW5nZXM/IE5vLiBJdCB0b3VjaGVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgYG1tL2ZpbGVtYXAuY2AsIGFuZCB0aGUgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgIGZ1bmN0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgZHJvcGJlaGluZCBvcHRpbWl6YXRpb24uIEl0IGlzIG5vdCBjb3NtZXRpYy4KClNlY29uZCwgZG9lcyBpdCB0b3VjaCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gSS9PIG9wZXJhdGlvbnMgbGlrZSBgcmVhZGAsIGB3cml0ZWAgd2l0aCBgUldGX0RPTlRDQUNIRWAsIG9yIGBwb3NpeF9mYWR2aXNlYCwgb3IgdW5jYWNoZWQgSS9PLCBvciBidWZmZXJlZCBJL08gY291cGxlZCB3aXRoIGBtbWFwYCBhbGwgY2FuIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpHaXZlbiB0aGF0IGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBJJiMzOTttIGdvaW5nIHRvIHNheSBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIFRoaXMgaXMgYSBjbGVhciBjYXNlIGZvciBpdC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGZ1enppbmcgdGFyZ2V0LiBXaGF0IGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGZ1enplZD8gTGV0JiMzOTtzIGZpbmQgdGhvc2UgdGhhdCBhcmUgcmVsYXRlZCB0byBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAuIEkga25vdyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAgaXMgc3RhdGljLCBidXQgbGV0JiMzOTtzIHNlZSB3aGljaCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSBpdCBvciBjYWxsIGl0LCBhbmQgd2hpY2ggb2YgdGhvc2UgYXJlIG5vdCBzdGF0aWMuCgpUaGUgZm9sbG93aW5nIGNhbGwgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgOgoqICAgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCB3aGljaCBpcyBleHBvcnRlZC4KKiAgIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWRgIHdoaWNoIGlzIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBmaWxlbWFwX3JlYWRgLgoqICAgYGZvbGlvX2VuZF93cml0ZWJhY2tgIGlzIGV4cG9ydGVkLgoqICAgYGZpbGVtYXBfcmVhZGAgd2hpY2ggdGFrZXMgYXJndW1lbnRzIGFuZCByZXR1cm5zIGEgYHNzaXplX3RgLgoqICAgYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgIHdoaWNoIGNhbGxzIGBmaWxlbWFwX3JlYWRgLgoKU28sIHRoZSBmb2N1cyBzeW1ib2xzIHdvdWxkIGJlIGBmb2xpb19lbmRfZHJvcGJlaGluZGAsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYW5kIGBmaWxlbWFwX3JlYWRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19lbmRfZHJvcGJlaGluZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZnMvd3JpdGUuYz03MzU9c3RhdGljIHZvaWQgbmZzX2lub2RlX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCBuZnNfcGFnZSAqcmVxKVxuLS1cbmZzL25mcy93cml0ZS5jLTc1MS1cbmZzL25mcy93cml0ZS5jOjc1MjpcdFx0XHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XG5mcy9uZnMvd3JpdGUuYy03NTMtXHRcdH1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xMzExPXZvaWQgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTMxMjp2b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTMxMy12b2lkIGZvbGlvX3dhaXRfc3RhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbm1tL2ZpbGVtYXAuYz0xNjA5PXN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMTYyNy0gKi9cbm1tL2ZpbGVtYXAuYzoxNjI4OnZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2ZpbGVtYXAuYy0xNjI5LXtcbi0tXG5tbS9maWxlbWFwLmMtMTY0NC19XG5tbS9maWxlbWFwLmM6MTY0NTpFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfZHJvcGJlaGluZCk7XG5tbS9maWxlbWFwLmMtMTY0Ni1cbi0tXG5tbS9maWxlbWFwLmM9MTY4Nz12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMTY5OC1cdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG5tbS9maWxlbWFwLmM6MTY5OTpcdGZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0xNzAwLVx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NjcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIERyb3BiZWhpbmQgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiBob3cgdGhpcyAmIzM0O2Ryb3BiZWhpbmQmIzM0OyBmdW5jdGlvbmFsaXR5IGlzIGluaXRpYXRlZCBhbmQsIHVsdGltYXRlbHksIGFjdGl2YXRlZCB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGNvcmUgbWVjaGFuaXNtcy4gQSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgZmlsZSBJL08sIGlzIHRoZSBgZmlsZW1hcF9yZWFkYCBmdW5jdGlvbi4gSXTigJlzIGEgZm91bmRhdGlvbmFsIHBpZWNlIGZvciByZWFkaW5nIGRhdGEgZnJvbSBmaWxlcywgc28gSSBzdXNwZWN0IGl0IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIG1hbmFnaW5nIHRoZSBjYWNoaW5nIGFuZCBldmljdGlvbiBiZWhhdmlvciB0aGF0IHVuZGVycGlucyBkcm9wYmVoaW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHZhcmlhYmxlcyBhbmQgY29uZGl0aW9ucyB3aXRoaW4gYGZpbGVtYXBfcmVhZGAgYXJlIHJlc3BvbnNpYmxlIGZvciBtYXJraW5nIHBhZ2VzIGZvciBwb3RlbnRpYWwgZHJvcHBpbmcsIGFuZCB0aGUgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCB0aGlzICYjMzQ7ZHJvcGJlaGluZCYjMzQ7IGZsYWcgaXMgYWN0dWFsbHkgc2V0LiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBkZXRlcm1pbmVzIHdoZXRoZXIgdG8ga2VlcCBhIHBhZ2UgaW4gdGhlIGNhY2hlIG9yIHByaW9yaXRpemUgaXRzIGV2aWN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHByb2JsZW1zKSBsaWtlbHkgbGllcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGBmaWxlbWFwX3JlYWRgIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODgwOlx0XG4yODgxOlx0XHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpIHtcbjI4ODI6XHRcdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbjI4ODM6XHRcdFx0XHRcdGJyZWFrO1xuMjg4NDpcdFx0XHRcdH1cbjI4ODU6XHRcdFx0fVxuMjg4NjpcdHB1dF9mb2xpb3M6XG4yODg3Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX2JhdGNoX2NvdW50KFx1MDAyNmZiYXRjaCk7IGkmIzQzOyYjNDM7KSB7XG4yODg4Olx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGZiYXRjaC5mb2xpb3NbaV07XG4yODg5Olx0XG4yODkwOlx0XHRcdFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKGZvbGlvKTtcbjI4OTE6XHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMjg5MjpcdFx0XHR9XG4yODkzOlx0XHRcdGZvbGlvX2JhdGNoX2luaXQoXHUwMDI2ZmJhdGNoKTtcbjI4OTQ6XHRcdH0gd2hpbGUgKGlvdl9pdGVyX2NvdW50KGl0ZXIpIFx1MDAyNlx1MDAyNiBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2MgaXNpemUgXHUwMDI2XHUwMDI2ICFlcnJvcik7XG4yODk1Olx0XG4yODk2Olx0XHRmaWxlX2FjY2Vzc2VkKGZpbHApO1xuMjg5NzpcdFx0cmEtXHUwMDNlcHJldl9wb3MgPSBsYXN0X3BvcztcbjI4OTg6XHRcdHJldHVybiBhbHJlYWR5X3JlYWQgPyBhbHJlYWR5X3JlYWQgOiBlcnJvcjtcbjI4OTk6XHR9XG4yOTAwOlx0RVhQT1JUX1NZTUJPTF9HUEwoZmlsZW1hcF9yZWFkKTtcbjI5MDE6XHRcbjI5MDI6XHRpbnQga2lvY2Jfd3JpdGVfYW5kX3dhaXQoc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgY291bnQpXG4yOTAzOlx0e1xuMjkwNDpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nO1xuMjkwNTpcdFx0bG9mZl90IHBvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuMjkwNjpcdFx0bG9mZl90IGVuZCA9IHBvcyAmIzQzOyBjb3VudCAtIDE7XG4yOTA3Olx0XG4yOTA4Olx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpIHtcbjI5MDk6XHRcdFx0aWYgKGZpbGVtYXBfcmFuZ2VfbmVlZHNfd3JpdGViYWNrKG1hcHBpbmcsIHBvcywgZW5kKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MDYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNTeW1ib2wgRGV0ZXJtaW5hdGlvbiBmb3IgRmlsZSBTeXN0ZW0gRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgZ29vZCBjYW5kaWRhdGVzIGZvciBgRm9jdXNTeW1ib2xzYCwga2VlcGluZyBmdXp6aW5nIGRpc3RyaWJ1dGlvbiBpbiBtaW5kLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBmb2N1cyBvbiBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgbmVlZCBoZWF2eSBmdXp6aW5nLCBhdm9pZGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gV2Ugd2FudCBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgcmF0aGVyIHRoYW4gaW50ZXJuYWwsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLgoKUmlnaHQsIGxldCYjMzk7cyBzdGFydCB3aXRoIGBmb2xpb19lbmRfZHJvcGJlaGluZGAuIEl0JiMzOTtzIGEgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb24sIGV4cG9ydGVkIGZyb20gYG1tL2ZpbGVtYXAuY2AuIE5vdywgaXMgaXQgYSBnZW5lcmljIGhvdC1wYXRoPyBObywgaXQgbG9va3MgcHJldHR5IHNwZWNpZmljIHRvIHRoZSBkcm9wYmVoaW5kIG1lY2hhbmlzbSDigJMgdGhlIHVuY2FjaGVkL0RPTlRDQUNIRSBJL08gcGFnZSBjYWNoZSBpbnZhbGlkYXRpb24uIFRoYXQgc2VlbXMgcHJvbWlzaW5nLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gZHJvcGJlaGluZCBvciB0aGlzIHVuY2FjaGVkIEkvTyBwYXRoIHRoYXQgd2UgbWlnaHQgYWxzbyBjb25zaWRlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nIHJlbGV2YW50LiBJIGtub3cgb2YgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCwgYW5kIG5vdyBJIHJlbWVtYmVyIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4uLgoKTGV0JiMzOTtzIGxvb2sgYXQgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgLiBBaCwgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbW0vdHJ1bmNhdGUuY2AuIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBpdCYjMzk7cyBhbHNvIG5vbi1zdGF0aWMhIFNvIGl0JiMzOTtzIGFub3RoZXIgZ29vZCBjYW5kaWRhdGUuIGBpbnQgZm9saW9fdW5tYXBfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKWAsIGxvb2tzIHJpZ2h0LiBJdCYjMzk7cyBkZWNsYXJlZCBpbiBgbW0vaW50ZXJuYWwuaGAuCgpCZWZvcmUgSSBjb21taXQgdG8gdGhlc2UsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiBhbnkgc3BlY2lmaWMgYENPTkZJR19gIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSBgbW0vZmlsZW1hcC5jYCBvciB0aGUgZHJvcGJlaGluZCBmZWF0dXJlcy4gSSBuZWVkIHRvIGxvb2sgYXQgYG1tL01ha2VmaWxlYCBhbmQgYG1tL0tjb25maWdgIHRvIHNlZSBob3cgYGZpbGVtYXAub2AgaXMgYnVpbHQsIGFuZCBpZiBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHBsYXkgYSByb2xlIGhlcmUsIHRvIG1ha2Ugc3VyZSB0aGVzZSBhcmUgYWN0dWFsbHkgcmVsZXZhbnQgdG8gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHdlJiMzOTtyZSB0YXJnZXRpbmcuIEkgY2FuJiMzOTt0IGJlIG92ZXJsb29raW5nIHRob3NlIGRldGFpbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGVtYXBcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTQ5PWVuZGlmXG5tbS9NYWtlZmlsZS01MC1cbm1tL01ha2VmaWxlOjUxOm9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxubW0vTWFrZWZpbGUtNTItXHRcdFx0ICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgdGhlIEJ1aWxkIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYGZpbGVtYXAub2AgaXMgY29uc2lzdGVudGx5IGJlaW5nIGJ1aWx0LCBpbmRpY2F0ZWQgYnkgdGhlIGBvYmoteWAgYXNzaWdubWVudC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3c7IGl0JiMzOTtzIGEgY29yZSBjb21wb25lbnQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWdzIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgaXQgYmVoYXZlcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHBhZ2UgbWFuYWdlbWVudC4gVGhlIGhpbnRzIG9mIGBQR19kcm9wYmVoaW5kYCBhbmQgYGZvbGlvX21hcHBlZGAgbWFrZSBtZSB0aGluayB0aGF0IHRoZSBjb2RlIGRlYWxzIHdpdGggcGFnZSBjYWNoaW5nIHN0cmF0ZWdpZXMsIHBlcmhhcHMgcmVsYXRlZCB0byB0aGUgZmlsZXN5c3RlbSBjYWNoZSBhbmQgd3JpdGUtYmVoaW5kIGJlaGF2aW9yLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBoZWFkZXIgZmlsZSB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIGxvb2sgZm9yIG1vcmUgaW5mb3JtYXRpb24uIExldCYjMzk7cyBnbyBjaGVjayB0aGUgZGVmaW5pdGlvbiBmb3IgYFBHX2Ryb3BiZWhpbmRgIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwNTpcdFx0UEdfb3duZXJfMixcdFx0LyogT3duZXIgdXNlLiBJZiBwYWdlY2FjaGUsIGZzIG1heSB1c2UgKi9cbiAxMDY6XHRcdFBHX2FyY2hfMSxcbiAxMDc6XHRcdFBHX3Jlc2VydmVkLFxuIDEwODpcdFx0UEdfcHJpdmF0ZSxcdFx0LyogSWYgcGFnZWNhY2hlLCBoYXMgZnMtcHJpdmF0ZSBkYXRhICovXG4gMTA5Olx0XHRQR19wcml2YXRlXzIsXHRcdC8qIElmIHBhZ2VjYWNoZSwgaGFzIGZzIGF1eCBkYXRhICovXG4gMTEwOlx0XHRQR19yZWNsYWltLFx0XHQvKiBUbyBiZSByZWNsYWltZWQgYXNhcCAqL1xuIDExMTpcdFx0UEdfc3dhcGJhY2tlZCxcdFx0LyogUGFnZSBpcyBiYWNrZWQgYnkgUkFNL3N3YXAgKi9cbiAxMTI6XHRcdFBHX3VuZXZpY3RhYmxlLFx0XHQvKiBQYWdlIGlzIFwmIzM0O3VuZXZpY3RhYmxlXCYjMzQ7ICAqL1xuIDExMzpcdFx0UEdfZHJvcGJlaGluZCxcdFx0LyogZHJvcCBwYWdlcyBvbiBJTyBjb21wbGV0aW9uICovXG4gMTE0Olx0I2lmZGVmIENPTkZJR19NTVVcbiAxMTU6XHRcdFBHX21sb2NrZWQsXHRcdC8qIFBhZ2UgaXMgdm1hIG1sb2NrZWQgKi9cbiAxMTY6XHQjZW5kaWZcbiAxMTc6XHQjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4gMTE4Olx0XHRQR19od3BvaXNvbixcdFx0LyogaGFyZHdhcmUgcG9pc29uZWQgcGFnZS4gRG9uJiMzOTt0IHRvdWNoICovXG4gMTE5Olx0I2VuZGlmXG4gMTIwOlx0I2lmIGRlZmluZWQoQ09ORklHX1BBR0VfSURMRV9GTEFHKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG4gMTIxOlx0XHRQR195b3VuZyxcbiAxMjI6XHRcdFBHX2lkbGUsXG4gMTIzOlx0I2VuZGlmXG4gMTI0Olx0I2lmZGVmIENPTkZJR19BUkNIX1VTRVNfUEdfQVJDSF8yXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjA4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBJc3N1ZSB3aXRoIFBhZ2UgRmxhZ3MqKgoKT2theSwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgUEdfZHJvcGJlaGluZGAgZmxhZyBhbmQgSSBzZWUgaXQmIzM5O3Mgbm90IGd1YXJkZWQgYnkgYW4gYCNpZmRlZmAgaW4gYHBhZ2VmbGFnc2AuIFRoYXQmIzM5O3MgYSBsaXR0bGUgdW51c3VhbCwgYW5kIGl0IG1ha2VzIG1lIHdvbmRlciBpZiB0aGVyZSYjMzk7cyBhbiBpbnRlbmRlZCBwbGF0Zm9ybSBkZXBlbmRlbmN5IGhlcmUgdGhhdCYjMzk7cyBiZWluZyBvdmVybG9va2VkLiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHRoZSB1c2Ugb2YgYGZvbGlvX21hcHBlZGAgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSByZWxhdGVkIGxvZ2ljIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGdvaW5nIG9uIHRoZXJlLCBvciBpZiBzb21ldGhpbmcgaGFzIGdvbmUgYXdyeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZsYWcmIzM5O3MgdmlzaWJpbGl0eSBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZm9saW8gbWFwcGluZyBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGFuZCB3aGVyZSB0aGUgZmxhZyBpcyBiZWluZyBzZXQgYW5kIGNsZWFyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX21hcHBlZFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9tbS9mbHVzaC5jPTMzNj12b2lkIGZsdXNoX2RjYWNoZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmFyY2gvYXJtL21tL2ZsdXNoLmMtMzU1LVx0aWYgKCFjYWNoZV9vcHNfbmVlZF9icm9hZGNhc3QoKSBcdTAwMjZcdTAwMjZcbmFyY2gvYXJtL21tL2ZsdXNoLmM6MzU2Olx0ICAgIG1hcHBpbmcgXHUwMDI2XHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKVxuYXJjaC9hcm0vbW0vZmx1c2guYy0zNTctXHRcdGNsZWFyX2JpdChQR19kY2FjaGVfY2xlYW4sIFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLS1cbmFyY2gvY3NreS9hYml2MS9jYWNoZWZsdXNoLmM9MTg9dm9pZCBmbHVzaF9kY2FjaGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5hcmNoL2Nza3kvYWJpdjEvY2FjaGVmbHVzaC5jLTI2LVxuYXJjaC9jc2t5L2FiaXYxL2NhY2hlZmx1c2guYzoyNzpcdGlmIChtYXBwaW5nIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcbmFyY2gvY3NreS9hYml2MS9jYWNoZWZsdXNoLmMtMjgtXHRcdGNsZWFyX2JpdChQR19kY2FjaGVfY2xlYW4sIFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLS1cbmFyY2gvbWlwcy9tbS9jLXI0ay5jPTUzNz1zdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfcjRrX2ZsdXNoX2NhY2hlX3BhZ2Uodm9pZCAqYXJncylcbi0tXG5hcmNoL21pcHMvbW0vYy1yNGsuYy01NzYtXHRcdG1hcF9jb2hlcmVudCA9IChjcHVfaGFzX2RjX2FsaWFzZXMgXHUwMDI2XHUwMDI2XG5hcmNoL21pcHMvbW0vYy1yNGsuYzo1Nzc6XHRcdFx0XHRmb2xpb19tYXBwZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuYXJjaC9taXBzL21tL2MtcjRrLmMtNTc4LVx0XHRcdFx0IWZvbGlvX3Rlc3RfZGNhY2hlX2RpcnR5KGZvbGlvKSk7XG4tLVxuYXJjaC9taXBzL21tL2NhY2hlLmM9MTI3PXZvaWQgX19mbHVzaF9hbm9uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdm1hZGRyKVxuLS1cbmFyY2gvbWlwcy9tbS9jYWNoZS5jLTEzMi1cdGlmIChwYWdlc19kb19hbGlhcyhhZGRyLCB2bWFkZHIpKSB7XG5hcmNoL21pcHMvbW0vY2FjaGUuYzoxMzM6XHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9kY2FjaGVfZGlydHkoZm9saW8pKSB7XG5hcmNoL21pcHMvbW0vY2FjaGUuYy0xMzQtXHRcdFx0dm9pZCAqa2FkZHI7XG4tLVxuYXJjaC9taXBzL21tL2luaXQuYz0xNjA9dm9pZCBjb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSxcbi0tXG5hcmNoL21pcHMvbW0vaW5pdC5jLTE2Ny1cdGlmIChjcHVfaGFzX2RjX2FsaWFzZXMgXHUwMDI2XHUwMDI2XG5hcmNoL21pcHMvbW0vaW5pdC5jOjE2ODpcdCAgICBmb2xpb19tYXBwZWQoc3JjKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfZGNhY2hlX2RpcnR5KHNyYykpIHtcbmFyY2gvbWlwcy9tbS9pbml0LmMtMTY5LVx0XHR2ZnJvbSA9IGttYXBfY29oZXJlbnQoZnJvbSwgdmFkZHIpO1xuLS1cbmFyY2gvbWlwcy9tbS9pbml0LmM9MTg1PXZvaWQgY29weV90b191c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9taXBzL21tL2luaXQuYy0xOTEtXHRpZiAoY3B1X2hhc19kY19hbGlhc2VzIFx1MDAyNlx1MDAyNlxuYXJjaC9taXBzL21tL2luaXQuYzoxOTI6XHQgICAgZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfZGNhY2hlX2RpcnR5KGZvbGlvKSkge1xuYXJjaC9taXBzL21tL2luaXQuYy0xOTMtXHRcdHZvaWQgKnZ0byA9IGttYXBfY29oZXJlbnQocGFnZSwgdmFkZHIpICYjNDM7ICh2YWRkciBcdTAwMjYgflBBR0VfTUFTSyk7XG4tLVxuYXJjaC9taXBzL21tL2luaXQuYz0yMDU9dm9pZCBjb3B5X2Zyb21fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvbWlwcy9tbS9pbml0LmMtMjExLVx0aWYgKGNwdV9oYXNfZGNfYWxpYXNlcyBcdTAwMjZcdTAwMjZcbmFyY2gvbWlwcy9tbS9pbml0LmM6MjEyOlx0ICAgIGZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X2RjYWNoZV9kaXJ0eShmb2xpbykpIHtcbmFyY2gvbWlwcy9tbS9pbml0LmMtMjEzLVx0XHR2b2lkICp2ZnJvbSA9IGttYXBfY29oZXJlbnQocGFnZSwgdmFkZHIpICYjNDM7ICh2YWRkciBcdTAwMjYgflBBR0VfTUFTSyk7XG4tLVxuYXJjaC9zaC9tbS9jYWNoZS1zaDQuYz0yMTQ9c3RhdGljIHZvaWQgc2g0X2ZsdXNoX2NhY2hlX3BhZ2Uodm9pZCAqYXJncylcbi0tXG5hcmNoL3NoL21tL2NhY2hlLXNoNC5jLTI1MC1cdFx0XHR0ZXN0X2JpdChQR19kY2FjaGVfY2xlYW4sIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkgXHUwMDI2XHUwMDI2XG5hcmNoL3NoL21tL2NhY2hlLXNoNC5jOjI1MTpcdFx0XHRmb2xpb19tYXBwZWQoZm9saW8pKTtcbmFyY2gvc2gvbW0vY2FjaGUtc2g0LmMtMjUyLVx0XHRpZiAobWFwX2NvaGVyZW50KVxuLS1cbmFyY2gvc2gvbW0vY2FjaGUuYz02MD12b2lkIGNvcHlfdG9fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5hcmNoL3NoL21tL2NhY2hlLmMtNjUtXG5hcmNoL3NoL21tL2NhY2hlLmM6NjY6XHRpZiAoYm9vdF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzIFx1MDAyNlx1MDAyNiBmb2xpb19tYXBwZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuYXJjaC9zaC9tbS9jYWNoZS5jLTY3LVx0ICAgIHRlc3RfYml0KFBHX2RjYWNoZV9jbGVhbiwgXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZikpIHtcbi0tXG5hcmNoL3NoL21tL2NhY2hlLmM9ODE9dm9pZCBjb3B5X2Zyb21fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5hcmNoL3NoL21tL2NhY2hlLmMtODYtXG5hcmNoL3NoL21tL2NhY2hlLmM6ODc6XHRpZiAoYm9vdF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzIFx1MDAyNlx1MDAyNiBmb2xpb19tYXBwZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuYXJjaC9zaC9tbS9jYWNoZS5jLTg4LVx0ICAgIHRlc3RfYml0KFBHX2RjYWNoZV9jbGVhbiwgXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZikpIHtcbi0tXG5hcmNoL3NoL21tL2NhY2hlLmM9OTk9dm9pZCBjb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSxcbi0tXG5hcmNoL3NoL21tL2NhY2hlLmMtMTA2LVxuYXJjaC9zaC9tbS9jYWNoZS5jOjEwNzpcdGlmIChib290X2NwdV9kYXRhLmRjYWNoZS5uX2FsaWFzZXMgXHUwMDI2XHUwMDI2IGZvbGlvX21hcHBlZChzcmMpIFx1MDAyNlx1MDAyNlxuYXJjaC9zaC9tbS9jYWNoZS5jLTEwOC1cdCAgICB0ZXN0X2JpdChQR19kY2FjaGVfY2xlYW4sIFx1MDAyNnNyYy1cdTAwM2VmbGFncy5mKSkge1xuLS1cbmFyY2gvc2gvbW0vY2FjaGUuYz0xNTg9dm9pZCBfX2ZsdXNoX2Fub25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpXG4tLVxuYXJjaC9zaC9tbS9jYWNoZS5jLTE2My1cdGlmIChwYWdlc19kb19hbGlhcyhhZGRyLCB2bWFkZHIpKSB7XG5hcmNoL3NoL21tL2NhY2hlLmM6MTY0Olx0XHRpZiAoYm9vdF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzIFx1MDAyNlx1MDAyNiBmb2xpb19tYXBwZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuYXJjaC9zaC9tbS9jYWNoZS5jLTE2NS1cdFx0ICAgIHRlc3RfYml0KFBHX2RjYWNoZV9jbGVhbiwgXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZikpIHtcbi0tXG5hcmNoL3h0ZW5zYS9tbS90bGIuYz0yMzI9c3RhdGljIGludCBjaGVja190bGJfZW50cnkodW5zaWduZWQgdywgdW5zaWduZWQgZSwgYm9vbCBkdGxiKVxuLS1cbmFyY2gveHRlbnNhL21tL3RsYi5jLTI2NC1cdFx0XHRcdFx0cmMgfD0gVExCX0lOU0FORTtcbmFyY2gveHRlbnNhL21tL3RsYi5jOjI2NTpcdFx0XHRcdGVsc2UgaWYgKGZvbGlvX21hcHBlZChmKSlcbmFyY2gveHRlbnNhL21tL3RsYi5jLTI2Ni1cdFx0XHRcdFx0cmMgfD0gVExCX1NVU1BJQ0lPVVM7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmM9MzA3PXZvaWQgX19zaG1lbV93cml0ZWJhY2soc2l6ZV90IHNpemUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jLTMyNC1cdHdoaWxlICgoZm9saW8gPSB3cml0ZWJhY2tfaXRlcihtYXBwaW5nLCBcdTAwMjZ3YmMsIGZvbGlvLCBcdTAwMjZlcnJvcikpKSB7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0uYzozMjU6XHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtMzI2LVx0XHRcdGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZShcdTAwMjZ3YmMsIGZvbGlvKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iYWNrdXAuYz0xMDM9dHRtX2JhY2t1cF9iYWNrdXBfZm9saW8oc3RydWN0IGZpbGUgKmJhY2t1cCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iYWNrdXAuYy0xNTktXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iYWNrdXAuYzoxNjA6XHRcdGlmICh3cml0ZWJhY2sgXHUwMDI2XHUwMDI2ICFmb2xpb19tYXBwZWQodG9fZm9saW8pIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYmFja3VwLmMtMTYxLVx0XHQgICAgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHRvX2ZvbGlvKSkge1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0xNzA2PXN0YXRpYyB2b2lkIG1wYWdlX3JlbGVhc2VfdW51c2VkX3BhZ2VzKHN0cnVjdCBtcGFnZV9kYV9kYXRhICptcGQsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTE3NTAtXHRcdFx0aWYgKGludmFsaWRhdGUpIHtcbmZzL2V4dDQvaW5vZGUuYzoxNzUxOlx0XHRcdFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpIHtcbmZzL2V4dDQvaW5vZGUuYy0xNzUyLVx0XHRcdFx0XHRmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8oZm9saW8pO1xuLS1cbmZzL2Z1c2UvZGV2LmM9MTA5OD1zdGF0aWMgaW50IGZ1c2VfY2hlY2tfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbmZzL2Z1c2UvZGV2LmMtMTA5OS17XG5mcy9mdXNlL2Rldi5jOjExMDA6XHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSB8fFxuZnMvZnVzZS9kZXYuYy0xMTAxLVx0ICAgIGZvbGlvLVx1MDAzZW1hcHBpbmcgIT0gTlVMTCB8fFxuLS1cbmZzL2Z1c2UvZGV2LmM9MTEyMz1zdGF0aWMgaW50IGZ1c2VfdHJ5X21vdmVfZm9saW8oc3RydWN0IGZ1c2VfY29weV9zdGF0ZSAqY3MsIHN0cnVjdCBmb2xpbyAqKmZvbGlvcClcbi0tXG5mcy9mdXNlL2Rldi5jLTExNjctXHQgKi9cbmZzL2Z1c2UvZGV2LmM6MTE2ODpcdGlmIChXQVJOX09OKGZvbGlvX21hcHBlZChvbGRmb2xpbykpKVxuZnMvZnVzZS9kZXYuYy0xMTY5LVx0XHRnb3RvIG91dF9mYWxsYmFja191bmxvY2s7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NDk4PXN0YXRpYyB2b2lkIHJlbW92ZV9pbm9kZV9zaW5nbGVfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy01MTAtXHRmb2xpb19sb2NrKGZvbGlvKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUxMTpcdGlmICh1bmxpa2VseShmb2xpb19tYXBwZWQoZm9saW8pKSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTUxMi1cdFx0aHVnZXRsYl91bm1hcF9maWxlX2ZvbGlvKGgsIG1hcHBpbmcsIGZvbGlvLCBpbmRleCk7XG4tLVxuZnMvcHJvYy9wYWdlLmM9MTQ2PXU2NCBzdGFibGVfcGFnZV9mbGFncyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5mcy9wcm9jL3BhZ2UuYy0xNjYtXHQgKi9cbmZzL3Byb2MvcGFnZS5jOjE2NzpcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKVxuZnMvcHJvYy9wYWdlLmMtMTY4LVx0XHR1IHw9IEJJVF9VTEwoS1BGX01NQVApO1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xOTQ3PXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX21hcGNvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTE5NjUtICovXG5pbmNsdWRlL2xpbnV4L21tLmg6MTk2NjpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWFwcGVkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L21tLmgtMTk2Ny17XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTI5OTQ9c3RhdGljIGlubGluZSBib29sIGZvbGlvX21heWJlX21hcHBlZF9zaGFyZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMzAzMi0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjMwMzM6ICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIG9uIGFuIHVubWFwcGVkIGZvbGlvIC0tICFmb2xpb19tYXBwZWQoKSAtLSB0aGF0IGlzXG5pbmNsdWRlL2xpbnV4L21tLmgtMzAzNC0gKiBsb2NrZWQgd2lsbCByZXR1cm4gYSBzdGFibGUgcmVzdWx0LlxuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oPTEzNT1zdGF0aWMgaW5saW5lIHZvaWQgX19mb2xpb19sYXJnZV9tYXBjb3VudF9zYW5pdHlfY2hlY2tzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmgtMTU4LVx0XHRcdGZvbGlvLVx1MDAzZV9tbV9pZF9tYXBjb3VudFsxXSBcdTAwM2MgMCk7XG5pbmNsdWRlL2xpbnV4L3JtYXAuaDoxNTk6XHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2XG5pbmNsdWRlL2xpbnV4L3JtYXAuaC0xNjAtXHRcdFx0dGVzdF9iaXQoRk9MSU9fTU1fSURTX1NIQVJFRF9CSVROVU0sIFx1MDAyNmZvbGlvLVx1MDAzZV9tbV9pZHMpKTtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9wYWdlbWFwLmgtMjAtXHQoZm9saW9fdGVzdF9hbm9uKGZvbGlvKVx0XHQ/IFBBR0VNQVBfQU5PTllNT1VTICA6IFBBR0VNQVBfRklMRSkgfCBcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvcGFnZW1hcC5oOjIxOlx0KGZvbGlvX21hcHBlZChmb2xpbylcdFx0PyBQQUdFTUFQX01BUFBFRCAgICAgOiAwKSB8IFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9wYWdlbWFwLmgtMjItXHQoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pXHQ/IFBBR0VNQVBfU1dBUENBQ0hFICA6IDApIHwgXFxcbi0tXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz00MDU9c3RhdGljIGludCBfX3Vwcm9iZV93cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy00NTMtXHRmb2xpb19yZW1vdmVfcm1hcF9wdGUoZm9saW8sIGZ3LVx1MDAzZXBhZ2UsIHZtYSk7XG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzo0NTQ6XHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTQ1NS1cdCAgICAgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTc0PXZvaWQgZGFtb25fZm9saW9fbWtvbGQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTgwLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE4MTpcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSB8fCAhZm9saW9fcmF3X21hcHBpbmcoZm9saW8pKSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTgyLVx0XHRmb2xpb19zZXRfaWRsZShmb2xpbyk7XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTIzNj1ib29sIGRhbW9uX2ZvbGlvX3lvdW5nKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI0NC1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoyNDU6XHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykgfHwgIWZvbGlvX3Jhd19tYXBwaW5nKGZvbGlvKSkge1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI0Ni1cdFx0aWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI2MT1ib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI5My1cdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfVU5NQVBQRUQ6XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6Mjk0Olx0XHRtYXRjaGVkID0gIWZvbGlvX21hcHBlZChmb2xpbykgfHwgIWZvbGlvX3Jhd19tYXBwaW5nKGZvbGlvKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yOTUtXHRcdGJyZWFrO1xuLS1cbm1tL2ZpbGVtYXAuYz0xNTA9c3RhdGljIHZvaWQgZmlsZW1hcF91bmFjY291bnRfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vZmlsZW1hcC5jLTE1NC1cbm1tL2ZpbGVtYXAuYzoxNTU6XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fbWFwcGVkKGZvbGlvKSwgZm9saW8pO1xubW0vZmlsZW1hcC5jOjE1NjpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfREVCVUdfVk0pIFx1MDAyNlx1MDAyNiB1bmxpa2VseShmb2xpb19tYXBwZWQoZm9saW8pKSkge1xubW0vZmlsZW1hcC5jLTE1Ny1cdFx0cHJfYWxlcnQoXCYjMzQ7QlVHOiBCYWQgcGFnZSBjYWNoZSBpbiBwcm9jZXNzICVzICBwZm46JTA1bHhcXG5cJiMzNDssXG4tLVxubW0vZmlsZW1hcC5jPTE2MDk9c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZpbGVtYXAuYy0xNjE4LVx0XHRyZXR1cm47XG5tbS9maWxlbWFwLmM6MTYxOTpcdGlmIChtYXBwaW5nIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL2ZpbGVtYXAuYy0xNjIwLVx0XHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcbi0tXG5tbS9mb2xpby5jPTUzMT1zdGF0aWMgdm9pZCBscnVfZGVhY3RpdmF0ZV9maWxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTUzOS1cdC8qIFNvbWUgcHJvY2Vzc2VzIGFyZSB1c2luZyB0aGUgZm9saW8gKi9cbm1tL2ZvbGlvLmM6NTQwOlx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpXG5tbS9mb2xpby5jLTU0MS1cdFx0cmV0dXJuO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDM2Mz1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQzNjYtXG5tbS9odWdlX21lbW9yeS5jOjQzNjc6XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fbWFwcGVkKGZvbGlvKSwgZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYy00MzY4LVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbi0tXG5tbS9odWdldGxiLmM9NTE4NT12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUzMDItXHRcdGlmICghaC1cdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXMgXHUwMDI2XHUwMDI2IF9fdm1hX3ByaXZhdGVfbG9jayh2bWEpIFx1MDAyNlx1MDAyNlxubW0vaHVnZXRsYi5jOjUzMDM6XHRcdCAgICAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xubW0vaHVnZXRsYi5jLTUzMDQtXHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjI0Mj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0MjYtXG5tbS9raHVnZXBhZ2VkLmM6MjQyNzpcdFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpXG5tbS9raHVnZXBhZ2VkLmMtMjQyOC1cdFx0XHR0cnlfdG9fdW5tYXAoZm9saW8sXG4tLVxubW0va3NtLmM9MTEyNj1zdGF0aWMgaW50IHJlbW92ZV9zdGFibGVfbm9kZShzdHJ1Y3Qga3NtX3N0YWJsZV9ub2RlICpzdGFibGVfbm9kZSlcbi0tXG5tbS9rc20uYy0xMTQ0LVx0ZXJyID0gLUVCVVNZO1xubW0va3NtLmM6MTE0NTpcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSkge1xubW0va3NtLmMtMTE0Ni1cdFx0Lypcbi0tXG5tbS9rc20uYz0xMzk0PXN0YXRpYyBpbnQgcmVwbGFjZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9rc20uYy0xNDc1LVx0Zm9saW9fcmVtb3ZlX3JtYXBfcHRlKGZvbGlvLCBwYWdlLCB2bWEpO1xubW0va3NtLmM6MTQ3NjpcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL2tzbS5jLTE0NzctXHRcdGZvbGlvX2ZyZWVfc3dhcChmb2xpbyk7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNTY4PWludCB1bm1hcF9wb2lzb25lZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBtdXN0X2tpbGwpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjE2LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNjE3Olx0cmV0dXJuIGZvbGlvX21hcHBlZChmb2xpbykgPyAtRUJVU1kgOiAwO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjE4LX1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE2MjQ9c3RhdGljIGJvb2wgaHdwb2lzb25fdXNlcl9tYXBwaW5ncyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcCxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NDUtXHQgKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTY0NjpcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTY0Ny1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzM2PWludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzgyLVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzgzOlx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc4NC1cdFx0dW5wb2lzb25fcHJfaW5mbyhcJiMzNDslI2x4OiBzb21lb25lIG1hcHMgdGhlIGh3cG9pc29uIHBhZ2VcXG5cJiMzNDssXG4tLVxubW0vbWVtb3J5LmM9NDg4MT12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy01MjE0LVx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fbnJfcGFnZXMoZm9saW8pICE9IG5yX3BhZ2VzLCBmb2xpbyk7XG5tbS9tZW1vcnkuYzo1MjE1Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fbWFwcGVkKGZvbGlvKSwgZm9saW8pO1xubW0vbWVtb3J5LmMtNTIxNi1cdFx0Zm9saW9fYWRkX25ld19hbm9uX3JtYXAoZm9saW8sIHZtYSwgYWRkcmVzcywgcm1hcF9mbGFncyk7XG4tLVxubW0vbWVtb3J5LmM9NTU0MT1zdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTU1NzYtXHRcdGlmIChyZXQgXHUwMDI2IFZNX0ZBVUxUX0xPQ0tFRCkge1xubW0vbWVtb3J5LmM6NTU3NzpcdFx0XHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL21lbW9yeS5jLTU1NzgtXHRcdFx0XHR1bm1hcF9tYXBwaW5nX2ZvbGlvKGZvbGlvKTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE4NDY9c3RhdGljIHZvaWQgZG9fbWlncmF0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTg3Ny1cdFx0XHRcdGdvdG8gcHV0X2ZvbGlvO1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxODc4Olx0XHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKSB7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE4NzktXHRcdFx0XHRmb2xpb19sb2NrKGZvbGlvKTtcbi0tXG5tbS9taWdyYXRlLmM9MTIxMz1zdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fdW5tYXAobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMTMzMy1cdFx0fVxubW0vbWlncmF0ZS5jOjEzMzQ6XHR9IGVsc2UgaWYgKGZvbGlvX21hcHBlZChzcmMpKSB7XG5tbS9taWdyYXRlLmMtMTMzNS1cdFx0LyogRXN0YWJsaXNoIG1pZ3JhdGlvbiBwdGVzICovXG4tLVxubW0vbWlncmF0ZS5jLTEzNDEtXG5tbS9taWdyYXRlLmM6MTM0MjpcdGlmICghZm9saW9fbWFwcGVkKHNyYykpIHtcbm1tL21pZ3JhdGUuYy0xMzQzLVx0XHRfX21pZ3JhdGVfZm9saW9fcmVjb3JkKGRzdCwgb2xkX2ZvbGlvX3N0YXRlLCBhbm9uX3ZtYSk7XG4tLVxubW0vbWlncmF0ZS5jPTE0ODA9c3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdldGxiX2ZvbGlvKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTE1MjktXG5tbS9taWdyYXRlLmM6MTUzMDpcdGlmIChmb2xpb19tYXBwZWQoc3JjKSkge1xubW0vbWlncmF0ZS5jLTE1MzEtXHRcdGlmICghZm9saW9fdGVzdF9hbm9uKHNyYykpIHtcbi0tXG5tbS9taWdyYXRlLmMtMTU0OC1cbm1tL21pZ3JhdGUuYzoxNTQ5Olx0aWYgKCFmb2xpb19tYXBwZWQoc3JjKSlcbm1tL21pZ3JhdGUuYy0xNTUwLVx0XHRyYyA9IG1vdmVfdG9fbmV3X2ZvbGlvKGRzdCwgc3JjLCBtb2RlKTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTU3MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV91bm1hcCh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTYxOC1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NjE5Olx0XHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjIwLVx0XHRcdHRyeV90b19taWdyYXRlKGZvbGlvLCAwKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjIxLVxubW0vbWlncmF0ZV9kZXZpY2UuYzo2MjI6XHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pIHx8XG5tbS9taWdyYXRlX2RldmljZS5jLTYyMy1cdFx0ICAgICFtaWdyYXRlX3ZtYV9jaGVja19wYWdlKHBhZ2UsIGZhdWx0X3BhZ2UpKSB7XG4tLVxubW0vcGFnZV9pZGxlLmM9OTc9c3RhdGljIHZvaWQgcGFnZV9pZGxlX2NsZWFyX3B0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vcGFnZV9pZGxlLmMtMTA3LVxubW0vcGFnZV9pZGxlLmM6MTA4Olx0aWYgKCFmb2xpb19tYXBwZWQoZm9saW8pIHx8ICFmb2xpb19yYXdfbWFwcGluZyhmb2xpbykpXG5tbS9wYWdlX2lkbGUuYy0xMDktXHRcdHJldHVybjtcbi0tXG5tbS9ybWFwLmM9NTUyPXZvaWQgX19pbml0IGFub25fdm1hX2luaXQodm9pZClcbi0tXG5tbS9ybWFwLmMtNTczLSAqIGVuc3VyZSB0aGF0IGFueSBhbm9uX3ZtYSBvYnRhaW5lZCBmcm9tIHRoZSBwYWdlIHdpbGwgc3RpbGwgYmUgdmFsaWQgZm9yIGFzXG5tbS9ybWFwLmM6NTc0OiAqIGxvbmcgYXMgd2Ugb2JzZXJ2ZSBmb2xpb19tYXBwZWQoKSBbIGhlbmNlIGFsbCB0aG9zZSBmb2xpb19tYXBwZWQoKSB0ZXN0cyBdLlxubW0vcm1hcC5jLTU3NS0gKlxuLS1cbm1tL3JtYXAuYz01ODc9c3RydWN0IGFub25fdm1hICpmb2xpb19nZXRfYW5vbl92bWEoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9ybWFwLmMtNTk3LVx0XHRnb3RvIG91dDtcbm1tL3JtYXAuYzo1OTg6XHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykpXG5tbS9ybWFwLmMtNTk5LVx0XHRnb3RvIG91dDtcbi0tXG5tbS9ybWFwLmMtNjEzLVx0ICovXG5tbS9ybWFwLmM6NjE0Olx0aWYgKCFmb2xpb19tYXBwZWQoZm9saW8pKSB7XG5tbS9ybWFwLmMtNjE1LVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5tbS9ybWFwLmM9NjMzPXN0cnVjdCBhbm9uX3ZtYSAqZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTY0NS1cdFx0Z290byBvdXQ7XG5tbS9ybWFwLmM6NjQ2Olx0aWYgKCFmb2xpb19tYXBwZWQoZm9saW8pKVxubW0vcm1hcC5jLTY0Ny1cdFx0Z290byBvdXQ7XG4tLVxubW0vcm1hcC5jLTY1Ni1cdFx0ICovXG5tbS9ybWFwLmM6NjU3Olx0XHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykpIHtcbm1tL3JtYXAuYy02NTgtXHRcdFx0dXBfcmVhZChcdTAwMjZyb290X2Fub25fdm1hLVx1MDAzZXJ3c2VtKTtcbi0tXG5tbS9ybWFwLmMtNjc1LVxubW0vcm1hcC5jOjY3NjpcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSkge1xubW0vcm1hcC5jLTY3Ny1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubW0vcm1hcC5jPTEyMDM9aW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9ybWFwLmMtMTIxNC1cbm1tL3JtYXAuYzoxMjE1Olx0aWYgKCFmb2xpb19tYXBwZWQoZm9saW8pKVxubW0vcm1hcC5jLTEyMTYtXHRcdHJldHVybiAwO1xuLS1cbm1tL3JtYXAuYz0yMjAxPXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTIyMTctXHQgKiBpbiBiZXR3ZWVuIGl0cyBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbCgpIGFuZCBmb2xpb19yZW1vdmVfcm1hcF8qKCksXG5tbS9ybWFwLmM6MjIxODpcdCAqIHRyeV90b191bm1hcCgpIG1heSByZXR1cm4gYmVmb3JlIGZvbGlvX21hcHBlZCgpIGhhcyBiZWNvbWUgZmFsc2UsXG5tbS9ybWFwLmMtMjIxOS1cdCAqIGlmIHBhZ2UgdGFibGUgbG9ja2luZyBpcyBza2lwcGVkOiB1c2UgVFRVX1NZTkMgdG8gd2FpdCBmb3IgdGhhdC5cbi0tXG5tbS9ybWFwLmM9MjQyNz1zdGF0aWMgaW50IGZvbGlvX25vdF9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3JtYXAuYy0yNDI4LXtcbm1tL3JtYXAuYzoyNDI5Olx0cmV0dXJuICFmb2xpb19tYXBwZWQoZm9saW8pO1xubW0vcm1hcC5jLTI0MzAtfVxuLS1cbm1tL3JtYXAuYz0yNDY1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjQ4MC1cdCAqIGluIGJldHdlZW4gaXRzIHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKCkgYW5kIGZvbGlvX3JlbW92ZV9ybWFwXyooKSxcbm1tL3JtYXAuYzoyNDgxOlx0ICogdHJ5X3RvX21pZ3JhdGUoKSBtYXkgcmV0dXJuIGJlZm9yZSBmb2xpb19tYXBwZWQoKSBoYXMgYmVjb21lIGZhbHNlLFxubW0vcm1hcC5jLTI0ODItXHQgKiBpZiBwYWdlIHRhYmxlIGxvY2tpbmcgaXMgc2tpcHBlZDogdXNlIFRUVV9TWU5DIHRvIHdhaXQgZm9yIHRoYXQuXG4tLVxubW0vcm1hcC5jPTI5NzU9c3RhdGljIHN0cnVjdCBhbm9uX3ZtYSAqcm1hcF93YWxrX2Fub25fbG9jayhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy0yOTg0LVx0ICogTm90ZTogcmVtb3ZlX21pZ3JhdGlvbl9wdGVzKCkgY2Fubm90IHVzZSBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoKVxubW0vcm1hcC5jOjI5ODU6XHQgKiBiZWNhdXNlIHRoYXQgZGVwZW5kcyBvbiBmb2xpb19tYXBwZWQoKTsgYnV0IG5vdCBhbGwgaXRzIHVzYWdlc1xubW0vcm1hcC5jLTI5ODYtXHQgKiBhcmUgaG9sZGluZyBtbWFwX2xvY2suIFVzZXJzIHdpdGhvdXQgbW1hcF9sb2NrIGFyZSByZXF1aXJlZCB0b1xuLS1cbm1tL3NobWVtLmM9MTYwNz1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vc2htZW0uYy0xNzE3LVxubW0vc2htZW0uYzoxNzE4Olx0XHRCVUdfT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XG5tbS9zaG1lbS5jLTE3MTktXHRcdGVycm9yID0gc3dhcF93cml0ZW91dChjdHgsIGZvbGlvKTtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NTUyPXZvaWQgZnJlZV9zd2FwX2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9zd2FwX3N0YXRlLmMtNTUzLXtcbm1tL3N3YXBfc3RhdGUuYzo1NTQ6XHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbm1tL3N3YXBfc3RhdGUuYy01NTUtXHQgICAgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbi0tXG5tbS9zd2FwZmlsZS5jPTE5OD1zdGF0aWMgaW50IF9fdHJ5X3RvX3JlY2xhaW1fc3dhcChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0yMzUtXHRuZWVkX3JlY2xhaW0gPSAoKGZsYWdzIFx1MDAyNiBUVFJTX0FOWVdBWSkgfHxcbm1tL3N3YXBmaWxlLmM6MjM2Olx0XHRcdCgoZmxhZ3MgXHUwMDI2IFRUUlNfVU5NQVBQRUQpIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSkgfHxcbm1tL3N3YXBmaWxlLmMtMjM3LVx0XHRcdCgoZmxhZ3MgXHUwMDI2IFRUUlNfRlVMTCkgXHUwMDI2XHUwMDI2IG1lbV9jZ3JvdXBfc3dhcF9mdWxsKGZvbGlvKSkpO1xuLS1cbm1tL3RydW5jYXRlLmM9MTU0PXN0YXRpYyB2b2lkIHRydW5jYXRlX2NsZWFudXBfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3RydW5jYXRlLmMtMTU1LXtcbm1tL3RydW5jYXRlLmM6MTU2Olx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpXG5tbS90cnVuY2F0ZS5jLTE1Ny1cdFx0dW5tYXBfbWFwcGluZ19mb2xpbyhmb2xpbyk7XG4tLVxubW0vdHJ1bmNhdGUuYz0xODA9c3RhdGljIGludCBmb2xpb19zcGxpdF9vcl91bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsXG4tLVxubW0vdHJ1bmNhdGUuYy0xOTktXHRcdHRyeV90b191bm1hcChmb2xpbywgdHR1X2ZsYWdzKTtcbm1tL3RydW5jYXRlLmM6MjAwOlx0XHRXQVJOX09OKGZvbGlvX21hcHBlZChmb2xpbykpO1xubW0vdHJ1bmNhdGUuYy0yMDEtXHR9XG4tLVxubW0vdHJ1bmNhdGUuYz02MjI9aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdHJ1bmNhdGUuYy02MjktXG5tbS90cnVuY2F0ZS5jOjYzMDpcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKVxubW0vdHJ1bmNhdGUuYy02MzEtXHRcdHVubWFwX21hcHBpbmdfZm9saW8oZm9saW8pO1xubW0vdHJ1bmNhdGUuYzo2MzI6XHRCVUdfT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XG5tbS90cnVuY2F0ZS5jLTYzMy1cbi0tXG5tbS90cnVuY2F0ZS5jPTY3Nj1pbnQgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vdHJ1bmNhdGUuYy03MDgtXG5tbS90cnVuY2F0ZS5jOjcwOTpcdFx0XHRpZiAoIWRpZF9yYW5nZV91bm1hcCBcdTAwMjZcdTAwMjYgZm9saW9fbWFwcGVkKGZvbGlvKSkge1xubW0vdHJ1bmNhdGUuYy03MTAtXHRcdFx0XHQvKlxuLS1cbm1tL3Ztc2Nhbi5jPTEwNTg9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTExMTYtXG5tbS92bXNjYW4uYzoxMTE3Olx0XHRpZiAoIXNjLVx1MDAzZW1heV91bm1hcCBcdTAwMjZcdTAwMjYgZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL3Ztc2Nhbi5jLTExMTgtXHRcdFx0Z290byBrZWVwX2xvY2tlZDtcbi0tXG5tbS92bXNjYW4uYy0xMzI3LVx0XHQgKi9cbm1tL3Ztc2Nhbi5jOjEzMjg6XHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKSB7XG5tbS92bXNjYW4uYy0xMzI5LVx0XHRcdGVudW0gdHR1X2ZsYWdzIGZsYWdzID0gVFRVX0JBVENIX0ZMVVNIO1xuLS1cbm1tL3Ztc2Nhbi5jLTEzNDktXHRcdFx0dHJ5X3RvX3VubWFwKGZvbGlvLCBmbGFncyk7XG5tbS92bXNjYW4uYzoxMzUwOlx0XHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKSB7XG5tbS92bXNjYW4uYy0xMzUxLVx0XHRcdFx0c3RhdC1cdTAwM2Vucl91bm1hcF9mYWlsICYjNDM7PSBucl9wYWdlcztcbi0tXG5tbS92bXNjYW4uYz0xNjc5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4tLVxubW0vdm1zY2FuLmMtMTcyMi1cdFx0XHRnb3RvIG1vdmU7XG5tbS92bXNjYW4uYzoxNzIzOlx0XHRpZiAoIXNjLVx1MDAzZW1heV91bm1hcCBcdTAwMjZcdTAwMjYgZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL3Ztc2Nhbi5jLTE3MjQtXHRcdFx0Z290byBtb3ZlO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ4NzU9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNDkyNy1cdFx0LyogcmV0cnkgZm9saW9zIHRoYXQgbWF5IGhhdmUgbWlzc2VkIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG5tbS92bXNjYW4uYzo0OTI4Olx0XHRpZiAoIXNraXBfcmV0cnkgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtNDkyOS1cdFx0ICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI4NQoJCQkJCQkJb3V0cHV0OiAxMjMKCQkJCQkJCXRob3VnaHRzOiAyNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRmlsZW1hcCBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggY29uY2VybmluZyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAsIHNwZWNpZmljYWxseSB0aGUgaW50ZXJuYWwgc3RhdGljIGhlbHBlci4gVGhlIGtleSBleHBvcnRlZCBmdW5jdGlvbnMgYXJlIGBmb2xpb19lbmRfZHJvcGJlaGluZGAgYW5kIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4gSSBzaG91bGQgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIGBtbS9maWxlbWFwLmNgIGFuZCBlbHNld2hlcmUgdG8gc2VlIGlmIGFueSByZWxhdGVkIGZ1bmN0aW9ucyB3YXJyYW50IGNsb3NlciBzY3J1dGlueS4gU2luY2UgdGhvc2UgYXJlIHRoZSByZWxldmFudCBmdW5jdGlvbnMuCgpOb3csIGNvbmZpZ3VyYXRpb24td2lzZSwgSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIGV4cGxpY2l0bHkgcmVxdWlyZWQuIFRoZSBzb3VyY2UgZmlsZSwgYG1tL2ZpbGVtYXAuY2AsIGlzIGJ1aWx0IHVuY29uZGl0aW9uYWxseSAob2JqLXkpLCBzbyB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgZW1wdHksIHdoaWNoIGFsaWducyB3aXRoIG15IGluaXRpYWwgYXNzZXNzbWVudC4gTm8gcmVhbCBrbm9icyB0byB0d2VhayB0aGVyZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTttIGdvaW5nIHRvIHJlLWNvbmZpcm0gdGhhdCB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGlzIHNldCB0byB0cnVlLiBCYXNlZCBvbiB0aGUgcmVhc29uaW5nIHByb3ZpZGVkLCB0aGF0IG1ha2VzIHNlbnNlLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgZnVuZGFtZW50YWwgcGFnZSBjYWNoZSBsb2dpYzogYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKWAgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWRkIGEgY2hlY2sgZm9yIGZvbGlvIG1hcHBpbmcgYmVmb3JlIGNhbGxpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKWAuIFRoaXMgaW1wYWN0cyB1bmNhY2hlZCBJL08gYW5kIHBhZ2UgY2FjaGUgZXZpY3Rpb24gcGF0aHMuIFRoaXMgaXMgZGVmaW5pdGVseSBmdXp6YWJsZS4gQW5kIHRoaXMgc291bmRzIGxpa2UgYSB2ZXJ5IHZhbHVhYmxlIGNoYW5nZS4KClNvIHRvIHJlY2FwOiBJJiMzOTttIGZvY3VzZWQgb24gYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCBhbmQgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgLiBObyBzcGVjaWFsIGNvbmZpZ3MgYXJlIG5lZWRlZC4gRXZlcnl0aGluZyBpcyBpbiBvcmRlci4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19lbmRfZHJvcGJlaGluZCYjMzQ7LAogICAgJiMzNDtmb2xpb191bm1hcF9pbnZhbGlkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgcGFnZSBjYWNoZSBkcm9wYmVoaW5kIGludmFsaWRhdGlvbiBsb2dpYyBpbiBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKCkgYnkgYWRkaW5nIGEgY2hlY2sgKCFmb2xpb19tYXBwZWQoZm9saW8pKSBiZWZvcmUgY2FsbGluZyBmb2xpb191bm1hcF9pbnZhbGlkYXRlKCkuIFRoaXMgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB1bmNhY2hlZCAvIGRyb3BiZWhpbmQgSS9PIHByb2Nlc3NpbmcgKGUuZy4gUldGX0RPTlRDQUNIRSkgYW5kIHdyaXRlYmFjayBjb21wbGV0aW9uIGluIHJlYWNoYWJsZSwgc3RhbmRhcmQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX2VuZF9kcm9wYmVoaW5kJiMzNDssCiAgICAmIzM0O2ZvbGlvX3VubWFwX2ludmFsaWRhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBwYWdlIGNhY2hlIGRyb3BiZWhpbmQgaW52YWxpZGF0aW9uIGxvZ2ljIGluIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKSBieSBhZGRpbmcgYSBjaGVjayAoIWZvbGlvX21hcHBlZChmb2xpbykpIGJlZm9yZSBjYWxsaW5nIGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKS4gVGhpcyBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHVuY2FjaGVkIC8gZHJvcGJlaGluZCBJL08gcHJvY2Vzc2luZyAoZS5nLiBSV0ZfRE9OVENBQ0hFKSBhbmQgd3JpdGViYWNrIGNvbXBsZXRpb24gaW4gcmVhY2hhYmxlLCBzdGFuZGFyZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpYCB0byBhZGQgYSBgIWZvbGlvX21hcHBlZChmb2xpbylgIGNoZWNrIGJlZm9yZSBpbnZva2luZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpYCwgcHJldmVudGluZyBkcm9wYmVoaW5kIGludmFsaWRhdGlvbiBvZiBmb2xpb3MgdGhhdCBhcmUgY3VycmVudGx5IG1hcHBlZCBpbnRvIHVzZXIgcGFnZSB0YWJsZXMuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjay9oZWFwIGJ1ZmZlciBjb3B5aW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gSXQgb25seSBhZGRzIGEgc3RhdGUgY2hlY2sgb24gZXhpc3RpbmcgbG9ja2VkIGZvbGlvcyB3aXRoaW4gdGhlIHBhZ2UgY2FjaGUuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byBmb2xpbyBsaWZlY3ljbGUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgbWVtb3J5IHNhZmV0eSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyAoZS5nLiBgVk1fQlVHX09OX0ZPTElPYCkgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWYzZmFhYmM4Mzk3NmYyYjgyMTFlZmFlMDhiNGU2ZWE3Nzg1NDkwZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDE3OjU1OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDZhZmVjNjM2ODgxZmIuLjAwZmQ4OWNmNmY1NTAgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTE2MTYsNyAmIzQzOzE2MTYsNyBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCXJldHVybjsKIAlpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpCiAJCXJldHVybjsKLQlpZiAobWFwcGluZykKJiM0MzsJaWYgKG1hcHBpbmcgJmFtcDsmYW1wOyAhZm9saW9fbWFwcGVkKGZvbGlvKSkKIAkJZm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBsYW5kZWQgaW4gbXkgcXVldWUsIGFuZCB0aGUgZmlyc3QgdGhvdWdodCB0aGF0IGhpdHMgbWUgaXM6IGRvZXMgdGhpcyB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbj8gTGV0JiMzOTtzIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGdvb2QsIGhhcmQgbG9vayBhdCB0aGlzIGRpZmY6CgpgYGBkaWZmCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggNmFmZWM2MzY4ODFmYi4uMDBmZDg5Y2Y2ZjU1MAotLS0gYS9tbS9maWxlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jCkBAIC0xNjE2LDcgJiM0MzsxNjE2LDcgQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlyZXR1cm47CiAJaWYgKCFmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKQogCQlyZXR1cm47Ci0JaWYgKG1hcHBpbmcpCiYjNDM7CWlmIChtYXBwaW5nICZhbXA7JmFtcDsgIWZvbGlvX21hcHBlZChmb2xpbykpCiAJCWZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApOwogfQpgYGAKCkl0JiMzOTtzIGEgc3VidGxlIGNoYW5nZSwgaXQgbG9va3MgbGlrZSB0aGVyZSBpcyBhIG5ldyBjb25kaXRpb24gb24gYSBmb2xpbyB1bm1hcCwgY2hlY2tpbmcgaWYgaXQmIzM5O3MgbWFwcGVkIGJlZm9yZSBpbnZhbGlkYXRpbmcgaXQsIHdoaWNoIGFwcGVhcnMgdG8gYmUgd2l0aGluIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYC4gSSBuZWVkIHRvIHJldmlldyB0aGUgbG9naWMgYXJvdW5kIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCBpdHNlbGYgYW5kIGdldCBhIGZlZWwgZm9yIGhvdyBvZnRlbiB0aGlzIGNvZGUgcGF0aCBpcyBoaXQgYW5kIHdoYXQgc29ydCBvZiBvYmplY3RzIGFyZSBiZWluZyBtYW5pcHVsYXRlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGJhc2lzIGZvciBkZWNpZGluZyBpZiB3ZSBuZWVkIHRvIGV4cGFuZCB0aGUgc2NvcGUgZm9yIGZ1enppbmcgdGhpcyBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2ZpbGVtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYwMDpcdFx0XHRyZXQgPSBmb2xpb193YWl0X2JpdF9raWxsYWJsZShmb2xpbywgUEdfcHJpdmF0ZV8yKTtcbjE2MDE6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE2MDI6XHRcdFx0XHRicmVhaztcbjE2MDM6XHRcdH1cbjE2MDQ6XHRcbjE2MDU6XHRcdHJldHVybiByZXQ7XG4xNjA2Olx0fVxuMTYwNzpcdEVYUE9SVF9TWU1CT0woZm9saW9fd2FpdF9wcml2YXRlXzJfa2lsbGFibGUpO1xuMTYwODpcdFxuMTYwOTpcdHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbjE2MTA6XHR7XG4xNjExOlx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvLVx1MDAzZW1hcHBpbmc7XG4xNjEyOlx0XG4xNjEzOlx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuMTYxNDpcdFxuMTYxNTpcdFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSB8fCBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcbjE2MTY6XHRcdFx0cmV0dXJuO1xuMTYxNzpcdFx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKVxuMTYxODpcdFx0XHRyZXR1cm47XG4xNjE5Olx0XHRpZiAobWFwcGluZyBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXG4xNjIwOlx0XHRcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xuMTYyMTpcdH1cbjE2MjI6XHRcbjE2MjM6XHQvKlxuMTYyNDpcdCAqIElmIGZvbGlvIHdhcyBtYXJrZWQgYXMgZHJvcGJlaGluZCwgdGhlbiBwYWdlcyBzaG91bGQgYmUgZHJvcHBlZCB3aGVuIHdyaXRlYmFja1xuMTYyNTpcdCAqIGNvbXBsZXRlcy4gRG8gdGhhdCBub3cuIElmIHdlIGZhaWwsIGl0JiMzOTtzIGxpa2VseSBiZWNhdXNlIG9mIGEgYmlnIGZvbGlvIC1cbjE2MjY6XHQgKiBqdXN0IHJlc2V0IGRyb3BiZWhpbmQgZm9yIHRoYXQgY2FzZSBhbmQgbGF0dGVyIGNvbXBsZXRpb25zIHNob3VsZCBpbnZhbGlkYXRlLlxuMTYyNzpcdCAqL1xuMTYyODpcdHZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbjE2Mjk6XHR7XG4xNjMwOlx0XHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG4xNjMxOlx0XHRcdHJldHVybjtcbjE2MzI6XHRcbjE2MzM6XHRcdC8qXG4xNjM0Olx0XHQgKiBIaXR0aW5nICFpbl90YXNrKCkgc2hvdWxkIG5vdCBoYXBwZW4gb2ZmIFJXRl9ET05UQ0FDSEUgd3JpdGViYWNrLFxuMTYzNTpcdFx0ICogYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZCBkaXJ0eSBmb2xpb3NcbjE2MzY6XHRcdCAqIHRoYXQgd2VyZSBjcmVhdGVkIGFzIHBhcnQgb2YgdW5jYWNoZWQgd3JpdGViYWNrLCBhbmQgdGhhdCB3cml0ZWJhY2tcbjE2Mzc6XHRcdCAqIHdvdWxkIG90aGVyd2lzZSBub3QgbmVlZCBub24tSVJRIGhhbmRsaW5nLiBKdXN0IHNraXAgdGhlXG4xNjM4Olx0XHQgKiBpbnZhbGlkYXRpb24gaW4gdGhhdCBjYXNlLlxuMTYzOTpcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCBzcGVha2luZyBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgRmlsZSBNYXBwaW5nIGFuZCBJbnZhbGlkYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCBhbmQgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgcGxheSBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBmaWxlIGNhY2hpbmcsIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIG9mIHBhZ2VzIHRoYXQgYXJlIGJhY2tlZCBieSBmaWxlcy4gSSBuZWVkIHRvIHJlbWVtYmVyIGV4YWN0bHkgd2hhdCBlYWNoIG9mIHRoZW0gaXMgcmVzcG9uc2libGUgZm9yIGRvaW5nLiBBcmUgdGhleSByZWxhdGVkPyBEbyB0aGV5IGNhbGwgZWFjaCBvdGhlcj8gRG8gdGhleSBpbnRlcmFjdCB3aXRoIGFueSBvZiB0aGUgc2FtZSBzdHJ1Y3R1cmVzLCBvciB3b3JrIG9uIHNpbWlsYXIga2luZHMgb2YgZGF0YT8gV2hhdCBraW5kIG9mIGNvbnRleHQgdHJpZ2dlcnMgdGhlaXIgdXNlPyBIb3cgZG8gdGhleSBhZmZlY3QgdGhlIGZpbGVzeXN0ZW0gbWV0YWRhdGEsIGFuZCB0aGUgcGFnZSBjYWNoZT8gVWx0aW1hdGVseSwgSSYjMzk7bSBhaW1pbmcgdG8gdmlzdWFsaXplIHRoZSBjb250cm9sIGZsb3csIHNvIEkga25vdyBob3cgdG8gb3B0aW1pemUgb3IgdHJvdWJsZXNob290IHRoZXNlIG9wZXJhdGlvbnMuIEkgd2FudCB0byBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGVzZSBwaWVjZXMgZml0IGluIHRoZSBwdXp6bGUgb2YgZ2V0dGluZyBkYXRhIHRvIGFuZCBmcm9tIHBlcnNpc3RlbnQgc3RvcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdW5tYXBfaW52YWxpZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmM9MTYwOT1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZmlsZW1hcC5jLTE2MTktXHRpZiAobWFwcGluZyBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXG5tbS9maWxlbWFwLmM6MTYyMDpcdFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XG5tbS9maWxlbWFwLmMtMTYyMS19XG4tLVxubW0vaW50ZXJuYWwuaD01OTc9aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xubW0vaW50ZXJuYWwuaDo1OTg6aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9pbnRlcm5hbC5oLTU5OS1cdFx0XHQgICBnZnBfdCBnZnApO1xuLS1cbm1tL3RydW5jYXRlLmM9NjA2PXN0YXRpYyBpbnQgZm9saW9fbGF1bmRlcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS90cnVuY2F0ZS5jLTYyMS0gKi9cbm1tL3RydW5jYXRlLmM6NjIyOmludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vdHJ1bmNhdGUuYy02MjMtXHRcdFx0ICAgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL3RydW5jYXRlLmM9Njc2PWludCBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS90cnVuY2F0ZS5jLTcyNS1cdFx0XHRmb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbyk7XG5tbS90cnVuY2F0ZS5jOjcyNjpcdFx0XHRyZXQyID0gZm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgR0ZQX0tFUk5FTCk7XG5tbS90cnVuY2F0ZS5jLTcyNy1cdFx0XHRpZiAocmV0MiBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkyMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIFRydW5jYXRpb24gSXNzdWUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMuIEkmIzM5O20gdGhpbmtpbmcgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgZWl0aGVyIGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBjb21taXQgaGlzdG9yeSB0byBzZWUgaWYgdGhlcmUgaGF2ZSBiZWVuIGFueSByZWNlbnQsIHJlbGF0ZWQgY2hhbmdlcywgb3IgcG9zc2libHkganVtcCByaWdodCBpbnRvIGBtbS90cnVuY2F0ZS5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgdGhlIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBzcG90IHdoZXJlIHNvbWUgb2YgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBmaWxlIHRydW5jYXRpb24gcHJvY2VzcyBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggcGFnZSB1bm1hcHBpbmcgbWlnaHQgYmUgaGFuZGxlZC4gSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZvbGlvIGludmFsaWRhdGlvbiB3b3JrcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdHJ1bmNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS90cnVuY2F0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MjA6XHQgKiBzaXR0aW5nIGluIHRoZSBmb2xpb19hZGRfbHJ1KCkgY2FjaGVzLlxuIDYyMTpcdCAqL1xuIDYyMjpcdGludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIDYyMzpcdFx0XHRcdCAgIGdmcF90IGdmcClcbiA2MjQ6XHR7XG4gNjI1Olx0XHR2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopO1xuIDYyNjpcdFx0aW50IHJldDtcbiA2Mjc6XHRcbiA2Mjg6XHRcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4gNjI5Olx0XG4gNjMwOlx0XHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcbiA2MzE6XHRcdFx0dW5tYXBfbWFwcGluZ19mb2xpbyhmb2xpbyk7XG4gNjMyOlx0XHRCVUdfT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XG4gNjMzOlx0XG4gNjM0Olx0XHRyZXQgPSBmb2xpb19sYXVuZGVyKG1hcHBpbmcsIGZvbGlvKTtcbiA2MzU6XHRcdGlmIChyZXQpXG4gNjM2Olx0XHRcdHJldHVybiByZXQ7XG4gNjM3Olx0XHRpZiAoZm9saW8tXHUwMDNlbWFwcGluZyAhPSBtYXBwaW5nKVxuIDYzODpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDYzOTpcdFx0aWYgKCFmaWxlbWFwX3JlbGVhc2VfZm9saW8oZm9saW8sIGdmcCkpXG4gNjQwOlx0XHRcdHJldHVybiAtRUJVU1k7XG4gNjQxOlx0XG4gNjQyOlx0XHRzcGluX2xvY2soXHUwMDI2bWFwcGluZy1cdTAwM2Vob3N0LVx1MDAzZWlfbG9jayk7XG4gNjQzOlx0XHR4YV9sb2NrX2lycShcdTAwMjZtYXBwaW5nLVx1MDAzZWlfcGFnZXMpO1xuIDY0NDpcdFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuIDY0NTpcdFx0XHRnb3RvIGZhaWxlZDtcbiA2NDY6XHRcbiA2NDc6XHRcdEJVR19PTihmb2xpb19oYXNfcHJpdmF0ZShmb2xpbykpO1xuIDY0ODpcdFx0X19maWxlbWFwX3JlbW92ZV9mb2xpbyhmb2xpbywgTlVMTCk7XG4gNjQ5Olx0XHR4YV91bmxvY2tfaXJxKFx1MDAyNm1hcHBpbmctXHUwMDNlaV9wYWdlcyk7XG4gNjUwOlx0XHRpZiAobWFwcGluZ19zaHJpbmthYmxlKG1hcHBpbmcpKVxuIDY1MTpcdFx0XHRpbm9kZV9scnVfbGlzdF9hZGQobWFwcGluZy1cdTAwM2Vob3N0KTtcbiA2NTI6XHRcdGZyZWVfZm9saW8gPSBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWZyZWVfZm9saW87XG4gNjUzOlx0XHRzcGluX3VubG9jayhcdTAwMjZtYXBwaW5nLVx1MDAzZWhvc3QtXHUwMDNlaV9sb2NrKTtcbiA2NTQ6XHRcbiA2NTU6XHRcdGlmIChmcmVlX2ZvbGlvKVxuIDY1NjpcdFx0XHRmcmVlX2ZvbGlvKGZvbGlvKTtcbiA2NTc6XHRcdGZvbGlvX3B1dF9yZWZzKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuIDY1ODpcdFx0cmV0dXJuIDE7XG4gNjU5Olx0ZmFpbGVkOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzM5CgkJCQkJCQlvdXRwdXQ6IDE3MQoJCQkJCQkJdGhvdWdodHM6IDQ5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBFdmFsdWF0aW9uOiBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGFkZGluZyBhIGAhZm9saW9fbWFwcGVkKGZvbGlvKWAgY2hlY2sgaW4gYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKWAgYmVmb3JlIGNhbGxpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKWAuIFRoaXMgaXMgdG8gcHJldmVudCBpbnZhbGlkYXRpbmcgbWFwcGVkIGZvbGlvcyBkdXJpbmcgdGhlIGRyb3BiZWhpbmQgcGFnZSBjYWNoZSBvcGVyYXRpb24uIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIEtNU0FOIGlzc3Vlcy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyBubywgYnV0IGxldCYjMzk7cyBiZSB0aG9yb3VnaC4gS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBhbmQgaW5mb3JtYXRpb24gbGVha3MsIHBhcnRpY3VsYXJseSB0byB1c2Vyc3BhY2UuIFdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vcGUuIFRoaXMgaXNuJiMzOTt0IGFib3V0IHNlbmRpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgZGF0YSB0byB0aGUgdXNlci4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vLCB0aGUgYGZvbGlvX21hcHBlZChmb2xpbylgIGNoZWNrIGp1c3QgbG9va3MgYXQgdGhlIGZvbGlvJiMzOTtzIGludGVybmFsIHN0YXRlIGZsYWdzIGFuZCByZWZlcmVuY2UgY291bnRzLiBJdCYjMzk7cyBub3QgZGVwZW5kZW50IG9uIHNvbWUgcHJldmlvdXNseSB1bmluaXRpYWxpemVkIGZpZWxkLgozLiAgKipBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLCB0aGlzIGlzIG5vdCBhIG5ldyBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiwgYW5kIHRoZXJlJiMzOTtzIG5vIGluaXRpYWxpemF0aW9uIG9mIGFueSBuZXcgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhdmUgdW5pbml0aWFsaXplZCBmaWVsZHMuCjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBieXRlcz8qKiBOby4gVGhpcyBpc24mIzM5O3QgYWJvdXQgYm91bmRzIGNoZWNraW5nIG9yIGxlbmd0aHMgdGhhdCBtaWdodCBsZWFkIHRvIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoaXMgaXMgZnVuZGFtZW50YWxseSBhIHBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIGNoZWNrIGR1cmluZyBgZHJvcGJlaGluZGAgYW5kIGl0IGFwcGVhcnMgaXQgaXMgcHVyZWx5IGFib3V0IHBhZ2UgY2FjaGUgbWFuYWdlbWVudCwgbm90IG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBCdWdzIGluIHRoaXMgYXJlYSB3b3VsZCBiZSBjYXVnaHQgYnkgdGhlIHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scywgdGhlIHBhZ2UgY2FjaGUgbG9naWMsIEtBU0FOLCBhbmQgbG9ja2RlcC4gUHJvYmxlbXMgaGVyZSB3b3VsZCBzaG93IHVwIGFzIHJlZmNvdW50IGVycm9ycywgdXNlLWFmdGVyLWZyZWUsIG9yIGFzc2VydGlvbnMgZmFpbHVyZXMgKGxpa2UgYEJVR19PTmBzKSB0aGF0IGFyZSBzdGFuZGFyZCBrZXJuZWwtbGV2ZWwgZGVidWdnaW5nLgoKU28sIHRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhlIHBhdGNoIGl0c2VsZiBqdXN0IGFkZHMgdGhlIGNoZWNrIGFuZCBub3RoaW5nIG1vcmUsIGl0IGRvZXNuJiMzOTt0IHRvdWNoIGFueXRoaW5nIHRoYXQgd291bGQgYmUgcmVsZXZhbnQgdG8gS01TQU4uIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgdGhlIHVzdWFsIGtlcm5lbCBkZWJ1Z2dpbmcuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKWAgdG8gYWRkIGEgYCFmb2xpb19tYXBwZWQoZm9saW8pYCBjaGVjayBiZWZvcmUgaW52b2tpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKWAsIHByZXZlbnRpbmcgZHJvcGJlaGluZCBpbnZhbGlkYXRpb24gb2YgZm9saW9zIHRoYXQgYXJlIGN1cnJlbnRseSBtYXBwZWQgaW50byB1c2VyIHBhZ2UgdGFibGVzLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2svaGVhcCBidWZmZXIgY29weWluZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEl0IG9ubHkgYWRkcyBhIHN0YXRlIGNoZWNrIG9uIGV4aXN0aW5nIGxvY2tlZCBmb2xpb3Mgd2l0aGluIHRoZSBwYWdlIGNhY2hlLiBBbnkgaXNzdWVzIHJlbGF0ZWQgdG8gZm9saW8gbGlmZWN5Y2xlLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIG1lbW9yeSBzYWZldHkgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgKGUuZy4gYFZNX0JVR19PTl9GT0xJT2ApIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpYCB0byBhZGQgYSBgIWZvbGlvX21hcHBlZChmb2xpbylgIGNoZWNrIGJlZm9yZSBpbnZva2luZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpYCwgcHJldmVudGluZyBkcm9wYmVoaW5kIGludmFsaWRhdGlvbiBvZiBmb2xpb3MgdGhhdCBhcmUgY3VycmVudGx5IG1hcHBlZCBpbnRvIHVzZXIgcGFnZSB0YWJsZXMuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjay9oZWFwIGJ1ZmZlciBjb3B5aW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gSXQgb25seSBhZGRzIGEgc3RhdGUgY2hlY2sgb24gZXhpc3RpbmcgbG9ja2VkIGZvbGlvcyB3aXRoaW4gdGhlIHBhZ2UgY2FjaGUuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byBmb2xpbyBsaWZlY3ljbGUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgbWVtb3J5IHNhZmV0eSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyAoZS5nLiBgVk1fQlVHX09OX0ZPTElPYCkgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTU6NTkuNTI1MTczOTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY0OTc2MTIyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fZW5kX2Ryb3BiZWhpbmRcIixcbiAgICBcImZvbGlvX3VubWFwX2ludmFsaWRhdGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKClgIHRvIGFkZCBhIGAhZm9saW9fbWFwcGVkKGZvbGlvKWAgY2hlY2sgYmVmb3JlIGludm9raW5nIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlKClgLCBwcmV2ZW50aW5nIGRyb3BiZWhpbmQgaW52YWxpZGF0aW9uIG9mIGZvbGlvcyB0aGF0IGFyZSBjdXJyZW50bHkgbWFwcGVkIGludG8gdXNlciBwYWdlIHRhYmxlcy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2svaGVhcCBidWZmZXIgY29weWluZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEl0IG9ubHkgYWRkcyBhIHN0YXRlIGNoZWNrIG9uIGV4aXN0aW5nIGxvY2tlZCBmb2xpb3Mgd2l0aGluIHRoZSBwYWdlIGNhY2hlLiBBbnkgaXNzdWVzIHJlbGF0ZWQgdG8gZm9saW8gbGlmZWN5Y2xlLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIG1lbW9yeSBzYWZldHkgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgKGUuZy4gYFZNX0JVR19PTl9GT0xJT2ApIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBwYWdlIGNhY2hlIGRyb3BiZWhpbmQgaW52YWxpZGF0aW9uIGxvZ2ljIGluIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKSBieSBhZGRpbmcgYSBjaGVjayAoIWZvbGlvX21hcHBlZChmb2xpbykpIGJlZm9yZSBjYWxsaW5nIGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKS4gVGhpcyBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHVuY2FjaGVkIC8gZHJvcGJlaGluZCBJL08gcHJvY2Vzc2luZyAoZS5nLiBSV0ZfRE9OVENBQ0hFKSBhbmQgd3JpdGViYWNrIGNvbXBsZXRpb24gaW4gcmVhY2hhYmxlLCBzdGFuZGFyZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU1OjU5LjUyNTIwMjkyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTY4NDI1MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZjNmYWFiYzgzOTc2ZjJiODIxMWVmYWUwOGI0ZTZlYTc3ODU0OTBmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDI5IDE3OjU1OjU4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xcbmluZGV4IDZhZmVjNjM2ODgxZmIuLjAwZmQ4OWNmNmY1NTAgMTAwNjQ0XFxuLS0tIGEvbW0vZmlsZW1hcC5jXFxuKysrIGIvbW0vZmlsZW1hcC5jXFxuQEAgLTE2MTYsNyArMTYxNiw3IEBAIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0aWYgKG1hcHBpbmcpXFxuK1xcdGlmIChtYXBwaW5nIFxcdTAwMjZcXHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKVxcbiBcXHRcXHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTU6NTkuODgyODM4ODE0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDAxMTk3NTY1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fZW5kX2Ryb3BiZWhpbmRcIixcbiAgICBcImZvbGlvX3VubWFwX2ludmFsaWRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHBhZ2UgY2FjaGUgZHJvcGJlaGluZCBpbnZhbGlkYXRpb24gbG9naWMgaW4gZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpIGJ5IGFkZGluZyBhIGNoZWNrICghZm9saW9fbWFwcGVkKGZvbGlvKSkgYmVmb3JlIGNhbGxpbmcgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpLiBUaGlzIGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdW5jYWNoZWQgLyBkcm9wYmVoaW5kIEkvTyBwcm9jZXNzaW5nIChlLmcuIFJXRl9ET05UQ0FDSEUpIGFuZCB3cml0ZWJhY2sgY29tcGxldGlvbiBpbiByZWFjaGFibGUsIHN0YW5kYXJkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWYzZmFhYmM4Mzk3NmYyYjgyMTFlZmFlMDhiNGU2ZWE3Nzg1NDkwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDE3OjU1OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCA2YWZlYzYzNjg4MWZiLi4wMGZkODljZjZmNTUwIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4rKysgYi9tbS9maWxlbWFwLmNcbkBAIC0xNjE2LDcgKzE2MTYsNyBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdHJldHVybjtcbiBcdGlmICghZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuLVx0aWYgKG1hcHBpbmcpXG4rXHRpZiAobWFwcGluZyBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXG4gXHRcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU1OjU5Ljg4Mjg0MDQ5NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzMjU3NTg2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIGFuYWx5c2lzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQgdGhyb3VnaDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgRHJvcGJlaGluZCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIEkndmUgZ290IGEgZGlmZiB0byBsb29rIGF0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXJuZWwgY29kZSBzdXJyb3VuZGluZyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL2ZpbGVtYXAuY2AuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBtaXNjaGllZiwgZGVwZW5kaW5nIG9uIHRoZSBjaGFuZ2UhKSByZWxhdGVkIHRvIGRyb3AtYmVoaW5kIHBhZ2UgY2FjaGluZyBsaWtlbHkgcmVzaWRlcy5cblxuSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZSAtIHdoYXQgdHJpZ2dlcmVkIHRoaXMsIGFuZCB3aGF0IHRoZSBpbnRlbmRlZCBiZWhhdmlvciBpcy4gVG8gZG8gdGhhdCwgSSdsbCBsZXZlcmFnZSBteSB0b29scy4gSSBjYW4gdXNlIGByZWFkLWZpbGVgIHRvIG5hdmlnYXRlIHRoZSBjb2RlIGRpcmVjdGx5LCBvciBwZXJoYXBzIGBncmVwcGVyYCB0byBzZWFyY2ggbW9yZSBicm9hZGx5IGZvciByZWxldmFudCBjYWxsIHNpdGVzIGFuZCB1c2FnZXMgb2YgdGhlIGZ1bmN0aW9uLCBhbmQgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCBhbnkgaW1wbGVtZW50YXRpb24gbnVhbmNlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBrZXkga2VybmVsIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzo1NjowNi4yMDg2MDIxNzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZmlsZW1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MDA6XFx0XFx0XFx0cmV0ID0gZm9saW9fd2FpdF9iaXRfa2lsbGFibGUoZm9saW8sIFBHX3ByaXZhdGVfMik7XFxuMTYwMTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNjAyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE2MDM6XFx0XFx0fVxcbjE2MDQ6XFx0XFxuMTYwNTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE2MDY6XFx0fVxcbjE2MDc6XFx0RVhQT1JUX1NZTUJPTChmb2xpb193YWl0X3ByaXZhdGVfMl9raWxsYWJsZSk7XFxuMTYwODpcXHRcXG4xNjA5OlxcdHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4xNjEwOlxcdHtcXG4xNjExOlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW8tXFx1MDAzZW1hcHBpbmc7XFxuMTYxMjpcXHRcXG4xNjEzOlxcdFxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuMTYxNDpcXHRcXG4xNjE1OlxcdFxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHwgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXFxuMTYxNjpcXHRcXHRcXHRyZXR1cm47XFxuMTYxNzpcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpXFxuMTYxODpcXHRcXHRcXHRyZXR1cm47XFxuMTYxOTpcXHRcXHRpZiAobWFwcGluZyBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcXG4xNjIwOlxcdFxcdFxcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xcbjE2MjE6XFx0fVxcbjE2MjI6XFx0XFxuMTYyMzpcXHQvKlxcbjE2MjQ6XFx0ICogSWYgZm9saW8gd2FzIG1hcmtlZCBhcyBkcm9wYmVoaW5kLCB0aGVuIHBhZ2VzIHNob3VsZCBiZSBkcm9wcGVkIHdoZW4gd3JpdGViYWNrXFxuMTYyNTpcXHQgKiBjb21wbGV0ZXMuIERvIHRoYXQgbm93LiBJZiB3ZSBmYWlsLCBpdCdzIGxpa2VseSBiZWNhdXNlIG9mIGEgYmlnIGZvbGlvIC1cXG4xNjI2OlxcdCAqIGp1c3QgcmVzZXQgZHJvcGJlaGluZCBmb3IgdGhhdCBjYXNlIGFuZCBsYXR0ZXIgY29tcGxldGlvbnMgc2hvdWxkIGludmFsaWRhdGUuXFxuMTYyNzpcXHQgKi9cXG4xNjI4OlxcdHZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4xNjI5OlxcdHtcXG4xNjMwOlxcdFxcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG4xNjMxOlxcdFxcdFxcdHJldHVybjtcXG4xNjMyOlxcdFxcbjE2MzM6XFx0XFx0LypcXG4xNjM0OlxcdFxcdCAqIEhpdHRpbmcgIWluX3Rhc2soKSBzaG91bGQgbm90IGhhcHBlbiBvZmYgUldGX0RPTlRDQUNIRSB3cml0ZWJhY2ssXFxuMTYzNTpcXHRcXHQgKiBidXQgY2FuIGhhcHBlbiBpZiBub3JtYWwgd3JpdGViYWNrIGp1c3QgaGFwcGVucyB0byBmaW5kIGRpcnR5IGZvbGlvc1xcbjE2MzY6XFx0XFx0ICogdGhhdCB3ZXJlIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2ssIGFuZCB0aGF0IHdyaXRlYmFja1xcbjE2Mzc6XFx0XFx0ICogd291bGQgb3RoZXJ3aXNlIG5vdCBuZWVkIG5vbi1JUlEgaGFuZGxpbmcuIEp1c3Qgc2tpcCB0aGVcXG4xNjM4OlxcdFxcdCAqIGludmFsaWRhdGlvbiBpbiB0aGF0IGNhc2UuXFxuMTYzOTpcXHRcXHQgKi9cXG4xNjQwOlxcdFxcdGlmIChpbl90YXNrKCkgXFx1MDAyNlxcdTAwMjYgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG4xNjQxOlxcdFxcdFxcdGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xcbjE2NDI6XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4xNjQzOlxcdFxcdH1cXG4xNjQ0OlxcdH1cXG4xNjQ1OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF9kcm9wYmVoaW5kKTtcXG4xNjQ2OlxcdFxcbjE2NDc6XFx0LyoqXFxuMTY0ODpcXHQgKiBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQgLSBFbmQgd3JpdGViYWNrIGFnYWluc3QgYSBmb2xpby5cXG4xNjQ5OlxcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzo1NjowNi4yMDg3ODEwMTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzE4ODI0ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIERyb3BiZWhpbmQgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAsIGBmb2xpb19lbmRfZHJvcGJlaGluZGAsIGFuZCB0aGF0IGBSV0ZfRE9OVENBQ0hFYCBmbGFnLiBNeSBnb2FsIGhlcmUgaXMgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IGRyb3BiZWhpbmQgd29ya3MgYXQgdGhlIGZpbGUgc3lzdGVtIGFuZCBmb2xpbyBsZXZlbHMsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gY2FjaGUgbWFuYWdlbWVudC4gSSdtIGdvaW5nIHRvIGZpcmUgdXAgdGhlIGdyZXBwZXIgYW5kIHJ1biBpdCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgdG8gc2VlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIGBkcm9wYmVoaW5kYCB0ZXJtaW5vbG9neSBhcmUgYWN0dWFsbHkgdXNlZC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIG92ZXJhbGwgdXNlIHdpdGhpbiB0aGUgcmVsZXZhbnQgZmlsZSBzeXN0ZW0gY29kZSB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHJlYWQgYW5kIHdyaXRlIGNhY2hpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNzYsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU2OjA4LjkyNzYwODY2NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc5MDk0NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRyb3BiZWhpbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYnVmZmVyLmM9MTA4NT1zdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxcbi0tXFxuZnMvYnVmZmVyLmMtMTEwOS1cXG5mcy9idWZmZXIuYzoxMTEwOlxcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXFx1MDAzZWJfZm9saW8pIFxcdTAwMjZcXHUwMDI2IG9wX2lzX3dyaXRlKG9wZikpXFxuZnMvYnVmZmVyLmMtMTExMS1cXHRcXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYz00MDU9c3RhdGljIGJvb2wgaW5vZGVfZG9fc3dpdGNoX3dicyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtNDM1LVxcdFxcdFxcdHdiX3N0YXRfbW9kKG5ld193YiwgV0JfUkVDTEFJTUFCTEUsIG5yKTtcXG5mcy9mcy13cml0ZWJhY2suYzo0MzY6XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpIHtcXG5mcy9mcy13cml0ZWJhY2suYy00MzctXFx0XFx0XFx0XFx0d2Jfc3RhdF9tb2Qob2xkX3diLCBXQl9ET05UQ0FDSEVfRElSVFksIC1ucik7XFxuLS1cXG5mcy9pb21hcC9pb2VuZC5jPTIxMz1zc2l6ZV90IGlvbWFwX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvaW9tYXAvaW9lbmQuYy0yNTctXFxuZnMvaW9tYXAvaW9lbmQuYzoyNTg6XFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxuZnMvaW9tYXAvaW9lbmQuYy0yNTktXFx0XFx0YmlvX3NldF9mbGFnKFxcdTAwMjZpb2VuZC1cXHUwMDNlaW9fYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XFxuLS1cXG5mcy9uZnMvZmlsZS5jPTM2MD1zdGF0aWMgYm9vbCBuZnNfd2FudF9yZWFkX21vZGlmeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL25mcy9maWxlLmMtMzcyLVxcdFxcdHJldHVybiB0cnVlO1xcbmZzL25mcy9maWxlLmM6MzczOlxcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxcbmZzL25mcy9maWxlLmMtMzc0LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmZzL25mcy9maWxlLmM9Mzg5PXN0YXRpYyBpbnQgbmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4tLVxcbmZzL25mcy9maWxlLmMtNDE5LVxcdFxcdG9uY2VfdGhydSA9IDE7XFxuZnMvbmZzL2ZpbGUuYzo0MjA6XFx0XFx0Zm9saW9fY2xlYXJfZHJvcGJlaGluZChmb2xpbyk7XFxuZnMvbmZzL2ZpbGUuYy00MjEtXFx0XFx0cmV0ID0gbmZzX3JlYWRfZm9saW8oZmlsZSwgZm9saW8pO1xcbi0tXFxuZnMvbmZzL3dyaXRlLmM9Mjk1PXN0YXRpYyB2b2lkIG5mc19mb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9uZnMvd3JpdGUuYy0yOTgtXFxuZnMvbmZzL3dyaXRlLmM6Mjk5OlxcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XFxuZnMvbmZzL3dyaXRlLmMtMzAwLVxcdGlmIChhdG9taWNfbG9uZ19kZWNfcmV0dXJuKFxcdTAwMjZuZnNzLVxcdTAwM2V3cml0ZWJhY2spIFxcdTAwM2NcXG4tLVxcbmZzL25mcy93cml0ZS5jPTczNT1zdGF0aWMgdm9pZCBuZnNfaW5vZGVfcmVtb3ZlX3JlcXVlc3Qoc3RydWN0IG5mc19wYWdlICpyZXEpXFxuLS1cXG5mcy9uZnMvd3JpdGUuYy03NTEtXFxuZnMvbmZzL3dyaXRlLmM6NzUyOlxcdFxcdFxcdGZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcXG5mcy9uZnMvd3JpdGUuYy03NTMtXFx0XFx0fVxcbi0tXFxuZnMvbmZzZC9kZWJ1Z2ZzLmM9Mzk9REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKG5mc2RfZHNyX2ZvcHMsIG5mc2RfZHNyX2dldCwgbmZzZF9kc3Jfc2V0LCBcXFwiJWxsdVxcXFxuXFxcIik7XFxuLS1cXG5mcy9uZnNkL2RlYnVnZnMuYy00NS0gKiAgICUwOiBORlMgUkVBRCB3aWxsIHVzZSBidWZmZXJlZCBJT1xcbmZzL25mc2QvZGVidWdmcy5jOjQ2OiAqICAgJTE6IE5GUyBSRUFEIHdpbGwgdXNlIGRvbnRjYWNoZSAoYnVmZmVyZWQgSU8gdy8gZHJvcGJlaGluZClcXG5mcy9uZnNkL2RlYnVnZnMuYy00Ny0gKiAgICUyOiBORlMgUkVBRCB3aWxsIHVzZSBkaXJlY3QgSU9cXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jPTg0PURFRklORV9ERUJVR0ZTX0FUVFJJQlVURShuZnNkX2lvX2NhY2hlX3JlYWRfZm9wcywgbmZzZF9pb19jYWNoZV9yZWFkX2dldCxcXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jLTkxLSAqICAgJTA6IE5GUyBXUklURSB3aWxsIHVzZSBidWZmZXJlZCBJT1xcbmZzL25mc2QvZGVidWdmcy5jOjkyOiAqICAgJTE6IE5GUyBXUklURSB3aWxsIHVzZSBkb250Y2FjaGUgKGJ1ZmZlcmVkIElPIHcvIGRyb3BiZWhpbmQpXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtOTMtICpcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTkzPWVudW0gcGFnZWZsYWdzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTExMi1cXHRQR191bmV2aWN0YWJsZSxcXHRcXHQvKiBQYWdlIGlzIFxcXCJ1bmV2aWN0YWJsZVxcXCIgICovXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTEzOlxcdFBHX2Ryb3BiZWhpbmQsXFx0XFx0LyogZHJvcCBwYWdlcyBvbiBJTyBjb21wbGV0aW9uICovXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTE0LSNpZmRlZiBDT05GSUdfTU1VXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD01OTg9Rk9MSU9fRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTYwMC1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2MDE6Rk9MSU9fRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NjAyOlxcdEZPTElPX1RFU1RfQ0xFQVJfRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NjAzOlxcdF9fRk9MSU9fU0VUX0ZMQUcoZHJvcGJlaGluZCwgRk9MSU9fSEVBRF9QQUdFKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTYwNC1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTEzMTA9dm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjEzMTE6dm9pZCBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTMxMjp2b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTEzMTMtdm9pZCBmb2xpb193YWl0X3N0YWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTE0MDg9c3RydWN0IHJlYWRhaGVhZF9jb250cm9sIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MTUtXFx0dW5zaWduZWQgaW50IF9iYXRjaF9jb3VudDtcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxNDE2OlxcdGJvb2wgZHJvcGJlaGluZDtcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDE3LVxcdGJvb2wgX3dvcmtpbmdzZXQ7XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmg9Njk9VFJBQ0VfREVGSU5FX0VOVU0oX19fR0ZQX0xBU1RfQklUKTtcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaC0xNTMtXFx0REVGX1BBR0VGTEFHX05BTUUodW5ldmljdGFibGUpLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmg6MTU0OlxcdERFRl9QQUdFRkxBR19OQU1FKGRyb3BiZWhpbmQpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaC0xNTUtSUZfSEFWRV9QR19NTE9DSyhtbG9ja2VkKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbm1tL2ZpbGVtYXAuYz0xNjA3PUVYUE9SVF9TWU1CT0woZm9saW9fd2FpdF9wcml2YXRlXzJfa2lsbGFibGUpO1xcbm1tL2ZpbGVtYXAuYy0xNjA4LVxcbm1tL2ZpbGVtYXAuYzoxNjA5OnN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9maWxlbWFwLmMtMTYxMC17XFxuLS1cXG5tbS9maWxlbWFwLmMtMTYxNi1cXHRcXHRyZXR1cm47XFxubW0vZmlsZW1hcC5jOjE2MTc6XFx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKVxcbm1tL2ZpbGVtYXAuYy0xNjE4LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjIzLS8qXFxubW0vZmlsZW1hcC5jOjE2MjQ6ICogSWYgZm9saW8gd2FzIG1hcmtlZCBhcyBkcm9wYmVoaW5kLCB0aGVuIHBhZ2VzIHNob3VsZCBiZSBkcm9wcGVkIHdoZW4gd3JpdGViYWNrXFxubW0vZmlsZW1hcC5jLTE2MjUtICogY29tcGxldGVzLiBEbyB0aGF0IG5vdy4gSWYgd2UgZmFpbCwgaXQncyBsaWtlbHkgYmVjYXVzZSBvZiBhIGJpZyBmb2xpbyAtXFxubW0vZmlsZW1hcC5jOjE2MjY6ICoganVzdCByZXNldCBkcm9wYmVoaW5kIGZvciB0aGF0IGNhc2UgYW5kIGxhdHRlciBjb21wbGV0aW9ucyBzaG91bGQgaW52YWxpZGF0ZS5cXG5tbS9maWxlbWFwLmMtMTYyNy0gKi9cXG5tbS9maWxlbWFwLmM6MTYyODp2b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZmlsZW1hcC5jLTE2Mjkte1xcbm1tL2ZpbGVtYXAuYzoxNjMwOlxcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG5tbS9maWxlbWFwLmMtMTYzMS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9maWxlbWFwLmMtMTY0MC1cXHRpZiAoaW5fdGFzaygpIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxubW0vZmlsZW1hcC5jOjE2NDE6XFx0XFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jLTE2NDItXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjQ0LX1cXG5tbS9maWxlbWFwLmM6MTY0NTpFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfZHJvcGJlaGluZCk7XFxubW0vZmlsZW1hcC5jLTE2NDYtXFxubW0vZmlsZW1hcC5jLTE2NDctLyoqXFxubW0vZmlsZW1hcC5jOjE2NDg6ICogZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kIC0gRW5kIHdyaXRlYmFjayBhZ2FpbnN0IGEgZm9saW8uXFxubW0vZmlsZW1hcC5jLTE2NDktICogQGZvbGlvOiBUaGUgZm9saW8uXFxuLS1cXG5tbS9maWxlbWFwLmMtMTY1MS0gKiBUaGUgZm9saW8gbXVzdCBhY3R1YWxseSBiZSB1bmRlciB3cml0ZWJhY2suXFxubW0vZmlsZW1hcC5jOjE2NTI6ICogVGhpcyBjYWxsIGlzIGludGVuZGVkIGZvciBmaWxlc3lzdGVtcyB0aGF0IG5lZWQgdG8gZGVmZXIgZHJvcGJlaGluZC5cXG5tbS9maWxlbWFwLmMtMTY1My0gKlxcbi0tXFxubW0vZmlsZW1hcC5jLTE2NTUtICovXFxubW0vZmlsZW1hcC5jOjE2NTY6dm9pZCBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9maWxlbWFwLmMtMTY1Ny17XFxuLS1cXG5tbS9maWxlbWFwLmMtMTY3Ni19XFxubW0vZmlsZW1hcC5jOjE2Nzc6RVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcXG5tbS9maWxlbWFwLmMtMTY3OC1cXG4tLVxcbm1tL2ZpbGVtYXAuYz0xNjg3PXZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTE2OTctXFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG5tbS9maWxlbWFwLmM6MTY5ODpcXHRmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYzoxNjk5OlxcdGZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcXG5tbS9maWxlbWFwLmMtMTcwMC1cXHRmb2xpb19wdXQoZm9saW8pO1xcbi0tXFxubW0vZmlsZW1hcC5jPTE5NDc9c3RydWN0IGZvbGlvICpfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2woc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9maWxlbWFwLmMtMjAyNS1cXHRcXHRcXHRpZiAoZmdwX2ZsYWdzIFxcdTAwMjYgRkdQX0RPTlRDQUNIRSlcXG5tbS9maWxlbWFwLmM6MjAyNjpcXHRcXHRcXHRcXHRfX2ZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcXG5tbS9maWxlbWFwLmMtMjAyNy1cXG4tLVxcbm1tL2ZpbGVtYXAuYy0yMDYwLVxcdC8qIG5vdCBhbiB1bmNhY2hlZCBsb29rdXAsIGNsZWFyIHVuY2FjaGVkIGlmIHNldCAqL1xcbm1tL2ZpbGVtYXAuYzoyMDYxOlxcdGlmICghKGZncF9mbGFncyBcXHUwMDI2IEZHUF9ET05UQ0FDSEUpIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpIHtcXG5tbS9maWxlbWFwLmMtMjA2Mi1cXHRcXHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL2ZpbGVtYXAuYz0yNjE5PXN0YXRpYyBpbnQgZmlsZW1hcF9jcmVhdGVfZm9saW8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaClcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yNjMzLVxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRE9OVENBQ0hFKVxcbm1tL2ZpbGVtYXAuYzoyNjM0OlxcdFxcdF9fZm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYy0yNjM1LVxcbi0tXFxubW0vZmlsZW1hcC5jPTI2NzI9c3RhdGljIGludCBmaWxlbWFwX3JlYWRhaGVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxubW0vZmlsZW1hcC5jLTI2ODAtXFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9ET05UQ0FDSEUpXFxubW0vZmlsZW1hcC5jOjI2ODE6XFx0XFx0cmFjdGwuZHJvcGJlaGluZCA9IDE7XFxubW0vZmlsZW1hcC5jLTI2ODItXFx0cGFnZV9jYWNoZV9hc3luY19yYShcXHUwMDI2cmFjdGwsIGZvbGlvLCBsYXN0X2luZGV4IC0gZm9saW8tXFx1MDAzZWluZGV4KTtcXG4tLVxcbm1tL2ZpbGVtYXAuYz0yNjg2PXN0YXRpYyBpbnQgZmlsZW1hcF9nZXRfcGFnZXMoc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgY291bnQsXFxuLS1cXG5tbS9maWxlbWFwLmMtMjcxMi1cXHRcXHRpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RPTlRDQUNIRSlcXG5tbS9maWxlbWFwLmM6MjcxMzpcXHRcXHRcXHRyYWN0bC5kcm9wYmVoaW5kID0gMTtcXG5tbS9maWxlbWFwLmMtMjcxNC1cXHRcXHRwYWdlX2NhY2hlX3N5bmNfcmEoXFx1MDAyNnJhY3RsLCBsYXN0X2luZGV4IC0gaW5kZXgpO1xcbi0tXFxubW0vZmlsZW1hcC5jPTI3NTU9c3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yNzYxLVxcbm1tL2ZpbGVtYXAuYzoyNzYyOnN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZpbGVtYXAuYy0yNzYzLXtcXG5tbS9maWxlbWFwLmM6Mjc2NDpcXHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxubW0vZmlsZW1hcC5jLTI3NjUtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZmlsZW1hcC5jLTI3NjgtXFx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxubW0vZmlsZW1hcC5jOjI3Njk6XFx0XFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jLTI3NzAtXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tLVxcbm1tL2ZpbGVtYXAuYz0yNzg3PXNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxubW0vZmlsZW1hcC5jLTI4ODktXFxubW0vZmlsZW1hcC5jOjI4OTA6XFx0XFx0XFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKGZvbGlvKTtcXG5tbS9maWxlbWFwLmMtMjg5MS1cXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi0tXFxubW0vZm9saW8uYz00MjI9dm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZm9saW8uYy00MjMte1xcbm1tL2ZvbGlvLmM6NDI0OlxcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxcbm1tL2ZvbGlvLmMtNDI1LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzY4NT1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM3NDQtXFx0XFx0XFx0XFx0ICgxTCBcXHUwMDNjXFx1MDAzYyBQR19kaXJ0eSkgfFxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzc0NTpcXHRcXHRcXHRcXHQgKDFMIFxcdTAwM2NcXHUwMDNjIFBHX2Ryb3BiZWhpbmQpIHxcXG5tbS9odWdlX21lbW9yeS5jLTM3NDYtXFx0XFx0XFx0XFx0IExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX01BU0spKTtcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmM9MjYwMz1zdGF0aWMgdm9pZCBmb2xpb19hY2NvdW50X2RpcnRpZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjYxNy1cXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfRElSVFksIG5yKTtcXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI2MTg6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxubW0vcGFnZS13cml0ZWJhY2suYy0yNjE5LVxcdFxcdFxcdHdiX3N0YXRfbW9kKHdiLCBXQl9ET05UQ0FDSEVfRElSVFksIG5yKTtcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmM9MjYzNj12b2lkIGZvbGlvX2FjY291bnRfY2xlYW5lZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2NDAtXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX0RJUlRZLCAtbnIpO1xcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjY0MTpcXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2NDItXFx0XFx0d2Jfc3RhdF9tb2Qod2IsIFdCX0RPTlRDQUNIRV9ESVJUWSwgLW5yKTtcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmM9Mjg2Nj1ib29sIGZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYy0yOTE2LVxcdFxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9ESVJUWSwgLW5yKTtcXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI5MTc6XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxubW0vcGFnZS13cml0ZWJhY2suYy0yOTE4LVxcdFxcdFxcdFxcdHdiX3N0YXRfbW9kKHdiLCBXQl9ET05UQ0FDSEVfRElSVFksIC1ucik7XFxuLS1cXG5tbS9yZWFkYWhlYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBmb2xpbyAqcmFjdGxfYWxsb2NfZm9saW8oc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTIwMC1cXHRmb2xpbyA9IGZpbGVtYXBfYWxsb2NfZm9saW8oZ2ZwX21hc2ssIG9yZGVyLCBOVUxMKTtcXG5tbS9yZWFkYWhlYWQuYzoyMDE6XFx0aWYgKGZvbGlvIFxcdTAwMjZcXHUwMDI2IHJhY3RsLVxcdTAwM2Vkcm9wYmVoaW5kKVxcbm1tL3JlYWRhaGVhZC5jOjIwMjpcXHRcXHRfX2ZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcXG5tbS9yZWFkYWhlYWQuYy0yMDMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU2OjEwLjcwNjcwOTExOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1MTE1NzIyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb21taXQ6IEEgRm9saW8ncyBKb3VybmV5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29tbWl0LiBUaGUgY29yZSBmdW5jdGlvbiBpcyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZC4gVGhlIGRpZmYgc2hvd3MgYSBzdWJ0bGUsIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwsIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIGBpZmAgc3RhdGVtZW50LiBQcmV2aW91c2x5LCBpdCBsb29rZWQgbGlrZSB0aGlzOiBgaWYgKG1hcHBpbmcpYC4gTm93LCBpdCdzIGBpZiAobWFwcGluZyBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpYC5cblxuU28sIHRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIHVubWFwIGFuZCBpbnZhbGlkYXRlIGEgZm9saW8gaWYgdGhlIGBtYXBwaW5nYCB3YXNuJ3QgTlVMTC4gVGhlIG5ldyBjaGVjayBhZGRzIGFuIGV4dHJhIHJlcXVpcmVtZW50OiB0aGUgZm9saW8gKm11c3Qgbm90KiBiZSBtYXBwZWQuIEludGVyZXN0aW5nLiBUaGlzIGxpa2VseSBhaW1zIHRvIHByZXZlbnQgaW52YWxpZGF0aW5nIHBhZ2VzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZWx5IGluIHVzZSwgcG90ZW50aWFsbHkgaW1wcm92aW5nIHBlcmZvcm1hbmNlIG9yIHByZXZlbnRpbmcgZGF0YSBjb3JydXB0aW9uLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayB3aGF0IGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBkb2VzLCBhcyBpdCBzZWVtcyBsaWtlIGl0cyBiZWhhdmlvciBub3cgaGluZ2VzIG9uIHRoaXMgYGZvbGlvX21hcHBlZGAgY2hlY2suIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgdGhpcyBpbXBhY3RzIHBhZ2UgcmVjbGFpbSBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDIzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU2OjE2LjIxODI4MzUwNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAyNTgyMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3VubWFwX2ludmFsaWRhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZmlsZW1hcC5jPTE2MDk9c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTE2MTktXFx0aWYgKG1hcHBpbmcgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXFxubW0vZmlsZW1hcC5jOjE2MjA6XFx0XFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XFxubW0vZmlsZW1hcC5jLTE2MjEtfVxcbi0tXFxubW0vaW50ZXJuYWwuaD01OTc9aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbm1tL2ludGVybmFsLmg6NTk4OmludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL2ludGVybmFsLmgtNTk5LVxcdFxcdFxcdCAgIGdmcF90IGdmcCk7XFxuLS1cXG5tbS90cnVuY2F0ZS5jPTYwNj1zdGF0aWMgaW50IGZvbGlvX2xhdW5kZXIoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTYyMS0gKi9cXG5tbS90cnVuY2F0ZS5jOjYyMjppbnQgZm9saW9fdW5tYXBfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS90cnVuY2F0ZS5jLTYyMy1cXHRcXHRcXHQgICBnZnBfdCBnZnApXFxuLS1cXG5tbS90cnVuY2F0ZS5jPTY3Nj1pbnQgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTcyNS1cXHRcXHRcXHRmb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbyk7XFxubW0vdHJ1bmNhdGUuYzo3MjY6XFx0XFx0XFx0cmV0MiA9IGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIEdGUF9LRVJORUwpO1xcbm1tL3RydW5jYXRlLmMtNzI3LVxcdFxcdFxcdGlmIChyZXQyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTY6MTcuOTIwODcyMzU1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgxODU1OTg0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoZSBmb2xpbyB1bm1hcCBhbmQgaW52YWxpZGF0aW9uIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCB3aXRoaW4gYG1tL3RydW5jYXRlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSBrZXJuZWwgYWN0dWFsbHkgZGVhbHMgd2l0aCB0aGUgbml0dHktZ3JpdHR5IG9mIHJlbW92aW5nIHBhZ2UgbWFwcGluZ3MgYW5kIHBvdGVudGlhbGx5IGludmFsaWRhdGluZyBkYXRhIGR1cmluZyBhIHRydW5jYXRpb24gb3BlcmF0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIHRlYXJpbmcgZG93biBwYWdlIHRhYmxlcyBhbmQgaGFuZGxpbmcgYW55IG5lY2Vzc2FyeSBjYWNoZSBjb2hlcmVuY2UuIEknbGwgYmUgbG9va2luZyB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMsIGxpa2UgdGhlIHBhZ2UgY2FjaGUsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBrZWVwIGluIG1pbmQuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIxNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU2OjM2LjEwNjQ3NTY4OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdHJ1bmNhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MjA6XFx0ICogc2l0dGluZyBpbiB0aGUgZm9saW9fYWRkX2xydSgpIGNhY2hlcy5cXG4gNjIxOlxcdCAqL1xcbiA2MjI6XFx0aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIDYyMzpcXHRcXHRcXHRcXHQgICBnZnBfdCBnZnApXFxuIDYyNDpcXHR7XFxuIDYyNTpcXHRcXHR2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopO1xcbiA2MjY6XFx0XFx0aW50IHJldDtcXG4gNjI3OlxcdFxcbiA2Mjg6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcXG4gNjI5OlxcdFxcbiA2MzA6XFx0XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpXFxuIDYzMTpcXHRcXHRcXHR1bm1hcF9tYXBwaW5nX2ZvbGlvKGZvbGlvKTtcXG4gNjMyOlxcdFxcdEJVR19PTihmb2xpb19tYXBwZWQoZm9saW8pKTtcXG4gNjMzOlxcdFxcbiA2MzQ6XFx0XFx0cmV0ID0gZm9saW9fbGF1bmRlcihtYXBwaW5nLCBmb2xpbyk7XFxuIDYzNTpcXHRcXHRpZiAocmV0KVxcbiA2MzY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNjM3OlxcdFxcdGlmIChmb2xpby1cXHUwMDNlbWFwcGluZyAhPSBtYXBwaW5nKVxcbiA2Mzg6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNjM5OlxcdFxcdGlmICghZmlsZW1hcF9yZWxlYXNlX2ZvbGlvKGZvbGlvLCBnZnApKVxcbiA2NDA6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNjQxOlxcdFxcbiA2NDI6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZtYXBwaW5nLVxcdTAwM2Vob3N0LVxcdTAwM2VpX2xvY2spO1xcbiA2NDM6XFx0XFx0eGFfbG9ja19pcnEoXFx1MDAyNm1hcHBpbmctXFx1MDAzZWlfcGFnZXMpO1xcbiA2NDQ6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxcbiA2NDU6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuIDY0NjpcXHRcXG4gNjQ3OlxcdFxcdEJVR19PTihmb2xpb19oYXNfcHJpdmF0ZShmb2xpbykpO1xcbiA2NDg6XFx0XFx0X19maWxlbWFwX3JlbW92ZV9mb2xpbyhmb2xpbywgTlVMTCk7XFxuIDY0OTpcXHRcXHR4YV91bmxvY2tfaXJxKFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzKTtcXG4gNjUwOlxcdFxcdGlmIChtYXBwaW5nX3Nocmlua2FibGUobWFwcGluZykpXFxuIDY1MTpcXHRcXHRcXHRpbm9kZV9scnVfbGlzdF9hZGQobWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuIDY1MjpcXHRcXHRmcmVlX2ZvbGlvID0gbWFwcGluZy1cXHUwMDNlYV9vcHMtXFx1MDAzZWZyZWVfZm9saW87XFxuIDY1MzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bWFwcGluZy1cXHUwMDNlaG9zdC1cXHUwMDNlaV9sb2NrKTtcXG4gNjU0OlxcdFxcbiA2NTU6XFx0XFx0aWYgKGZyZWVfZm9saW8pXFxuIDY1NjpcXHRcXHRcXHRmcmVlX2ZvbGlvKGZvbGlvKTtcXG4gNjU3OlxcdFxcdGZvbGlvX3B1dF9yZWZzKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbiA2NTg6XFx0XFx0cmV0dXJuIDE7XFxuIDY1OTpcXHRmYWlsZWQ6XFxuIDY2MDpcXHRcXHR4YV91bmxvY2tfaXJxKFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzKTtcXG4gNjYxOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtYXBwaW5nLVxcdTAwM2Vob3N0LVxcdTAwM2VpX2xvY2spO1xcbiA2NjI6XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNjYzOlxcdH1cXG4gNjY0OlxcdFxcbiA2NjU6XFx0LyoqXFxuIDY2NjpcXHQgKiBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSAtIHJlbW92ZSByYW5nZSBvZiBwYWdlcyBmcm9tIGFuIGFkZHJlc3Nfc3BhY2VcXG4gNjY3OlxcdCAqIEBtYXBwaW5nOiB0aGUgYWRkcmVzc19zcGFjZVxcbiA2Njg6XFx0ICogQHN0YXJ0OiB0aGUgcGFnZSBvZmZzZXQgJ2Zyb20nIHdoaWNoIHRvIGludmFsaWRhdGVcXG4gNjY5OlxcdCAqIEBlbmQ6IHRoZSBwYWdlIG9mZnNldCAndG8nIHdoaWNoIHRvIGludmFsaWRhdGUgKGluY2x1c2l2ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTY6MzYuMTA2NjYxNDg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4ODk4NzA2NzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIEZpbGVtYXAgRHJvcGJlaGluZCBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAuIFNwZWNpZmljYWxseSwgaWYgYSBmb2xpbyBpc24ndCBtYXBwZWQsIHRoZW4gd2UgY2FsbCB0aGUgdW5tYXAgZnVuY3Rpb24uIEJ1dCwgaWYgaXQgKmlzKiBtYXBwZWQsIHRoZW4gd2Ugc2tpcCB0aGUgY2FsbC4gVGhlIHJlYXNvbiBpcyB0aGF0IHVubWFwcGluZyBhIGZvbGlvIHRoYXQncyBtYXBwZWQgaW4gdXNlcnNwYWNlIChsaWtlIHRocm91Z2ggYG1tYXBgKSBkdXJpbmcgdGhlIGRyb3BiZWhpbmQgcHJvY2VzcyBjb3VsZCBiZSBleHBlbnNpdmUsIGNhdXNlIHByb2JsZW1zLCBvciBpbnRyb2R1Y2UgbG9jayBpbnZlcnNpb24uIE1ha2VzIHNlbnNlLiBJdCdzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhdm9pZGluZyB0aGUgb3ZlcmhlYWQgd2hlbiB0aGUgZm9saW8gaXMgbWFwcGVkLlxuXG5UaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgb3B0aW1pemF0aW9uIHdvcnRoeSBvZiBmdXp6aW5nPyBMZXQncyBicmVhayBpdCBkb3duIHVzaW5nIG15IGNyaXRlcmlhIGZvciBkZXRlcm1pbmluZyBmdXp6aW5nIHdvcnRoaW5lc3MuXG5cbkZpcnN0LCBpcyB0aGlzIGp1c3QgZG9jcywgbG9nZ2luZywgb3IgdHJpdmlhbCBjaGFuZ2VzPyBOby4gSXQgdG91Y2hlcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGBtbS9maWxlbWFwLmNgLCBhbmQgdGhlIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCBmdW5jdGlvbiwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIGRyb3BiZWhpbmQgb3B0aW1pemF0aW9uLiBJdCBpcyBub3QgY29zbWV0aWMuXG5cblNlY29uZCwgZG9lcyBpdCB0b3VjaCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gSS9PIG9wZXJhdGlvbnMgbGlrZSBgcmVhZGAsIGB3cml0ZWAgd2l0aCBgUldGX0RPTlRDQUNIRWAsIG9yIGBwb3NpeF9mYWR2aXNlYCwgb3IgdW5jYWNoZWQgSS9PLCBvciBidWZmZXJlZCBJL08gY291cGxlZCB3aXRoIGBtbWFwYCBhbGwgY2FuIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbkdpdmVuIHRoYXQgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgY2FuIGJlIHRlc3RlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIEknbSBnb2luZyB0byBzYXkgYFdvcnRoRnV6emluZyA9IHRydWVgLiBUaGlzIGlzIGEgY2xlYXIgY2FzZSBmb3IgaXQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZnV6emluZyB0YXJnZXQuIFdoYXQgZnVuY3Rpb25zIG5lZWQgdG8gYmUgZnV6emVkPyBMZXQncyBmaW5kIHRob3NlIHRoYXQgYXJlIHJlbGF0ZWQgdG8gYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgLiBJIGtub3cgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgIGlzIHN0YXRpYywgYnV0IGxldCdzIHNlZSB3aGljaCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSBpdCBvciBjYWxsIGl0LCBhbmQgd2hpY2ggb2YgdGhvc2UgYXJlIG5vdCBzdGF0aWMuXG5cblRoZSBmb2xsb3dpbmcgY2FsbCBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGA6XG4qICAgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCB3aGljaCBpcyBleHBvcnRlZC5cbiogICBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkYCB3aGljaCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgZmlsZW1hcF9yZWFkYC5cbiogICBgZm9saW9fZW5kX3dyaXRlYmFja2AgaXMgZXhwb3J0ZWQuXG4qICAgYGZpbGVtYXBfcmVhZGAgd2hpY2ggdGFrZXMgYXJndW1lbnRzIGFuZCByZXR1cm5zIGEgYHNzaXplX3RgLlxuKiAgIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCB3aGljaCBjYWxscyBgZmlsZW1hcF9yZWFkYC5cblxuU28sIHRoZSBmb2N1cyBzeW1ib2xzIHdvdWxkIGJlIGBmb2xpb19lbmRfZHJvcGJlaGluZGAsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYW5kIGBmaWxlbWFwX3JlYWRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjIwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTc6MDUuMDA1MzcwOTcxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2NzkxMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX2VuZF9kcm9wYmVoaW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mcy93cml0ZS5jPTczNT1zdGF0aWMgdm9pZCBuZnNfaW5vZGVfcmVtb3ZlX3JlcXVlc3Qoc3RydWN0IG5mc19wYWdlICpyZXEpXFxuLS1cXG5mcy9uZnMvd3JpdGUuYy03NTEtXFxuZnMvbmZzL3dyaXRlLmM6NzUyOlxcdFxcdFxcdGZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcXG5mcy9uZnMvd3JpdGUuYy03NTMtXFx0XFx0fVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTMxMT12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxMzEyOnZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTMxMy12b2lkIGZvbGlvX3dhaXRfc3RhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi0tXFxubW0vZmlsZW1hcC5jPTE2MDk9c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTE2MjctICovXFxubW0vZmlsZW1hcC5jOjE2Mjg6dm9pZCBmb2xpb19lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZpbGVtYXAuYy0xNjI5LXtcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjQ0LX1cXG5tbS9maWxlbWFwLmM6MTY0NTpFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfZHJvcGJlaGluZCk7XFxubW0vZmlsZW1hcC5jLTE2NDYtXFxuLS1cXG5tbS9maWxlbWFwLmM9MTY4Nz12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjk4LVxcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jOjE2OTk6XFx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYy0xNzAwLVxcdGZvbGlvX3B1dChmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU3OjA2LjYzMjE2ODk4NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NzM5OTk4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRHJvcGJlaGluZCBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgaG93IHRoaXMgXCJkcm9wYmVoaW5kXCIgZnVuY3Rpb25hbGl0eSBpcyBpbml0aWF0ZWQgYW5kLCB1bHRpbWF0ZWx5LCBhY3RpdmF0ZWQgd2l0aGluIHRoZSBzeXN0ZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjb3JlIG1lY2hhbmlzbXMuIEEgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGZpbGUgSS9PLCBpcyB0aGUgYGZpbGVtYXBfcmVhZGAgZnVuY3Rpb24uIEl04oCZcyBhIGZvdW5kYXRpb25hbCBwaWVjZSBmb3IgcmVhZGluZyBkYXRhIGZyb20gZmlsZXMsIHNvIEkgc3VzcGVjdCBpdCBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBtYW5hZ2luZyB0aGUgY2FjaGluZyBhbmQgZXZpY3Rpb24gYmVoYXZpb3IgdGhhdCB1bmRlcnBpbnMgZHJvcGJlaGluZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB2YXJpYWJsZXMgYW5kIGNvbmRpdGlvbnMgd2l0aGluIGBmaWxlbWFwX3JlYWRgIGFyZSByZXNwb25zaWJsZSBmb3IgbWFya2luZyBwYWdlcyBmb3IgcG90ZW50aWFsIGRyb3BwaW5nLCBhbmQgdGhlIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggdGhpcyBcImRyb3BiZWhpbmRcIiBmbGFnIGlzIGFjdHVhbGx5IHNldC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBkZXRlcm1pbmVzIHdoZXRoZXIgdG8ga2VlcCBhIHBhZ2UgaW4gdGhlIGNhY2hlIG9yIHByaW9yaXRpemUgaXRzIGV2aWN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHByb2JsZW1zKSBsaWtlbHkgbGllcy4gTGV0J3Mgc2VlIHdoYXQgYGZpbGVtYXBfcmVhZGAgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzo1NzoxNi4zNzIxNzAwMzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ZpbGVtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODgwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODgwOlxcdFxcbjI4ODE6XFx0XFx0XFx0XFx0aWYgKGNvcGllZCBcXHUwMDNjIGJ5dGVzKSB7XFxuMjg4MjpcXHRcXHRcXHRcXHRcXHRlcnJvciA9IC1FRkFVTFQ7XFxuMjg4MzpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yODg0OlxcdFxcdFxcdFxcdH1cXG4yODg1OlxcdFxcdFxcdH1cXG4yODg2OlxcdHB1dF9mb2xpb3M6XFxuMjg4NzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZm9saW9fYmF0Y2hfY291bnQoXFx1MDAyNmZiYXRjaCk7IGkrKykge1xcbjI4ODg6XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGZiYXRjaC5mb2xpb3NbaV07XFxuMjg4OTpcXHRcXG4yODkwOlxcdFxcdFxcdFxcdGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChmb2xpbyk7XFxuMjg5MTpcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjI4OTI6XFx0XFx0XFx0fVxcbjI4OTM6XFx0XFx0XFx0Zm9saW9fYmF0Y2hfaW5pdChcXHUwMDI2ZmJhdGNoKTtcXG4yODk0OlxcdFxcdH0gd2hpbGUgKGlvdl9pdGVyX2NvdW50KGl0ZXIpIFxcdTAwMjZcXHUwMDI2IGlvY2ItXFx1MDAzZWtpX3BvcyBcXHUwMDNjIGlzaXplIFxcdTAwMjZcXHUwMDI2ICFlcnJvcik7XFxuMjg5NTpcXHRcXG4yODk2OlxcdFxcdGZpbGVfYWNjZXNzZWQoZmlscCk7XFxuMjg5NzpcXHRcXHRyYS1cXHUwMDNlcHJldl9wb3MgPSBsYXN0X3BvcztcXG4yODk4OlxcdFxcdHJldHVybiBhbHJlYWR5X3JlYWQgPyBhbHJlYWR5X3JlYWQgOiBlcnJvcjtcXG4yODk5OlxcdH1cXG4yOTAwOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGZpbGVtYXBfcmVhZCk7XFxuMjkwMTpcXHRcXG4yOTAyOlxcdGludCBraW9jYl93cml0ZV9hbmRfd2FpdChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBjb3VudClcXG4yOTAzOlxcdHtcXG4yOTA0OlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW9jYi1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9tYXBwaW5nO1xcbjI5MDU6XFx0XFx0bG9mZl90IHBvcyA9IGlvY2ItXFx1MDAzZWtpX3BvcztcXG4yOTA2OlxcdFxcdGxvZmZfdCBlbmQgPSBwb3MgKyBjb3VudCAtIDE7XFxuMjkwNzpcXHRcXG4yOTA4OlxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9XQUlUKSB7XFxuMjkwOTpcXHRcXHRcXHRpZiAoZmlsZW1hcF9yYW5nZV9uZWVkc193cml0ZWJhY2sobWFwcGluZywgcG9zLCBlbmQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzo1NzoxNi4zNzIzNjY0MjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk0NjQ5NzE3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNTeW1ib2wgRGV0ZXJtaW5hdGlvbiBmb3IgRmlsZSBTeXN0ZW0gRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgYEZvY3VzU3ltYm9sc2AsIGtlZXBpbmcgZnV6emluZyBkaXN0cmlidXRpb24gaW4gbWluZC4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gZm9jdXMgb24gc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IG5lZWQgaGVhdnkgZnV6emluZywgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFdlIHdhbnQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHJhdGhlciB0aGFuIGludGVybmFsLCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy5cblxuUmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggYGZvbGlvX2VuZF9kcm9wYmVoaW5kYC4gSXQncyBhIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9uLCBleHBvcnRlZCBmcm9tIGBtbS9maWxlbWFwLmNgLiBOb3csIGlzIGl0IGEgZ2VuZXJpYyBob3QtcGF0aD8gTm8sIGl0IGxvb2tzIHByZXR0eSBzcGVjaWZpYyB0byB0aGUgZHJvcGJlaGluZCBtZWNoYW5pc20g4oCTIHRoZSB1bmNhY2hlZC9ET05UQ0FDSEUgSS9PIHBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uLiBUaGF0IHNlZW1zIHByb21pc2luZy5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBkcm9wYmVoaW5kIG9yIHRoaXMgdW5jYWNoZWQgSS9PIHBhdGggdGhhdCB3ZSBtaWdodCBhbHNvIGNvbnNpZGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyByZWxldmFudC4gSSBrbm93IG9mIGBmb2xpb19lbmRfZHJvcGJlaGluZGAsIGFuZCBub3cgSSByZW1lbWJlciBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAuLi5cblxuTGV0J3MgbG9vayBhdCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAuIEFoLCBpdCdzIGRlZmluZWQgaW4gYG1tL3RydW5jYXRlLmNgLiBBIHF1aWNrIGNoZWNrIHNob3dzIHRoYXQgaXQncyBhbHNvIG5vbi1zdGF0aWMhIFNvIGl0J3MgYW5vdGhlciBnb29kIGNhbmRpZGF0ZS4gYGludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApYCwgbG9va3MgcmlnaHQuIEl0J3MgZGVjbGFyZWQgaW4gYG1tL2ludGVybmFsLmhgLlxuXG5CZWZvcmUgSSBjb21taXQgdG8gdGhlc2UsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiBhbnkgc3BlY2lmaWMgYENPTkZJR19gIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSBgbW0vZmlsZW1hcC5jYCBvciB0aGUgZHJvcGJlaGluZCBmZWF0dXJlcy4gSSBuZWVkIHRvIGxvb2sgYXQgYG1tL01ha2VmaWxlYCBhbmQgYG1tL0tjb25maWdgIHRvIHNlZSBob3cgYGZpbGVtYXAub2AgaXMgYnVpbHQsIGFuZCBpZiBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHBsYXkgYSByb2xlIGhlcmUsIHRvIG1ha2Ugc3VyZSB0aGVzZSBhcmUgYWN0dWFsbHkgcmVsZXZhbnQgdG8gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHdlJ3JlIHRhcmdldGluZy4gSSBjYW4ndCBiZSBvdmVybG9va2luZyB0aG9zZSBkZXRhaWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcwNiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU3OjU1LjgzNzM0MTUzM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0OTExNTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGVtYXBcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTQ5PWVuZGlmXFxubW0vTWFrZWZpbGUtNTAtXFxubW0vTWFrZWZpbGU6NTE6b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG5tbS9NYWtlZmlsZS01Mi1cXHRcXHRcXHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU3OjU2LjE1MjI1ODEyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwODM1ODY3NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgdGhlIEJ1aWxkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgZmlsZW1hcC5vYCBpcyBjb25zaXN0ZW50bHkgYmVpbmcgYnVpbHQsIGluZGljYXRlZCBieSB0aGUgYG9iai15YCBhc3NpZ25tZW50LiBUaGF0J3MgZ29vZCB0byBrbm93OyBpdCdzIGEgY29yZSBjb21wb25lbnQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWdzIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgaXQgYmVoYXZlcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHBhZ2UgbWFuYWdlbWVudC4gVGhlIGhpbnRzIG9mIGBQR19kcm9wYmVoaW5kYCBhbmQgYGZvbGlvX21hcHBlZGAgbWFrZSBtZSB0aGluayB0aGF0IHRoZSBjb2RlIGRlYWxzIHdpdGggcGFnZSBjYWNoaW5nIHN0cmF0ZWdpZXMsIHBlcmhhcHMgcmVsYXRlZCB0byB0aGUgZmlsZXN5c3RlbSBjYWNoZSBhbmQgd3JpdGUtYmVoaW5kIGJlaGF2aW9yLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGhlYWRlciBmaWxlIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhbmQgbG9vayBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gTGV0J3MgZ28gY2hlY2sgdGhlIGRlZmluaXRpb24gZm9yIGBQR19kcm9wYmVoaW5kYCBpbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU3NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU4OjA2Ljk4ODEyNzc3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDczMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTA1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTA1OlxcdFxcdFBHX293bmVyXzIsXFx0XFx0LyogT3duZXIgdXNlLiBJZiBwYWdlY2FjaGUsIGZzIG1heSB1c2UgKi9cXG4gMTA2OlxcdFxcdFBHX2FyY2hfMSxcXG4gMTA3OlxcdFxcdFBHX3Jlc2VydmVkLFxcbiAxMDg6XFx0XFx0UEdfcHJpdmF0ZSxcXHRcXHQvKiBJZiBwYWdlY2FjaGUsIGhhcyBmcy1wcml2YXRlIGRhdGEgKi9cXG4gMTA5OlxcdFxcdFBHX3ByaXZhdGVfMixcXHRcXHQvKiBJZiBwYWdlY2FjaGUsIGhhcyBmcyBhdXggZGF0YSAqL1xcbiAxMTA6XFx0XFx0UEdfcmVjbGFpbSxcXHRcXHQvKiBUbyBiZSByZWNsYWltZWQgYXNhcCAqL1xcbiAxMTE6XFx0XFx0UEdfc3dhcGJhY2tlZCxcXHRcXHQvKiBQYWdlIGlzIGJhY2tlZCBieSBSQU0vc3dhcCAqL1xcbiAxMTI6XFx0XFx0UEdfdW5ldmljdGFibGUsXFx0XFx0LyogUGFnZSBpcyBcXFwidW5ldmljdGFibGVcXFwiICAqL1xcbiAxMTM6XFx0XFx0UEdfZHJvcGJlaGluZCxcXHRcXHQvKiBkcm9wIHBhZ2VzIG9uIElPIGNvbXBsZXRpb24gKi9cXG4gMTE0OlxcdCNpZmRlZiBDT05GSUdfTU1VXFxuIDExNTpcXHRcXHRQR19tbG9ja2VkLFxcdFxcdC8qIFBhZ2UgaXMgdm1hIG1sb2NrZWQgKi9cXG4gMTE2OlxcdCNlbmRpZlxcbiAxMTc6XFx0I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbiAxMTg6XFx0XFx0UEdfaHdwb2lzb24sXFx0XFx0LyogaGFyZHdhcmUgcG9pc29uZWQgcGFnZS4gRG9uJ3QgdG91Y2ggKi9cXG4gMTE5OlxcdCNlbmRpZlxcbiAxMjA6XFx0I2lmIGRlZmluZWQoQ09ORklHX1BBR0VfSURMRV9GTEFHKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcXG4gMTIxOlxcdFxcdFBHX3lvdW5nLFxcbiAxMjI6XFx0XFx0UEdfaWRsZSxcXG4gMTIzOlxcdCNlbmRpZlxcbiAxMjQ6XFx0I2lmZGVmIENPTkZJR19BUkNIX1VTRVNfUEdfQVJDSF8yXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU4OjA2Ljk4ODIzNzI0N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzgyMTYwMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgSXNzdWUgd2l0aCBQYWdlIEZsYWdzKipcblxuT2theSwgSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBQR19kcm9wYmVoaW5kYCBmbGFnIGFuZCBJIHNlZSBpdCdzIG5vdCBndWFyZGVkIGJ5IGFuIGAjaWZkZWZgIGluIGBwYWdlZmxhZ3NgLiBUaGF0J3MgYSBsaXR0bGUgdW51c3VhbCwgYW5kIGl0IG1ha2VzIG1lIHdvbmRlciBpZiB0aGVyZSdzIGFuIGludGVuZGVkIHBsYXRmb3JtIGRlcGVuZGVuY3kgaGVyZSB0aGF0J3MgYmVpbmcgb3Zlcmxvb2tlZC4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSB1c2Ugb2YgYGZvbGlvX21hcHBlZGAgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IHJlbGF0ZWQgbG9naWMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZ29pbmcgb24gdGhlcmUsIG9yIGlmIHNvbWV0aGluZyBoYXMgZ29uZSBhd3J5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZmxhZydzIHZpc2liaWxpdHkgYWNyb3NzIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGZvbGlvIG1hcHBpbmcgc3RydWN0dXJlcy4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGFuZCB3aGVyZSB0aGUgZmxhZyBpcyBiZWluZyBzZXQgYW5kIGNsZWFyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjA4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzo1ODoxMi4zNzA0MDA1ODlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDMxNjI5MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fbWFwcGVkXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vbW0vZmx1c2guYz0zMzY9dm9pZCBmbHVzaF9kY2FjaGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmFyY2gvYXJtL21tL2ZsdXNoLmMtMzU1LVxcdGlmICghY2FjaGVfb3BzX25lZWRfYnJvYWRjYXN0KCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL2FybS9tbS9mbHVzaC5jOjM1NjpcXHQgICAgbWFwcGluZyBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5hcmNoL2FybS9tbS9mbHVzaC5jLTM1Ny1cXHRcXHRjbGVhcl9iaXQoUEdfZGNhY2hlX2NsZWFuLCBcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYpO1xcbi0tXFxuYXJjaC9jc2t5L2FiaXYxL2NhY2hlZmx1c2guYz0xOD12b2lkIGZsdXNoX2RjYWNoZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuYXJjaC9jc2t5L2FiaXYxL2NhY2hlZmx1c2guYy0yNi1cXG5hcmNoL2Nza3kvYWJpdjEvY2FjaGVmbHVzaC5jOjI3OlxcdGlmIChtYXBwaW5nIFxcdTAwMjZcXHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKVxcbmFyY2gvY3NreS9hYml2MS9jYWNoZWZsdXNoLmMtMjgtXFx0XFx0Y2xlYXJfYml0KFBHX2RjYWNoZV9jbGVhbiwgXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4tLVxcbmFyY2gvbWlwcy9tbS9jLXI0ay5jPTUzNz1zdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfcjRrX2ZsdXNoX2NhY2hlX3BhZ2Uodm9pZCAqYXJncylcXG4tLVxcbmFyY2gvbWlwcy9tbS9jLXI0ay5jLTU3Ni1cXHRcXHRtYXBfY29oZXJlbnQgPSAoY3B1X2hhc19kY19hbGlhc2VzIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9taXBzL21tL2MtcjRrLmM6NTc3OlxcdFxcdFxcdFxcdGZvbGlvX21hcHBlZChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL21pcHMvbW0vYy1yNGsuYy01NzgtXFx0XFx0XFx0XFx0IWZvbGlvX3Rlc3RfZGNhY2hlX2RpcnR5KGZvbGlvKSk7XFxuLS1cXG5hcmNoL21pcHMvbW0vY2FjaGUuYz0xMjc9dm9pZCBfX2ZsdXNoX2Fub25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpXFxuLS1cXG5hcmNoL21pcHMvbW0vY2FjaGUuYy0xMzItXFx0aWYgKHBhZ2VzX2RvX2FsaWFzKGFkZHIsIHZtYWRkcikpIHtcXG5hcmNoL21pcHMvbW0vY2FjaGUuYzoxMzM6XFx0XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfZGNhY2hlX2RpcnR5KGZvbGlvKSkge1xcbmFyY2gvbWlwcy9tbS9jYWNoZS5jLTEzNC1cXHRcXHRcXHR2b2lkICprYWRkcjtcXG4tLVxcbmFyY2gvbWlwcy9tbS9pbml0LmM9MTYwPXZvaWQgY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sXFxuLS1cXG5hcmNoL21pcHMvbW0vaW5pdC5jLTE2Ny1cXHRpZiAoY3B1X2hhc19kY19hbGlhc2VzIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9taXBzL21tL2luaXQuYzoxNjg6XFx0ICAgIGZvbGlvX21hcHBlZChzcmMpIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X2RjYWNoZV9kaXJ0eShzcmMpKSB7XFxuYXJjaC9taXBzL21tL2luaXQuYy0xNjktXFx0XFx0dmZyb20gPSBrbWFwX2NvaGVyZW50KGZyb20sIHZhZGRyKTtcXG4tLVxcbmFyY2gvbWlwcy9tbS9pbml0LmM9MTg1PXZvaWQgY29weV90b191c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL21pcHMvbW0vaW5pdC5jLTE5MS1cXHRpZiAoY3B1X2hhc19kY19hbGlhc2VzIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9taXBzL21tL2luaXQuYzoxOTI6XFx0ICAgIGZvbGlvX21hcHBlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfZGNhY2hlX2RpcnR5KGZvbGlvKSkge1xcbmFyY2gvbWlwcy9tbS9pbml0LmMtMTkzLVxcdFxcdHZvaWQgKnZ0byA9IGttYXBfY29oZXJlbnQocGFnZSwgdmFkZHIpICsgKHZhZGRyIFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuLS1cXG5hcmNoL21pcHMvbW0vaW5pdC5jPTIwNT12b2lkIGNvcHlfZnJvbV91c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL21pcHMvbW0vaW5pdC5jLTIxMS1cXHRpZiAoY3B1X2hhc19kY19hbGlhc2VzIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9taXBzL21tL2luaXQuYzoyMTI6XFx0ICAgIGZvbGlvX21hcHBlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfZGNhY2hlX2RpcnR5KGZvbGlvKSkge1xcbmFyY2gvbWlwcy9tbS9pbml0LmMtMjEzLVxcdFxcdHZvaWQgKnZmcm9tID0ga21hcF9jb2hlcmVudChwYWdlLCB2YWRkcikgKyAodmFkZHIgXFx1MDAyNiB+UEFHRV9NQVNLKTtcXG4tLVxcbmFyY2gvc2gvbW0vY2FjaGUtc2g0LmM9MjE0PXN0YXRpYyB2b2lkIHNoNF9mbHVzaF9jYWNoZV9wYWdlKHZvaWQgKmFyZ3MpXFxuLS1cXG5hcmNoL3NoL21tL2NhY2hlLXNoNC5jLTI1MC1cXHRcXHRcXHR0ZXN0X2JpdChQR19kY2FjaGVfY2xlYW4sIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3NoL21tL2NhY2hlLXNoNC5jOjI1MTpcXHRcXHRcXHRmb2xpb19tYXBwZWQoZm9saW8pKTtcXG5hcmNoL3NoL21tL2NhY2hlLXNoNC5jLTI1Mi1cXHRcXHRpZiAobWFwX2NvaGVyZW50KVxcbi0tXFxuYXJjaC9zaC9tbS9jYWNoZS5jPTYwPXZvaWQgY29weV90b191c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuYXJjaC9zaC9tbS9jYWNoZS5jLTY1LVxcbmFyY2gvc2gvbW0vY2FjaGUuYzo2NjpcXHRpZiAoYm9vdF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzIFxcdTAwMjZcXHUwMDI2IGZvbGlvX21hcHBlZChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3NoL21tL2NhY2hlLmMtNjctXFx0ICAgIHRlc3RfYml0KFBHX2RjYWNoZV9jbGVhbiwgXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mKSkge1xcbi0tXFxuYXJjaC9zaC9tbS9jYWNoZS5jPTgxPXZvaWQgY29weV9mcm9tX3VzZXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5hcmNoL3NoL21tL2NhY2hlLmMtODYtXFxuYXJjaC9zaC9tbS9jYWNoZS5jOjg3OlxcdGlmIChib290X2NwdV9kYXRhLmRjYWNoZS5uX2FsaWFzZXMgXFx1MDAyNlxcdTAwMjYgZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gvc2gvbW0vY2FjaGUuYy04OC1cXHQgICAgdGVzdF9iaXQoUEdfZGNhY2hlX2NsZWFuLCBcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYpKSB7XFxuLS1cXG5hcmNoL3NoL21tL2NhY2hlLmM9OTk9dm9pZCBjb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSxcXG4tLVxcbmFyY2gvc2gvbW0vY2FjaGUuYy0xMDYtXFxuYXJjaC9zaC9tbS9jYWNoZS5jOjEwNzpcXHRpZiAoYm9vdF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzIFxcdTAwMjZcXHUwMDI2IGZvbGlvX21hcHBlZChzcmMpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9zaC9tbS9jYWNoZS5jLTEwOC1cXHQgICAgdGVzdF9iaXQoUEdfZGNhY2hlX2NsZWFuLCBcXHUwMDI2c3JjLVxcdTAwM2VmbGFncy5mKSkge1xcbi0tXFxuYXJjaC9zaC9tbS9jYWNoZS5jPTE1OD12b2lkIF9fZmx1c2hfYW5vbl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZtYWRkcilcXG4tLVxcbmFyY2gvc2gvbW0vY2FjaGUuYy0xNjMtXFx0aWYgKHBhZ2VzX2RvX2FsaWFzKGFkZHIsIHZtYWRkcikpIHtcXG5hcmNoL3NoL21tL2NhY2hlLmM6MTY0OlxcdFxcdGlmIChib290X2NwdV9kYXRhLmRjYWNoZS5uX2FsaWFzZXMgXFx1MDAyNlxcdTAwMjYgZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gvc2gvbW0vY2FjaGUuYy0xNjUtXFx0XFx0ICAgIHRlc3RfYml0KFBHX2RjYWNoZV9jbGVhbiwgXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mKSkge1xcbi0tXFxuYXJjaC94dGVuc2EvbW0vdGxiLmM9MjMyPXN0YXRpYyBpbnQgY2hlY2tfdGxiX2VudHJ5KHVuc2lnbmVkIHcsIHVuc2lnbmVkIGUsIGJvb2wgZHRsYilcXG4tLVxcbmFyY2gveHRlbnNhL21tL3RsYi5jLTI2NC1cXHRcXHRcXHRcXHRcXHRyYyB8PSBUTEJfSU5TQU5FO1xcbmFyY2gveHRlbnNhL21tL3RsYi5jOjI2NTpcXHRcXHRcXHRcXHRlbHNlIGlmIChmb2xpb19tYXBwZWQoZikpXFxuYXJjaC94dGVuc2EvbW0vdGxiLmMtMjY2LVxcdFxcdFxcdFxcdFxcdHJjIHw9IFRMQl9TVVNQSUNJT1VTO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmM9MzA3PXZvaWQgX19zaG1lbV93cml0ZWJhY2soc2l6ZV90IHNpemUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtMzI0LVxcdHdoaWxlICgoZm9saW8gPSB3cml0ZWJhY2tfaXRlcihtYXBwaW5nLCBcXHUwMDI2d2JjLCBmb2xpbywgXFx1MDAyNmVycm9yKSkpIHtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0uYzozMjU6XFx0XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtMzI2LVxcdFxcdFxcdGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZShcXHUwMDI2d2JjLCBmb2xpbyk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iYWNrdXAuYz0xMDM9dHRtX2JhY2t1cF9iYWNrdXBfZm9saW8oc3RydWN0IGZpbGUgKmJhY2t1cCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JhY2t1cC5jLTE1OS1cXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iYWNrdXAuYzoxNjA6XFx0XFx0aWYgKHdyaXRlYmFjayBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKHRvX2ZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JhY2t1cC5jLTE2MS1cXHRcXHQgICAgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHRvX2ZvbGlvKSkge1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTE3MDY9c3RhdGljIHZvaWQgbXBhZ2VfcmVsZWFzZV91bnVzZWRfcGFnZXMoc3RydWN0IG1wYWdlX2RhX2RhdGEgKm1wZCxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0xNzUwLVxcdFxcdFxcdGlmIChpbnZhbGlkYXRlKSB7XFxuZnMvZXh0NC9pbm9kZS5jOjE3NTE6XFx0XFx0XFx0XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpIHtcXG5mcy9leHQ0L2lub2RlLmMtMTc1Mi1cXHRcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8oZm9saW8pO1xcbi0tXFxuZnMvZnVzZS9kZXYuYz0xMDk4PXN0YXRpYyBpbnQgZnVzZV9jaGVja19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmZzL2Z1c2UvZGV2LmMtMTA5OS17XFxuZnMvZnVzZS9kZXYuYzoxMTAwOlxcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pIHx8XFxuZnMvZnVzZS9kZXYuYy0xMTAxLVxcdCAgICBmb2xpby1cXHUwMDNlbWFwcGluZyAhPSBOVUxMIHx8XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTExMjM9c3RhdGljIGludCBmdXNlX3RyeV9tb3ZlX2ZvbGlvKHN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgKmNzLCBzdHJ1Y3QgZm9saW8gKipmb2xpb3ApXFxuLS1cXG5mcy9mdXNlL2Rldi5jLTExNjctXFx0ICovXFxuZnMvZnVzZS9kZXYuYzoxMTY4OlxcdGlmIChXQVJOX09OKGZvbGlvX21hcHBlZChvbGRmb2xpbykpKVxcbmZzL2Z1c2UvZGV2LmMtMTE2OS1cXHRcXHRnb3RvIG91dF9mYWxsYmFja191bmxvY2s7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz00OTg9c3RhdGljIHZvaWQgcmVtb3ZlX2lub2RlX3NpbmdsZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTEwLVxcdGZvbGlvX2xvY2soZm9saW8pO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUxMTpcXHRpZiAodW5saWtlbHkoZm9saW9fbWFwcGVkKGZvbGlvKSkpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTEyLVxcdFxcdGh1Z2V0bGJfdW5tYXBfZmlsZV9mb2xpbyhoLCBtYXBwaW5nLCBmb2xpbywgaW5kZXgpO1xcbi0tXFxuZnMvcHJvYy9wYWdlLmM9MTQ2PXU2NCBzdGFibGVfcGFnZV9mbGFncyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmZzL3Byb2MvcGFnZS5jLTE2Ni1cXHQgKi9cXG5mcy9wcm9jL3BhZ2UuYzoxNjc6XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpXFxuZnMvcHJvYy9wYWdlLmMtMTY4LVxcdFxcdHUgfD0gQklUX1VMTChLUEZfTU1BUCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MTk0Nz1zdGF0aWMgaW5saW5lIGludCBmb2xpb19tYXBjb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTE5NjUtICovXFxuaW5jbHVkZS9saW51eC9tbS5oOjE5NjY6c3RhdGljIGlubGluZSBib29sIGZvbGlvX21hcHBlZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvbW0uaC0xOTY3LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0yOTk0PXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tYXliZV9tYXBwZWRfc2hhcmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMzAzMi0gKlxcbmluY2x1ZGUvbGludXgvbW0uaDozMDMzOiAqIENhbGxpbmcgdGhpcyBmdW5jdGlvbiBvbiBhbiB1bm1hcHBlZCBmb2xpbyAtLSAhZm9saW9fbWFwcGVkKCkgLS0gdGhhdCBpc1xcbmluY2x1ZGUvbGludXgvbW0uaC0zMDM0LSAqIGxvY2tlZCB3aWxsIHJldHVybiBhIHN0YWJsZSByZXN1bHQuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD0xMzU9c3RhdGljIGlubGluZSB2b2lkIF9fZm9saW9fbGFyZ2VfbWFwY291bnRfc2FuaXR5X2NoZWNrcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtMTU4LVxcdFxcdFxcdGZvbGlvLVxcdTAwM2VfbW1faWRfbWFwY291bnRbMV0gXFx1MDAzYyAwKTtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDoxNTk6XFx0Vk1fV0FSTl9PTl9PTkNFKCFmb2xpb19tYXBwZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuaW5jbHVkZS9saW51eC9ybWFwLmgtMTYwLVxcdFxcdFxcdHRlc3RfYml0KEZPTElPX01NX0lEU19TSEFSRURfQklUTlVNLCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9tbV9pZHMpKTtcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3BhZ2VtYXAuaC0yMC1cXHQoZm9saW9fdGVzdF9hbm9uKGZvbGlvKVxcdFxcdD8gUEFHRU1BUF9BTk9OWU1PVVMgIDogUEFHRU1BUF9GSUxFKSB8IFxcXFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9wYWdlbWFwLmg6MjE6XFx0KGZvbGlvX21hcHBlZChmb2xpbylcXHRcXHQ/IFBBR0VNQVBfTUFQUEVEICAgICA6IDApIHwgXFxcXFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3BhZ2VtYXAuaC0yMi1cXHQoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pXFx0PyBQQUdFTUFQX1NXQVBDQUNIRSAgOiAwKSB8IFxcXFxcXG4tLVxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jPTQwNT1zdGF0aWMgaW50IF9fdXByb2JlX3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNDUzLVxcdGZvbGlvX3JlbW92ZV9ybWFwX3B0ZShmb2xpbywgZnctXFx1MDAzZXBhZ2UsIHZtYSk7XFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmM6NDU0OlxcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy00NTUtXFx0ICAgICBmb2xpb190cnlsb2NrKGZvbGlvKSkge1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE3ND12b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTgwLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxODE6XFx0aWYgKCFmb2xpb19tYXBwZWQoZm9saW8pIHx8ICFmb2xpb19yYXdfbWFwcGluZyhmb2xpbykpIHtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTgyLVxcdFxcdGZvbGlvX3NldF9pZGxlKGZvbGlvKTtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz0yMzY9Ym9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI0NC1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjQ1OlxcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSB8fCAhZm9saW9fcmF3X21hcHBpbmcoZm9saW8pKSB7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI0Ni1cXHRcXHRpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSlcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz0yNjE9Ym9vbCBkYW1vc19mb2xpb19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI5My1cXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1VOTUFQUEVEOlxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyOTQ6XFx0XFx0bWF0Y2hlZCA9ICFmb2xpb19tYXBwZWQoZm9saW8pIHx8ICFmb2xpb19yYXdfbWFwcGluZyhmb2xpbyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI5NS1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2ZpbGVtYXAuYz0xNTA9c3RhdGljIHZvaWQgZmlsZW1hcF91bmFjY291bnRfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9maWxlbWFwLmMtMTU0LVxcbm1tL2ZpbGVtYXAuYzoxNTU6XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX21hcHBlZChmb2xpbyksIGZvbGlvKTtcXG5tbS9maWxlbWFwLmM6MTU2OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfREVCVUdfVk0pIFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KGZvbGlvX21hcHBlZChmb2xpbykpKSB7XFxubW0vZmlsZW1hcC5jLTE1Ny1cXHRcXHRwcl9hbGVydChcXFwiQlVHOiBCYWQgcGFnZSBjYWNoZSBpbiBwcm9jZXNzICVzICBwZm46JTA1bHhcXFxcblxcXCIsXFxuLS1cXG5tbS9maWxlbWFwLmM9MTYwOT1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9maWxlbWFwLmMtMTYxOC1cXHRcXHRyZXR1cm47XFxubW0vZmlsZW1hcC5jOjE2MTk6XFx0aWYgKG1hcHBpbmcgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXFxubW0vZmlsZW1hcC5jLTE2MjAtXFx0XFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XFxuLS1cXG5tbS9mb2xpby5jPTUzMT1zdGF0aWMgdm9pZCBscnVfZGVhY3RpdmF0ZV9maWxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNTM5LVxcdC8qIFNvbWUgcHJvY2Vzc2VzIGFyZSB1c2luZyB0aGUgZm9saW8gKi9cXG5tbS9mb2xpby5jOjU0MDpcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS9mb2xpby5jLTU0MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQzNjM9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQzNjYtXFxubW0vaHVnZV9tZW1vcnkuYzo0MzY3OlxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19tYXBwZWQoZm9saW8pLCBmb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYy00MzY4LVxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuLS1cXG5tbS9odWdldGxiLmM9NTE4NT12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTMwMi1cXHRcXHRpZiAoIWgtXFx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlcyBcXHUwMDI2XFx1MDAyNiBfX3ZtYV9wcml2YXRlX2xvY2sodm1hKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2h1Z2V0bGIuYzo1MzAzOlxcdFxcdCAgICAhZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XFxubW0vaHVnZXRsYi5jLTUzMDQtXFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMjQyPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNDI2LVxcbm1tL2todWdlcGFnZWQuYzoyNDI3OlxcdFxcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKVxcbm1tL2todWdlcGFnZWQuYy0yNDI4LVxcdFxcdFxcdHRyeV90b191bm1hcChmb2xpbyxcXG4tLVxcbm1tL2tzbS5jPTExMjY9c3RhdGljIGludCByZW1vdmVfc3RhYmxlX25vZGUoc3RydWN0IGtzbV9zdGFibGVfbm9kZSAqc3RhYmxlX25vZGUpXFxuLS1cXG5tbS9rc20uYy0xMTQ0LVxcdGVyciA9IC1FQlVTWTtcXG5tbS9rc20uYzoxMTQ1OlxcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSkge1xcbm1tL2tzbS5jLTExNDYtXFx0XFx0LypcXG4tLVxcbm1tL2tzbS5jPTEzOTQ9c3RhdGljIGludCByZXBsYWNlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0va3NtLmMtMTQ3NS1cXHRmb2xpb19yZW1vdmVfcm1hcF9wdGUoZm9saW8sIHBhZ2UsIHZtYSk7XFxubW0va3NtLmM6MTQ3NjpcXHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykpXFxubW0va3NtLmMtMTQ3Ny1cXHRcXHRmb2xpb19mcmVlX3N3YXAoZm9saW8pO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNTY4PWludCB1bm1hcF9wb2lzb25lZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBtdXN0X2tpbGwpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2MTYtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNjE3OlxcdHJldHVybiBmb2xpb19tYXBwZWQoZm9saW8pID8gLUVCVVNZIDogMDtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2MTgtfVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNjI0PXN0YXRpYyBib29sIGh3cG9pc29uX3VzZXJfbWFwcGluZ3Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnAsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NDUtXFx0ICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNjQ2OlxcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NDctXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3MzY9aW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc4Mi1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3ODM6XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3ODQtXFx0XFx0dW5wb2lzb25fcHJfaW5mbyhcXFwiJSNseDogc29tZW9uZSBtYXBzIHRoZSBod3BvaXNvbiBwYWdlXFxcXG5cXFwiLFxcbi0tXFxubW0vbWVtb3J5LmM9NDg4MT12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTUyMTQtXFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAhPSBucl9wYWdlcywgZm9saW8pO1xcbm1tL21lbW9yeS5jOjUyMTU6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX21hcHBlZChmb2xpbyksIGZvbGlvKTtcXG5tbS9tZW1vcnkuYy01MjE2LVxcdFxcdGZvbGlvX2FkZF9uZXdfYW5vbl9ybWFwKGZvbGlvLCB2bWEsIGFkZHJlc3MsIHJtYXBfZmxhZ3MpO1xcbi0tXFxubW0vbWVtb3J5LmM9NTU0MT1zdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTU3Ni1cXHRcXHRpZiAocmV0IFxcdTAwMjYgVk1fRkFVTFRfTE9DS0VEKSB7XFxubW0vbWVtb3J5LmM6NTU3NzpcXHRcXHRcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS9tZW1vcnkuYy01NTc4LVxcdFxcdFxcdFxcdHVubWFwX21hcHBpbmdfZm9saW8oZm9saW8pO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xODQ2PXN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTg3Ny1cXHRcXHRcXHRcXHRnb3RvIHB1dF9mb2xpbztcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE4Nzg6XFx0XFx0XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpIHtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE4NzktXFx0XFx0XFx0XFx0Zm9saW9fbG9jayhmb2xpbyk7XFxuLS1cXG5tbS9taWdyYXRlLmM9MTIxMz1zdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fdW5tYXAobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xMzMzLVxcdFxcdH1cXG5tbS9taWdyYXRlLmM6MTMzNDpcXHR9IGVsc2UgaWYgKGZvbGlvX21hcHBlZChzcmMpKSB7XFxubW0vbWlncmF0ZS5jLTEzMzUtXFx0XFx0LyogRXN0YWJsaXNoIG1pZ3JhdGlvbiBwdGVzICovXFxuLS1cXG5tbS9taWdyYXRlLmMtMTM0MS1cXG5tbS9taWdyYXRlLmM6MTM0MjpcXHRpZiAoIWZvbGlvX21hcHBlZChzcmMpKSB7XFxubW0vbWlncmF0ZS5jLTEzNDMtXFx0XFx0X19taWdyYXRlX2ZvbGlvX3JlY29yZChkc3QsIG9sZF9mb2xpb19zdGF0ZSwgYW5vbl92bWEpO1xcbi0tXFxubW0vbWlncmF0ZS5jPTE0ODA9c3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdldGxiX2ZvbGlvKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTUyOS1cXG5tbS9taWdyYXRlLmM6MTUzMDpcXHRpZiAoZm9saW9fbWFwcGVkKHNyYykpIHtcXG5tbS9taWdyYXRlLmMtMTUzMS1cXHRcXHRpZiAoIWZvbGlvX3Rlc3RfYW5vbihzcmMpKSB7XFxuLS1cXG5tbS9taWdyYXRlLmMtMTU0OC1cXG5tbS9taWdyYXRlLmM6MTU0OTpcXHRpZiAoIWZvbGlvX21hcHBlZChzcmMpKVxcbm1tL21pZ3JhdGUuYy0xNTUwLVxcdFxcdHJjID0gbW92ZV90b19uZXdfZm9saW8oZHN0LCBzcmMsIG1vZGUpO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz01NzE9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfdW5tYXAodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTYxOC1cXG5tbS9taWdyYXRlX2RldmljZS5jOjYxOTpcXHRcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTYyMC1cXHRcXHRcXHR0cnlfdG9fbWlncmF0ZShmb2xpbywgMCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy02MjEtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo2MjI6XFx0XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykgfHxcXG5tbS9taWdyYXRlX2RldmljZS5jLTYyMy1cXHRcXHQgICAgIW1pZ3JhdGVfdm1hX2NoZWNrX3BhZ2UocGFnZSwgZmF1bHRfcGFnZSkpIHtcXG4tLVxcbm1tL3BhZ2VfaWRsZS5jPTk3PXN0YXRpYyB2b2lkIHBhZ2VfaWRsZV9jbGVhcl9wdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vcGFnZV9pZGxlLmMtMTA3LVxcbm1tL3BhZ2VfaWRsZS5jOjEwODpcXHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykgfHwgIWZvbGlvX3Jhd19tYXBwaW5nKGZvbGlvKSlcXG5tbS9wYWdlX2lkbGUuYy0xMDktXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vcm1hcC5jPTU1Mj12b2lkIF9faW5pdCBhbm9uX3ZtYV9pbml0KHZvaWQpXFxuLS1cXG5tbS9ybWFwLmMtNTczLSAqIGVuc3VyZSB0aGF0IGFueSBhbm9uX3ZtYSBvYnRhaW5lZCBmcm9tIHRoZSBwYWdlIHdpbGwgc3RpbGwgYmUgdmFsaWQgZm9yIGFzXFxubW0vcm1hcC5jOjU3NDogKiBsb25nIGFzIHdlIG9ic2VydmUgZm9saW9fbWFwcGVkKCkgWyBoZW5jZSBhbGwgdGhvc2UgZm9saW9fbWFwcGVkKCkgdGVzdHMgXS5cXG5tbS9ybWFwLmMtNTc1LSAqXFxuLS1cXG5tbS9ybWFwLmM9NTg3PXN0cnVjdCBhbm9uX3ZtYSAqZm9saW9fZ2V0X2Fub25fdm1hKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9ybWFwLmMtNTk3LVxcdFxcdGdvdG8gb3V0O1xcbm1tL3JtYXAuYzo1OTg6XFx0aWYgKCFmb2xpb19tYXBwZWQoZm9saW8pKVxcbm1tL3JtYXAuYy01OTktXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5tbS9ybWFwLmMtNjEzLVxcdCAqL1xcbm1tL3JtYXAuYzo2MTQ6XFx0aWYgKCFmb2xpb19tYXBwZWQoZm9saW8pKSB7XFxubW0vcm1hcC5jLTYxNS1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm1tL3JtYXAuYz02MzM9c3RydWN0IGFub25fdm1hICpmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy02NDUtXFx0XFx0Z290byBvdXQ7XFxubW0vcm1hcC5jOjY0NjpcXHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykpXFxubW0vcm1hcC5jLTY0Ny1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL3JtYXAuYy02NTYtXFx0XFx0ICovXFxubW0vcm1hcC5jOjY1NzpcXHRcXHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykpIHtcXG5tbS9ybWFwLmMtNjU4LVxcdFxcdFxcdHVwX3JlYWQoXFx1MDAyNnJvb3RfYW5vbl92bWEtXFx1MDAzZXJ3c2VtKTtcXG4tLVxcbm1tL3JtYXAuYy02NzUtXFxubW0vcm1hcC5jOjY3NjpcXHRpZiAoIWZvbGlvX21hcHBlZChmb2xpbykpIHtcXG5tbS9ybWFwLmMtNjc3LVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubW0vcm1hcC5jPTEyMDM9aW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3JtYXAuYy0xMjE0LVxcbm1tL3JtYXAuYzoxMjE1OlxcdGlmICghZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS9ybWFwLmMtMTIxNi1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3JtYXAuYz0yMjAxPXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjIxNy1cXHQgKiBpbiBiZXR3ZWVuIGl0cyBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbCgpIGFuZCBmb2xpb19yZW1vdmVfcm1hcF8qKCksXFxubW0vcm1hcC5jOjIyMTg6XFx0ICogdHJ5X3RvX3VubWFwKCkgbWF5IHJldHVybiBiZWZvcmUgZm9saW9fbWFwcGVkKCkgaGFzIGJlY29tZSBmYWxzZSxcXG5tbS9ybWFwLmMtMjIxOS1cXHQgKiBpZiBwYWdlIHRhYmxlIGxvY2tpbmcgaXMgc2tpcHBlZDogdXNlIFRUVV9TWU5DIHRvIHdhaXQgZm9yIHRoYXQuXFxuLS1cXG5tbS9ybWFwLmM9MjQyNz1zdGF0aWMgaW50IGZvbGlvX25vdF9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9ybWFwLmMtMjQyOC17XFxubW0vcm1hcC5jOjI0Mjk6XFx0cmV0dXJuICFmb2xpb19tYXBwZWQoZm9saW8pO1xcbm1tL3JtYXAuYy0yNDMwLX1cXG4tLVxcbm1tL3JtYXAuYz0yNDY1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yNDgwLVxcdCAqIGluIGJldHdlZW4gaXRzIHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKCkgYW5kIGZvbGlvX3JlbW92ZV9ybWFwXyooKSxcXG5tbS9ybWFwLmM6MjQ4MTpcXHQgKiB0cnlfdG9fbWlncmF0ZSgpIG1heSByZXR1cm4gYmVmb3JlIGZvbGlvX21hcHBlZCgpIGhhcyBiZWNvbWUgZmFsc2UsXFxubW0vcm1hcC5jLTI0ODItXFx0ICogaWYgcGFnZSB0YWJsZSBsb2NraW5nIGlzIHNraXBwZWQ6IHVzZSBUVFVfU1lOQyB0byB3YWl0IGZvciB0aGF0Llxcbi0tXFxubW0vcm1hcC5jPTI5NzU9c3RhdGljIHN0cnVjdCBhbm9uX3ZtYSAqcm1hcF93YWxrX2Fub25fbG9jayhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTI5ODQtXFx0ICogTm90ZTogcmVtb3ZlX21pZ3JhdGlvbl9wdGVzKCkgY2Fubm90IHVzZSBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoKVxcbm1tL3JtYXAuYzoyOTg1OlxcdCAqIGJlY2F1c2UgdGhhdCBkZXBlbmRzIG9uIGZvbGlvX21hcHBlZCgpOyBidXQgbm90IGFsbCBpdHMgdXNhZ2VzXFxubW0vcm1hcC5jLTI5ODYtXFx0ICogYXJlIGhvbGRpbmcgbW1hcF9sb2NrLiBVc2VycyB3aXRob3V0IG1tYXBfbG9jayBhcmUgcmVxdWlyZWQgdG9cXG4tLVxcbm1tL3NobWVtLmM9MTYwNz1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zaG1lbS5jLTE3MTctXFxubW0vc2htZW0uYzoxNzE4OlxcdFxcdEJVR19PTihmb2xpb19tYXBwZWQoZm9saW8pKTtcXG5tbS9zaG1lbS5jLTE3MTktXFx0XFx0ZXJyb3IgPSBzd2FwX3dyaXRlb3V0KGN0eCwgZm9saW8pO1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTU1Mj12b2lkIGZyZWVfc3dhcF9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3N3YXBfc3RhdGUuYy01NTMte1xcbm1tL3N3YXBfc3RhdGUuYzo1NTQ6XFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3N3YXBfc3RhdGUuYy01NTUtXFx0ICAgIGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE5OD1zdGF0aWMgaW50IF9fdHJ5X3RvX3JlY2xhaW1fc3dhcChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIzNS1cXHRuZWVkX3JlY2xhaW0gPSAoKGZsYWdzIFxcdTAwMjYgVFRSU19BTllXQVkpIHx8XFxubW0vc3dhcGZpbGUuYzoyMzY6XFx0XFx0XFx0KChmbGFncyBcXHUwMDI2IFRUUlNfVU5NQVBQRUQpIFxcdTAwMjZcXHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKSB8fFxcbm1tL3N3YXBmaWxlLmMtMjM3LVxcdFxcdFxcdCgoZmxhZ3MgXFx1MDAyNiBUVFJTX0ZVTEwpIFxcdTAwMjZcXHUwMDI2IG1lbV9jZ3JvdXBfc3dhcF9mdWxsKGZvbGlvKSkpO1xcbi0tXFxubW0vdHJ1bmNhdGUuYz0xNTQ9c3RhdGljIHZvaWQgdHJ1bmNhdGVfY2xlYW51cF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3RydW5jYXRlLmMtMTU1LXtcXG5tbS90cnVuY2F0ZS5jOjE1NjpcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS90cnVuY2F0ZS5jLTE1Ny1cXHRcXHR1bm1hcF9tYXBwaW5nX2ZvbGlvKGZvbGlvKTtcXG4tLVxcbm1tL3RydW5jYXRlLmM9MTgwPXN0YXRpYyBpbnQgZm9saW9fc3BsaXRfb3JfdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LFxcbi0tXFxubW0vdHJ1bmNhdGUuYy0xOTktXFx0XFx0dHJ5X3RvX3VubWFwKGZvbGlvLCB0dHVfZmxhZ3MpO1xcbm1tL3RydW5jYXRlLmM6MjAwOlxcdFxcdFdBUk5fT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XFxubW0vdHJ1bmNhdGUuYy0yMDEtXFx0fVxcbi0tXFxubW0vdHJ1bmNhdGUuYz02MjI9aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTYyOS1cXG5tbS90cnVuY2F0ZS5jOjYzMDpcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS90cnVuY2F0ZS5jLTYzMS1cXHRcXHR1bm1hcF9tYXBwaW5nX2ZvbGlvKGZvbGlvKTtcXG5tbS90cnVuY2F0ZS5jOjYzMjpcXHRCVUdfT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XFxubW0vdHJ1bmNhdGUuYy02MzMtXFxuLS1cXG5tbS90cnVuY2F0ZS5jPTY3Nj1pbnQgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTcwOC1cXG5tbS90cnVuY2F0ZS5jOjcwOTpcXHRcXHRcXHRpZiAoIWRpZF9yYW5nZV91bm1hcCBcXHUwMDI2XFx1MDAyNiBmb2xpb19tYXBwZWQoZm9saW8pKSB7XFxubW0vdHJ1bmNhdGUuYy03MTAtXFx0XFx0XFx0XFx0LypcXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwNTg9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTExNi1cXG5tbS92bXNjYW4uYzoxMTE3OlxcdFxcdGlmICghc2MtXFx1MDAzZW1heV91bm1hcCBcXHUwMDI2XFx1MDAyNiBmb2xpb19tYXBwZWQoZm9saW8pKVxcbm1tL3Ztc2Nhbi5jLTExMTgtXFx0XFx0XFx0Z290byBrZWVwX2xvY2tlZDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTEzMjctXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6MTMyODpcXHRcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSkge1xcbm1tL3Ztc2Nhbi5jLTEzMjktXFx0XFx0XFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSBUVFVfQkFUQ0hfRkxVU0g7XFxuLS1cXG5tbS92bXNjYW4uYy0xMzQ5LVxcdFxcdFxcdHRyeV90b191bm1hcChmb2xpbywgZmxhZ3MpO1xcbm1tL3Ztc2Nhbi5jOjEzNTA6XFx0XFx0XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpIHtcXG5tbS92bXNjYW4uYy0xMzUxLVxcdFxcdFxcdFxcdHN0YXQtXFx1MDAzZW5yX3VubWFwX2ZhaWwgKz0gbnJfcGFnZXM7XFxuLS1cXG5tbS92bXNjYW4uYz0xNjc5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuLS1cXG5tbS92bXNjYW4uYy0xNzIyLVxcdFxcdFxcdGdvdG8gbW92ZTtcXG5tbS92bXNjYW4uYzoxNzIzOlxcdFxcdGlmICghc2MtXFx1MDAzZW1heV91bm1hcCBcXHUwMDI2XFx1MDAyNiBmb2xpb19tYXBwZWQoZm9saW8pKVxcbm1tL3Ztc2Nhbi5jLTE3MjQtXFx0XFx0XFx0Z290byBtb3ZlO1xcbi0tXFxubW0vdm1zY2FuLmM9NDg3NT1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MjctXFx0XFx0LyogcmV0cnkgZm9saW9zIHRoYXQgbWF5IGhhdmUgbWlzc2VkIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXFxubW0vdm1zY2FuLmM6NDkyODpcXHRcXHRpZiAoIXNraXBfcmV0cnkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTQ5MjktXFx0XFx0ICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU4OjE0LjMxMzU2OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Njg5MDAwMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZpbGVtYXAgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIGNvbmNlcm5pbmcgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgLCBzcGVjaWZpY2FsbHkgdGhlIGludGVybmFsIHN0YXRpYyBoZWxwZXIuIFRoZSBrZXkgZXhwb3J0ZWQgZnVuY3Rpb25zIGFyZSBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIGFuZCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAuIEkgc2hvdWxkIHRha2UgYSBxdWljayBsb29rIGFyb3VuZCBgbW0vZmlsZW1hcC5jYCBhbmQgZWxzZXdoZXJlIHRvIHNlZSBpZiBhbnkgcmVsYXRlZCBmdW5jdGlvbnMgd2FycmFudCBjbG9zZXIgc2NydXRpbnkuIFNpbmNlIHRob3NlIGFyZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLlxuXG5Ob3csIGNvbmZpZ3VyYXRpb24td2lzZSwgSSBkb24ndCBzZWUgYW55dGhpbmcgZXhwbGljaXRseSByZXF1aXJlZC4gVGhlIHNvdXJjZSBmaWxlLCBgbW0vZmlsZW1hcC5jYCwgaXMgYnVpbHQgdW5jb25kaXRpb25hbGx5IChvYmoteSksIHNvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBlbXB0eSwgd2hpY2ggYWxpZ25zIHdpdGggbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBObyByZWFsIGtub2JzIHRvIHR3ZWFrIHRoZXJlLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdtIGdvaW5nIHRvIHJlLWNvbmZpcm0gdGhhdCB0aGUgXCJXb3J0aEZ1enppbmdcIiBmbGFnIGlzIHNldCB0byB0cnVlLiBCYXNlZCBvbiB0aGUgcmVhc29uaW5nIHByb3ZpZGVkLCB0aGF0IG1ha2VzIHNlbnNlLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgZnVuZGFtZW50YWwgcGFnZSBjYWNoZSBsb2dpYzogYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKWAgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWRkIGEgY2hlY2sgZm9yIGZvbGlvIG1hcHBpbmcgYmVmb3JlIGNhbGxpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKWAuIFRoaXMgaW1wYWN0cyB1bmNhY2hlZCBJL08gYW5kIHBhZ2UgY2FjaGUgZXZpY3Rpb24gcGF0aHMuIFRoaXMgaXMgZGVmaW5pdGVseSBmdXp6YWJsZS4gQW5kIHRoaXMgc291bmRzIGxpa2UgYSB2ZXJ5IHZhbHVhYmxlIGNoYW5nZS5cblxuU28gdG8gcmVjYXA6IEknbSBmb2N1c2VkIG9uIGBmb2xpb19lbmRfZHJvcGJlaGluZGAgYW5kIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4gTm8gc3BlY2lhbCBjb25maWdzIGFyZSBuZWVkZWQuIEV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI4NSwiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTg6MjAuMDAyNTcwNDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX2VuZF9kcm9wYmVoaW5kXCIsXG4gICAgXCJmb2xpb191bm1hcF9pbnZhbGlkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBwYWdlIGNhY2hlIGRyb3BiZWhpbmQgaW52YWxpZGF0aW9uIGxvZ2ljIGluIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKSBieSBhZGRpbmcgYSBjaGVjayAoIWZvbGlvX21hcHBlZChmb2xpbykpIGJlZm9yZSBjYWxsaW5nIGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKS4gVGhpcyBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHVuY2FjaGVkIC8gZHJvcGJlaGluZCBJL08gcHJvY2Vzc2luZyAoZS5nLiBSV0ZfRE9OVENBQ0hFKSBhbmQgd3JpdGViYWNrIGNvbXBsZXRpb24gaW4gcmVhY2hhYmxlLCBzdGFuZGFyZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fZW5kX2Ryb3BiZWhpbmRcIixcbiAgICBcImZvbGlvX3VubWFwX2ludmFsaWRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHBhZ2UgY2FjaGUgZHJvcGJlaGluZCBpbnZhbGlkYXRpb24gbG9naWMgaW4gZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpIGJ5IGFkZGluZyBhIGNoZWNrICghZm9saW9fbWFwcGVkKGZvbGlvKSkgYmVmb3JlIGNhbGxpbmcgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpLiBUaGlzIGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdW5jYWNoZWQgLyBkcm9wYmVoaW5kIEkvTyBwcm9jZXNzaW5nIChlLmcuIFJXRl9ET05UQ0FDSEUpIGFuZCB3cml0ZWJhY2sgY29tcGxldGlvbiBpbiByZWFjaGFibGUsIHN0YW5kYXJkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTg6MjAuMDAyNTk3NTE5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAyMDE3OTE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU4OjIwLjAwMzAxNjIxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDYwMTk3NTYxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKClgIHRvIGFkZCBhIGAhZm9saW9fbWFwcGVkKGZvbGlvKWAgY2hlY2sgYmVmb3JlIGludm9raW5nIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlKClgLCBwcmV2ZW50aW5nIGRyb3BiZWhpbmQgaW52YWxpZGF0aW9uIG9mIGZvbGlvcyB0aGF0IGFyZSBjdXJyZW50bHkgbWFwcGVkIGludG8gdXNlciBwYWdlIHRhYmxlcy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2svaGVhcCBidWZmZXIgY29weWluZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEl0IG9ubHkgYWRkcyBhIHN0YXRlIGNoZWNrIG9uIGV4aXN0aW5nIGxvY2tlZCBmb2xpb3Mgd2l0aGluIHRoZSBwYWdlIGNhY2hlLiBBbnkgaXNzdWVzIHJlbGF0ZWQgdG8gZm9saW8gbGlmZWN5Y2xlLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIG1lbW9yeSBzYWZldHkgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgKGUuZy4gYFZNX0JVR19PTl9GT0xJT2ApIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWYzZmFhYmM4Mzk3NmYyYjgyMTFlZmFlMDhiNGU2ZWE3Nzg1NDkwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDE3OjU1OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCA2YWZlYzYzNjg4MWZiLi4wMGZkODljZjZmNTUwIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4rKysgYi9tbS9maWxlbWFwLmNcbkBAIC0xNjE2LDcgKzE2MTYsNyBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdHJldHVybjtcbiBcdGlmICghZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuLVx0aWYgKG1hcHBpbmcpXG4rXHRpZiAobWFwcGluZyBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXG4gXHRcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU4OjIwLjAwMzAxNjk5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc1Njc4MDQzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGxhbmRlZCBpbiBteSBxdWV1ZSwgYW5kIHRoZSBmaXJzdCB0aG91Z2h0IHRoYXQgaGl0cyBtZSBpczogZG9lcyB0aGlzIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uPyBMZXQncyBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0LCBzbyBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGdvb2QsIGhhcmQgbG9vayBhdCB0aGlzIGRpZmY6XG5cbmBgYGRpZmZcbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDZhZmVjNjM2ODgxZmIuLjAwZmQ4OWNmNmY1NTBcbi0tLSBhL21tL2ZpbGVtYXAuY1xuKysrIGIvbW0vZmlsZW1hcC5jXG5AQCAtMTYxNiw3ICsxNjE2LDcgQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRyZXR1cm47XG4gXHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpXG4gXHRcdHJldHVybjtcbi1cdGlmIChtYXBwaW5nKVxuK1x0aWYgKG1hcHBpbmcgXHUwMDI2XHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKVxuIFx0XHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcbiB9XG5gYGBcblxuSXQncyBhIHN1YnRsZSBjaGFuZ2UsIGl0IGxvb2tzIGxpa2UgdGhlcmUgaXMgYSBuZXcgY29uZGl0aW9uIG9uIGEgZm9saW8gdW5tYXAsIGNoZWNraW5nIGlmIGl0J3MgbWFwcGVkIGJlZm9yZSBpbnZhbGlkYXRpbmcgaXQsIHdoaWNoIGFwcGVhcnMgdG8gYmUgd2l0aGluIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYC4gSSBuZWVkIHRvIHJldmlldyB0aGUgbG9naWMgYXJvdW5kIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCBpdHNlbGYgYW5kIGdldCBhIGZlZWwgZm9yIGhvdyBvZnRlbiB0aGlzIGNvZGUgcGF0aCBpcyBoaXQgYW5kIHdoYXQgc29ydCBvZiBvYmplY3RzIGFyZSBiZWluZyBtYW5pcHVsYXRlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGJhc2lzIGZvciBkZWNpZGluZyBpZiB3ZSBuZWVkIHRvIGV4cGFuZCB0aGUgc2NvcGUgZm9yIGZ1enppbmcgdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTg6MjcuNTcwODIzOTA5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9maWxlbWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTYwMDpcXHRcXHRcXHRyZXQgPSBmb2xpb193YWl0X2JpdF9raWxsYWJsZShmb2xpbywgUEdfcHJpdmF0ZV8yKTtcXG4xNjAxOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE2MDI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTYwMzpcXHRcXHR9XFxuMTYwNDpcXHRcXG4xNjA1OlxcdFxcdHJldHVybiByZXQ7XFxuMTYwNjpcXHR9XFxuMTYwNzpcXHRFWFBPUlRfU1lNQk9MKGZvbGlvX3dhaXRfcHJpdmF0ZV8yX2tpbGxhYmxlKTtcXG4xNjA4OlxcdFxcbjE2MDk6XFx0c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjE2MTA6XFx0e1xcbjE2MTE6XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpby1cXHUwMDNlbWFwcGluZztcXG4xNjEyOlxcdFxcbjE2MTM6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcXG4xNjE0OlxcdFxcbjE2MTU6XFx0XFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSB8fCBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcXG4xNjE2OlxcdFxcdFxcdHJldHVybjtcXG4xNjE3OlxcdFxcdGlmICghZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSlcXG4xNjE4OlxcdFxcdFxcdHJldHVybjtcXG4xNjE5OlxcdFxcdGlmIChtYXBwaW5nIFxcdTAwMjZcXHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKVxcbjE2MjA6XFx0XFx0XFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XFxuMTYyMTpcXHR9XFxuMTYyMjpcXHRcXG4xNjIzOlxcdC8qXFxuMTYyNDpcXHQgKiBJZiBmb2xpbyB3YXMgbWFya2VkIGFzIGRyb3BiZWhpbmQsIHRoZW4gcGFnZXMgc2hvdWxkIGJlIGRyb3BwZWQgd2hlbiB3cml0ZWJhY2tcXG4xNjI1OlxcdCAqIGNvbXBsZXRlcy4gRG8gdGhhdCBub3cuIElmIHdlIGZhaWwsIGl0J3MgbGlrZWx5IGJlY2F1c2Ugb2YgYSBiaWcgZm9saW8gLVxcbjE2MjY6XFx0ICoganVzdCByZXNldCBkcm9wYmVoaW5kIGZvciB0aGF0IGNhc2UgYW5kIGxhdHRlciBjb21wbGV0aW9ucyBzaG91bGQgaW52YWxpZGF0ZS5cXG4xNjI3OlxcdCAqL1xcbjE2Mjg6XFx0dm9pZCBmb2xpb19lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjE2Mjk6XFx0e1xcbjE2MzA6XFx0XFx0aWYgKCFmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxcbjE2MzE6XFx0XFx0XFx0cmV0dXJuO1xcbjE2MzI6XFx0XFxuMTYzMzpcXHRcXHQvKlxcbjE2MzQ6XFx0XFx0ICogSGl0dGluZyAhaW5fdGFzaygpIHNob3VsZCBub3QgaGFwcGVuIG9mZiBSV0ZfRE9OVENBQ0hFIHdyaXRlYmFjayxcXG4xNjM1OlxcdFxcdCAqIGJ1dCBjYW4gaGFwcGVuIGlmIG5vcm1hbCB3cml0ZWJhY2sganVzdCBoYXBwZW5zIHRvIGZpbmQgZGlydHkgZm9saW9zXFxuMTYzNjpcXHRcXHQgKiB0aGF0IHdlcmUgY3JlYXRlZCBhcyBwYXJ0IG9mIHVuY2FjaGVkIHdyaXRlYmFjaywgYW5kIHRoYXQgd3JpdGViYWNrXFxuMTYzNzpcXHRcXHQgKiB3b3VsZCBvdGhlcndpc2Ugbm90IG5lZWQgbm9uLUlSUSBoYW5kbGluZy4gSnVzdCBza2lwIHRoZVxcbjE2Mzg6XFx0XFx0ICogaW52YWxpZGF0aW9uIGluIHRoYXQgY2FzZS5cXG4xNjM5OlxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzo1ODoyNy41NzEyNzgwODlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODY2ODk5NjY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMsIHNwZWFraW5nIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIEZpbGUgTWFwcGluZyBhbmQgSW52YWxpZGF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgIGFuZCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBwbGF5IGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIGZpbGUgY2FjaGluZywgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBpbnRlcmFjdGlvbiBvZiBwYWdlcyB0aGF0IGFyZSBiYWNrZWQgYnkgZmlsZXMuIEkgbmVlZCB0byByZW1lbWJlciBleGFjdGx5IHdoYXQgZWFjaCBvZiB0aGVtIGlzIHJlc3BvbnNpYmxlIGZvciBkb2luZy4gQXJlIHRoZXkgcmVsYXRlZD8gRG8gdGhleSBjYWxsIGVhY2ggb3RoZXI/IERvIHRoZXkgaW50ZXJhY3Qgd2l0aCBhbnkgb2YgdGhlIHNhbWUgc3RydWN0dXJlcywgb3Igd29yayBvbiBzaW1pbGFyIGtpbmRzIG9mIGRhdGE/IFdoYXQga2luZCBvZiBjb250ZXh0IHRyaWdnZXJzIHRoZWlyIHVzZT8gSG93IGRvIHRoZXkgYWZmZWN0IHRoZSBmaWxlc3lzdGVtIG1ldGFkYXRhLCBhbmQgdGhlIHBhZ2UgY2FjaGU/IFVsdGltYXRlbHksIEknbSBhaW1pbmcgdG8gdmlzdWFsaXplIHRoZSBjb250cm9sIGZsb3csIHNvIEkga25vdyBob3cgdG8gb3B0aW1pemUgb3IgdHJvdWJsZXNob290IHRoZXNlIG9wZXJhdGlvbnMuIEkgd2FudCB0byBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGVzZSBwaWVjZXMgZml0IGluIHRoZSBwdXp6bGUgb2YgZ2V0dGluZyBkYXRhIHRvIGFuZCBmcm9tIHBlcnNpc3RlbnQgc3RvcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTg6MzYuMjQwMjc5MDk4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc3NjI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb191bm1hcF9pbnZhbGlkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmM9MTYwOT1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9maWxlbWFwLmMtMTYxOS1cXHRpZiAobWFwcGluZyBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS9maWxlbWFwLmM6MTYyMDpcXHRcXHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcXG5tbS9maWxlbWFwLmMtMTYyMS19XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTU5Nz1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxubW0vaW50ZXJuYWwuaDo1OTg6aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaW50ZXJuYWwuaC01OTktXFx0XFx0XFx0ICAgZ2ZwX3QgZ2ZwKTtcXG4tLVxcbm1tL3RydW5jYXRlLmM9NjA2PXN0YXRpYyBpbnQgZm9saW9fbGF1bmRlcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3RydW5jYXRlLmMtNjIxLSAqL1xcbm1tL3RydW5jYXRlLmM6NjIyOmludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3RydW5jYXRlLmMtNjIzLVxcdFxcdFxcdCAgIGdmcF90IGdmcClcXG4tLVxcbm1tL3RydW5jYXRlLmM9Njc2PWludCBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3RydW5jYXRlLmMtNzI1LVxcdFxcdFxcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcXG5tbS90cnVuY2F0ZS5jOjcyNjpcXHRcXHRcXHRyZXQyID0gZm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgR0ZQX0tFUk5FTCk7XFxubW0vdHJ1bmNhdGUuYy03MjctXFx0XFx0XFx0aWYgKHJldDIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzo1ODozNi4yOTEwNjE3MzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE5ODQwODkxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFRydW5jYXRpb24gSXNzdWUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGlzLiBJJ20gdGhpbmtpbmcgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgZWl0aGVyIGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBjb21taXQgaGlzdG9yeSB0byBzZWUgaWYgdGhlcmUgaGF2ZSBiZWVuIGFueSByZWNlbnQsIHJlbGF0ZWQgY2hhbmdlcywgb3IgcG9zc2libHkganVtcCByaWdodCBpbnRvIGBtbS90cnVuY2F0ZS5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCB0aGUgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHNwb3Qgd2hlcmUgc29tZSBvZiB0aGUgaW50cmljYWNpZXMgb2YgdGhlIGZpbGUgdHJ1bmNhdGlvbiBwcm9jZXNzIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBwYWdlIHVubWFwcGluZyBtaWdodCBiZSBoYW5kbGVkLiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZm9saW8gaW52YWxpZGF0aW9uIHdvcmtzIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0cnVuY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTIyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTg6NDguMjc1MTUzMzE2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS90cnVuY2F0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYyMDpcXHQgKiBzaXR0aW5nIGluIHRoZSBmb2xpb19hZGRfbHJ1KCkgY2FjaGVzLlxcbiA2MjE6XFx0ICovXFxuIDYyMjpcXHRpbnQgZm9saW9fdW5tYXBfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gNjIzOlxcdFxcdFxcdFxcdCAgIGdmcF90IGdmcClcXG4gNjI0OlxcdHtcXG4gNjI1OlxcdFxcdHZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7XFxuIDYyNjpcXHRcXHRpbnQgcmV0O1xcbiA2Mjc6XFx0XFxuIDYyODpcXHRcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xcbiA2Mjk6XFx0XFxuIDYzMDpcXHRcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcXG4gNjMxOlxcdFxcdFxcdHVubWFwX21hcHBpbmdfZm9saW8oZm9saW8pO1xcbiA2MzI6XFx0XFx0QlVHX09OKGZvbGlvX21hcHBlZChmb2xpbykpO1xcbiA2MzM6XFx0XFxuIDYzNDpcXHRcXHRyZXQgPSBmb2xpb19sYXVuZGVyKG1hcHBpbmcsIGZvbGlvKTtcXG4gNjM1OlxcdFxcdGlmIChyZXQpXFxuIDYzNjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA2Mzc6XFx0XFx0aWYgKGZvbGlvLVxcdTAwM2VtYXBwaW5nICE9IG1hcHBpbmcpXFxuIDYzODpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiA2Mzk6XFx0XFx0aWYgKCFmaWxlbWFwX3JlbGVhc2VfZm9saW8oZm9saW8sIGdmcCkpXFxuIDY0MDpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiA2NDE6XFx0XFxuIDY0MjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1hcHBpbmctXFx1MDAzZWhvc3QtXFx1MDAzZWlfbG9jayk7XFxuIDY0MzpcXHRcXHR4YV9sb2NrX2lycShcXHUwMDI2bWFwcGluZy1cXHUwMDNlaV9wYWdlcyk7XFxuIDY0NDpcXHRcXHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXFxuIDY0NTpcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4gNjQ2OlxcdFxcbiA2NDc6XFx0XFx0QlVHX09OKGZvbGlvX2hhc19wcml2YXRlKGZvbGlvKSk7XFxuIDY0ODpcXHRcXHRfX2ZpbGVtYXBfcmVtb3ZlX2ZvbGlvKGZvbGlvLCBOVUxMKTtcXG4gNjQ5OlxcdFxcdHhhX3VubG9ja19pcnEoXFx1MDAyNm1hcHBpbmctXFx1MDAzZWlfcGFnZXMpO1xcbiA2NTA6XFx0XFx0aWYgKG1hcHBpbmdfc2hyaW5rYWJsZShtYXBwaW5nKSlcXG4gNjUxOlxcdFxcdFxcdGlub2RlX2xydV9saXN0X2FkZChtYXBwaW5nLVxcdTAwM2Vob3N0KTtcXG4gNjUyOlxcdFxcdGZyZWVfZm9saW8gPSBtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZnJlZV9mb2xpbztcXG4gNjUzOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtYXBwaW5nLVxcdTAwM2Vob3N0LVxcdTAwM2VpX2xvY2spO1xcbiA2NTQ6XFx0XFxuIDY1NTpcXHRcXHRpZiAoZnJlZV9mb2xpbylcXG4gNjU2OlxcdFxcdFxcdGZyZWVfZm9saW8oZm9saW8pO1xcbiA2NTc6XFx0XFx0Zm9saW9fcHV0X3JlZnMoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuIDY1ODpcXHRcXHRyZXR1cm4gMTtcXG4gNjU5OlxcdGZhaWxlZDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6NTg6NDguMjc1MjU4MzA1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NzQ3NDg5NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0J3MgYWRkaW5nIGEgYCFmb2xpb19tYXBwZWQoZm9saW8pYCBjaGVjayBpbiBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpYCBiZWZvcmUgY2FsbGluZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpYC4gVGhpcyBpcyB0byBwcmV2ZW50IGludmFsaWRhdGluZyBtYXBwZWQgZm9saW9zIGR1cmluZyB0aGUgZHJvcGJlaGluZCBwYWdlIGNhY2hlIG9wZXJhdGlvbi4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBwb3RlbnRpYWwgS01TQU4gaXNzdWVzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgbm8sIGJ1dCBsZXQncyBiZSB0aG9yb3VnaC4gS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBhbmQgaW5mb3JtYXRpb24gbGVha3MsIHBhcnRpY3VsYXJseSB0byB1c2Vyc3BhY2UuIFdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZS4gVGhpcyBpc24ndCBhYm91dCBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEgdG8gdGhlIHVzZXIuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE/KiogTm8sIHRoZSBgZm9saW9fbWFwcGVkKGZvbGlvKWAgY2hlY2sganVzdCBsb29rcyBhdCB0aGUgZm9saW8ncyBpbnRlcm5hbCBzdGF0ZSBmbGFncyBhbmQgcmVmZXJlbmNlIGNvdW50cy4gSXQncyBub3QgZGVwZW5kZW50IG9uIHNvbWUgcHJldmlvdXNseSB1bmluaXRpYWxpemVkIGZpZWxkLlxuMy4gICoqQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBObywgdGhpcyBpcyBub3QgYSBuZXcgc3RydWN0dXJlIGFsbG9jYXRpb24sIGFuZCB0aGVyZSdzIG5vIGluaXRpYWxpemF0aW9uIG9mIGFueSBuZXcgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhdmUgdW5pbml0aWFsaXplZCBmaWVsZHMuXG40LiAgKipCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/KiogTm8uIFRoaXMgaXNuJ3QgYWJvdXQgYm91bmRzIGNoZWNraW5nIG9yIGxlbmd0aHMgdGhhdCBtaWdodCBsZWFkIHRvIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGEgcGFnZSBjYWNoZSBpbnZhbGlkYXRpb24gY2hlY2sgZHVyaW5nIGBkcm9wYmVoaW5kYCBhbmQgaXQgYXBwZWFycyBpdCBpcyBwdXJlbHkgYWJvdXQgcGFnZSBjYWNoZSBtYW5hZ2VtZW50LCBub3QgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIEJ1Z3MgaW4gdGhpcyBhcmVhIHdvdWxkIGJlIGNhdWdodCBieSB0aGUgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLCB0aGUgcGFnZSBjYWNoZSBsb2dpYywgS0FTQU4sIGFuZCBsb2NrZGVwLiBQcm9ibGVtcyBoZXJlIHdvdWxkIHNob3cgdXAgYXMgcmVmY291bnQgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgYXNzZXJ0aW9ucyBmYWlsdXJlcyAobGlrZSBgQlVHX09OYHMpIHRoYXQgYXJlIHN0YW5kYXJkIGtlcm5lbC1sZXZlbCBkZWJ1Z2dpbmcuXG5cblNvLCB0aGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQuIFRoZSBwYXRjaCBpdHNlbGYganVzdCBhZGRzIHRoZSBjaGVjayBhbmQgbm90aGluZyBtb3JlLCBpdCBkb2Vzbid0IHRvdWNoIGFueXRoaW5nIHRoYXQgd291bGQgYmUgcmVsZXZhbnQgdG8gS01TQU4uIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgdGhlIHVzdWFsIGtlcm5lbCBkZWJ1Z2dpbmcuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzM5LCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjU5OjA2LjAyMjc1MDQwNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKWAgdG8gYWRkIGEgYCFmb2xpb19tYXBwZWQoZm9saW8pYCBjaGVjayBiZWZvcmUgaW52b2tpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKWAsIHByZXZlbnRpbmcgZHJvcGJlaGluZCBpbnZhbGlkYXRpb24gb2YgZm9saW9zIHRoYXQgYXJlIGN1cnJlbnRseSBtYXBwZWQgaW50byB1c2VyIHBhZ2UgdGFibGVzLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjay9oZWFwIGJ1ZmZlciBjb3B5aW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gSXQgb25seSBhZGRzIGEgc3RhdGUgY2hlY2sgb24gZXhpc3RpbmcgbG9ja2VkIGZvbGlvcyB3aXRoaW4gdGhlIHBhZ2UgY2FjaGUuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byBmb2xpbyBsaWZlY3ljbGUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgbWVtb3J5IHNhZmV0eSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyAoZS5nLiBgVk1fQlVHX09OX0ZPTElPYCkgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpYCB0byBhZGQgYSBgIWZvbGlvX21hcHBlZChmb2xpbylgIGNoZWNrIGJlZm9yZSBpbnZva2luZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpYCwgcHJldmVudGluZyBkcm9wYmVoaW5kIGludmFsaWRhdGlvbiBvZiBmb2xpb3MgdGhhdCBhcmUgY3VycmVudGx5IG1hcHBlZCBpbnRvIHVzZXIgcGFnZSB0YWJsZXMuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIHN0YWNrL2hlYXAgYnVmZmVyIGNvcHlpbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBJdCBvbmx5IGFkZHMgYSBzdGF0ZSBjaGVjayBvbiBleGlzdGluZyBsb2NrZWQgZm9saW9zIHdpdGhpbiB0aGUgcGFnZSBjYWNoZS4gQW55IGlzc3VlcyByZWxhdGVkIHRvIGZvbGlvIGxpZmVjeWNsZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBtZW1vcnkgc2FmZXR5IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zIChlLmcuIGBWTV9CVUdfT05fRk9MSU9gKSBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowm9rm4[1] Phase: Succeeded StartedAt: 2026-08-29 17:59:17 +0000 UTC FinishedAt: 2026-08-29 17:59:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 17:59:17 +0000 UTC FinishedAt: 2026-08-29 17:59:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2] Phase: Succeeded StartedAt: 2026-08-29 17:59:17 +0000 UTC FinishedAt: 2026-08-29 21:39:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-29 17:59:17 +0000 UTC FinishedAt: 2026-08-29 21:39:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-29 17:59:17 +0000 UTC FinishedAt: 2026-08-29 17:59:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-29 17:59:17 +0000 UTC FinishedAt: 2026-08-29 17:59:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm9rm4/series-workflowm9rm4-convert-artifact-1846602544/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-29 17:59:27 +0000 UTC FinishedAt: 2026-08-29 18:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-29 17:59:27 +0000 UTC FinishedAt: 2026-08-29 18:16:19 +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:*7b857222-ee07-4df0-b376-0b30e623e879,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-workflowm9rm4/series-workflowm9rm4-convert-artifact-1846602544/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": "5135cb52-f79f-4ade-ac1a-a746f9b260f5", "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-workflowm9rm4/series-workflowm9rm4-build-action-4270905398/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-29 17:59:27 +0000 UTC FinishedAt: 2026-08-29 18:16:09 +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:*7b857222-ee07-4df0-b376-0b30e623e879,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-workflowm9rm4/series-workflowm9rm4-convert-artifact-1846602544/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": "5135cb52-f79f-4ade-ac1a-a746f9b260f5", "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-workflowm9rm4/series-workflowm9rm4-build-action-4270905398/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-29 18:16:19 +0000 UTC FinishedAt: 2026-08-29 18:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-29 18:16:19 +0000 UTC FinishedAt: 2026-08-29 18:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-29 18:16:19 +0000 UTC FinishedAt: 2026-08-29 18:16:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-29 18:16:19 +0000 UTC FinishedAt: 2026-08-29 18:16:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm9rm4/series-workflowm9rm4-convert-artifact-4126535703/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-29 18:16:29 +0000 UTC FinishedAt: 2026-08-29 18:18:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-29 18:16:29 +0000 UTC FinishedAt: 2026-08-29 18:18:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5135cb52-f79f-4ade-ac1a-a746f9b260f5,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-workflowm9rm4/series-workflowm9rm4-build-action-4270905398/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-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-29 18:18:26 +0000 UTC FinishedAt: 2026-08-29 18:18:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-29 18:18:26 +0000 UTC FinishedAt: 2026-08-29 18:18:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-29 18:18:26 +0000 UTC FinishedAt: 2026-08-29 18:34:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-29 18:18:26 +0000 UTC FinishedAt: 2026-08-29 18:34:47 +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:*7b857222-ee07-4df0-b376-0b30e623e879,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-workflowm9rm4/series-workflowm9rm4-convert-artifact-4126535703/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": "7b5076eb-72aa-46a5-8fd3-0a41ad936924", "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-workflowm9rm4/series-workflowm9rm4-build-action-1172383323/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-29 18:18:26 +0000 UTC FinishedAt: 2026-08-29 18:34:37 +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:*7b857222-ee07-4df0-b376-0b30e623e879,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-workflowm9rm4/series-workflowm9rm4-convert-artifact-4126535703/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": "7b5076eb-72aa-46a5-8fd3-0a41ad936924", "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-workflowm9rm4/series-workflowm9rm4-build-action-1172383323/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-29 18:34:47 +0000 UTC FinishedAt: 2026-08-29 18:34:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-29 18:34:47 +0000 UTC FinishedAt: 2026-08-29 18:34:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-29 18:34:47 +0000 UTC FinishedAt: 2026-08-29 18:36:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-29 18:34:47 +0000 UTC FinishedAt: 2026-08-29 18:36:33 +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:*7b5076eb-72aa-46a5-8fd3-0a41ad936924,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-workflowm9rm4/series-workflowm9rm4-build-action-1172383323/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-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-29 18:36:43 +0000 UTC FinishedAt: 2026-08-29 21:39:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-29 18:36:43 +0000 UTC FinishedAt: 2026-08-29 21:39:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*5135cb52-f79f-4ade-ac1a-a746f9b260f5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7b5076eb-72aa-46a5-8fd3-0a41ad936924,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-workflowm9rm4/series-workflowm9rm4-build-action-4270905398/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-workflowm9rm4/series-workflowm9rm4-build-action-1172383323/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-29 18:36:43 +0000 UTC FinishedAt: 2026-08-29 18:36:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-29 18:36:43 +0000 UTC FinishedAt: 2026-08-29 18:36:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm9rm4/series-workflowm9rm4-convert-artifact-3073679056/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-29 18:36:43 +0000 UTC FinishedAt: 2026-08-29 18:36:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-29 18:36:43 +0000 UTC FinishedAt: 2026-08-29 18:36:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-29 18:36:43 +0000 UTC FinishedAt: 2026-08-29 18:36:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-29 18:36:53 +0000 UTC FinishedAt: 2026-08-29 21:39:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm9rm4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"6f952a7f-fd35-4c3e-87be-5e997edb619a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-29 18:36:53 +0000 UTC FinishedAt: 2026-08-29 21:39:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5135cb52-f79f-4ade-ac1a-a746f9b260f5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7b5076eb-72aa-46a5-8fd3-0a41ad936924,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-workflowm9rm4/series-workflowm9rm4-build-action-4270905398/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-workflowm9rm4/series-workflowm9rm4-build-action-1172383323/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-workflowm9rm4/series-workflowm9rm4-convert-artifact-3073679056/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,}