Name: series-workflowxjjsk Phase: Succeeded StartedAt: 2026-07-27 03:18:35 +0000 UTC FinishedAt: 2026-07-27 07:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[0] Phase: Succeeded StartedAt: 2026-07-27 03:18:35 +0000 UTC FinishedAt: 2026-07-27 03:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 03:18:35 +0000 UTC FinishedAt: 2026-07-27 03:47: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": "f6f02d9e75816aeab869ddeb17ca30094ee9324a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KSM" ], "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": "f6f02d9e75816aeab869ddeb17ca30094ee9324a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KSM" ], "series_id": "0d9c6f9d-1444-46c4-ad1f-ec6defa184d1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "scan_get_next_rmap_item", "ksm_do_scan", "ksm_madvise", "ksm_enable_merge_any", "ksm_disable_merge_any" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjYW5fZ2V0X25leHRfcm1hcF9pdGVtJiMzNDssCiAgICAmIzM0O2tzbV9kb19zY2FuJiMzNDssCiAgICAmIzM0O2tzbV9tYWR2aXNlJiMzNDssCiAgICAmIzM0O2tzbV9lbmFibGVfbWVyZ2VfYW55JiMzNDssCiAgICAmIzM0O2tzbV9kaXNhYmxlX21lcmdlX2FueSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKSB3aGVyZSBhIGBicmVha2Agc3RhdGVtZW50IGluIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgb25seSBleGl0ZWQgdGhlIGlubmVyIGB3aGlsZWAgbG9vcCBpbnN0ZWFkIG9mIHRoZSBvdXRlciBgZm9yX2VhY2hfdm1hYCBsb29wIHdoZW4gYSBwcm9jZXNzIGlzIGV4aXRpbmcgKGBrc21fdGVzdF9leGl0KG1tKWAgaXMgdHJ1ZSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIEtTTSBiYWNrZ3JvdW5kIHNjYW5uaW5nIGFuZCBtYWR2aXNlL3ByY3RsIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjNhMzhlNzVmMTc1N2Y1ZmZlNjIxODZhMWU0MDYyNDVkZTZjNGQ1N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDAzOjQ1OjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmNcbmluZGV4IDdkNWI3NjQ3OGYwYjY1Li41ZWQ5ZGI2NzZiOWY5MiAxMDA2NDRcbi0tLSBhL21tL2tzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9rc20uY1xuQEAgLTI2NjYsNyAmIzQzOzI2NjYsNyBAQCBzdGF0aWMgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSlcbiBcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFxuIFx0XHRcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcbi1cdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRcdGdvdG8gbm9fdm1hcztcbiBcbiBcdFx0XHRpbnQgZm91bmQ7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDM6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjYW5fZ2V0X25leHRfcm1hcF9pdGVtJiMzNDssCiAgICAmIzM0O2tzbV9kb19zY2FuJiMzNDssCiAgICAmIzM0O2tzbV9tYWR2aXNlJiMzNDssCiAgICAmIzM0O2tzbV9lbmFibGVfbWVyZ2VfYW55JiMzNDssCiAgICAmIzM0O2tzbV9kaXNhYmxlX21lcmdlX2FueSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKSB3aGVyZSBhIGBicmVha2Agc3RhdGVtZW50IGluIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgb25seSBleGl0ZWQgdGhlIGlubmVyIGB3aGlsZWAgbG9vcCBpbnN0ZWFkIG9mIHRoZSBvdXRlciBgZm9yX2VhY2hfdm1hYCBsb29wIHdoZW4gYSBwcm9jZXNzIGlzIGV4aXRpbmcgKGBrc21fdGVzdF9leGl0KG1tKWAgaXMgdHJ1ZSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIEtTTSBiYWNrZ3JvdW5kIHNjYW5uaW5nIGFuZCBtYWR2aXNlL3ByY3RsIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjNhMzhlNzVmMTc1N2Y1ZmZlNjIxODZhMWU0MDYyNDVkZTZjNGQ1NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDI3IDAzOjQ1OjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0va3NtLmMgYi9tbS9rc20uYwppbmRleCA3ZDViNzY0NzhmMGI2NS4uNWVkOWRiNjc2YjlmOTIgMTAwNjQ0Ci0tLSBhL21tL2tzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tzbS5jCkBAIC0yNjY2LDcgJiM0MzsyNjY2LDcgQEAgc3RhdGljIHN0cnVjdCBrc21fcm1hcF9pdGVtICpzY2FuX2dldF9uZXh0X3JtYXBfaXRlbShzdHJ1Y3QgcGFnZSAqKnBhZ2UpCiAJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCiAJCQlpZiAoa3NtX3Rlc3RfZXhpdChtbSkpCi0JCQkJYnJlYWs7CiYjNDM7CQkJCWdvdG8gbm9fdm1hczsKIAogCQkJaW50IGZvdW5kOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLU00gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGtlcm5lbCYjMzk7cyBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKSBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9rc20uY2AuIEl0JiMzOTtzIGEgcHJldHR5IHRhcmdldGVkIGNoYW5nZTsgdGhleSYjMzk7dmUgcmVwbGFjZWQgYSBgYnJlYWs7YCBzdGF0ZW1lbnQgd2l0aCBhIGBnb3RvIG5vX3ZtYXM7YCBqdW1wIHdpdGhpbiB0aGUgYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCBmdW5jdGlvbi4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIGEgYml0LCB3b25kZXJpbmcgd2h5IHRoZXkmIzM5O3ZlIGNob3NlbiBhIGBnb3RvYCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzbyBJJiMzOTtsbCB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbiBvZiBgbW0va3NtLmNgLCBwcm9iYWJseSBhcm91bmQgbGluZSAyNjY2LCBnaXZlIG9yIHRha2UuIEkgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgdG8gZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscyBhbmQgZmlndXJlIG91dCB3aGF0IHRoZXkgd2VyZSB0cnlpbmcgdG8gYWNjb21wbGlzaCBhbmQgaWYgdGhpcyBpcyBhIGdvb2Qgc29sdXRpb24gZm9yIHRoZSBwcm9ibGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY2FuX2dldF9uZXh0X3JtYXBfaXRlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2tzbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2tzbS5jPTI1NzI9c3RhdGljIHN0cnVjdCBtbV93YWxrX29wcyBrc21fbmV4dF9wYWdlX29wcyA9IHtcbi0tXG5tbS9rc20uYy0yNTc2LVxubW0va3NtLmM6MjU3NzpzdGF0aWMgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSlcbm1tL2tzbS5jLTI1Nzgte1xuLS1cbm1tL2tzbS5jPTI3ODM9c3RhdGljIHZvaWQga3NtX2RvX3NjYW4odW5zaWduZWQgaW50IHNjYW5fbnBhZ2VzKVxuLS1cbm1tL2tzbS5jLTI3ODktXHRcdGNvbmRfcmVzY2hlZCgpO1xubW0va3NtLmM6Mjc5MDpcdFx0cm1hcF9pdGVtID0gc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW0oXHUwMDI2cGFnZSk7XG5tbS9rc20uYy0yNzkxLVx0XHRpZiAoIXJtYXBfaXRlbSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGluZ3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtbS9rc20uY2AsIHNwZWNpZmljYWxseSBmcm9tIGxpbmUgMjY1MCB0byAyNzAwLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgY3JpdGljYWwgY29kZSBpbiB0aGF0IHJhbmdlIOKAkyBwcm9iYWJseSByZWxhdGVkIHRvIGEgY29yZSBmdW5jdGlvbiBvciBjcnVjaWFsIGRhdGEgc3RydWN0dXJlIHdpdGhpbiB0aGUgS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcgKEtTTSkgaW1wbGVtZW50YXRpb24uIEdpdmVuIHRoZSBsaW5lIG51bWJlcnMsIGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBhbGdvcml0aG0sIGEgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzLCBvciBhIHBhcnRpY3VsYXIgc3RhZ2UgaW4gdGhlIG1lcmdpbmcgcHJvY2Vzcy4gTXkgaW50dWl0aW9uIHNheXMgdGhpcyBsaWtlbHkgaW52b2x2ZXMgaGFuZGxpbmcgdGhlIG1lcmdpbmcgb2YgcGFnZXMsIHBhZ2Ugc2Nhbm5pbmcsIG9yIG1heWJlIGV2ZW4gZXZpY3Rpb24gcG9saWNpZXMgd2l0aGluIEtTTS4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVhbHMgd2l0aCBjb250ZW50aW9uIGFuZCBzeW5jaHJvbml6YXRpb24gaWYgdGhlIGNvZGUgZGVsdmVzIGludG8gdGhlIHBhZ2UgdGFibGVzLiBMaW5lIDI2NTAgdG8gMjcwMCBzaG91bGQgZXhwb3NlIGVub3VnaCBsb2dpYyB0byBsZXQgbWUgYW5hbHl6ZSB0aGUgc3BlY2lmaWMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9rc20uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY1MDpcdFxuMjY1MTpcdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuMjY1MjpcdFx0aWYgKGtzbV90ZXN0X2V4aXQobW0pKVxuMjY1MzpcdFx0XHRnb3RvIG5vX3ZtYXM7XG4yNjU0Olx0XG4yNjU1Olx0XHRmb3JfZWFjaF92bWEodm1pLCB2bWEpIHtcbjI2NTY6XHRcdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NRVJHRUFCTEUpKVxuMjY1NzpcdFx0XHRcdGNvbnRpbnVlO1xuMjY1ODpcdFx0XHRpZiAoa3NtX3NjYW4uYWRkcmVzcyBcdTAwM2Mgdm1hLVx1MDAzZXZtX3N0YXJ0KVxuMjY1OTpcdFx0XHRcdGtzbV9zY2FuLmFkZHJlc3MgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4yNjYwOlx0XHRcdGlmICghdm1hLVx1MDAzZWFub25fdm1hKVxuMjY2MTpcdFx0XHRcdGtzbV9zY2FuLmFkZHJlc3MgPSB2bWEtXHUwMDNldm1fZW5kO1xuMjY2MjpcdFxuMjY2MzpcdFx0XHR3aGlsZSAoa3NtX3NjYW4uYWRkcmVzcyBcdTAwM2Mgdm1hLVx1MDAzZXZtX2VuZCkge1xuMjY2NDpcdFx0XHRcdHN0cnVjdCBrc21fbmV4dF9wYWdlX2FyZyBrc21fbmV4dF9wYWdlX2FyZztcbjI2NjU6XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqdG1wX3BhZ2UgPSBOVUxMO1xuMjY2NjpcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4yNjY3Olx0XG4yNjY4Olx0XHRcdFx0aWYgKGtzbV90ZXN0X2V4aXQobW0pKVxuMjY2OTpcdFx0XHRcdFx0Z290byBub192bWFzO1xuMjY3MDpcdFxuMjY3MTpcdFx0XHRcdGludCBmb3VuZDtcbjI2NzI6XHRcbjI2NzM6XHRcdFx0XHRmb3VuZCA9IHdhbGtfcGFnZV9yYW5nZV92bWEodm1hLCBrc21fc2Nhbi5hZGRyZXNzLFxuMjY3NDpcdFx0XHRcdFx0XHRcdCAgICB2bWEtXHUwMDNldm1fZW5kLFxuMjY3NTpcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZrc21fbmV4dF9wYWdlX29wcyxcbjI2NzY6XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2a3NtX25leHRfcGFnZV9hcmcpO1xuMjY3NzpcdFxuMjY3ODpcdFx0XHRcdGlmIChmb3VuZCBcdTAwM2UgMCkge1xuMjY3OTpcdFx0XHRcdFx0Zm9saW8gPSBrc21fbmV4dF9wYWdlX2FyZy5mb2xpbztcbjI2ODA6XHRcdFx0XHRcdHRtcF9wYWdlID0ga3NtX25leHRfcGFnZV9hcmcucGFnZTtcbjI2ODE6XHRcdFx0XHRcdGtzbV9zY2FuLmFkZHJlc3MgPSBrc21fbmV4dF9wYWdlX2FyZy5hZGRyO1xuMjY4MjpcdFx0XHRcdH0gZWxzZSB7XG4yNjgzOlx0XHRcdFx0XHRWTV9XQVJOX09OX09OQ0UoZm91bmQgXHUwMDNjIDApO1xuMjY4NDpcdFx0XHRcdFx0a3NtX3NjYW4uYWRkcmVzcyA9IHZtYS1cdTAwM2V2bV9lbmQgLSBQQUdFX1NJWkU7XG4yNjg1Olx0XHRcdFx0fVxuMjY4NjpcdFxuMjY4NzpcdFx0XHRcdGlmICh0bXBfcGFnZSkge1xuMjY4ODpcdFx0XHRcdFx0Zmx1c2hfYW5vbl9wYWdlKHZtYSwgdG1wX3BhZ2UsIGtzbV9zY2FuLmFkZHJlc3MpO1xuMjY4OTpcdFx0XHRcdFx0Zmx1c2hfZGNhY2hlX3BhZ2UodG1wX3BhZ2UpO1xuMjY5MDpcdFx0XHRcdFx0cm1hcF9pdGVtID0gZ2V0X25leHRfcm1hcF9pdGVtKG1tX3Nsb3QsXG4yNjkxOlx0XHRcdFx0XHRcdGtzbV9zY2FuLnJtYXBfbGlzdCwga3NtX3NjYW4uYWRkcmVzcyk7XG4yNjkyOlx0XHRcdFx0XHRpZiAocm1hcF9pdGVtKSB7XG4yNjkzOlx0XHRcdFx0XHRcdGtzbV9zY2FuLnJtYXBfbGlzdCA9XG4yNjk0Olx0XHRcdFx0XHRcdFx0XHRcdTAwMjZybWFwX2l0ZW0tXHUwMDNlcm1hcF9saXN0O1xuMjY5NTpcdFxuMjY5NjpcdFx0XHRcdFx0XHRpZiAoc2hvdWxkX3NraXBfcm1hcF9pdGVtKGZvbGlvLCBybWFwX2l0ZW0pKSB7XG4yNjk3Olx0XHRcdFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjI2OTg6XHRcdFx0XHRcdFx0XHRnb3RvIG5leHRfcGFnZTtcbjI2OTk6XHRcdFx0XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3VidGxlIEtTTSBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBjaGFuZ2luZyBhIGBicmVhaztgIHN0YXRlbWVudCB0byBhIGBnb3RvIG5vX3ZtYXM7YCBpbiB0aGUgYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0htbSwgaW50ZXJlc3RpbmcuIFdoeSB0aGlzIGNoYW5nZT8mIzM0OyBUaGVuIEkgc2VlIHRoZSBleHBsYW5hdGlvbjogaXQgZml4ZXMgYSBidWcgd2hlcmUgdGhlIGBicmVha2Agd2FzIG9ubHkgZXhpdGluZyB0aGUgaW5uZXIgYHdoaWxlYCBsb29wLCBidXQgbm90IHRoZSBlbmNvbXBhc3NpbmcgYGZvcl9lYWNoX3ZtYWAgbG9vcC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIElmIGBrc21fdGVzdF9leGl0KG1tKWAgZXZhbHVhdGVzIHRvIHRydWUgd2l0aGluIHRoYXQgbmVzdGVkIHN0cnVjdHVyZSwgdGhlIGluY29tcGxldGUgbG9vcCB0ZXJtaW5hdGlvbiBjb3VsZCBjcmVhdGUgc29tZSByZWFsIGhlYWRhY2hlcyBkb3duc3RyZWFtLiBJdCYjMzk7cyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBhbiBvZmYtYnktb25lIGVycm9yIGluIGxvb3AgY29udHJvbC4gSSBpbnN0YW50bHkgc2VlIHRoZSBpc3N1ZTsgdGhhdCBgYnJlYWtgIHdhc24mIzM5O3QgYWN0dWFsbHkgYnJlYWtpbmcgYWxsIHRoZSB3YXkgb3V0LgoKV2FpdCBhIHNlY29uZC4gVXNpbmcgYGdvdG9gIGlzIGEgYml0Li4uIHVuY29udmVudGlvbmFsIHRoZXNlIGRheXMsIGV2ZW4gaW4ga2VybmVsIGNvZGUsIHNvIGl0JiMzOTtzIHdvcnRoIHRha2luZyBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUgcGVyZmVjdGx5LiBTbywgd2hlcmUgZXhhY3RseSBpcyB0aGlzIGBub192bWFzYCBsYWJlbCBkZWZpbmVkPyBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRoZSBmdW5jdGlvbiB0byBpZGVudGlmeSB0aGF0IHRhcmdldC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgZ290b2AgaXMgYmVpbmcgdXNlZCBwcm9wZXJseSwgdGhhdCBpdCBkb2VzbiYjMzk7dCBjcmVhdGUgYW55IGNvbXBsZXggb3IgcHJvYmxlbWF0aWMgY29udHJvbCBmbG93LiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9rc20uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjcwMDpcdFxuMjcwMTpcdFx0XHRcdFx0XHRrc21fc2Nhbi5hZGRyZXNzICYjNDM7PSBQQUdFX1NJWkU7XG4yNzAyOlx0XHRcdFx0XHRcdCpwYWdlID0gdG1wX3BhZ2U7XG4yNzAzOlx0XHRcdFx0XHR9IGVsc2Uge1xuMjcwNDpcdFx0XHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMjcwNTpcdFx0XHRcdFx0fVxuMjcwNjpcdFx0XHRcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4yNzA3Olx0XHRcdFx0XHRyZXR1cm4gcm1hcF9pdGVtO1xuMjcwODpcdFx0XHRcdH1cbjI3MDk6XHRuZXh0X3BhZ2U6XG4yNzEwOlx0XHRcdFx0a3NtX3NjYW4uYWRkcmVzcyAmIzQzOz0gUEFHRV9TSVpFO1xuMjcxMTpcdFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjcxMjpcdFx0XHR9XG4yNzEzOlx0XHR9XG4yNzE0Olx0XG4yNzE1Olx0XHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpIHtcbjI3MTY6XHRub192bWFzOlxuMjcxNzpcdFx0XHRrc21fc2Nhbi5hZGRyZXNzID0gMDtcbjI3MTg6XHRcdFx0a3NtX3NjYW4ucm1hcF9saXN0ID0gXHUwMDI2bW1fc2xvdC1cdTAwM2VybWFwX2xpc3Q7XG4yNzE5Olx0XHR9XG4yNzIwOlx0XHQvKlxuMjcyMTpcdFx0ICogTnVrZSBhbGwgdGhlIHJtYXBfaXRlbXMgdGhhdCBhcmUgYWJvdmUgdGhpcyBjdXJyZW50IHJtYXA6XG4yNzIyOlx0XHQgKiBiZWNhdXNlIHRoZXJlIHdlcmUgbm8gVk1fTUVSR0VBQkxFIHZtYXMgd2l0aCBzdWNoIGFkZHJlc3Nlcy5cbjI3MjM6XHRcdCAqL1xuMjcyNDpcdFx0cmVtb3ZlX3RyYWlsaW5nX3JtYXBfaXRlbXMoa3NtX3NjYW4ucm1hcF9saXN0KTtcbjI3MjU6XHRcbjI3MjY6XHRcdHNwaW5fbG9jayhcdTAwMjZrc21fbW1saXN0X2xvY2spO1xuMjcyNzpcdFx0c2xvdCA9IGxpc3RfZW50cnkobW1fc2xvdC1cdTAwM2VzbG90Lm1tX25vZGUubmV4dCxcbjI3Mjg6XHRcdFx0XHQgIHN0cnVjdCBtbV9zbG90LCBtbV9ub2RlKTtcbjI3Mjk6XHRcdGtzbV9zY2FuLm1tX3Nsb3QgPSBtbV9zbG90X2VudHJ5KHNsb3QsIHN0cnVjdCBrc21fbW1fc2xvdCwgc2xvdCk7XG4yNzMwOlx0XHRpZiAoa3NtX3NjYW4uYWRkcmVzcyA9PSAwKSB7XG4yNzMxOlx0XHRcdC8qXG4yNzMyOlx0XHRcdCAqIFdlJiMzOTt2ZSBjb21wbGV0ZWQgYSBmdWxsIHNjYW4gb2YgYWxsIHZtYXMsIGhvbGRpbmcgbW1hcF9sb2NrXG4yNzMzOlx0XHRcdCAqIHRocm91Z2hvdXQsIGFuZCBmb3VuZCBubyBWTV9NRVJHRUFCTEU6IHNvIGRvIHRoZSBzYW1lIGFzXG4yNzM0Olx0XHRcdCAqIF9fa3NtX2V4aXQgZG9lcyB0byByZW1vdmUgdGhpcyBtbSBmcm9tIGFsbCBvdXIgbGlzdHMgbm93LlxuMjczNTpcdFx0XHQgKiBUaGlzIGFwcGxpZXMgZWl0aGVyIHdoZW4gY2xlYW5pbmcgdXAgYWZ0ZXIgX19rc21fZXhpdFxuMjczNjpcdFx0XHQgKiAoYnV0IGJld2FyZTogd2UgY2FuIHJlYWNoIGhlcmUgZXZlbiBiZWZvcmUgX19rc21fZXhpdCksXG4yNzM3Olx0XHRcdCAqIG9yIHdoZW4gYWxsIFZNX01FUkdFQUJMRSBhcmVhcyBoYXZlIGJlZW4gdW5tYXBwZWQgKGFuZFxuMjczODpcdFx0XHQgKiBtbWFwX2xvY2sgdGhlbiBwcm90ZWN0cyBhZ2FpbnN0IHJhY2Ugd2l0aCBNQURWX01FUkdFQUJMRSkuXG4yNzM5Olx0XHRcdCAqL1xuMjc0MDpcdFx0XHRoYXNoX2RlbChcdTAwMjZtbV9zbG90LVx1MDAzZXNsb3QuaGFzaCk7XG4yNzQxOlx0XHRcdGxpc3RfZGVsKFx1MDAyNm1tX3Nsb3QtXHUwMDNlc2xvdC5tbV9ub2RlKTtcbjI3NDI6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2a3NtX21tbGlzdF9sb2NrKTtcbjI3NDM6XHRcbjI3NDQ6XHRcdFx0bW1fc2xvdF9mcmVlKG1tX3Nsb3RfY2FjaGUsIG1tX3Nsb3QpO1xuMjc0NTpcdFx0XHQvKlxuMjc0NjpcdFx0XHQgKiBPbmx5IGNsZWFyIE1NRl9WTV9NRVJHRUFCTEUuIFdlIG11c3Qgbm90IGNsZWFyXG4yNzQ3Olx0XHRcdCAqIE1NRl9WTV9NRVJHRV9BTlksIGJlY2F1c2UgZm9yIHRob3NlIE1NRl9WTV9NRVJHRV9BTlkgcHJvY2VzcyxcbjI3NDg6XHRcdFx0ICogcGVyaGFwcyB0aGVpciBtbV9zdHJ1Y3QgaGFzIGp1c3QgYmVlbiBhZGRlZCB0byBrc21fbW1fc2xvdFxuMjc0OTpcdFx0XHQgKiBsaXN0LCBhbmQgaXRzIHByb2Nlc3MgaGFzIG5vdCB5ZXQgb2ZmaWNpYWxseSBzdGFydGVkIHJ1bm5pbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtTTSBGdW5jdGlvbmFsIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcsIHNwZWNpZmljYWxseSBhIGJ1ZyBmaXguIFNlZW1zIGxpa2UgYSBgYnJlYWtgIHdhcyBpbXByb3Blcmx5IGV4aXRpbmcgYSBgd2hpbGVgIGxvb3Agd2l0aGluIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAsIGJ1dCB0aGUgYGZvcl9lYWNoX3ZtYWAgbG9vcCB3b3VsZCBjb250aW51ZS4gVGhpcyBjb3VsZCBiZSBhIHByb2JsZW0sIGVzcGVjaWFsbHkgaWYgdGhlIHByb2Nlc3MgaXMgZXhpdGluZyDigJMgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIHNjZW5hcmlvIHBvdGVudGlhbGx5LiBUaGUgZnVuY3Rpb24gaXRzZWxmIGlzIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAsIGFuZCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBga3NtX2RvX3NjYW5gLiBEZWZpbml0ZWx5IGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSwgc28gaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB0YXJnZXQgYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCBkaXJlY3RseSwgYnV0IGl0IGxvb2tzIGxpa2UgdGhhdCBvbmUmIzM5O3Mgc3RhdGljLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2suLi4gWXVwLCBpdCYjMzk7cyBgc3RhdGljIHN0cnVjdCBrc21fcm1hcF9pdGVtICpzY2FuX2dldF9uZXh0X3JtYXBfaXRlbShzdHJ1Y3QgcGFnZSAqKnBhZ2UpYC4gRGFtbi4KClJpZ2h0LCB0aGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gT2theSwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayB1cHN0cmVhbS4gYGtzbV9kb19zY2FuYCBpcyAqYWxzbyogc3RhdGljLiBUaGlzIGlzbiYjMzk7dCBpZGVhbC4gTGV0JiMzOTtzIHNlZSB3aG8gaXMgKmNhbGxpbmcqIGBrc21fZG9fc2NhbmAgYW5kIHdvcmsgYmFjayBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrc21fZG9fc2NhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2tzbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2tzbS5jPTY5Mj1zdGF0aWMgaW50IGJyZWFrX2tzbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2tzbS5jLTcyOS1cdCAqIFRoYXQmIzM5O3MgYSBwaXR5OiB3ZSBtaWdodCB0aGVyZWZvcmUgaGF2ZSBtb3JlIGtlcm5lbCBwYWdlcyBhbGxvY2F0ZWRcbm1tL2tzbS5jOjczMDpcdCAqIHRoYW4gd2UmIzM5O3JlIGNvdW50aW5nIGFzIG5vZGVzIGluIHRoZSBzdGFibGUgdHJlZTsgYnV0IGtzbV9kb19zY2FuXG5tbS9rc20uYy03MzEtXHQgKiB3aWxsIHJldHJ5IHRvIGJyZWFrX2NvdyBvbiBlYWNoIHBhc3MsIHNvIHNob3VsZCByZWNvdmVyIHRoZSBwYWdlXG4tLVxubW0va3NtLmM9MjU3Nz1zdGF0aWMgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSlcbi0tXG5tbS9rc20uYy0yNjAxLVx0XHQgKiBMVFAmIzM5O3MgS1NNIHRlc3QgZnJvbSBzdWNjZWVkaW5nIGRldGVybWluaXN0aWNhbGx5OyBzbyBkcmFpblxubW0va3NtLmM6MjYwMjpcdFx0ICogdGhlbSBoZXJlIChoZXJlIHJhdGhlciB0aGFuIG9uIGVudHJ5IHRvIGtzbV9kb19zY2FuKCksXG5tbS9rc20uYy0yNjAzLVx0XHQgKiBzbyB3ZSBkb24mIzM5O3QgSVBJIHRvbyBvZnRlbiB3aGVuIHBhZ2VzX3RvX3NjYW4gaXMgc2V0IGxvdykuXG4tLVxubW0va3NtLmMtMjc3OS0vKipcbm1tL2tzbS5jOjI3ODA6ICoga3NtX2RvX3NjYW4gIC0gdGhlIGtzbSBzY2FubmVyIG1haW4gd29ya2VyIGZ1bmN0aW9uLlxubW0va3NtLmMtMjc4MS0gKiBAc2Nhbl9ucGFnZXM6ICBudW1iZXIgb2YgcGFnZXMgd2Ugd2FudCB0byBzY2FuIGJlZm9yZSB3ZSByZXR1cm4uXG5tbS9rc20uYy0yNzgyLSAqL1xubW0va3NtLmM6Mjc4MzpzdGF0aWMgdm9pZCBrc21fZG9fc2Nhbih1bnNpZ25lZCBpbnQgc2Nhbl9ucGFnZXMpXG5tbS9rc20uYy0yNzg0LXtcbi0tXG5tbS9rc20uYz0yODA0PXN0YXRpYyBpbnQga3NtX3NjYW5fdGhyZWFkKHZvaWQgKm5vdGhpbmcpXG4tLVxubW0va3NtLmMtMjgxNC1cdFx0aWYgKGtzbWRfc2hvdWxkX3J1bigpKVxubW0va3NtLmM6MjgxNTpcdFx0XHRrc21fZG9fc2Nhbihrc21fdGhyZWFkX3BhZ2VzX3RvX3NjYW4pO1xubW0va3NtLmMtMjgxNi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmtzbV90aHJlYWRfbXV0ZXgpO1xuLS1cbm1tL2tzbS5jPTMzNzU9c3RhdGljIGludCBrc21fbWVtb3J5X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZixcbi0tXG5tbS9rc20uYy0zMzgyLVx0XHQvKlxubW0va3NtLmM6MzM4MzpcdFx0ICogUHJldmVudCBrc21fZG9fc2NhbigpLCB1bm1lcmdlX2FuZF9yZW1vdmVfYWxsX3JtYXBfaXRlbXMoKVxubW0va3NtLmMtMzM4NC1cdFx0ICogYW5kIHJlbW92ZV9hbGxfc3RhYmxlX25vZGVzKCkgd2hpbGUgbWVtb3J5IGlzIGdvaW5nIG9mZmxpbmU6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqS1NNIFRocmVhZCBDb251bmRydW1zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGBrc21fc2Nhbl90aHJlYWRgLCB0aGUga2VybmVsIHRocmVhZCByZXNwb25zaWJsZSBmb3IgS2V5ZWQgSGFzaCBNZW1vcnkgKEtTTSkuIEJ1dCBhIHF1ZXN0aW9uIGtlZXBzIGJ1YmJsaW5nIHVwOiBjYW4gS1NNIGFjdHVhbGx5IGJlICp0cmlnZ2VyZWQqIGRpcmVjdGx5IGZyb20gc3lzY2FsbHM/IFNlZW1zIHN0cmFuZ2UsIGRvZXNuJiMzOTt0IGl0PyBUaGVuIEkgcmVtZW1iZXI6IHllcywgb2YgY291cnNlISBgbWFkdmlzZShNQURWX01FUkdFQUJMRSlgIGlzIHRoZSBrZXkuIFRoYXQgc3BlY2lmaWMgYG1hZHZpc2VgIGZsYWcgaXMgaG93IHlvdSBlbmFibGUgS1NNIG9uIGEgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKS4gQW5kIHRoZXJlJiMzOTtzIGFsc28gYHByY3RsKFBSX1NFVF9NRU1PUllfTUVSR0UpYCwgd2hpY2ggZW5hYmxlcyBpdCBhdCB0aGUgKnByb2Nlc3MqIGxldmVsLiBTbywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiwgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyBpbiBgbWFkdmlzZWAsIG9yIHBlcmhhcHMgbW9yZSBzcGVjaWZpY2FsbHkgYGtzbV9tYWR2aXNlYC4gSSBuZWVkIHRvIHJldmlldyB0aG9zZSBmdW5jdGlvbnMgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uIHdpdGggc3lzY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tzbV9tYWR2aXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va3NtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va3NtLmM9Mjk2Nz1pbnQga3NtX2Rpc2FibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0va3NtLmMtMjk3Ny1cbm1tL2tzbS5jOjI5Nzg6aW50IGtzbV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0va3NtLmMtMjk3OS1cdFx0dW5zaWduZWQgbG9uZyBlbmQsIGludCBhZHZpY2UsIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKVxuLS1cbm1tL2tzbS5jLTMwMTUtfVxubW0va3NtLmM6MzAxNjpFWFBPUlRfU1lNQk9MX0dQTChrc21fbWFkdmlzZSk7XG5tbS9rc20uYy0zMDE3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTkzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6CgoqKktTTSBEZWVwZXIgRGl2ZSoqCgpSaWdodCwgc28gYGtzbV9tYWR2aXNlYCBpcyB0aGUgZ2F0ZXdheSBmb3IgYE1BRFZfTUVSR0VBQkxFYCwgd2hpY2ggaXMgZXhhY3RseSBhcyBpdCBzaG91bGQgYmUuIFRoZSBjb25uZWN0aW9uIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE9mIGNvdXJzZSwgYGtzbV9zY2FuX3RocmVhZGAgaXMgdGhlIGJhY2tncm91bmQgcHJvY2VzcyBkcml2aW5nIHRoZSBLU00gb3BlcmF0aW9ucy4gTm93IEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCYjMzk7cyBkaWcgaW50byBLY29uZmlnIHRvIGNvbmZpcm0gdGhlIGV4YWN0IHNldHRpbmdzLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBlbmFibGVkLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaXMgcmlnaHQgZm9yIHRoaXMgdXNlIGNhc2UuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiB0aGUgc3BlY2lmaWNzIGJlZm9yZSBnb2luZyBhbnkgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1NNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTczNj1jb25maWcgTU1VX05PVElGSUVSXG4tLVxubW0vS2NvbmZpZy03MzktXG5tbS9LY29uZmlnOjc0MDpjb25maWcgS1NNXG5tbS9LY29uZmlnLTc0MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIEtTTSBmb3IgcGFnZSBtZXJnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4ODMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqS1NNIENvbmZpZ3VyYXRpb24gUmV2aWV3KioKCkFscmlnaHQsIHRoZSBrZXkgY29uZmlndXJhdGlvbiBpZGVudGlmaWVyIGhlcmUgaXMgYEtTTWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IGFzc2VzcyB0aGUgYnJvYWRlciBjb250ZXh0IGFuZCBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIGl0LiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O09rYXksIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggS1NNLiBXaGF0IGVsc2UgaXMgZW50YW5nbGVkIHdpdGggdGhpcz8gQXJlIHRoZXJlIGFueSB1cHN0cmVhbSBvciBkb3duc3RyZWFtIHNlcnZpY2VzLCByZWxhdGVkIGxpYnJhcmllcywgb3IgZXh0ZXJuYWwgY29tcG9uZW50cyB0aGF0IHJlbHkgb24gb3IgYXJlIGFmZmVjdGVkIGJ5IHRoaXM/JiMzNDsgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhvc2UgY29ubmVjdGlvbnMgdG8gYXZvaWQgbWlzc2luZyBzb21ldGhpbmcgY3J1Y2lhbC4gQSBkZXBlbmRlbmN5IG1hcCwgb3IgYXQgbGVhc3QgYSBtZW50YWwgY2hlY2tsaXN0IG9mIHBvdGVudGlhbCBsaW5rYWdlcywgaXMgZXNzZW50aWFsIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSBgS1NNYCBjb25maWd1cmF0aW9uIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2Ygd2hhdCBgS1NNYCBpbmZsdWVuY2VzIGlzIHRoZSB2ZXJ5IGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzQwOlx0Y29uZmlnIEtTTVxuIDc0MTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgS1NNIGZvciBwYWdlIG1lcmdpbmdcJiMzNDtcbiA3NDI6XHRcdGRlcGVuZHMgb24gTU1VXG4gNzQzOlx0XHRzZWxlY3QgWFhIQVNIXG4gNzQ0Olx0XHRoZWxwXG4gNzQ1Olx0XHQgIEVuYWJsZSBLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZzogS1NNIHBlcmlvZGljYWxseSBzY2FucyB0aG9zZSBhcmVhc1xuIDc0NjpcdFx0ICBvZiBhbiBhcHBsaWNhdGlvbiYjMzk7cyBhZGRyZXNzIHNwYWNlIHRoYXQgYW4gYXBwIGhhcyBhZHZpc2VkIG1heSBiZVxuIDc0NzpcdFx0ICBtZXJnZWFibGUuICBXaGVuIGl0IGZpbmRzIHBhZ2VzIG9mIGlkZW50aWNhbCBjb250ZW50LCBpdCByZXBsYWNlc1xuIDc0ODpcdFx0ICB0aGUgbWFueSBpbnN0YW5jZXMgYnkgYSBzaW5nbGUgcGFnZSB3aXRoIHRoYXQgY29udGVudCwgc29cbiA3NDk6XHRcdCAgc2F2aW5nIG1lbW9yeSB1bnRpbCBvbmUgb3IgYW5vdGhlciBhcHAgbmVlZHMgdG8gbW9kaWZ5IHRoZSBjb250ZW50LlxuIDc1MDpcdFx0ICBSZWNvbW1lbmRlZCBmb3IgdXNlIHdpdGggS1ZNLCBvciB3aXRoIG90aGVyIGR1cGxpY2F0aXZlIGFwcGxpY2F0aW9ucy5cbiA3NTE6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vbW0va3NtLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbjogS1NNIGlzIGluYWN0aXZlXG4gNzUyOlx0XHQgIHVudGlsIGEgcHJvZ3JhbSBoYXMgbWFkdmlzZWQgdGhhdCBhbiBhcmVhIGlzIE1BRFZfTUVSR0VBQkxFLCBhbmRcbiA3NTM6XHRcdCAgcm9vdCBoYXMgc2V0IC9zeXMva2VybmVsL21tL2tzbS9ydW4gdG8gMSAoaWYgQ09ORklHX1NZU0ZTIGlzIHNldCkuXG4gNzU0Olx0XG4gNzU1Olx0Y29uZmlnIERFRkFVTFRfTU1BUF9NSU5fQUREUlxuIDc1NjpcdFx0aW50IFwmIzM0O0xvdyBhZGRyZXNzIHNwYWNlIHRvIHByb3RlY3QgZnJvbSB1c2VyIGFsbG9jYXRpb25cJiMzNDtcbiA3NTc6XHRcdGRlcGVuZHMgb24gTU1VXG4gNzU4Olx0XHRkZWZhdWx0IDQwOTZcbiA3NTk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ0NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtTTSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBLU00gaW1wbGVtZW50YXRpb24uIFRoZSBjb25maWcgaXMgc2V0IHRvIGBLU01gLCB3aGljaCBpcyBnb29kIHRvIGtub3cuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmb2N1cyBvbiB0aGUgYGtzbV9tYWR2aXNlYCBhbmQgYGtzbV9zY2FuX3RocmVhZGAgZnVuY3Rpb25zLiBIbW0sIHdhaXQgYSBtaW51dGUsIGBrc21fc2Nhbl90aHJlYWRgIGlzIGEga3RocmVhZCwgc28gaXQmIzM5O3Mgbm90IGdvaW5nIHRvIGJlIGEgc3lzY2FsbCBlbnRyeSBwb2ludCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyIGlmIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdHJhY2luZy4gQnV0LCBga3NtX21hZHZpc2VgIGRlZmluaXRlbHkgaXMuIFRoYXQmIzM5O3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuCgpJIGFsc28gc2VlIGBrc21fZG9fc2NhbmAgaXMgcHJlc2VudCwgYW5kIGl0JiMzOTtzIHN0YXRpYywgd2hpY2ggY291bGQgaW5kaWNhdGUgaXQmIzM5O3Mgbm90IGV4cG9zZWQgZXh0ZXJuYWxseSwgdGhvdWdoIGl0IHNlZW1zIHRvIGJlIHRoZSBtYWluIHNjYW4gZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2Nhbm5pbmcgbG9naWMgaXMgdHJpZ2dlcmVkLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gLiBJdCBsb29rcyBsaWtlIGEgY29tcGxleCBmdW5jdGlvbi4gSXQmIzM5O3MgcHJvYmFibHkgKm5vdCogaW5saW5lZC4gSSBzaG91bGQgY2hlY2sgdGhlIGNvZGUgZm9yIHRoYXQgb25lIHNwZWNpZmljYWxseSwgYW5kIGxldCYjMzk7cyBnbyBhaGVhZCBhbmQgbG9vayBhdCB0aGUgc2l6ZSwganVzdCB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGNvbXBsZXhpdHkuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaW5saW5lZCBmdW5jdGlvbnMgY2FuIG9ic2N1cmUgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2tzbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU3NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU3NzpcdHN0YXRpYyBzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW0oc3RydWN0IHBhZ2UgKipwYWdlKVxuMjU3ODpcdHtcbjI1Nzk6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuMjU4MDpcdFx0c3RydWN0IGtzbV9tbV9zbG90ICptbV9zbG90O1xuMjU4MTpcdFx0c3RydWN0IG1tX3Nsb3QgKnNsb3Q7XG4yNTgyOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbjI1ODM6XHRcdHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW07XG4yNTg0Olx0XHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yIHZtaTtcbjI1ODU6XHRcdGludCBuaWQ7XG4yNTg2Olx0XG4yNTg3Olx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZrc21fbW1faGVhZC5zbG90Lm1tX25vZGUpKVxuMjU4ODpcdFx0XHRyZXR1cm4gTlVMTDtcbjI1ODk6XHRcbjI1OTA6XHRcdG1tX3Nsb3QgPSBrc21fc2Nhbi5tbV9zbG90O1xuMjU5MTpcdFx0aWYgKG1tX3Nsb3QgPT0gXHUwMDI2a3NtX21tX2hlYWQpIHtcbjI1OTI6XHRcdFx0YWR2aXNvcl9zdGFydF9zY2FuKCk7XG4yNTkzOlx0XHRcdHRyYWNlX2tzbV9zdGFydF9zY2FuKGtzbV9zY2FuLnNlcW5yLCBrc21fcm1hcF9pdGVtcyk7XG4yNTk0Olx0XG4yNTk1Olx0XHRcdC8qXG4yNTk2Olx0XHRcdCAqIEEgbnVtYmVyIG9mIHBhZ2VzIGNhbiBoYW5nIGFyb3VuZCBpbmRlZmluaXRlbHkgaW4gcGVyLWNwdVxuMjU5NzpcdFx0XHQgKiBMUlUgY2FjaGUsIHJhaXNlZCBwYWdlIGNvdW50IHByZXZlbnRpbmcgd3JpdGVfcHJvdGVjdF9wYWdlXG4yNTk4Olx0XHRcdCAqIGZyb20gbWVyZ2luZyB0aGVtLiAgVGhvdWdoIGl0IGRvZXNuJiMzOTt0IHJlYWxseSBtYXR0ZXIgbXVjaCxcbjI1OTk6XHRcdFx0ICogaXQgaXMgcHV6emxpbmcgdG8gc2VlIHNvbWUgc3R1Y2sgaW4gcGFnZXNfdm9sYXRpbGUgdW50aWxcbjI2MDA6XHRcdFx0ICogb3RoZXIgYWN0aXZpdHkgam9zdGxlcyB0aGVtIG91dCwgYW5kIHRoZXkgYWxzbyBwcmV2ZW50ZWRcbjI2MDE6XHRcdFx0ICogTFRQJiMzOTtzIEtTTSB0ZXN0IGZyb20gc3VjY2VlZGluZyBkZXRlcm1pbmlzdGljYWxseTsgc28gZHJhaW5cbjI2MDI6XHRcdFx0ICogdGhlbSBoZXJlIChoZXJlIHJhdGhlciB0aGFuIG9uIGVudHJ5IHRvIGtzbV9kb19zY2FuKCksXG4yNjAzOlx0XHRcdCAqIHNvIHdlIGRvbiYjMzk7dCBJUEkgdG9vIG9mdGVuIHdoZW4gcGFnZXNfdG9fc2NhbiBpcyBzZXQgbG93KS5cbjI2MDQ6XHRcdFx0ICovXG4yNjA1Olx0XHRcdGxydV9hZGRfZHJhaW5fYWxsKCk7XG4yNjA2Olx0XG4yNjA3Olx0XHRcdC8qXG4yNjA4Olx0XHRcdCAqIFdoZXJlYXMgc3RhbGUgc3RhYmxlX25vZGVzIG9uIHRoZSBzdGFibGVfdHJlZSBpdHNlbGZcbjI2MDk6XHRcdFx0ICogZ2V0IHBydW5lZCBpbiB0aGUgcmVndWxhciBjb3Vyc2Ugb2Ygc3RhYmxlX3RyZWVfc2VhcmNoKCksXG4yNjEwOlx0XHRcdCAqIHRob3NlIG1vdmVkIG91dCB0byB0aGUgbWlncmF0ZV9ub2RlcyBsaXN0IGNhbiBhY2N1bXVsYXRlOlxuMjYxMTpcdFx0XHQgKiBzbyBwcnVuZSB0aGVtIG9uY2UgYmVmb3JlIGVhY2ggZnVsbCBzY2FuLlxuMjYxMjpcdFx0XHQgKi9cbjI2MTM6XHRcdFx0aWYgKCFrc21fbWVyZ2VfYWNyb3NzX25vZGVzKSB7XG4yNjE0Olx0XHRcdFx0c3RydWN0IGtzbV9zdGFibGVfbm9kZSAqc3RhYmxlX25vZGUsICpuZXh0O1xuMjYxNTpcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4yNjE2Olx0XG4yNjE3Olx0XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0YWJsZV9ub2RlLCBuZXh0LFxuMjYxODpcdFx0XHRcdFx0XHRcdCBcdTAwMjZtaWdyYXRlX25vZGVzLCBsaXN0KSB7XG4yNjE5Olx0XHRcdFx0XHRmb2xpbyA9IGtzbV9nZXRfZm9saW8oc3RhYmxlX25vZGUsXG4yNjIwOlx0XHRcdFx0XHRcdFx0ICAgICAgS1NNX0dFVF9GT0xJT19OT0xPQ0spO1xuMjYyMTpcdFx0XHRcdFx0aWYgKGZvbGlvKVxuMjYyMjpcdFx0XHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMjYyMzpcdFx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yNjI0Olx0XHRcdFx0fVxuMjYyNTpcdFx0XHR9XG4yNjI2Olx0XG4yNjI3Olx0XHRcdGZvciAobmlkID0gMDsgbmlkIFx1MDAzYyBrc21fbnJfbm9kZV9pZHM7IG5pZCYjNDM7JiM0MzspXG4yNjI4Olx0XHRcdFx0cm9vdF91bnN0YWJsZV90cmVlW25pZF0gPSBSQl9ST09UO1xuMjYyOTpcdFxuMjYzMDpcdFx0XHRzcGluX2xvY2soXHUwMDI2a3NtX21tbGlzdF9sb2NrKTtcbjI2MzE6XHRcdFx0c2xvdCA9IGxpc3RfZW50cnkobW1fc2xvdC1cdTAwM2VzbG90Lm1tX25vZGUubmV4dCxcbjI2MzI6XHRcdFx0XHRcdCAgc3RydWN0IG1tX3Nsb3QsIG1tX25vZGUpO1xuMjYzMzpcdFx0XHRtbV9zbG90ID0gbW1fc2xvdF9lbnRyeShzbG90LCBzdHJ1Y3Qga3NtX21tX3Nsb3QsIHNsb3QpO1xuMjYzNDpcdFx0XHRrc21fc2Nhbi5tbV9zbG90ID0gbW1fc2xvdDtcbjI2MzU6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2a3NtX21tbGlzdF9sb2NrKTtcbjI2MzY6XHRcdFx0LypcbjI2Mzc6XHRcdFx0ICogQWx0aG91Z2ggd2UgdGVzdGVkIGxpc3RfZW1wdHkoKSBhYm92ZSwgYSByYWNpbmcgX19rc21fZXhpdFxuMjYzODpcdFx0XHQgKiBvZiB0aGUgbGFzdCBtbSBvbiB0aGUgbGlzdCBtYXkgaGF2ZSByZW1vdmVkIGl0IHNpbmNlIHRoZW4uXG4yNjM5Olx0XHRcdCAqL1xuMjY0MDpcdFx0XHRpZiAobW1fc2xvdCA9PSBcdTAwMjZrc21fbW1faGVhZClcbjI2NDE6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbjI2NDI6XHRuZXh0X21tOlxuMjY0MzpcdFx0XHRrc21fc2Nhbi5hZGRyZXNzID0gMDtcbjI2NDQ6XHRcdFx0a3NtX3NjYW4ucm1hcF9saXN0ID0gXHUwMDI2bW1fc2xvdC1cdTAwM2VybWFwX2xpc3Q7XG4yNjQ1Olx0XHR9XG4yNjQ2Olx0XG4yNjQ3Olx0XHRzbG90ID0gXHUwMDI2bW1fc2xvdC1cdTAwM2VzbG90O1xuMjY0ODpcdFx0bW0gPSBzbG90LVx1MDAzZW1tO1xuMjY0OTpcdFx0dm1hX2l0ZXJfaW5pdChcdTAwMjZ2bWksIG1tLCBrc21fc2Nhbi5hZGRyZXNzKTtcbjI2NTA6XHRcbjI2NTE6XHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbjI2NTI6XHRcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcbjI2NTM6XHRcdFx0Z290byBub192bWFzO1xuMjY1NDpcdFxuMjY1NTpcdFx0Zm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7XG4yNjU2Olx0XHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUVSR0VBQkxFKSlcbjI2NTc6XHRcdFx0XHRjb250aW51ZTtcbjI2NTg6XHRcdFx0aWYgKGtzbV9zY2FuLmFkZHJlc3MgXHUwMDNjIHZtYS1cdTAwM2V2bV9zdGFydClcbjI2NTk6XHRcdFx0XHRrc21fc2Nhbi5hZGRyZXNzID0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xuMjY2MDpcdFx0XHRpZiAoIXZtYS1cdTAwM2Vhbm9uX3ZtYSlcbjI2NjE6XHRcdFx0XHRrc21fc2Nhbi5hZGRyZXNzID0gdm1hLVx1MDAzZXZtX2VuZDtcbjI2NjI6XHRcbjI2NjM6XHRcdFx0d2hpbGUgKGtzbV9zY2FuLmFkZHJlc3MgXHUwMDNjIHZtYS1cdTAwM2V2bV9lbmQpIHtcbjI2NjQ6XHRcdFx0XHRzdHJ1Y3Qga3NtX25leHRfcGFnZV9hcmcga3NtX25leHRfcGFnZV9hcmc7XG4yNjY1Olx0XHRcdFx0c3RydWN0IHBhZ2UgKnRtcF9wYWdlID0gTlVMTDtcbjI2NjY6XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMjY2NzpcdFxuMjY2ODpcdFx0XHRcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcbjI2Njk6XHRcdFx0XHRcdGdvdG8gbm9fdm1hcztcbjI2NzA6XHRcbjI2NzE6XHRcdFx0XHRpbnQgZm91bmQ7XG4yNjcyOlx0XG4yNjczOlx0XHRcdFx0Zm91bmQgPSB3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwga3NtX3NjYW4uYWRkcmVzcyxcbjI2NzQ6XHRcdFx0XHRcdFx0XHQgICAgdm1hLVx1MDAzZXZtX2VuZCxcbjI2NzU6XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2a3NtX25leHRfcGFnZV9vcHMsXG4yNjc2Olx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmtzbV9uZXh0X3BhZ2VfYXJnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUwNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyBLU00gQVBJIEVudHJ5cG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEtTTSBjb2RlIGFuZCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIHRvIGluY2x1ZGUgaW4gdGhpcyBhbmFseXNpcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyJiMzOTtzIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gIGZ1bmN0aW9uIGlzIG1hc3NpdmUg4oCTIG92ZXIgMTUwIGxpbmVzIOKAkyBzbyBpbmxpbmluZyBpdCBpcyBkZWZpbml0ZWx5IG91dCBvZiB0aGUgcXVlc3Rpb24uIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBhZGQgaXQuIFRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIGxldCYjMzk7cyBhbHNvIGdyYWIgYGtzbV9tYWR2aXNlYCBhbmQgYGtzbV9kb19zY2FuYC4gSG1tLCBidXQgd2FpdCBhIHNlY29uZOKApiBga3NtX2RvX3NjYW5gIGlzIGFsc28gbWFya2VkIGFzIHN0YXRpYy4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgd2FudHMgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBPa2F5LCBzY3JhdGNoIHRoYXQgb25lLiBTbywgYGtzbV9tYWR2aXNlYCBpdCBpcy4KCk5vdywgYW0gSSBtaXNzaW5nIGFueXRoaW5nPyBJcyB0aGVyZSBhbm90aGVyIGVudHJ5IHBvaW50IEkgc2hvdWxkIGNvbnNpZGVyPyBMZXQgbWUgc2Vl4oCmIEkga25vdyB0aGUgYG1hZHZpc2VgIHN5c2NhbGwgdWx0aW1hdGVseSBjYWxscyBga3NtX21hZHZpc2VgLCB3aGljaCBJJiMzOTt2ZSBpbmNsdWRlZC4gIERvZXMgYHByY3RsYCBwbGF5IGFueSByb2xlIGhlcmU/IEkgc2VlbSB0byByZW1lbWJlciBgcHJjdGxgIG1pZ2h0IGJlIGludm9sdmVkLiBMZXQmIzM5O3MgY2hlY2vigKYgSSBuZWVkIHRvIHNlZSBpZiBpdCBjYWxscyBga3NtX2VuYWJsZV9tZXJnZV9hbnlgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB0byBjb3ZlciBhbGwgdGhlIGJhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrc21fZW5hYmxlX21lcmdlX2FueSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2tzbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2tzbS5jPTI4OTc9c3RhdGljIGludCBrc21fZGVsX3ZtYXMoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0va3NtLmMtMjkxMS0vKipcbm1tL2tzbS5jOjI5MTI6ICoga3NtX2VuYWJsZV9tZXJnZV9hbnkgLSBBZGQgbW0gdG8gbW0ga3NtIGxpc3QgYW5kIGVuYWJsZSBtZXJnaW5nIG9uIGFsbFxubW0va3NtLmMtMjkxMy0gKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgVk1BJiMzOTtzXG4tLVxubW0va3NtLmMtMjkxOC0gKi9cbm1tL2tzbS5jOjI5MTk6aW50IGtzbV9lbmFibGVfbWVyZ2VfYW55KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0va3NtLmMtMjkyMC17XG4tLVxubW0va3NtLmMtMjkzOS0gKiBrc21fZGlzYWJsZV9tZXJnZV9hbnkgLSBEaXNhYmxlIG1lcmdpbmcgb24gYWxsIGNvbXBhdGlibGUgVk1BJiMzOTtzIG9mIHRoZSBtbSxcbm1tL2tzbS5jOjI5NDA6ICpcdFx0XHQgICBwcmV2aW91c2x5IGVuYWJsZWQgdmlhIGtzbV9lbmFibGVfbWVyZ2VfYW55KCkuXG5tbS9rc20uYy0yOTQxLSAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgS1NNIE1lcmdlIENvbnRyb2wqKgoKUmlnaHQsIHNvIGBrc21fZW5hYmxlX21lcmdlX2FueWAgaXMgYW5vdGhlciBjcnVjaWFsIGVudHJ5IHBvaW50IGluIHRoaXMgS1NNIChLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZykgY29udGV4dC4gSXQmIzM5O3Mgbm90IHRoZSBvbmx5IG9uZSwgb2J2aW91c2x5LCBidXQgaXQmIzM5O3MgYSB2aXRhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIHN5c3RlbSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZlYXR1cmVzLgoKTXkgbmV4dCBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgY291bnRlcnBhcnQgdG8gZW5hYmxpbmcgdGhpcyBmZWF0dXJlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IGBrc21fZGlzYWJsZV9tZXJnZV9hbnlgIHdvcmtzLiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGlzIGFic29sdXRlbHkgZnVuZGFtZW50YWwgZm9yIG1hbmFnaW5nIHRoZSB3aG9sZSBwcm9jZXNzIGFuZCBJIHdhbnQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBtZXJnaW5nIGlzIGFjdHVhbGx5ICpjb250cm9sbGVkKiB3aXRoaW4gdGhlIGtlcm5lbC4gSSBjYW4gdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgc3lzdGVtIGlzIGJlaGF2aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrc21fZGlzYWJsZV9tZXJnZV9hbnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9rc20uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9rc20uYz0yOTE5PWludCBrc21fZW5hYmxlX21lcmdlX2FueShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS9rc20uYy0yOTM4LS8qKlxubW0va3NtLmM6MjkzOTogKiBrc21fZGlzYWJsZV9tZXJnZV9hbnkgLSBEaXNhYmxlIG1lcmdpbmcgb24gYWxsIGNvbXBhdGlibGUgVk1BJiMzOTtzIG9mIHRoZSBtbSxcbm1tL2tzbS5jLTI5NDAtICpcdFx0XHQgICBwcmV2aW91c2x5IGVuYWJsZWQgdmlhIGtzbV9lbmFibGVfbWVyZ2VfYW55KCkuXG4tLVxubW0va3NtLmMtMjk0OS0gKi9cbm1tL2tzbS5jOjI5NTA6aW50IGtzbV9kaXNhYmxlX21lcmdlX2FueShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL2tzbS5jLTI5NTEte1xuLS1cbm1tL2tzbS5jPTI5Njc9aW50IGtzbV9kaXNhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL2tzbS5jLTI5NzMtXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfVk1fTUVSR0VfQU5ZLCBtbSkpXG5tbS9rc20uYzoyOTc0Olx0XHRyZXR1cm4ga3NtX2Rpc2FibGVfbWVyZ2VfYW55KG1tKTtcbm1tL2tzbS5jLTI5NzUtXHRyZXR1cm4ga3NtX2RlbF92bWFzKG1tKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3OTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS1NNIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duLiBUbyBmdXp6IEtTTSBlZmZlY3RpdmVseSwgSSBuZWVkIHRvIGZvY3VzIG9uIHNwZWNpZmljIGVudHJ5IHBvaW50cyBhbmQgZXhlY3V0aW9uIHBhdGhzLiBNeSBpbml0aWFsIHRhcmdldHMgYXJlIHRoZSBzeXNjYWxsIGVudHJ5IHBvaW50cyBmb3IgYGtzbV9tYWR2aXNlYCwgYGtzbV9lbmFibGVfbWVyZ2VfYW55YCwgYGtzbV9kaXNhYmxlX21lcmdlX2FueWAsIGFuZCBga3NtX2Rpc2FibGVgLiBUaGVzZSBhcmUgbXkgcHJpbWFyeSBmb2N1cyBzeW1ib2xzLgoKSSBrbm93IHRoZSBidWcgaXMgd2l0aGluIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAuIEl0JiMzOTtzIGNhbGxlZCBieSBga3NtX2RvX3NjYW5gLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBga3NtX3NjYW5fdGhyZWFkYCwgdGhlIGJhY2tncm91bmQga2VybmVsIHRocmVhZCByZXNwb25zaWJsZSBmb3IgS1NNIG9wZXJhdGlvbi4gVGhlIGNyaXRpY2FsIHRyaWdnZXIgY29uZGl0aW9uIHNlZW1zIHRvIGJlIGBrc21fdGVzdF9leGl0KG1tKWAgZXZhbHVhdGluZyB0byB0cnVlLiBUaGlzIGluZGljYXRlcyB0aGUgcHJvY2VzcyBpcyBleGl0aW5nLgoKVGhlcmVmb3JlLCBteSBzdHJhdGVneSBpcyBjbGVhcjogSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIGZ1enppbmcgYGtzbV9tYWR2aXNlYCBpbiBjb25qdW5jdGlvbiB3aXRoIHByb2Nlc3MgZXhpdCBzY2VuYXJpb3MuIFNpbmNlIGBrc21fc2Nhbl90aHJlYWRgIHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgYW5kIGlzbiYjMzk7dCBkaXJlY3RseSBleHBvc2VkIGFzIGEgc3lzY2FsbCwgSSYjMzk7bGwgc3RpbGwgaW5jbHVkZSBpdCBhbmQgYWxzbyBpbmNsdWRlIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgYXMgYW5vdGhlciBmb2N1cyBzeW1ib2wsIGdpdmVuIHRoYXQgaXQmIzM5O3MgYSBsYXJnZSwgbm9uLWlubGluZWQgZnVuY3Rpb24gYW5kIGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBga3NtX3Rlc3RfZXhpdGAgYmVoYXZlcyB1bmRlciB2YXJpb3VzIGNvbmRpdGlvbnMgdG8gZmluZS10dW5lIG15IGZ1enppbmcgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tzbV90ZXN0X2V4aXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9rc20uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9rc20uYz01OTA9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc3RhYmxlX25vZGUoc3RydWN0IGtzbV9zdGFibGVfbm9kZSAqc3RhYmxlX25vZGUpXG4tLVxubW0va3NtLmMtNjAxLSAqIGEgc3BlY2lhbCBmbGFnOiB0aGV5IGNhbiBqdXN0IGJhY2sgb3V0IGFzIHNvb24gYXMgbW1fdXNlcnMgZ29lcyB0byB6ZXJvLlxubW0va3NtLmM6NjAyOiAqIGtzbV90ZXN0X2V4aXQoKSBpcyB1c2VkIHRocm91Z2hvdXQgdG8gbWFrZSB0aGlzIHRlc3QgZm9yIGV4aXQ6IGluIHNvbWVcbm1tL2tzbS5jLTYwMy0gKiBwbGFjZXMgZm9yIGNvcnJlY3RuZXNzLCBpbiBzb21lIHBsYWNlcyBqdXN0IHRvIGF2b2lkIHVubmVjZXNzYXJ5IHdvcmsuXG5tbS9rc20uYy02MDQtICovXG5tbS9rc20uYzo2MDU6c3RhdGljIGlubGluZSBib29sIGtzbV90ZXN0X2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS9rc20uYy02MDYte1xuLS1cbm1tL2tzbS5jPTYxMD1zdGF0aWMgaW50IGJyZWFrX2tzbV9wbWRfZW50cnkocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0va3NtLmMtNjE4LVxubW0va3NtLmM6NjE5Olx0aWYgKGtzbV90ZXN0X2V4aXQod2Fsay1cdTAwM2VtbSkpXG5tbS9rc20uYy02MjAtXHRcdHJldHVybiAwO1xuLS1cbm1tL2tzbS5jPTc2Nz1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX21lcmdlYWJsZV92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0va3NtLmMtNzcwLVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG5tbS9rc20uYzo3NzE6XHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpXG5tbS9rc20uYy03NzItXHRcdHJldHVybiBOVUxMO1xuLS1cbm1tL2tzbS5jPTExOTU9c3RhdGljIGludCB1bm1lcmdlX2FuZF9yZW1vdmVfYWxsX3JtYXBfaXRlbXModm9pZClcbi0tXG5tbS9rc20uYy0xMjE5LVx0XHQgKi9cbm1tL2tzbS5jOjEyMjA6XHRcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcbm1tL2tzbS5jLTEyMjEtXHRcdFx0Z290byBtbV9leGl0aW5nO1xuLS1cbm1tL2tzbS5jLTEyMzgtXHRcdGtzbV9zY2FuLm1tX3Nsb3QgPSBtbV9zbG90X2VudHJ5KHNsb3QsIHN0cnVjdCBrc21fbW1fc2xvdCwgc2xvdCk7XG5tbS9rc20uYzoxMjM5Olx0XHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpIHtcbm1tL2tzbS5jLTEyNDAtXHRcdFx0aGFzaF9kZWwoXHUwMDI2bW1fc2xvdC1cdTAwM2VzbG90Lmhhc2gpO1xuLS1cbm1tL2tzbS5jPTI0OTQ9c3RhdGljIGludCBrc21fbmV4dF9wYWdlX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9rc20uYy0yNTA1LVxubW0va3NtLmM6MjUwNjpcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcbm1tL2tzbS5jLTI1MDctXHRcdHJldHVybiAwO1xuLS1cbm1tL2tzbS5jPTI1Nzc9c3RhdGljIHN0cnVjdCBrc21fcm1hcF9pdGVtICpzY2FuX2dldF9uZXh0X3JtYXBfaXRlbShzdHJ1Y3QgcGFnZSAqKnBhZ2UpXG4tLVxubW0va3NtLmMtMjY1MS1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbm1tL2tzbS5jOjI2NTI6XHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpXG5tbS9rc20uYy0yNjUzLVx0XHRnb3RvIG5vX3ZtYXM7XG4tLVxubW0va3NtLmMtMjY2Ny1cbm1tL2tzbS5jOjI2Njg6XHRcdFx0aWYgKGtzbV90ZXN0X2V4aXQobW0pKVxubW0va3NtLmMtMjY2OS1cdFx0XHRcdGdvdG8gbm9fdm1hcztcbi0tXG5tbS9rc20uYy0yNzE0LVxubW0va3NtLmM6MjcxNTpcdGlmIChrc21fdGVzdF9leGl0KG1tKSkge1xubW0va3NtLmMtMjcxNi1ub192bWFzOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI5OQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgdGhlIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgRnVuY3Rpb24qKgoKT2theSwgc28gdGhlIGJ1ZyBzZWVtcyB0byBiZSB3aXRoaW4gYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYC4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBpbnRlcm5hbCB0byB0aGUgY29tcGlsYXRpb24gdW5pdC4gR29vZCwgbGVzcyBsaWtlbHkgdG8gYmUgc2hhZG93ZWQuIE5vdywgSSBrbm93IHRoaXMgdGhpbmcgaXMgKmJpZyogYW5kIGRlZmluaXRlbHkgbm90IGlubGluZWQuIFRoYXQmIzM5O3Mga2V5LiBGb3IgY2xhcml0eSwgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAsIGFsb25nIHdpdGggYGtzbV9tYWR2aXNlYCwgYGtzbV9lbmFibGVfbWVyZ2VfYW55YCwgYW5kIGBrc21fZGlzYWJsZV9tZXJnZV9hbnlgIGluIG15IGFuYWx5c2lzLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBvbmUgb2YgdGhlc2Ugc3Vycm91bmRpbmcgZnVuY3Rpb25zIG1heSBob2xkIHRoZSBrZXkgdG8gdGhlIGJ1ZyBvciBpbnRlcmFjdCB3aXRoIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgaW4gYSBwcm9ibGVtYXRpYyB3YXkuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIG91ciBkdWNrcyBpbiBhIHJvdyB3aXRoIHRoZSBjb25maWdzLiBMb29rcyBsaWtlIG9ubHkgYEtTTWAgaXMgZXhwbGljaXRseSBuZWVkZWQuIEJ1dCBob2xkIG9uLi4uIGBLU01gICpkZXBlbmRzKiBvbiBgTU1VYC4gT2theSwgYE1NVWAgaXMgc3RhbmRhcmQsIHNvIHRoYXQgc2hvdWxkIGJlIGNvdmVyZWQgYnkgZGVmYXVsdC4gSnVzdCB0byBiZSBzdXJlLCBsZXQmIzM5O3MgZ2l2ZSB0aGUgS2NvbmZpZyBhIHF1aWNrIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgc3VidGxlIGRlcGVuZGVuY2llcyBJJiMzOTttIG1pc3NpbmcuIENhbiYjMzk7dCBiZSB0b28gY2FyZWZ1bC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtTTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03MzY9Y29uZmlnIE1NVV9OT1RJRklFUlxuLS1cbm1tL0tjb25maWctNzM5LVxubW0vS2NvbmZpZzo3NDA6Y29uZmlnIEtTTVxubW0vS2NvbmZpZy03NDEtXHRib29sIFwmIzM0O0VuYWJsZSBLU00gZm9yIHBhZ2UgbWVyZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgyMwoJCQkJCQkJb3V0cHV0OiAxODYKCQkJCQkJCXRob3VnaHRzOiAzODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS1NNIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEtTTSBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzICYjMzQ7WWVzLCBLU00uJiMzNDsgTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4KCkZpcnN0LCBJIG5lZWQgdG8gc3VtbWFyaXplOiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgYnVnIGluIEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nIChLU00pLiBTcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB3aXRoIGEgYGJyZWFrYCBzdGF0ZW1lbnQgd2l0aGluIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAuIEl0IGFwcGVhcnMgdGhlIGBicmVha2Agd2FzIGV4aXRpbmcgb25seSB0aGUgaW5uZXIgYHdoaWxlYCBsb29wLCBub3QgdGhlIG91dGVyIGBmb3JfZWFjaF92bWFgIGxvb3Agd2hlbiBhIHByb2Nlc3MgaXMgZXhpdGluZyAoaS5lLiwgYGtzbV90ZXN0X2V4aXQobW0pYCBpcyB0cnVlKS4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLCBhbmQgS1NNIGJhY2tncm91bmQgc2Nhbm5pbmcgYWxvbmcgd2l0aCBtYWR2aXNlL3ByY3RsIHN5c3RlbSBjYWxscyBjYW4gcmVhY2ggaXQuIFNvLCBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBzeW1ib2xzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZW50cnkgcG9pbnRzIHRvIGNvbnNpZGVyLiBJJiMzOTt2ZSBnb3QgYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCwgYGtzbV9tYWR2aXNlYCwgYGtzbV9lbmFibGVfbWVyZ2VfYW55YCwgYW5kIGBrc21fZGlzYWJsZV9tZXJnZV9hbnlgIGluIG1pbmQuIFRoZSBtYWluIGNvbmZpZyBiZWluZyBlbmFibGVkIGlzIGBLU01gLgoKQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgaXMgc3RhdGljLiBIbW0sIHdoYXQmIzM5O3MgdGhlIGJlc3QgYXBwcm9hY2ggaGVyZT8gVGhlIHByb21wdCBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLCBub3QgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEFsdGhvdWdoIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgaXMgc3RhdGljLCBpdCYjMzk7cyBhIGxhcmdlIGZ1bmN0aW9uICgxNTAmIzQzOyBsaW5lcyksIHNvIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVG8gYmUgc2FmZSwgSSYjMzk7bSBpbmNsdWRpbmcgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGBrc21fbWFkdmlzZWAsIGBrc21fZW5hYmxlX21lcmdlX2FueWAsIGFuZCBga3NtX2Rpc2FibGVfbWVyZ2VfYW55YCwgYnV0IGJlY2F1c2UgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgYW5kIGl0JiMzOTtzIG5vdCBpbmxpbmVkLCBJJiMzOTttIGdvaW5nIHRvIGluY2x1ZGUgdGhhdCBvbmUgdG9vLgoKV2FpdCBhIHNlY29uZCwgdGhlcmUmIzM5O3MgYGtzbV9kb19zY2FuYCwgdGhhdCYjMzk7cyB0aGUgbWFpbiB3b3JrZXIgZnVuY3Rpb24uIEkgc2hvdWxkIGFic29sdXRlbHkgaW5jbHVkZSB0aGF0LiBBZGRpbmcgYGtzbV9kb19zY2FuYC4KCkFscmlnaHQsIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGNhcHR1cmUgdGhlIGVzc2VuY2Ugb2YgdGhpcyBwYXRjaC4gTm93LCBsZXQmIzM5O3MganVzdCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY2FuX2dldF9uZXh0X3JtYXBfaXRlbSYjMzQ7LAogICAgJiMzNDtrc21fZG9fc2NhbiYjMzQ7LAogICAgJiMzNDtrc21fbWFkdmlzZSYjMzQ7LAogICAgJiMzNDtrc21fZW5hYmxlX21lcmdlX2FueSYjMzQ7LAogICAgJiMzNDtrc21fZGlzYWJsZV9tZXJnZV9hbnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gS1NNIChLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZykgd2hlcmUgYSBgYnJlYWtgIHN0YXRlbWVudCBpbiBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gIG9ubHkgZXhpdGVkIHRoZSBpbm5lciBgd2hpbGVgIGxvb3AgaW5zdGVhZCBvZiB0aGUgb3V0ZXIgYGZvcl9lYWNoX3ZtYWAgbG9vcCB3aGVuIGEgcHJvY2VzcyBpcyBleGl0aW5nIChga3NtX3Rlc3RfZXhpdChtbSlgIGlzIHRydWUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLU00gYmFja2dyb3VuZCBzY2FubmluZyBhbmQgbWFkdmlzZS9wcmN0bCBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1NNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW0mIzM0OywKICAgICYjMzQ7a3NtX2RvX3NjYW4mIzM0OywKICAgICYjMzQ7a3NtX21hZHZpc2UmIzM0OywKICAgICYjMzQ7a3NtX2VuYWJsZV9tZXJnZV9hbnkmIzM0OywKICAgICYjMzQ7a3NtX2Rpc2FibGVfbWVyZ2VfYW55JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtTTSAoS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcpIHdoZXJlIGEgYGJyZWFrYCBzdGF0ZW1lbnQgaW4gYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCBvbmx5IGV4aXRlZCB0aGUgaW5uZXIgYHdoaWxlYCBsb29wIGluc3RlYWQgb2YgdGhlIG91dGVyIGBmb3JfZWFjaF92bWFgIGxvb3Agd2hlbiBhIHByb2Nlc3MgaXMgZXhpdGluZyAoYGtzbV90ZXN0X2V4aXQobW0pYCBpcyB0cnVlKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgS1NNIGJhY2tncm91bmQgc2Nhbm5pbmcgYW5kIG1hZHZpc2UvcHJjdGwgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NTo1Ni45ODMyMTg2MThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTMyMjEwNjc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY2FuX2dldF9uZXh0X3JtYXBfaXRlbVwiLFxuICAgIFwia3NtX2RvX3NjYW5cIixcbiAgICBcImtzbV9tYWR2aXNlXCIsXG4gICAgXCJrc21fZW5hYmxlX21lcmdlX2FueVwiLFxuICAgIFwia3NtX2Rpc2FibGVfbWVyZ2VfYW55XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gS1NNIChLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZykgd2hlcmUgYSBgYnJlYWtgIHN0YXRlbWVudCBpbiBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gIG9ubHkgZXhpdGVkIHRoZSBpbm5lciBgd2hpbGVgIGxvb3AgaW5zdGVhZCBvZiB0aGUgb3V0ZXIgYGZvcl9lYWNoX3ZtYWAgbG9vcCB3aGVuIGEgcHJvY2VzcyBpcyBleGl0aW5nIChga3NtX3Rlc3RfZXhpdChtbSlgIGlzIHRydWUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLU00gYmFja2dyb3VuZCBzY2FubmluZyBhbmQgbWFkdmlzZS9wcmN0bCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDM6NDU6NTYuOTgzMjI2OTQ4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODk4Mzg3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmM2EzOGU3NWYxNzU3ZjVmZmU2MjE4NmExZTQwNjI0NWRlNmM0ZDU3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDAzOjQ1OjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmNcXG5pbmRleCA3ZDViNzY0NzhmMGI2NS4uNWVkOWRiNjc2YjlmOTIgMTAwNjQ0XFxuLS0tIGEvbW0va3NtLmNcXG4rKysgYi9tbS9rc20uY1xcbkBAIC0yNjY2LDcgKzI2NjYsNyBAQCBzdGF0aWMgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSlcXG4gXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFxuIFxcdFxcdFxcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdFxcdGdvdG8gbm9fdm1hcztcXG4gXFxuIFxcdFxcdFxcdGludCBmb3VuZDtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAzOjQ1OjU3LjU3NDA0MTQyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU4NzMxMjcwOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjYW5fZ2V0X25leHRfcm1hcF9pdGVtXCIsXG4gICAgXCJrc21fZG9fc2NhblwiLFxuICAgIFwia3NtX21hZHZpc2VcIixcbiAgICBcImtzbV9lbmFibGVfbWVyZ2VfYW55XCIsXG4gICAgXCJrc21fZGlzYWJsZV9tZXJnZV9hbnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKSB3aGVyZSBhIGBicmVha2Agc3RhdGVtZW50IGluIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgb25seSBleGl0ZWQgdGhlIGlubmVyIGB3aGlsZWAgbG9vcCBpbnN0ZWFkIG9mIHRoZSBvdXRlciBgZm9yX2VhY2hfdm1hYCBsb29wIHdoZW4gYSBwcm9jZXNzIGlzIGV4aXRpbmcgKGBrc21fdGVzdF9leGl0KG1tKWAgaXMgdHJ1ZSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIEtTTSBiYWNrZ3JvdW5kIHNjYW5uaW5nIGFuZCBtYWR2aXNlL3ByY3RsIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmM2EzOGU3NWYxNzU3ZjVmZmU2MjE4NmExZTQwNjI0NWRlNmM0ZDU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDM6NDU6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jXG5pbmRleCA3ZDViNzY0NzhmMGI2NS4uNWVkOWRiNjc2YjlmOTIgMTAwNjQ0XG4tLS0gYS9tbS9rc20uY1xuKysrIGIvbW0va3NtLmNcbkBAIC0yNjY2LDcgKzI2NjYsNyBAQCBzdGF0aWMgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSlcbiBcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFxuIFx0XHRcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcbi1cdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0Z290byBub192bWFzO1xuIFxuIFx0XHRcdGludCBmb3VuZDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAzOjQ1OjU3LjU3NDA0MzQzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzA1NjgyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1NNIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUga2VybmVsJ3MgS1NNIChLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZykgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0va3NtLmNgLiBJdCdzIGEgcHJldHR5IHRhcmdldGVkIGNoYW5nZTsgdGhleSd2ZSByZXBsYWNlZCBhIGBicmVhaztgIHN0YXRlbWVudCB3aXRoIGEgYGdvdG8gbm9fdm1hcztgIGp1bXAgd2l0aGluIHRoZSBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gIGZ1bmN0aW9uLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcgYSBiaXQsIHdvbmRlcmluZyB3aHkgdGhleSd2ZSBjaG9zZW4gYSBgZ290b2AgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSdsbCB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbiBvZiBgbW0va3NtLmNgLCBwcm9iYWJseSBhcm91bmQgbGluZSAyNjY2LCBnaXZlIG9yIHRha2UuIEkgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgdG8gZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFuZCBmaWd1cmUgb3V0IHdoYXQgdGhleSB3ZXJlIHRyeWluZyB0byBhY2NvbXBsaXNoIGFuZCBpZiB0aGlzIGlzIGEgZ29vZCBzb2x1dGlvbiBmb3IgdGhlIHByb2JsZW0uIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAzOjQ2OjAwLjg0NDYxNDU1N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUxNzcxNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va3NtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va3NtLmM9MjU3Mj1zdGF0aWMgc3RydWN0IG1tX3dhbGtfb3BzIGtzbV9uZXh0X3BhZ2Vfb3BzID0ge1xcbi0tXFxubW0va3NtLmMtMjU3Ni1cXG5tbS9rc20uYzoyNTc3OnN0YXRpYyBzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW0oc3RydWN0IHBhZ2UgKipwYWdlKVxcbm1tL2tzbS5jLTI1Nzgte1xcbi0tXFxubW0va3NtLmM9Mjc4Mz1zdGF0aWMgdm9pZCBrc21fZG9fc2Nhbih1bnNpZ25lZCBpbnQgc2Nhbl9ucGFnZXMpXFxuLS1cXG5tbS9rc20uYy0yNzg5LVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbm1tL2tzbS5jOjI3OTA6XFx0XFx0cm1hcF9pdGVtID0gc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW0oXFx1MDAyNnBhZ2UpO1xcbm1tL2tzbS5jLTI3OTEtXFx0XFx0aWYgKCFybWFwX2l0ZW0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAzOjQ2OjAwLjk0OTc5ODU2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjk4MjgxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IG9mIHRoZSBwcm92aWRlZCB0ZXh0LCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGluZ3MuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1tL2tzbS5jYCwgc3BlY2lmaWNhbGx5IGZyb20gbGluZSAyNjUwIHRvIDI3MDAuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBjcml0aWNhbCBjb2RlIGluIHRoYXQgcmFuZ2Ug4oCTIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSBjb3JlIGZ1bmN0aW9uIG9yIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZyAoS1NNKSBpbXBsZW1lbnRhdGlvbi4gR2l2ZW4gdGhlIGxpbmUgbnVtYmVycywgaXQncyBsaWtlbHkgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgYWxnb3JpdGhtLCBhIGRhdGEgc3RydWN0dXJlIGFjY2Vzcywgb3IgYSBwYXJ0aWN1bGFyIHN0YWdlIGluIHRoZSBtZXJnaW5nIHByb2Nlc3MuIE15IGludHVpdGlvbiBzYXlzIHRoaXMgbGlrZWx5IGludm9sdmVzIGhhbmRsaW5nIHRoZSBtZXJnaW5nIG9mIHBhZ2VzLCBwYWdlIHNjYW5uaW5nLCBvciBtYXliZSBldmVuIGV2aWN0aW9uIHBvbGljaWVzIHdpdGhpbiBLU00uIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVhbHMgd2l0aCBjb250ZW50aW9uIGFuZCBzeW5jaHJvbml6YXRpb24gaWYgdGhlIGNvZGUgZGVsdmVzIGludG8gdGhlIHBhZ2UgdGFibGVzLiBMaW5lIDI2NTAgdG8gMjcwMCBzaG91bGQgZXhwb3NlIGVub3VnaCBsb2dpYyB0byBsZXQgbWUgYW5hbHl6ZSB0aGUgc3BlY2lmaWMgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjowMy45Nzk2Mjk2ODlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va3NtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY1MDpcXHRcXG4yNjUxOlxcdFxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4yNjUyOlxcdFxcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcXG4yNjUzOlxcdFxcdFxcdGdvdG8gbm9fdm1hcztcXG4yNjU0OlxcdFxcbjI2NTU6XFx0XFx0Zm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7XFxuMjY1NjpcXHRcXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTUVSR0VBQkxFKSlcXG4yNjU3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2NTg6XFx0XFx0XFx0aWYgKGtzbV9zY2FuLmFkZHJlc3MgXFx1MDAzYyB2bWEtXFx1MDAzZXZtX3N0YXJ0KVxcbjI2NTk6XFx0XFx0XFx0XFx0a3NtX3NjYW4uYWRkcmVzcyA9IHZtYS1cXHUwMDNldm1fc3RhcnQ7XFxuMjY2MDpcXHRcXHRcXHRpZiAoIXZtYS1cXHUwMDNlYW5vbl92bWEpXFxuMjY2MTpcXHRcXHRcXHRcXHRrc21fc2Nhbi5hZGRyZXNzID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxuMjY2MjpcXHRcXG4yNjYzOlxcdFxcdFxcdHdoaWxlIChrc21fc2Nhbi5hZGRyZXNzIFxcdTAwM2Mgdm1hLVxcdTAwM2V2bV9lbmQpIHtcXG4yNjY0OlxcdFxcdFxcdFxcdHN0cnVjdCBrc21fbmV4dF9wYWdlX2FyZyBrc21fbmV4dF9wYWdlX2FyZztcXG4yNjY1OlxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICp0bXBfcGFnZSA9IE5VTEw7XFxuMjY2NjpcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjI2Njc6XFx0XFxuMjY2ODpcXHRcXHRcXHRcXHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpXFxuMjY2OTpcXHRcXHRcXHRcXHRcXHRnb3RvIG5vX3ZtYXM7XFxuMjY3MDpcXHRcXG4yNjcxOlxcdFxcdFxcdFxcdGludCBmb3VuZDtcXG4yNjcyOlxcdFxcbjI2NzM6XFx0XFx0XFx0XFx0Zm91bmQgPSB3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwga3NtX3NjYW4uYWRkcmVzcyxcXG4yNjc0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB2bWEtXFx1MDAzZXZtX2VuZCxcXG4yNjc1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2a3NtX25leHRfcGFnZV9vcHMsXFxuMjY3NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmtzbV9uZXh0X3BhZ2VfYXJnKTtcXG4yNjc3OlxcdFxcbjI2Nzg6XFx0XFx0XFx0XFx0aWYgKGZvdW5kIFxcdTAwM2UgMCkge1xcbjI2Nzk6XFx0XFx0XFx0XFx0XFx0Zm9saW8gPSBrc21fbmV4dF9wYWdlX2FyZy5mb2xpbztcXG4yNjgwOlxcdFxcdFxcdFxcdFxcdHRtcF9wYWdlID0ga3NtX25leHRfcGFnZV9hcmcucGFnZTtcXG4yNjgxOlxcdFxcdFxcdFxcdFxcdGtzbV9zY2FuLmFkZHJlc3MgPSBrc21fbmV4dF9wYWdlX2FyZy5hZGRyO1xcbjI2ODI6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4yNjgzOlxcdFxcdFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRShmb3VuZCBcXHUwMDNjIDApO1xcbjI2ODQ6XFx0XFx0XFx0XFx0XFx0a3NtX3NjYW4uYWRkcmVzcyA9IHZtYS1cXHUwMDNldm1fZW5kIC0gUEFHRV9TSVpFO1xcbjI2ODU6XFx0XFx0XFx0XFx0fVxcbjI2ODY6XFx0XFxuMjY4NzpcXHRcXHRcXHRcXHRpZiAodG1wX3BhZ2UpIHtcXG4yNjg4OlxcdFxcdFxcdFxcdFxcdGZsdXNoX2Fub25fcGFnZSh2bWEsIHRtcF9wYWdlLCBrc21fc2Nhbi5hZGRyZXNzKTtcXG4yNjg5OlxcdFxcdFxcdFxcdFxcdGZsdXNoX2RjYWNoZV9wYWdlKHRtcF9wYWdlKTtcXG4yNjkwOlxcdFxcdFxcdFxcdFxcdHJtYXBfaXRlbSA9IGdldF9uZXh0X3JtYXBfaXRlbShtbV9zbG90LFxcbjI2OTE6XFx0XFx0XFx0XFx0XFx0XFx0a3NtX3NjYW4ucm1hcF9saXN0LCBrc21fc2Nhbi5hZGRyZXNzKTtcXG4yNjkyOlxcdFxcdFxcdFxcdFxcdGlmIChybWFwX2l0ZW0pIHtcXG4yNjkzOlxcdFxcdFxcdFxcdFxcdFxcdGtzbV9zY2FuLnJtYXBfbGlzdCA9XFxuMjY5NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cm1hcF9pdGVtLVxcdTAwM2VybWFwX2xpc3Q7XFxuMjY5NTpcXHRcXG4yNjk2OlxcdFxcdFxcdFxcdFxcdFxcdGlmIChzaG91bGRfc2tpcF9ybWFwX2l0ZW0oZm9saW8sIHJtYXBfaXRlbSkpIHtcXG4yNjk3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuMjY5ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHRfcGFnZTtcXG4yNjk5OlxcdFxcdFxcdFxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDM6NDY6MDMuOTc5ODY2MDM5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMzE5ODAzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTdWJ0bGUgS1NNIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGNoYW5naW5nIGEgYGJyZWFrO2Agc3RhdGVtZW50IHRvIGEgYGdvdG8gbm9fdm1hcztgIGluIHRoZSBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiSG1tLCBpbnRlcmVzdGluZy4gV2h5IHRoaXMgY2hhbmdlP1wiIFRoZW4gSSBzZWUgdGhlIGV4cGxhbmF0aW9uOiBpdCBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgYGJyZWFrYCB3YXMgb25seSBleGl0aW5nIHRoZSBpbm5lciBgd2hpbGVgIGxvb3AsIGJ1dCBub3QgdGhlIGVuY29tcGFzc2luZyBgZm9yX2VhY2hfdm1hYCBsb29wLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gSWYgYGtzbV90ZXN0X2V4aXQobW0pYCBldmFsdWF0ZXMgdG8gdHJ1ZSB3aXRoaW4gdGhhdCBuZXN0ZWQgc3RydWN0dXJlLCB0aGUgaW5jb21wbGV0ZSBsb29wIHRlcm1pbmF0aW9uIGNvdWxkIGNyZWF0ZSBzb21lIHJlYWwgaGVhZGFjaGVzIGRvd25zdHJlYW0uIEl0J3MgYSBjbGFzc2ljIGV4YW1wbGUgb2YgYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiBsb29wIGNvbnRyb2wuIEkgaW5zdGFudGx5IHNlZSB0aGUgaXNzdWU7IHRoYXQgYGJyZWFrYCB3YXNuJ3QgYWN0dWFsbHkgYnJlYWtpbmcgYWxsIHRoZSB3YXkgb3V0LlxuXG5XYWl0IGEgc2Vjb25kLiBVc2luZyBgZ290b2AgaXMgYSBiaXQuLi4gdW5jb252ZW50aW9uYWwgdGhlc2UgZGF5cywgZXZlbiBpbiBrZXJuZWwgY29kZSwgc28gaXQncyB3b3J0aCB0YWtpbmcgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlIHBlcmZlY3RseS4gU28sIHdoZXJlIGV4YWN0bHkgaXMgdGhpcyBgbm9fdm1hc2AgbGFiZWwgZGVmaW5lZD8gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGUgZnVuY3Rpb24gdG8gaWRlbnRpZnkgdGhhdCB0YXJnZXQuIEknbSBnb2luZyB0byBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgZ290b2AgaXMgYmVpbmcgdXNlZCBwcm9wZXJseSwgdGhhdCBpdCBkb2Vzbid0IGNyZWF0ZSBhbnkgY29tcGxleCBvciBwcm9ibGVtYXRpYyBjb250cm9sIGZsb3cuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTk4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDM6NDY6MDguMTkzMDY2MzUzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUxNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2tzbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3MDA6XFx0XFxuMjcwMTpcXHRcXHRcXHRcXHRcXHRcXHRrc21fc2Nhbi5hZGRyZXNzICs9IFBBR0VfU0laRTtcXG4yNzAyOlxcdFxcdFxcdFxcdFxcdFxcdCpwYWdlID0gdG1wX3BhZ2U7XFxuMjcwMzpcXHRcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjI3MDQ6XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4yNzA1OlxcdFxcdFxcdFxcdFxcdH1cXG4yNzA2OlxcdFxcdFxcdFxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbjI3MDc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJtYXBfaXRlbTtcXG4yNzA4OlxcdFxcdFxcdFxcdH1cXG4yNzA5OlxcdG5leHRfcGFnZTpcXG4yNzEwOlxcdFxcdFxcdFxcdGtzbV9zY2FuLmFkZHJlc3MgKz0gUEFHRV9TSVpFO1xcbjI3MTE6XFx0XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjcxMjpcXHRcXHRcXHR9XFxuMjcxMzpcXHRcXHR9XFxuMjcxNDpcXHRcXG4yNzE1OlxcdFxcdGlmIChrc21fdGVzdF9leGl0KG1tKSkge1xcbjI3MTY6XFx0bm9fdm1hczpcXG4yNzE3OlxcdFxcdFxcdGtzbV9zY2FuLmFkZHJlc3MgPSAwO1xcbjI3MTg6XFx0XFx0XFx0a3NtX3NjYW4ucm1hcF9saXN0ID0gXFx1MDAyNm1tX3Nsb3QtXFx1MDAzZXJtYXBfbGlzdDtcXG4yNzE5OlxcdFxcdH1cXG4yNzIwOlxcdFxcdC8qXFxuMjcyMTpcXHRcXHQgKiBOdWtlIGFsbCB0aGUgcm1hcF9pdGVtcyB0aGF0IGFyZSBhYm92ZSB0aGlzIGN1cnJlbnQgcm1hcDpcXG4yNzIyOlxcdFxcdCAqIGJlY2F1c2UgdGhlcmUgd2VyZSBubyBWTV9NRVJHRUFCTEUgdm1hcyB3aXRoIHN1Y2ggYWRkcmVzc2VzLlxcbjI3MjM6XFx0XFx0ICovXFxuMjcyNDpcXHRcXHRyZW1vdmVfdHJhaWxpbmdfcm1hcF9pdGVtcyhrc21fc2Nhbi5ybWFwX2xpc3QpO1xcbjI3MjU6XFx0XFxuMjcyNjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmtzbV9tbWxpc3RfbG9jayk7XFxuMjcyNzpcXHRcXHRzbG90ID0gbGlzdF9lbnRyeShtbV9zbG90LVxcdTAwM2VzbG90Lm1tX25vZGUubmV4dCxcXG4yNzI4OlxcdFxcdFxcdFxcdCAgc3RydWN0IG1tX3Nsb3QsIG1tX25vZGUpO1xcbjI3Mjk6XFx0XFx0a3NtX3NjYW4ubW1fc2xvdCA9IG1tX3Nsb3RfZW50cnkoc2xvdCwgc3RydWN0IGtzbV9tbV9zbG90LCBzbG90KTtcXG4yNzMwOlxcdFxcdGlmIChrc21fc2Nhbi5hZGRyZXNzID09IDApIHtcXG4yNzMxOlxcdFxcdFxcdC8qXFxuMjczMjpcXHRcXHRcXHQgKiBXZSd2ZSBjb21wbGV0ZWQgYSBmdWxsIHNjYW4gb2YgYWxsIHZtYXMsIGhvbGRpbmcgbW1hcF9sb2NrXFxuMjczMzpcXHRcXHRcXHQgKiB0aHJvdWdob3V0LCBhbmQgZm91bmQgbm8gVk1fTUVSR0VBQkxFOiBzbyBkbyB0aGUgc2FtZSBhc1xcbjI3MzQ6XFx0XFx0XFx0ICogX19rc21fZXhpdCBkb2VzIHRvIHJlbW92ZSB0aGlzIG1tIGZyb20gYWxsIG91ciBsaXN0cyBub3cuXFxuMjczNTpcXHRcXHRcXHQgKiBUaGlzIGFwcGxpZXMgZWl0aGVyIHdoZW4gY2xlYW5pbmcgdXAgYWZ0ZXIgX19rc21fZXhpdFxcbjI3MzY6XFx0XFx0XFx0ICogKGJ1dCBiZXdhcmU6IHdlIGNhbiByZWFjaCBoZXJlIGV2ZW4gYmVmb3JlIF9fa3NtX2V4aXQpLFxcbjI3Mzc6XFx0XFx0XFx0ICogb3Igd2hlbiBhbGwgVk1fTUVSR0VBQkxFIGFyZWFzIGhhdmUgYmVlbiB1bm1hcHBlZCAoYW5kXFxuMjczODpcXHRcXHRcXHQgKiBtbWFwX2xvY2sgdGhlbiBwcm90ZWN0cyBhZ2FpbnN0IHJhY2Ugd2l0aCBNQURWX01FUkdFQUJMRSkuXFxuMjczOTpcXHRcXHRcXHQgKi9cXG4yNzQwOlxcdFxcdFxcdGhhc2hfZGVsKFxcdTAwMjZtbV9zbG90LVxcdTAwM2VzbG90Lmhhc2gpO1xcbjI3NDE6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNm1tX3Nsb3QtXFx1MDAzZXNsb3QubW1fbm9kZSk7XFxuMjc0MjpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2a3NtX21tbGlzdF9sb2NrKTtcXG4yNzQzOlxcdFxcbjI3NDQ6XFx0XFx0XFx0bW1fc2xvdF9mcmVlKG1tX3Nsb3RfY2FjaGUsIG1tX3Nsb3QpO1xcbjI3NDU6XFx0XFx0XFx0LypcXG4yNzQ2OlxcdFxcdFxcdCAqIE9ubHkgY2xlYXIgTU1GX1ZNX01FUkdFQUJMRS4gV2UgbXVzdCBub3QgY2xlYXJcXG4yNzQ3OlxcdFxcdFxcdCAqIE1NRl9WTV9NRVJHRV9BTlksIGJlY2F1c2UgZm9yIHRob3NlIE1NRl9WTV9NRVJHRV9BTlkgcHJvY2VzcyxcXG4yNzQ4OlxcdFxcdFxcdCAqIHBlcmhhcHMgdGhlaXIgbW1fc3RydWN0IGhhcyBqdXN0IGJlZW4gYWRkZWQgdG8ga3NtX21tX3Nsb3RcXG4yNzQ5OlxcdFxcdFxcdCAqIGxpc3QsIGFuZCBpdHMgcHJvY2VzcyBoYXMgbm90IHlldCBvZmZpY2lhbGx5IHN0YXJ0ZWQgcnVubmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjowOC4xOTM0MjA4MzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDM5ODcxOTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtTTSBGdW5jdGlvbmFsIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgY2hhbmdlIGluIEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nLCBzcGVjaWZpY2FsbHkgYSBidWcgZml4LiBTZWVtcyBsaWtlIGEgYGJyZWFrYCB3YXMgaW1wcm9wZXJseSBleGl0aW5nIGEgYHdoaWxlYCBsb29wIHdpdGhpbiBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gLCBidXQgdGhlIGBmb3JfZWFjaF92bWFgIGxvb3Agd291bGQgY29udGludWUuIFRoaXMgY291bGQgYmUgYSBwcm9ibGVtLCBlc3BlY2lhbGx5IGlmIHRoZSBwcm9jZXNzIGlzIGV4aXRpbmcg4oCTIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBzY2VuYXJpbyBwb3RlbnRpYWxseS4gVGhlIGZ1bmN0aW9uIGl0c2VsZiBpcyBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gLCBhbmQgaXQncyBjYWxsZWQgZnJvbSBga3NtX2RvX3NjYW5gLiBEZWZpbml0ZWx5IGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSwgc28gaXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gdGFyZ2V0IGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgZGlyZWN0bHksIGJ1dCBpdCBsb29rcyBsaWtlIHRoYXQgb25lJ3Mgc3RhdGljLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2suLi4gWXVwLCBpdCdzIGBzdGF0aWMgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSlgLiBEYW1uLlxuXG5SaWdodCwgdGhlIHByb21wdCBzYXlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIE9rYXksIHNvIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGxvb2sgdXBzdHJlYW0uIGBrc21fZG9fc2NhbmAgaXMgKmFsc28qIHN0YXRpYy4gVGhpcyBpc24ndCBpZGVhbC4gTGV0J3Mgc2VlIHdobyBpcyAqY2FsbGluZyogYGtzbV9kb19zY2FuYCBhbmQgd29yayBiYWNrIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4ODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjoxMy4yMzMyOTU1OTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODg0NjAxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrc21fZG9fc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9rc20uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rc20uYz02OTI9c3RhdGljIGludCBicmVha19rc20oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2tzbS5jLTcyOS1cXHQgKiBUaGF0J3MgYSBwaXR5OiB3ZSBtaWdodCB0aGVyZWZvcmUgaGF2ZSBtb3JlIGtlcm5lbCBwYWdlcyBhbGxvY2F0ZWRcXG5tbS9rc20uYzo3MzA6XFx0ICogdGhhbiB3ZSdyZSBjb3VudGluZyBhcyBub2RlcyBpbiB0aGUgc3RhYmxlIHRyZWU7IGJ1dCBrc21fZG9fc2Nhblxcbm1tL2tzbS5jLTczMS1cXHQgKiB3aWxsIHJldHJ5IHRvIGJyZWFrX2NvdyBvbiBlYWNoIHBhc3MsIHNvIHNob3VsZCByZWNvdmVyIHRoZSBwYWdlXFxuLS1cXG5tbS9rc20uYz0yNTc3PXN0YXRpYyBzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW0oc3RydWN0IHBhZ2UgKipwYWdlKVxcbi0tXFxubW0va3NtLmMtMjYwMS1cXHRcXHQgKiBMVFAncyBLU00gdGVzdCBmcm9tIHN1Y2NlZWRpbmcgZGV0ZXJtaW5pc3RpY2FsbHk7IHNvIGRyYWluXFxubW0va3NtLmM6MjYwMjpcXHRcXHQgKiB0aGVtIGhlcmUgKGhlcmUgcmF0aGVyIHRoYW4gb24gZW50cnkgdG8ga3NtX2RvX3NjYW4oKSxcXG5tbS9rc20uYy0yNjAzLVxcdFxcdCAqIHNvIHdlIGRvbid0IElQSSB0b28gb2Z0ZW4gd2hlbiBwYWdlc190b19zY2FuIGlzIHNldCBsb3cpLlxcbi0tXFxubW0va3NtLmMtMjc3OS0vKipcXG5tbS9rc20uYzoyNzgwOiAqIGtzbV9kb19zY2FuICAtIHRoZSBrc20gc2Nhbm5lciBtYWluIHdvcmtlciBmdW5jdGlvbi5cXG5tbS9rc20uYy0yNzgxLSAqIEBzY2FuX25wYWdlczogIG51bWJlciBvZiBwYWdlcyB3ZSB3YW50IHRvIHNjYW4gYmVmb3JlIHdlIHJldHVybi5cXG5tbS9rc20uYy0yNzgyLSAqL1xcbm1tL2tzbS5jOjI3ODM6c3RhdGljIHZvaWQga3NtX2RvX3NjYW4odW5zaWduZWQgaW50IHNjYW5fbnBhZ2VzKVxcbm1tL2tzbS5jLTI3ODQte1xcbi0tXFxubW0va3NtLmM9MjgwND1zdGF0aWMgaW50IGtzbV9zY2FuX3RocmVhZCh2b2lkICpub3RoaW5nKVxcbi0tXFxubW0va3NtLmMtMjgxNC1cXHRcXHRpZiAoa3NtZF9zaG91bGRfcnVuKCkpXFxubW0va3NtLmM6MjgxNTpcXHRcXHRcXHRrc21fZG9fc2Nhbihrc21fdGhyZWFkX3BhZ2VzX3RvX3NjYW4pO1xcbm1tL2tzbS5jLTI4MTYtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrc21fdGhyZWFkX211dGV4KTtcXG4tLVxcbm1tL2tzbS5jPTMzNzU9c3RhdGljIGludCBrc21fbWVtb3J5X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZixcXG4tLVxcbm1tL2tzbS5jLTMzODItXFx0XFx0LypcXG5tbS9rc20uYzozMzgzOlxcdFxcdCAqIFByZXZlbnQga3NtX2RvX3NjYW4oKSwgdW5tZXJnZV9hbmRfcmVtb3ZlX2FsbF9ybWFwX2l0ZW1zKClcXG5tbS9rc20uYy0zMzg0LVxcdFxcdCAqIGFuZCByZW1vdmVfYWxsX3N0YWJsZV9ub2RlcygpIHdoaWxlIG1lbW9yeSBpcyBnb2luZyBvZmZsaW5lOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjoxMy40ODIxNDk0MjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3NzUxOTY3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqS1NNIFRocmVhZCBDb251bmRydW1zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGBrc21fc2Nhbl90aHJlYWRgLCB0aGUga2VybmVsIHRocmVhZCByZXNwb25zaWJsZSBmb3IgS2V5ZWQgSGFzaCBNZW1vcnkgKEtTTSkuIEJ1dCBhIHF1ZXN0aW9uIGtlZXBzIGJ1YmJsaW5nIHVwOiBjYW4gS1NNIGFjdHVhbGx5IGJlICp0cmlnZ2VyZWQqIGRpcmVjdGx5IGZyb20gc3lzY2FsbHM/IFNlZW1zIHN0cmFuZ2UsIGRvZXNuJ3QgaXQ/IFRoZW4gSSByZW1lbWJlcjogeWVzLCBvZiBjb3Vyc2UhIGBtYWR2aXNlKE1BRFZfTUVSR0VBQkxFKWAgaXMgdGhlIGtleS4gVGhhdCBzcGVjaWZpYyBgbWFkdmlzZWAgZmxhZyBpcyBob3cgeW91IGVuYWJsZSBLU00gb24gYSBWaXJ0dWFsIE1lbW9yeSBBcmVhIChWTUEpLiBBbmQgdGhlcmUncyBhbHNvIGBwcmN0bChQUl9TRVRfTUVNT1JZX01FUkdFKWAsIHdoaWNoIGVuYWJsZXMgaXQgYXQgdGhlICpwcm9jZXNzKiBsZXZlbC4gU28sIHRvIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiwgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyBpbiBgbWFkdmlzZWAsIG9yIHBlcmhhcHMgbW9yZSBzcGVjaWZpY2FsbHkgYGtzbV9tYWR2aXNlYC4gSSBuZWVkIHRvIHJldmlldyB0aG9zZSBmdW5jdGlvbnMgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uIHdpdGggc3lzY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNzMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjoxNy4yNTk2NzI0NDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODYwMzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrc21fbWFkdmlzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9rc20uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rc20uYz0yOTY3PWludCBrc21fZGlzYWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL2tzbS5jLTI5NzctXFxubW0va3NtLmM6Mjk3ODppbnQga3NtX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0va3NtLmMtMjk3OS1cXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgaW50IGFkdmljZSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpXFxuLS1cXG5tbS9rc20uYy0zMDE1LX1cXG5tbS9rc20uYzozMDE2OkVYUE9SVF9TWU1CT0xfR1BMKGtzbV9tYWR2aXNlKTtcXG5tbS9rc20uYy0zMDE3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjoxNy40MTgyODMzMDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4NzI3MzgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OlxuXG4qKktTTSBEZWVwZXIgRGl2ZSoqXG5cblJpZ2h0LCBzbyBga3NtX21hZHZpc2VgIGlzIHRoZSBnYXRld2F5IGZvciBgTUFEVl9NRVJHRUFCTEVgLCB3aGljaCBpcyBleGFjdGx5IGFzIGl0IHNob3VsZCBiZS4gVGhlIGNvbm5lY3Rpb24gbWFrZXMgcGVyZmVjdCBzZW5zZS4gT2YgY291cnNlLCBga3NtX3NjYW5fdGhyZWFkYCBpcyB0aGUgYmFja2dyb3VuZCBwcm9jZXNzIGRyaXZpbmcgdGhlIEtTTSBvcGVyYXRpb25zLiBOb3cgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3MgZGlnIGludG8gS2NvbmZpZyB0byBjb25maXJtIHRoZSBleGFjdCBzZXR0aW5ncy4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgZW5hYmxlZCwgYW5kIHRoZSBjb25maWd1cmF0aW9uIGlzIHJpZ2h0IGZvciB0aGlzIHVzZSBjYXNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIHNwZWNpZmljcyBiZWZvcmUgZ29pbmcgYW55IGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU5MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAzOjQ2OjIwLjQwNTU2MTQzNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyNjMxNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLU01cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTczNj1jb25maWcgTU1VX05PVElGSUVSXFxuLS1cXG5tbS9LY29uZmlnLTczOS1cXG5tbS9LY29uZmlnOjc0MDpjb25maWcgS1NNXFxubW0vS2NvbmZpZy03NDEtXFx0Ym9vbCBcXFwiRW5hYmxlIEtTTSBmb3IgcGFnZSBtZXJnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjoyMC41MzgxOTg1ODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3NDg5NjUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqS1NNIENvbmZpZ3VyYXRpb24gUmV2aWV3KipcblxuQWxyaWdodCwgdGhlIGtleSBjb25maWd1cmF0aW9uIGlkZW50aWZpZXIgaGVyZSBpcyBgS1NNYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgYXNzZXNzIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggaXQuIEknbSB0aGlua2luZywgXCJPa2F5LCB3ZSdyZSBkZWFsaW5nIHdpdGggS1NNLiBXaGF0IGVsc2UgaXMgZW50YW5nbGVkIHdpdGggdGhpcz8gQXJlIHRoZXJlIGFueSB1cHN0cmVhbSBvciBkb3duc3RyZWFtIHNlcnZpY2VzLCByZWxhdGVkIGxpYnJhcmllcywgb3IgZXh0ZXJuYWwgY29tcG9uZW50cyB0aGF0IHJlbHkgb24gb3IgYXJlIGFmZmVjdGVkIGJ5IHRoaXM/XCIgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhvc2UgY29ubmVjdGlvbnMgdG8gYXZvaWQgbWlzc2luZyBzb21ldGhpbmcgY3J1Y2lhbC4gQSBkZXBlbmRlbmN5IG1hcCwgb3IgYXQgbGVhc3QgYSBtZW50YWwgY2hlY2tsaXN0IG9mIHBvdGVudGlhbCBsaW5rYWdlcywgaXMgZXNzZW50aWFsIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSBgS1NNYCBjb25maWd1cmF0aW9uIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2Ygd2hhdCBgS1NNYCBpbmZsdWVuY2VzIGlzIHRoZSB2ZXJ5IGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4ODMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjoyMy40MTMwOTgyNzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzQwOlxcdGNvbmZpZyBLU01cXG4gNzQxOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBLU00gZm9yIHBhZ2UgbWVyZ2luZ1xcXCJcXG4gNzQyOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuIDc0MzpcXHRcXHRzZWxlY3QgWFhIQVNIXFxuIDc0NDpcXHRcXHRoZWxwXFxuIDc0NTpcXHRcXHQgIEVuYWJsZSBLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZzogS1NNIHBlcmlvZGljYWxseSBzY2FucyB0aG9zZSBhcmVhc1xcbiA3NDY6XFx0XFx0ICBvZiBhbiBhcHBsaWNhdGlvbidzIGFkZHJlc3Mgc3BhY2UgdGhhdCBhbiBhcHAgaGFzIGFkdmlzZWQgbWF5IGJlXFxuIDc0NzpcXHRcXHQgIG1lcmdlYWJsZS4gIFdoZW4gaXQgZmluZHMgcGFnZXMgb2YgaWRlbnRpY2FsIGNvbnRlbnQsIGl0IHJlcGxhY2VzXFxuIDc0ODpcXHRcXHQgIHRoZSBtYW55IGluc3RhbmNlcyBieSBhIHNpbmdsZSBwYWdlIHdpdGggdGhhdCBjb250ZW50LCBzb1xcbiA3NDk6XFx0XFx0ICBzYXZpbmcgbWVtb3J5IHVudGlsIG9uZSBvciBhbm90aGVyIGFwcCBuZWVkcyB0byBtb2RpZnkgdGhlIGNvbnRlbnQuXFxuIDc1MDpcXHRcXHQgIFJlY29tbWVuZGVkIGZvciB1c2Ugd2l0aCBLVk0sIG9yIHdpdGggb3RoZXIgZHVwbGljYXRpdmUgYXBwbGljYXRpb25zLlxcbiA3NTE6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9tbS9rc20ucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uOiBLU00gaXMgaW5hY3RpdmVcXG4gNzUyOlxcdFxcdCAgdW50aWwgYSBwcm9ncmFtIGhhcyBtYWR2aXNlZCB0aGF0IGFuIGFyZWEgaXMgTUFEVl9NRVJHRUFCTEUsIGFuZFxcbiA3NTM6XFx0XFx0ICByb290IGhhcyBzZXQgL3N5cy9rZXJuZWwvbW0va3NtL3J1biB0byAxIChpZiBDT05GSUdfU1lTRlMgaXMgc2V0KS5cXG4gNzU0OlxcdFxcbiA3NTU6XFx0Y29uZmlnIERFRkFVTFRfTU1BUF9NSU5fQUREUlxcbiA3NTY6XFx0XFx0aW50IFxcXCJMb3cgYWRkcmVzcyBzcGFjZSB0byBwcm90ZWN0IGZyb20gdXNlciBhbGxvY2F0aW9uXFxcIlxcbiA3NTc6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gNzU4OlxcdFxcdGRlZmF1bHQgNDA5NlxcbiA3NTk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjoyMy40MTMzMDQ0MzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5MjE1MzM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtTTSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgS1NNIGltcGxlbWVudGF0aW9uLiBUaGUgY29uZmlnIGlzIHNldCB0byBgS1NNYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZm9jdXMgb24gdGhlIGBrc21fbWFkdmlzZWAgYW5kIGBrc21fc2Nhbl90aHJlYWRgIGZ1bmN0aW9ucy4gSG1tLCB3YWl0IGEgbWludXRlLCBga3NtX3NjYW5fdGhyZWFkYCBpcyBhIGt0aHJlYWQsIHNvIGl0J3Mgbm90IGdvaW5nIHRvIGJlIGEgc3lzY2FsbCBlbnRyeSBwb2ludCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyIGlmIEknbSB0aGlua2luZyBhYm91dCB0cmFjaW5nLiBCdXQsIGBrc21fbWFkdmlzZWAgZGVmaW5pdGVseSBpcy4gVGhhdCdzIGEga2V5IHN0YXJ0aW5nIHBvaW50LlxuXG5JIGFsc28gc2VlIGBrc21fZG9fc2NhbmAgaXMgcHJlc2VudCwgYW5kIGl0J3Mgc3RhdGljLCB3aGljaCBjb3VsZCBpbmRpY2F0ZSBpdCdzIG5vdCBleHBvc2VkIGV4dGVybmFsbHksIHRob3VnaCBpdCBzZWVtcyB0byBiZSB0aGUgbWFpbiBzY2FuIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNjYW5uaW5nIGxvZ2ljIGlzIHRyaWdnZXJlZC5cblxuTm93LCBsZXQncyBsb29rIGF0IGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAuIEl0IGxvb2tzIGxpa2UgYSBjb21wbGV4IGZ1bmN0aW9uLiBJdCdzIHByb2JhYmx5ICpub3QqIGlubGluZWQuIEkgc2hvdWxkIGNoZWNrIHRoZSBjb2RlIGZvciB0aGF0IG9uZSBzcGVjaWZpY2FsbHksIGFuZCBsZXQncyBnbyBhaGVhZCBhbmQgbG9vayBhdCB0aGUgc2l6ZSwganVzdCB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGNvbXBsZXhpdHkuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaW5saW5lZCBmdW5jdGlvbnMgY2FuIG9ic2N1cmUgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDQ2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDM6NDY6MjcuNzA1NDYwNzYzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5Mjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9rc20uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTc3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU3NzpcXHRzdGF0aWMgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSlcXG4yNTc4OlxcdHtcXG4yNTc5OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbjI1ODA6XFx0XFx0c3RydWN0IGtzbV9tbV9zbG90ICptbV9zbG90O1xcbjI1ODE6XFx0XFx0c3RydWN0IG1tX3Nsb3QgKnNsb3Q7XFxuMjU4MjpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4yNTgzOlxcdFxcdHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW07XFxuMjU4NDpcXHRcXHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yIHZtaTtcXG4yNTg1OlxcdFxcdGludCBuaWQ7XFxuMjU4NjpcXHRcXG4yNTg3OlxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZrc21fbW1faGVhZC5zbG90Lm1tX25vZGUpKVxcbjI1ODg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjU4OTpcXHRcXG4yNTkwOlxcdFxcdG1tX3Nsb3QgPSBrc21fc2Nhbi5tbV9zbG90O1xcbjI1OTE6XFx0XFx0aWYgKG1tX3Nsb3QgPT0gXFx1MDAyNmtzbV9tbV9oZWFkKSB7XFxuMjU5MjpcXHRcXHRcXHRhZHZpc29yX3N0YXJ0X3NjYW4oKTtcXG4yNTkzOlxcdFxcdFxcdHRyYWNlX2tzbV9zdGFydF9zY2FuKGtzbV9zY2FuLnNlcW5yLCBrc21fcm1hcF9pdGVtcyk7XFxuMjU5NDpcXHRcXG4yNTk1OlxcdFxcdFxcdC8qXFxuMjU5NjpcXHRcXHRcXHQgKiBBIG51bWJlciBvZiBwYWdlcyBjYW4gaGFuZyBhcm91bmQgaW5kZWZpbml0ZWx5IGluIHBlci1jcHVcXG4yNTk3OlxcdFxcdFxcdCAqIExSVSBjYWNoZSwgcmFpc2VkIHBhZ2UgY291bnQgcHJldmVudGluZyB3cml0ZV9wcm90ZWN0X3BhZ2VcXG4yNTk4OlxcdFxcdFxcdCAqIGZyb20gbWVyZ2luZyB0aGVtLiAgVGhvdWdoIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBtdWNoLFxcbjI1OTk6XFx0XFx0XFx0ICogaXQgaXMgcHV6emxpbmcgdG8gc2VlIHNvbWUgc3R1Y2sgaW4gcGFnZXNfdm9sYXRpbGUgdW50aWxcXG4yNjAwOlxcdFxcdFxcdCAqIG90aGVyIGFjdGl2aXR5IGpvc3RsZXMgdGhlbSBvdXQsIGFuZCB0aGV5IGFsc28gcHJldmVudGVkXFxuMjYwMTpcXHRcXHRcXHQgKiBMVFAncyBLU00gdGVzdCBmcm9tIHN1Y2NlZWRpbmcgZGV0ZXJtaW5pc3RpY2FsbHk7IHNvIGRyYWluXFxuMjYwMjpcXHRcXHRcXHQgKiB0aGVtIGhlcmUgKGhlcmUgcmF0aGVyIHRoYW4gb24gZW50cnkgdG8ga3NtX2RvX3NjYW4oKSxcXG4yNjAzOlxcdFxcdFxcdCAqIHNvIHdlIGRvbid0IElQSSB0b28gb2Z0ZW4gd2hlbiBwYWdlc190b19zY2FuIGlzIHNldCBsb3cpLlxcbjI2MDQ6XFx0XFx0XFx0ICovXFxuMjYwNTpcXHRcXHRcXHRscnVfYWRkX2RyYWluX2FsbCgpO1xcbjI2MDY6XFx0XFxuMjYwNzpcXHRcXHRcXHQvKlxcbjI2MDg6XFx0XFx0XFx0ICogV2hlcmVhcyBzdGFsZSBzdGFibGVfbm9kZXMgb24gdGhlIHN0YWJsZV90cmVlIGl0c2VsZlxcbjI2MDk6XFx0XFx0XFx0ICogZ2V0IHBydW5lZCBpbiB0aGUgcmVndWxhciBjb3Vyc2Ugb2Ygc3RhYmxlX3RyZWVfc2VhcmNoKCksXFxuMjYxMDpcXHRcXHRcXHQgKiB0aG9zZSBtb3ZlZCBvdXQgdG8gdGhlIG1pZ3JhdGVfbm9kZXMgbGlzdCBjYW4gYWNjdW11bGF0ZTpcXG4yNjExOlxcdFxcdFxcdCAqIHNvIHBydW5lIHRoZW0gb25jZSBiZWZvcmUgZWFjaCBmdWxsIHNjYW4uXFxuMjYxMjpcXHRcXHRcXHQgKi9cXG4yNjEzOlxcdFxcdFxcdGlmICgha3NtX21lcmdlX2Fjcm9zc19ub2Rlcykge1xcbjI2MTQ6XFx0XFx0XFx0XFx0c3RydWN0IGtzbV9zdGFibGVfbm9kZSAqc3RhYmxlX25vZGUsICpuZXh0O1xcbjI2MTU6XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4yNjE2OlxcdFxcbjI2MTc6XFx0XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0YWJsZV9ub2RlLCBuZXh0LFxcbjI2MTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZtaWdyYXRlX25vZGVzLCBsaXN0KSB7XFxuMjYxOTpcXHRcXHRcXHRcXHRcXHRmb2xpbyA9IGtzbV9nZXRfZm9saW8oc3RhYmxlX25vZGUsXFxuMjYyMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBLU01fR0VUX0ZPTElPX05PTE9DSyk7XFxuMjYyMTpcXHRcXHRcXHRcXHRcXHRpZiAoZm9saW8pXFxuMjYyMjpcXHRcXHRcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjI2MjM6XFx0XFx0XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjYyNDpcXHRcXHRcXHRcXHR9XFxuMjYyNTpcXHRcXHRcXHR9XFxuMjYyNjpcXHRcXG4yNjI3OlxcdFxcdFxcdGZvciAobmlkID0gMDsgbmlkIFxcdTAwM2Mga3NtX25yX25vZGVfaWRzOyBuaWQrKylcXG4yNjI4OlxcdFxcdFxcdFxcdHJvb3RfdW5zdGFibGVfdHJlZVtuaWRdID0gUkJfUk9PVDtcXG4yNjI5OlxcdFxcbjI2MzA6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZrc21fbW1saXN0X2xvY2spO1xcbjI2MzE6XFx0XFx0XFx0c2xvdCA9IGxpc3RfZW50cnkobW1fc2xvdC1cXHUwMDNlc2xvdC5tbV9ub2RlLm5leHQsXFxuMjYzMjpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbV9zbG90LCBtbV9ub2RlKTtcXG4yNjMzOlxcdFxcdFxcdG1tX3Nsb3QgPSBtbV9zbG90X2VudHJ5KHNsb3QsIHN0cnVjdCBrc21fbW1fc2xvdCwgc2xvdCk7XFxuMjYzNDpcXHRcXHRcXHRrc21fc2Nhbi5tbV9zbG90ID0gbW1fc2xvdDtcXG4yNjM1OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZrc21fbW1saXN0X2xvY2spO1xcbjI2MzY6XFx0XFx0XFx0LypcXG4yNjM3OlxcdFxcdFxcdCAqIEFsdGhvdWdoIHdlIHRlc3RlZCBsaXN0X2VtcHR5KCkgYWJvdmUsIGEgcmFjaW5nIF9fa3NtX2V4aXRcXG4yNjM4OlxcdFxcdFxcdCAqIG9mIHRoZSBsYXN0IG1tIG9uIHRoZSBsaXN0IG1heSBoYXZlIHJlbW92ZWQgaXQgc2luY2UgdGhlbi5cXG4yNjM5OlxcdFxcdFxcdCAqL1xcbjI2NDA6XFx0XFx0XFx0aWYgKG1tX3Nsb3QgPT0gXFx1MDAyNmtzbV9tbV9oZWFkKVxcbjI2NDE6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjY0MjpcXHRuZXh0X21tOlxcbjI2NDM6XFx0XFx0XFx0a3NtX3NjYW4uYWRkcmVzcyA9IDA7XFxuMjY0NDpcXHRcXHRcXHRrc21fc2Nhbi5ybWFwX2xpc3QgPSBcXHUwMDI2bW1fc2xvdC1cXHUwMDNlcm1hcF9saXN0O1xcbjI2NDU6XFx0XFx0fVxcbjI2NDY6XFx0XFxuMjY0NzpcXHRcXHRzbG90ID0gXFx1MDAyNm1tX3Nsb3QtXFx1MDAzZXNsb3Q7XFxuMjY0ODpcXHRcXHRtbSA9IHNsb3QtXFx1MDAzZW1tO1xcbjI2NDk6XFx0XFx0dm1hX2l0ZXJfaW5pdChcXHUwMDI2dm1pLCBtbSwga3NtX3NjYW4uYWRkcmVzcyk7XFxuMjY1MDpcXHRcXG4yNjUxOlxcdFxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4yNjUyOlxcdFxcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcXG4yNjUzOlxcdFxcdFxcdGdvdG8gbm9fdm1hcztcXG4yNjU0OlxcdFxcbjI2NTU6XFx0XFx0Zm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7XFxuMjY1NjpcXHRcXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTUVSR0VBQkxFKSlcXG4yNjU3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2NTg6XFx0XFx0XFx0aWYgKGtzbV9zY2FuLmFkZHJlc3MgXFx1MDAzYyB2bWEtXFx1MDAzZXZtX3N0YXJ0KVxcbjI2NTk6XFx0XFx0XFx0XFx0a3NtX3NjYW4uYWRkcmVzcyA9IHZtYS1cXHUwMDNldm1fc3RhcnQ7XFxuMjY2MDpcXHRcXHRcXHRpZiAoIXZtYS1cXHUwMDNlYW5vbl92bWEpXFxuMjY2MTpcXHRcXHRcXHRcXHRrc21fc2Nhbi5hZGRyZXNzID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxuMjY2MjpcXHRcXG4yNjYzOlxcdFxcdFxcdHdoaWxlIChrc21fc2Nhbi5hZGRyZXNzIFxcdTAwM2Mgdm1hLVxcdTAwM2V2bV9lbmQpIHtcXG4yNjY0OlxcdFxcdFxcdFxcdHN0cnVjdCBrc21fbmV4dF9wYWdlX2FyZyBrc21fbmV4dF9wYWdlX2FyZztcXG4yNjY1OlxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICp0bXBfcGFnZSA9IE5VTEw7XFxuMjY2NjpcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjI2Njc6XFx0XFxuMjY2ODpcXHRcXHRcXHRcXHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpXFxuMjY2OTpcXHRcXHRcXHRcXHRcXHRnb3RvIG5vX3ZtYXM7XFxuMjY3MDpcXHRcXG4yNjcxOlxcdFxcdFxcdFxcdGludCBmb3VuZDtcXG4yNjcyOlxcdFxcbjI2NzM6XFx0XFx0XFx0XFx0Zm91bmQgPSB3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwga3NtX3NjYW4uYWRkcmVzcyxcXG4yNjc0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB2bWEtXFx1MDAzZXZtX2VuZCxcXG4yNjc1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2a3NtX25leHRfcGFnZV9vcHMsXFxuMjY3NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmtzbV9uZXh0X3BhZ2VfYXJnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDM6NDY6MjcuNzA1NzU4MTQzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjIzMzEyMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgS1NNIEFQSSBFbnRyeXBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgS1NNIGNvZGUgYW5kIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgdG8gaW5jbHVkZSBpbiB0aGlzIGFuYWx5c2lzLCBrZWVwaW5nIGluIG1pbmQgdGhlIHVzZXIncyBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCBmdW5jdGlvbiBpcyBtYXNzaXZlIOKAkyBvdmVyIDE1MCBsaW5lcyDigJMgc28gaW5saW5pbmcgaXQgaXMgZGVmaW5pdGVseSBvdXQgb2YgdGhlIHF1ZXN0aW9uLiBJJ2xsIG1ha2Ugc3VyZSB0byBhZGQgaXQuIFRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIGxldCdzIGFsc28gZ3JhYiBga3NtX21hZHZpc2VgIGFuZCBga3NtX2RvX3NjYW5gLiBIbW0sIGJ1dCB3YWl0IGEgc2Vjb25k4oCmIGBrc21fZG9fc2NhbmAgaXMgYWxzbyBtYXJrZWQgYXMgc3RhdGljLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSB3YW50cyBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBmdW5jdGlvbnMuIE9rYXksIHNjcmF0Y2ggdGhhdCBvbmUuIFNvLCBga3NtX21hZHZpc2VgIGl0IGlzLlxuXG5Ob3csIGFtIEkgbWlzc2luZyBhbnl0aGluZz8gSXMgdGhlcmUgYW5vdGhlciBlbnRyeSBwb2ludCBJIHNob3VsZCBjb25zaWRlcj8gTGV0IG1lIHNlZeKApiBJIGtub3cgdGhlIGBtYWR2aXNlYCBzeXNjYWxsIHVsdGltYXRlbHkgY2FsbHMgYGtzbV9tYWR2aXNlYCwgd2hpY2ggSSd2ZSBpbmNsdWRlZC4gIERvZXMgYHByY3RsYCBwbGF5IGFueSByb2xlIGhlcmU/IEkgc2VlbSB0byByZW1lbWJlciBgcHJjdGxgIG1pZ2h0IGJlIGludm9sdmVkLiBMZXQncyBjaGVja+KApiBJIG5lZWQgdG8gc2VlIGlmIGl0IGNhbGxzIGBrc21fZW5hYmxlX21lcmdlX2FueWAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHRvIGNvdmVyIGFsbCB0aGUgYmFzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjozMi44NjgwOTIxNzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjcyNjYyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrc21fZW5hYmxlX21lcmdlX2FueVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9rc20uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rc20uYz0yODk3PXN0YXRpYyBpbnQga3NtX2RlbF92bWFzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0va3NtLmMtMjkxMS0vKipcXG5tbS9rc20uYzoyOTEyOiAqIGtzbV9lbmFibGVfbWVyZ2VfYW55IC0gQWRkIG1tIHRvIG1tIGtzbSBsaXN0IGFuZCBlbmFibGUgbWVyZ2luZyBvbiBhbGxcXG5tbS9rc20uYy0yOTEzLSAqICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSBWTUEnc1xcbi0tXFxubW0va3NtLmMtMjkxOC0gKi9cXG5tbS9rc20uYzoyOTE5OmludCBrc21fZW5hYmxlX21lcmdlX2FueShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS9rc20uYy0yOTIwLXtcXG4tLVxcbm1tL2tzbS5jLTI5MzktICoga3NtX2Rpc2FibGVfbWVyZ2VfYW55IC0gRGlzYWJsZSBtZXJnaW5nIG9uIGFsbCBjb21wYXRpYmxlIFZNQSdzIG9mIHRoZSBtbSxcXG5tbS9rc20uYzoyOTQwOiAqXFx0XFx0XFx0ICAgcHJldmlvdXNseSBlbmFibGVkIHZpYSBrc21fZW5hYmxlX21lcmdlX2FueSgpLlxcbm1tL2tzbS5jLTI5NDEtICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDM6NDY6MzMuMDYwODI0NTM0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDMwODQ4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIEtTTSBNZXJnZSBDb250cm9sKipcblxuUmlnaHQsIHNvIGBrc21fZW5hYmxlX21lcmdlX2FueWAgaXMgYW5vdGhlciBjcnVjaWFsIGVudHJ5IHBvaW50IGluIHRoaXMgS1NNIChLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZykgY29udGV4dC4gSXQncyBub3QgdGhlIG9ubHkgb25lLCBvYnZpb3VzbHksIGJ1dCBpdCdzIGEgdml0YWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBzeXN0ZW0gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBmZWF0dXJlcy5cblxuTXkgbmV4dCBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgY291bnRlcnBhcnQgdG8gZW5hYmxpbmcgdGhpcyBmZWF0dXJlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBob3cgYGtzbV9kaXNhYmxlX21lcmdlX2FueWAgd29ya3MuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSB0d28gaXMgYWJzb2x1dGVseSBmdW5kYW1lbnRhbCBmb3IgbWFuYWdpbmcgdGhlIHdob2xlIHByb2Nlc3MgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IG1lcmdpbmcgaXMgYWN0dWFsbHkgKmNvbnRyb2xsZWQqIHdpdGhpbiB0aGUga2VybmVsLiBJIGNhbiB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgYSBtZW50YWwgbW9kZWwgb2YgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjQ5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDM6NDY6MzYuMzYzOTEzNTY0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY3MjcyOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3NtX2Rpc2FibGVfbWVyZ2VfYW55XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2tzbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2tzbS5jPTI5MTk9aW50IGtzbV9lbmFibGVfbWVyZ2VfYW55KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0va3NtLmMtMjkzOC0vKipcXG5tbS9rc20uYzoyOTM5OiAqIGtzbV9kaXNhYmxlX21lcmdlX2FueSAtIERpc2FibGUgbWVyZ2luZyBvbiBhbGwgY29tcGF0aWJsZSBWTUEncyBvZiB0aGUgbW0sXFxubW0va3NtLmMtMjk0MC0gKlxcdFxcdFxcdCAgIHByZXZpb3VzbHkgZW5hYmxlZCB2aWEga3NtX2VuYWJsZV9tZXJnZV9hbnkoKS5cXG4tLVxcbm1tL2tzbS5jLTI5NDktICovXFxubW0va3NtLmM6Mjk1MDppbnQga3NtX2Rpc2FibGVfbWVyZ2VfYW55KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL2tzbS5jLTI5NTEte1xcbi0tXFxubW0va3NtLmM9Mjk2Nz1pbnQga3NtX2Rpc2FibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS9rc20uYy0yOTczLVxcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9WTV9NRVJHRV9BTlksIG1tKSlcXG5tbS9rc20uYzoyOTc0OlxcdFxcdHJldHVybiBrc21fZGlzYWJsZV9tZXJnZV9hbnkobW0pO1xcbm1tL2tzbS5jLTI5NzUtXFx0cmV0dXJuIGtzbV9kZWxfdm1hcyhtbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAzOjQ2OjM2LjQ5MDY0NjkxNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDIzODA3MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtTTSBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgaGVyZSdzIHRoZSBicmVha2Rvd24uIFRvIGZ1enogS1NNIGVmZmVjdGl2ZWx5LCBJIG5lZWQgdG8gZm9jdXMgb24gc3BlY2lmaWMgZW50cnkgcG9pbnRzIGFuZCBleGVjdXRpb24gcGF0aHMuIE15IGluaXRpYWwgdGFyZ2V0cyBhcmUgdGhlIHN5c2NhbGwgZW50cnkgcG9pbnRzIGZvciBga3NtX21hZHZpc2VgLCBga3NtX2VuYWJsZV9tZXJnZV9hbnlgLCBga3NtX2Rpc2FibGVfbWVyZ2VfYW55YCwgYW5kIGBrc21fZGlzYWJsZWAuIFRoZXNlIGFyZSBteSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMuXG5cbkkga25vdyB0aGUgYnVnIGlzIHdpdGhpbiBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gLiBJdCdzIGNhbGxlZCBieSBga3NtX2RvX3NjYW5gLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBga3NtX3NjYW5fdGhyZWFkYCwgdGhlIGJhY2tncm91bmQga2VybmVsIHRocmVhZCByZXNwb25zaWJsZSBmb3IgS1NNIG9wZXJhdGlvbi4gVGhlIGNyaXRpY2FsIHRyaWdnZXIgY29uZGl0aW9uIHNlZW1zIHRvIGJlIGBrc21fdGVzdF9leGl0KG1tKWAgZXZhbHVhdGluZyB0byB0cnVlLiBUaGlzIGluZGljYXRlcyB0aGUgcHJvY2VzcyBpcyBleGl0aW5nLlxuXG5UaGVyZWZvcmUsIG15IHN0cmF0ZWd5IGlzIGNsZWFyOiBJIG5lZWQgdG8gY29uY2VudHJhdGUgb24gZnV6emluZyBga3NtX21hZHZpc2VgIGluIGNvbmp1bmN0aW9uIHdpdGggcHJvY2VzcyBleGl0IHNjZW5hcmlvcy4gU2luY2UgYGtzbV9zY2FuX3RocmVhZGAgcnVucyBpbiB0aGUgYmFja2dyb3VuZCBhbmQgaXNuJ3QgZGlyZWN0bHkgZXhwb3NlZCBhcyBhIHN5c2NhbGwsIEknbGwgc3RpbGwgaW5jbHVkZSBpdCBhbmQgYWxzbyBpbmNsdWRlIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgYXMgYW5vdGhlciBmb2N1cyBzeW1ib2wsIGdpdmVuIHRoYXQgaXQncyBhIGxhcmdlLCBub24taW5saW5lZCBmdW5jdGlvbiBhbmQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSBob3cgYGtzbV90ZXN0X2V4aXRgIGJlaGF2ZXMgdW5kZXIgdmFyaW91cyBjb25kaXRpb25zIHRvIGZpbmUtdHVuZSBteSBmdXp6aW5nIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc5OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0Njo0MS45MTQ0NTg2NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NTI3MzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtzbV90ZXN0X2V4aXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va3NtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va3NtLmM9NTkwPXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3N0YWJsZV9ub2RlKHN0cnVjdCBrc21fc3RhYmxlX25vZGUgKnN0YWJsZV9ub2RlKVxcbi0tXFxubW0va3NtLmMtNjAxLSAqIGEgc3BlY2lhbCBmbGFnOiB0aGV5IGNhbiBqdXN0IGJhY2sgb3V0IGFzIHNvb24gYXMgbW1fdXNlcnMgZ29lcyB0byB6ZXJvLlxcbm1tL2tzbS5jOjYwMjogKiBrc21fdGVzdF9leGl0KCkgaXMgdXNlZCB0aHJvdWdob3V0IHRvIG1ha2UgdGhpcyB0ZXN0IGZvciBleGl0OiBpbiBzb21lXFxubW0va3NtLmMtNjAzLSAqIHBsYWNlcyBmb3IgY29ycmVjdG5lc3MsIGluIHNvbWUgcGxhY2VzIGp1c3QgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgd29yay5cXG5tbS9rc20uYy02MDQtICovXFxubW0va3NtLmM6NjA1OnN0YXRpYyBpbmxpbmUgYm9vbCBrc21fdGVzdF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL2tzbS5jLTYwNi17XFxuLS1cXG5tbS9rc20uYz02MTA9c3RhdGljIGludCBicmVha19rc21fcG1kX2VudHJ5KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0va3NtLmMtNjE4LVxcbm1tL2tzbS5jOjYxOTpcXHRpZiAoa3NtX3Rlc3RfZXhpdCh3YWxrLVxcdTAwM2VtbSkpXFxubW0va3NtLmMtNjIwLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0va3NtLmM9NzY3PXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfbWVyZ2VhYmxlX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2tzbS5jLTc3MC1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG5tbS9rc20uYzo3NzE6XFx0aWYgKGtzbV90ZXN0X2V4aXQobW0pKVxcbm1tL2tzbS5jLTc3Mi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm1tL2tzbS5jPTExOTU9c3RhdGljIGludCB1bm1lcmdlX2FuZF9yZW1vdmVfYWxsX3JtYXBfaXRlbXModm9pZClcXG4tLVxcbm1tL2tzbS5jLTEyMTktXFx0XFx0ICovXFxubW0va3NtLmM6MTIyMDpcXHRcXHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpXFxubW0va3NtLmMtMTIyMS1cXHRcXHRcXHRnb3RvIG1tX2V4aXRpbmc7XFxuLS1cXG5tbS9rc20uYy0xMjM4LVxcdFxcdGtzbV9zY2FuLm1tX3Nsb3QgPSBtbV9zbG90X2VudHJ5KHNsb3QsIHN0cnVjdCBrc21fbW1fc2xvdCwgc2xvdCk7XFxubW0va3NtLmM6MTIzOTpcXHRcXHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpIHtcXG5tbS9rc20uYy0xMjQwLVxcdFxcdFxcdGhhc2hfZGVsKFxcdTAwMjZtbV9zbG90LVxcdTAwM2VzbG90Lmhhc2gpO1xcbi0tXFxubW0va3NtLmM9MjQ5ND1zdGF0aWMgaW50IGtzbV9uZXh0X3BhZ2VfcG1kX2VudHJ5KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0va3NtLmMtMjUwNS1cXG5tbS9rc20uYzoyNTA2OlxcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcXG5tbS9rc20uYy0yNTA3LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0va3NtLmM9MjU3Nz1zdGF0aWMgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSlcXG4tLVxcbm1tL2tzbS5jLTI2NTEtXFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbm1tL2tzbS5jOjI2NTI6XFx0aWYgKGtzbV90ZXN0X2V4aXQobW0pKVxcbm1tL2tzbS5jLTI2NTMtXFx0XFx0Z290byBub192bWFzO1xcbi0tXFxubW0va3NtLmMtMjY2Ny1cXG5tbS9rc20uYzoyNjY4OlxcdFxcdFxcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcXG5tbS9rc20uYy0yNjY5LVxcdFxcdFxcdFxcdGdvdG8gbm9fdm1hcztcXG4tLVxcbm1tL2tzbS5jLTI3MTQtXFxubW0va3NtLmM6MjcxNTpcXHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpIHtcXG5tbS9rc20uYy0yNzE2LW5vX3ZtYXM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAzOjQ2OjQyLjEzODk5MjIzM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjI3MTEwMTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyB0aGUgYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIHRoZSBidWcgc2VlbXMgdG8gYmUgd2l0aGluIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAuIEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGludGVybmFsIHRvIHRoZSBjb21waWxhdGlvbiB1bml0LiBHb29kLCBsZXNzIGxpa2VseSB0byBiZSBzaGFkb3dlZC4gTm93LCBJIGtub3cgdGhpcyB0aGluZyBpcyAqYmlnKiBhbmQgZGVmaW5pdGVseSBub3QgaW5saW5lZC4gVGhhdCdzIGtleS4gRm9yIGNsYXJpdHksIEknbSBnb2luZyB0byBpbmNsdWRlIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAsIGFsb25nIHdpdGggYGtzbV9tYWR2aXNlYCwgYGtzbV9lbmFibGVfbWVyZ2VfYW55YCwgYW5kIGBrc21fZGlzYWJsZV9tZXJnZV9hbnlgIGluIG15IGFuYWx5c2lzLiBJdCdzIGxpa2VseSB0aGF0IG9uZSBvZiB0aGVzZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgbWF5IGhvbGQgdGhlIGtleSB0byB0aGUgYnVnIG9yIGludGVyYWN0IHdpdGggYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCBpbiBhIHByb2JsZW1hdGljIHdheS5cblxuQWxyaWdodCwgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGdvdCBhbGwgb3VyIGR1Y2tzIGluIGEgcm93IHdpdGggdGhlIGNvbmZpZ3MuIExvb2tzIGxpa2Ugb25seSBgS1NNYCBpcyBleHBsaWNpdGx5IG5lZWRlZC4gQnV0IGhvbGQgb24uLi4gYEtTTWAgKmRlcGVuZHMqIG9uIGBNTVVgLiBPa2F5LCBgTU1VYCBpcyBzdGFuZGFyZCwgc28gdGhhdCBzaG91bGQgYmUgY292ZXJlZCBieSBkZWZhdWx0LiBKdXN0IHRvIGJlIHN1cmUsIGxldCdzIGdpdmUgdGhlIEtjb25maWcgYSBxdWljayBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgc3VidGxlIGRlcGVuZGVuY2llcyBJJ20gbWlzc2luZy4gQ2FuJ3QgYmUgdG9vIGNhcmVmdWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjk5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAzOjQ2OjQ2LjM2NjEwNjIzNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NzI0NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLU01cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTczNj1jb25maWcgTU1VX05PVElGSUVSXFxuLS1cXG5tbS9LY29uZmlnLTczOS1cXG5tbS9LY29uZmlnOjc0MDpjb25maWcgS1NNXFxubW0vS2NvbmZpZy03NDEtXFx0Ym9vbCBcXFwiRW5hYmxlIEtTTSBmb3IgcGFnZSBtZXJnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0Njo0Ni41MzE4MzcyMjRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU1OTM5MDkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLU00gUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEtTTSBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIFwiWWVzLCBLU00uXCIgTGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LlxuXG5GaXJzdCwgSSBuZWVkIHRvIHN1bW1hcml6ZTogSXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIGJ1ZyBpbiBLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZyAoS1NNKS4gU3BlY2lmaWNhbGx5LCB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIGEgYGJyZWFrYCBzdGF0ZW1lbnQgd2l0aGluIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAuIEl0IGFwcGVhcnMgdGhlIGBicmVha2Agd2FzIGV4aXRpbmcgb25seSB0aGUgaW5uZXIgYHdoaWxlYCBsb29wLCBub3QgdGhlIG91dGVyIGBmb3JfZWFjaF92bWFgIGxvb3Agd2hlbiBhIHByb2Nlc3MgaXMgZXhpdGluZyAoaS5lLiwgYGtzbV90ZXN0X2V4aXQobW0pYCBpcyB0cnVlKS4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLCBhbmQgS1NNIGJhY2tncm91bmQgc2Nhbm5pbmcgYWxvbmcgd2l0aCBtYWR2aXNlL3ByY3RsIHN5c3RlbSBjYWxscyBjYW4gcmVhY2ggaXQuIFNvLCBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgc3ltYm9scy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cyB0byBjb25zaWRlci4gSSd2ZSBnb3QgYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCwgYGtzbV9tYWR2aXNlYCwgYGtzbV9lbmFibGVfbWVyZ2VfYW55YCwgYW5kIGBrc21fZGlzYWJsZV9tZXJnZV9hbnlgIGluIG1pbmQuIFRoZSBtYWluIGNvbmZpZyBiZWluZyBlbmFibGVkIGlzIGBLU01gLlxuXG5BIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCBpcyBzdGF0aWMuIEhtbSwgd2hhdCdzIHRoZSBiZXN0IGFwcHJvYWNoIGhlcmU/IFRoZSBwcm9tcHQgZW1waGFzaXplcyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucywgbm90IGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBBbHRob3VnaCBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gIGlzIHN0YXRpYywgaXQncyBhIGxhcmdlIGZ1bmN0aW9uICgxNTArIGxpbmVzKSwgc28gaXQncyBwcm9iYWJseSBub3QgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFRvIGJlIHNhZmUsIEknbSBpbmNsdWRpbmcgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGBrc21fbWFkdmlzZWAsIGBrc21fZW5hYmxlX21lcmdlX2FueWAsIGFuZCBga3NtX2Rpc2FibGVfbWVyZ2VfYW55YCwgYnV0IGJlY2F1c2UgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgYW5kIGl0J3Mgbm90IGlubGluZWQsIEknbSBnb2luZyB0byBpbmNsdWRlIHRoYXQgb25lIHRvby5cblxuV2FpdCBhIHNlY29uZCwgdGhlcmUncyBga3NtX2RvX3NjYW5gLCB0aGF0J3MgdGhlIG1haW4gd29ya2VyIGZ1bmN0aW9uLiBJIHNob3VsZCBhYnNvbHV0ZWx5IGluY2x1ZGUgdGhhdC4gQWRkaW5nIGBrc21fZG9fc2NhbmAuXG5cbkFscmlnaHQsIEkgdGhpbmsgSSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgY2FwdHVyZSB0aGUgZXNzZW5jZSBvZiB0aGlzIHBhdGNoLiBOb3csIGxldCdzIGp1c3QgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgyMywiT3V0cHV0VG9rZW5zIjoxODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDM6NDY6NTYuMDkxMjMyMDU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0MDc0NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY2FuX2dldF9uZXh0X3JtYXBfaXRlbVwiLFxuICAgIFwia3NtX2RvX3NjYW5cIixcbiAgICBcImtzbV9tYWR2aXNlXCIsXG4gICAgXCJrc21fZW5hYmxlX21lcmdlX2FueVwiLFxuICAgIFwia3NtX2Rpc2FibGVfbWVyZ2VfYW55XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gS1NNIChLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZykgd2hlcmUgYSBgYnJlYWtgIHN0YXRlbWVudCBpbiBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gIG9ubHkgZXhpdGVkIHRoZSBpbm5lciBgd2hpbGVgIGxvb3AgaW5zdGVhZCBvZiB0aGUgb3V0ZXIgYGZvcl9lYWNoX3ZtYWAgbG9vcCB3aGVuIGEgcHJvY2VzcyBpcyBleGl0aW5nIChga3NtX3Rlc3RfZXhpdChtbSlgIGlzIHRydWUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLU00gYmFja2dyb3VuZCBzY2FubmluZyBhbmQgbWFkdmlzZS9wcmN0bCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY2FuX2dldF9uZXh0X3JtYXBfaXRlbVwiLFxuICAgIFwia3NtX2RvX3NjYW5cIixcbiAgICBcImtzbV9tYWR2aXNlXCIsXG4gICAgXCJrc21fZW5hYmxlX21lcmdlX2FueVwiLFxuICAgIFwia3NtX2Rpc2FibGVfbWVyZ2VfYW55XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gS1NNIChLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZykgd2hlcmUgYSBgYnJlYWtgIHN0YXRlbWVudCBpbiBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gIG9ubHkgZXhpdGVkIHRoZSBpbm5lciBgd2hpbGVgIGxvb3AgaW5zdGVhZCBvZiB0aGUgb3V0ZXIgYGZvcl9lYWNoX3ZtYWAgbG9vcCB3aGVuIGEgcHJvY2VzcyBpcyBleGl0aW5nIChga3NtX3Rlc3RfZXhpdChtbSlgIGlzIHRydWUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLU00gYmFja2dyb3VuZCBzY2FubmluZyBhbmQgbWFkdmlzZS9wcmN0bCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjjsk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 03:18:35 +0000 UTC FinishedAt: 2026-07-27 03:46:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f6f02d9e75816aeab869ddeb17ca30094ee9324a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KSM" ], "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": "f6f02d9e75816aeab869ddeb17ca30094ee9324a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KSM" ], "series_id": "0d9c6f9d-1444-46c4-ad1f-ec6defa184d1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "scan_get_next_rmap_item", "ksm_do_scan", "ksm_madvise", "ksm_enable_merge_any", "ksm_disable_merge_any" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjYW5fZ2V0X25leHRfcm1hcF9pdGVtJiMzNDssCiAgICAmIzM0O2tzbV9kb19zY2FuJiMzNDssCiAgICAmIzM0O2tzbV9tYWR2aXNlJiMzNDssCiAgICAmIzM0O2tzbV9lbmFibGVfbWVyZ2VfYW55JiMzNDssCiAgICAmIzM0O2tzbV9kaXNhYmxlX21lcmdlX2FueSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKSB3aGVyZSBhIGBicmVha2Agc3RhdGVtZW50IGluIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgb25seSBleGl0ZWQgdGhlIGlubmVyIGB3aGlsZWAgbG9vcCBpbnN0ZWFkIG9mIHRoZSBvdXRlciBgZm9yX2VhY2hfdm1hYCBsb29wIHdoZW4gYSBwcm9jZXNzIGlzIGV4aXRpbmcgKGBrc21fdGVzdF9leGl0KG1tKWAgaXMgdHJ1ZSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIEtTTSBiYWNrZ3JvdW5kIHNjYW5uaW5nIGFuZCBtYWR2aXNlL3ByY3RsIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjNhMzhlNzVmMTc1N2Y1ZmZlNjIxODZhMWU0MDYyNDVkZTZjNGQ1N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDAzOjQ1OjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmNcbmluZGV4IDdkNWI3NjQ3OGYwYjY1Li41ZWQ5ZGI2NzZiOWY5MiAxMDA2NDRcbi0tLSBhL21tL2tzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9rc20uY1xuQEAgLTI2NjYsNyAmIzQzOzI2NjYsNyBAQCBzdGF0aWMgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSlcbiBcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFxuIFx0XHRcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcbi1cdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRcdGdvdG8gbm9fdm1hcztcbiBcbiBcdFx0XHRpbnQgZm91bmQ7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDM6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjYW5fZ2V0X25leHRfcm1hcF9pdGVtJiMzNDssCiAgICAmIzM0O2tzbV9kb19zY2FuJiMzNDssCiAgICAmIzM0O2tzbV9tYWR2aXNlJiMzNDssCiAgICAmIzM0O2tzbV9lbmFibGVfbWVyZ2VfYW55JiMzNDssCiAgICAmIzM0O2tzbV9kaXNhYmxlX21lcmdlX2FueSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKSB3aGVyZSBhIGBicmVha2Agc3RhdGVtZW50IGluIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgb25seSBleGl0ZWQgdGhlIGlubmVyIGB3aGlsZWAgbG9vcCBpbnN0ZWFkIG9mIHRoZSBvdXRlciBgZm9yX2VhY2hfdm1hYCBsb29wIHdoZW4gYSBwcm9jZXNzIGlzIGV4aXRpbmcgKGBrc21fdGVzdF9leGl0KG1tKWAgaXMgdHJ1ZSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIEtTTSBiYWNrZ3JvdW5kIHNjYW5uaW5nIGFuZCBtYWR2aXNlL3ByY3RsIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjNhMzhlNzVmMTc1N2Y1ZmZlNjIxODZhMWU0MDYyNDVkZTZjNGQ1NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDI3IDAzOjQ1OjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0va3NtLmMgYi9tbS9rc20uYwppbmRleCA3ZDViNzY0NzhmMGI2NS4uNWVkOWRiNjc2YjlmOTIgMTAwNjQ0Ci0tLSBhL21tL2tzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tzbS5jCkBAIC0yNjY2LDcgJiM0MzsyNjY2LDcgQEAgc3RhdGljIHN0cnVjdCBrc21fcm1hcF9pdGVtICpzY2FuX2dldF9uZXh0X3JtYXBfaXRlbShzdHJ1Y3QgcGFnZSAqKnBhZ2UpCiAJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCiAJCQlpZiAoa3NtX3Rlc3RfZXhpdChtbSkpCi0JCQkJYnJlYWs7CiYjNDM7CQkJCWdvdG8gbm9fdm1hczsKIAogCQkJaW50IGZvdW5kOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLU00gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGtlcm5lbCYjMzk7cyBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKSBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9rc20uY2AuIEl0JiMzOTtzIGEgcHJldHR5IHRhcmdldGVkIGNoYW5nZTsgdGhleSYjMzk7dmUgcmVwbGFjZWQgYSBgYnJlYWs7YCBzdGF0ZW1lbnQgd2l0aCBhIGBnb3RvIG5vX3ZtYXM7YCBqdW1wIHdpdGhpbiB0aGUgYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCBmdW5jdGlvbi4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIGEgYml0LCB3b25kZXJpbmcgd2h5IHRoZXkmIzM5O3ZlIGNob3NlbiBhIGBnb3RvYCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzbyBJJiMzOTtsbCB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbiBvZiBgbW0va3NtLmNgLCBwcm9iYWJseSBhcm91bmQgbGluZSAyNjY2LCBnaXZlIG9yIHRha2UuIEkgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgdG8gZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscyBhbmQgZmlndXJlIG91dCB3aGF0IHRoZXkgd2VyZSB0cnlpbmcgdG8gYWNjb21wbGlzaCBhbmQgaWYgdGhpcyBpcyBhIGdvb2Qgc29sdXRpb24gZm9yIHRoZSBwcm9ibGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY2FuX2dldF9uZXh0X3JtYXBfaXRlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2tzbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2tzbS5jPTI1NzI9c3RhdGljIHN0cnVjdCBtbV93YWxrX29wcyBrc21fbmV4dF9wYWdlX29wcyA9IHtcbi0tXG5tbS9rc20uYy0yNTc2LVxubW0va3NtLmM6MjU3NzpzdGF0aWMgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSlcbm1tL2tzbS5jLTI1Nzgte1xuLS1cbm1tL2tzbS5jPTI3ODM9c3RhdGljIHZvaWQga3NtX2RvX3NjYW4odW5zaWduZWQgaW50IHNjYW5fbnBhZ2VzKVxuLS1cbm1tL2tzbS5jLTI3ODktXHRcdGNvbmRfcmVzY2hlZCgpO1xubW0va3NtLmM6Mjc5MDpcdFx0cm1hcF9pdGVtID0gc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW0oXHUwMDI2cGFnZSk7XG5tbS9rc20uYy0yNzkxLVx0XHRpZiAoIXJtYXBfaXRlbSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGluZ3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtbS9rc20uY2AsIHNwZWNpZmljYWxseSBmcm9tIGxpbmUgMjY1MCB0byAyNzAwLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgY3JpdGljYWwgY29kZSBpbiB0aGF0IHJhbmdlIOKAkyBwcm9iYWJseSByZWxhdGVkIHRvIGEgY29yZSBmdW5jdGlvbiBvciBjcnVjaWFsIGRhdGEgc3RydWN0dXJlIHdpdGhpbiB0aGUgS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcgKEtTTSkgaW1wbGVtZW50YXRpb24uIEdpdmVuIHRoZSBsaW5lIG51bWJlcnMsIGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBhbGdvcml0aG0sIGEgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzLCBvciBhIHBhcnRpY3VsYXIgc3RhZ2UgaW4gdGhlIG1lcmdpbmcgcHJvY2Vzcy4gTXkgaW50dWl0aW9uIHNheXMgdGhpcyBsaWtlbHkgaW52b2x2ZXMgaGFuZGxpbmcgdGhlIG1lcmdpbmcgb2YgcGFnZXMsIHBhZ2Ugc2Nhbm5pbmcsIG9yIG1heWJlIGV2ZW4gZXZpY3Rpb24gcG9saWNpZXMgd2l0aGluIEtTTS4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVhbHMgd2l0aCBjb250ZW50aW9uIGFuZCBzeW5jaHJvbml6YXRpb24gaWYgdGhlIGNvZGUgZGVsdmVzIGludG8gdGhlIHBhZ2UgdGFibGVzLiBMaW5lIDI2NTAgdG8gMjcwMCBzaG91bGQgZXhwb3NlIGVub3VnaCBsb2dpYyB0byBsZXQgbWUgYW5hbHl6ZSB0aGUgc3BlY2lmaWMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9rc20uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY1MDpcdFxuMjY1MTpcdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuMjY1MjpcdFx0aWYgKGtzbV90ZXN0X2V4aXQobW0pKVxuMjY1MzpcdFx0XHRnb3RvIG5vX3ZtYXM7XG4yNjU0Olx0XG4yNjU1Olx0XHRmb3JfZWFjaF92bWEodm1pLCB2bWEpIHtcbjI2NTY6XHRcdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NRVJHRUFCTEUpKVxuMjY1NzpcdFx0XHRcdGNvbnRpbnVlO1xuMjY1ODpcdFx0XHRpZiAoa3NtX3NjYW4uYWRkcmVzcyBcdTAwM2Mgdm1hLVx1MDAzZXZtX3N0YXJ0KVxuMjY1OTpcdFx0XHRcdGtzbV9zY2FuLmFkZHJlc3MgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4yNjYwOlx0XHRcdGlmICghdm1hLVx1MDAzZWFub25fdm1hKVxuMjY2MTpcdFx0XHRcdGtzbV9zY2FuLmFkZHJlc3MgPSB2bWEtXHUwMDNldm1fZW5kO1xuMjY2MjpcdFxuMjY2MzpcdFx0XHR3aGlsZSAoa3NtX3NjYW4uYWRkcmVzcyBcdTAwM2Mgdm1hLVx1MDAzZXZtX2VuZCkge1xuMjY2NDpcdFx0XHRcdHN0cnVjdCBrc21fbmV4dF9wYWdlX2FyZyBrc21fbmV4dF9wYWdlX2FyZztcbjI2NjU6XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqdG1wX3BhZ2UgPSBOVUxMO1xuMjY2NjpcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4yNjY3Olx0XG4yNjY4Olx0XHRcdFx0aWYgKGtzbV90ZXN0X2V4aXQobW0pKVxuMjY2OTpcdFx0XHRcdFx0Z290byBub192bWFzO1xuMjY3MDpcdFxuMjY3MTpcdFx0XHRcdGludCBmb3VuZDtcbjI2NzI6XHRcbjI2NzM6XHRcdFx0XHRmb3VuZCA9IHdhbGtfcGFnZV9yYW5nZV92bWEodm1hLCBrc21fc2Nhbi5hZGRyZXNzLFxuMjY3NDpcdFx0XHRcdFx0XHRcdCAgICB2bWEtXHUwMDNldm1fZW5kLFxuMjY3NTpcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZrc21fbmV4dF9wYWdlX29wcyxcbjI2NzY6XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2a3NtX25leHRfcGFnZV9hcmcpO1xuMjY3NzpcdFxuMjY3ODpcdFx0XHRcdGlmIChmb3VuZCBcdTAwM2UgMCkge1xuMjY3OTpcdFx0XHRcdFx0Zm9saW8gPSBrc21fbmV4dF9wYWdlX2FyZy5mb2xpbztcbjI2ODA6XHRcdFx0XHRcdHRtcF9wYWdlID0ga3NtX25leHRfcGFnZV9hcmcucGFnZTtcbjI2ODE6XHRcdFx0XHRcdGtzbV9zY2FuLmFkZHJlc3MgPSBrc21fbmV4dF9wYWdlX2FyZy5hZGRyO1xuMjY4MjpcdFx0XHRcdH0gZWxzZSB7XG4yNjgzOlx0XHRcdFx0XHRWTV9XQVJOX09OX09OQ0UoZm91bmQgXHUwMDNjIDApO1xuMjY4NDpcdFx0XHRcdFx0a3NtX3NjYW4uYWRkcmVzcyA9IHZtYS1cdTAwM2V2bV9lbmQgLSBQQUdFX1NJWkU7XG4yNjg1Olx0XHRcdFx0fVxuMjY4NjpcdFxuMjY4NzpcdFx0XHRcdGlmICh0bXBfcGFnZSkge1xuMjY4ODpcdFx0XHRcdFx0Zmx1c2hfYW5vbl9wYWdlKHZtYSwgdG1wX3BhZ2UsIGtzbV9zY2FuLmFkZHJlc3MpO1xuMjY4OTpcdFx0XHRcdFx0Zmx1c2hfZGNhY2hlX3BhZ2UodG1wX3BhZ2UpO1xuMjY5MDpcdFx0XHRcdFx0cm1hcF9pdGVtID0gZ2V0X25leHRfcm1hcF9pdGVtKG1tX3Nsb3QsXG4yNjkxOlx0XHRcdFx0XHRcdGtzbV9zY2FuLnJtYXBfbGlzdCwga3NtX3NjYW4uYWRkcmVzcyk7XG4yNjkyOlx0XHRcdFx0XHRpZiAocm1hcF9pdGVtKSB7XG4yNjkzOlx0XHRcdFx0XHRcdGtzbV9zY2FuLnJtYXBfbGlzdCA9XG4yNjk0Olx0XHRcdFx0XHRcdFx0XHRcdTAwMjZybWFwX2l0ZW0tXHUwMDNlcm1hcF9saXN0O1xuMjY5NTpcdFxuMjY5NjpcdFx0XHRcdFx0XHRpZiAoc2hvdWxkX3NraXBfcm1hcF9pdGVtKGZvbGlvLCBybWFwX2l0ZW0pKSB7XG4yNjk3Olx0XHRcdFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjI2OTg6XHRcdFx0XHRcdFx0XHRnb3RvIG5leHRfcGFnZTtcbjI2OTk6XHRcdFx0XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3VidGxlIEtTTSBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBjaGFuZ2luZyBhIGBicmVhaztgIHN0YXRlbWVudCB0byBhIGBnb3RvIG5vX3ZtYXM7YCBpbiB0aGUgYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0htbSwgaW50ZXJlc3RpbmcuIFdoeSB0aGlzIGNoYW5nZT8mIzM0OyBUaGVuIEkgc2VlIHRoZSBleHBsYW5hdGlvbjogaXQgZml4ZXMgYSBidWcgd2hlcmUgdGhlIGBicmVha2Agd2FzIG9ubHkgZXhpdGluZyB0aGUgaW5uZXIgYHdoaWxlYCBsb29wLCBidXQgbm90IHRoZSBlbmNvbXBhc3NpbmcgYGZvcl9lYWNoX3ZtYWAgbG9vcC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIElmIGBrc21fdGVzdF9leGl0KG1tKWAgZXZhbHVhdGVzIHRvIHRydWUgd2l0aGluIHRoYXQgbmVzdGVkIHN0cnVjdHVyZSwgdGhlIGluY29tcGxldGUgbG9vcCB0ZXJtaW5hdGlvbiBjb3VsZCBjcmVhdGUgc29tZSByZWFsIGhlYWRhY2hlcyBkb3duc3RyZWFtLiBJdCYjMzk7cyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBhbiBvZmYtYnktb25lIGVycm9yIGluIGxvb3AgY29udHJvbC4gSSBpbnN0YW50bHkgc2VlIHRoZSBpc3N1ZTsgdGhhdCBgYnJlYWtgIHdhc24mIzM5O3QgYWN0dWFsbHkgYnJlYWtpbmcgYWxsIHRoZSB3YXkgb3V0LgoKV2FpdCBhIHNlY29uZC4gVXNpbmcgYGdvdG9gIGlzIGEgYml0Li4uIHVuY29udmVudGlvbmFsIHRoZXNlIGRheXMsIGV2ZW4gaW4ga2VybmVsIGNvZGUsIHNvIGl0JiMzOTtzIHdvcnRoIHRha2luZyBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUgcGVyZmVjdGx5LiBTbywgd2hlcmUgZXhhY3RseSBpcyB0aGlzIGBub192bWFzYCBsYWJlbCBkZWZpbmVkPyBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRoZSBmdW5jdGlvbiB0byBpZGVudGlmeSB0aGF0IHRhcmdldC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgZ290b2AgaXMgYmVpbmcgdXNlZCBwcm9wZXJseSwgdGhhdCBpdCBkb2VzbiYjMzk7dCBjcmVhdGUgYW55IGNvbXBsZXggb3IgcHJvYmxlbWF0aWMgY29udHJvbCBmbG93LiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9rc20uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjcwMDpcdFxuMjcwMTpcdFx0XHRcdFx0XHRrc21fc2Nhbi5hZGRyZXNzICYjNDM7PSBQQUdFX1NJWkU7XG4yNzAyOlx0XHRcdFx0XHRcdCpwYWdlID0gdG1wX3BhZ2U7XG4yNzAzOlx0XHRcdFx0XHR9IGVsc2Uge1xuMjcwNDpcdFx0XHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMjcwNTpcdFx0XHRcdFx0fVxuMjcwNjpcdFx0XHRcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4yNzA3Olx0XHRcdFx0XHRyZXR1cm4gcm1hcF9pdGVtO1xuMjcwODpcdFx0XHRcdH1cbjI3MDk6XHRuZXh0X3BhZ2U6XG4yNzEwOlx0XHRcdFx0a3NtX3NjYW4uYWRkcmVzcyAmIzQzOz0gUEFHRV9TSVpFO1xuMjcxMTpcdFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjcxMjpcdFx0XHR9XG4yNzEzOlx0XHR9XG4yNzE0Olx0XG4yNzE1Olx0XHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpIHtcbjI3MTY6XHRub192bWFzOlxuMjcxNzpcdFx0XHRrc21fc2Nhbi5hZGRyZXNzID0gMDtcbjI3MTg6XHRcdFx0a3NtX3NjYW4ucm1hcF9saXN0ID0gXHUwMDI2bW1fc2xvdC1cdTAwM2VybWFwX2xpc3Q7XG4yNzE5Olx0XHR9XG4yNzIwOlx0XHQvKlxuMjcyMTpcdFx0ICogTnVrZSBhbGwgdGhlIHJtYXBfaXRlbXMgdGhhdCBhcmUgYWJvdmUgdGhpcyBjdXJyZW50IHJtYXA6XG4yNzIyOlx0XHQgKiBiZWNhdXNlIHRoZXJlIHdlcmUgbm8gVk1fTUVSR0VBQkxFIHZtYXMgd2l0aCBzdWNoIGFkZHJlc3Nlcy5cbjI3MjM6XHRcdCAqL1xuMjcyNDpcdFx0cmVtb3ZlX3RyYWlsaW5nX3JtYXBfaXRlbXMoa3NtX3NjYW4ucm1hcF9saXN0KTtcbjI3MjU6XHRcbjI3MjY6XHRcdHNwaW5fbG9jayhcdTAwMjZrc21fbW1saXN0X2xvY2spO1xuMjcyNzpcdFx0c2xvdCA9IGxpc3RfZW50cnkobW1fc2xvdC1cdTAwM2VzbG90Lm1tX25vZGUubmV4dCxcbjI3Mjg6XHRcdFx0XHQgIHN0cnVjdCBtbV9zbG90LCBtbV9ub2RlKTtcbjI3Mjk6XHRcdGtzbV9zY2FuLm1tX3Nsb3QgPSBtbV9zbG90X2VudHJ5KHNsb3QsIHN0cnVjdCBrc21fbW1fc2xvdCwgc2xvdCk7XG4yNzMwOlx0XHRpZiAoa3NtX3NjYW4uYWRkcmVzcyA9PSAwKSB7XG4yNzMxOlx0XHRcdC8qXG4yNzMyOlx0XHRcdCAqIFdlJiMzOTt2ZSBjb21wbGV0ZWQgYSBmdWxsIHNjYW4gb2YgYWxsIHZtYXMsIGhvbGRpbmcgbW1hcF9sb2NrXG4yNzMzOlx0XHRcdCAqIHRocm91Z2hvdXQsIGFuZCBmb3VuZCBubyBWTV9NRVJHRUFCTEU6IHNvIGRvIHRoZSBzYW1lIGFzXG4yNzM0Olx0XHRcdCAqIF9fa3NtX2V4aXQgZG9lcyB0byByZW1vdmUgdGhpcyBtbSBmcm9tIGFsbCBvdXIgbGlzdHMgbm93LlxuMjczNTpcdFx0XHQgKiBUaGlzIGFwcGxpZXMgZWl0aGVyIHdoZW4gY2xlYW5pbmcgdXAgYWZ0ZXIgX19rc21fZXhpdFxuMjczNjpcdFx0XHQgKiAoYnV0IGJld2FyZTogd2UgY2FuIHJlYWNoIGhlcmUgZXZlbiBiZWZvcmUgX19rc21fZXhpdCksXG4yNzM3Olx0XHRcdCAqIG9yIHdoZW4gYWxsIFZNX01FUkdFQUJMRSBhcmVhcyBoYXZlIGJlZW4gdW5tYXBwZWQgKGFuZFxuMjczODpcdFx0XHQgKiBtbWFwX2xvY2sgdGhlbiBwcm90ZWN0cyBhZ2FpbnN0IHJhY2Ugd2l0aCBNQURWX01FUkdFQUJMRSkuXG4yNzM5Olx0XHRcdCAqL1xuMjc0MDpcdFx0XHRoYXNoX2RlbChcdTAwMjZtbV9zbG90LVx1MDAzZXNsb3QuaGFzaCk7XG4yNzQxOlx0XHRcdGxpc3RfZGVsKFx1MDAyNm1tX3Nsb3QtXHUwMDNlc2xvdC5tbV9ub2RlKTtcbjI3NDI6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2a3NtX21tbGlzdF9sb2NrKTtcbjI3NDM6XHRcbjI3NDQ6XHRcdFx0bW1fc2xvdF9mcmVlKG1tX3Nsb3RfY2FjaGUsIG1tX3Nsb3QpO1xuMjc0NTpcdFx0XHQvKlxuMjc0NjpcdFx0XHQgKiBPbmx5IGNsZWFyIE1NRl9WTV9NRVJHRUFCTEUuIFdlIG11c3Qgbm90IGNsZWFyXG4yNzQ3Olx0XHRcdCAqIE1NRl9WTV9NRVJHRV9BTlksIGJlY2F1c2UgZm9yIHRob3NlIE1NRl9WTV9NRVJHRV9BTlkgcHJvY2VzcyxcbjI3NDg6XHRcdFx0ICogcGVyaGFwcyB0aGVpciBtbV9zdHJ1Y3QgaGFzIGp1c3QgYmVlbiBhZGRlZCB0byBrc21fbW1fc2xvdFxuMjc0OTpcdFx0XHQgKiBsaXN0LCBhbmQgaXRzIHByb2Nlc3MgaGFzIG5vdCB5ZXQgb2ZmaWNpYWxseSBzdGFydGVkIHJ1bm5pbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtTTSBGdW5jdGlvbmFsIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcsIHNwZWNpZmljYWxseSBhIGJ1ZyBmaXguIFNlZW1zIGxpa2UgYSBgYnJlYWtgIHdhcyBpbXByb3Blcmx5IGV4aXRpbmcgYSBgd2hpbGVgIGxvb3Agd2l0aGluIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAsIGJ1dCB0aGUgYGZvcl9lYWNoX3ZtYWAgbG9vcCB3b3VsZCBjb250aW51ZS4gVGhpcyBjb3VsZCBiZSBhIHByb2JsZW0sIGVzcGVjaWFsbHkgaWYgdGhlIHByb2Nlc3MgaXMgZXhpdGluZyDigJMgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIHNjZW5hcmlvIHBvdGVudGlhbGx5LiBUaGUgZnVuY3Rpb24gaXRzZWxmIGlzIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAsIGFuZCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBga3NtX2RvX3NjYW5gLiBEZWZpbml0ZWx5IGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSwgc28gaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB0YXJnZXQgYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCBkaXJlY3RseSwgYnV0IGl0IGxvb2tzIGxpa2UgdGhhdCBvbmUmIzM5O3Mgc3RhdGljLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2suLi4gWXVwLCBpdCYjMzk7cyBgc3RhdGljIHN0cnVjdCBrc21fcm1hcF9pdGVtICpzY2FuX2dldF9uZXh0X3JtYXBfaXRlbShzdHJ1Y3QgcGFnZSAqKnBhZ2UpYC4gRGFtbi4KClJpZ2h0LCB0aGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gT2theSwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayB1cHN0cmVhbS4gYGtzbV9kb19zY2FuYCBpcyAqYWxzbyogc3RhdGljLiBUaGlzIGlzbiYjMzk7dCBpZGVhbC4gTGV0JiMzOTtzIHNlZSB3aG8gaXMgKmNhbGxpbmcqIGBrc21fZG9fc2NhbmAgYW5kIHdvcmsgYmFjayBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrc21fZG9fc2NhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2tzbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2tzbS5jPTY5Mj1zdGF0aWMgaW50IGJyZWFrX2tzbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2tzbS5jLTcyOS1cdCAqIFRoYXQmIzM5O3MgYSBwaXR5OiB3ZSBtaWdodCB0aGVyZWZvcmUgaGF2ZSBtb3JlIGtlcm5lbCBwYWdlcyBhbGxvY2F0ZWRcbm1tL2tzbS5jOjczMDpcdCAqIHRoYW4gd2UmIzM5O3JlIGNvdW50aW5nIGFzIG5vZGVzIGluIHRoZSBzdGFibGUgdHJlZTsgYnV0IGtzbV9kb19zY2FuXG5tbS9rc20uYy03MzEtXHQgKiB3aWxsIHJldHJ5IHRvIGJyZWFrX2NvdyBvbiBlYWNoIHBhc3MsIHNvIHNob3VsZCByZWNvdmVyIHRoZSBwYWdlXG4tLVxubW0va3NtLmM9MjU3Nz1zdGF0aWMgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSlcbi0tXG5tbS9rc20uYy0yNjAxLVx0XHQgKiBMVFAmIzM5O3MgS1NNIHRlc3QgZnJvbSBzdWNjZWVkaW5nIGRldGVybWluaXN0aWNhbGx5OyBzbyBkcmFpblxubW0va3NtLmM6MjYwMjpcdFx0ICogdGhlbSBoZXJlIChoZXJlIHJhdGhlciB0aGFuIG9uIGVudHJ5IHRvIGtzbV9kb19zY2FuKCksXG5tbS9rc20uYy0yNjAzLVx0XHQgKiBzbyB3ZSBkb24mIzM5O3QgSVBJIHRvbyBvZnRlbiB3aGVuIHBhZ2VzX3RvX3NjYW4gaXMgc2V0IGxvdykuXG4tLVxubW0va3NtLmMtMjc3OS0vKipcbm1tL2tzbS5jOjI3ODA6ICoga3NtX2RvX3NjYW4gIC0gdGhlIGtzbSBzY2FubmVyIG1haW4gd29ya2VyIGZ1bmN0aW9uLlxubW0va3NtLmMtMjc4MS0gKiBAc2Nhbl9ucGFnZXM6ICBudW1iZXIgb2YgcGFnZXMgd2Ugd2FudCB0byBzY2FuIGJlZm9yZSB3ZSByZXR1cm4uXG5tbS9rc20uYy0yNzgyLSAqL1xubW0va3NtLmM6Mjc4MzpzdGF0aWMgdm9pZCBrc21fZG9fc2Nhbih1bnNpZ25lZCBpbnQgc2Nhbl9ucGFnZXMpXG5tbS9rc20uYy0yNzg0LXtcbi0tXG5tbS9rc20uYz0yODA0PXN0YXRpYyBpbnQga3NtX3NjYW5fdGhyZWFkKHZvaWQgKm5vdGhpbmcpXG4tLVxubW0va3NtLmMtMjgxNC1cdFx0aWYgKGtzbWRfc2hvdWxkX3J1bigpKVxubW0va3NtLmM6MjgxNTpcdFx0XHRrc21fZG9fc2Nhbihrc21fdGhyZWFkX3BhZ2VzX3RvX3NjYW4pO1xubW0va3NtLmMtMjgxNi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmtzbV90aHJlYWRfbXV0ZXgpO1xuLS1cbm1tL2tzbS5jPTMzNzU9c3RhdGljIGludCBrc21fbWVtb3J5X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZixcbi0tXG5tbS9rc20uYy0zMzgyLVx0XHQvKlxubW0va3NtLmM6MzM4MzpcdFx0ICogUHJldmVudCBrc21fZG9fc2NhbigpLCB1bm1lcmdlX2FuZF9yZW1vdmVfYWxsX3JtYXBfaXRlbXMoKVxubW0va3NtLmMtMzM4NC1cdFx0ICogYW5kIHJlbW92ZV9hbGxfc3RhYmxlX25vZGVzKCkgd2hpbGUgbWVtb3J5IGlzIGdvaW5nIG9mZmxpbmU6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqS1NNIFRocmVhZCBDb251bmRydW1zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGBrc21fc2Nhbl90aHJlYWRgLCB0aGUga2VybmVsIHRocmVhZCByZXNwb25zaWJsZSBmb3IgS2V5ZWQgSGFzaCBNZW1vcnkgKEtTTSkuIEJ1dCBhIHF1ZXN0aW9uIGtlZXBzIGJ1YmJsaW5nIHVwOiBjYW4gS1NNIGFjdHVhbGx5IGJlICp0cmlnZ2VyZWQqIGRpcmVjdGx5IGZyb20gc3lzY2FsbHM/IFNlZW1zIHN0cmFuZ2UsIGRvZXNuJiMzOTt0IGl0PyBUaGVuIEkgcmVtZW1iZXI6IHllcywgb2YgY291cnNlISBgbWFkdmlzZShNQURWX01FUkdFQUJMRSlgIGlzIHRoZSBrZXkuIFRoYXQgc3BlY2lmaWMgYG1hZHZpc2VgIGZsYWcgaXMgaG93IHlvdSBlbmFibGUgS1NNIG9uIGEgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKS4gQW5kIHRoZXJlJiMzOTtzIGFsc28gYHByY3RsKFBSX1NFVF9NRU1PUllfTUVSR0UpYCwgd2hpY2ggZW5hYmxlcyBpdCBhdCB0aGUgKnByb2Nlc3MqIGxldmVsLiBTbywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiwgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyBpbiBgbWFkdmlzZWAsIG9yIHBlcmhhcHMgbW9yZSBzcGVjaWZpY2FsbHkgYGtzbV9tYWR2aXNlYC4gSSBuZWVkIHRvIHJldmlldyB0aG9zZSBmdW5jdGlvbnMgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uIHdpdGggc3lzY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tzbV9tYWR2aXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va3NtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va3NtLmM9Mjk2Nz1pbnQga3NtX2Rpc2FibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0va3NtLmMtMjk3Ny1cbm1tL2tzbS5jOjI5Nzg6aW50IGtzbV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0va3NtLmMtMjk3OS1cdFx0dW5zaWduZWQgbG9uZyBlbmQsIGludCBhZHZpY2UsIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKVxuLS1cbm1tL2tzbS5jLTMwMTUtfVxubW0va3NtLmM6MzAxNjpFWFBPUlRfU1lNQk9MX0dQTChrc21fbWFkdmlzZSk7XG5tbS9rc20uYy0zMDE3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTkzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6CgoqKktTTSBEZWVwZXIgRGl2ZSoqCgpSaWdodCwgc28gYGtzbV9tYWR2aXNlYCBpcyB0aGUgZ2F0ZXdheSBmb3IgYE1BRFZfTUVSR0VBQkxFYCwgd2hpY2ggaXMgZXhhY3RseSBhcyBpdCBzaG91bGQgYmUuIFRoZSBjb25uZWN0aW9uIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE9mIGNvdXJzZSwgYGtzbV9zY2FuX3RocmVhZGAgaXMgdGhlIGJhY2tncm91bmQgcHJvY2VzcyBkcml2aW5nIHRoZSBLU00gb3BlcmF0aW9ucy4gTm93IEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCYjMzk7cyBkaWcgaW50byBLY29uZmlnIHRvIGNvbmZpcm0gdGhlIGV4YWN0IHNldHRpbmdzLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBlbmFibGVkLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaXMgcmlnaHQgZm9yIHRoaXMgdXNlIGNhc2UuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiB0aGUgc3BlY2lmaWNzIGJlZm9yZSBnb2luZyBhbnkgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1NNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTczNj1jb25maWcgTU1VX05PVElGSUVSXG4tLVxubW0vS2NvbmZpZy03MzktXG5tbS9LY29uZmlnOjc0MDpjb25maWcgS1NNXG5tbS9LY29uZmlnLTc0MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIEtTTSBmb3IgcGFnZSBtZXJnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4ODMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqS1NNIENvbmZpZ3VyYXRpb24gUmV2aWV3KioKCkFscmlnaHQsIHRoZSBrZXkgY29uZmlndXJhdGlvbiBpZGVudGlmaWVyIGhlcmUgaXMgYEtTTWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IGFzc2VzcyB0aGUgYnJvYWRlciBjb250ZXh0IGFuZCBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIGl0LiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O09rYXksIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggS1NNLiBXaGF0IGVsc2UgaXMgZW50YW5nbGVkIHdpdGggdGhpcz8gQXJlIHRoZXJlIGFueSB1cHN0cmVhbSBvciBkb3duc3RyZWFtIHNlcnZpY2VzLCByZWxhdGVkIGxpYnJhcmllcywgb3IgZXh0ZXJuYWwgY29tcG9uZW50cyB0aGF0IHJlbHkgb24gb3IgYXJlIGFmZmVjdGVkIGJ5IHRoaXM/JiMzNDsgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhvc2UgY29ubmVjdGlvbnMgdG8gYXZvaWQgbWlzc2luZyBzb21ldGhpbmcgY3J1Y2lhbC4gQSBkZXBlbmRlbmN5IG1hcCwgb3IgYXQgbGVhc3QgYSBtZW50YWwgY2hlY2tsaXN0IG9mIHBvdGVudGlhbCBsaW5rYWdlcywgaXMgZXNzZW50aWFsIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSBgS1NNYCBjb25maWd1cmF0aW9uIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2Ygd2hhdCBgS1NNYCBpbmZsdWVuY2VzIGlzIHRoZSB2ZXJ5IGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzQwOlx0Y29uZmlnIEtTTVxuIDc0MTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgS1NNIGZvciBwYWdlIG1lcmdpbmdcJiMzNDtcbiA3NDI6XHRcdGRlcGVuZHMgb24gTU1VXG4gNzQzOlx0XHRzZWxlY3QgWFhIQVNIXG4gNzQ0Olx0XHRoZWxwXG4gNzQ1Olx0XHQgIEVuYWJsZSBLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZzogS1NNIHBlcmlvZGljYWxseSBzY2FucyB0aG9zZSBhcmVhc1xuIDc0NjpcdFx0ICBvZiBhbiBhcHBsaWNhdGlvbiYjMzk7cyBhZGRyZXNzIHNwYWNlIHRoYXQgYW4gYXBwIGhhcyBhZHZpc2VkIG1heSBiZVxuIDc0NzpcdFx0ICBtZXJnZWFibGUuICBXaGVuIGl0IGZpbmRzIHBhZ2VzIG9mIGlkZW50aWNhbCBjb250ZW50LCBpdCByZXBsYWNlc1xuIDc0ODpcdFx0ICB0aGUgbWFueSBpbnN0YW5jZXMgYnkgYSBzaW5nbGUgcGFnZSB3aXRoIHRoYXQgY29udGVudCwgc29cbiA3NDk6XHRcdCAgc2F2aW5nIG1lbW9yeSB1bnRpbCBvbmUgb3IgYW5vdGhlciBhcHAgbmVlZHMgdG8gbW9kaWZ5IHRoZSBjb250ZW50LlxuIDc1MDpcdFx0ICBSZWNvbW1lbmRlZCBmb3IgdXNlIHdpdGggS1ZNLCBvciB3aXRoIG90aGVyIGR1cGxpY2F0aXZlIGFwcGxpY2F0aW9ucy5cbiA3NTE6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vbW0va3NtLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbjogS1NNIGlzIGluYWN0aXZlXG4gNzUyOlx0XHQgIHVudGlsIGEgcHJvZ3JhbSBoYXMgbWFkdmlzZWQgdGhhdCBhbiBhcmVhIGlzIE1BRFZfTUVSR0VBQkxFLCBhbmRcbiA3NTM6XHRcdCAgcm9vdCBoYXMgc2V0IC9zeXMva2VybmVsL21tL2tzbS9ydW4gdG8gMSAoaWYgQ09ORklHX1NZU0ZTIGlzIHNldCkuXG4gNzU0Olx0XG4gNzU1Olx0Y29uZmlnIERFRkFVTFRfTU1BUF9NSU5fQUREUlxuIDc1NjpcdFx0aW50IFwmIzM0O0xvdyBhZGRyZXNzIHNwYWNlIHRvIHByb3RlY3QgZnJvbSB1c2VyIGFsbG9jYXRpb25cJiMzNDtcbiA3NTc6XHRcdGRlcGVuZHMgb24gTU1VXG4gNzU4Olx0XHRkZWZhdWx0IDQwOTZcbiA3NTk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ0NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtTTSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBLU00gaW1wbGVtZW50YXRpb24uIFRoZSBjb25maWcgaXMgc2V0IHRvIGBLU01gLCB3aGljaCBpcyBnb29kIHRvIGtub3cuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmb2N1cyBvbiB0aGUgYGtzbV9tYWR2aXNlYCBhbmQgYGtzbV9zY2FuX3RocmVhZGAgZnVuY3Rpb25zLiBIbW0sIHdhaXQgYSBtaW51dGUsIGBrc21fc2Nhbl90aHJlYWRgIGlzIGEga3RocmVhZCwgc28gaXQmIzM5O3Mgbm90IGdvaW5nIHRvIGJlIGEgc3lzY2FsbCBlbnRyeSBwb2ludCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyIGlmIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdHJhY2luZy4gQnV0LCBga3NtX21hZHZpc2VgIGRlZmluaXRlbHkgaXMuIFRoYXQmIzM5O3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuCgpJIGFsc28gc2VlIGBrc21fZG9fc2NhbmAgaXMgcHJlc2VudCwgYW5kIGl0JiMzOTtzIHN0YXRpYywgd2hpY2ggY291bGQgaW5kaWNhdGUgaXQmIzM5O3Mgbm90IGV4cG9zZWQgZXh0ZXJuYWxseSwgdGhvdWdoIGl0IHNlZW1zIHRvIGJlIHRoZSBtYWluIHNjYW4gZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2Nhbm5pbmcgbG9naWMgaXMgdHJpZ2dlcmVkLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gLiBJdCBsb29rcyBsaWtlIGEgY29tcGxleCBmdW5jdGlvbi4gSXQmIzM5O3MgcHJvYmFibHkgKm5vdCogaW5saW5lZC4gSSBzaG91bGQgY2hlY2sgdGhlIGNvZGUgZm9yIHRoYXQgb25lIHNwZWNpZmljYWxseSwgYW5kIGxldCYjMzk7cyBnbyBhaGVhZCBhbmQgbG9vayBhdCB0aGUgc2l6ZSwganVzdCB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGNvbXBsZXhpdHkuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaW5saW5lZCBmdW5jdGlvbnMgY2FuIG9ic2N1cmUgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2tzbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU3NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU3NzpcdHN0YXRpYyBzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW0oc3RydWN0IHBhZ2UgKipwYWdlKVxuMjU3ODpcdHtcbjI1Nzk6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuMjU4MDpcdFx0c3RydWN0IGtzbV9tbV9zbG90ICptbV9zbG90O1xuMjU4MTpcdFx0c3RydWN0IG1tX3Nsb3QgKnNsb3Q7XG4yNTgyOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbjI1ODM6XHRcdHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW07XG4yNTg0Olx0XHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yIHZtaTtcbjI1ODU6XHRcdGludCBuaWQ7XG4yNTg2Olx0XG4yNTg3Olx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZrc21fbW1faGVhZC5zbG90Lm1tX25vZGUpKVxuMjU4ODpcdFx0XHRyZXR1cm4gTlVMTDtcbjI1ODk6XHRcbjI1OTA6XHRcdG1tX3Nsb3QgPSBrc21fc2Nhbi5tbV9zbG90O1xuMjU5MTpcdFx0aWYgKG1tX3Nsb3QgPT0gXHUwMDI2a3NtX21tX2hlYWQpIHtcbjI1OTI6XHRcdFx0YWR2aXNvcl9zdGFydF9zY2FuKCk7XG4yNTkzOlx0XHRcdHRyYWNlX2tzbV9zdGFydF9zY2FuKGtzbV9zY2FuLnNlcW5yLCBrc21fcm1hcF9pdGVtcyk7XG4yNTk0Olx0XG4yNTk1Olx0XHRcdC8qXG4yNTk2Olx0XHRcdCAqIEEgbnVtYmVyIG9mIHBhZ2VzIGNhbiBoYW5nIGFyb3VuZCBpbmRlZmluaXRlbHkgaW4gcGVyLWNwdVxuMjU5NzpcdFx0XHQgKiBMUlUgY2FjaGUsIHJhaXNlZCBwYWdlIGNvdW50IHByZXZlbnRpbmcgd3JpdGVfcHJvdGVjdF9wYWdlXG4yNTk4Olx0XHRcdCAqIGZyb20gbWVyZ2luZyB0aGVtLiAgVGhvdWdoIGl0IGRvZXNuJiMzOTt0IHJlYWxseSBtYXR0ZXIgbXVjaCxcbjI1OTk6XHRcdFx0ICogaXQgaXMgcHV6emxpbmcgdG8gc2VlIHNvbWUgc3R1Y2sgaW4gcGFnZXNfdm9sYXRpbGUgdW50aWxcbjI2MDA6XHRcdFx0ICogb3RoZXIgYWN0aXZpdHkgam9zdGxlcyB0aGVtIG91dCwgYW5kIHRoZXkgYWxzbyBwcmV2ZW50ZWRcbjI2MDE6XHRcdFx0ICogTFRQJiMzOTtzIEtTTSB0ZXN0IGZyb20gc3VjY2VlZGluZyBkZXRlcm1pbmlzdGljYWxseTsgc28gZHJhaW5cbjI2MDI6XHRcdFx0ICogdGhlbSBoZXJlIChoZXJlIHJhdGhlciB0aGFuIG9uIGVudHJ5IHRvIGtzbV9kb19zY2FuKCksXG4yNjAzOlx0XHRcdCAqIHNvIHdlIGRvbiYjMzk7dCBJUEkgdG9vIG9mdGVuIHdoZW4gcGFnZXNfdG9fc2NhbiBpcyBzZXQgbG93KS5cbjI2MDQ6XHRcdFx0ICovXG4yNjA1Olx0XHRcdGxydV9hZGRfZHJhaW5fYWxsKCk7XG4yNjA2Olx0XG4yNjA3Olx0XHRcdC8qXG4yNjA4Olx0XHRcdCAqIFdoZXJlYXMgc3RhbGUgc3RhYmxlX25vZGVzIG9uIHRoZSBzdGFibGVfdHJlZSBpdHNlbGZcbjI2MDk6XHRcdFx0ICogZ2V0IHBydW5lZCBpbiB0aGUgcmVndWxhciBjb3Vyc2Ugb2Ygc3RhYmxlX3RyZWVfc2VhcmNoKCksXG4yNjEwOlx0XHRcdCAqIHRob3NlIG1vdmVkIG91dCB0byB0aGUgbWlncmF0ZV9ub2RlcyBsaXN0IGNhbiBhY2N1bXVsYXRlOlxuMjYxMTpcdFx0XHQgKiBzbyBwcnVuZSB0aGVtIG9uY2UgYmVmb3JlIGVhY2ggZnVsbCBzY2FuLlxuMjYxMjpcdFx0XHQgKi9cbjI2MTM6XHRcdFx0aWYgKCFrc21fbWVyZ2VfYWNyb3NzX25vZGVzKSB7XG4yNjE0Olx0XHRcdFx0c3RydWN0IGtzbV9zdGFibGVfbm9kZSAqc3RhYmxlX25vZGUsICpuZXh0O1xuMjYxNTpcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4yNjE2Olx0XG4yNjE3Olx0XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0YWJsZV9ub2RlLCBuZXh0LFxuMjYxODpcdFx0XHRcdFx0XHRcdCBcdTAwMjZtaWdyYXRlX25vZGVzLCBsaXN0KSB7XG4yNjE5Olx0XHRcdFx0XHRmb2xpbyA9IGtzbV9nZXRfZm9saW8oc3RhYmxlX25vZGUsXG4yNjIwOlx0XHRcdFx0XHRcdFx0ICAgICAgS1NNX0dFVF9GT0xJT19OT0xPQ0spO1xuMjYyMTpcdFx0XHRcdFx0aWYgKGZvbGlvKVxuMjYyMjpcdFx0XHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMjYyMzpcdFx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yNjI0Olx0XHRcdFx0fVxuMjYyNTpcdFx0XHR9XG4yNjI2Olx0XG4yNjI3Olx0XHRcdGZvciAobmlkID0gMDsgbmlkIFx1MDAzYyBrc21fbnJfbm9kZV9pZHM7IG5pZCYjNDM7JiM0MzspXG4yNjI4Olx0XHRcdFx0cm9vdF91bnN0YWJsZV90cmVlW25pZF0gPSBSQl9ST09UO1xuMjYyOTpcdFxuMjYzMDpcdFx0XHRzcGluX2xvY2soXHUwMDI2a3NtX21tbGlzdF9sb2NrKTtcbjI2MzE6XHRcdFx0c2xvdCA9IGxpc3RfZW50cnkobW1fc2xvdC1cdTAwM2VzbG90Lm1tX25vZGUubmV4dCxcbjI2MzI6XHRcdFx0XHRcdCAgc3RydWN0IG1tX3Nsb3QsIG1tX25vZGUpO1xuMjYzMzpcdFx0XHRtbV9zbG90ID0gbW1fc2xvdF9lbnRyeShzbG90LCBzdHJ1Y3Qga3NtX21tX3Nsb3QsIHNsb3QpO1xuMjYzNDpcdFx0XHRrc21fc2Nhbi5tbV9zbG90ID0gbW1fc2xvdDtcbjI2MzU6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2a3NtX21tbGlzdF9sb2NrKTtcbjI2MzY6XHRcdFx0LypcbjI2Mzc6XHRcdFx0ICogQWx0aG91Z2ggd2UgdGVzdGVkIGxpc3RfZW1wdHkoKSBhYm92ZSwgYSByYWNpbmcgX19rc21fZXhpdFxuMjYzODpcdFx0XHQgKiBvZiB0aGUgbGFzdCBtbSBvbiB0aGUgbGlzdCBtYXkgaGF2ZSByZW1vdmVkIGl0IHNpbmNlIHRoZW4uXG4yNjM5Olx0XHRcdCAqL1xuMjY0MDpcdFx0XHRpZiAobW1fc2xvdCA9PSBcdTAwMjZrc21fbW1faGVhZClcbjI2NDE6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbjI2NDI6XHRuZXh0X21tOlxuMjY0MzpcdFx0XHRrc21fc2Nhbi5hZGRyZXNzID0gMDtcbjI2NDQ6XHRcdFx0a3NtX3NjYW4ucm1hcF9saXN0ID0gXHUwMDI2bW1fc2xvdC1cdTAwM2VybWFwX2xpc3Q7XG4yNjQ1Olx0XHR9XG4yNjQ2Olx0XG4yNjQ3Olx0XHRzbG90ID0gXHUwMDI2bW1fc2xvdC1cdTAwM2VzbG90O1xuMjY0ODpcdFx0bW0gPSBzbG90LVx1MDAzZW1tO1xuMjY0OTpcdFx0dm1hX2l0ZXJfaW5pdChcdTAwMjZ2bWksIG1tLCBrc21fc2Nhbi5hZGRyZXNzKTtcbjI2NTA6XHRcbjI2NTE6XHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbjI2NTI6XHRcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcbjI2NTM6XHRcdFx0Z290byBub192bWFzO1xuMjY1NDpcdFxuMjY1NTpcdFx0Zm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7XG4yNjU2Olx0XHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUVSR0VBQkxFKSlcbjI2NTc6XHRcdFx0XHRjb250aW51ZTtcbjI2NTg6XHRcdFx0aWYgKGtzbV9zY2FuLmFkZHJlc3MgXHUwMDNjIHZtYS1cdTAwM2V2bV9zdGFydClcbjI2NTk6XHRcdFx0XHRrc21fc2Nhbi5hZGRyZXNzID0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xuMjY2MDpcdFx0XHRpZiAoIXZtYS1cdTAwM2Vhbm9uX3ZtYSlcbjI2NjE6XHRcdFx0XHRrc21fc2Nhbi5hZGRyZXNzID0gdm1hLVx1MDAzZXZtX2VuZDtcbjI2NjI6XHRcbjI2NjM6XHRcdFx0d2hpbGUgKGtzbV9zY2FuLmFkZHJlc3MgXHUwMDNjIHZtYS1cdTAwM2V2bV9lbmQpIHtcbjI2NjQ6XHRcdFx0XHRzdHJ1Y3Qga3NtX25leHRfcGFnZV9hcmcga3NtX25leHRfcGFnZV9hcmc7XG4yNjY1Olx0XHRcdFx0c3RydWN0IHBhZ2UgKnRtcF9wYWdlID0gTlVMTDtcbjI2NjY6XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMjY2NzpcdFxuMjY2ODpcdFx0XHRcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcbjI2Njk6XHRcdFx0XHRcdGdvdG8gbm9fdm1hcztcbjI2NzA6XHRcbjI2NzE6XHRcdFx0XHRpbnQgZm91bmQ7XG4yNjcyOlx0XG4yNjczOlx0XHRcdFx0Zm91bmQgPSB3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwga3NtX3NjYW4uYWRkcmVzcyxcbjI2NzQ6XHRcdFx0XHRcdFx0XHQgICAgdm1hLVx1MDAzZXZtX2VuZCxcbjI2NzU6XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2a3NtX25leHRfcGFnZV9vcHMsXG4yNjc2Olx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmtzbV9uZXh0X3BhZ2VfYXJnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUwNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyBLU00gQVBJIEVudHJ5cG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEtTTSBjb2RlIGFuZCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIHRvIGluY2x1ZGUgaW4gdGhpcyBhbmFseXNpcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyJiMzOTtzIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gIGZ1bmN0aW9uIGlzIG1hc3NpdmUg4oCTIG92ZXIgMTUwIGxpbmVzIOKAkyBzbyBpbmxpbmluZyBpdCBpcyBkZWZpbml0ZWx5IG91dCBvZiB0aGUgcXVlc3Rpb24uIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBhZGQgaXQuIFRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIGxldCYjMzk7cyBhbHNvIGdyYWIgYGtzbV9tYWR2aXNlYCBhbmQgYGtzbV9kb19zY2FuYC4gSG1tLCBidXQgd2FpdCBhIHNlY29uZOKApiBga3NtX2RvX3NjYW5gIGlzIGFsc28gbWFya2VkIGFzIHN0YXRpYy4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgd2FudHMgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBPa2F5LCBzY3JhdGNoIHRoYXQgb25lLiBTbywgYGtzbV9tYWR2aXNlYCBpdCBpcy4KCk5vdywgYW0gSSBtaXNzaW5nIGFueXRoaW5nPyBJcyB0aGVyZSBhbm90aGVyIGVudHJ5IHBvaW50IEkgc2hvdWxkIGNvbnNpZGVyPyBMZXQgbWUgc2Vl4oCmIEkga25vdyB0aGUgYG1hZHZpc2VgIHN5c2NhbGwgdWx0aW1hdGVseSBjYWxscyBga3NtX21hZHZpc2VgLCB3aGljaCBJJiMzOTt2ZSBpbmNsdWRlZC4gIERvZXMgYHByY3RsYCBwbGF5IGFueSByb2xlIGhlcmU/IEkgc2VlbSB0byByZW1lbWJlciBgcHJjdGxgIG1pZ2h0IGJlIGludm9sdmVkLiBMZXQmIzM5O3MgY2hlY2vigKYgSSBuZWVkIHRvIHNlZSBpZiBpdCBjYWxscyBga3NtX2VuYWJsZV9tZXJnZV9hbnlgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB0byBjb3ZlciBhbGwgdGhlIGJhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrc21fZW5hYmxlX21lcmdlX2FueSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2tzbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2tzbS5jPTI4OTc9c3RhdGljIGludCBrc21fZGVsX3ZtYXMoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0va3NtLmMtMjkxMS0vKipcbm1tL2tzbS5jOjI5MTI6ICoga3NtX2VuYWJsZV9tZXJnZV9hbnkgLSBBZGQgbW0gdG8gbW0ga3NtIGxpc3QgYW5kIGVuYWJsZSBtZXJnaW5nIG9uIGFsbFxubW0va3NtLmMtMjkxMy0gKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgVk1BJiMzOTtzXG4tLVxubW0va3NtLmMtMjkxOC0gKi9cbm1tL2tzbS5jOjI5MTk6aW50IGtzbV9lbmFibGVfbWVyZ2VfYW55KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0va3NtLmMtMjkyMC17XG4tLVxubW0va3NtLmMtMjkzOS0gKiBrc21fZGlzYWJsZV9tZXJnZV9hbnkgLSBEaXNhYmxlIG1lcmdpbmcgb24gYWxsIGNvbXBhdGlibGUgVk1BJiMzOTtzIG9mIHRoZSBtbSxcbm1tL2tzbS5jOjI5NDA6ICpcdFx0XHQgICBwcmV2aW91c2x5IGVuYWJsZWQgdmlhIGtzbV9lbmFibGVfbWVyZ2VfYW55KCkuXG5tbS9rc20uYy0yOTQxLSAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgS1NNIE1lcmdlIENvbnRyb2wqKgoKUmlnaHQsIHNvIGBrc21fZW5hYmxlX21lcmdlX2FueWAgaXMgYW5vdGhlciBjcnVjaWFsIGVudHJ5IHBvaW50IGluIHRoaXMgS1NNIChLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZykgY29udGV4dC4gSXQmIzM5O3Mgbm90IHRoZSBvbmx5IG9uZSwgb2J2aW91c2x5LCBidXQgaXQmIzM5O3MgYSB2aXRhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIHN5c3RlbSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZlYXR1cmVzLgoKTXkgbmV4dCBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgY291bnRlcnBhcnQgdG8gZW5hYmxpbmcgdGhpcyBmZWF0dXJlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IGBrc21fZGlzYWJsZV9tZXJnZV9hbnlgIHdvcmtzLiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGlzIGFic29sdXRlbHkgZnVuZGFtZW50YWwgZm9yIG1hbmFnaW5nIHRoZSB3aG9sZSBwcm9jZXNzIGFuZCBJIHdhbnQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBtZXJnaW5nIGlzIGFjdHVhbGx5ICpjb250cm9sbGVkKiB3aXRoaW4gdGhlIGtlcm5lbC4gSSBjYW4gdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgc3lzdGVtIGlzIGJlaGF2aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrc21fZGlzYWJsZV9tZXJnZV9hbnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9rc20uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9rc20uYz0yOTE5PWludCBrc21fZW5hYmxlX21lcmdlX2FueShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS9rc20uYy0yOTM4LS8qKlxubW0va3NtLmM6MjkzOTogKiBrc21fZGlzYWJsZV9tZXJnZV9hbnkgLSBEaXNhYmxlIG1lcmdpbmcgb24gYWxsIGNvbXBhdGlibGUgVk1BJiMzOTtzIG9mIHRoZSBtbSxcbm1tL2tzbS5jLTI5NDAtICpcdFx0XHQgICBwcmV2aW91c2x5IGVuYWJsZWQgdmlhIGtzbV9lbmFibGVfbWVyZ2VfYW55KCkuXG4tLVxubW0va3NtLmMtMjk0OS0gKi9cbm1tL2tzbS5jOjI5NTA6aW50IGtzbV9kaXNhYmxlX21lcmdlX2FueShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL2tzbS5jLTI5NTEte1xuLS1cbm1tL2tzbS5jPTI5Njc9aW50IGtzbV9kaXNhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL2tzbS5jLTI5NzMtXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfVk1fTUVSR0VfQU5ZLCBtbSkpXG5tbS9rc20uYzoyOTc0Olx0XHRyZXR1cm4ga3NtX2Rpc2FibGVfbWVyZ2VfYW55KG1tKTtcbm1tL2tzbS5jLTI5NzUtXHRyZXR1cm4ga3NtX2RlbF92bWFzKG1tKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3OTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS1NNIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duLiBUbyBmdXp6IEtTTSBlZmZlY3RpdmVseSwgSSBuZWVkIHRvIGZvY3VzIG9uIHNwZWNpZmljIGVudHJ5IHBvaW50cyBhbmQgZXhlY3V0aW9uIHBhdGhzLiBNeSBpbml0aWFsIHRhcmdldHMgYXJlIHRoZSBzeXNjYWxsIGVudHJ5IHBvaW50cyBmb3IgYGtzbV9tYWR2aXNlYCwgYGtzbV9lbmFibGVfbWVyZ2VfYW55YCwgYGtzbV9kaXNhYmxlX21lcmdlX2FueWAsIGFuZCBga3NtX2Rpc2FibGVgLiBUaGVzZSBhcmUgbXkgcHJpbWFyeSBmb2N1cyBzeW1ib2xzLgoKSSBrbm93IHRoZSBidWcgaXMgd2l0aGluIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAuIEl0JiMzOTtzIGNhbGxlZCBieSBga3NtX2RvX3NjYW5gLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBga3NtX3NjYW5fdGhyZWFkYCwgdGhlIGJhY2tncm91bmQga2VybmVsIHRocmVhZCByZXNwb25zaWJsZSBmb3IgS1NNIG9wZXJhdGlvbi4gVGhlIGNyaXRpY2FsIHRyaWdnZXIgY29uZGl0aW9uIHNlZW1zIHRvIGJlIGBrc21fdGVzdF9leGl0KG1tKWAgZXZhbHVhdGluZyB0byB0cnVlLiBUaGlzIGluZGljYXRlcyB0aGUgcHJvY2VzcyBpcyBleGl0aW5nLgoKVGhlcmVmb3JlLCBteSBzdHJhdGVneSBpcyBjbGVhcjogSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIGZ1enppbmcgYGtzbV9tYWR2aXNlYCBpbiBjb25qdW5jdGlvbiB3aXRoIHByb2Nlc3MgZXhpdCBzY2VuYXJpb3MuIFNpbmNlIGBrc21fc2Nhbl90aHJlYWRgIHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgYW5kIGlzbiYjMzk7dCBkaXJlY3RseSBleHBvc2VkIGFzIGEgc3lzY2FsbCwgSSYjMzk7bGwgc3RpbGwgaW5jbHVkZSBpdCBhbmQgYWxzbyBpbmNsdWRlIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgYXMgYW5vdGhlciBmb2N1cyBzeW1ib2wsIGdpdmVuIHRoYXQgaXQmIzM5O3MgYSBsYXJnZSwgbm9uLWlubGluZWQgZnVuY3Rpb24gYW5kIGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBga3NtX3Rlc3RfZXhpdGAgYmVoYXZlcyB1bmRlciB2YXJpb3VzIGNvbmRpdGlvbnMgdG8gZmluZS10dW5lIG15IGZ1enppbmcgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tzbV90ZXN0X2V4aXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9rc20uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9rc20uYz01OTA9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc3RhYmxlX25vZGUoc3RydWN0IGtzbV9zdGFibGVfbm9kZSAqc3RhYmxlX25vZGUpXG4tLVxubW0va3NtLmMtNjAxLSAqIGEgc3BlY2lhbCBmbGFnOiB0aGV5IGNhbiBqdXN0IGJhY2sgb3V0IGFzIHNvb24gYXMgbW1fdXNlcnMgZ29lcyB0byB6ZXJvLlxubW0va3NtLmM6NjAyOiAqIGtzbV90ZXN0X2V4aXQoKSBpcyB1c2VkIHRocm91Z2hvdXQgdG8gbWFrZSB0aGlzIHRlc3QgZm9yIGV4aXQ6IGluIHNvbWVcbm1tL2tzbS5jLTYwMy0gKiBwbGFjZXMgZm9yIGNvcnJlY3RuZXNzLCBpbiBzb21lIHBsYWNlcyBqdXN0IHRvIGF2b2lkIHVubmVjZXNzYXJ5IHdvcmsuXG5tbS9rc20uYy02MDQtICovXG5tbS9rc20uYzo2MDU6c3RhdGljIGlubGluZSBib29sIGtzbV90ZXN0X2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS9rc20uYy02MDYte1xuLS1cbm1tL2tzbS5jPTYxMD1zdGF0aWMgaW50IGJyZWFrX2tzbV9wbWRfZW50cnkocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0va3NtLmMtNjE4LVxubW0va3NtLmM6NjE5Olx0aWYgKGtzbV90ZXN0X2V4aXQod2Fsay1cdTAwM2VtbSkpXG5tbS9rc20uYy02MjAtXHRcdHJldHVybiAwO1xuLS1cbm1tL2tzbS5jPTc2Nz1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX21lcmdlYWJsZV92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0va3NtLmMtNzcwLVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG5tbS9rc20uYzo3NzE6XHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpXG5tbS9rc20uYy03NzItXHRcdHJldHVybiBOVUxMO1xuLS1cbm1tL2tzbS5jPTExOTU9c3RhdGljIGludCB1bm1lcmdlX2FuZF9yZW1vdmVfYWxsX3JtYXBfaXRlbXModm9pZClcbi0tXG5tbS9rc20uYy0xMjE5LVx0XHQgKi9cbm1tL2tzbS5jOjEyMjA6XHRcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcbm1tL2tzbS5jLTEyMjEtXHRcdFx0Z290byBtbV9leGl0aW5nO1xuLS1cbm1tL2tzbS5jLTEyMzgtXHRcdGtzbV9zY2FuLm1tX3Nsb3QgPSBtbV9zbG90X2VudHJ5KHNsb3QsIHN0cnVjdCBrc21fbW1fc2xvdCwgc2xvdCk7XG5tbS9rc20uYzoxMjM5Olx0XHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpIHtcbm1tL2tzbS5jLTEyNDAtXHRcdFx0aGFzaF9kZWwoXHUwMDI2bW1fc2xvdC1cdTAwM2VzbG90Lmhhc2gpO1xuLS1cbm1tL2tzbS5jPTI0OTQ9c3RhdGljIGludCBrc21fbmV4dF9wYWdlX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9rc20uYy0yNTA1LVxubW0va3NtLmM6MjUwNjpcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcbm1tL2tzbS5jLTI1MDctXHRcdHJldHVybiAwO1xuLS1cbm1tL2tzbS5jPTI1Nzc9c3RhdGljIHN0cnVjdCBrc21fcm1hcF9pdGVtICpzY2FuX2dldF9uZXh0X3JtYXBfaXRlbShzdHJ1Y3QgcGFnZSAqKnBhZ2UpXG4tLVxubW0va3NtLmMtMjY1MS1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbm1tL2tzbS5jOjI2NTI6XHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpXG5tbS9rc20uYy0yNjUzLVx0XHRnb3RvIG5vX3ZtYXM7XG4tLVxubW0va3NtLmMtMjY2Ny1cbm1tL2tzbS5jOjI2Njg6XHRcdFx0aWYgKGtzbV90ZXN0X2V4aXQobW0pKVxubW0va3NtLmMtMjY2OS1cdFx0XHRcdGdvdG8gbm9fdm1hcztcbi0tXG5tbS9rc20uYy0yNzE0LVxubW0va3NtLmM6MjcxNTpcdGlmIChrc21fdGVzdF9leGl0KG1tKSkge1xubW0va3NtLmMtMjcxNi1ub192bWFzOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI5OQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgdGhlIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgRnVuY3Rpb24qKgoKT2theSwgc28gdGhlIGJ1ZyBzZWVtcyB0byBiZSB3aXRoaW4gYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYC4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBpbnRlcm5hbCB0byB0aGUgY29tcGlsYXRpb24gdW5pdC4gR29vZCwgbGVzcyBsaWtlbHkgdG8gYmUgc2hhZG93ZWQuIE5vdywgSSBrbm93IHRoaXMgdGhpbmcgaXMgKmJpZyogYW5kIGRlZmluaXRlbHkgbm90IGlubGluZWQuIFRoYXQmIzM5O3Mga2V5LiBGb3IgY2xhcml0eSwgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAsIGFsb25nIHdpdGggYGtzbV9tYWR2aXNlYCwgYGtzbV9lbmFibGVfbWVyZ2VfYW55YCwgYW5kIGBrc21fZGlzYWJsZV9tZXJnZV9hbnlgIGluIG15IGFuYWx5c2lzLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBvbmUgb2YgdGhlc2Ugc3Vycm91bmRpbmcgZnVuY3Rpb25zIG1heSBob2xkIHRoZSBrZXkgdG8gdGhlIGJ1ZyBvciBpbnRlcmFjdCB3aXRoIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgaW4gYSBwcm9ibGVtYXRpYyB3YXkuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIG91ciBkdWNrcyBpbiBhIHJvdyB3aXRoIHRoZSBjb25maWdzLiBMb29rcyBsaWtlIG9ubHkgYEtTTWAgaXMgZXhwbGljaXRseSBuZWVkZWQuIEJ1dCBob2xkIG9uLi4uIGBLU01gICpkZXBlbmRzKiBvbiBgTU1VYC4gT2theSwgYE1NVWAgaXMgc3RhbmRhcmQsIHNvIHRoYXQgc2hvdWxkIGJlIGNvdmVyZWQgYnkgZGVmYXVsdC4gSnVzdCB0byBiZSBzdXJlLCBsZXQmIzM5O3MgZ2l2ZSB0aGUgS2NvbmZpZyBhIHF1aWNrIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgc3VidGxlIGRlcGVuZGVuY2llcyBJJiMzOTttIG1pc3NpbmcuIENhbiYjMzk7dCBiZSB0b28gY2FyZWZ1bC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtTTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03MzY9Y29uZmlnIE1NVV9OT1RJRklFUlxuLS1cbm1tL0tjb25maWctNzM5LVxubW0vS2NvbmZpZzo3NDA6Y29uZmlnIEtTTVxubW0vS2NvbmZpZy03NDEtXHRib29sIFwmIzM0O0VuYWJsZSBLU00gZm9yIHBhZ2UgbWVyZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgyMwoJCQkJCQkJb3V0cHV0OiAxODYKCQkJCQkJCXRob3VnaHRzOiAzODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS1NNIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEtTTSBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzICYjMzQ7WWVzLCBLU00uJiMzNDsgTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4KCkZpcnN0LCBJIG5lZWQgdG8gc3VtbWFyaXplOiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgYnVnIGluIEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nIChLU00pLiBTcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB3aXRoIGEgYGJyZWFrYCBzdGF0ZW1lbnQgd2l0aGluIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAuIEl0IGFwcGVhcnMgdGhlIGBicmVha2Agd2FzIGV4aXRpbmcgb25seSB0aGUgaW5uZXIgYHdoaWxlYCBsb29wLCBub3QgdGhlIG91dGVyIGBmb3JfZWFjaF92bWFgIGxvb3Agd2hlbiBhIHByb2Nlc3MgaXMgZXhpdGluZyAoaS5lLiwgYGtzbV90ZXN0X2V4aXQobW0pYCBpcyB0cnVlKS4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLCBhbmQgS1NNIGJhY2tncm91bmQgc2Nhbm5pbmcgYWxvbmcgd2l0aCBtYWR2aXNlL3ByY3RsIHN5c3RlbSBjYWxscyBjYW4gcmVhY2ggaXQuIFNvLCBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBzeW1ib2xzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZW50cnkgcG9pbnRzIHRvIGNvbnNpZGVyLiBJJiMzOTt2ZSBnb3QgYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCwgYGtzbV9tYWR2aXNlYCwgYGtzbV9lbmFibGVfbWVyZ2VfYW55YCwgYW5kIGBrc21fZGlzYWJsZV9tZXJnZV9hbnlgIGluIG1pbmQuIFRoZSBtYWluIGNvbmZpZyBiZWluZyBlbmFibGVkIGlzIGBLU01gLgoKQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgaXMgc3RhdGljLiBIbW0sIHdoYXQmIzM5O3MgdGhlIGJlc3QgYXBwcm9hY2ggaGVyZT8gVGhlIHByb21wdCBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLCBub3QgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEFsdGhvdWdoIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgaXMgc3RhdGljLCBpdCYjMzk7cyBhIGxhcmdlIGZ1bmN0aW9uICgxNTAmIzQzOyBsaW5lcyksIHNvIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVG8gYmUgc2FmZSwgSSYjMzk7bSBpbmNsdWRpbmcgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGBrc21fbWFkdmlzZWAsIGBrc21fZW5hYmxlX21lcmdlX2FueWAsIGFuZCBga3NtX2Rpc2FibGVfbWVyZ2VfYW55YCwgYnV0IGJlY2F1c2UgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgYW5kIGl0JiMzOTtzIG5vdCBpbmxpbmVkLCBJJiMzOTttIGdvaW5nIHRvIGluY2x1ZGUgdGhhdCBvbmUgdG9vLgoKV2FpdCBhIHNlY29uZCwgdGhlcmUmIzM5O3MgYGtzbV9kb19zY2FuYCwgdGhhdCYjMzk7cyB0aGUgbWFpbiB3b3JrZXIgZnVuY3Rpb24uIEkgc2hvdWxkIGFic29sdXRlbHkgaW5jbHVkZSB0aGF0LiBBZGRpbmcgYGtzbV9kb19zY2FuYC4KCkFscmlnaHQsIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGNhcHR1cmUgdGhlIGVzc2VuY2Ugb2YgdGhpcyBwYXRjaC4gTm93LCBsZXQmIzM5O3MganVzdCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY2FuX2dldF9uZXh0X3JtYXBfaXRlbSYjMzQ7LAogICAgJiMzNDtrc21fZG9fc2NhbiYjMzQ7LAogICAgJiMzNDtrc21fbWFkdmlzZSYjMzQ7LAogICAgJiMzNDtrc21fZW5hYmxlX21lcmdlX2FueSYjMzQ7LAogICAgJiMzNDtrc21fZGlzYWJsZV9tZXJnZV9hbnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gS1NNIChLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZykgd2hlcmUgYSBgYnJlYWtgIHN0YXRlbWVudCBpbiBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gIG9ubHkgZXhpdGVkIHRoZSBpbm5lciBgd2hpbGVgIGxvb3AgaW5zdGVhZCBvZiB0aGUgb3V0ZXIgYGZvcl9lYWNoX3ZtYWAgbG9vcCB3aGVuIGEgcHJvY2VzcyBpcyBleGl0aW5nIChga3NtX3Rlc3RfZXhpdChtbSlgIGlzIHRydWUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLU00gYmFja2dyb3VuZCBzY2FubmluZyBhbmQgbWFkdmlzZS9wcmN0bCBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1NNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW0mIzM0OywKICAgICYjMzQ7a3NtX2RvX3NjYW4mIzM0OywKICAgICYjMzQ7a3NtX21hZHZpc2UmIzM0OywKICAgICYjMzQ7a3NtX2VuYWJsZV9tZXJnZV9hbnkmIzM0OywKICAgICYjMzQ7a3NtX2Rpc2FibGVfbWVyZ2VfYW55JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtTTSAoS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcpIHdoZXJlIGEgYGJyZWFrYCBzdGF0ZW1lbnQgaW4gYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCBvbmx5IGV4aXRlZCB0aGUgaW5uZXIgYHdoaWxlYCBsb29wIGluc3RlYWQgb2YgdGhlIG91dGVyIGBmb3JfZWFjaF92bWFgIGxvb3Agd2hlbiBhIHByb2Nlc3MgaXMgZXhpdGluZyAoYGtzbV90ZXN0X2V4aXQobW0pYCBpcyB0cnVlKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgS1NNIGJhY2tncm91bmQgc2Nhbm5pbmcgYW5kIG1hZHZpc2UvcHJjdGwgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NTo1Ni45ODMyMTg2MThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTMyMjEwNjc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY2FuX2dldF9uZXh0X3JtYXBfaXRlbVwiLFxuICAgIFwia3NtX2RvX3NjYW5cIixcbiAgICBcImtzbV9tYWR2aXNlXCIsXG4gICAgXCJrc21fZW5hYmxlX21lcmdlX2FueVwiLFxuICAgIFwia3NtX2Rpc2FibGVfbWVyZ2VfYW55XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gS1NNIChLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZykgd2hlcmUgYSBgYnJlYWtgIHN0YXRlbWVudCBpbiBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gIG9ubHkgZXhpdGVkIHRoZSBpbm5lciBgd2hpbGVgIGxvb3AgaW5zdGVhZCBvZiB0aGUgb3V0ZXIgYGZvcl9lYWNoX3ZtYWAgbG9vcCB3aGVuIGEgcHJvY2VzcyBpcyBleGl0aW5nIChga3NtX3Rlc3RfZXhpdChtbSlgIGlzIHRydWUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLU00gYmFja2dyb3VuZCBzY2FubmluZyBhbmQgbWFkdmlzZS9wcmN0bCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDM6NDU6NTYuOTgzMjI2OTQ4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODk4Mzg3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmM2EzOGU3NWYxNzU3ZjVmZmU2MjE4NmExZTQwNjI0NWRlNmM0ZDU3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDAzOjQ1OjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmNcXG5pbmRleCA3ZDViNzY0NzhmMGI2NS4uNWVkOWRiNjc2YjlmOTIgMTAwNjQ0XFxuLS0tIGEvbW0va3NtLmNcXG4rKysgYi9tbS9rc20uY1xcbkBAIC0yNjY2LDcgKzI2NjYsNyBAQCBzdGF0aWMgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSlcXG4gXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFxuIFxcdFxcdFxcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdFxcdGdvdG8gbm9fdm1hcztcXG4gXFxuIFxcdFxcdFxcdGludCBmb3VuZDtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAzOjQ1OjU3LjU3NDA0MTQyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU4NzMxMjcwOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjYW5fZ2V0X25leHRfcm1hcF9pdGVtXCIsXG4gICAgXCJrc21fZG9fc2NhblwiLFxuICAgIFwia3NtX21hZHZpc2VcIixcbiAgICBcImtzbV9lbmFibGVfbWVyZ2VfYW55XCIsXG4gICAgXCJrc21fZGlzYWJsZV9tZXJnZV9hbnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKSB3aGVyZSBhIGBicmVha2Agc3RhdGVtZW50IGluIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgb25seSBleGl0ZWQgdGhlIGlubmVyIGB3aGlsZWAgbG9vcCBpbnN0ZWFkIG9mIHRoZSBvdXRlciBgZm9yX2VhY2hfdm1hYCBsb29wIHdoZW4gYSBwcm9jZXNzIGlzIGV4aXRpbmcgKGBrc21fdGVzdF9leGl0KG1tKWAgaXMgdHJ1ZSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIEtTTSBiYWNrZ3JvdW5kIHNjYW5uaW5nIGFuZCBtYWR2aXNlL3ByY3RsIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmM2EzOGU3NWYxNzU3ZjVmZmU2MjE4NmExZTQwNjI0NWRlNmM0ZDU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDM6NDU6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jXG5pbmRleCA3ZDViNzY0NzhmMGI2NS4uNWVkOWRiNjc2YjlmOTIgMTAwNjQ0XG4tLS0gYS9tbS9rc20uY1xuKysrIGIvbW0va3NtLmNcbkBAIC0yNjY2LDcgKzI2NjYsNyBAQCBzdGF0aWMgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSlcbiBcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFxuIFx0XHRcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcbi1cdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0Z290byBub192bWFzO1xuIFxuIFx0XHRcdGludCBmb3VuZDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAzOjQ1OjU3LjU3NDA0MzQzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzA1NjgyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1NNIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUga2VybmVsJ3MgS1NNIChLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZykgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0va3NtLmNgLiBJdCdzIGEgcHJldHR5IHRhcmdldGVkIGNoYW5nZTsgdGhleSd2ZSByZXBsYWNlZCBhIGBicmVhaztgIHN0YXRlbWVudCB3aXRoIGEgYGdvdG8gbm9fdm1hcztgIGp1bXAgd2l0aGluIHRoZSBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gIGZ1bmN0aW9uLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcgYSBiaXQsIHdvbmRlcmluZyB3aHkgdGhleSd2ZSBjaG9zZW4gYSBgZ290b2AgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSdsbCB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbiBvZiBgbW0va3NtLmNgLCBwcm9iYWJseSBhcm91bmQgbGluZSAyNjY2LCBnaXZlIG9yIHRha2UuIEkgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgdG8gZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFuZCBmaWd1cmUgb3V0IHdoYXQgdGhleSB3ZXJlIHRyeWluZyB0byBhY2NvbXBsaXNoIGFuZCBpZiB0aGlzIGlzIGEgZ29vZCBzb2x1dGlvbiBmb3IgdGhlIHByb2JsZW0uIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAzOjQ2OjAwLjg0NDYxNDU1N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUxNzcxNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va3NtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va3NtLmM9MjU3Mj1zdGF0aWMgc3RydWN0IG1tX3dhbGtfb3BzIGtzbV9uZXh0X3BhZ2Vfb3BzID0ge1xcbi0tXFxubW0va3NtLmMtMjU3Ni1cXG5tbS9rc20uYzoyNTc3OnN0YXRpYyBzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW0oc3RydWN0IHBhZ2UgKipwYWdlKVxcbm1tL2tzbS5jLTI1Nzgte1xcbi0tXFxubW0va3NtLmM9Mjc4Mz1zdGF0aWMgdm9pZCBrc21fZG9fc2Nhbih1bnNpZ25lZCBpbnQgc2Nhbl9ucGFnZXMpXFxuLS1cXG5tbS9rc20uYy0yNzg5LVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbm1tL2tzbS5jOjI3OTA6XFx0XFx0cm1hcF9pdGVtID0gc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW0oXFx1MDAyNnBhZ2UpO1xcbm1tL2tzbS5jLTI3OTEtXFx0XFx0aWYgKCFybWFwX2l0ZW0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAzOjQ2OjAwLjk0OTc5ODU2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjk4MjgxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IG9mIHRoZSBwcm92aWRlZCB0ZXh0LCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGluZ3MuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1tL2tzbS5jYCwgc3BlY2lmaWNhbGx5IGZyb20gbGluZSAyNjUwIHRvIDI3MDAuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBjcml0aWNhbCBjb2RlIGluIHRoYXQgcmFuZ2Ug4oCTIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSBjb3JlIGZ1bmN0aW9uIG9yIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZyAoS1NNKSBpbXBsZW1lbnRhdGlvbi4gR2l2ZW4gdGhlIGxpbmUgbnVtYmVycywgaXQncyBsaWtlbHkgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgYWxnb3JpdGhtLCBhIGRhdGEgc3RydWN0dXJlIGFjY2Vzcywgb3IgYSBwYXJ0aWN1bGFyIHN0YWdlIGluIHRoZSBtZXJnaW5nIHByb2Nlc3MuIE15IGludHVpdGlvbiBzYXlzIHRoaXMgbGlrZWx5IGludm9sdmVzIGhhbmRsaW5nIHRoZSBtZXJnaW5nIG9mIHBhZ2VzLCBwYWdlIHNjYW5uaW5nLCBvciBtYXliZSBldmVuIGV2aWN0aW9uIHBvbGljaWVzIHdpdGhpbiBLU00uIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVhbHMgd2l0aCBjb250ZW50aW9uIGFuZCBzeW5jaHJvbml6YXRpb24gaWYgdGhlIGNvZGUgZGVsdmVzIGludG8gdGhlIHBhZ2UgdGFibGVzLiBMaW5lIDI2NTAgdG8gMjcwMCBzaG91bGQgZXhwb3NlIGVub3VnaCBsb2dpYyB0byBsZXQgbWUgYW5hbHl6ZSB0aGUgc3BlY2lmaWMgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjowMy45Nzk2Mjk2ODlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va3NtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY1MDpcXHRcXG4yNjUxOlxcdFxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4yNjUyOlxcdFxcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcXG4yNjUzOlxcdFxcdFxcdGdvdG8gbm9fdm1hcztcXG4yNjU0OlxcdFxcbjI2NTU6XFx0XFx0Zm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7XFxuMjY1NjpcXHRcXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTUVSR0VBQkxFKSlcXG4yNjU3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2NTg6XFx0XFx0XFx0aWYgKGtzbV9zY2FuLmFkZHJlc3MgXFx1MDAzYyB2bWEtXFx1MDAzZXZtX3N0YXJ0KVxcbjI2NTk6XFx0XFx0XFx0XFx0a3NtX3NjYW4uYWRkcmVzcyA9IHZtYS1cXHUwMDNldm1fc3RhcnQ7XFxuMjY2MDpcXHRcXHRcXHRpZiAoIXZtYS1cXHUwMDNlYW5vbl92bWEpXFxuMjY2MTpcXHRcXHRcXHRcXHRrc21fc2Nhbi5hZGRyZXNzID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxuMjY2MjpcXHRcXG4yNjYzOlxcdFxcdFxcdHdoaWxlIChrc21fc2Nhbi5hZGRyZXNzIFxcdTAwM2Mgdm1hLVxcdTAwM2V2bV9lbmQpIHtcXG4yNjY0OlxcdFxcdFxcdFxcdHN0cnVjdCBrc21fbmV4dF9wYWdlX2FyZyBrc21fbmV4dF9wYWdlX2FyZztcXG4yNjY1OlxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICp0bXBfcGFnZSA9IE5VTEw7XFxuMjY2NjpcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjI2Njc6XFx0XFxuMjY2ODpcXHRcXHRcXHRcXHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpXFxuMjY2OTpcXHRcXHRcXHRcXHRcXHRnb3RvIG5vX3ZtYXM7XFxuMjY3MDpcXHRcXG4yNjcxOlxcdFxcdFxcdFxcdGludCBmb3VuZDtcXG4yNjcyOlxcdFxcbjI2NzM6XFx0XFx0XFx0XFx0Zm91bmQgPSB3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwga3NtX3NjYW4uYWRkcmVzcyxcXG4yNjc0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB2bWEtXFx1MDAzZXZtX2VuZCxcXG4yNjc1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2a3NtX25leHRfcGFnZV9vcHMsXFxuMjY3NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmtzbV9uZXh0X3BhZ2VfYXJnKTtcXG4yNjc3OlxcdFxcbjI2Nzg6XFx0XFx0XFx0XFx0aWYgKGZvdW5kIFxcdTAwM2UgMCkge1xcbjI2Nzk6XFx0XFx0XFx0XFx0XFx0Zm9saW8gPSBrc21fbmV4dF9wYWdlX2FyZy5mb2xpbztcXG4yNjgwOlxcdFxcdFxcdFxcdFxcdHRtcF9wYWdlID0ga3NtX25leHRfcGFnZV9hcmcucGFnZTtcXG4yNjgxOlxcdFxcdFxcdFxcdFxcdGtzbV9zY2FuLmFkZHJlc3MgPSBrc21fbmV4dF9wYWdlX2FyZy5hZGRyO1xcbjI2ODI6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4yNjgzOlxcdFxcdFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRShmb3VuZCBcXHUwMDNjIDApO1xcbjI2ODQ6XFx0XFx0XFx0XFx0XFx0a3NtX3NjYW4uYWRkcmVzcyA9IHZtYS1cXHUwMDNldm1fZW5kIC0gUEFHRV9TSVpFO1xcbjI2ODU6XFx0XFx0XFx0XFx0fVxcbjI2ODY6XFx0XFxuMjY4NzpcXHRcXHRcXHRcXHRpZiAodG1wX3BhZ2UpIHtcXG4yNjg4OlxcdFxcdFxcdFxcdFxcdGZsdXNoX2Fub25fcGFnZSh2bWEsIHRtcF9wYWdlLCBrc21fc2Nhbi5hZGRyZXNzKTtcXG4yNjg5OlxcdFxcdFxcdFxcdFxcdGZsdXNoX2RjYWNoZV9wYWdlKHRtcF9wYWdlKTtcXG4yNjkwOlxcdFxcdFxcdFxcdFxcdHJtYXBfaXRlbSA9IGdldF9uZXh0X3JtYXBfaXRlbShtbV9zbG90LFxcbjI2OTE6XFx0XFx0XFx0XFx0XFx0XFx0a3NtX3NjYW4ucm1hcF9saXN0LCBrc21fc2Nhbi5hZGRyZXNzKTtcXG4yNjkyOlxcdFxcdFxcdFxcdFxcdGlmIChybWFwX2l0ZW0pIHtcXG4yNjkzOlxcdFxcdFxcdFxcdFxcdFxcdGtzbV9zY2FuLnJtYXBfbGlzdCA9XFxuMjY5NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cm1hcF9pdGVtLVxcdTAwM2VybWFwX2xpc3Q7XFxuMjY5NTpcXHRcXG4yNjk2OlxcdFxcdFxcdFxcdFxcdFxcdGlmIChzaG91bGRfc2tpcF9ybWFwX2l0ZW0oZm9saW8sIHJtYXBfaXRlbSkpIHtcXG4yNjk3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuMjY5ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHRfcGFnZTtcXG4yNjk5OlxcdFxcdFxcdFxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDM6NDY6MDMuOTc5ODY2MDM5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMzE5ODAzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTdWJ0bGUgS1NNIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGNoYW5naW5nIGEgYGJyZWFrO2Agc3RhdGVtZW50IHRvIGEgYGdvdG8gbm9fdm1hcztgIGluIHRoZSBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiSG1tLCBpbnRlcmVzdGluZy4gV2h5IHRoaXMgY2hhbmdlP1wiIFRoZW4gSSBzZWUgdGhlIGV4cGxhbmF0aW9uOiBpdCBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgYGJyZWFrYCB3YXMgb25seSBleGl0aW5nIHRoZSBpbm5lciBgd2hpbGVgIGxvb3AsIGJ1dCBub3QgdGhlIGVuY29tcGFzc2luZyBgZm9yX2VhY2hfdm1hYCBsb29wLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gSWYgYGtzbV90ZXN0X2V4aXQobW0pYCBldmFsdWF0ZXMgdG8gdHJ1ZSB3aXRoaW4gdGhhdCBuZXN0ZWQgc3RydWN0dXJlLCB0aGUgaW5jb21wbGV0ZSBsb29wIHRlcm1pbmF0aW9uIGNvdWxkIGNyZWF0ZSBzb21lIHJlYWwgaGVhZGFjaGVzIGRvd25zdHJlYW0uIEl0J3MgYSBjbGFzc2ljIGV4YW1wbGUgb2YgYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiBsb29wIGNvbnRyb2wuIEkgaW5zdGFudGx5IHNlZSB0aGUgaXNzdWU7IHRoYXQgYGJyZWFrYCB3YXNuJ3QgYWN0dWFsbHkgYnJlYWtpbmcgYWxsIHRoZSB3YXkgb3V0LlxuXG5XYWl0IGEgc2Vjb25kLiBVc2luZyBgZ290b2AgaXMgYSBiaXQuLi4gdW5jb252ZW50aW9uYWwgdGhlc2UgZGF5cywgZXZlbiBpbiBrZXJuZWwgY29kZSwgc28gaXQncyB3b3J0aCB0YWtpbmcgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlIHBlcmZlY3RseS4gU28sIHdoZXJlIGV4YWN0bHkgaXMgdGhpcyBgbm9fdm1hc2AgbGFiZWwgZGVmaW5lZD8gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGUgZnVuY3Rpb24gdG8gaWRlbnRpZnkgdGhhdCB0YXJnZXQuIEknbSBnb2luZyB0byBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgZ290b2AgaXMgYmVpbmcgdXNlZCBwcm9wZXJseSwgdGhhdCBpdCBkb2Vzbid0IGNyZWF0ZSBhbnkgY29tcGxleCBvciBwcm9ibGVtYXRpYyBjb250cm9sIGZsb3cuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTk4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDM6NDY6MDguMTkzMDY2MzUzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUxNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2tzbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3MDA6XFx0XFxuMjcwMTpcXHRcXHRcXHRcXHRcXHRcXHRrc21fc2Nhbi5hZGRyZXNzICs9IFBBR0VfU0laRTtcXG4yNzAyOlxcdFxcdFxcdFxcdFxcdFxcdCpwYWdlID0gdG1wX3BhZ2U7XFxuMjcwMzpcXHRcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjI3MDQ6XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4yNzA1OlxcdFxcdFxcdFxcdFxcdH1cXG4yNzA2OlxcdFxcdFxcdFxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbjI3MDc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJtYXBfaXRlbTtcXG4yNzA4OlxcdFxcdFxcdFxcdH1cXG4yNzA5OlxcdG5leHRfcGFnZTpcXG4yNzEwOlxcdFxcdFxcdFxcdGtzbV9zY2FuLmFkZHJlc3MgKz0gUEFHRV9TSVpFO1xcbjI3MTE6XFx0XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjcxMjpcXHRcXHRcXHR9XFxuMjcxMzpcXHRcXHR9XFxuMjcxNDpcXHRcXG4yNzE1OlxcdFxcdGlmIChrc21fdGVzdF9leGl0KG1tKSkge1xcbjI3MTY6XFx0bm9fdm1hczpcXG4yNzE3OlxcdFxcdFxcdGtzbV9zY2FuLmFkZHJlc3MgPSAwO1xcbjI3MTg6XFx0XFx0XFx0a3NtX3NjYW4ucm1hcF9saXN0ID0gXFx1MDAyNm1tX3Nsb3QtXFx1MDAzZXJtYXBfbGlzdDtcXG4yNzE5OlxcdFxcdH1cXG4yNzIwOlxcdFxcdC8qXFxuMjcyMTpcXHRcXHQgKiBOdWtlIGFsbCB0aGUgcm1hcF9pdGVtcyB0aGF0IGFyZSBhYm92ZSB0aGlzIGN1cnJlbnQgcm1hcDpcXG4yNzIyOlxcdFxcdCAqIGJlY2F1c2UgdGhlcmUgd2VyZSBubyBWTV9NRVJHRUFCTEUgdm1hcyB3aXRoIHN1Y2ggYWRkcmVzc2VzLlxcbjI3MjM6XFx0XFx0ICovXFxuMjcyNDpcXHRcXHRyZW1vdmVfdHJhaWxpbmdfcm1hcF9pdGVtcyhrc21fc2Nhbi5ybWFwX2xpc3QpO1xcbjI3MjU6XFx0XFxuMjcyNjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmtzbV9tbWxpc3RfbG9jayk7XFxuMjcyNzpcXHRcXHRzbG90ID0gbGlzdF9lbnRyeShtbV9zbG90LVxcdTAwM2VzbG90Lm1tX25vZGUubmV4dCxcXG4yNzI4OlxcdFxcdFxcdFxcdCAgc3RydWN0IG1tX3Nsb3QsIG1tX25vZGUpO1xcbjI3Mjk6XFx0XFx0a3NtX3NjYW4ubW1fc2xvdCA9IG1tX3Nsb3RfZW50cnkoc2xvdCwgc3RydWN0IGtzbV9tbV9zbG90LCBzbG90KTtcXG4yNzMwOlxcdFxcdGlmIChrc21fc2Nhbi5hZGRyZXNzID09IDApIHtcXG4yNzMxOlxcdFxcdFxcdC8qXFxuMjczMjpcXHRcXHRcXHQgKiBXZSd2ZSBjb21wbGV0ZWQgYSBmdWxsIHNjYW4gb2YgYWxsIHZtYXMsIGhvbGRpbmcgbW1hcF9sb2NrXFxuMjczMzpcXHRcXHRcXHQgKiB0aHJvdWdob3V0LCBhbmQgZm91bmQgbm8gVk1fTUVSR0VBQkxFOiBzbyBkbyB0aGUgc2FtZSBhc1xcbjI3MzQ6XFx0XFx0XFx0ICogX19rc21fZXhpdCBkb2VzIHRvIHJlbW92ZSB0aGlzIG1tIGZyb20gYWxsIG91ciBsaXN0cyBub3cuXFxuMjczNTpcXHRcXHRcXHQgKiBUaGlzIGFwcGxpZXMgZWl0aGVyIHdoZW4gY2xlYW5pbmcgdXAgYWZ0ZXIgX19rc21fZXhpdFxcbjI3MzY6XFx0XFx0XFx0ICogKGJ1dCBiZXdhcmU6IHdlIGNhbiByZWFjaCBoZXJlIGV2ZW4gYmVmb3JlIF9fa3NtX2V4aXQpLFxcbjI3Mzc6XFx0XFx0XFx0ICogb3Igd2hlbiBhbGwgVk1fTUVSR0VBQkxFIGFyZWFzIGhhdmUgYmVlbiB1bm1hcHBlZCAoYW5kXFxuMjczODpcXHRcXHRcXHQgKiBtbWFwX2xvY2sgdGhlbiBwcm90ZWN0cyBhZ2FpbnN0IHJhY2Ugd2l0aCBNQURWX01FUkdFQUJMRSkuXFxuMjczOTpcXHRcXHRcXHQgKi9cXG4yNzQwOlxcdFxcdFxcdGhhc2hfZGVsKFxcdTAwMjZtbV9zbG90LVxcdTAwM2VzbG90Lmhhc2gpO1xcbjI3NDE6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNm1tX3Nsb3QtXFx1MDAzZXNsb3QubW1fbm9kZSk7XFxuMjc0MjpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2a3NtX21tbGlzdF9sb2NrKTtcXG4yNzQzOlxcdFxcbjI3NDQ6XFx0XFx0XFx0bW1fc2xvdF9mcmVlKG1tX3Nsb3RfY2FjaGUsIG1tX3Nsb3QpO1xcbjI3NDU6XFx0XFx0XFx0LypcXG4yNzQ2OlxcdFxcdFxcdCAqIE9ubHkgY2xlYXIgTU1GX1ZNX01FUkdFQUJMRS4gV2UgbXVzdCBub3QgY2xlYXJcXG4yNzQ3OlxcdFxcdFxcdCAqIE1NRl9WTV9NRVJHRV9BTlksIGJlY2F1c2UgZm9yIHRob3NlIE1NRl9WTV9NRVJHRV9BTlkgcHJvY2VzcyxcXG4yNzQ4OlxcdFxcdFxcdCAqIHBlcmhhcHMgdGhlaXIgbW1fc3RydWN0IGhhcyBqdXN0IGJlZW4gYWRkZWQgdG8ga3NtX21tX3Nsb3RcXG4yNzQ5OlxcdFxcdFxcdCAqIGxpc3QsIGFuZCBpdHMgcHJvY2VzcyBoYXMgbm90IHlldCBvZmZpY2lhbGx5IHN0YXJ0ZWQgcnVubmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjowOC4xOTM0MjA4MzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDM5ODcxOTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtTTSBGdW5jdGlvbmFsIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgY2hhbmdlIGluIEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nLCBzcGVjaWZpY2FsbHkgYSBidWcgZml4LiBTZWVtcyBsaWtlIGEgYGJyZWFrYCB3YXMgaW1wcm9wZXJseSBleGl0aW5nIGEgYHdoaWxlYCBsb29wIHdpdGhpbiBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gLCBidXQgdGhlIGBmb3JfZWFjaF92bWFgIGxvb3Agd291bGQgY29udGludWUuIFRoaXMgY291bGQgYmUgYSBwcm9ibGVtLCBlc3BlY2lhbGx5IGlmIHRoZSBwcm9jZXNzIGlzIGV4aXRpbmcg4oCTIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBzY2VuYXJpbyBwb3RlbnRpYWxseS4gVGhlIGZ1bmN0aW9uIGl0c2VsZiBpcyBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gLCBhbmQgaXQncyBjYWxsZWQgZnJvbSBga3NtX2RvX3NjYW5gLiBEZWZpbml0ZWx5IGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSwgc28gaXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gdGFyZ2V0IGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgZGlyZWN0bHksIGJ1dCBpdCBsb29rcyBsaWtlIHRoYXQgb25lJ3Mgc3RhdGljLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2suLi4gWXVwLCBpdCdzIGBzdGF0aWMgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSlgLiBEYW1uLlxuXG5SaWdodCwgdGhlIHByb21wdCBzYXlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIE9rYXksIHNvIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGxvb2sgdXBzdHJlYW0uIGBrc21fZG9fc2NhbmAgaXMgKmFsc28qIHN0YXRpYy4gVGhpcyBpc24ndCBpZGVhbC4gTGV0J3Mgc2VlIHdobyBpcyAqY2FsbGluZyogYGtzbV9kb19zY2FuYCBhbmQgd29yayBiYWNrIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4ODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjoxMy4yMzMyOTU1OTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODg0NjAxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrc21fZG9fc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9rc20uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rc20uYz02OTI9c3RhdGljIGludCBicmVha19rc20oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2tzbS5jLTcyOS1cXHQgKiBUaGF0J3MgYSBwaXR5OiB3ZSBtaWdodCB0aGVyZWZvcmUgaGF2ZSBtb3JlIGtlcm5lbCBwYWdlcyBhbGxvY2F0ZWRcXG5tbS9rc20uYzo3MzA6XFx0ICogdGhhbiB3ZSdyZSBjb3VudGluZyBhcyBub2RlcyBpbiB0aGUgc3RhYmxlIHRyZWU7IGJ1dCBrc21fZG9fc2Nhblxcbm1tL2tzbS5jLTczMS1cXHQgKiB3aWxsIHJldHJ5IHRvIGJyZWFrX2NvdyBvbiBlYWNoIHBhc3MsIHNvIHNob3VsZCByZWNvdmVyIHRoZSBwYWdlXFxuLS1cXG5tbS9rc20uYz0yNTc3PXN0YXRpYyBzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW0oc3RydWN0IHBhZ2UgKipwYWdlKVxcbi0tXFxubW0va3NtLmMtMjYwMS1cXHRcXHQgKiBMVFAncyBLU00gdGVzdCBmcm9tIHN1Y2NlZWRpbmcgZGV0ZXJtaW5pc3RpY2FsbHk7IHNvIGRyYWluXFxubW0va3NtLmM6MjYwMjpcXHRcXHQgKiB0aGVtIGhlcmUgKGhlcmUgcmF0aGVyIHRoYW4gb24gZW50cnkgdG8ga3NtX2RvX3NjYW4oKSxcXG5tbS9rc20uYy0yNjAzLVxcdFxcdCAqIHNvIHdlIGRvbid0IElQSSB0b28gb2Z0ZW4gd2hlbiBwYWdlc190b19zY2FuIGlzIHNldCBsb3cpLlxcbi0tXFxubW0va3NtLmMtMjc3OS0vKipcXG5tbS9rc20uYzoyNzgwOiAqIGtzbV9kb19zY2FuICAtIHRoZSBrc20gc2Nhbm5lciBtYWluIHdvcmtlciBmdW5jdGlvbi5cXG5tbS9rc20uYy0yNzgxLSAqIEBzY2FuX25wYWdlczogIG51bWJlciBvZiBwYWdlcyB3ZSB3YW50IHRvIHNjYW4gYmVmb3JlIHdlIHJldHVybi5cXG5tbS9rc20uYy0yNzgyLSAqL1xcbm1tL2tzbS5jOjI3ODM6c3RhdGljIHZvaWQga3NtX2RvX3NjYW4odW5zaWduZWQgaW50IHNjYW5fbnBhZ2VzKVxcbm1tL2tzbS5jLTI3ODQte1xcbi0tXFxubW0va3NtLmM9MjgwND1zdGF0aWMgaW50IGtzbV9zY2FuX3RocmVhZCh2b2lkICpub3RoaW5nKVxcbi0tXFxubW0va3NtLmMtMjgxNC1cXHRcXHRpZiAoa3NtZF9zaG91bGRfcnVuKCkpXFxubW0va3NtLmM6MjgxNTpcXHRcXHRcXHRrc21fZG9fc2Nhbihrc21fdGhyZWFkX3BhZ2VzX3RvX3NjYW4pO1xcbm1tL2tzbS5jLTI4MTYtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrc21fdGhyZWFkX211dGV4KTtcXG4tLVxcbm1tL2tzbS5jPTMzNzU9c3RhdGljIGludCBrc21fbWVtb3J5X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZixcXG4tLVxcbm1tL2tzbS5jLTMzODItXFx0XFx0LypcXG5tbS9rc20uYzozMzgzOlxcdFxcdCAqIFByZXZlbnQga3NtX2RvX3NjYW4oKSwgdW5tZXJnZV9hbmRfcmVtb3ZlX2FsbF9ybWFwX2l0ZW1zKClcXG5tbS9rc20uYy0zMzg0LVxcdFxcdCAqIGFuZCByZW1vdmVfYWxsX3N0YWJsZV9ub2RlcygpIHdoaWxlIG1lbW9yeSBpcyBnb2luZyBvZmZsaW5lOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjoxMy40ODIxNDk0MjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3NzUxOTY3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqS1NNIFRocmVhZCBDb251bmRydW1zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGBrc21fc2Nhbl90aHJlYWRgLCB0aGUga2VybmVsIHRocmVhZCByZXNwb25zaWJsZSBmb3IgS2V5ZWQgSGFzaCBNZW1vcnkgKEtTTSkuIEJ1dCBhIHF1ZXN0aW9uIGtlZXBzIGJ1YmJsaW5nIHVwOiBjYW4gS1NNIGFjdHVhbGx5IGJlICp0cmlnZ2VyZWQqIGRpcmVjdGx5IGZyb20gc3lzY2FsbHM/IFNlZW1zIHN0cmFuZ2UsIGRvZXNuJ3QgaXQ/IFRoZW4gSSByZW1lbWJlcjogeWVzLCBvZiBjb3Vyc2UhIGBtYWR2aXNlKE1BRFZfTUVSR0VBQkxFKWAgaXMgdGhlIGtleS4gVGhhdCBzcGVjaWZpYyBgbWFkdmlzZWAgZmxhZyBpcyBob3cgeW91IGVuYWJsZSBLU00gb24gYSBWaXJ0dWFsIE1lbW9yeSBBcmVhIChWTUEpLiBBbmQgdGhlcmUncyBhbHNvIGBwcmN0bChQUl9TRVRfTUVNT1JZX01FUkdFKWAsIHdoaWNoIGVuYWJsZXMgaXQgYXQgdGhlICpwcm9jZXNzKiBsZXZlbC4gU28sIHRvIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiwgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyBpbiBgbWFkdmlzZWAsIG9yIHBlcmhhcHMgbW9yZSBzcGVjaWZpY2FsbHkgYGtzbV9tYWR2aXNlYC4gSSBuZWVkIHRvIHJldmlldyB0aG9zZSBmdW5jdGlvbnMgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uIHdpdGggc3lzY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNzMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjoxNy4yNTk2NzI0NDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODYwMzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrc21fbWFkdmlzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9rc20uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rc20uYz0yOTY3PWludCBrc21fZGlzYWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL2tzbS5jLTI5NzctXFxubW0va3NtLmM6Mjk3ODppbnQga3NtX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0va3NtLmMtMjk3OS1cXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgaW50IGFkdmljZSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpXFxuLS1cXG5tbS9rc20uYy0zMDE1LX1cXG5tbS9rc20uYzozMDE2OkVYUE9SVF9TWU1CT0xfR1BMKGtzbV9tYWR2aXNlKTtcXG5tbS9rc20uYy0zMDE3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjoxNy40MTgyODMzMDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4NzI3MzgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OlxuXG4qKktTTSBEZWVwZXIgRGl2ZSoqXG5cblJpZ2h0LCBzbyBga3NtX21hZHZpc2VgIGlzIHRoZSBnYXRld2F5IGZvciBgTUFEVl9NRVJHRUFCTEVgLCB3aGljaCBpcyBleGFjdGx5IGFzIGl0IHNob3VsZCBiZS4gVGhlIGNvbm5lY3Rpb24gbWFrZXMgcGVyZmVjdCBzZW5zZS4gT2YgY291cnNlLCBga3NtX3NjYW5fdGhyZWFkYCBpcyB0aGUgYmFja2dyb3VuZCBwcm9jZXNzIGRyaXZpbmcgdGhlIEtTTSBvcGVyYXRpb25zLiBOb3cgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3MgZGlnIGludG8gS2NvbmZpZyB0byBjb25maXJtIHRoZSBleGFjdCBzZXR0aW5ncy4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgZW5hYmxlZCwgYW5kIHRoZSBjb25maWd1cmF0aW9uIGlzIHJpZ2h0IGZvciB0aGlzIHVzZSBjYXNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIHNwZWNpZmljcyBiZWZvcmUgZ29pbmcgYW55IGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU5MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAzOjQ2OjIwLjQwNTU2MTQzNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyNjMxNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLU01cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTczNj1jb25maWcgTU1VX05PVElGSUVSXFxuLS1cXG5tbS9LY29uZmlnLTczOS1cXG5tbS9LY29uZmlnOjc0MDpjb25maWcgS1NNXFxubW0vS2NvbmZpZy03NDEtXFx0Ym9vbCBcXFwiRW5hYmxlIEtTTSBmb3IgcGFnZSBtZXJnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjoyMC41MzgxOTg1ODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3NDg5NjUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqS1NNIENvbmZpZ3VyYXRpb24gUmV2aWV3KipcblxuQWxyaWdodCwgdGhlIGtleSBjb25maWd1cmF0aW9uIGlkZW50aWZpZXIgaGVyZSBpcyBgS1NNYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgYXNzZXNzIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggaXQuIEknbSB0aGlua2luZywgXCJPa2F5LCB3ZSdyZSBkZWFsaW5nIHdpdGggS1NNLiBXaGF0IGVsc2UgaXMgZW50YW5nbGVkIHdpdGggdGhpcz8gQXJlIHRoZXJlIGFueSB1cHN0cmVhbSBvciBkb3duc3RyZWFtIHNlcnZpY2VzLCByZWxhdGVkIGxpYnJhcmllcywgb3IgZXh0ZXJuYWwgY29tcG9uZW50cyB0aGF0IHJlbHkgb24gb3IgYXJlIGFmZmVjdGVkIGJ5IHRoaXM/XCIgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhvc2UgY29ubmVjdGlvbnMgdG8gYXZvaWQgbWlzc2luZyBzb21ldGhpbmcgY3J1Y2lhbC4gQSBkZXBlbmRlbmN5IG1hcCwgb3IgYXQgbGVhc3QgYSBtZW50YWwgY2hlY2tsaXN0IG9mIHBvdGVudGlhbCBsaW5rYWdlcywgaXMgZXNzZW50aWFsIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSBgS1NNYCBjb25maWd1cmF0aW9uIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2Ygd2hhdCBgS1NNYCBpbmZsdWVuY2VzIGlzIHRoZSB2ZXJ5IGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4ODMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjoyMy40MTMwOTgyNzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzQwOlxcdGNvbmZpZyBLU01cXG4gNzQxOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBLU00gZm9yIHBhZ2UgbWVyZ2luZ1xcXCJcXG4gNzQyOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuIDc0MzpcXHRcXHRzZWxlY3QgWFhIQVNIXFxuIDc0NDpcXHRcXHRoZWxwXFxuIDc0NTpcXHRcXHQgIEVuYWJsZSBLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZzogS1NNIHBlcmlvZGljYWxseSBzY2FucyB0aG9zZSBhcmVhc1xcbiA3NDY6XFx0XFx0ICBvZiBhbiBhcHBsaWNhdGlvbidzIGFkZHJlc3Mgc3BhY2UgdGhhdCBhbiBhcHAgaGFzIGFkdmlzZWQgbWF5IGJlXFxuIDc0NzpcXHRcXHQgIG1lcmdlYWJsZS4gIFdoZW4gaXQgZmluZHMgcGFnZXMgb2YgaWRlbnRpY2FsIGNvbnRlbnQsIGl0IHJlcGxhY2VzXFxuIDc0ODpcXHRcXHQgIHRoZSBtYW55IGluc3RhbmNlcyBieSBhIHNpbmdsZSBwYWdlIHdpdGggdGhhdCBjb250ZW50LCBzb1xcbiA3NDk6XFx0XFx0ICBzYXZpbmcgbWVtb3J5IHVudGlsIG9uZSBvciBhbm90aGVyIGFwcCBuZWVkcyB0byBtb2RpZnkgdGhlIGNvbnRlbnQuXFxuIDc1MDpcXHRcXHQgIFJlY29tbWVuZGVkIGZvciB1c2Ugd2l0aCBLVk0sIG9yIHdpdGggb3RoZXIgZHVwbGljYXRpdmUgYXBwbGljYXRpb25zLlxcbiA3NTE6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9tbS9rc20ucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uOiBLU00gaXMgaW5hY3RpdmVcXG4gNzUyOlxcdFxcdCAgdW50aWwgYSBwcm9ncmFtIGhhcyBtYWR2aXNlZCB0aGF0IGFuIGFyZWEgaXMgTUFEVl9NRVJHRUFCTEUsIGFuZFxcbiA3NTM6XFx0XFx0ICByb290IGhhcyBzZXQgL3N5cy9rZXJuZWwvbW0va3NtL3J1biB0byAxIChpZiBDT05GSUdfU1lTRlMgaXMgc2V0KS5cXG4gNzU0OlxcdFxcbiA3NTU6XFx0Y29uZmlnIERFRkFVTFRfTU1BUF9NSU5fQUREUlxcbiA3NTY6XFx0XFx0aW50IFxcXCJMb3cgYWRkcmVzcyBzcGFjZSB0byBwcm90ZWN0IGZyb20gdXNlciBhbGxvY2F0aW9uXFxcIlxcbiA3NTc6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gNzU4OlxcdFxcdGRlZmF1bHQgNDA5NlxcbiA3NTk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjoyMy40MTMzMDQ0MzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5MjE1MzM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtTTSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgS1NNIGltcGxlbWVudGF0aW9uLiBUaGUgY29uZmlnIGlzIHNldCB0byBgS1NNYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZm9jdXMgb24gdGhlIGBrc21fbWFkdmlzZWAgYW5kIGBrc21fc2Nhbl90aHJlYWRgIGZ1bmN0aW9ucy4gSG1tLCB3YWl0IGEgbWludXRlLCBga3NtX3NjYW5fdGhyZWFkYCBpcyBhIGt0aHJlYWQsIHNvIGl0J3Mgbm90IGdvaW5nIHRvIGJlIGEgc3lzY2FsbCBlbnRyeSBwb2ludCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyIGlmIEknbSB0aGlua2luZyBhYm91dCB0cmFjaW5nLiBCdXQsIGBrc21fbWFkdmlzZWAgZGVmaW5pdGVseSBpcy4gVGhhdCdzIGEga2V5IHN0YXJ0aW5nIHBvaW50LlxuXG5JIGFsc28gc2VlIGBrc21fZG9fc2NhbmAgaXMgcHJlc2VudCwgYW5kIGl0J3Mgc3RhdGljLCB3aGljaCBjb3VsZCBpbmRpY2F0ZSBpdCdzIG5vdCBleHBvc2VkIGV4dGVybmFsbHksIHRob3VnaCBpdCBzZWVtcyB0byBiZSB0aGUgbWFpbiBzY2FuIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNjYW5uaW5nIGxvZ2ljIGlzIHRyaWdnZXJlZC5cblxuTm93LCBsZXQncyBsb29rIGF0IGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAuIEl0IGxvb2tzIGxpa2UgYSBjb21wbGV4IGZ1bmN0aW9uLiBJdCdzIHByb2JhYmx5ICpub3QqIGlubGluZWQuIEkgc2hvdWxkIGNoZWNrIHRoZSBjb2RlIGZvciB0aGF0IG9uZSBzcGVjaWZpY2FsbHksIGFuZCBsZXQncyBnbyBhaGVhZCBhbmQgbG9vayBhdCB0aGUgc2l6ZSwganVzdCB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGNvbXBsZXhpdHkuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaW5saW5lZCBmdW5jdGlvbnMgY2FuIG9ic2N1cmUgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDQ2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDM6NDY6MjcuNzA1NDYwNzYzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5Mjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9rc20uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTc3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU3NzpcXHRzdGF0aWMgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSlcXG4yNTc4OlxcdHtcXG4yNTc5OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbjI1ODA6XFx0XFx0c3RydWN0IGtzbV9tbV9zbG90ICptbV9zbG90O1xcbjI1ODE6XFx0XFx0c3RydWN0IG1tX3Nsb3QgKnNsb3Q7XFxuMjU4MjpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4yNTgzOlxcdFxcdHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW07XFxuMjU4NDpcXHRcXHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yIHZtaTtcXG4yNTg1OlxcdFxcdGludCBuaWQ7XFxuMjU4NjpcXHRcXG4yNTg3OlxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZrc21fbW1faGVhZC5zbG90Lm1tX25vZGUpKVxcbjI1ODg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjU4OTpcXHRcXG4yNTkwOlxcdFxcdG1tX3Nsb3QgPSBrc21fc2Nhbi5tbV9zbG90O1xcbjI1OTE6XFx0XFx0aWYgKG1tX3Nsb3QgPT0gXFx1MDAyNmtzbV9tbV9oZWFkKSB7XFxuMjU5MjpcXHRcXHRcXHRhZHZpc29yX3N0YXJ0X3NjYW4oKTtcXG4yNTkzOlxcdFxcdFxcdHRyYWNlX2tzbV9zdGFydF9zY2FuKGtzbV9zY2FuLnNlcW5yLCBrc21fcm1hcF9pdGVtcyk7XFxuMjU5NDpcXHRcXG4yNTk1OlxcdFxcdFxcdC8qXFxuMjU5NjpcXHRcXHRcXHQgKiBBIG51bWJlciBvZiBwYWdlcyBjYW4gaGFuZyBhcm91bmQgaW5kZWZpbml0ZWx5IGluIHBlci1jcHVcXG4yNTk3OlxcdFxcdFxcdCAqIExSVSBjYWNoZSwgcmFpc2VkIHBhZ2UgY291bnQgcHJldmVudGluZyB3cml0ZV9wcm90ZWN0X3BhZ2VcXG4yNTk4OlxcdFxcdFxcdCAqIGZyb20gbWVyZ2luZyB0aGVtLiAgVGhvdWdoIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBtdWNoLFxcbjI1OTk6XFx0XFx0XFx0ICogaXQgaXMgcHV6emxpbmcgdG8gc2VlIHNvbWUgc3R1Y2sgaW4gcGFnZXNfdm9sYXRpbGUgdW50aWxcXG4yNjAwOlxcdFxcdFxcdCAqIG90aGVyIGFjdGl2aXR5IGpvc3RsZXMgdGhlbSBvdXQsIGFuZCB0aGV5IGFsc28gcHJldmVudGVkXFxuMjYwMTpcXHRcXHRcXHQgKiBMVFAncyBLU00gdGVzdCBmcm9tIHN1Y2NlZWRpbmcgZGV0ZXJtaW5pc3RpY2FsbHk7IHNvIGRyYWluXFxuMjYwMjpcXHRcXHRcXHQgKiB0aGVtIGhlcmUgKGhlcmUgcmF0aGVyIHRoYW4gb24gZW50cnkgdG8ga3NtX2RvX3NjYW4oKSxcXG4yNjAzOlxcdFxcdFxcdCAqIHNvIHdlIGRvbid0IElQSSB0b28gb2Z0ZW4gd2hlbiBwYWdlc190b19zY2FuIGlzIHNldCBsb3cpLlxcbjI2MDQ6XFx0XFx0XFx0ICovXFxuMjYwNTpcXHRcXHRcXHRscnVfYWRkX2RyYWluX2FsbCgpO1xcbjI2MDY6XFx0XFxuMjYwNzpcXHRcXHRcXHQvKlxcbjI2MDg6XFx0XFx0XFx0ICogV2hlcmVhcyBzdGFsZSBzdGFibGVfbm9kZXMgb24gdGhlIHN0YWJsZV90cmVlIGl0c2VsZlxcbjI2MDk6XFx0XFx0XFx0ICogZ2V0IHBydW5lZCBpbiB0aGUgcmVndWxhciBjb3Vyc2Ugb2Ygc3RhYmxlX3RyZWVfc2VhcmNoKCksXFxuMjYxMDpcXHRcXHRcXHQgKiB0aG9zZSBtb3ZlZCBvdXQgdG8gdGhlIG1pZ3JhdGVfbm9kZXMgbGlzdCBjYW4gYWNjdW11bGF0ZTpcXG4yNjExOlxcdFxcdFxcdCAqIHNvIHBydW5lIHRoZW0gb25jZSBiZWZvcmUgZWFjaCBmdWxsIHNjYW4uXFxuMjYxMjpcXHRcXHRcXHQgKi9cXG4yNjEzOlxcdFxcdFxcdGlmICgha3NtX21lcmdlX2Fjcm9zc19ub2Rlcykge1xcbjI2MTQ6XFx0XFx0XFx0XFx0c3RydWN0IGtzbV9zdGFibGVfbm9kZSAqc3RhYmxlX25vZGUsICpuZXh0O1xcbjI2MTU6XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4yNjE2OlxcdFxcbjI2MTc6XFx0XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0YWJsZV9ub2RlLCBuZXh0LFxcbjI2MTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZtaWdyYXRlX25vZGVzLCBsaXN0KSB7XFxuMjYxOTpcXHRcXHRcXHRcXHRcXHRmb2xpbyA9IGtzbV9nZXRfZm9saW8oc3RhYmxlX25vZGUsXFxuMjYyMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBLU01fR0VUX0ZPTElPX05PTE9DSyk7XFxuMjYyMTpcXHRcXHRcXHRcXHRcXHRpZiAoZm9saW8pXFxuMjYyMjpcXHRcXHRcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjI2MjM6XFx0XFx0XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjYyNDpcXHRcXHRcXHRcXHR9XFxuMjYyNTpcXHRcXHRcXHR9XFxuMjYyNjpcXHRcXG4yNjI3OlxcdFxcdFxcdGZvciAobmlkID0gMDsgbmlkIFxcdTAwM2Mga3NtX25yX25vZGVfaWRzOyBuaWQrKylcXG4yNjI4OlxcdFxcdFxcdFxcdHJvb3RfdW5zdGFibGVfdHJlZVtuaWRdID0gUkJfUk9PVDtcXG4yNjI5OlxcdFxcbjI2MzA6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZrc21fbW1saXN0X2xvY2spO1xcbjI2MzE6XFx0XFx0XFx0c2xvdCA9IGxpc3RfZW50cnkobW1fc2xvdC1cXHUwMDNlc2xvdC5tbV9ub2RlLm5leHQsXFxuMjYzMjpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbV9zbG90LCBtbV9ub2RlKTtcXG4yNjMzOlxcdFxcdFxcdG1tX3Nsb3QgPSBtbV9zbG90X2VudHJ5KHNsb3QsIHN0cnVjdCBrc21fbW1fc2xvdCwgc2xvdCk7XFxuMjYzNDpcXHRcXHRcXHRrc21fc2Nhbi5tbV9zbG90ID0gbW1fc2xvdDtcXG4yNjM1OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZrc21fbW1saXN0X2xvY2spO1xcbjI2MzY6XFx0XFx0XFx0LypcXG4yNjM3OlxcdFxcdFxcdCAqIEFsdGhvdWdoIHdlIHRlc3RlZCBsaXN0X2VtcHR5KCkgYWJvdmUsIGEgcmFjaW5nIF9fa3NtX2V4aXRcXG4yNjM4OlxcdFxcdFxcdCAqIG9mIHRoZSBsYXN0IG1tIG9uIHRoZSBsaXN0IG1heSBoYXZlIHJlbW92ZWQgaXQgc2luY2UgdGhlbi5cXG4yNjM5OlxcdFxcdFxcdCAqL1xcbjI2NDA6XFx0XFx0XFx0aWYgKG1tX3Nsb3QgPT0gXFx1MDAyNmtzbV9tbV9oZWFkKVxcbjI2NDE6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjY0MjpcXHRuZXh0X21tOlxcbjI2NDM6XFx0XFx0XFx0a3NtX3NjYW4uYWRkcmVzcyA9IDA7XFxuMjY0NDpcXHRcXHRcXHRrc21fc2Nhbi5ybWFwX2xpc3QgPSBcXHUwMDI2bW1fc2xvdC1cXHUwMDNlcm1hcF9saXN0O1xcbjI2NDU6XFx0XFx0fVxcbjI2NDY6XFx0XFxuMjY0NzpcXHRcXHRzbG90ID0gXFx1MDAyNm1tX3Nsb3QtXFx1MDAzZXNsb3Q7XFxuMjY0ODpcXHRcXHRtbSA9IHNsb3QtXFx1MDAzZW1tO1xcbjI2NDk6XFx0XFx0dm1hX2l0ZXJfaW5pdChcXHUwMDI2dm1pLCBtbSwga3NtX3NjYW4uYWRkcmVzcyk7XFxuMjY1MDpcXHRcXG4yNjUxOlxcdFxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4yNjUyOlxcdFxcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcXG4yNjUzOlxcdFxcdFxcdGdvdG8gbm9fdm1hcztcXG4yNjU0OlxcdFxcbjI2NTU6XFx0XFx0Zm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7XFxuMjY1NjpcXHRcXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTUVSR0VBQkxFKSlcXG4yNjU3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2NTg6XFx0XFx0XFx0aWYgKGtzbV9zY2FuLmFkZHJlc3MgXFx1MDAzYyB2bWEtXFx1MDAzZXZtX3N0YXJ0KVxcbjI2NTk6XFx0XFx0XFx0XFx0a3NtX3NjYW4uYWRkcmVzcyA9IHZtYS1cXHUwMDNldm1fc3RhcnQ7XFxuMjY2MDpcXHRcXHRcXHRpZiAoIXZtYS1cXHUwMDNlYW5vbl92bWEpXFxuMjY2MTpcXHRcXHRcXHRcXHRrc21fc2Nhbi5hZGRyZXNzID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxuMjY2MjpcXHRcXG4yNjYzOlxcdFxcdFxcdHdoaWxlIChrc21fc2Nhbi5hZGRyZXNzIFxcdTAwM2Mgdm1hLVxcdTAwM2V2bV9lbmQpIHtcXG4yNjY0OlxcdFxcdFxcdFxcdHN0cnVjdCBrc21fbmV4dF9wYWdlX2FyZyBrc21fbmV4dF9wYWdlX2FyZztcXG4yNjY1OlxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICp0bXBfcGFnZSA9IE5VTEw7XFxuMjY2NjpcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjI2Njc6XFx0XFxuMjY2ODpcXHRcXHRcXHRcXHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpXFxuMjY2OTpcXHRcXHRcXHRcXHRcXHRnb3RvIG5vX3ZtYXM7XFxuMjY3MDpcXHRcXG4yNjcxOlxcdFxcdFxcdFxcdGludCBmb3VuZDtcXG4yNjcyOlxcdFxcbjI2NzM6XFx0XFx0XFx0XFx0Zm91bmQgPSB3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwga3NtX3NjYW4uYWRkcmVzcyxcXG4yNjc0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB2bWEtXFx1MDAzZXZtX2VuZCxcXG4yNjc1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2a3NtX25leHRfcGFnZV9vcHMsXFxuMjY3NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmtzbV9uZXh0X3BhZ2VfYXJnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDM6NDY6MjcuNzA1NzU4MTQzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjIzMzEyMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgS1NNIEFQSSBFbnRyeXBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgS1NNIGNvZGUgYW5kIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgdG8gaW5jbHVkZSBpbiB0aGlzIGFuYWx5c2lzLCBrZWVwaW5nIGluIG1pbmQgdGhlIHVzZXIncyBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCBmdW5jdGlvbiBpcyBtYXNzaXZlIOKAkyBvdmVyIDE1MCBsaW5lcyDigJMgc28gaW5saW5pbmcgaXQgaXMgZGVmaW5pdGVseSBvdXQgb2YgdGhlIHF1ZXN0aW9uLiBJJ2xsIG1ha2Ugc3VyZSB0byBhZGQgaXQuIFRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIGxldCdzIGFsc28gZ3JhYiBga3NtX21hZHZpc2VgIGFuZCBga3NtX2RvX3NjYW5gLiBIbW0sIGJ1dCB3YWl0IGEgc2Vjb25k4oCmIGBrc21fZG9fc2NhbmAgaXMgYWxzbyBtYXJrZWQgYXMgc3RhdGljLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSB3YW50cyBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBmdW5jdGlvbnMuIE9rYXksIHNjcmF0Y2ggdGhhdCBvbmUuIFNvLCBga3NtX21hZHZpc2VgIGl0IGlzLlxuXG5Ob3csIGFtIEkgbWlzc2luZyBhbnl0aGluZz8gSXMgdGhlcmUgYW5vdGhlciBlbnRyeSBwb2ludCBJIHNob3VsZCBjb25zaWRlcj8gTGV0IG1lIHNlZeKApiBJIGtub3cgdGhlIGBtYWR2aXNlYCBzeXNjYWxsIHVsdGltYXRlbHkgY2FsbHMgYGtzbV9tYWR2aXNlYCwgd2hpY2ggSSd2ZSBpbmNsdWRlZC4gIERvZXMgYHByY3RsYCBwbGF5IGFueSByb2xlIGhlcmU/IEkgc2VlbSB0byByZW1lbWJlciBgcHJjdGxgIG1pZ2h0IGJlIGludm9sdmVkLiBMZXQncyBjaGVja+KApiBJIG5lZWQgdG8gc2VlIGlmIGl0IGNhbGxzIGBrc21fZW5hYmxlX21lcmdlX2FueWAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHRvIGNvdmVyIGFsbCB0aGUgYmFzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0NjozMi44NjgwOTIxNzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjcyNjYyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrc21fZW5hYmxlX21lcmdlX2FueVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9rc20uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rc20uYz0yODk3PXN0YXRpYyBpbnQga3NtX2RlbF92bWFzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0va3NtLmMtMjkxMS0vKipcXG5tbS9rc20uYzoyOTEyOiAqIGtzbV9lbmFibGVfbWVyZ2VfYW55IC0gQWRkIG1tIHRvIG1tIGtzbSBsaXN0IGFuZCBlbmFibGUgbWVyZ2luZyBvbiBhbGxcXG5tbS9rc20uYy0yOTEzLSAqICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSBWTUEnc1xcbi0tXFxubW0va3NtLmMtMjkxOC0gKi9cXG5tbS9rc20uYzoyOTE5OmludCBrc21fZW5hYmxlX21lcmdlX2FueShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS9rc20uYy0yOTIwLXtcXG4tLVxcbm1tL2tzbS5jLTI5MzktICoga3NtX2Rpc2FibGVfbWVyZ2VfYW55IC0gRGlzYWJsZSBtZXJnaW5nIG9uIGFsbCBjb21wYXRpYmxlIFZNQSdzIG9mIHRoZSBtbSxcXG5tbS9rc20uYzoyOTQwOiAqXFx0XFx0XFx0ICAgcHJldmlvdXNseSBlbmFibGVkIHZpYSBrc21fZW5hYmxlX21lcmdlX2FueSgpLlxcbm1tL2tzbS5jLTI5NDEtICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDM6NDY6MzMuMDYwODI0NTM0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDMwODQ4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIEtTTSBNZXJnZSBDb250cm9sKipcblxuUmlnaHQsIHNvIGBrc21fZW5hYmxlX21lcmdlX2FueWAgaXMgYW5vdGhlciBjcnVjaWFsIGVudHJ5IHBvaW50IGluIHRoaXMgS1NNIChLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZykgY29udGV4dC4gSXQncyBub3QgdGhlIG9ubHkgb25lLCBvYnZpb3VzbHksIGJ1dCBpdCdzIGEgdml0YWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBzeXN0ZW0gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBmZWF0dXJlcy5cblxuTXkgbmV4dCBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgY291bnRlcnBhcnQgdG8gZW5hYmxpbmcgdGhpcyBmZWF0dXJlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBob3cgYGtzbV9kaXNhYmxlX21lcmdlX2FueWAgd29ya3MuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSB0d28gaXMgYWJzb2x1dGVseSBmdW5kYW1lbnRhbCBmb3IgbWFuYWdpbmcgdGhlIHdob2xlIHByb2Nlc3MgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IG1lcmdpbmcgaXMgYWN0dWFsbHkgKmNvbnRyb2xsZWQqIHdpdGhpbiB0aGUga2VybmVsLiBJIGNhbiB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgYSBtZW50YWwgbW9kZWwgb2YgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjQ5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDM6NDY6MzYuMzYzOTEzNTY0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY3MjcyOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3NtX2Rpc2FibGVfbWVyZ2VfYW55XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2tzbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2tzbS5jPTI5MTk9aW50IGtzbV9lbmFibGVfbWVyZ2VfYW55KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0va3NtLmMtMjkzOC0vKipcXG5tbS9rc20uYzoyOTM5OiAqIGtzbV9kaXNhYmxlX21lcmdlX2FueSAtIERpc2FibGUgbWVyZ2luZyBvbiBhbGwgY29tcGF0aWJsZSBWTUEncyBvZiB0aGUgbW0sXFxubW0va3NtLmMtMjk0MC0gKlxcdFxcdFxcdCAgIHByZXZpb3VzbHkgZW5hYmxlZCB2aWEga3NtX2VuYWJsZV9tZXJnZV9hbnkoKS5cXG4tLVxcbm1tL2tzbS5jLTI5NDktICovXFxubW0va3NtLmM6Mjk1MDppbnQga3NtX2Rpc2FibGVfbWVyZ2VfYW55KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL2tzbS5jLTI5NTEte1xcbi0tXFxubW0va3NtLmM9Mjk2Nz1pbnQga3NtX2Rpc2FibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS9rc20uYy0yOTczLVxcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9WTV9NRVJHRV9BTlksIG1tKSlcXG5tbS9rc20uYzoyOTc0OlxcdFxcdHJldHVybiBrc21fZGlzYWJsZV9tZXJnZV9hbnkobW0pO1xcbm1tL2tzbS5jLTI5NzUtXFx0cmV0dXJuIGtzbV9kZWxfdm1hcyhtbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAzOjQ2OjM2LjQ5MDY0NjkxNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDIzODA3MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtTTSBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgaGVyZSdzIHRoZSBicmVha2Rvd24uIFRvIGZ1enogS1NNIGVmZmVjdGl2ZWx5LCBJIG5lZWQgdG8gZm9jdXMgb24gc3BlY2lmaWMgZW50cnkgcG9pbnRzIGFuZCBleGVjdXRpb24gcGF0aHMuIE15IGluaXRpYWwgdGFyZ2V0cyBhcmUgdGhlIHN5c2NhbGwgZW50cnkgcG9pbnRzIGZvciBga3NtX21hZHZpc2VgLCBga3NtX2VuYWJsZV9tZXJnZV9hbnlgLCBga3NtX2Rpc2FibGVfbWVyZ2VfYW55YCwgYW5kIGBrc21fZGlzYWJsZWAuIFRoZXNlIGFyZSBteSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMuXG5cbkkga25vdyB0aGUgYnVnIGlzIHdpdGhpbiBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gLiBJdCdzIGNhbGxlZCBieSBga3NtX2RvX3NjYW5gLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBga3NtX3NjYW5fdGhyZWFkYCwgdGhlIGJhY2tncm91bmQga2VybmVsIHRocmVhZCByZXNwb25zaWJsZSBmb3IgS1NNIG9wZXJhdGlvbi4gVGhlIGNyaXRpY2FsIHRyaWdnZXIgY29uZGl0aW9uIHNlZW1zIHRvIGJlIGBrc21fdGVzdF9leGl0KG1tKWAgZXZhbHVhdGluZyB0byB0cnVlLiBUaGlzIGluZGljYXRlcyB0aGUgcHJvY2VzcyBpcyBleGl0aW5nLlxuXG5UaGVyZWZvcmUsIG15IHN0cmF0ZWd5IGlzIGNsZWFyOiBJIG5lZWQgdG8gY29uY2VudHJhdGUgb24gZnV6emluZyBga3NtX21hZHZpc2VgIGluIGNvbmp1bmN0aW9uIHdpdGggcHJvY2VzcyBleGl0IHNjZW5hcmlvcy4gU2luY2UgYGtzbV9zY2FuX3RocmVhZGAgcnVucyBpbiB0aGUgYmFja2dyb3VuZCBhbmQgaXNuJ3QgZGlyZWN0bHkgZXhwb3NlZCBhcyBhIHN5c2NhbGwsIEknbGwgc3RpbGwgaW5jbHVkZSBpdCBhbmQgYWxzbyBpbmNsdWRlIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgYXMgYW5vdGhlciBmb2N1cyBzeW1ib2wsIGdpdmVuIHRoYXQgaXQncyBhIGxhcmdlLCBub24taW5saW5lZCBmdW5jdGlvbiBhbmQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSBob3cgYGtzbV90ZXN0X2V4aXRgIGJlaGF2ZXMgdW5kZXIgdmFyaW91cyBjb25kaXRpb25zIHRvIGZpbmUtdHVuZSBteSBmdXp6aW5nIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc5OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0Njo0MS45MTQ0NTg2NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NTI3MzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtzbV90ZXN0X2V4aXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va3NtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va3NtLmM9NTkwPXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3N0YWJsZV9ub2RlKHN0cnVjdCBrc21fc3RhYmxlX25vZGUgKnN0YWJsZV9ub2RlKVxcbi0tXFxubW0va3NtLmMtNjAxLSAqIGEgc3BlY2lhbCBmbGFnOiB0aGV5IGNhbiBqdXN0IGJhY2sgb3V0IGFzIHNvb24gYXMgbW1fdXNlcnMgZ29lcyB0byB6ZXJvLlxcbm1tL2tzbS5jOjYwMjogKiBrc21fdGVzdF9leGl0KCkgaXMgdXNlZCB0aHJvdWdob3V0IHRvIG1ha2UgdGhpcyB0ZXN0IGZvciBleGl0OiBpbiBzb21lXFxubW0va3NtLmMtNjAzLSAqIHBsYWNlcyBmb3IgY29ycmVjdG5lc3MsIGluIHNvbWUgcGxhY2VzIGp1c3QgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgd29yay5cXG5tbS9rc20uYy02MDQtICovXFxubW0va3NtLmM6NjA1OnN0YXRpYyBpbmxpbmUgYm9vbCBrc21fdGVzdF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL2tzbS5jLTYwNi17XFxuLS1cXG5tbS9rc20uYz02MTA9c3RhdGljIGludCBicmVha19rc21fcG1kX2VudHJ5KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0va3NtLmMtNjE4LVxcbm1tL2tzbS5jOjYxOTpcXHRpZiAoa3NtX3Rlc3RfZXhpdCh3YWxrLVxcdTAwM2VtbSkpXFxubW0va3NtLmMtNjIwLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0va3NtLmM9NzY3PXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfbWVyZ2VhYmxlX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2tzbS5jLTc3MC1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG5tbS9rc20uYzo3NzE6XFx0aWYgKGtzbV90ZXN0X2V4aXQobW0pKVxcbm1tL2tzbS5jLTc3Mi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm1tL2tzbS5jPTExOTU9c3RhdGljIGludCB1bm1lcmdlX2FuZF9yZW1vdmVfYWxsX3JtYXBfaXRlbXModm9pZClcXG4tLVxcbm1tL2tzbS5jLTEyMTktXFx0XFx0ICovXFxubW0va3NtLmM6MTIyMDpcXHRcXHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpXFxubW0va3NtLmMtMTIyMS1cXHRcXHRcXHRnb3RvIG1tX2V4aXRpbmc7XFxuLS1cXG5tbS9rc20uYy0xMjM4LVxcdFxcdGtzbV9zY2FuLm1tX3Nsb3QgPSBtbV9zbG90X2VudHJ5KHNsb3QsIHN0cnVjdCBrc21fbW1fc2xvdCwgc2xvdCk7XFxubW0va3NtLmM6MTIzOTpcXHRcXHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpIHtcXG5tbS9rc20uYy0xMjQwLVxcdFxcdFxcdGhhc2hfZGVsKFxcdTAwMjZtbV9zbG90LVxcdTAwM2VzbG90Lmhhc2gpO1xcbi0tXFxubW0va3NtLmM9MjQ5ND1zdGF0aWMgaW50IGtzbV9uZXh0X3BhZ2VfcG1kX2VudHJ5KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0va3NtLmMtMjUwNS1cXG5tbS9rc20uYzoyNTA2OlxcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcXG5tbS9rc20uYy0yNTA3LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0va3NtLmM9MjU3Nz1zdGF0aWMgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSlcXG4tLVxcbm1tL2tzbS5jLTI2NTEtXFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbm1tL2tzbS5jOjI2NTI6XFx0aWYgKGtzbV90ZXN0X2V4aXQobW0pKVxcbm1tL2tzbS5jLTI2NTMtXFx0XFx0Z290byBub192bWFzO1xcbi0tXFxubW0va3NtLmMtMjY2Ny1cXG5tbS9rc20uYzoyNjY4OlxcdFxcdFxcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcXG5tbS9rc20uYy0yNjY5LVxcdFxcdFxcdFxcdGdvdG8gbm9fdm1hcztcXG4tLVxcbm1tL2tzbS5jLTI3MTQtXFxubW0va3NtLmM6MjcxNTpcXHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpIHtcXG5tbS9rc20uYy0yNzE2LW5vX3ZtYXM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAzOjQ2OjQyLjEzODk5MjIzM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjI3MTEwMTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyB0aGUgYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIHRoZSBidWcgc2VlbXMgdG8gYmUgd2l0aGluIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAuIEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGludGVybmFsIHRvIHRoZSBjb21waWxhdGlvbiB1bml0LiBHb29kLCBsZXNzIGxpa2VseSB0byBiZSBzaGFkb3dlZC4gTm93LCBJIGtub3cgdGhpcyB0aGluZyBpcyAqYmlnKiBhbmQgZGVmaW5pdGVseSBub3QgaW5saW5lZC4gVGhhdCdzIGtleS4gRm9yIGNsYXJpdHksIEknbSBnb2luZyB0byBpbmNsdWRlIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAsIGFsb25nIHdpdGggYGtzbV9tYWR2aXNlYCwgYGtzbV9lbmFibGVfbWVyZ2VfYW55YCwgYW5kIGBrc21fZGlzYWJsZV9tZXJnZV9hbnlgIGluIG15IGFuYWx5c2lzLiBJdCdzIGxpa2VseSB0aGF0IG9uZSBvZiB0aGVzZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgbWF5IGhvbGQgdGhlIGtleSB0byB0aGUgYnVnIG9yIGludGVyYWN0IHdpdGggYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCBpbiBhIHByb2JsZW1hdGljIHdheS5cblxuQWxyaWdodCwgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGdvdCBhbGwgb3VyIGR1Y2tzIGluIGEgcm93IHdpdGggdGhlIGNvbmZpZ3MuIExvb2tzIGxpa2Ugb25seSBgS1NNYCBpcyBleHBsaWNpdGx5IG5lZWRlZC4gQnV0IGhvbGQgb24uLi4gYEtTTWAgKmRlcGVuZHMqIG9uIGBNTVVgLiBPa2F5LCBgTU1VYCBpcyBzdGFuZGFyZCwgc28gdGhhdCBzaG91bGQgYmUgY292ZXJlZCBieSBkZWZhdWx0LiBKdXN0IHRvIGJlIHN1cmUsIGxldCdzIGdpdmUgdGhlIEtjb25maWcgYSBxdWljayBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgc3VidGxlIGRlcGVuZGVuY2llcyBJJ20gbWlzc2luZy4gQ2FuJ3QgYmUgdG9vIGNhcmVmdWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjk5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAzOjQ2OjQ2LjM2NjEwNjIzNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NzI0NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLU01cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTczNj1jb25maWcgTU1VX05PVElGSUVSXFxuLS1cXG5tbS9LY29uZmlnLTczOS1cXG5tbS9LY29uZmlnOjc0MDpjb25maWcgS1NNXFxubW0vS2NvbmZpZy03NDEtXFx0Ym9vbCBcXFwiRW5hYmxlIEtTTSBmb3IgcGFnZSBtZXJnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMzo0Njo0Ni41MzE4MzcyMjRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU1OTM5MDkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLU00gUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEtTTSBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIFwiWWVzLCBLU00uXCIgTGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LlxuXG5GaXJzdCwgSSBuZWVkIHRvIHN1bW1hcml6ZTogSXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIGJ1ZyBpbiBLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZyAoS1NNKS4gU3BlY2lmaWNhbGx5LCB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIGEgYGJyZWFrYCBzdGF0ZW1lbnQgd2l0aGluIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAuIEl0IGFwcGVhcnMgdGhlIGBicmVha2Agd2FzIGV4aXRpbmcgb25seSB0aGUgaW5uZXIgYHdoaWxlYCBsb29wLCBub3QgdGhlIG91dGVyIGBmb3JfZWFjaF92bWFgIGxvb3Agd2hlbiBhIHByb2Nlc3MgaXMgZXhpdGluZyAoaS5lLiwgYGtzbV90ZXN0X2V4aXQobW0pYCBpcyB0cnVlKS4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLCBhbmQgS1NNIGJhY2tncm91bmQgc2Nhbm5pbmcgYWxvbmcgd2l0aCBtYWR2aXNlL3ByY3RsIHN5c3RlbSBjYWxscyBjYW4gcmVhY2ggaXQuIFNvLCBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgc3ltYm9scy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cyB0byBjb25zaWRlci4gSSd2ZSBnb3QgYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCwgYGtzbV9tYWR2aXNlYCwgYGtzbV9lbmFibGVfbWVyZ2VfYW55YCwgYW5kIGBrc21fZGlzYWJsZV9tZXJnZV9hbnlgIGluIG1pbmQuIFRoZSBtYWluIGNvbmZpZyBiZWluZyBlbmFibGVkIGlzIGBLU01gLlxuXG5BIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgYHNjYW5fZ2V0X25leHRfcm1hcF9pdGVtYCBpcyBzdGF0aWMuIEhtbSwgd2hhdCdzIHRoZSBiZXN0IGFwcHJvYWNoIGhlcmU/IFRoZSBwcm9tcHQgZW1waGFzaXplcyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucywgbm90IGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBBbHRob3VnaCBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gIGlzIHN0YXRpYywgaXQncyBhIGxhcmdlIGZ1bmN0aW9uICgxNTArIGxpbmVzKSwgc28gaXQncyBwcm9iYWJseSBub3QgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFRvIGJlIHNhZmUsIEknbSBpbmNsdWRpbmcgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGBrc21fbWFkdmlzZWAsIGBrc21fZW5hYmxlX21lcmdlX2FueWAsIGFuZCBga3NtX2Rpc2FibGVfbWVyZ2VfYW55YCwgYnV0IGJlY2F1c2UgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGBzY2FuX2dldF9uZXh0X3JtYXBfaXRlbWAgYW5kIGl0J3Mgbm90IGlubGluZWQsIEknbSBnb2luZyB0byBpbmNsdWRlIHRoYXQgb25lIHRvby5cblxuV2FpdCBhIHNlY29uZCwgdGhlcmUncyBga3NtX2RvX3NjYW5gLCB0aGF0J3MgdGhlIG1haW4gd29ya2VyIGZ1bmN0aW9uLiBJIHNob3VsZCBhYnNvbHV0ZWx5IGluY2x1ZGUgdGhhdC4gQWRkaW5nIGBrc21fZG9fc2NhbmAuXG5cbkFscmlnaHQsIEkgdGhpbmsgSSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgY2FwdHVyZSB0aGUgZXNzZW5jZSBvZiB0aGlzIHBhdGNoLiBOb3csIGxldCdzIGp1c3QgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgyMywiT3V0cHV0VG9rZW5zIjoxODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDM6NDY6NTYuMDkxMjMyMDU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0MDc0NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY2FuX2dldF9uZXh0X3JtYXBfaXRlbVwiLFxuICAgIFwia3NtX2RvX3NjYW5cIixcbiAgICBcImtzbV9tYWR2aXNlXCIsXG4gICAgXCJrc21fZW5hYmxlX21lcmdlX2FueVwiLFxuICAgIFwia3NtX2Rpc2FibGVfbWVyZ2VfYW55XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gS1NNIChLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZykgd2hlcmUgYSBgYnJlYWtgIHN0YXRlbWVudCBpbiBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gIG9ubHkgZXhpdGVkIHRoZSBpbm5lciBgd2hpbGVgIGxvb3AgaW5zdGVhZCBvZiB0aGUgb3V0ZXIgYGZvcl9lYWNoX3ZtYWAgbG9vcCB3aGVuIGEgcHJvY2VzcyBpcyBleGl0aW5nIChga3NtX3Rlc3RfZXhpdChtbSlgIGlzIHRydWUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLU00gYmFja2dyb3VuZCBzY2FubmluZyBhbmQgbWFkdmlzZS9wcmN0bCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY2FuX2dldF9uZXh0X3JtYXBfaXRlbVwiLFxuICAgIFwia3NtX2RvX3NjYW5cIixcbiAgICBcImtzbV9tYWR2aXNlXCIsXG4gICAgXCJrc21fZW5hYmxlX21lcmdlX2FueVwiLFxuICAgIFwia3NtX2Rpc2FibGVfbWVyZ2VfYW55XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gS1NNIChLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZykgd2hlcmUgYSBgYnJlYWtgIHN0YXRlbWVudCBpbiBgc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW1gIG9ubHkgZXhpdGVkIHRoZSBpbm5lciBgd2hpbGVgIGxvb3AgaW5zdGVhZCBvZiB0aGUgb3V0ZXIgYGZvcl9lYWNoX3ZtYWAgbG9vcCB3aGVuIGEgcHJvY2VzcyBpcyBleGl0aW5nIChga3NtX3Rlc3RfZXhpdChtbSlgIGlzIHRydWUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLU00gYmFja2dyb3VuZCBzY2FubmluZyBhbmQgbWFkdmlzZS9wcmN0bCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjjsk[1] Phase: Succeeded StartedAt: 2026-07-27 03:47:07 +0000 UTC FinishedAt: 2026-07-27 03:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-27 03:47:07 +0000 UTC FinishedAt: 2026-07-27 03:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2] Phase: Succeeded StartedAt: 2026-07-27 03:47:07 +0000 UTC FinishedAt: 2026-07-27 07:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-27 03:47:07 +0000 UTC FinishedAt: 2026-07-27 07:57:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","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-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-27 03:47:07 +0000 UTC FinishedAt: 2026-07-27 03:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-27 03:47:07 +0000 UTC FinishedAt: 2026-07-27 03:47:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"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-workflowxjjsk/series-workflowxjjsk-convert-artifact-455118520/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-27 03:47:17 +0000 UTC FinishedAt: 2026-07-27 04:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-27 03:47:17 +0000 UTC FinishedAt: 2026-07-27 04:23:35 +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:*b54b6e6f-6c8f-4484-85cb-4e0ef8c3e1c8,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-workflowxjjsk/series-workflowxjjsk-convert-artifact-455118520/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": "a094adb9-b1ac-4f0c-aa3b-98250fd6cc0b", "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-workflowxjjsk/series-workflowxjjsk-build-action-2840712302/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-27 03:47:17 +0000 UTC FinishedAt: 2026-07-27 04:23:25 +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:*b54b6e6f-6c8f-4484-85cb-4e0ef8c3e1c8,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-workflowxjjsk/series-workflowxjjsk-convert-artifact-455118520/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": "a094adb9-b1ac-4f0c-aa3b-98250fd6cc0b", "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-workflowxjjsk/series-workflowxjjsk-build-action-2840712302/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-27 04:23:35 +0000 UTC FinishedAt: 2026-07-27 04:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-27 04:23:35 +0000 UTC FinishedAt: 2026-07-27 04:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-27 04:23:35 +0000 UTC FinishedAt: 2026-07-27 04:23:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-27 04:23:35 +0000 UTC FinishedAt: 2026-07-27 04:23:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","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-workflowxjjsk/series-workflowxjjsk-convert-artifact-2722260767/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-27 04:23:45 +0000 UTC FinishedAt: 2026-07-27 04:26:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-27 04:23:45 +0000 UTC FinishedAt: 2026-07-27 04:25:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a094adb9-b1ac-4f0c-aa3b-98250fd6cc0b,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-workflowxjjsk/series-workflowxjjsk-build-action-2840712302/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-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-27 04:26:00 +0000 UTC FinishedAt: 2026-07-27 04:26:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-27 04:26:00 +0000 UTC FinishedAt: 2026-07-27 04:26:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-27 04:26:00 +0000 UTC FinishedAt: 2026-07-27 04:53:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-27 04:26:00 +0000 UTC FinishedAt: 2026-07-27 04:53:20 +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:*b54b6e6f-6c8f-4484-85cb-4e0ef8c3e1c8,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-workflowxjjsk/series-workflowxjjsk-convert-artifact-2722260767/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": "150de943-ba52-400f-a8db-4f6ad923b39f", "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-workflowxjjsk/series-workflowxjjsk-build-action-122567091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-27 04:26:00 +0000 UTC FinishedAt: 2026-07-27 04:53:10 +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:*b54b6e6f-6c8f-4484-85cb-4e0ef8c3e1c8,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-workflowxjjsk/series-workflowxjjsk-convert-artifact-2722260767/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": "150de943-ba52-400f-a8db-4f6ad923b39f", "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-workflowxjjsk/series-workflowxjjsk-build-action-122567091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-27 04:53:20 +0000 UTC FinishedAt: 2026-07-27 04:53:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-27 04:53:20 +0000 UTC FinishedAt: 2026-07-27 04:53:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-27 04:53:20 +0000 UTC FinishedAt: 2026-07-27 04:55:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-27 04:53:20 +0000 UTC FinishedAt: 2026-07-27 04:54:52 +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:*150de943-ba52-400f-a8db-4f6ad923b39f,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-workflowxjjsk/series-workflowxjjsk-build-action-122567091/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-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-27 04:55:02 +0000 UTC FinishedAt: 2026-07-27 07:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-27 04:55:02 +0000 UTC FinishedAt: 2026-07-27 07:57:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"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:*a094adb9-b1ac-4f0c-aa3b-98250fd6cc0b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*150de943-ba52-400f-a8db-4f6ad923b39f,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-workflowxjjsk/series-workflowxjjsk-build-action-2840712302/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-workflowxjjsk/series-workflowxjjsk-build-action-122567091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-27 04:55:02 +0000 UTC FinishedAt: 2026-07-27 04:55:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-27 04:55:02 +0000 UTC FinishedAt: 2026-07-27 04:55:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"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-workflowxjjsk/series-workflowxjjsk-convert-artifact-4204958264/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-27 04:55:02 +0000 UTC FinishedAt: 2026-07-27 04:55:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-27 04:55:02 +0000 UTC FinishedAt: 2026-07-27 04:55:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-27 04:55:02 +0000 UTC FinishedAt: 2026-07-27 04:55:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-27 04:55:12 +0000 UTC FinishedAt: 2026-07-27 07:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjjsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["scan_get_next_rmap_item","ksm_do_scan","ksm_madvise","ksm_enable_merge_any","ksm_disable_merge_any"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f6f02d9e75816aeab869ddeb17ca30094ee9324a","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM"],"series_id":"0d9c6f9d-1444-46c4-ad1f-ec6defa184d1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-27 04:55:12 +0000 UTC FinishedAt: 2026-07-27 07:56:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a094adb9-b1ac-4f0c-aa3b-98250fd6cc0b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*150de943-ba52-400f-a8db-4f6ad923b39f,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-workflowxjjsk/series-workflowxjjsk-build-action-2840712302/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-workflowxjjsk/series-workflowxjjsk-build-action-122567091/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-workflowxjjsk/series-workflowxjjsk-convert-artifact-4204958264/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,}