Name: series-workflownw68s Phase: Succeeded StartedAt: 2026-08-01 03:46:50 +0000 UTC FinishedAt: 2026-08-01 05:35:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[0] Phase: Succeeded StartedAt: 2026-08-01 03:46:50 +0000 UTC FinishedAt: 2026-08-01 04:06:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 03:46:50 +0000 UTC FinishedAt: 2026-08-01 04:06:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fa20f6cb6063f7f1a6a56693d4a8713f19058d23", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FANOTIFY", "FANOTIFY_ACCESS_PERMISSIONS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fa20f6cb6063f7f1a6a56693d4a8713f19058d23", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FANOTIFY", "FANOTIFY_ACCESS_PERMISSIONS" ], "series_id": "ebddd7f6-8f8b-4746-9cde-7e823f7b11f3" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "fanotify_handle_event", "fanotify_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZBTk9USUZZJiMzNDssCiAgICAmIzM0O0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Zhbm90aWZ5X2hhbmRsZV9ldmVudCYjMzQ7LAogICAgJiMzNDtmYW5vdGlmeV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB3YXkgcmFuZ2UgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGFuZCBjb3BpZWQgdG8gdXNlcnNwYWNlIGZvciBmYW5vdGlmeSBwZXJtaXNzaW9uIGV2ZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGZhbm90aWZ5IGxvZ2ljLiBJdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5NmY5MzI5MGVhNGZjYTY1MTM2OWRjMjU2YzRlNWY3MDc4YzQxNjgxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwNDowNjowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jXG5pbmRleCBhMzU1NWJlYmFkNjNlLi5iMDViNmQzYWJiODcwIDEwMDY0NFxuLS0tIGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jXG5AQCAtNjAwLDggJiM0Mzs2MDAsNyBAQCBzdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50KGNvbnN0IHZvaWQgKmRhdGEsXG4gXHRwZXZlbnQtXHUwMDNlaGRyLmxlbiA9IDA7XG4gXHRwZXZlbnQtXHUwMDNlc3RhdGUgPSBGQU5fRVZFTlRfSU5JVDtcbiBcdHBldmVudC1cdTAwM2VwYXRoID0gKnBhdGg7XG4tXHQvKiBOVUxMIHBwb3MgbWVhbnMgbm8gcmFuZ2UgaW5mbyAqL1xuLVx0cGV2ZW50LVx1MDAzZXBwb3MgPSByYW5nZSA/IFx1MDAyNnJhbmdlLVx1MDAzZXBvcyA6IE5VTEw7XG4mIzQzO1x0cGV2ZW50LVx1MDAzZXBvcyA9IHJhbmdlID8gcmFuZ2UtXHUwMDNlcG9zIDogRkFOT1RJRllfTk9fUkFOR0U7XG4gXHRwZXZlbnQtXHUwMDNlY291bnQgPSByYW5nZSA/IHJhbmdlLVx1MDAzZWNvdW50IDogMDtcbiBcdHBhdGhfZ2V0KHBhdGgpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5oIGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmhcbmluZGV4IGEwNjE5ZTc2OTRkNTcuLjM3MTA1NDNkYmY4MjcgMTAwNjQ0XG4tLS0gYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmhcbkBAIC00MjgsNiAmIzQzOzQyOCw4IEBAIEZBTk9USUZZX01FKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQpXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGV2ZW50LCBzdHJ1Y3QgZmFub3RpZnlfbW50X2V2ZW50LCBmYWUpO1xuIH1cbiBcbiYjNDM7I2RlZmluZSBGQU5PVElGWV9OT19SQU5HRVx0KChsb2ZmX3QpLTEpXG4mIzQzO1xuIC8qXG4gICogU3RydWN0dXJlIGZvciBwZXJtaXNzaW9uIGZhbm90aWZ5IGV2ZW50cy4gSXQgZ2V0cyBhbGxvY2F0ZWQgYW5kIGZyZWVkIGluXG4gICogZmFub3RpZnlfaGFuZGxlX2V2ZW50KCkgc2luY2Ugd2Ugd2FpdCB0aGVyZSBmb3IgdXNlciByZXNwb25zZS4gV2hlbiB0aGVcbkBAIC00MzgsNyAmIzQzOzQ0MCw3IEBAIEZBTk9USUZZX01FKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQpXG4gc3RydWN0IGZhbm90aWZ5X3Blcm1fZXZlbnQge1xuIFx0c3RydWN0IGZhbm90aWZ5X2V2ZW50IGZhZTtcbiBcdHN0cnVjdCBwYXRoIHBhdGg7XG4tXHRjb25zdCBsb2ZmX3QgKnBwb3M7XHRcdC8qIG9wdGlvbmFsIGZpbGUgcmFuZ2UgaW5mbyAqL1xuJiM0MztcdGxvZmZfdCBwb3M7XHRcdFx0LyogRkFOT1RJRllfTk9fUkFOR0UgaWYgdW5hdmFpbGFibGUgKi9cbiBcdHNpemVfdCBjb3VudDtcbiBcdHUzMiByZXNwb25zZTtcdFx0XHQvKiB1c2Vyc3BhY2UgYW5zd2VyIHRvIHRoZSBldmVudCAqL1xuIFx0dW5zaWduZWQgc2hvcnQgc3RhdGU7XHRcdC8qIHN0YXRlIG9mIHRoZSBldmVudCAqL1xuQEAgLTQ2OCw3ICYjNDM7NDcwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGZhbm90aWZ5X2V2ZW50X2hhc19hY2Nlc3NfcmFuZ2Uoc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpldmVudClcbiBcdGlmICghKGV2ZW50LVx1MDAzZW1hc2sgXHUwMDI2IEZBTk9USUZZX1BSRV9DT05URU5UX0VWRU5UUykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiBGQU5PVElGWV9QRVJNKGV2ZW50KS1cdTAwM2VwcG9zO1xuJiM0MztcdHJldHVybiBGQU5PVElGWV9QRVJNKGV2ZW50KS1cdTAwM2Vwb3MgIT0gRkFOT1RJRllfTk9fUkFOR0U7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpGQU5PVElGWV9FKHN0cnVjdCBmc25vdGlmeV9ldmVudCAqZnNlKVxuZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jXG5pbmRleCBiNjA0ZTNkYTU4YWQyLi5iYmE5MmQ2OTFmMGRjIDEwMDY0NFxuLS0tIGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuY1xuQEAgLTY3NSwxMiAmIzQzOzY3NSwxMiBAQCBzdGF0aWMgc2l6ZV90IGNvcHlfcmFuZ2VfaW5mb190b191c2VyKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQsXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGluZm9fbGVuIFx1MDAzZSBjb3VudCkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuLVx0aWYgKFdBUk5fT05fT05DRSghcGV2ZW50LVx1MDAzZXBwb3MpKVxuJiM0MztcdGlmIChXQVJOX09OX09OQ0UocGV2ZW50LVx1MDAzZXBvcyA9PSBGQU5PVElGWV9OT19SQU5HRSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aW5mby5oZHIuaW5mb190eXBlID0gRkFOX0VWRU5UX0lORk9fVFlQRV9SQU5HRTtcbiBcdGluZm8uaGRyLmxlbiA9IGluZm9fbGVuO1xuLVx0aW5mby5vZmZzZXQgPSAqKHBldmVudC1cdTAwM2VwcG9zKTtcbiYjNDM7XHRpbmZvLm9mZnNldCA9IHBldmVudC1cdTAwM2Vwb3M7XG4gXHRpbmZvLmNvdW50ID0gcGV2ZW50LVx1MDAzZWNvdW50O1xuIFxuIFx0aWYgKGNvcHlfdG9fdXNlcihidWYsIFx1MDAyNmluZm8sIGluZm9fbGVuKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RkFOT1RJRlkmIzM0OywKICAgICYjMzQ7RkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmFub3RpZnlfaGFuZGxlX2V2ZW50JiMzNDssCiAgICAmIzM0O2Zhbm90aWZ5X3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSByYW5nZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgYW5kIGNvcGllZCB0byB1c2Vyc3BhY2UgZm9yIGZhbm90aWZ5IHBlcm1pc3Npb24gZXZlbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZmFub3RpZnkgbG9naWMuIEl0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk2ZjkzMjkwZWE0ZmNhNjUxMzY5ZGMyNTZjNGU1ZjcwNzhjNDE2ODEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDA0OjA2OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYwppbmRleCBhMzU1NWJlYmFkNjNlLi5iMDViNmQzYWJiODcwIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYwpAQCAtNjAwLDggJiM0Mzs2MDAsNyBAQCBzdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50KGNvbnN0IHZvaWQgKmRhdGEsCiAJcGV2ZW50LSZndDtoZHIubGVuID0gMDsKIAlwZXZlbnQtJmd0O3N0YXRlID0gRkFOX0VWRU5UX0lOSVQ7CiAJcGV2ZW50LSZndDtwYXRoID0gKnBhdGg7Ci0JLyogTlVMTCBwcG9zIG1lYW5zIG5vIHJhbmdlIGluZm8gKi8KLQlwZXZlbnQtJmd0O3Bwb3MgPSByYW5nZSA/ICZhbXA7cmFuZ2UtJmd0O3BvcyA6IE5VTEw7CiYjNDM7CXBldmVudC0mZ3Q7cG9zID0gcmFuZ2UgPyByYW5nZS0mZ3Q7cG9zIDogRkFOT1RJRllfTk9fUkFOR0U7CiAJcGV2ZW50LSZndDtjb3VudCA9IHJhbmdlID8gcmFuZ2UtJmd0O2NvdW50IDogMDsKIAlwYXRoX2dldChwYXRoKTsKIApkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmggYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuaAppbmRleCBhMDYxOWU3Njk0ZDU3Li4zNzEwNTQzZGJmODI3IDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuaApAQCAtNDI4LDYgJiM0Mzs0MjgsOCBAQCBGQU5PVElGWV9NRShzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgKmV2ZW50KQogCXJldHVybiBjb250YWluZXJfb2YoZXZlbnQsIHN0cnVjdCBmYW5vdGlmeV9tbnRfZXZlbnQsIGZhZSk7CiB9CiAKJiM0MzsjZGVmaW5lIEZBTk9USUZZX05PX1JBTkdFCSgobG9mZl90KS0xKQomIzQzOwogLyoKICAqIFN0cnVjdHVyZSBmb3IgcGVybWlzc2lvbiBmYW5vdGlmeSBldmVudHMuIEl0IGdldHMgYWxsb2NhdGVkIGFuZCBmcmVlZCBpbgogICogZmFub3RpZnlfaGFuZGxlX2V2ZW50KCkgc2luY2Ugd2Ugd2FpdCB0aGVyZSBmb3IgdXNlciByZXNwb25zZS4gV2hlbiB0aGUKQEAgLTQzOCw3ICYjNDM7NDQwLDcgQEAgRkFOT1RJRllfTUUoc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpldmVudCkKIHN0cnVjdCBmYW5vdGlmeV9wZXJtX2V2ZW50IHsKIAlzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgZmFlOwogCXN0cnVjdCBwYXRoIHBhdGg7Ci0JY29uc3QgbG9mZl90ICpwcG9zOwkJLyogb3B0aW9uYWwgZmlsZSByYW5nZSBpbmZvICovCiYjNDM7CWxvZmZfdCBwb3M7CQkJLyogRkFOT1RJRllfTk9fUkFOR0UgaWYgdW5hdmFpbGFibGUgKi8KIAlzaXplX3QgY291bnQ7CiAJdTMyIHJlc3BvbnNlOwkJCS8qIHVzZXJzcGFjZSBhbnN3ZXIgdG8gdGhlIGV2ZW50ICovCiAJdW5zaWduZWQgc2hvcnQgc3RhdGU7CQkvKiBzdGF0ZSBvZiB0aGUgZXZlbnQgKi8KQEAgLTQ2OCw3ICYjNDM7NDcwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGZhbm90aWZ5X2V2ZW50X2hhc19hY2Nlc3NfcmFuZ2Uoc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpldmVudCkKIAlpZiAoIShldmVudC0mZ3Q7bWFzayAmYW1wOyBGQU5PVElGWV9QUkVfQ09OVEVOVF9FVkVOVFMpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gRkFOT1RJRllfUEVSTShldmVudCktJmd0O3Bwb3M7CiYjNDM7CXJldHVybiBGQU5PVElGWV9QRVJNKGV2ZW50KS0mZ3Q7cG9zICE9IEZBTk9USUZZX05PX1JBTkdFOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqRkFOT1RJRllfRShzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKmZzZSkKZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jCmluZGV4IGI2MDRlM2RhNThhZDIuLmJiYTkyZDY5MWYwZGMgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYwpAQCAtNjc1LDEyICYjNDM7Njc1LDEyIEBAIHN0YXRpYyBzaXplX3QgY29weV9yYW5nZV9pbmZvX3RvX3VzZXIoc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpldmVudCwKIAlpZiAoV0FSTl9PTl9PTkNFKGluZm9fbGVuICZndDsgY291bnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChXQVJOX09OX09OQ0UoIXBldmVudC0mZ3Q7cHBvcykpCiYjNDM7CWlmIChXQVJOX09OX09OQ0UocGV2ZW50LSZndDtwb3MgPT0gRkFOT1RJRllfTk9fUkFOR0UpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWluZm8uaGRyLmluZm9fdHlwZSA9IEZBTl9FVkVOVF9JTkZPX1RZUEVfUkFOR0U7CiAJaW5mby5oZHIubGVuID0gaW5mb19sZW47Ci0JaW5mby5vZmZzZXQgPSAqKHBldmVudC0mZ3Q7cHBvcyk7CiYjNDM7CWluZm8ub2Zmc2V0ID0gcGV2ZW50LSZndDtwb3M7CiAJaW5mby5jb3VudCA9IHBldmVudC0mZ3Q7Y291bnQ7CiAKIAlpZiAoY29weV90b191c2VyKGJ1ZiwgJmFtcDtpbmZvLCBpbmZvX2xlbikpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRmFub3RpZnkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBpdCYjMzk7cyB0b3VjaGluZyBmYW5vdGlmeSwgc3BlY2lmaWNhbGx5IHRoZSBjb3JlIGZpbGVzOiBgZmFub3RpZnkuY2AsIGBmYW5vdGlmeS5oYCwgYW5kIGBmYW5vdGlmeV91c2VyLmNgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBmYW5vdGlmeSBpcyBhIGdvb2QgdGFyZ2V0LiBJIHNlZSB0aGF0IHRoZSBwYXRjaCYjMzk7cyBjZW50cmFsIG1vZGlmaWNhdGlvbiBpbnZvbHZlcyByZXBsYWNpbmcgYSBwb2ludGVyIHRvIGEgYGxvZmZfdGAgKGEgbG9uZyBsb25nIG9mZnNldCkgd2l0aCBhIGRpcmVjdCBgbG9mZl90YCB2YWx1ZSB3aXRoaW4gdGhlIGBmYW5vdGlmeV9wZXJtX2V2ZW50YCBzdHJ1Y3QuIFRoaXMgbG9va3MgbGlrZSBpdCYjMzk7cyBzaW1wbGlmeWluZyB0aGUgY29kZSwgbGlrZWx5IHJlbW92aW5nIGFuIHVubmVjZXNzYXJ5IGluZGlyZWN0aW9uLCBvciBtYXliZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIG9mZi1ieS1vbmUgb3IgZGF0YS1yYWNlIGlzc3VlIHdpdGggdGhlIHBvaW50ZXIsIG9yIHNpbXBsaWZ5aW5nIHRoZSBsb2dpYy4KClRoZSBjcnVjaWFsIGNoYW5nZXMgYXJlIGluIGhvdyBgcG9zYCAoZm9ybWVybHkgcG9pbnRlZCB0byBieSBgcHBvc2ApIGlzIGhhbmRsZWQgbm93OiBpbnN0ZWFkIG9mIHN0b3JpbmcgdGhlIHBvaW50ZXIsIGBGQU5PVElGWV9OT19SQU5HRWAgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGFic2VuY2Ugb2YgYSByYW5nZS4gVGhlIGNoZWNrcyBhbHNvIHJlZmxlY3QgdGhpcyBjaGFuZ2UgZnJvbSBgcHBvc2AgYmVpbmcgY2hlY2tlZCBmb3IgbnVsbCwgdG8gYHBvc2AgYmVpbmcgY2hlY2tlZCBhZ2FpbnN0IHRoaXMgbmV3IGBGQU5PVElGWV9OT19SQU5HRWAgdmFsdWUuIFNvIGl0JiMzOTtzIHZlcnkgbGlrZWx5IGEgcmVmYWN0b3JpbmcsIG1heWJlIHdpdGggYSBidWcgZml4IGJha2VkIGluLgoKR2l2ZW4gdGhpcywgSSBuZWVkIHRvIGdldCB0aGlzIGNvdmVyZWQgYnkgZnV6emluZywgYW5kIHF1aWNrbHkuIFNvIGxldCBtZSBwdWxsIHVwIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIE9idmlvdXNseSwgSSYjMzk7bGwgbmVlZCBgQ09ORklHX0ZBTk9USUZZYCBlbmFibGVkIHRvIGV2ZW4gcmVhY2ggdGhpcyBjb2RlLiBQcm9iYWJseSBgQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU2AgaXMgbmVlZGVkIGFzIHdlbGwuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGluc2lkZSBgZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWdgIHRvIGJlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZBTk9USUZZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL25vdGlmeS9mYW5vdGlmeS9LY29uZmlnOjI6Y29uZmlnIEZBTk9USUZZXG5mcy9ub3RpZnkvZmFub3RpZnkvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtGaWxlc3lzdGVtIHdpZGUgYWNjZXNzIG5vdGlmaWNhdGlvblwmIzM0O1xuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9LY29uZmlnLTE0LVxuZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWc6MTU6Y29uZmlnIEZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU1xuZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWctMTYtXHRib29sIFwmIzM0O2Zhbm90aWZ5IHBlcm1pc3Npb25zIGNoZWNraW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcyMgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBQb3RlbnRpYWwgRGF0YSBMZWFrYWdlIGluIEZhbm90aWZ5KioKCkFscmlnaHQsIG15IGludGVybmFsIGNoZWNrbGlzdCBoYXMgZmxhZ2dlZCBzb21ldGhpbmcgdGhhdCBhbHdheXMgd2FycmFudHMgYSBjbG9zZXIgbG9vazogdGhlIGludGVycGxheSBiZXR3ZWVuIGZpbGUgbm90aWZpY2F0aW9uIGV2ZW50cyBhbmQgZGF0YSBtb3ZlbWVudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGEgcG90ZW50aWFsIGF2ZW51ZSBmb3Igc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGxlYWthZ2UuIE15IGltbWVkaWF0ZSBmb2N1cyBsYW5kcyBvbiB0d28ga2V5IGZ1bmN0aW9ucy4KCkZpcnN0LCBJIG5lZWQgdG8gcmV2aXNpdCBgZmFub3RpZnlfYWxsb2NfcGVybV9ldmVudGAuIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIGV4YWN0bHkgd2hhdCBkYXRhIGlzIGJlaW5nIHBvcHVsYXRlZCB3aXRoaW4gYSBwZXJtaXNzaW9uIGV2ZW50LiBXaGF0IGZpZWxkcyBhcmUgcG9wdWxhdGVkLCBhbmQgY3JpdGljYWxseSwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZGF0YSByZW1uYW50cyBmcm9tIHByZXZpb3VzIG9wZXJhdGlvbnMsIG9yIHBlcmhhcHMgdW5pbml0aWFsaXplZCBtZW1vcnksIHRoYXQgY291bGQgaW5hZHZlcnRlbnRseSBleHBvc2UgaW5mb3JtYXRpb24/IEkmIzM5O20gcGFydGljdWxhcmx5IGNvbmNlcm5lZCBhYm91dCBhbnkgY29ubmVjdGlvbiBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MgLSBpcyB0aGVyZSBhIGNoYW5jZSB0aGF0IGlkZW50aWZpZXJzLCBmaWxlIHBhdGhzLCBvciBldmVuIGludGVybmFsIGtlcm5lbCBkYXRhIGNvdWxkIGxlYWsgdGhyb3VnaCB0aGlzIG1lY2hhbmlzbT8KCk5leHQsIG15IGF0dGVudGlvbiBzaGlmdHMgdG8gYGNvcHlfcmFuZ2VfaW5mb190b191c2VyYC4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgcGl2b3RhbCBjb21wb25lbnQgZm9yIHRyYW5zbWl0dGluZyB0aGUgZXZlbnQgZGV0YWlscyBiYWNrIHRvIHVzZXIgc3BhY2UuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIGRhdGEgaW50ZWdyaXR5LiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgb25seSBzYW5pdGl6ZWQsIGF1dGhvcml6ZWQgZGF0YSBpcyBiZWluZyB0cmFuc2ZlcnJlZC4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgcG9zc2libGUgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gaW5mb3JtYXRpb24gZGlzY2xvc3VyZXMuIEFyZSB0aGVyZSBzdHJpY3QgYm91bmRzIGNoZWNrcywgYXJlIGJ1ZmZlcnMgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFyZSB0aGVyZSBhbnkgYnlwYXNzZXMsIGFuZCBhcmUgYW55IHN1YnRsZSBpbnRlZ2VyIG92ZXJmbG93cyBwcmVzZW50PyBJ4oCZbSBnb2luZyB0byBmb2N1cyBvbiBob3cgdGhlIGluZm9ybWF0aW9uIHJhbmdlIGRhdGEgaXMgYmVpbmcgdmFsaWRhdGVkIGFuZCBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuIEkgbmVlZCB0byBrbm93IGV4YWN0bHkgaG93IHRoaXMgcmFuZ2UgaW5mb3JtYXRpb24gaXMgYnVpbHQgZnJvbSB0aGUga2VybmVsJiMzOTtzIGludGVybmFsIHJlcHJlc2VudGF0aW9uLCBtYWtpbmcgc3VyZSB0aGVyZSYjMzk7cyBubyB3YXkgdG8gdHJpY2sgdGhlIHN5c3RlbSBpbnRvIHJlbGVhc2luZyBtb3JlIGRhdGEgdGhhbiBpdCBzaG91bGQuIFVsdGltYXRlbHksIEkmIzM5O20gdHJ5aW5nIHRvIGVuc3VyZSB0aGF0IGEgbWFsaWNpb3VzIHVzZXIgY2Fubm90IGNyYWZ0IGEgc3BlY2lhbGx5LWRlc2lnbmVkIHJlcXVlc3QgdGhhdCB3b3VsZCBsZWFkIHRvIGEgZGF0YSBicmVhY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmFub3RpZnlfYWxsb2NfcGVybV9ldmVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTU2OT1zdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19tbnRfZXZlbnQodTY0IG1udF9pZCwgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jLTU4Mi1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jOjU4MzpzdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50KGNvbnN0IHZvaWQgKmRhdGEsXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy01ODQtXHRcdFx0XHRcdFx0XHRpbnQgZGF0YV90eXBlLFxuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTc0Mz1zdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19ldmVudChcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NTEtXHRpZiAoZmFub3RpZnlfaXNfcGVybV9ldmVudChtYXNrKSkge1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM6ODUyOlx0XHRldmVudCA9IGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnQoZGF0YSwgZGF0YV90eXBlLCBnZnApO1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtODUzLVx0fSBlbHNlIGlmIChmYW5vdGlmeV9pc19lcnJvcl9ldmVudChtYXNrKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NjMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgY29weV9yYW5nZV9pbmZvX3RvX3VzZXJgLCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OgoKKipBbmFseXppbmcgdGhlIGBjb3B5X3JhbmdlX2luZm9fdG9fdXNlcmAgRnVuY3Rpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoaXMgYGNvcHlfcmFuZ2VfaW5mb190b191c2VyYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBndXQgdGVsbHMgbWUgaXQmIzM5O3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIHRyYW5zZmVycmluZyBkYXRhIGFib3V0IGEgc3BlY2lmaWMgcmFuZ2Ug4oCTIHRoaW5rIGNlbGxzLCByb3dzLCBjb2x1bW5zLCBvciBhIGJsb2NrIG9mIHRoZW0g4oCTIGZyb20gc29tZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiwgbGlrZWx5IGluIHRoZSBzeXN0ZW0mIzM5O3MgY29yZSwgdG8gdGhlIHVzZXIuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGNvbnNpZGVyaW5nIHdoYXQga2luZCBvZiAmIzM0O2luZm8mIzM0OyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBoZXJlLiBJcyBpdCBqdXN0IHRoZSBkYXRhIHZhbHVlcyB0aGVtc2VsdmVzPyBPciBhcmUgd2UgY29uc2lkZXJpbmcgZm9ybWF0cywgZm9ybXVsYXMsIGNvbW1lbnRzLCB2YWxpZGF0aW9uIHJ1bGVzLCBhbGwgdGhlIG1ldGFkYXRhPyBBbmQgY3J1Y2lhbGx5LCB3aGF0JiMzOTtzIHRoZSBzb3VyY2UgYW5kIHRhcmdldD8gVGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB3ZSYjMzk7cmUgdXNpbmcgb24gb25lIGVuZCwgYW5kIHRoZSBmb3JtYXQgdGhlIHVzZXItZmFjaW5nIHNpZGUgaXMgZXhwZWN0aW5nIG9uIHRoZSBvdGhlci4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyByaWdodCBhd2F5LiBEYXRhIHRyYW5zZmVyIGNhbiBiZSBzdXJwcmlzaW5nbHkgc2xvdywgZXNwZWNpYWxseSB3aXRoIGxhcmdlIHJhbmdlcy4gU28sIEkgbmVlZCB0byBjb25zaWRlcjoKCiogICAqKkRhdGEgU3RydWN0dXJlczoqKiBIb3cgYXJlIHRoZSBkYXRhIHN0cnVjdHVyZXMgb24gYm90aCBlbmRzIG9yZ2FuaXplZD8gSXMgdGhlcmUgYSBuZWVkIGZvciBjb252ZXJzaW9uIG9yIHJlc3RydWN0dXJpbmcgdG8gbWF0Y2ggdGhlIHVzZXImIzM5O3MgZXhwZWN0ZWQgZm9ybWF0PyBXaGF0JiMzOTtzIHRoZSB0aW1lIGNvbXBsZXhpdHkgb2YgdGhlIG9wZXJhdGlvbj8KKiAgICoqTWVtb3J5IE1hbmFnZW1lbnQ6KiogSG93IG11Y2ggbWVtb3J5IHdpbGwgYmUgcmVxdWlyZWQgZm9yIHRoaXMgb3BlcmF0aW9uLCBlc3BlY2lhbGx5IGZvciBsYXJnZSByYW5nZXM/IEFyZSB3ZSBlZmZpY2llbnRseSB1dGlsaXppbmcgbWVtb3J5LCBvciBtaWdodCB0aGlzIG9wZXJhdGlvbiBiZWNvbWUgYSBtZW1vcnkgaG9nPyBBcmUgd2UgY29weWluZyBkYXRhLCBvciBhcmUgd2UgcGFzc2luZyByZWZlcmVuY2VzPwoqICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIGNvcHlpbmcgYSBzcGVjaWZpYyBjZWxsJiMzOTtzIGluZm9ybWF0aW9uPyBIb3cgaXMgaXQgaGFuZGxlZD8gRG9lcyBpdCBmYWlsIHNpbGVudGx5LCBvciBkb2VzIGl0IHRyaWdnZXIgYW4gZXhjZXB0aW9uPyBEb2VzIGl0IGxvZyB1c2VmdWwgaW5mb3JtYXRpb24/CiogICAqKlNlY3VyaXR5OioqIElmIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggc2Vuc2l0aXZlIGRhdGEsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZGF0YSB0cmFuc2ZlciBpcyBzZWN1cmUsIGFkaGVyaW5nIHRvIGFjY2VzcyBjb250cm9scyBhbmQgcGVybWlzc2lvbnMuCiogICAqKkNvbmN1cnJlbmN5OioqIElzIHRoaXMgZnVuY3Rpb24gdGhyZWFkLXNhZmU/IERvZXMgaXQgbmVlZCB0byBiZT8gSWYgbXVsdGlwbGUgdXNlcnMgYXJlIHNpbXVsdGFuZW91c2x5IHJlcXVlc3RpbmcgZGF0YSwgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBvdXIgY29uY3VycmVuY3kgZGVzaWduIGlzIHNvbGlkLgoKSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZyB0aGF0IHRoZSB0YXJnZXQgc2lkZSBleHBlY3RzIGEgc3BlY2lmaWMgZm9ybWF0LiBJIHdhbnQgdG8gbG9vayBpbnRvIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyB0aGVzZSBjb25zaWRlcmF0aW9ucy4gSXMgdGhpcyBhIHNpbXBsZSBkYXRhIGNvcHksIG9yIGRvIHdlIGhhdmUgdHJhbnNmb3JtYXRpb24gbG9naWMgYXQgcGxheT8gQSByb2J1c3QgZnVuY3Rpb24gd2lsbCBoYW5kbGUgcG90ZW50aWFsIGRhdGEgdHlwZSBtaXNtYXRjaGVzLCBtaXNzaW5nIHZhbHVlcyBncmFjZWZ1bGx5LiBJIGV4cGVjdCB0byBhbHNvIGV2YWx1YXRlIHBlcmZvcm1hbmNlIG9mIHRoZSBmdW5jdGlvbiB3aGVuIGl0IGNvbWVzIHRvIGVkZ2UgY2FzZXMuCkVzc2VudGlhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBlcmZvcm1hbmNlLCBkYXRhIGludGVncml0eSwgYW5kIHBvdGVudGlhbCBwb2ludHMgb2YgZmFpbHVyZSwgYWxsIGluIHJlbGF0aW9uIHRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdXNlciBpbnRlcmZhY2UgYW5kIG92ZXJhbGwgYXBwbGljYXRpb24gZGVzaWduLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3B5X3JhbmdlX2luZm9fdG9fdXNlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYz02NDg9c3RhdGljIGludCBjb3B5X3BpZGZkX2luZm9fdG9fdXNlcihpbnQgcGlkZmQsXG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy02NjctXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jOjY2ODpzdGF0aWMgc2l6ZV90IGNvcHlfcmFuZ2VfaW5mb190b191c2VyKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQsXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTY2OS1cdFx0XHRcdCAgICAgIGNoYXIgX191c2VyICpidWYsIGludCBjb3VudClcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jPTY5Mj1zdGF0aWMgaW50IGNvcHlfaW5mb19yZWNvcmRzX3RvX3VzZXIoc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpldmVudCxcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTgxMy1cdGlmIChmYW5vdGlmeV9ldmVudF9oYXNfYWNjZXNzX3JhbmdlKGV2ZW50KSkge1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzo4MTQ6XHRcdHJldCA9IGNvcHlfcmFuZ2VfaW5mb190b191c2VyKGV2ZW50LCBidWYsIGNvdW50KTtcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMtODE1LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzODgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgRmFub3RpZnkgRXZlbnQgSGFuZGxpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSB0d28gZnVuY3Rpb25zLCBgZmFub3RpZnlfYWxsb2NfcGVybV9ldmVudGAgYW5kIGBjb3B5X3JhbmdlX2luZm9fdG9fdXNlcmAuIEkmIzM5O3ZlIGdvdCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IHRvIHVuZGVyc3RhbmQgdGhlIGtleSBhcmVhcyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uIGBmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50YCBpcyBpbnRlcm5hbCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIGNhbGxlZCBieSBgZmFub3RpZnlfYWxsb2NfZXZlbnRgLCB3aGljaCBpcyBhbHNvIGludGVybmFsLCBhbmQgdGhhdCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgZmFub3RpZnlfaGFuZGxlX2V2ZW50YC4gVGhhdCBnaXZlcyBtZSBhIHBhdGg6IGBmYW5vdGlmeV9oYW5kbGVfZXZlbnRgICZndDsgYGZhbm90aWZ5X2FsbG9jX2V2ZW50YCAmZ3Q7IGBmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50YC4gTWFrZXMgc2Vuc2UsIHNvIGBmYW5vdGlmeV9oYW5kbGVfZXZlbnRgIGlzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gdGhhdCBzaWRlLgoKT24gdGhlIG90aGVyIGhhbmQsIGBjb3B5X3JhbmdlX2luZm9fdG9fdXNlcmAgaXMgaW50ZXJuYWwsIHdoaWNoIGlzIGNhbGxlZCBieSBgY29weV9pbmZvX3JlY29yZHNfdG9fdXNlcmAsIHdoaWNoIGlzIGNhbGxlZCBieSBgY29weV9ldmVudF90b191c2VyYCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBieSBgZmFub3RpZnlfcmVhZGAuIFRoYXQmIzM5O3MgYSBjbGVhciBjYWxsIHN0YWNrOiBgZmFub3RpZnlfcmVhZGAgJmd0OyBgY29weV9ldmVudF90b191c2VyYCAmZ3Q7IGBjb3B5X2luZm9fcmVjb3Jkc190b191c2VyYCAmZ3Q7IGBjb3B5X3JhbmdlX2luZm9fdG9fdXNlcmAuIFNvLCB0byByZWFsbHkgdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgd29ya3MsIGBmYW5vdGlmeV9yZWFkYCBpcyBhbm90aGVyIGNyaXRpY2FsIGFyZWEsIGFuZCBJIHNob3VsZCBmb2N1cyBoZXJlLgoKU28sIGluIHNob3J0LCB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB0aGUgY29yZSBldmVudCBoYW5kbGluZyBhbmQgZGF0YSBjb3B5aW5nLCBJIG5lZWQgdG8gZGVsdmUgaW50byBgZmFub3RpZnlfaGFuZGxlX2V2ZW50YCBhbmQgYGZhbm90aWZ5X3JlYWRgLiBUaGV5JiMzOTtyZSB0aGUgdmlzaWJsZSBlbnRyeSBwb2ludHMgZm9yIHByb2Nlc3NpbmcgZXZlbnRzIGFuZCBjb3B5aW5nIGluZm9ybWF0aW9uIGJhY2sgdG8gdXNlciBzcGFjZS4gVGhhdCBzaG91bGQgcHJvdmlkZSB0aGUgbW9zdCBmcnVpdGZ1bCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmFub3RpZnlfaGFuZGxlX2V2ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM9MTgwPXN0YXRpYyBpbnQgZmFub3RpZnlfbWVyZ2Uoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCxcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy0xOTItXHQgKiBEb24mIzM5O3QgbWVyZ2UgYSBwZXJtaXNzaW9uIGV2ZW50IHdpdGggYW55IG90aGVyIGV2ZW50IHNvIHRoYXQgd2Uga25vd1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM6MTkzOlx0ICogdGhlIGV2ZW50IHN0cnVjdHVyZSB3ZSBoYXZlIGNyZWF0ZWQgaW4gZmFub3RpZnlfaGFuZGxlX2V2ZW50KCkgaXMgdGhlXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy0xOTQtXHQgKiBvbmUgd2Ugc2hvdWxkIGNoZWNrIGZvciBwZXJtaXNzaW9uIHJlc3BvbnNlLlxuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTkwOD1zdGF0aWMgdm9pZCBmYW5vdGlmeV9pbnNlcnRfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCxcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy05MjUtXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYzo5MjY6c3RhdGljIGludCBmYW5vdGlmeV9oYW5kbGVfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwgdTMyIG1hc2ssXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy05MjctXHRcdFx0XHQgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGRhdGFfdHlwZSxcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYz0xMTE0PWNvbnN0IHN0cnVjdCBmc25vdGlmeV9vcHMgZmFub3RpZnlfZnNub3RpZnlfb3BzID0ge1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM6MTExNTpcdC5oYW5kbGVfZXZlbnQgPSBmYW5vdGlmeV9oYW5kbGVfZXZlbnQsXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy0xMTE2LVx0LmZyZWVfZ3JvdXBfcHJpdiA9IGZhbm90aWZ5X2ZyZWVfZ3JvdXBfcHJpdixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM1NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOgoKKipEaXZpbmcgaW50byBmYW5vdGlmeSBJbnRlcm5hbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgZmFub3RpZnlgIHN5c3RlbSBjYWxscywgc3BlY2lmaWNhbGx5IGhvdyB0aGV5IGludGVyZmFjZSB3aXRoIHRoZSBrZXJuZWwuIEkgc2VlIHRoYXQgYGZhbm90aWZ5X2hhbmRsZV9ldmVudGAgaXMgKnRoZSogcG9pbnQgb2YgZW50cnkgZm9yIHRoZSBgZnNub3RpZnlfb3BzYCBzdHJ1Y3R1cmUuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBwcm9jZXNzZXMgdGhvc2UgYGZhbm90aWZ5YCBldmVudHMgd2hlbiB0aGV5IGhhcHBlbi4gSXQmIzM5O3MgdGhlIGNvcmUgb2YgaG93IHRoZSBmaWxlIHN5c3RlbSBub3RpZmljYXRpb25zIGFyZSBoYW5kbGVkIHVuZGVyIHRoZSBob29kLgoKVGhlbiwgdGhlcmUmIzM5O3MgYGZhbm90aWZ5X3JlYWRgLiBUaGlzIG9uZSYjMzk7cyBjbGVhcmx5IGhvb2tpbmcgaW50byB0aGUgYGZpbGVfb3BlcmF0aW9uc2Agc3RydWN0dXJlLiBFc3NlbnRpYWxseSwgdGhpcyBpcyBob3cgdXNlciBzcGFjZSBjYW4gKmdldCogdGhlIGV2ZW50cywgcmVhZGluZyB0aGVtIGZyb20gdGhlIGZpbGUgZGVzY3JpcHRvci4gU28sIGBmYW5vdGlmeV9oYW5kbGVfZXZlbnRgIHByb2Nlc3NlcyB0aGUgZXZlbnRzIHdoZW4gdGhleSBhcmlzZSwgYW5kIGBmYW5vdGlmeV9yZWFkYCBhbGxvd3MgYSB1c2VyIHByb2Nlc3MgdG8gcmV0cmlldmUgdGhlIHF1ZXVlZCBldmVudHMuIFRoZXnigJlyZSB0aGUgdHdvIHNpZGVzIG9mIHRoZSBzYW1lIGNvaW46IG9uZSBnZW5lcmF0ZXMgdGhlIGV2ZW50LCB0aGUgb3RoZXIgcHJvdmlkZXMgYWNjZXNzIHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYW5vdGlmeV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jPTk2ND1zdGF0aWMgX19wb2xsX3QgZmFub3RpZnlfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTk3Ny1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM6OTc4OnN0YXRpYyBzc2l6ZV90IGZhbm90aWZ5X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTk3OS1cdFx0XHQgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYz0xMTY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZhbm90aWZ5X2ZvcHMgPSB7XG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xMTcxLVx0LnBvbGxcdFx0PSBmYW5vdGlmeV9wb2xsLFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzoxMTcyOlx0LnJlYWRcdFx0PSBmYW5vdGlmeV9yZWFkLFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xMTczLVx0LndyaXRlXHRcdD0gZmFub3RpZnlfd3JpdGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGYW5vdGlmeSBFdmVudCBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGUgY29yZSBmdW5jdGlvbnMgYWZmZWN0ZWQgaGVyZSBzZWVtIHRvIGJlIGBmYW5vdGlmeV9oYW5kbGVfZXZlbnRgIGFuZCBgZmFub3RpZnlfcmVhZGAuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5pdGVseSBgRkFOT1RJRllgIGFuZCBgRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TYC4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgZW5hYmxpbmcgdGhlIGZ1bmN0aW9uYWxpdHkuCgpUaGUga2V5IGNoYW5nZSwgZnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBpcyBob3cgdGhlIHJhbmdlIGluZm9ybWF0aW9uIGlzIGJlaW5nIGhhbmRsZWQgd2l0aGluIHRoZSBgc3RydWN0IGZhbm90aWZ5X3Blcm1fZXZlbnRgLiBJbnN0ZWFkIG9mIHVzaW5nIGEgcG9pbnRlciB0byBzdG9yZSB0aGUgcmFuZ2UgZGF0YSwgdGhleSYjMzk7cmUgc3dpdGNoaW5nIHRvIHN0b3JpbmcgdGhlIHZhbHVlIGRpcmVjdGx5LiBBbmQsIGltcG9ydGFudGx5LCBgRkFOT1RJRllfTk9fUkFOR0VgIGlzIGJlaW5nIHVzZWQgdG8gc2lnbmlmeSB3aGVuIG5vIHJhbmdlIGlzIHByZXNlbnQuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgZ29pbmcgdG8gaW1wYWN0IGhvdyB3ZSBhY2Nlc3MgYW5kIGludGVycHJldCB0aGlzIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgd2hlbiBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zLgoKTm93LCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIGludGVyYWN0cyB3aXRoIGFueSBvdGhlciBjb25maWd1cmF0aW9ucy4gTXkgcmVjb2xsZWN0aW9uIGlzIHRoYXQgYEZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU2AgaXMgcmVxdWlyZWQgYnkgYGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnRgLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBUaW1lIHRvIGRpZyBhIGJpdCBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9ub3RpZnkvZmFub3RpZnkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTU2OT1zdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19tbnRfZXZlbnQodTY0IG1udF9pZCwgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jLTU4Mi1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jOjU4MzpzdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50KGNvbnN0IHZvaWQgKmRhdGEsXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy01ODQtXHRcdFx0XHRcdFx0XHRpbnQgZGF0YV90eXBlLFxuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTc0Mz1zdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19ldmVudChcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NTEtXHRpZiAoZmFub3RpZnlfaXNfcGVybV9ldmVudChtYXNrKSkge1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM6ODUyOlx0XHRldmVudCA9IGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnQoZGF0YSwgZGF0YV90eXBlLCBnZnApO1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtODUzLVx0fSBlbHNlIGlmIChmYW5vdGlmeV9pc19lcnJvcl9ldmVudChtYXNrKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzA0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gdGhlIEZhbm90aWZ5IENvZGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgYGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnRgLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIE15IHByaW1hcnkgY29uY2VybiBpcyB0byBhdm9pZCB0cnlpbmcgdG8gdXNlIHNvbWV0aGluZyB0aGF0IG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgaW4gYSBnaXZlbiBrZXJuZWwgY29uZmlndXJhdGlvbi4gU28sIEkgbmVlZCB0byBpbW1lZGlhdGVseSB2ZXJpZnkgaWYgYGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnRgIGlzIHdyYXBwZWQgd2l0aGluIGFuIGAjaWZkZWZgIGJsb2NrIGZvciBgQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU2AuIElmIHRoYXQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpc24mIzM5O3QgZGVmaW5lZCwgSSBoYXZlIHRvIGFzc3VtZSB0aGUgZnVuY3Rpb24gd29uJiMzOTt0IGJlIGNvbXBpbGVkIGFuZCBtdXN0IGJlIHNraXBwZWQuIEkgY2FuJiMzOTt0IHJlbHkgb24gaXRzIGV4aXN0ZW5jZTsgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgZmxhZ3MgYW5kIGtlcm5lbCBjb25maWcgdG8gdW5kZXJzdGFuZCBpdHMgYXZhaWxhYmlsaXR5LiBJdCYjMzk7cyBhIHF1aWNrIGNoZWNrLCBidXQgYSBjcml0aWNhbCBvbmUgYmVmb3JlIHByb2NlZWRpbmcgYW55IGZ1cnRoZXIgd2l0aCBhbmFseXNpcyBvciBtb2RpZmljYXRpb25zLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBJIHN0YW5kIGZyb20gdGhlIG91dHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25vdGlmeS9mYW5vdGlmeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5Lmg9NDYyPXN0YXRpYyBpbmxpbmUgYm9vbCBmYW5vdGlmeV9pc19wZXJtX2V2ZW50KHUzMiBtYXNrKVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmgtNDYzLXtcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5oOjQ2NDpcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19GQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMpIFx1MDAyNlx1MDAyNlxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmgtNDY1LVx0XHRtYXNrIFx1MDAyNiBGQU5PVElGWV9QRVJNX0VWRU5UUztcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jPTEwNTU9c3RhdGljIHNzaXplX3QgZmFub3RpZnlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xMDYyLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzoxMDYzOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMpKVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xMDY0LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jPTE4NTY9c3RhdGljIGludCBkb19mYW5vdGlmeV9tYXJrKGludCBmYW5vdGlmeV9mZCwgdW5zaWduZWQgaW50IGZsYWdzLCBfX3U2NCBtYXNrLFxuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMtMTkxNC1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM6MTkxNTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19GQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMpKVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xOTE2LVx0XHR2YWxpZF9tYXNrIHw9IEZBTk9USUZZX1BFUk1fRVZFTlRTO1xuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM9MjE1Nj1zdGF0aWMgaW50IF9faW5pdCBmYW5vdGlmeV91c2VyX3NldHVwKHZvaWQpXG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0yMTgyLVx0XHRcdFx0XHRcdFNMQUJfUEFOSUMpO1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzoyMTgzOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OUykpIHtcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMtMjE4NC1cdFx0ZmFub3RpZnlfcGVybV9ldmVudF9jYWNoZXAgPVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTY1CgkJCQkJCQlvdXRwdXQ6IDEwOAoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBmYW5vdGlmeSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBgZmFub3RpZnlgIHN1YnN5c3RlbS4gVGhlIGtleSBoZXJlLCB0byBtYWtlIHRoaXMgd29ydGh3aGlsZSBmb3IgZnV6emluZywgaXMgdG8gY29uZmlybSBhIGZldyB0aGluZ3MuIEZpcnN0LCBgZmFub3RpZnlfaXNfcGVybV9ldmVudGAgY2hlY2tzIGZvciBgSVNfRU5BQkxFRChDT05GSUdfRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TKWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQhIFNvLCBpdCBsb29rcyBsaWtlIGBGQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlNgIGlzIGFic29sdXRlbHkgcmVxdWlyZWQuIEkgYWxzbyBrbm93IHRoYXQgYEZBTk9USUZZYCBpdHNlbGYgaGFzIHRvIGJlIGVuYWJsZWQuCgpUaGVyZWZvcmUsIGZvciBteSBmdXp6aW5nIGFwcHJvYWNoLCBJJiMzOTttIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBlbnRyeSBwb2ludHMsIHNvIEkgd2lsbCBwcmlvcml0aXplIGBmYW5vdGlmeV9oYW5kbGVfZXZlbnRgIGFuZCBgZmFub3RpZnlfcmVhZGAgYXMgY3JpdGljYWwgZnV6eiB0YXJnZXRzLiBUbyBtYWtlIHN1cmUgdGhlIHN1YnN5c3RlbSBpcyBjb25maWd1cmVkIGNvcnJlY3RseSB0byB0cmlnZ2VyIHRoZXNlIGZ1bmN0aW9ucywgSSB3aWxsIHNwZWNpZnkgYEVuYWJsZUNvbmZpZ3M9WyYjMzQ7RkFOT1RJRlkmIzM0OywgJiMzNDtGQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMmIzM0O11gLiBJJiMzOTttIGNvbmZpZGVudCB0aGlzIHNldHVwIHdpbGwgZ2l2ZSBtZSBhIGdvb2Qgc2hvdCBhdCByZXZlYWxpbmcgdnVsbmVyYWJpbGl0aWVzIHdpdGhpbiB0aGUgYGZhbm90aWZ5YCBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGQU5PVElGWSYjMzQ7LAogICAgJiMzNDtGQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmYW5vdGlmeV9oYW5kbGVfZXZlbnQmIzM0OywKICAgICYjMzQ7ZmFub3RpZnlfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IHJhbmdlIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBhbmQgY29waWVkIHRvIHVzZXJzcGFjZSBmb3IgZmFub3RpZnkgcGVybWlzc2lvbiBldmVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBmYW5vdGlmeSBsb2dpYy4gSXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGQU5PVElGWSYjMzQ7LAogICAgJiMzNDtGQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmYW5vdGlmeV9oYW5kbGVfZXZlbnQmIzM0OywKICAgICYjMzQ7ZmFub3RpZnlfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IHJhbmdlIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBhbmQgY29waWVkIHRvIHVzZXJzcGFjZSBmb3IgZmFub3RpZnkgcGVybWlzc2lvbiBldmVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBmYW5vdGlmeSBsb2dpYy4gSXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MDY6MDguMzMwOTk1Mzc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ3MzYyNDc1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRkFOT1RJRllcIixcbiAgICBcIkZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZhbm90aWZ5X2hhbmRsZV9ldmVudFwiLFxuICAgIFwiZmFub3RpZnlfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB3YXkgcmFuZ2UgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGFuZCBjb3BpZWQgdG8gdXNlcnNwYWNlIGZvciBmYW5vdGlmeSBwZXJtaXNzaW9uIGV2ZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGZhbm90aWZ5IGxvZ2ljLiBJdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjA2OjA4LjMzMTAwMTUxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxNDM1NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTZmOTMyOTBlYTRmY2E2NTEzNjlkYzI1NmM0ZTVmNzA3OGM0MTY4MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDA0OjA2OjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jIGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmNcXG5pbmRleCBhMzU1NWJlYmFkNjNlLi5iMDViNmQzYWJiODcwIDEwMDY0NFxcbi0tLSBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jXFxuKysrIGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmNcXG5AQCAtNjAwLDggKzYwMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgKmZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnQoY29uc3Qgdm9pZCAqZGF0YSxcXG4gXFx0cGV2ZW50LVxcdTAwM2VoZHIubGVuID0gMDtcXG4gXFx0cGV2ZW50LVxcdTAwM2VzdGF0ZSA9IEZBTl9FVkVOVF9JTklUO1xcbiBcXHRwZXZlbnQtXFx1MDAzZXBhdGggPSAqcGF0aDtcXG4tXFx0LyogTlVMTCBwcG9zIG1lYW5zIG5vIHJhbmdlIGluZm8gKi9cXG4tXFx0cGV2ZW50LVxcdTAwM2VwcG9zID0gcmFuZ2UgPyBcXHUwMDI2cmFuZ2UtXFx1MDAzZXBvcyA6IE5VTEw7XFxuK1xcdHBldmVudC1cXHUwMDNlcG9zID0gcmFuZ2UgPyByYW5nZS1cXHUwMDNlcG9zIDogRkFOT1RJRllfTk9fUkFOR0U7XFxuIFxcdHBldmVudC1cXHUwMDNlY291bnQgPSByYW5nZSA/IHJhbmdlLVxcdTAwM2Vjb3VudCA6IDA7XFxuIFxcdHBhdGhfZ2V0KHBhdGgpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmggYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuaFxcbmluZGV4IGEwNjE5ZTc2OTRkNTcuLjM3MTA1NDNkYmY4MjcgMTAwNjQ0XFxuLS0tIGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmhcXG4rKysgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuaFxcbkBAIC00MjgsNiArNDI4LDggQEAgRkFOT1RJRllfTUUoc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpldmVudClcXG4gXFx0cmV0dXJuIGNvbnRhaW5lcl9vZihldmVudCwgc3RydWN0IGZhbm90aWZ5X21udF9ldmVudCwgZmFlKTtcXG4gfVxcbiBcXG4rI2RlZmluZSBGQU5PVElGWV9OT19SQU5HRVxcdCgobG9mZl90KS0xKVxcbitcXG4gLypcXG4gICogU3RydWN0dXJlIGZvciBwZXJtaXNzaW9uIGZhbm90aWZ5IGV2ZW50cy4gSXQgZ2V0cyBhbGxvY2F0ZWQgYW5kIGZyZWVkIGluXFxuICAqIGZhbm90aWZ5X2hhbmRsZV9ldmVudCgpIHNpbmNlIHdlIHdhaXQgdGhlcmUgZm9yIHVzZXIgcmVzcG9uc2UuIFdoZW4gdGhlXFxuQEAgLTQzOCw3ICs0NDAsNyBAQCBGQU5PVElGWV9NRShzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgKmV2ZW50KVxcbiBzdHJ1Y3QgZmFub3RpZnlfcGVybV9ldmVudCB7XFxuIFxcdHN0cnVjdCBmYW5vdGlmeV9ldmVudCBmYWU7XFxuIFxcdHN0cnVjdCBwYXRoIHBhdGg7XFxuLVxcdGNvbnN0IGxvZmZfdCAqcHBvcztcXHRcXHQvKiBvcHRpb25hbCBmaWxlIHJhbmdlIGluZm8gKi9cXG4rXFx0bG9mZl90IHBvcztcXHRcXHRcXHQvKiBGQU5PVElGWV9OT19SQU5HRSBpZiB1bmF2YWlsYWJsZSAqL1xcbiBcXHRzaXplX3QgY291bnQ7XFxuIFxcdHUzMiByZXNwb25zZTtcXHRcXHRcXHQvKiB1c2Vyc3BhY2UgYW5zd2VyIHRvIHRoZSBldmVudCAqL1xcbiBcXHR1bnNpZ25lZCBzaG9ydCBzdGF0ZTtcXHRcXHQvKiBzdGF0ZSBvZiB0aGUgZXZlbnQgKi9cXG5AQCAtNDY4LDcgKzQ3MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmYW5vdGlmeV9ldmVudF9oYXNfYWNjZXNzX3JhbmdlKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQpXFxuIFxcdGlmICghKGV2ZW50LVxcdTAwM2VtYXNrIFxcdTAwMjYgRkFOT1RJRllfUFJFX0NPTlRFTlRfRVZFTlRTKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0cmV0dXJuIEZBTk9USUZZX1BFUk0oZXZlbnQpLVxcdTAwM2VwcG9zO1xcbitcXHRyZXR1cm4gRkFOT1RJRllfUEVSTShldmVudCktXFx1MDAzZXBvcyAhPSBGQU5PVElGWV9OT19SQU5HRTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgKkZBTk9USUZZX0Uoc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpmc2UpXFxuZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jXFxuaW5kZXggYjYwNGUzZGE1OGFkMi4uYmJhOTJkNjkxZjBkYyAxMDA2NDRcXG4tLS0gYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jXFxuKysrIGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuY1xcbkBAIC02NzUsMTIgKzY3NSwxMiBAQCBzdGF0aWMgc2l6ZV90IGNvcHlfcmFuZ2VfaW5mb190b191c2VyKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQsXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoaW5mb19sZW4gXFx1MDAzZSBjb3VudCkpXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXG4tXFx0aWYgKFdBUk5fT05fT05DRSghcGV2ZW50LVxcdTAwM2VwcG9zKSlcXG4rXFx0aWYgKFdBUk5fT05fT05DRShwZXZlbnQtXFx1MDAzZXBvcyA9PSBGQU5PVElGWV9OT19SQU5HRSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aW5mby5oZHIuaW5mb190eXBlID0gRkFOX0VWRU5UX0lORk9fVFlQRV9SQU5HRTtcXG4gXFx0aW5mby5oZHIubGVuID0gaW5mb19sZW47XFxuLVxcdGluZm8ub2Zmc2V0ID0gKihwZXZlbnQtXFx1MDAzZXBwb3MpO1xcbitcXHRpbmZvLm9mZnNldCA9IHBldmVudC1cXHUwMDNlcG9zO1xcbiBcXHRpbmZvLmNvdW50ID0gcGV2ZW50LVxcdTAwM2Vjb3VudDtcXG4gXFxuIFxcdGlmIChjb3B5X3RvX3VzZXIoYnVmLCBcXHUwMDI2aW5mbywgaW5mb19sZW4pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDowNjowOC44NjM0Mjg3NzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNDIwMzgwMjAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGQU5PVElGWVwiLFxuICAgIFwiRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmFub3RpZnlfaGFuZGxlX2V2ZW50XCIsXG4gICAgXCJmYW5vdGlmeV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSByYW5nZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgYW5kIGNvcGllZCB0byB1c2Vyc3BhY2UgZm9yIGZhbm90aWZ5IHBlcm1pc3Npb24gZXZlbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZmFub3RpZnkgbG9naWMuIEl0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTZmOTMyOTBlYTRmY2E2NTEzNjlkYzI1NmM0ZTVmNzA3OGM0MTY4MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDQ6MDY6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jXG5pbmRleCBhMzU1NWJlYmFkNjNlLi5iMDViNmQzYWJiODcwIDEwMDY0NFxuLS0tIGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmNcbisrKyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jXG5AQCAtNjAwLDggKzYwMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgKmZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnQoY29uc3Qgdm9pZCAqZGF0YSxcbiBcdHBldmVudC1cdTAwM2VoZHIubGVuID0gMDtcbiBcdHBldmVudC1cdTAwM2VzdGF0ZSA9IEZBTl9FVkVOVF9JTklUO1xuIFx0cGV2ZW50LVx1MDAzZXBhdGggPSAqcGF0aDtcbi1cdC8qIE5VTEwgcHBvcyBtZWFucyBubyByYW5nZSBpbmZvICovXG4tXHRwZXZlbnQtXHUwMDNlcHBvcyA9IHJhbmdlID8gXHUwMDI2cmFuZ2UtXHUwMDNlcG9zIDogTlVMTDtcbitcdHBldmVudC1cdTAwM2Vwb3MgPSByYW5nZSA/IHJhbmdlLVx1MDAzZXBvcyA6IEZBTk9USUZZX05PX1JBTkdFO1xuIFx0cGV2ZW50LVx1MDAzZWNvdW50ID0gcmFuZ2UgPyByYW5nZS1cdTAwM2Vjb3VudCA6IDA7XG4gXHRwYXRoX2dldChwYXRoKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuaCBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5oXG5pbmRleCBhMDYxOWU3Njk0ZDU3Li4zNzEwNTQzZGJmODI3IDEwMDY0NFxuLS0tIGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmhcbisrKyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5oXG5AQCAtNDI4LDYgKzQyOCw4IEBAIEZBTk9USUZZX01FKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQpXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGV2ZW50LCBzdHJ1Y3QgZmFub3RpZnlfbW50X2V2ZW50LCBmYWUpO1xuIH1cbiBcbisjZGVmaW5lIEZBTk9USUZZX05PX1JBTkdFXHQoKGxvZmZfdCktMSlcbitcbiAvKlxuICAqIFN0cnVjdHVyZSBmb3IgcGVybWlzc2lvbiBmYW5vdGlmeSBldmVudHMuIEl0IGdldHMgYWxsb2NhdGVkIGFuZCBmcmVlZCBpblxuICAqIGZhbm90aWZ5X2hhbmRsZV9ldmVudCgpIHNpbmNlIHdlIHdhaXQgdGhlcmUgZm9yIHVzZXIgcmVzcG9uc2UuIFdoZW4gdGhlXG5AQCAtNDM4LDcgKzQ0MCw3IEBAIEZBTk9USUZZX01FKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQpXG4gc3RydWN0IGZhbm90aWZ5X3Blcm1fZXZlbnQge1xuIFx0c3RydWN0IGZhbm90aWZ5X2V2ZW50IGZhZTtcbiBcdHN0cnVjdCBwYXRoIHBhdGg7XG4tXHRjb25zdCBsb2ZmX3QgKnBwb3M7XHRcdC8qIG9wdGlvbmFsIGZpbGUgcmFuZ2UgaW5mbyAqL1xuK1x0bG9mZl90IHBvcztcdFx0XHQvKiBGQU5PVElGWV9OT19SQU5HRSBpZiB1bmF2YWlsYWJsZSAqL1xuIFx0c2l6ZV90IGNvdW50O1xuIFx0dTMyIHJlc3BvbnNlO1x0XHRcdC8qIHVzZXJzcGFjZSBhbnN3ZXIgdG8gdGhlIGV2ZW50ICovXG4gXHR1bnNpZ25lZCBzaG9ydCBzdGF0ZTtcdFx0Lyogc3RhdGUgb2YgdGhlIGV2ZW50ICovXG5AQCAtNDY4LDcgKzQ3MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmYW5vdGlmeV9ldmVudF9oYXNfYWNjZXNzX3JhbmdlKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQpXG4gXHRpZiAoIShldmVudC1cdTAwM2VtYXNrIFx1MDAyNiBGQU5PVElGWV9QUkVfQ09OVEVOVF9FVkVOVFMpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyZXR1cm4gRkFOT1RJRllfUEVSTShldmVudCktXHUwMDNlcHBvcztcbitcdHJldHVybiBGQU5PVElGWV9QRVJNKGV2ZW50KS1cdTAwM2Vwb3MgIT0gRkFOT1RJRllfTk9fUkFOR0U7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpGQU5PVElGWV9FKHN0cnVjdCBmc25vdGlmeV9ldmVudCAqZnNlKVxuZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jXG5pbmRleCBiNjA0ZTNkYTU4YWQyLi5iYmE5MmQ2OTFmMGRjIDEwMDY0NFxuLS0tIGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuY1xuKysrIGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuY1xuQEAgLTY3NSwxMiArNjc1LDEyIEBAIHN0YXRpYyBzaXplX3QgY29weV9yYW5nZV9pbmZvX3RvX3VzZXIoc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpldmVudCxcbiBcdGlmIChXQVJOX09OX09OQ0UoaW5mb19sZW4gXHUwMDNlIGNvdW50KSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFwZXZlbnQtXHUwMDNlcHBvcykpXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHBldmVudC1cdTAwM2Vwb3MgPT0gRkFOT1RJRllfTk9fUkFOR0UpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGluZm8uaGRyLmluZm9fdHlwZSA9IEZBTl9FVkVOVF9JTkZPX1RZUEVfUkFOR0U7XG4gXHRpbmZvLmhkci5sZW4gPSBpbmZvX2xlbjtcbi1cdGluZm8ub2Zmc2V0ID0gKihwZXZlbnQtXHUwMDNlcHBvcyk7XG4rXHRpbmZvLm9mZnNldCA9IHBldmVudC1cdTAwM2Vwb3M7XG4gXHRpbmZvLmNvdW50ID0gcGV2ZW50LVx1MDAzZWNvdW50O1xuIFxuIFx0aWYgKGNvcHlfdG9fdXNlcihidWYsIFx1MDAyNmluZm8sIGluZm9fbGVuKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjA2OjA4Ljg2MzQzMDg2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMTUyNTM2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgRmFub3RpZnkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQncyB0b3VjaGluZyBmYW5vdGlmeSwgc3BlY2lmaWNhbGx5IHRoZSBjb3JlIGZpbGVzOiBgZmFub3RpZnkuY2AsIGBmYW5vdGlmeS5oYCwgYW5kIGBmYW5vdGlmeV91c2VyLmNgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBmYW5vdGlmeSBpcyBhIGdvb2QgdGFyZ2V0LiBJIHNlZSB0aGF0IHRoZSBwYXRjaCdzIGNlbnRyYWwgbW9kaWZpY2F0aW9uIGludm9sdmVzIHJlcGxhY2luZyBhIHBvaW50ZXIgdG8gYSBgbG9mZl90YCAoYSBsb25nIGxvbmcgb2Zmc2V0KSB3aXRoIGEgZGlyZWN0IGBsb2ZmX3RgIHZhbHVlIHdpdGhpbiB0aGUgYGZhbm90aWZ5X3Blcm1fZXZlbnRgIHN0cnVjdC4gVGhpcyBsb29rcyBsaWtlIGl0J3Mgc2ltcGxpZnlpbmcgdGhlIGNvZGUsIGxpa2VseSByZW1vdmluZyBhbiB1bm5lY2Vzc2FyeSBpbmRpcmVjdGlvbiwgb3IgbWF5YmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBvZmYtYnktb25lIG9yIGRhdGEtcmFjZSBpc3N1ZSB3aXRoIHRoZSBwb2ludGVyLCBvciBzaW1wbGlmeWluZyB0aGUgbG9naWMuXG5cblRoZSBjcnVjaWFsIGNoYW5nZXMgYXJlIGluIGhvdyBgcG9zYCAoZm9ybWVybHkgcG9pbnRlZCB0byBieSBgcHBvc2ApIGlzIGhhbmRsZWQgbm93OiBpbnN0ZWFkIG9mIHN0b3JpbmcgdGhlIHBvaW50ZXIsIGBGQU5PVElGWV9OT19SQU5HRWAgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGFic2VuY2Ugb2YgYSByYW5nZS4gVGhlIGNoZWNrcyBhbHNvIHJlZmxlY3QgdGhpcyBjaGFuZ2UgZnJvbSBgcHBvc2AgYmVpbmcgY2hlY2tlZCBmb3IgbnVsbCwgdG8gYHBvc2AgYmVpbmcgY2hlY2tlZCBhZ2FpbnN0IHRoaXMgbmV3IGBGQU5PVElGWV9OT19SQU5HRWAgdmFsdWUuIFNvIGl0J3MgdmVyeSBsaWtlbHkgYSByZWZhY3RvcmluZywgbWF5YmUgd2l0aCBhIGJ1ZyBmaXggYmFrZWQgaW4uXG5cbkdpdmVuIHRoaXMsIEkgbmVlZCB0byBnZXQgdGhpcyBjb3ZlcmVkIGJ5IGZ1enppbmcsIGFuZCBxdWlja2x5LiBTbyBsZXQgbWUgcHVsbCB1cCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBPYnZpb3VzbHksIEknbGwgbmVlZCBgQ09ORklHX0ZBTk9USUZZYCBlbmFibGVkIHRvIGV2ZW4gcmVhY2ggdGhpcyBjb2RlLiBQcm9iYWJseSBgQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU2AgaXMgbmVlZGVkIGFzIHdlbGwuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgaW5zaWRlIGBmcy9ub3RpZnkvZmFub3RpZnkvS2NvbmZpZ2AgdG8gYmUgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MDY6MTQuMDc4Njg3MzUxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTA3MDY4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRkFOT1RJRllcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9ub3RpZnkvZmFub3RpZnkvS2NvbmZpZzoyOmNvbmZpZyBGQU5PVElGWVxcbmZzL25vdGlmeS9mYW5vdGlmeS9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiRmlsZXN5c3RlbSB3aWRlIGFjY2VzcyBub3RpZmljYXRpb25cXFwiXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvS2NvbmZpZy0xNC1cXG5mcy9ub3RpZnkvZmFub3RpZnkvS2NvbmZpZzoxNTpjb25maWcgRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWctMTYtXFx0Ym9vbCBcXFwiZmFub3RpZnkgcGVybWlzc2lvbnMgY2hlY2tpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjA2OjE0LjE4OTc2NDg1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTYyNDk1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBQb3RlbnRpYWwgRGF0YSBMZWFrYWdlIGluIEZhbm90aWZ5KipcblxuQWxyaWdodCwgbXkgaW50ZXJuYWwgY2hlY2tsaXN0IGhhcyBmbGFnZ2VkIHNvbWV0aGluZyB0aGF0IGFsd2F5cyB3YXJyYW50cyBhIGNsb3NlciBsb29rOiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gZmlsZSBub3RpZmljYXRpb24gZXZlbnRzIGFuZCBkYXRhIG1vdmVtZW50LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBhIHBvdGVudGlhbCBhdmVudWUgZm9yIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBsZWFrYWdlLiBNeSBpbW1lZGlhdGUgZm9jdXMgbGFuZHMgb24gdHdvIGtleSBmdW5jdGlvbnMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gcmV2aXNpdCBgZmFub3RpZnlfYWxsb2NfcGVybV9ldmVudGAuIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIGV4YWN0bHkgd2hhdCBkYXRhIGlzIGJlaW5nIHBvcHVsYXRlZCB3aXRoaW4gYSBwZXJtaXNzaW9uIGV2ZW50LiBXaGF0IGZpZWxkcyBhcmUgcG9wdWxhdGVkLCBhbmQgY3JpdGljYWxseSwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZGF0YSByZW1uYW50cyBmcm9tIHByZXZpb3VzIG9wZXJhdGlvbnMsIG9yIHBlcmhhcHMgdW5pbml0aWFsaXplZCBtZW1vcnksIHRoYXQgY291bGQgaW5hZHZlcnRlbnRseSBleHBvc2UgaW5mb3JtYXRpb24/IEknbSBwYXJ0aWN1bGFybHkgY29uY2VybmVkIGFib3V0IGFueSBjb25uZWN0aW9uIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNhbGxpbmcgcHJvY2VzcyAtIGlzIHRoZXJlIGEgY2hhbmNlIHRoYXQgaWRlbnRpZmllcnMsIGZpbGUgcGF0aHMsIG9yIGV2ZW4gaW50ZXJuYWwga2VybmVsIGRhdGEgY291bGQgbGVhayB0aHJvdWdoIHRoaXMgbWVjaGFuaXNtP1xuXG5OZXh0LCBteSBhdHRlbnRpb24gc2hpZnRzIHRvIGBjb3B5X3JhbmdlX2luZm9fdG9fdXNlcmAuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIHBpdm90YWwgY29tcG9uZW50IGZvciB0cmFuc21pdHRpbmcgdGhlIGV2ZW50IGRldGFpbHMgYmFjayB0byB1c2VyIHNwYWNlLiBNeSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyBkYXRhIGludGVncml0eS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IG9ubHkgc2FuaXRpemVkLCBhdXRob3JpemVkIGRhdGEgaXMgYmVpbmcgdHJhbnNmZXJyZWQuIEnigJltIHRoaW5raW5nIGFib3V0IHBvc3NpYmxlIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmVzLiBBcmUgdGhlcmUgc3RyaWN0IGJvdW5kcyBjaGVja3MsIGFyZSBidWZmZXJzIHByb3Blcmx5IGluaXRpYWxpemVkLCBhcmUgdGhlcmUgYW55IGJ5cGFzc2VzLCBhbmQgYXJlIGFueSBzdWJ0bGUgaW50ZWdlciBvdmVyZmxvd3MgcHJlc2VudD8gSeKAmW0gZ29pbmcgdG8gZm9jdXMgb24gaG93IHRoZSBpbmZvcm1hdGlvbiByYW5nZSBkYXRhIGlzIGJlaW5nIHZhbGlkYXRlZCBhbmQgcHJlc2VudGVkIHRvIHRoZSB1c2VyLiBJIG5lZWQgdG8ga25vdyBleGFjdGx5IGhvdyB0aGlzIHJhbmdlIGluZm9ybWF0aW9uIGlzIGJ1aWx0IGZyb20gdGhlIGtlcm5lbCdzIGludGVybmFsIHJlcHJlc2VudGF0aW9uLCBtYWtpbmcgc3VyZSB0aGVyZSdzIG5vIHdheSB0byB0cmljayB0aGUgc3lzdGVtIGludG8gcmVsZWFzaW5nIG1vcmUgZGF0YSB0aGFuIGl0IHNob3VsZC4gVWx0aW1hdGVseSwgSSdtIHRyeWluZyB0byBlbnN1cmUgdGhhdCBhIG1hbGljaW91cyB1c2VyIGNhbm5vdCBjcmFmdCBhIHNwZWNpYWxseS1kZXNpZ25lZCByZXF1ZXN0IHRoYXQgd291bGQgbGVhZCB0byBhIGRhdGEgYnJlYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzIyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MDY6MTguMDA2MDE2NTM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTMzMzU1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTU2OT1zdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19tbnRfZXZlbnQodTY0IG1udF9pZCwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtNTgyLVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jOjU4MzpzdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50KGNvbnN0IHZvaWQgKmRhdGEsXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtNTg0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGludCBkYXRhX3R5cGUsXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYz03NDM9c3RhdGljIHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZmFub3RpZnlfYWxsb2NfZXZlbnQoXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NTEtXFx0aWYgKGZhbm90aWZ5X2lzX3Blcm1fZXZlbnQobWFzaykpIHtcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYzo4NTI6XFx0XFx0ZXZlbnQgPSBmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50KGRhdGEsIGRhdGFfdHlwZSwgZ2ZwKTtcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NTMtXFx0fSBlbHNlIGlmIChmYW5vdGlmeV9pc19lcnJvcl9ldmVudChtYXNrKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDowNjoxOC4xMTUzNTUzMTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTMzODYzMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgY29weV9yYW5nZV9pbmZvX3RvX3VzZXJgLCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkFuYWx5emluZyB0aGUgYGNvcHlfcmFuZ2VfaW5mb190b191c2VyYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGlzIGBjb3B5X3JhbmdlX2luZm9fdG9fdXNlcmAgZnVuY3Rpb24uIE15IGluaXRpYWwgZ3V0IHRlbGxzIG1lIGl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIHRyYW5zZmVycmluZyBkYXRhIGFib3V0IGEgc3BlY2lmaWMgcmFuZ2Ug4oCTIHRoaW5rIGNlbGxzLCByb3dzLCBjb2x1bW5zLCBvciBhIGJsb2NrIG9mIHRoZW0g4oCTIGZyb20gc29tZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiwgbGlrZWx5IGluIHRoZSBzeXN0ZW0ncyBjb3JlLCB0byB0aGUgdXNlci4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgY29uc2lkZXJpbmcgd2hhdCBraW5kIG9mIFwiaW5mb1wiIHdlJ3JlIHRhbGtpbmcgYWJvdXQgaGVyZS4gSXMgaXQganVzdCB0aGUgZGF0YSB2YWx1ZXMgdGhlbXNlbHZlcz8gT3IgYXJlIHdlIGNvbnNpZGVyaW5nIGZvcm1hdHMsIGZvcm11bGFzLCBjb21tZW50cywgdmFsaWRhdGlvbiBydWxlcywgYWxsIHRoZSBtZXRhZGF0YT8gQW5kIGNydWNpYWxseSwgd2hhdCdzIHRoZSBzb3VyY2UgYW5kIHRhcmdldD8gVGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB3ZSdyZSB1c2luZyBvbiBvbmUgZW5kLCBhbmQgdGhlIGZvcm1hdCB0aGUgdXNlci1mYWNpbmcgc2lkZSBpcyBleHBlY3Rpbmcgb24gdGhlIG90aGVyLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyByaWdodCBhd2F5LiBEYXRhIHRyYW5zZmVyIGNhbiBiZSBzdXJwcmlzaW5nbHkgc2xvdywgZXNwZWNpYWxseSB3aXRoIGxhcmdlIHJhbmdlcy4gU28sIEkgbmVlZCB0byBjb25zaWRlcjpcblxuKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIEhvdyBhcmUgdGhlIGRhdGEgc3RydWN0dXJlcyBvbiBib3RoIGVuZHMgb3JnYW5pemVkPyBJcyB0aGVyZSBhIG5lZWQgZm9yIGNvbnZlcnNpb24gb3IgcmVzdHJ1Y3R1cmluZyB0byBtYXRjaCB0aGUgdXNlcidzIGV4cGVjdGVkIGZvcm1hdD8gV2hhdCdzIHRoZSB0aW1lIGNvbXBsZXhpdHkgb2YgdGhlIG9wZXJhdGlvbj9cbiogICAqKk1lbW9yeSBNYW5hZ2VtZW50OioqIEhvdyBtdWNoIG1lbW9yeSB3aWxsIGJlIHJlcXVpcmVkIGZvciB0aGlzIG9wZXJhdGlvbiwgZXNwZWNpYWxseSBmb3IgbGFyZ2UgcmFuZ2VzPyBBcmUgd2UgZWZmaWNpZW50bHkgdXRpbGl6aW5nIG1lbW9yeSwgb3IgbWlnaHQgdGhpcyBvcGVyYXRpb24gYmVjb21lIGEgbWVtb3J5IGhvZz8gQXJlIHdlIGNvcHlpbmcgZGF0YSwgb3IgYXJlIHdlIHBhc3NpbmcgcmVmZXJlbmNlcz9cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiB0aGVyZSdzIGEgcHJvYmxlbSBjb3B5aW5nIGEgc3BlY2lmaWMgY2VsbCdzIGluZm9ybWF0aW9uPyBIb3cgaXMgaXQgaGFuZGxlZD8gRG9lcyBpdCBmYWlsIHNpbGVudGx5LCBvciBkb2VzIGl0IHRyaWdnZXIgYW4gZXhjZXB0aW9uPyBEb2VzIGl0IGxvZyB1c2VmdWwgaW5mb3JtYXRpb24/XG4qICAgKipTZWN1cml0eToqKiBJZiB3ZSdyZSB3b3JraW5nIHdpdGggc2Vuc2l0aXZlIGRhdGEsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZGF0YSB0cmFuc2ZlciBpcyBzZWN1cmUsIGFkaGVyaW5nIHRvIGFjY2VzcyBjb250cm9scyBhbmQgcGVybWlzc2lvbnMuXG4qICAgKipDb25jdXJyZW5jeToqKiBJcyB0aGlzIGZ1bmN0aW9uIHRocmVhZC1zYWZlPyBEb2VzIGl0IG5lZWQgdG8gYmU/IElmIG11bHRpcGxlIHVzZXJzIGFyZSBzaW11bHRhbmVvdXNseSByZXF1ZXN0aW5nIGRhdGEsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgb3VyIGNvbmN1cnJlbmN5IGRlc2lnbiBpcyBzb2xpZC5cblxuSSdtIGFsc28gYW50aWNpcGF0aW5nIHRoYXQgdGhlIHRhcmdldCBzaWRlIGV4cGVjdHMgYSBzcGVjaWZpYyBmb3JtYXQuIEkgd2FudCB0byBsb29rIGludG8gaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHRoZXNlIGNvbnNpZGVyYXRpb25zLiBJcyB0aGlzIGEgc2ltcGxlIGRhdGEgY29weSwgb3IgZG8gd2UgaGF2ZSB0cmFuc2Zvcm1hdGlvbiBsb2dpYyBhdCBwbGF5PyBBIHJvYnVzdCBmdW5jdGlvbiB3aWxsIGhhbmRsZSBwb3RlbnRpYWwgZGF0YSB0eXBlIG1pc21hdGNoZXMsIG1pc3NpbmcgdmFsdWVzIGdyYWNlZnVsbHkuIEkgZXhwZWN0IHRvIGFsc28gZXZhbHVhdGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGZ1bmN0aW9uIHdoZW4gaXQgY29tZXMgdG8gZWRnZSBjYXNlcy5cbkVzc2VudGlhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2UsIGRhdGEgaW50ZWdyaXR5LCBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlLCBhbGwgaW4gcmVsYXRpb24gdG8gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1c2VyIGludGVyZmFjZSBhbmQgb3ZlcmFsbCBhcHBsaWNhdGlvbiBkZXNpZ24uIExldCdzIHNlZSBob3cgaXQncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ2MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjA2OjIzLjI0OTIyMTAyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODE4NjE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3B5X3JhbmdlX2luZm9fdG9fdXNlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM9NjQ4PXN0YXRpYyBpbnQgY29weV9waWRmZF9pbmZvX3RvX3VzZXIoaW50IHBpZGZkLFxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy02NjctXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzo2Njg6c3RhdGljIHNpemVfdCBjb3B5X3JhbmdlX2luZm9fdG9fdXNlcihzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgKmV2ZW50LFxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMtNjY5LVxcdFxcdFxcdFxcdCAgICAgIGNoYXIgX191c2VyICpidWYsIGludCBjb3VudClcXG4tLVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM9NjkyPXN0YXRpYyBpbnQgY29weV9pbmZvX3JlY29yZHNfdG9fdXNlcihzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgKmV2ZW50LFxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy04MTMtXFx0aWYgKGZhbm90aWZ5X2V2ZW50X2hhc19hY2Nlc3NfcmFuZ2UoZXZlbnQpKSB7XFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzo4MTQ6XFx0XFx0cmV0ID0gY29weV9yYW5nZV9pbmZvX3RvX3VzZXIoZXZlbnQsIGJ1ZiwgY291bnQpO1xcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMtODE1LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDowNjoyMy4zMTc0MTE2OTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDc2NjI2NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgRmFub3RpZnkgRXZlbnQgSGFuZGxpbmcqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnRgIGFuZCBgY29weV9yYW5nZV9pbmZvX3RvX3VzZXJgLiBJJ3ZlIGdvdCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IHRvIHVuZGVyc3RhbmQgdGhlIGtleSBhcmVhcyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uIGBmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50YCBpcyBpbnRlcm5hbCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEl0J3MgY2FsbGVkIGJ5IGBmYW5vdGlmeV9hbGxvY19ldmVudGAsIHdoaWNoIGlzIGFsc28gaW50ZXJuYWwsIGFuZCB0aGF0IGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBmYW5vdGlmeV9oYW5kbGVfZXZlbnRgLiBUaGF0IGdpdmVzIG1lIGEgcGF0aDogYGZhbm90aWZ5X2hhbmRsZV9ldmVudGAgXHUwMDNlIGBmYW5vdGlmeV9hbGxvY19ldmVudGAgXHUwMDNlIGBmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50YC4gTWFrZXMgc2Vuc2UsIHNvIGBmYW5vdGlmeV9oYW5kbGVfZXZlbnRgIGlzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gdGhhdCBzaWRlLlxuXG5PbiB0aGUgb3RoZXIgaGFuZCwgYGNvcHlfcmFuZ2VfaW5mb190b191c2VyYCBpcyBpbnRlcm5hbCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBjb3B5X2luZm9fcmVjb3Jkc190b191c2VyYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBjb3B5X2V2ZW50X3RvX3VzZXJgLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBmYW5vdGlmeV9yZWFkYC4gVGhhdCdzIGEgY2xlYXIgY2FsbCBzdGFjazogYGZhbm90aWZ5X3JlYWRgIFx1MDAzZSBgY29weV9ldmVudF90b191c2VyYCBcdTAwM2UgYGNvcHlfaW5mb19yZWNvcmRzX3RvX3VzZXJgIFx1MDAzZSBgY29weV9yYW5nZV9pbmZvX3RvX3VzZXJgLiBTbywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgYWxsIHdvcmtzLCBgZmFub3RpZnlfcmVhZGAgaXMgYW5vdGhlciBjcml0aWNhbCBhcmVhLCBhbmQgSSBzaG91bGQgZm9jdXMgaGVyZS5cblxuU28sIGluIHNob3J0LCB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB0aGUgY29yZSBldmVudCBoYW5kbGluZyBhbmQgZGF0YSBjb3B5aW5nLCBJIG5lZWQgdG8gZGVsdmUgaW50byBgZmFub3RpZnlfaGFuZGxlX2V2ZW50YCBhbmQgYGZhbm90aWZ5X3JlYWRgLiBUaGV5J3JlIHRoZSB2aXNpYmxlIGVudHJ5IHBvaW50cyBmb3IgcHJvY2Vzc2luZyBldmVudHMgYW5kIGNvcHlpbmcgaW5mb3JtYXRpb24gYmFjayB0byB1c2VyIHNwYWNlLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBtb3N0IGZydWl0ZnVsIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mzg4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjA2OjI3Ljc5NDA0MDM3N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU1MjA1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmFub3RpZnlfaGFuZGxlX2V2ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTE4MD1zdGF0aWMgaW50IGZhbm90aWZ5X21lcmdlKHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy0xOTItXFx0ICogRG9uJ3QgbWVyZ2UgYSBwZXJtaXNzaW9uIGV2ZW50IHdpdGggYW55IG90aGVyIGV2ZW50IHNvIHRoYXQgd2Uga25vd1xcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jOjE5MzpcXHQgKiB0aGUgZXZlbnQgc3RydWN0dXJlIHdlIGhhdmUgY3JlYXRlZCBpbiBmYW5vdGlmeV9oYW5kbGVfZXZlbnQoKSBpcyB0aGVcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy0xOTQtXFx0ICogb25lIHdlIHNob3VsZCBjaGVjayBmb3IgcGVybWlzc2lvbiByZXNwb25zZS5cXG4tLVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTkwOD1zdGF0aWMgdm9pZCBmYW5vdGlmeV9pbnNlcnRfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCxcXG4tLVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jLTkyNS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYzo5MjY6c3RhdGljIGludCBmYW5vdGlmeV9oYW5kbGVfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwgdTMyIG1hc2ssXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtOTI3LVxcdFxcdFxcdFxcdCBjb25zdCB2b2lkICpkYXRhLCBpbnQgZGF0YV90eXBlLFxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM9MTExND1jb25zdCBzdHJ1Y3QgZnNub3RpZnlfb3BzIGZhbm90aWZ5X2Zzbm90aWZ5X29wcyA9IHtcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYzoxMTE1OlxcdC5oYW5kbGVfZXZlbnQgPSBmYW5vdGlmeV9oYW5kbGVfZXZlbnQsXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtMTExNi1cXHQuZnJlZV9ncm91cF9wcml2ID0gZmFub3RpZnlfZnJlZV9ncm91cF9wcml2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDowNjoyNy44NDk1NzE1OTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMzMxMzEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOlxuXG4qKkRpdmluZyBpbnRvIGZhbm90aWZ5IEludGVybmFscyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgZmFub3RpZnlgIHN5c3RlbSBjYWxscywgc3BlY2lmaWNhbGx5IGhvdyB0aGV5IGludGVyZmFjZSB3aXRoIHRoZSBrZXJuZWwuIEkgc2VlIHRoYXQgYGZhbm90aWZ5X2hhbmRsZV9ldmVudGAgaXMgKnRoZSogcG9pbnQgb2YgZW50cnkgZm9yIHRoZSBgZnNub3RpZnlfb3BzYCBzdHJ1Y3R1cmUuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIGdhdGVrZWVwZXIsIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IHByb2Nlc3NlcyB0aG9zZSBgZmFub3RpZnlgIGV2ZW50cyB3aGVuIHRoZXkgaGFwcGVuLiBJdCdzIHRoZSBjb3JlIG9mIGhvdyB0aGUgZmlsZSBzeXN0ZW0gbm90aWZpY2F0aW9ucyBhcmUgaGFuZGxlZCB1bmRlciB0aGUgaG9vZC5cblxuVGhlbiwgdGhlcmUncyBgZmFub3RpZnlfcmVhZGAuIFRoaXMgb25lJ3MgY2xlYXJseSBob29raW5nIGludG8gdGhlIGBmaWxlX29wZXJhdGlvbnNgIHN0cnVjdHVyZS4gRXNzZW50aWFsbHksIHRoaXMgaXMgaG93IHVzZXIgc3BhY2UgY2FuICpnZXQqIHRoZSBldmVudHMsIHJlYWRpbmcgdGhlbSBmcm9tIHRoZSBmaWxlIGRlc2NyaXB0b3IuIFNvLCBgZmFub3RpZnlfaGFuZGxlX2V2ZW50YCBwcm9jZXNzZXMgdGhlIGV2ZW50cyB3aGVuIHRoZXkgYXJpc2UsIGFuZCBgZmFub3RpZnlfcmVhZGAgYWxsb3dzIGEgdXNlciBwcm9jZXNzIHRvIHJldHJpZXZlIHRoZSBxdWV1ZWQgZXZlbnRzLiBUaGV54oCZcmUgdGhlIHR3byBzaWRlcyBvZiB0aGUgc2FtZSBjb2luOiBvbmUgZ2VuZXJhdGVzIHRoZSBldmVudCwgdGhlIG90aGVyIHByb3ZpZGVzIGFjY2VzcyB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM1NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjA2OjMxLjA4Mjg4NzUyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIyOTI5NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmFub3RpZnlfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM9OTY0PXN0YXRpYyBfX3BvbGxfdCBmYW5vdGlmeV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy05NzctXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzo5Nzg6c3RhdGljIHNzaXplX3QgZmFub3RpZnlfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTk3OS1cXHRcXHRcXHQgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jPTExNjk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmFub3RpZnlfZm9wcyA9IHtcXG4tLVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMtMTE3MS1cXHQucG9sbFxcdFxcdD0gZmFub3RpZnlfcG9sbCxcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jOjExNzI6XFx0LnJlYWRcXHRcXHQ9IGZhbm90aWZ5X3JlYWQsXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xMTczLVxcdC53cml0ZVxcdFxcdD0gZmFub3RpZnlfd3JpdGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjA2OjMxLjE4NTE4NTk3NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg4Mzc2MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRmFub3RpZnkgRXZlbnQgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHRoZSBjb3JlIGZ1bmN0aW9ucyBhZmZlY3RlZCBoZXJlIHNlZW0gdG8gYmUgYGZhbm90aWZ5X2hhbmRsZV9ldmVudGAgYW5kIGBmYW5vdGlmeV9yZWFkYC4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbml0ZWx5IGBGQU5PVElGWWAgYW5kIGBGQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlNgLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBlbmFibGluZyB0aGUgZnVuY3Rpb25hbGl0eS5cblxuVGhlIGtleSBjaGFuZ2UsIGZyb20gd2hhdCBJJ20gc2VlaW5nLCBpcyBob3cgdGhlIHJhbmdlIGluZm9ybWF0aW9uIGlzIGJlaW5nIGhhbmRsZWQgd2l0aGluIHRoZSBgc3RydWN0IGZhbm90aWZ5X3Blcm1fZXZlbnRgLiBJbnN0ZWFkIG9mIHVzaW5nIGEgcG9pbnRlciB0byBzdG9yZSB0aGUgcmFuZ2UgZGF0YSwgdGhleSdyZSBzd2l0Y2hpbmcgdG8gc3RvcmluZyB0aGUgdmFsdWUgZGlyZWN0bHkuIEFuZCwgaW1wb3J0YW50bHksIGBGQU5PVElGWV9OT19SQU5HRWAgaXMgYmVpbmcgdXNlZCB0byBzaWduaWZ5IHdoZW4gbm8gcmFuZ2UgaXMgcHJlc2VudC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlOyBpdCdzIGdvaW5nIHRvIGltcGFjdCBob3cgd2UgYWNjZXNzIGFuZCBpbnRlcnByZXQgdGhpcyBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIHdoZW4gY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucy5cblxuTm93LCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIGludGVyYWN0cyB3aXRoIGFueSBvdGhlciBjb25maWd1cmF0aW9ucy4gTXkgcmVjb2xsZWN0aW9uIGlzIHRoYXQgYEZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU2AgaXMgcmVxdWlyZWQgYnkgYGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnRgLCBzbyBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZG9lc24ndCBjcmVhdGUgYW55IHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zIG9yIGRlcGVuZGVuY2llcy4gVGltZSB0byBkaWcgYSBiaXQgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTY0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjA2OjM1LjU3MzU5NTA2OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkxNjIwMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmFub3RpZnlfYWxsb2NfcGVybV9ldmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9ub3RpZnkvZmFub3RpZnkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTU2OT1zdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19tbnRfZXZlbnQodTY0IG1udF9pZCwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtNTgyLVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jOjU4MzpzdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50KGNvbnN0IHZvaWQgKmRhdGEsXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtNTg0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGludCBkYXRhX3R5cGUsXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYz03NDM9c3RhdGljIHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZmFub3RpZnlfYWxsb2NfZXZlbnQoXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NTEtXFx0aWYgKGZhbm90aWZ5X2lzX3Blcm1fZXZlbnQobWFzaykpIHtcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYzo4NTI6XFx0XFx0ZXZlbnQgPSBmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50KGRhdGEsIGRhdGFfdHlwZSwgZ2ZwKTtcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NTMtXFx0fSBlbHNlIGlmIChmYW5vdGlmeV9pc19lcnJvcl9ldmVudChtYXNrKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDowNjozNS42NDI3NjIwMDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5MDUxMTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gdGhlIEZhbm90aWZ5IENvZGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgYGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnRgLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIE15IHByaW1hcnkgY29uY2VybiBpcyB0byBhdm9pZCB0cnlpbmcgdG8gdXNlIHNvbWV0aGluZyB0aGF0IG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgaW4gYSBnaXZlbiBrZXJuZWwgY29uZmlndXJhdGlvbi4gU28sIEkgbmVlZCB0byBpbW1lZGlhdGVseSB2ZXJpZnkgaWYgYGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnRgIGlzIHdyYXBwZWQgd2l0aGluIGFuIGAjaWZkZWZgIGJsb2NrIGZvciBgQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU2AuIElmIHRoYXQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpc24ndCBkZWZpbmVkLCBJIGhhdmUgdG8gYXNzdW1lIHRoZSBmdW5jdGlvbiB3b24ndCBiZSBjb21waWxlZCBhbmQgbXVzdCBiZSBza2lwcGVkLiBJIGNhbid0IHJlbHkgb24gaXRzIGV4aXN0ZW5jZTsgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBmbGFncyBhbmQga2VybmVsIGNvbmZpZyB0byB1bmRlcnN0YW5kIGl0cyBhdmFpbGFiaWxpdHkuIEl0J3MgYSBxdWljayBjaGVjaywgYnV0IGEgY3JpdGljYWwgb25lIGJlZm9yZSBwcm9jZWVkaW5nIGFueSBmdXJ0aGVyIHdpdGggYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9ucy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgSSBzdGFuZCBmcm9tIHRoZSBvdXRzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDowNjozOC43MzMyNzcxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkyMjYwMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9ub3RpZnkvZmFub3RpZnkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5oPTQ2Mj1zdGF0aWMgaW5saW5lIGJvb2wgZmFub3RpZnlfaXNfcGVybV9ldmVudCh1MzIgbWFzaylcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuaC00NjMte1xcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5oOjQ2NDpcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TKSBcXHUwMDI2XFx1MDAyNlxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5oLTQ2NS1cXHRcXHRtYXNrIFxcdTAwMjYgRkFOT1RJRllfUEVSTV9FVkVOVFM7XFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jPTEwNTU9c3RhdGljIHNzaXplX3QgZmFub3RpZnlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTEwNjItXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzoxMDYzOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TKSlcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTEwNjQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jPTE4NTY9c3RhdGljIGludCBkb19mYW5vdGlmeV9tYXJrKGludCBmYW5vdGlmeV9mZCwgdW5zaWduZWQgaW50IGZsYWdzLCBfX3U2NCBtYXNrLFxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xOTE0LVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM6MTkxNTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TKSlcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTE5MTYtXFx0XFx0dmFsaWRfbWFzayB8PSBGQU5PVElGWV9QRVJNX0VWRU5UUztcXG4tLVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM9MjE1Nj1zdGF0aWMgaW50IF9faW5pdCBmYW5vdGlmeV91c2VyX3NldHVwKHZvaWQpXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTIxODItXFx0XFx0XFx0XFx0XFx0XFx0U0xBQl9QQU5JQyk7XFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzoyMTgzOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19GQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMpKSB7XFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0yMTg0LVxcdFxcdGZhbm90aWZ5X3Blcm1fZXZlbnRfY2FjaGVwID1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MDY6MzguODAyNTA5NTU2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDU2OTM0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogZmFub3RpZnkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGBmYW5vdGlmeWAgc3Vic3lzdGVtLiBUaGUga2V5IGhlcmUsIHRvIG1ha2UgdGhpcyB3b3J0aHdoaWxlIGZvciBmdXp6aW5nLCBpcyB0byBjb25maXJtIGEgZmV3IHRoaW5ncy4gRmlyc3QsIGBmYW5vdGlmeV9pc19wZXJtX2V2ZW50YCBjaGVja3MgZm9yIGBJU19FTkFCTEVEKENPTkZJR19GQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMpYC4gVGhpcyBpcyBzaWduaWZpY2FudCEgU28sIGl0IGxvb2tzIGxpa2UgYEZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU2AgaXMgYWJzb2x1dGVseSByZXF1aXJlZC4gSSBhbHNvIGtub3cgdGhhdCBgRkFOT1RJRllgIGl0c2VsZiBoYXMgdG8gYmUgZW5hYmxlZC5cblxuVGhlcmVmb3JlLCBmb3IgbXkgZnV6emluZyBhcHByb2FjaCwgSSdtIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBlbnRyeSBwb2ludHMsIHNvIEkgd2lsbCBwcmlvcml0aXplIGBmYW5vdGlmeV9oYW5kbGVfZXZlbnRgIGFuZCBgZmFub3RpZnlfcmVhZGAgYXMgY3JpdGljYWwgZnV6eiB0YXJnZXRzLiBUbyBtYWtlIHN1cmUgdGhlIHN1YnN5c3RlbSBpcyBjb25maWd1cmVkIGNvcnJlY3RseSB0byB0cmlnZ2VyIHRoZXNlIGZ1bmN0aW9ucywgSSB3aWxsIHNwZWNpZnkgYEVuYWJsZUNvbmZpZ3M9W1wiRkFOT1RJRllcIiwgXCJGQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlNcIl1gLiBJJ20gY29uZmlkZW50IHRoaXMgc2V0dXAgd2lsbCBnaXZlIG1lIGEgZ29vZCBzaG90IGF0IHJldmVhbGluZyB2dWxuZXJhYmlsaXRpZXMgd2l0aGluIHRoZSBgZmFub3RpZnlgIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU2NSwiT3V0cHV0VG9rZW5zIjoxMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MDY6NDIuOTA4MjEwMzY4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MDEzNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGQU5PVElGWVwiLFxuICAgIFwiRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmFub3RpZnlfaGFuZGxlX2V2ZW50XCIsXG4gICAgXCJmYW5vdGlmeV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSByYW5nZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgYW5kIGNvcGllZCB0byB1c2Vyc3BhY2UgZm9yIGZhbm90aWZ5IHBlcm1pc3Npb24gZXZlbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZmFub3RpZnkgbG9naWMuIEl0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGQU5PVElGWVwiLFxuICAgIFwiRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmFub3RpZnlfaGFuZGxlX2V2ZW50XCIsXG4gICAgXCJmYW5vdGlmeV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSByYW5nZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgYW5kIGNvcGllZCB0byB1c2Vyc3BhY2UgZm9yIGZhbm90aWZ5IHBlcm1pc3Npb24gZXZlbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZmFub3RpZnkgbG9naWMuIEl0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflownw68s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 03:46:50 +0000 UTC FinishedAt: 2026-08-01 04:06:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fa20f6cb6063f7f1a6a56693d4a8713f19058d23", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FANOTIFY", "FANOTIFY_ACCESS_PERMISSIONS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fa20f6cb6063f7f1a6a56693d4a8713f19058d23", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FANOTIFY", "FANOTIFY_ACCESS_PERMISSIONS" ], "series_id": "ebddd7f6-8f8b-4746-9cde-7e823f7b11f3" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "fanotify_handle_event", "fanotify_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZBTk9USUZZJiMzNDssCiAgICAmIzM0O0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Zhbm90aWZ5X2hhbmRsZV9ldmVudCYjMzQ7LAogICAgJiMzNDtmYW5vdGlmeV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB3YXkgcmFuZ2UgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGFuZCBjb3BpZWQgdG8gdXNlcnNwYWNlIGZvciBmYW5vdGlmeSBwZXJtaXNzaW9uIGV2ZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGZhbm90aWZ5IGxvZ2ljLiBJdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5NmY5MzI5MGVhNGZjYTY1MTM2OWRjMjU2YzRlNWY3MDc4YzQxNjgxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwNDowNjowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jXG5pbmRleCBhMzU1NWJlYmFkNjNlLi5iMDViNmQzYWJiODcwIDEwMDY0NFxuLS0tIGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jXG5AQCAtNjAwLDggJiM0Mzs2MDAsNyBAQCBzdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50KGNvbnN0IHZvaWQgKmRhdGEsXG4gXHRwZXZlbnQtXHUwMDNlaGRyLmxlbiA9IDA7XG4gXHRwZXZlbnQtXHUwMDNlc3RhdGUgPSBGQU5fRVZFTlRfSU5JVDtcbiBcdHBldmVudC1cdTAwM2VwYXRoID0gKnBhdGg7XG4tXHQvKiBOVUxMIHBwb3MgbWVhbnMgbm8gcmFuZ2UgaW5mbyAqL1xuLVx0cGV2ZW50LVx1MDAzZXBwb3MgPSByYW5nZSA/IFx1MDAyNnJhbmdlLVx1MDAzZXBvcyA6IE5VTEw7XG4mIzQzO1x0cGV2ZW50LVx1MDAzZXBvcyA9IHJhbmdlID8gcmFuZ2UtXHUwMDNlcG9zIDogRkFOT1RJRllfTk9fUkFOR0U7XG4gXHRwZXZlbnQtXHUwMDNlY291bnQgPSByYW5nZSA/IHJhbmdlLVx1MDAzZWNvdW50IDogMDtcbiBcdHBhdGhfZ2V0KHBhdGgpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5oIGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmhcbmluZGV4IGEwNjE5ZTc2OTRkNTcuLjM3MTA1NDNkYmY4MjcgMTAwNjQ0XG4tLS0gYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmhcbkBAIC00MjgsNiAmIzQzOzQyOCw4IEBAIEZBTk9USUZZX01FKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQpXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGV2ZW50LCBzdHJ1Y3QgZmFub3RpZnlfbW50X2V2ZW50LCBmYWUpO1xuIH1cbiBcbiYjNDM7I2RlZmluZSBGQU5PVElGWV9OT19SQU5HRVx0KChsb2ZmX3QpLTEpXG4mIzQzO1xuIC8qXG4gICogU3RydWN0dXJlIGZvciBwZXJtaXNzaW9uIGZhbm90aWZ5IGV2ZW50cy4gSXQgZ2V0cyBhbGxvY2F0ZWQgYW5kIGZyZWVkIGluXG4gICogZmFub3RpZnlfaGFuZGxlX2V2ZW50KCkgc2luY2Ugd2Ugd2FpdCB0aGVyZSBmb3IgdXNlciByZXNwb25zZS4gV2hlbiB0aGVcbkBAIC00MzgsNyAmIzQzOzQ0MCw3IEBAIEZBTk9USUZZX01FKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQpXG4gc3RydWN0IGZhbm90aWZ5X3Blcm1fZXZlbnQge1xuIFx0c3RydWN0IGZhbm90aWZ5X2V2ZW50IGZhZTtcbiBcdHN0cnVjdCBwYXRoIHBhdGg7XG4tXHRjb25zdCBsb2ZmX3QgKnBwb3M7XHRcdC8qIG9wdGlvbmFsIGZpbGUgcmFuZ2UgaW5mbyAqL1xuJiM0MztcdGxvZmZfdCBwb3M7XHRcdFx0LyogRkFOT1RJRllfTk9fUkFOR0UgaWYgdW5hdmFpbGFibGUgKi9cbiBcdHNpemVfdCBjb3VudDtcbiBcdHUzMiByZXNwb25zZTtcdFx0XHQvKiB1c2Vyc3BhY2UgYW5zd2VyIHRvIHRoZSBldmVudCAqL1xuIFx0dW5zaWduZWQgc2hvcnQgc3RhdGU7XHRcdC8qIHN0YXRlIG9mIHRoZSBldmVudCAqL1xuQEAgLTQ2OCw3ICYjNDM7NDcwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGZhbm90aWZ5X2V2ZW50X2hhc19hY2Nlc3NfcmFuZ2Uoc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpldmVudClcbiBcdGlmICghKGV2ZW50LVx1MDAzZW1hc2sgXHUwMDI2IEZBTk9USUZZX1BSRV9DT05URU5UX0VWRU5UUykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiBGQU5PVElGWV9QRVJNKGV2ZW50KS1cdTAwM2VwcG9zO1xuJiM0MztcdHJldHVybiBGQU5PVElGWV9QRVJNKGV2ZW50KS1cdTAwM2Vwb3MgIT0gRkFOT1RJRllfTk9fUkFOR0U7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpGQU5PVElGWV9FKHN0cnVjdCBmc25vdGlmeV9ldmVudCAqZnNlKVxuZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jXG5pbmRleCBiNjA0ZTNkYTU4YWQyLi5iYmE5MmQ2OTFmMGRjIDEwMDY0NFxuLS0tIGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuY1xuQEAgLTY3NSwxMiAmIzQzOzY3NSwxMiBAQCBzdGF0aWMgc2l6ZV90IGNvcHlfcmFuZ2VfaW5mb190b191c2VyKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQsXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGluZm9fbGVuIFx1MDAzZSBjb3VudCkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuLVx0aWYgKFdBUk5fT05fT05DRSghcGV2ZW50LVx1MDAzZXBwb3MpKVxuJiM0MztcdGlmIChXQVJOX09OX09OQ0UocGV2ZW50LVx1MDAzZXBvcyA9PSBGQU5PVElGWV9OT19SQU5HRSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aW5mby5oZHIuaW5mb190eXBlID0gRkFOX0VWRU5UX0lORk9fVFlQRV9SQU5HRTtcbiBcdGluZm8uaGRyLmxlbiA9IGluZm9fbGVuO1xuLVx0aW5mby5vZmZzZXQgPSAqKHBldmVudC1cdTAwM2VwcG9zKTtcbiYjNDM7XHRpbmZvLm9mZnNldCA9IHBldmVudC1cdTAwM2Vwb3M7XG4gXHRpbmZvLmNvdW50ID0gcGV2ZW50LVx1MDAzZWNvdW50O1xuIFxuIFx0aWYgKGNvcHlfdG9fdXNlcihidWYsIFx1MDAyNmluZm8sIGluZm9fbGVuKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RkFOT1RJRlkmIzM0OywKICAgICYjMzQ7RkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmFub3RpZnlfaGFuZGxlX2V2ZW50JiMzNDssCiAgICAmIzM0O2Zhbm90aWZ5X3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSByYW5nZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgYW5kIGNvcGllZCB0byB1c2Vyc3BhY2UgZm9yIGZhbm90aWZ5IHBlcm1pc3Npb24gZXZlbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZmFub3RpZnkgbG9naWMuIEl0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk2ZjkzMjkwZWE0ZmNhNjUxMzY5ZGMyNTZjNGU1ZjcwNzhjNDE2ODEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDA0OjA2OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYwppbmRleCBhMzU1NWJlYmFkNjNlLi5iMDViNmQzYWJiODcwIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYwpAQCAtNjAwLDggJiM0Mzs2MDAsNyBAQCBzdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50KGNvbnN0IHZvaWQgKmRhdGEsCiAJcGV2ZW50LSZndDtoZHIubGVuID0gMDsKIAlwZXZlbnQtJmd0O3N0YXRlID0gRkFOX0VWRU5UX0lOSVQ7CiAJcGV2ZW50LSZndDtwYXRoID0gKnBhdGg7Ci0JLyogTlVMTCBwcG9zIG1lYW5zIG5vIHJhbmdlIGluZm8gKi8KLQlwZXZlbnQtJmd0O3Bwb3MgPSByYW5nZSA/ICZhbXA7cmFuZ2UtJmd0O3BvcyA6IE5VTEw7CiYjNDM7CXBldmVudC0mZ3Q7cG9zID0gcmFuZ2UgPyByYW5nZS0mZ3Q7cG9zIDogRkFOT1RJRllfTk9fUkFOR0U7CiAJcGV2ZW50LSZndDtjb3VudCA9IHJhbmdlID8gcmFuZ2UtJmd0O2NvdW50IDogMDsKIAlwYXRoX2dldChwYXRoKTsKIApkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmggYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuaAppbmRleCBhMDYxOWU3Njk0ZDU3Li4zNzEwNTQzZGJmODI3IDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuaApAQCAtNDI4LDYgJiM0Mzs0MjgsOCBAQCBGQU5PVElGWV9NRShzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgKmV2ZW50KQogCXJldHVybiBjb250YWluZXJfb2YoZXZlbnQsIHN0cnVjdCBmYW5vdGlmeV9tbnRfZXZlbnQsIGZhZSk7CiB9CiAKJiM0MzsjZGVmaW5lIEZBTk9USUZZX05PX1JBTkdFCSgobG9mZl90KS0xKQomIzQzOwogLyoKICAqIFN0cnVjdHVyZSBmb3IgcGVybWlzc2lvbiBmYW5vdGlmeSBldmVudHMuIEl0IGdldHMgYWxsb2NhdGVkIGFuZCBmcmVlZCBpbgogICogZmFub3RpZnlfaGFuZGxlX2V2ZW50KCkgc2luY2Ugd2Ugd2FpdCB0aGVyZSBmb3IgdXNlciByZXNwb25zZS4gV2hlbiB0aGUKQEAgLTQzOCw3ICYjNDM7NDQwLDcgQEAgRkFOT1RJRllfTUUoc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpldmVudCkKIHN0cnVjdCBmYW5vdGlmeV9wZXJtX2V2ZW50IHsKIAlzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgZmFlOwogCXN0cnVjdCBwYXRoIHBhdGg7Ci0JY29uc3QgbG9mZl90ICpwcG9zOwkJLyogb3B0aW9uYWwgZmlsZSByYW5nZSBpbmZvICovCiYjNDM7CWxvZmZfdCBwb3M7CQkJLyogRkFOT1RJRllfTk9fUkFOR0UgaWYgdW5hdmFpbGFibGUgKi8KIAlzaXplX3QgY291bnQ7CiAJdTMyIHJlc3BvbnNlOwkJCS8qIHVzZXJzcGFjZSBhbnN3ZXIgdG8gdGhlIGV2ZW50ICovCiAJdW5zaWduZWQgc2hvcnQgc3RhdGU7CQkvKiBzdGF0ZSBvZiB0aGUgZXZlbnQgKi8KQEAgLTQ2OCw3ICYjNDM7NDcwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGZhbm90aWZ5X2V2ZW50X2hhc19hY2Nlc3NfcmFuZ2Uoc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpldmVudCkKIAlpZiAoIShldmVudC0mZ3Q7bWFzayAmYW1wOyBGQU5PVElGWV9QUkVfQ09OVEVOVF9FVkVOVFMpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gRkFOT1RJRllfUEVSTShldmVudCktJmd0O3Bwb3M7CiYjNDM7CXJldHVybiBGQU5PVElGWV9QRVJNKGV2ZW50KS0mZ3Q7cG9zICE9IEZBTk9USUZZX05PX1JBTkdFOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqRkFOT1RJRllfRShzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKmZzZSkKZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jCmluZGV4IGI2MDRlM2RhNThhZDIuLmJiYTkyZDY5MWYwZGMgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYwpAQCAtNjc1LDEyICYjNDM7Njc1LDEyIEBAIHN0YXRpYyBzaXplX3QgY29weV9yYW5nZV9pbmZvX3RvX3VzZXIoc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpldmVudCwKIAlpZiAoV0FSTl9PTl9PTkNFKGluZm9fbGVuICZndDsgY291bnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChXQVJOX09OX09OQ0UoIXBldmVudC0mZ3Q7cHBvcykpCiYjNDM7CWlmIChXQVJOX09OX09OQ0UocGV2ZW50LSZndDtwb3MgPT0gRkFOT1RJRllfTk9fUkFOR0UpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWluZm8uaGRyLmluZm9fdHlwZSA9IEZBTl9FVkVOVF9JTkZPX1RZUEVfUkFOR0U7CiAJaW5mby5oZHIubGVuID0gaW5mb19sZW47Ci0JaW5mby5vZmZzZXQgPSAqKHBldmVudC0mZ3Q7cHBvcyk7CiYjNDM7CWluZm8ub2Zmc2V0ID0gcGV2ZW50LSZndDtwb3M7CiAJaW5mby5jb3VudCA9IHBldmVudC0mZ3Q7Y291bnQ7CiAKIAlpZiAoY29weV90b191c2VyKGJ1ZiwgJmFtcDtpbmZvLCBpbmZvX2xlbikpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRmFub3RpZnkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBpdCYjMzk7cyB0b3VjaGluZyBmYW5vdGlmeSwgc3BlY2lmaWNhbGx5IHRoZSBjb3JlIGZpbGVzOiBgZmFub3RpZnkuY2AsIGBmYW5vdGlmeS5oYCwgYW5kIGBmYW5vdGlmeV91c2VyLmNgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBmYW5vdGlmeSBpcyBhIGdvb2QgdGFyZ2V0LiBJIHNlZSB0aGF0IHRoZSBwYXRjaCYjMzk7cyBjZW50cmFsIG1vZGlmaWNhdGlvbiBpbnZvbHZlcyByZXBsYWNpbmcgYSBwb2ludGVyIHRvIGEgYGxvZmZfdGAgKGEgbG9uZyBsb25nIG9mZnNldCkgd2l0aCBhIGRpcmVjdCBgbG9mZl90YCB2YWx1ZSB3aXRoaW4gdGhlIGBmYW5vdGlmeV9wZXJtX2V2ZW50YCBzdHJ1Y3QuIFRoaXMgbG9va3MgbGlrZSBpdCYjMzk7cyBzaW1wbGlmeWluZyB0aGUgY29kZSwgbGlrZWx5IHJlbW92aW5nIGFuIHVubmVjZXNzYXJ5IGluZGlyZWN0aW9uLCBvciBtYXliZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIG9mZi1ieS1vbmUgb3IgZGF0YS1yYWNlIGlzc3VlIHdpdGggdGhlIHBvaW50ZXIsIG9yIHNpbXBsaWZ5aW5nIHRoZSBsb2dpYy4KClRoZSBjcnVjaWFsIGNoYW5nZXMgYXJlIGluIGhvdyBgcG9zYCAoZm9ybWVybHkgcG9pbnRlZCB0byBieSBgcHBvc2ApIGlzIGhhbmRsZWQgbm93OiBpbnN0ZWFkIG9mIHN0b3JpbmcgdGhlIHBvaW50ZXIsIGBGQU5PVElGWV9OT19SQU5HRWAgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGFic2VuY2Ugb2YgYSByYW5nZS4gVGhlIGNoZWNrcyBhbHNvIHJlZmxlY3QgdGhpcyBjaGFuZ2UgZnJvbSBgcHBvc2AgYmVpbmcgY2hlY2tlZCBmb3IgbnVsbCwgdG8gYHBvc2AgYmVpbmcgY2hlY2tlZCBhZ2FpbnN0IHRoaXMgbmV3IGBGQU5PVElGWV9OT19SQU5HRWAgdmFsdWUuIFNvIGl0JiMzOTtzIHZlcnkgbGlrZWx5IGEgcmVmYWN0b3JpbmcsIG1heWJlIHdpdGggYSBidWcgZml4IGJha2VkIGluLgoKR2l2ZW4gdGhpcywgSSBuZWVkIHRvIGdldCB0aGlzIGNvdmVyZWQgYnkgZnV6emluZywgYW5kIHF1aWNrbHkuIFNvIGxldCBtZSBwdWxsIHVwIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIE9idmlvdXNseSwgSSYjMzk7bGwgbmVlZCBgQ09ORklHX0ZBTk9USUZZYCBlbmFibGVkIHRvIGV2ZW4gcmVhY2ggdGhpcyBjb2RlLiBQcm9iYWJseSBgQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU2AgaXMgbmVlZGVkIGFzIHdlbGwuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGluc2lkZSBgZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWdgIHRvIGJlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZBTk9USUZZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL25vdGlmeS9mYW5vdGlmeS9LY29uZmlnOjI6Y29uZmlnIEZBTk9USUZZXG5mcy9ub3RpZnkvZmFub3RpZnkvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtGaWxlc3lzdGVtIHdpZGUgYWNjZXNzIG5vdGlmaWNhdGlvblwmIzM0O1xuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9LY29uZmlnLTE0LVxuZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWc6MTU6Y29uZmlnIEZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU1xuZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWctMTYtXHRib29sIFwmIzM0O2Zhbm90aWZ5IHBlcm1pc3Npb25zIGNoZWNraW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcyMgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBQb3RlbnRpYWwgRGF0YSBMZWFrYWdlIGluIEZhbm90aWZ5KioKCkFscmlnaHQsIG15IGludGVybmFsIGNoZWNrbGlzdCBoYXMgZmxhZ2dlZCBzb21ldGhpbmcgdGhhdCBhbHdheXMgd2FycmFudHMgYSBjbG9zZXIgbG9vazogdGhlIGludGVycGxheSBiZXR3ZWVuIGZpbGUgbm90aWZpY2F0aW9uIGV2ZW50cyBhbmQgZGF0YSBtb3ZlbWVudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGEgcG90ZW50aWFsIGF2ZW51ZSBmb3Igc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGxlYWthZ2UuIE15IGltbWVkaWF0ZSBmb2N1cyBsYW5kcyBvbiB0d28ga2V5IGZ1bmN0aW9ucy4KCkZpcnN0LCBJIG5lZWQgdG8gcmV2aXNpdCBgZmFub3RpZnlfYWxsb2NfcGVybV9ldmVudGAuIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIGV4YWN0bHkgd2hhdCBkYXRhIGlzIGJlaW5nIHBvcHVsYXRlZCB3aXRoaW4gYSBwZXJtaXNzaW9uIGV2ZW50LiBXaGF0IGZpZWxkcyBhcmUgcG9wdWxhdGVkLCBhbmQgY3JpdGljYWxseSwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZGF0YSByZW1uYW50cyBmcm9tIHByZXZpb3VzIG9wZXJhdGlvbnMsIG9yIHBlcmhhcHMgdW5pbml0aWFsaXplZCBtZW1vcnksIHRoYXQgY291bGQgaW5hZHZlcnRlbnRseSBleHBvc2UgaW5mb3JtYXRpb24/IEkmIzM5O20gcGFydGljdWxhcmx5IGNvbmNlcm5lZCBhYm91dCBhbnkgY29ubmVjdGlvbiBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MgLSBpcyB0aGVyZSBhIGNoYW5jZSB0aGF0IGlkZW50aWZpZXJzLCBmaWxlIHBhdGhzLCBvciBldmVuIGludGVybmFsIGtlcm5lbCBkYXRhIGNvdWxkIGxlYWsgdGhyb3VnaCB0aGlzIG1lY2hhbmlzbT8KCk5leHQsIG15IGF0dGVudGlvbiBzaGlmdHMgdG8gYGNvcHlfcmFuZ2VfaW5mb190b191c2VyYC4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgcGl2b3RhbCBjb21wb25lbnQgZm9yIHRyYW5zbWl0dGluZyB0aGUgZXZlbnQgZGV0YWlscyBiYWNrIHRvIHVzZXIgc3BhY2UuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIGRhdGEgaW50ZWdyaXR5LiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgb25seSBzYW5pdGl6ZWQsIGF1dGhvcml6ZWQgZGF0YSBpcyBiZWluZyB0cmFuc2ZlcnJlZC4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgcG9zc2libGUgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gaW5mb3JtYXRpb24gZGlzY2xvc3VyZXMuIEFyZSB0aGVyZSBzdHJpY3QgYm91bmRzIGNoZWNrcywgYXJlIGJ1ZmZlcnMgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFyZSB0aGVyZSBhbnkgYnlwYXNzZXMsIGFuZCBhcmUgYW55IHN1YnRsZSBpbnRlZ2VyIG92ZXJmbG93cyBwcmVzZW50PyBJ4oCZbSBnb2luZyB0byBmb2N1cyBvbiBob3cgdGhlIGluZm9ybWF0aW9uIHJhbmdlIGRhdGEgaXMgYmVpbmcgdmFsaWRhdGVkIGFuZCBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuIEkgbmVlZCB0byBrbm93IGV4YWN0bHkgaG93IHRoaXMgcmFuZ2UgaW5mb3JtYXRpb24gaXMgYnVpbHQgZnJvbSB0aGUga2VybmVsJiMzOTtzIGludGVybmFsIHJlcHJlc2VudGF0aW9uLCBtYWtpbmcgc3VyZSB0aGVyZSYjMzk7cyBubyB3YXkgdG8gdHJpY2sgdGhlIHN5c3RlbSBpbnRvIHJlbGVhc2luZyBtb3JlIGRhdGEgdGhhbiBpdCBzaG91bGQuIFVsdGltYXRlbHksIEkmIzM5O20gdHJ5aW5nIHRvIGVuc3VyZSB0aGF0IGEgbWFsaWNpb3VzIHVzZXIgY2Fubm90IGNyYWZ0IGEgc3BlY2lhbGx5LWRlc2lnbmVkIHJlcXVlc3QgdGhhdCB3b3VsZCBsZWFkIHRvIGEgZGF0YSBicmVhY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmFub3RpZnlfYWxsb2NfcGVybV9ldmVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTU2OT1zdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19tbnRfZXZlbnQodTY0IG1udF9pZCwgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jLTU4Mi1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jOjU4MzpzdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50KGNvbnN0IHZvaWQgKmRhdGEsXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy01ODQtXHRcdFx0XHRcdFx0XHRpbnQgZGF0YV90eXBlLFxuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTc0Mz1zdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19ldmVudChcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NTEtXHRpZiAoZmFub3RpZnlfaXNfcGVybV9ldmVudChtYXNrKSkge1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM6ODUyOlx0XHRldmVudCA9IGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnQoZGF0YSwgZGF0YV90eXBlLCBnZnApO1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtODUzLVx0fSBlbHNlIGlmIChmYW5vdGlmeV9pc19lcnJvcl9ldmVudChtYXNrKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NjMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgY29weV9yYW5nZV9pbmZvX3RvX3VzZXJgLCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OgoKKipBbmFseXppbmcgdGhlIGBjb3B5X3JhbmdlX2luZm9fdG9fdXNlcmAgRnVuY3Rpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoaXMgYGNvcHlfcmFuZ2VfaW5mb190b191c2VyYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBndXQgdGVsbHMgbWUgaXQmIzM5O3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIHRyYW5zZmVycmluZyBkYXRhIGFib3V0IGEgc3BlY2lmaWMgcmFuZ2Ug4oCTIHRoaW5rIGNlbGxzLCByb3dzLCBjb2x1bW5zLCBvciBhIGJsb2NrIG9mIHRoZW0g4oCTIGZyb20gc29tZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiwgbGlrZWx5IGluIHRoZSBzeXN0ZW0mIzM5O3MgY29yZSwgdG8gdGhlIHVzZXIuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGNvbnNpZGVyaW5nIHdoYXQga2luZCBvZiAmIzM0O2luZm8mIzM0OyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBoZXJlLiBJcyBpdCBqdXN0IHRoZSBkYXRhIHZhbHVlcyB0aGVtc2VsdmVzPyBPciBhcmUgd2UgY29uc2lkZXJpbmcgZm9ybWF0cywgZm9ybXVsYXMsIGNvbW1lbnRzLCB2YWxpZGF0aW9uIHJ1bGVzLCBhbGwgdGhlIG1ldGFkYXRhPyBBbmQgY3J1Y2lhbGx5LCB3aGF0JiMzOTtzIHRoZSBzb3VyY2UgYW5kIHRhcmdldD8gVGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB3ZSYjMzk7cmUgdXNpbmcgb24gb25lIGVuZCwgYW5kIHRoZSBmb3JtYXQgdGhlIHVzZXItZmFjaW5nIHNpZGUgaXMgZXhwZWN0aW5nIG9uIHRoZSBvdGhlci4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyByaWdodCBhd2F5LiBEYXRhIHRyYW5zZmVyIGNhbiBiZSBzdXJwcmlzaW5nbHkgc2xvdywgZXNwZWNpYWxseSB3aXRoIGxhcmdlIHJhbmdlcy4gU28sIEkgbmVlZCB0byBjb25zaWRlcjoKCiogICAqKkRhdGEgU3RydWN0dXJlczoqKiBIb3cgYXJlIHRoZSBkYXRhIHN0cnVjdHVyZXMgb24gYm90aCBlbmRzIG9yZ2FuaXplZD8gSXMgdGhlcmUgYSBuZWVkIGZvciBjb252ZXJzaW9uIG9yIHJlc3RydWN0dXJpbmcgdG8gbWF0Y2ggdGhlIHVzZXImIzM5O3MgZXhwZWN0ZWQgZm9ybWF0PyBXaGF0JiMzOTtzIHRoZSB0aW1lIGNvbXBsZXhpdHkgb2YgdGhlIG9wZXJhdGlvbj8KKiAgICoqTWVtb3J5IE1hbmFnZW1lbnQ6KiogSG93IG11Y2ggbWVtb3J5IHdpbGwgYmUgcmVxdWlyZWQgZm9yIHRoaXMgb3BlcmF0aW9uLCBlc3BlY2lhbGx5IGZvciBsYXJnZSByYW5nZXM/IEFyZSB3ZSBlZmZpY2llbnRseSB1dGlsaXppbmcgbWVtb3J5LCBvciBtaWdodCB0aGlzIG9wZXJhdGlvbiBiZWNvbWUgYSBtZW1vcnkgaG9nPyBBcmUgd2UgY29weWluZyBkYXRhLCBvciBhcmUgd2UgcGFzc2luZyByZWZlcmVuY2VzPwoqICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIGNvcHlpbmcgYSBzcGVjaWZpYyBjZWxsJiMzOTtzIGluZm9ybWF0aW9uPyBIb3cgaXMgaXQgaGFuZGxlZD8gRG9lcyBpdCBmYWlsIHNpbGVudGx5LCBvciBkb2VzIGl0IHRyaWdnZXIgYW4gZXhjZXB0aW9uPyBEb2VzIGl0IGxvZyB1c2VmdWwgaW5mb3JtYXRpb24/CiogICAqKlNlY3VyaXR5OioqIElmIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggc2Vuc2l0aXZlIGRhdGEsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZGF0YSB0cmFuc2ZlciBpcyBzZWN1cmUsIGFkaGVyaW5nIHRvIGFjY2VzcyBjb250cm9scyBhbmQgcGVybWlzc2lvbnMuCiogICAqKkNvbmN1cnJlbmN5OioqIElzIHRoaXMgZnVuY3Rpb24gdGhyZWFkLXNhZmU/IERvZXMgaXQgbmVlZCB0byBiZT8gSWYgbXVsdGlwbGUgdXNlcnMgYXJlIHNpbXVsdGFuZW91c2x5IHJlcXVlc3RpbmcgZGF0YSwgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBvdXIgY29uY3VycmVuY3kgZGVzaWduIGlzIHNvbGlkLgoKSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZyB0aGF0IHRoZSB0YXJnZXQgc2lkZSBleHBlY3RzIGEgc3BlY2lmaWMgZm9ybWF0LiBJIHdhbnQgdG8gbG9vayBpbnRvIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyB0aGVzZSBjb25zaWRlcmF0aW9ucy4gSXMgdGhpcyBhIHNpbXBsZSBkYXRhIGNvcHksIG9yIGRvIHdlIGhhdmUgdHJhbnNmb3JtYXRpb24gbG9naWMgYXQgcGxheT8gQSByb2J1c3QgZnVuY3Rpb24gd2lsbCBoYW5kbGUgcG90ZW50aWFsIGRhdGEgdHlwZSBtaXNtYXRjaGVzLCBtaXNzaW5nIHZhbHVlcyBncmFjZWZ1bGx5LiBJIGV4cGVjdCB0byBhbHNvIGV2YWx1YXRlIHBlcmZvcm1hbmNlIG9mIHRoZSBmdW5jdGlvbiB3aGVuIGl0IGNvbWVzIHRvIGVkZ2UgY2FzZXMuCkVzc2VudGlhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBlcmZvcm1hbmNlLCBkYXRhIGludGVncml0eSwgYW5kIHBvdGVudGlhbCBwb2ludHMgb2YgZmFpbHVyZSwgYWxsIGluIHJlbGF0aW9uIHRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdXNlciBpbnRlcmZhY2UgYW5kIG92ZXJhbGwgYXBwbGljYXRpb24gZGVzaWduLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3B5X3JhbmdlX2luZm9fdG9fdXNlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYz02NDg9c3RhdGljIGludCBjb3B5X3BpZGZkX2luZm9fdG9fdXNlcihpbnQgcGlkZmQsXG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy02NjctXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jOjY2ODpzdGF0aWMgc2l6ZV90IGNvcHlfcmFuZ2VfaW5mb190b191c2VyKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQsXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTY2OS1cdFx0XHRcdCAgICAgIGNoYXIgX191c2VyICpidWYsIGludCBjb3VudClcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jPTY5Mj1zdGF0aWMgaW50IGNvcHlfaW5mb19yZWNvcmRzX3RvX3VzZXIoc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpldmVudCxcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTgxMy1cdGlmIChmYW5vdGlmeV9ldmVudF9oYXNfYWNjZXNzX3JhbmdlKGV2ZW50KSkge1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzo4MTQ6XHRcdHJldCA9IGNvcHlfcmFuZ2VfaW5mb190b191c2VyKGV2ZW50LCBidWYsIGNvdW50KTtcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMtODE1LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzODgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgRmFub3RpZnkgRXZlbnQgSGFuZGxpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSB0d28gZnVuY3Rpb25zLCBgZmFub3RpZnlfYWxsb2NfcGVybV9ldmVudGAgYW5kIGBjb3B5X3JhbmdlX2luZm9fdG9fdXNlcmAuIEkmIzM5O3ZlIGdvdCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IHRvIHVuZGVyc3RhbmQgdGhlIGtleSBhcmVhcyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uIGBmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50YCBpcyBpbnRlcm5hbCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIGNhbGxlZCBieSBgZmFub3RpZnlfYWxsb2NfZXZlbnRgLCB3aGljaCBpcyBhbHNvIGludGVybmFsLCBhbmQgdGhhdCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgZmFub3RpZnlfaGFuZGxlX2V2ZW50YC4gVGhhdCBnaXZlcyBtZSBhIHBhdGg6IGBmYW5vdGlmeV9oYW5kbGVfZXZlbnRgICZndDsgYGZhbm90aWZ5X2FsbG9jX2V2ZW50YCAmZ3Q7IGBmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50YC4gTWFrZXMgc2Vuc2UsIHNvIGBmYW5vdGlmeV9oYW5kbGVfZXZlbnRgIGlzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gdGhhdCBzaWRlLgoKT24gdGhlIG90aGVyIGhhbmQsIGBjb3B5X3JhbmdlX2luZm9fdG9fdXNlcmAgaXMgaW50ZXJuYWwsIHdoaWNoIGlzIGNhbGxlZCBieSBgY29weV9pbmZvX3JlY29yZHNfdG9fdXNlcmAsIHdoaWNoIGlzIGNhbGxlZCBieSBgY29weV9ldmVudF90b191c2VyYCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBieSBgZmFub3RpZnlfcmVhZGAuIFRoYXQmIzM5O3MgYSBjbGVhciBjYWxsIHN0YWNrOiBgZmFub3RpZnlfcmVhZGAgJmd0OyBgY29weV9ldmVudF90b191c2VyYCAmZ3Q7IGBjb3B5X2luZm9fcmVjb3Jkc190b191c2VyYCAmZ3Q7IGBjb3B5X3JhbmdlX2luZm9fdG9fdXNlcmAuIFNvLCB0byByZWFsbHkgdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgd29ya3MsIGBmYW5vdGlmeV9yZWFkYCBpcyBhbm90aGVyIGNyaXRpY2FsIGFyZWEsIGFuZCBJIHNob3VsZCBmb2N1cyBoZXJlLgoKU28sIGluIHNob3J0LCB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB0aGUgY29yZSBldmVudCBoYW5kbGluZyBhbmQgZGF0YSBjb3B5aW5nLCBJIG5lZWQgdG8gZGVsdmUgaW50byBgZmFub3RpZnlfaGFuZGxlX2V2ZW50YCBhbmQgYGZhbm90aWZ5X3JlYWRgLiBUaGV5JiMzOTtyZSB0aGUgdmlzaWJsZSBlbnRyeSBwb2ludHMgZm9yIHByb2Nlc3NpbmcgZXZlbnRzIGFuZCBjb3B5aW5nIGluZm9ybWF0aW9uIGJhY2sgdG8gdXNlciBzcGFjZS4gVGhhdCBzaG91bGQgcHJvdmlkZSB0aGUgbW9zdCBmcnVpdGZ1bCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmFub3RpZnlfaGFuZGxlX2V2ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM9MTgwPXN0YXRpYyBpbnQgZmFub3RpZnlfbWVyZ2Uoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCxcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy0xOTItXHQgKiBEb24mIzM5O3QgbWVyZ2UgYSBwZXJtaXNzaW9uIGV2ZW50IHdpdGggYW55IG90aGVyIGV2ZW50IHNvIHRoYXQgd2Uga25vd1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM6MTkzOlx0ICogdGhlIGV2ZW50IHN0cnVjdHVyZSB3ZSBoYXZlIGNyZWF0ZWQgaW4gZmFub3RpZnlfaGFuZGxlX2V2ZW50KCkgaXMgdGhlXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy0xOTQtXHQgKiBvbmUgd2Ugc2hvdWxkIGNoZWNrIGZvciBwZXJtaXNzaW9uIHJlc3BvbnNlLlxuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTkwOD1zdGF0aWMgdm9pZCBmYW5vdGlmeV9pbnNlcnRfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCxcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy05MjUtXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYzo5MjY6c3RhdGljIGludCBmYW5vdGlmeV9oYW5kbGVfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwgdTMyIG1hc2ssXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy05MjctXHRcdFx0XHQgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGRhdGFfdHlwZSxcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYz0xMTE0PWNvbnN0IHN0cnVjdCBmc25vdGlmeV9vcHMgZmFub3RpZnlfZnNub3RpZnlfb3BzID0ge1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM6MTExNTpcdC5oYW5kbGVfZXZlbnQgPSBmYW5vdGlmeV9oYW5kbGVfZXZlbnQsXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy0xMTE2LVx0LmZyZWVfZ3JvdXBfcHJpdiA9IGZhbm90aWZ5X2ZyZWVfZ3JvdXBfcHJpdixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM1NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOgoKKipEaXZpbmcgaW50byBmYW5vdGlmeSBJbnRlcm5hbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgZmFub3RpZnlgIHN5c3RlbSBjYWxscywgc3BlY2lmaWNhbGx5IGhvdyB0aGV5IGludGVyZmFjZSB3aXRoIHRoZSBrZXJuZWwuIEkgc2VlIHRoYXQgYGZhbm90aWZ5X2hhbmRsZV9ldmVudGAgaXMgKnRoZSogcG9pbnQgb2YgZW50cnkgZm9yIHRoZSBgZnNub3RpZnlfb3BzYCBzdHJ1Y3R1cmUuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBwcm9jZXNzZXMgdGhvc2UgYGZhbm90aWZ5YCBldmVudHMgd2hlbiB0aGV5IGhhcHBlbi4gSXQmIzM5O3MgdGhlIGNvcmUgb2YgaG93IHRoZSBmaWxlIHN5c3RlbSBub3RpZmljYXRpb25zIGFyZSBoYW5kbGVkIHVuZGVyIHRoZSBob29kLgoKVGhlbiwgdGhlcmUmIzM5O3MgYGZhbm90aWZ5X3JlYWRgLiBUaGlzIG9uZSYjMzk7cyBjbGVhcmx5IGhvb2tpbmcgaW50byB0aGUgYGZpbGVfb3BlcmF0aW9uc2Agc3RydWN0dXJlLiBFc3NlbnRpYWxseSwgdGhpcyBpcyBob3cgdXNlciBzcGFjZSBjYW4gKmdldCogdGhlIGV2ZW50cywgcmVhZGluZyB0aGVtIGZyb20gdGhlIGZpbGUgZGVzY3JpcHRvci4gU28sIGBmYW5vdGlmeV9oYW5kbGVfZXZlbnRgIHByb2Nlc3NlcyB0aGUgZXZlbnRzIHdoZW4gdGhleSBhcmlzZSwgYW5kIGBmYW5vdGlmeV9yZWFkYCBhbGxvd3MgYSB1c2VyIHByb2Nlc3MgdG8gcmV0cmlldmUgdGhlIHF1ZXVlZCBldmVudHMuIFRoZXnigJlyZSB0aGUgdHdvIHNpZGVzIG9mIHRoZSBzYW1lIGNvaW46IG9uZSBnZW5lcmF0ZXMgdGhlIGV2ZW50LCB0aGUgb3RoZXIgcHJvdmlkZXMgYWNjZXNzIHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYW5vdGlmeV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jPTk2ND1zdGF0aWMgX19wb2xsX3QgZmFub3RpZnlfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTk3Ny1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM6OTc4OnN0YXRpYyBzc2l6ZV90IGZhbm90aWZ5X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTk3OS1cdFx0XHQgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYz0xMTY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZhbm90aWZ5X2ZvcHMgPSB7XG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xMTcxLVx0LnBvbGxcdFx0PSBmYW5vdGlmeV9wb2xsLFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzoxMTcyOlx0LnJlYWRcdFx0PSBmYW5vdGlmeV9yZWFkLFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xMTczLVx0LndyaXRlXHRcdD0gZmFub3RpZnlfd3JpdGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGYW5vdGlmeSBFdmVudCBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGUgY29yZSBmdW5jdGlvbnMgYWZmZWN0ZWQgaGVyZSBzZWVtIHRvIGJlIGBmYW5vdGlmeV9oYW5kbGVfZXZlbnRgIGFuZCBgZmFub3RpZnlfcmVhZGAuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5pdGVseSBgRkFOT1RJRllgIGFuZCBgRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TYC4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgZW5hYmxpbmcgdGhlIGZ1bmN0aW9uYWxpdHkuCgpUaGUga2V5IGNoYW5nZSwgZnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBpcyBob3cgdGhlIHJhbmdlIGluZm9ybWF0aW9uIGlzIGJlaW5nIGhhbmRsZWQgd2l0aGluIHRoZSBgc3RydWN0IGZhbm90aWZ5X3Blcm1fZXZlbnRgLiBJbnN0ZWFkIG9mIHVzaW5nIGEgcG9pbnRlciB0byBzdG9yZSB0aGUgcmFuZ2UgZGF0YSwgdGhleSYjMzk7cmUgc3dpdGNoaW5nIHRvIHN0b3JpbmcgdGhlIHZhbHVlIGRpcmVjdGx5LiBBbmQsIGltcG9ydGFudGx5LCBgRkFOT1RJRllfTk9fUkFOR0VgIGlzIGJlaW5nIHVzZWQgdG8gc2lnbmlmeSB3aGVuIG5vIHJhbmdlIGlzIHByZXNlbnQuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgZ29pbmcgdG8gaW1wYWN0IGhvdyB3ZSBhY2Nlc3MgYW5kIGludGVycHJldCB0aGlzIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgd2hlbiBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zLgoKTm93LCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIGludGVyYWN0cyB3aXRoIGFueSBvdGhlciBjb25maWd1cmF0aW9ucy4gTXkgcmVjb2xsZWN0aW9uIGlzIHRoYXQgYEZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU2AgaXMgcmVxdWlyZWQgYnkgYGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnRgLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBUaW1lIHRvIGRpZyBhIGJpdCBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9ub3RpZnkvZmFub3RpZnkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTU2OT1zdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19tbnRfZXZlbnQodTY0IG1udF9pZCwgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jLTU4Mi1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jOjU4MzpzdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50KGNvbnN0IHZvaWQgKmRhdGEsXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy01ODQtXHRcdFx0XHRcdFx0XHRpbnQgZGF0YV90eXBlLFxuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTc0Mz1zdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19ldmVudChcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NTEtXHRpZiAoZmFub3RpZnlfaXNfcGVybV9ldmVudChtYXNrKSkge1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM6ODUyOlx0XHRldmVudCA9IGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnQoZGF0YSwgZGF0YV90eXBlLCBnZnApO1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtODUzLVx0fSBlbHNlIGlmIChmYW5vdGlmeV9pc19lcnJvcl9ldmVudChtYXNrKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzA0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gdGhlIEZhbm90aWZ5IENvZGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgYGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnRgLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIE15IHByaW1hcnkgY29uY2VybiBpcyB0byBhdm9pZCB0cnlpbmcgdG8gdXNlIHNvbWV0aGluZyB0aGF0IG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgaW4gYSBnaXZlbiBrZXJuZWwgY29uZmlndXJhdGlvbi4gU28sIEkgbmVlZCB0byBpbW1lZGlhdGVseSB2ZXJpZnkgaWYgYGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnRgIGlzIHdyYXBwZWQgd2l0aGluIGFuIGAjaWZkZWZgIGJsb2NrIGZvciBgQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU2AuIElmIHRoYXQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpc24mIzM5O3QgZGVmaW5lZCwgSSBoYXZlIHRvIGFzc3VtZSB0aGUgZnVuY3Rpb24gd29uJiMzOTt0IGJlIGNvbXBpbGVkIGFuZCBtdXN0IGJlIHNraXBwZWQuIEkgY2FuJiMzOTt0IHJlbHkgb24gaXRzIGV4aXN0ZW5jZTsgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgZmxhZ3MgYW5kIGtlcm5lbCBjb25maWcgdG8gdW5kZXJzdGFuZCBpdHMgYXZhaWxhYmlsaXR5LiBJdCYjMzk7cyBhIHF1aWNrIGNoZWNrLCBidXQgYSBjcml0aWNhbCBvbmUgYmVmb3JlIHByb2NlZWRpbmcgYW55IGZ1cnRoZXIgd2l0aCBhbmFseXNpcyBvciBtb2RpZmljYXRpb25zLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBJIHN0YW5kIGZyb20gdGhlIG91dHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25vdGlmeS9mYW5vdGlmeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5Lmg9NDYyPXN0YXRpYyBpbmxpbmUgYm9vbCBmYW5vdGlmeV9pc19wZXJtX2V2ZW50KHUzMiBtYXNrKVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmgtNDYzLXtcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5oOjQ2NDpcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19GQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMpIFx1MDAyNlx1MDAyNlxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmgtNDY1LVx0XHRtYXNrIFx1MDAyNiBGQU5PVElGWV9QRVJNX0VWRU5UUztcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jPTEwNTU9c3RhdGljIHNzaXplX3QgZmFub3RpZnlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xMDYyLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzoxMDYzOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMpKVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xMDY0LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jPTE4NTY9c3RhdGljIGludCBkb19mYW5vdGlmeV9tYXJrKGludCBmYW5vdGlmeV9mZCwgdW5zaWduZWQgaW50IGZsYWdzLCBfX3U2NCBtYXNrLFxuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMtMTkxNC1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM6MTkxNTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19GQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMpKVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xOTE2LVx0XHR2YWxpZF9tYXNrIHw9IEZBTk9USUZZX1BFUk1fRVZFTlRTO1xuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM9MjE1Nj1zdGF0aWMgaW50IF9faW5pdCBmYW5vdGlmeV91c2VyX3NldHVwKHZvaWQpXG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0yMTgyLVx0XHRcdFx0XHRcdFNMQUJfUEFOSUMpO1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzoyMTgzOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OUykpIHtcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMtMjE4NC1cdFx0ZmFub3RpZnlfcGVybV9ldmVudF9jYWNoZXAgPVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTY1CgkJCQkJCQlvdXRwdXQ6IDEwOAoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBmYW5vdGlmeSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBgZmFub3RpZnlgIHN1YnN5c3RlbS4gVGhlIGtleSBoZXJlLCB0byBtYWtlIHRoaXMgd29ydGh3aGlsZSBmb3IgZnV6emluZywgaXMgdG8gY29uZmlybSBhIGZldyB0aGluZ3MuIEZpcnN0LCBgZmFub3RpZnlfaXNfcGVybV9ldmVudGAgY2hlY2tzIGZvciBgSVNfRU5BQkxFRChDT05GSUdfRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TKWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQhIFNvLCBpdCBsb29rcyBsaWtlIGBGQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlNgIGlzIGFic29sdXRlbHkgcmVxdWlyZWQuIEkgYWxzbyBrbm93IHRoYXQgYEZBTk9USUZZYCBpdHNlbGYgaGFzIHRvIGJlIGVuYWJsZWQuCgpUaGVyZWZvcmUsIGZvciBteSBmdXp6aW5nIGFwcHJvYWNoLCBJJiMzOTttIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBlbnRyeSBwb2ludHMsIHNvIEkgd2lsbCBwcmlvcml0aXplIGBmYW5vdGlmeV9oYW5kbGVfZXZlbnRgIGFuZCBgZmFub3RpZnlfcmVhZGAgYXMgY3JpdGljYWwgZnV6eiB0YXJnZXRzLiBUbyBtYWtlIHN1cmUgdGhlIHN1YnN5c3RlbSBpcyBjb25maWd1cmVkIGNvcnJlY3RseSB0byB0cmlnZ2VyIHRoZXNlIGZ1bmN0aW9ucywgSSB3aWxsIHNwZWNpZnkgYEVuYWJsZUNvbmZpZ3M9WyYjMzQ7RkFOT1RJRlkmIzM0OywgJiMzNDtGQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMmIzM0O11gLiBJJiMzOTttIGNvbmZpZGVudCB0aGlzIHNldHVwIHdpbGwgZ2l2ZSBtZSBhIGdvb2Qgc2hvdCBhdCByZXZlYWxpbmcgdnVsbmVyYWJpbGl0aWVzIHdpdGhpbiB0aGUgYGZhbm90aWZ5YCBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGQU5PVElGWSYjMzQ7LAogICAgJiMzNDtGQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmYW5vdGlmeV9oYW5kbGVfZXZlbnQmIzM0OywKICAgICYjMzQ7ZmFub3RpZnlfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IHJhbmdlIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBhbmQgY29waWVkIHRvIHVzZXJzcGFjZSBmb3IgZmFub3RpZnkgcGVybWlzc2lvbiBldmVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBmYW5vdGlmeSBsb2dpYy4gSXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGQU5PVElGWSYjMzQ7LAogICAgJiMzNDtGQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmYW5vdGlmeV9oYW5kbGVfZXZlbnQmIzM0OywKICAgICYjMzQ7ZmFub3RpZnlfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IHJhbmdlIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBhbmQgY29waWVkIHRvIHVzZXJzcGFjZSBmb3IgZmFub3RpZnkgcGVybWlzc2lvbiBldmVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBmYW5vdGlmeSBsb2dpYy4gSXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MDY6MDguMzMwOTk1Mzc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ3MzYyNDc1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRkFOT1RJRllcIixcbiAgICBcIkZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZhbm90aWZ5X2hhbmRsZV9ldmVudFwiLFxuICAgIFwiZmFub3RpZnlfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB3YXkgcmFuZ2UgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGFuZCBjb3BpZWQgdG8gdXNlcnNwYWNlIGZvciBmYW5vdGlmeSBwZXJtaXNzaW9uIGV2ZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGZhbm90aWZ5IGxvZ2ljLiBJdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjA2OjA4LjMzMTAwMTUxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxNDM1NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTZmOTMyOTBlYTRmY2E2NTEzNjlkYzI1NmM0ZTVmNzA3OGM0MTY4MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDA0OjA2OjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jIGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmNcXG5pbmRleCBhMzU1NWJlYmFkNjNlLi5iMDViNmQzYWJiODcwIDEwMDY0NFxcbi0tLSBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jXFxuKysrIGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmNcXG5AQCAtNjAwLDggKzYwMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgKmZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnQoY29uc3Qgdm9pZCAqZGF0YSxcXG4gXFx0cGV2ZW50LVxcdTAwM2VoZHIubGVuID0gMDtcXG4gXFx0cGV2ZW50LVxcdTAwM2VzdGF0ZSA9IEZBTl9FVkVOVF9JTklUO1xcbiBcXHRwZXZlbnQtXFx1MDAzZXBhdGggPSAqcGF0aDtcXG4tXFx0LyogTlVMTCBwcG9zIG1lYW5zIG5vIHJhbmdlIGluZm8gKi9cXG4tXFx0cGV2ZW50LVxcdTAwM2VwcG9zID0gcmFuZ2UgPyBcXHUwMDI2cmFuZ2UtXFx1MDAzZXBvcyA6IE5VTEw7XFxuK1xcdHBldmVudC1cXHUwMDNlcG9zID0gcmFuZ2UgPyByYW5nZS1cXHUwMDNlcG9zIDogRkFOT1RJRllfTk9fUkFOR0U7XFxuIFxcdHBldmVudC1cXHUwMDNlY291bnQgPSByYW5nZSA/IHJhbmdlLVxcdTAwM2Vjb3VudCA6IDA7XFxuIFxcdHBhdGhfZ2V0KHBhdGgpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmggYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuaFxcbmluZGV4IGEwNjE5ZTc2OTRkNTcuLjM3MTA1NDNkYmY4MjcgMTAwNjQ0XFxuLS0tIGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmhcXG4rKysgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuaFxcbkBAIC00MjgsNiArNDI4LDggQEAgRkFOT1RJRllfTUUoc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpldmVudClcXG4gXFx0cmV0dXJuIGNvbnRhaW5lcl9vZihldmVudCwgc3RydWN0IGZhbm90aWZ5X21udF9ldmVudCwgZmFlKTtcXG4gfVxcbiBcXG4rI2RlZmluZSBGQU5PVElGWV9OT19SQU5HRVxcdCgobG9mZl90KS0xKVxcbitcXG4gLypcXG4gICogU3RydWN0dXJlIGZvciBwZXJtaXNzaW9uIGZhbm90aWZ5IGV2ZW50cy4gSXQgZ2V0cyBhbGxvY2F0ZWQgYW5kIGZyZWVkIGluXFxuICAqIGZhbm90aWZ5X2hhbmRsZV9ldmVudCgpIHNpbmNlIHdlIHdhaXQgdGhlcmUgZm9yIHVzZXIgcmVzcG9uc2UuIFdoZW4gdGhlXFxuQEAgLTQzOCw3ICs0NDAsNyBAQCBGQU5PVElGWV9NRShzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgKmV2ZW50KVxcbiBzdHJ1Y3QgZmFub3RpZnlfcGVybV9ldmVudCB7XFxuIFxcdHN0cnVjdCBmYW5vdGlmeV9ldmVudCBmYWU7XFxuIFxcdHN0cnVjdCBwYXRoIHBhdGg7XFxuLVxcdGNvbnN0IGxvZmZfdCAqcHBvcztcXHRcXHQvKiBvcHRpb25hbCBmaWxlIHJhbmdlIGluZm8gKi9cXG4rXFx0bG9mZl90IHBvcztcXHRcXHRcXHQvKiBGQU5PVElGWV9OT19SQU5HRSBpZiB1bmF2YWlsYWJsZSAqL1xcbiBcXHRzaXplX3QgY291bnQ7XFxuIFxcdHUzMiByZXNwb25zZTtcXHRcXHRcXHQvKiB1c2Vyc3BhY2UgYW5zd2VyIHRvIHRoZSBldmVudCAqL1xcbiBcXHR1bnNpZ25lZCBzaG9ydCBzdGF0ZTtcXHRcXHQvKiBzdGF0ZSBvZiB0aGUgZXZlbnQgKi9cXG5AQCAtNDY4LDcgKzQ3MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmYW5vdGlmeV9ldmVudF9oYXNfYWNjZXNzX3JhbmdlKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQpXFxuIFxcdGlmICghKGV2ZW50LVxcdTAwM2VtYXNrIFxcdTAwMjYgRkFOT1RJRllfUFJFX0NPTlRFTlRfRVZFTlRTKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0cmV0dXJuIEZBTk9USUZZX1BFUk0oZXZlbnQpLVxcdTAwM2VwcG9zO1xcbitcXHRyZXR1cm4gRkFOT1RJRllfUEVSTShldmVudCktXFx1MDAzZXBvcyAhPSBGQU5PVElGWV9OT19SQU5HRTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgKkZBTk9USUZZX0Uoc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpmc2UpXFxuZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jXFxuaW5kZXggYjYwNGUzZGE1OGFkMi4uYmJhOTJkNjkxZjBkYyAxMDA2NDRcXG4tLS0gYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jXFxuKysrIGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuY1xcbkBAIC02NzUsMTIgKzY3NSwxMiBAQCBzdGF0aWMgc2l6ZV90IGNvcHlfcmFuZ2VfaW5mb190b191c2VyKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQsXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoaW5mb19sZW4gXFx1MDAzZSBjb3VudCkpXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXG4tXFx0aWYgKFdBUk5fT05fT05DRSghcGV2ZW50LVxcdTAwM2VwcG9zKSlcXG4rXFx0aWYgKFdBUk5fT05fT05DRShwZXZlbnQtXFx1MDAzZXBvcyA9PSBGQU5PVElGWV9OT19SQU5HRSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aW5mby5oZHIuaW5mb190eXBlID0gRkFOX0VWRU5UX0lORk9fVFlQRV9SQU5HRTtcXG4gXFx0aW5mby5oZHIubGVuID0gaW5mb19sZW47XFxuLVxcdGluZm8ub2Zmc2V0ID0gKihwZXZlbnQtXFx1MDAzZXBwb3MpO1xcbitcXHRpbmZvLm9mZnNldCA9IHBldmVudC1cXHUwMDNlcG9zO1xcbiBcXHRpbmZvLmNvdW50ID0gcGV2ZW50LVxcdTAwM2Vjb3VudDtcXG4gXFxuIFxcdGlmIChjb3B5X3RvX3VzZXIoYnVmLCBcXHUwMDI2aW5mbywgaW5mb19sZW4pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDowNjowOC44NjM0Mjg3NzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNDIwMzgwMjAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGQU5PVElGWVwiLFxuICAgIFwiRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmFub3RpZnlfaGFuZGxlX2V2ZW50XCIsXG4gICAgXCJmYW5vdGlmeV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSByYW5nZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgYW5kIGNvcGllZCB0byB1c2Vyc3BhY2UgZm9yIGZhbm90aWZ5IHBlcm1pc3Npb24gZXZlbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZmFub3RpZnkgbG9naWMuIEl0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTZmOTMyOTBlYTRmY2E2NTEzNjlkYzI1NmM0ZTVmNzA3OGM0MTY4MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDQ6MDY6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jXG5pbmRleCBhMzU1NWJlYmFkNjNlLi5iMDViNmQzYWJiODcwIDEwMDY0NFxuLS0tIGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmNcbisrKyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jXG5AQCAtNjAwLDggKzYwMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgKmZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnQoY29uc3Qgdm9pZCAqZGF0YSxcbiBcdHBldmVudC1cdTAwM2VoZHIubGVuID0gMDtcbiBcdHBldmVudC1cdTAwM2VzdGF0ZSA9IEZBTl9FVkVOVF9JTklUO1xuIFx0cGV2ZW50LVx1MDAzZXBhdGggPSAqcGF0aDtcbi1cdC8qIE5VTEwgcHBvcyBtZWFucyBubyByYW5nZSBpbmZvICovXG4tXHRwZXZlbnQtXHUwMDNlcHBvcyA9IHJhbmdlID8gXHUwMDI2cmFuZ2UtXHUwMDNlcG9zIDogTlVMTDtcbitcdHBldmVudC1cdTAwM2Vwb3MgPSByYW5nZSA/IHJhbmdlLVx1MDAzZXBvcyA6IEZBTk9USUZZX05PX1JBTkdFO1xuIFx0cGV2ZW50LVx1MDAzZWNvdW50ID0gcmFuZ2UgPyByYW5nZS1cdTAwM2Vjb3VudCA6IDA7XG4gXHRwYXRoX2dldChwYXRoKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuaCBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5oXG5pbmRleCBhMDYxOWU3Njk0ZDU3Li4zNzEwNTQzZGJmODI3IDEwMDY0NFxuLS0tIGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmhcbisrKyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5oXG5AQCAtNDI4LDYgKzQyOCw4IEBAIEZBTk9USUZZX01FKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQpXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGV2ZW50LCBzdHJ1Y3QgZmFub3RpZnlfbW50X2V2ZW50LCBmYWUpO1xuIH1cbiBcbisjZGVmaW5lIEZBTk9USUZZX05PX1JBTkdFXHQoKGxvZmZfdCktMSlcbitcbiAvKlxuICAqIFN0cnVjdHVyZSBmb3IgcGVybWlzc2lvbiBmYW5vdGlmeSBldmVudHMuIEl0IGdldHMgYWxsb2NhdGVkIGFuZCBmcmVlZCBpblxuICAqIGZhbm90aWZ5X2hhbmRsZV9ldmVudCgpIHNpbmNlIHdlIHdhaXQgdGhlcmUgZm9yIHVzZXIgcmVzcG9uc2UuIFdoZW4gdGhlXG5AQCAtNDM4LDcgKzQ0MCw3IEBAIEZBTk9USUZZX01FKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQpXG4gc3RydWN0IGZhbm90aWZ5X3Blcm1fZXZlbnQge1xuIFx0c3RydWN0IGZhbm90aWZ5X2V2ZW50IGZhZTtcbiBcdHN0cnVjdCBwYXRoIHBhdGg7XG4tXHRjb25zdCBsb2ZmX3QgKnBwb3M7XHRcdC8qIG9wdGlvbmFsIGZpbGUgcmFuZ2UgaW5mbyAqL1xuK1x0bG9mZl90IHBvcztcdFx0XHQvKiBGQU5PVElGWV9OT19SQU5HRSBpZiB1bmF2YWlsYWJsZSAqL1xuIFx0c2l6ZV90IGNvdW50O1xuIFx0dTMyIHJlc3BvbnNlO1x0XHRcdC8qIHVzZXJzcGFjZSBhbnN3ZXIgdG8gdGhlIGV2ZW50ICovXG4gXHR1bnNpZ25lZCBzaG9ydCBzdGF0ZTtcdFx0Lyogc3RhdGUgb2YgdGhlIGV2ZW50ICovXG5AQCAtNDY4LDcgKzQ3MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmYW5vdGlmeV9ldmVudF9oYXNfYWNjZXNzX3JhbmdlKHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZXZlbnQpXG4gXHRpZiAoIShldmVudC1cdTAwM2VtYXNrIFx1MDAyNiBGQU5PVElGWV9QUkVfQ09OVEVOVF9FVkVOVFMpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyZXR1cm4gRkFOT1RJRllfUEVSTShldmVudCktXHUwMDNlcHBvcztcbitcdHJldHVybiBGQU5PVElGWV9QRVJNKGV2ZW50KS1cdTAwM2Vwb3MgIT0gRkFOT1RJRllfTk9fUkFOR0U7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpGQU5PVElGWV9FKHN0cnVjdCBmc25vdGlmeV9ldmVudCAqZnNlKVxuZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jXG5pbmRleCBiNjA0ZTNkYTU4YWQyLi5iYmE5MmQ2OTFmMGRjIDEwMDY0NFxuLS0tIGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuY1xuKysrIGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuY1xuQEAgLTY3NSwxMiArNjc1LDEyIEBAIHN0YXRpYyBzaXplX3QgY29weV9yYW5nZV9pbmZvX3RvX3VzZXIoc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpldmVudCxcbiBcdGlmIChXQVJOX09OX09OQ0UoaW5mb19sZW4gXHUwMDNlIGNvdW50KSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFwZXZlbnQtXHUwMDNlcHBvcykpXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHBldmVudC1cdTAwM2Vwb3MgPT0gRkFOT1RJRllfTk9fUkFOR0UpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGluZm8uaGRyLmluZm9fdHlwZSA9IEZBTl9FVkVOVF9JTkZPX1RZUEVfUkFOR0U7XG4gXHRpbmZvLmhkci5sZW4gPSBpbmZvX2xlbjtcbi1cdGluZm8ub2Zmc2V0ID0gKihwZXZlbnQtXHUwMDNlcHBvcyk7XG4rXHRpbmZvLm9mZnNldCA9IHBldmVudC1cdTAwM2Vwb3M7XG4gXHRpbmZvLmNvdW50ID0gcGV2ZW50LVx1MDAzZWNvdW50O1xuIFxuIFx0aWYgKGNvcHlfdG9fdXNlcihidWYsIFx1MDAyNmluZm8sIGluZm9fbGVuKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjA2OjA4Ljg2MzQzMDg2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMTUyNTM2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgRmFub3RpZnkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQncyB0b3VjaGluZyBmYW5vdGlmeSwgc3BlY2lmaWNhbGx5IHRoZSBjb3JlIGZpbGVzOiBgZmFub3RpZnkuY2AsIGBmYW5vdGlmeS5oYCwgYW5kIGBmYW5vdGlmeV91c2VyLmNgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBmYW5vdGlmeSBpcyBhIGdvb2QgdGFyZ2V0LiBJIHNlZSB0aGF0IHRoZSBwYXRjaCdzIGNlbnRyYWwgbW9kaWZpY2F0aW9uIGludm9sdmVzIHJlcGxhY2luZyBhIHBvaW50ZXIgdG8gYSBgbG9mZl90YCAoYSBsb25nIGxvbmcgb2Zmc2V0KSB3aXRoIGEgZGlyZWN0IGBsb2ZmX3RgIHZhbHVlIHdpdGhpbiB0aGUgYGZhbm90aWZ5X3Blcm1fZXZlbnRgIHN0cnVjdC4gVGhpcyBsb29rcyBsaWtlIGl0J3Mgc2ltcGxpZnlpbmcgdGhlIGNvZGUsIGxpa2VseSByZW1vdmluZyBhbiB1bm5lY2Vzc2FyeSBpbmRpcmVjdGlvbiwgb3IgbWF5YmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBvZmYtYnktb25lIG9yIGRhdGEtcmFjZSBpc3N1ZSB3aXRoIHRoZSBwb2ludGVyLCBvciBzaW1wbGlmeWluZyB0aGUgbG9naWMuXG5cblRoZSBjcnVjaWFsIGNoYW5nZXMgYXJlIGluIGhvdyBgcG9zYCAoZm9ybWVybHkgcG9pbnRlZCB0byBieSBgcHBvc2ApIGlzIGhhbmRsZWQgbm93OiBpbnN0ZWFkIG9mIHN0b3JpbmcgdGhlIHBvaW50ZXIsIGBGQU5PVElGWV9OT19SQU5HRWAgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGFic2VuY2Ugb2YgYSByYW5nZS4gVGhlIGNoZWNrcyBhbHNvIHJlZmxlY3QgdGhpcyBjaGFuZ2UgZnJvbSBgcHBvc2AgYmVpbmcgY2hlY2tlZCBmb3IgbnVsbCwgdG8gYHBvc2AgYmVpbmcgY2hlY2tlZCBhZ2FpbnN0IHRoaXMgbmV3IGBGQU5PVElGWV9OT19SQU5HRWAgdmFsdWUuIFNvIGl0J3MgdmVyeSBsaWtlbHkgYSByZWZhY3RvcmluZywgbWF5YmUgd2l0aCBhIGJ1ZyBmaXggYmFrZWQgaW4uXG5cbkdpdmVuIHRoaXMsIEkgbmVlZCB0byBnZXQgdGhpcyBjb3ZlcmVkIGJ5IGZ1enppbmcsIGFuZCBxdWlja2x5LiBTbyBsZXQgbWUgcHVsbCB1cCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBPYnZpb3VzbHksIEknbGwgbmVlZCBgQ09ORklHX0ZBTk9USUZZYCBlbmFibGVkIHRvIGV2ZW4gcmVhY2ggdGhpcyBjb2RlLiBQcm9iYWJseSBgQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU2AgaXMgbmVlZGVkIGFzIHdlbGwuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgaW5zaWRlIGBmcy9ub3RpZnkvZmFub3RpZnkvS2NvbmZpZ2AgdG8gYmUgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MDY6MTQuMDc4Njg3MzUxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTA3MDY4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRkFOT1RJRllcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9ub3RpZnkvZmFub3RpZnkvS2NvbmZpZzoyOmNvbmZpZyBGQU5PVElGWVxcbmZzL25vdGlmeS9mYW5vdGlmeS9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiRmlsZXN5c3RlbSB3aWRlIGFjY2VzcyBub3RpZmljYXRpb25cXFwiXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvS2NvbmZpZy0xNC1cXG5mcy9ub3RpZnkvZmFub3RpZnkvS2NvbmZpZzoxNTpjb25maWcgRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWctMTYtXFx0Ym9vbCBcXFwiZmFub3RpZnkgcGVybWlzc2lvbnMgY2hlY2tpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjA2OjE0LjE4OTc2NDg1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTYyNDk1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBQb3RlbnRpYWwgRGF0YSBMZWFrYWdlIGluIEZhbm90aWZ5KipcblxuQWxyaWdodCwgbXkgaW50ZXJuYWwgY2hlY2tsaXN0IGhhcyBmbGFnZ2VkIHNvbWV0aGluZyB0aGF0IGFsd2F5cyB3YXJyYW50cyBhIGNsb3NlciBsb29rOiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gZmlsZSBub3RpZmljYXRpb24gZXZlbnRzIGFuZCBkYXRhIG1vdmVtZW50LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBhIHBvdGVudGlhbCBhdmVudWUgZm9yIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBsZWFrYWdlLiBNeSBpbW1lZGlhdGUgZm9jdXMgbGFuZHMgb24gdHdvIGtleSBmdW5jdGlvbnMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gcmV2aXNpdCBgZmFub3RpZnlfYWxsb2NfcGVybV9ldmVudGAuIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIGV4YWN0bHkgd2hhdCBkYXRhIGlzIGJlaW5nIHBvcHVsYXRlZCB3aXRoaW4gYSBwZXJtaXNzaW9uIGV2ZW50LiBXaGF0IGZpZWxkcyBhcmUgcG9wdWxhdGVkLCBhbmQgY3JpdGljYWxseSwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZGF0YSByZW1uYW50cyBmcm9tIHByZXZpb3VzIG9wZXJhdGlvbnMsIG9yIHBlcmhhcHMgdW5pbml0aWFsaXplZCBtZW1vcnksIHRoYXQgY291bGQgaW5hZHZlcnRlbnRseSBleHBvc2UgaW5mb3JtYXRpb24/IEknbSBwYXJ0aWN1bGFybHkgY29uY2VybmVkIGFib3V0IGFueSBjb25uZWN0aW9uIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNhbGxpbmcgcHJvY2VzcyAtIGlzIHRoZXJlIGEgY2hhbmNlIHRoYXQgaWRlbnRpZmllcnMsIGZpbGUgcGF0aHMsIG9yIGV2ZW4gaW50ZXJuYWwga2VybmVsIGRhdGEgY291bGQgbGVhayB0aHJvdWdoIHRoaXMgbWVjaGFuaXNtP1xuXG5OZXh0LCBteSBhdHRlbnRpb24gc2hpZnRzIHRvIGBjb3B5X3JhbmdlX2luZm9fdG9fdXNlcmAuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIHBpdm90YWwgY29tcG9uZW50IGZvciB0cmFuc21pdHRpbmcgdGhlIGV2ZW50IGRldGFpbHMgYmFjayB0byB1c2VyIHNwYWNlLiBNeSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyBkYXRhIGludGVncml0eS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IG9ubHkgc2FuaXRpemVkLCBhdXRob3JpemVkIGRhdGEgaXMgYmVpbmcgdHJhbnNmZXJyZWQuIEnigJltIHRoaW5raW5nIGFib3V0IHBvc3NpYmxlIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmVzLiBBcmUgdGhlcmUgc3RyaWN0IGJvdW5kcyBjaGVja3MsIGFyZSBidWZmZXJzIHByb3Blcmx5IGluaXRpYWxpemVkLCBhcmUgdGhlcmUgYW55IGJ5cGFzc2VzLCBhbmQgYXJlIGFueSBzdWJ0bGUgaW50ZWdlciBvdmVyZmxvd3MgcHJlc2VudD8gSeKAmW0gZ29pbmcgdG8gZm9jdXMgb24gaG93IHRoZSBpbmZvcm1hdGlvbiByYW5nZSBkYXRhIGlzIGJlaW5nIHZhbGlkYXRlZCBhbmQgcHJlc2VudGVkIHRvIHRoZSB1c2VyLiBJIG5lZWQgdG8ga25vdyBleGFjdGx5IGhvdyB0aGlzIHJhbmdlIGluZm9ybWF0aW9uIGlzIGJ1aWx0IGZyb20gdGhlIGtlcm5lbCdzIGludGVybmFsIHJlcHJlc2VudGF0aW9uLCBtYWtpbmcgc3VyZSB0aGVyZSdzIG5vIHdheSB0byB0cmljayB0aGUgc3lzdGVtIGludG8gcmVsZWFzaW5nIG1vcmUgZGF0YSB0aGFuIGl0IHNob3VsZC4gVWx0aW1hdGVseSwgSSdtIHRyeWluZyB0byBlbnN1cmUgdGhhdCBhIG1hbGljaW91cyB1c2VyIGNhbm5vdCBjcmFmdCBhIHNwZWNpYWxseS1kZXNpZ25lZCByZXF1ZXN0IHRoYXQgd291bGQgbGVhZCB0byBhIGRhdGEgYnJlYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzIyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MDY6MTguMDA2MDE2NTM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTMzMzU1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTU2OT1zdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19tbnRfZXZlbnQodTY0IG1udF9pZCwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtNTgyLVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jOjU4MzpzdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50KGNvbnN0IHZvaWQgKmRhdGEsXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtNTg0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGludCBkYXRhX3R5cGUsXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYz03NDM9c3RhdGljIHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZmFub3RpZnlfYWxsb2NfZXZlbnQoXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NTEtXFx0aWYgKGZhbm90aWZ5X2lzX3Blcm1fZXZlbnQobWFzaykpIHtcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYzo4NTI6XFx0XFx0ZXZlbnQgPSBmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50KGRhdGEsIGRhdGFfdHlwZSwgZ2ZwKTtcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NTMtXFx0fSBlbHNlIGlmIChmYW5vdGlmeV9pc19lcnJvcl9ldmVudChtYXNrKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDowNjoxOC4xMTUzNTUzMTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTMzODYzMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgY29weV9yYW5nZV9pbmZvX3RvX3VzZXJgLCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkFuYWx5emluZyB0aGUgYGNvcHlfcmFuZ2VfaW5mb190b191c2VyYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGlzIGBjb3B5X3JhbmdlX2luZm9fdG9fdXNlcmAgZnVuY3Rpb24uIE15IGluaXRpYWwgZ3V0IHRlbGxzIG1lIGl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIHRyYW5zZmVycmluZyBkYXRhIGFib3V0IGEgc3BlY2lmaWMgcmFuZ2Ug4oCTIHRoaW5rIGNlbGxzLCByb3dzLCBjb2x1bW5zLCBvciBhIGJsb2NrIG9mIHRoZW0g4oCTIGZyb20gc29tZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiwgbGlrZWx5IGluIHRoZSBzeXN0ZW0ncyBjb3JlLCB0byB0aGUgdXNlci4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgY29uc2lkZXJpbmcgd2hhdCBraW5kIG9mIFwiaW5mb1wiIHdlJ3JlIHRhbGtpbmcgYWJvdXQgaGVyZS4gSXMgaXQganVzdCB0aGUgZGF0YSB2YWx1ZXMgdGhlbXNlbHZlcz8gT3IgYXJlIHdlIGNvbnNpZGVyaW5nIGZvcm1hdHMsIGZvcm11bGFzLCBjb21tZW50cywgdmFsaWRhdGlvbiBydWxlcywgYWxsIHRoZSBtZXRhZGF0YT8gQW5kIGNydWNpYWxseSwgd2hhdCdzIHRoZSBzb3VyY2UgYW5kIHRhcmdldD8gVGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB3ZSdyZSB1c2luZyBvbiBvbmUgZW5kLCBhbmQgdGhlIGZvcm1hdCB0aGUgdXNlci1mYWNpbmcgc2lkZSBpcyBleHBlY3Rpbmcgb24gdGhlIG90aGVyLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyByaWdodCBhd2F5LiBEYXRhIHRyYW5zZmVyIGNhbiBiZSBzdXJwcmlzaW5nbHkgc2xvdywgZXNwZWNpYWxseSB3aXRoIGxhcmdlIHJhbmdlcy4gU28sIEkgbmVlZCB0byBjb25zaWRlcjpcblxuKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIEhvdyBhcmUgdGhlIGRhdGEgc3RydWN0dXJlcyBvbiBib3RoIGVuZHMgb3JnYW5pemVkPyBJcyB0aGVyZSBhIG5lZWQgZm9yIGNvbnZlcnNpb24gb3IgcmVzdHJ1Y3R1cmluZyB0byBtYXRjaCB0aGUgdXNlcidzIGV4cGVjdGVkIGZvcm1hdD8gV2hhdCdzIHRoZSB0aW1lIGNvbXBsZXhpdHkgb2YgdGhlIG9wZXJhdGlvbj9cbiogICAqKk1lbW9yeSBNYW5hZ2VtZW50OioqIEhvdyBtdWNoIG1lbW9yeSB3aWxsIGJlIHJlcXVpcmVkIGZvciB0aGlzIG9wZXJhdGlvbiwgZXNwZWNpYWxseSBmb3IgbGFyZ2UgcmFuZ2VzPyBBcmUgd2UgZWZmaWNpZW50bHkgdXRpbGl6aW5nIG1lbW9yeSwgb3IgbWlnaHQgdGhpcyBvcGVyYXRpb24gYmVjb21lIGEgbWVtb3J5IGhvZz8gQXJlIHdlIGNvcHlpbmcgZGF0YSwgb3IgYXJlIHdlIHBhc3NpbmcgcmVmZXJlbmNlcz9cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiB0aGVyZSdzIGEgcHJvYmxlbSBjb3B5aW5nIGEgc3BlY2lmaWMgY2VsbCdzIGluZm9ybWF0aW9uPyBIb3cgaXMgaXQgaGFuZGxlZD8gRG9lcyBpdCBmYWlsIHNpbGVudGx5LCBvciBkb2VzIGl0IHRyaWdnZXIgYW4gZXhjZXB0aW9uPyBEb2VzIGl0IGxvZyB1c2VmdWwgaW5mb3JtYXRpb24/XG4qICAgKipTZWN1cml0eToqKiBJZiB3ZSdyZSB3b3JraW5nIHdpdGggc2Vuc2l0aXZlIGRhdGEsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZGF0YSB0cmFuc2ZlciBpcyBzZWN1cmUsIGFkaGVyaW5nIHRvIGFjY2VzcyBjb250cm9scyBhbmQgcGVybWlzc2lvbnMuXG4qICAgKipDb25jdXJyZW5jeToqKiBJcyB0aGlzIGZ1bmN0aW9uIHRocmVhZC1zYWZlPyBEb2VzIGl0IG5lZWQgdG8gYmU/IElmIG11bHRpcGxlIHVzZXJzIGFyZSBzaW11bHRhbmVvdXNseSByZXF1ZXN0aW5nIGRhdGEsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgb3VyIGNvbmN1cnJlbmN5IGRlc2lnbiBpcyBzb2xpZC5cblxuSSdtIGFsc28gYW50aWNpcGF0aW5nIHRoYXQgdGhlIHRhcmdldCBzaWRlIGV4cGVjdHMgYSBzcGVjaWZpYyBmb3JtYXQuIEkgd2FudCB0byBsb29rIGludG8gaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHRoZXNlIGNvbnNpZGVyYXRpb25zLiBJcyB0aGlzIGEgc2ltcGxlIGRhdGEgY29weSwgb3IgZG8gd2UgaGF2ZSB0cmFuc2Zvcm1hdGlvbiBsb2dpYyBhdCBwbGF5PyBBIHJvYnVzdCBmdW5jdGlvbiB3aWxsIGhhbmRsZSBwb3RlbnRpYWwgZGF0YSB0eXBlIG1pc21hdGNoZXMsIG1pc3NpbmcgdmFsdWVzIGdyYWNlZnVsbHkuIEkgZXhwZWN0IHRvIGFsc28gZXZhbHVhdGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGZ1bmN0aW9uIHdoZW4gaXQgY29tZXMgdG8gZWRnZSBjYXNlcy5cbkVzc2VudGlhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2UsIGRhdGEgaW50ZWdyaXR5LCBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlLCBhbGwgaW4gcmVsYXRpb24gdG8gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1c2VyIGludGVyZmFjZSBhbmQgb3ZlcmFsbCBhcHBsaWNhdGlvbiBkZXNpZ24uIExldCdzIHNlZSBob3cgaXQncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ2MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjA2OjIzLjI0OTIyMTAyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODE4NjE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3B5X3JhbmdlX2luZm9fdG9fdXNlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM9NjQ4PXN0YXRpYyBpbnQgY29weV9waWRmZF9pbmZvX3RvX3VzZXIoaW50IHBpZGZkLFxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy02NjctXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzo2Njg6c3RhdGljIHNpemVfdCBjb3B5X3JhbmdlX2luZm9fdG9fdXNlcihzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgKmV2ZW50LFxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMtNjY5LVxcdFxcdFxcdFxcdCAgICAgIGNoYXIgX191c2VyICpidWYsIGludCBjb3VudClcXG4tLVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM9NjkyPXN0YXRpYyBpbnQgY29weV9pbmZvX3JlY29yZHNfdG9fdXNlcihzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgKmV2ZW50LFxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy04MTMtXFx0aWYgKGZhbm90aWZ5X2V2ZW50X2hhc19hY2Nlc3NfcmFuZ2UoZXZlbnQpKSB7XFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzo4MTQ6XFx0XFx0cmV0ID0gY29weV9yYW5nZV9pbmZvX3RvX3VzZXIoZXZlbnQsIGJ1ZiwgY291bnQpO1xcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMtODE1LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDowNjoyMy4zMTc0MTE2OTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDc2NjI2NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgRmFub3RpZnkgRXZlbnQgSGFuZGxpbmcqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnRgIGFuZCBgY29weV9yYW5nZV9pbmZvX3RvX3VzZXJgLiBJJ3ZlIGdvdCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IHRvIHVuZGVyc3RhbmQgdGhlIGtleSBhcmVhcyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uIGBmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50YCBpcyBpbnRlcm5hbCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEl0J3MgY2FsbGVkIGJ5IGBmYW5vdGlmeV9hbGxvY19ldmVudGAsIHdoaWNoIGlzIGFsc28gaW50ZXJuYWwsIGFuZCB0aGF0IGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBmYW5vdGlmeV9oYW5kbGVfZXZlbnRgLiBUaGF0IGdpdmVzIG1lIGEgcGF0aDogYGZhbm90aWZ5X2hhbmRsZV9ldmVudGAgXHUwMDNlIGBmYW5vdGlmeV9hbGxvY19ldmVudGAgXHUwMDNlIGBmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50YC4gTWFrZXMgc2Vuc2UsIHNvIGBmYW5vdGlmeV9oYW5kbGVfZXZlbnRgIGlzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gdGhhdCBzaWRlLlxuXG5PbiB0aGUgb3RoZXIgaGFuZCwgYGNvcHlfcmFuZ2VfaW5mb190b191c2VyYCBpcyBpbnRlcm5hbCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBjb3B5X2luZm9fcmVjb3Jkc190b191c2VyYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBjb3B5X2V2ZW50X3RvX3VzZXJgLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBmYW5vdGlmeV9yZWFkYC4gVGhhdCdzIGEgY2xlYXIgY2FsbCBzdGFjazogYGZhbm90aWZ5X3JlYWRgIFx1MDAzZSBgY29weV9ldmVudF90b191c2VyYCBcdTAwM2UgYGNvcHlfaW5mb19yZWNvcmRzX3RvX3VzZXJgIFx1MDAzZSBgY29weV9yYW5nZV9pbmZvX3RvX3VzZXJgLiBTbywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgYWxsIHdvcmtzLCBgZmFub3RpZnlfcmVhZGAgaXMgYW5vdGhlciBjcml0aWNhbCBhcmVhLCBhbmQgSSBzaG91bGQgZm9jdXMgaGVyZS5cblxuU28sIGluIHNob3J0LCB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB0aGUgY29yZSBldmVudCBoYW5kbGluZyBhbmQgZGF0YSBjb3B5aW5nLCBJIG5lZWQgdG8gZGVsdmUgaW50byBgZmFub3RpZnlfaGFuZGxlX2V2ZW50YCBhbmQgYGZhbm90aWZ5X3JlYWRgLiBUaGV5J3JlIHRoZSB2aXNpYmxlIGVudHJ5IHBvaW50cyBmb3IgcHJvY2Vzc2luZyBldmVudHMgYW5kIGNvcHlpbmcgaW5mb3JtYXRpb24gYmFjayB0byB1c2VyIHNwYWNlLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBtb3N0IGZydWl0ZnVsIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mzg4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjA2OjI3Ljc5NDA0MDM3N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU1MjA1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmFub3RpZnlfaGFuZGxlX2V2ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTE4MD1zdGF0aWMgaW50IGZhbm90aWZ5X21lcmdlKHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy0xOTItXFx0ICogRG9uJ3QgbWVyZ2UgYSBwZXJtaXNzaW9uIGV2ZW50IHdpdGggYW55IG90aGVyIGV2ZW50IHNvIHRoYXQgd2Uga25vd1xcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jOjE5MzpcXHQgKiB0aGUgZXZlbnQgc3RydWN0dXJlIHdlIGhhdmUgY3JlYXRlZCBpbiBmYW5vdGlmeV9oYW5kbGVfZXZlbnQoKSBpcyB0aGVcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy0xOTQtXFx0ICogb25lIHdlIHNob3VsZCBjaGVjayBmb3IgcGVybWlzc2lvbiByZXNwb25zZS5cXG4tLVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTkwOD1zdGF0aWMgdm9pZCBmYW5vdGlmeV9pbnNlcnRfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCxcXG4tLVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jLTkyNS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYzo5MjY6c3RhdGljIGludCBmYW5vdGlmeV9oYW5kbGVfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwgdTMyIG1hc2ssXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtOTI3LVxcdFxcdFxcdFxcdCBjb25zdCB2b2lkICpkYXRhLCBpbnQgZGF0YV90eXBlLFxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM9MTExND1jb25zdCBzdHJ1Y3QgZnNub3RpZnlfb3BzIGZhbm90aWZ5X2Zzbm90aWZ5X29wcyA9IHtcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYzoxMTE1OlxcdC5oYW5kbGVfZXZlbnQgPSBmYW5vdGlmeV9oYW5kbGVfZXZlbnQsXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtMTExNi1cXHQuZnJlZV9ncm91cF9wcml2ID0gZmFub3RpZnlfZnJlZV9ncm91cF9wcml2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDowNjoyNy44NDk1NzE1OTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMzMxMzEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOlxuXG4qKkRpdmluZyBpbnRvIGZhbm90aWZ5IEludGVybmFscyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgZmFub3RpZnlgIHN5c3RlbSBjYWxscywgc3BlY2lmaWNhbGx5IGhvdyB0aGV5IGludGVyZmFjZSB3aXRoIHRoZSBrZXJuZWwuIEkgc2VlIHRoYXQgYGZhbm90aWZ5X2hhbmRsZV9ldmVudGAgaXMgKnRoZSogcG9pbnQgb2YgZW50cnkgZm9yIHRoZSBgZnNub3RpZnlfb3BzYCBzdHJ1Y3R1cmUuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIGdhdGVrZWVwZXIsIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IHByb2Nlc3NlcyB0aG9zZSBgZmFub3RpZnlgIGV2ZW50cyB3aGVuIHRoZXkgaGFwcGVuLiBJdCdzIHRoZSBjb3JlIG9mIGhvdyB0aGUgZmlsZSBzeXN0ZW0gbm90aWZpY2F0aW9ucyBhcmUgaGFuZGxlZCB1bmRlciB0aGUgaG9vZC5cblxuVGhlbiwgdGhlcmUncyBgZmFub3RpZnlfcmVhZGAuIFRoaXMgb25lJ3MgY2xlYXJseSBob29raW5nIGludG8gdGhlIGBmaWxlX29wZXJhdGlvbnNgIHN0cnVjdHVyZS4gRXNzZW50aWFsbHksIHRoaXMgaXMgaG93IHVzZXIgc3BhY2UgY2FuICpnZXQqIHRoZSBldmVudHMsIHJlYWRpbmcgdGhlbSBmcm9tIHRoZSBmaWxlIGRlc2NyaXB0b3IuIFNvLCBgZmFub3RpZnlfaGFuZGxlX2V2ZW50YCBwcm9jZXNzZXMgdGhlIGV2ZW50cyB3aGVuIHRoZXkgYXJpc2UsIGFuZCBgZmFub3RpZnlfcmVhZGAgYWxsb3dzIGEgdXNlciBwcm9jZXNzIHRvIHJldHJpZXZlIHRoZSBxdWV1ZWQgZXZlbnRzLiBUaGV54oCZcmUgdGhlIHR3byBzaWRlcyBvZiB0aGUgc2FtZSBjb2luOiBvbmUgZ2VuZXJhdGVzIHRoZSBldmVudCwgdGhlIG90aGVyIHByb3ZpZGVzIGFjY2VzcyB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM1NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjA2OjMxLjA4Mjg4NzUyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIyOTI5NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmFub3RpZnlfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM9OTY0PXN0YXRpYyBfX3BvbGxfdCBmYW5vdGlmeV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy05NzctXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzo5Nzg6c3RhdGljIHNzaXplX3QgZmFub3RpZnlfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTk3OS1cXHRcXHRcXHQgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jPTExNjk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmFub3RpZnlfZm9wcyA9IHtcXG4tLVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMtMTE3MS1cXHQucG9sbFxcdFxcdD0gZmFub3RpZnlfcG9sbCxcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jOjExNzI6XFx0LnJlYWRcXHRcXHQ9IGZhbm90aWZ5X3JlYWQsXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xMTczLVxcdC53cml0ZVxcdFxcdD0gZmFub3RpZnlfd3JpdGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjA2OjMxLjE4NTE4NTk3NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg4Mzc2MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRmFub3RpZnkgRXZlbnQgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHRoZSBjb3JlIGZ1bmN0aW9ucyBhZmZlY3RlZCBoZXJlIHNlZW0gdG8gYmUgYGZhbm90aWZ5X2hhbmRsZV9ldmVudGAgYW5kIGBmYW5vdGlmeV9yZWFkYC4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbml0ZWx5IGBGQU5PVElGWWAgYW5kIGBGQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlNgLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBlbmFibGluZyB0aGUgZnVuY3Rpb25hbGl0eS5cblxuVGhlIGtleSBjaGFuZ2UsIGZyb20gd2hhdCBJJ20gc2VlaW5nLCBpcyBob3cgdGhlIHJhbmdlIGluZm9ybWF0aW9uIGlzIGJlaW5nIGhhbmRsZWQgd2l0aGluIHRoZSBgc3RydWN0IGZhbm90aWZ5X3Blcm1fZXZlbnRgLiBJbnN0ZWFkIG9mIHVzaW5nIGEgcG9pbnRlciB0byBzdG9yZSB0aGUgcmFuZ2UgZGF0YSwgdGhleSdyZSBzd2l0Y2hpbmcgdG8gc3RvcmluZyB0aGUgdmFsdWUgZGlyZWN0bHkuIEFuZCwgaW1wb3J0YW50bHksIGBGQU5PVElGWV9OT19SQU5HRWAgaXMgYmVpbmcgdXNlZCB0byBzaWduaWZ5IHdoZW4gbm8gcmFuZ2UgaXMgcHJlc2VudC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlOyBpdCdzIGdvaW5nIHRvIGltcGFjdCBob3cgd2UgYWNjZXNzIGFuZCBpbnRlcnByZXQgdGhpcyBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIHdoZW4gY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucy5cblxuTm93LCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIGludGVyYWN0cyB3aXRoIGFueSBvdGhlciBjb25maWd1cmF0aW9ucy4gTXkgcmVjb2xsZWN0aW9uIGlzIHRoYXQgYEZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU2AgaXMgcmVxdWlyZWQgYnkgYGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnRgLCBzbyBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZG9lc24ndCBjcmVhdGUgYW55IHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zIG9yIGRlcGVuZGVuY2llcy4gVGltZSB0byBkaWcgYSBiaXQgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTY0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjA2OjM1LjU3MzU5NTA2OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkxNjIwMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmFub3RpZnlfYWxsb2NfcGVybV9ldmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9ub3RpZnkvZmFub3RpZnkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jPTU2OT1zdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19tbnRfZXZlbnQodTY0IG1udF9pZCwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtNTgyLVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jOjU4MzpzdGF0aWMgc3RydWN0IGZhbm90aWZ5X2V2ZW50ICpmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50KGNvbnN0IHZvaWQgKmRhdGEsXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtNTg0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGludCBkYXRhX3R5cGUsXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYz03NDM9c3RhdGljIHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZmFub3RpZnlfYWxsb2NfZXZlbnQoXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NTEtXFx0aWYgKGZhbm90aWZ5X2lzX3Blcm1fZXZlbnQobWFzaykpIHtcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYzo4NTI6XFx0XFx0ZXZlbnQgPSBmYW5vdGlmeV9hbGxvY19wZXJtX2V2ZW50KGRhdGEsIGRhdGFfdHlwZSwgZ2ZwKTtcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NTMtXFx0fSBlbHNlIGlmIChmYW5vdGlmeV9pc19lcnJvcl9ldmVudChtYXNrKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDowNjozNS42NDI3NjIwMDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5MDUxMTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gdGhlIEZhbm90aWZ5IENvZGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgYGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnRgLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIE15IHByaW1hcnkgY29uY2VybiBpcyB0byBhdm9pZCB0cnlpbmcgdG8gdXNlIHNvbWV0aGluZyB0aGF0IG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgaW4gYSBnaXZlbiBrZXJuZWwgY29uZmlndXJhdGlvbi4gU28sIEkgbmVlZCB0byBpbW1lZGlhdGVseSB2ZXJpZnkgaWYgYGZhbm90aWZ5X2FsbG9jX3Blcm1fZXZlbnRgIGlzIHdyYXBwZWQgd2l0aGluIGFuIGAjaWZkZWZgIGJsb2NrIGZvciBgQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU2AuIElmIHRoYXQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpc24ndCBkZWZpbmVkLCBJIGhhdmUgdG8gYXNzdW1lIHRoZSBmdW5jdGlvbiB3b24ndCBiZSBjb21waWxlZCBhbmQgbXVzdCBiZSBza2lwcGVkLiBJIGNhbid0IHJlbHkgb24gaXRzIGV4aXN0ZW5jZTsgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBmbGFncyBhbmQga2VybmVsIGNvbmZpZyB0byB1bmRlcnN0YW5kIGl0cyBhdmFpbGFiaWxpdHkuIEl0J3MgYSBxdWljayBjaGVjaywgYnV0IGEgY3JpdGljYWwgb25lIGJlZm9yZSBwcm9jZWVkaW5nIGFueSBmdXJ0aGVyIHdpdGggYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9ucy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgSSBzdGFuZCBmcm9tIHRoZSBvdXRzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDowNjozOC43MzMyNzcxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkyMjYwMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9ub3RpZnkvZmFub3RpZnkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5oPTQ2Mj1zdGF0aWMgaW5saW5lIGJvb2wgZmFub3RpZnlfaXNfcGVybV9ldmVudCh1MzIgbWFzaylcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuaC00NjMte1xcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5oOjQ2NDpcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TKSBcXHUwMDI2XFx1MDAyNlxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5oLTQ2NS1cXHRcXHRtYXNrIFxcdTAwMjYgRkFOT1RJRllfUEVSTV9FVkVOVFM7XFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jPTEwNTU9c3RhdGljIHNzaXplX3QgZmFub3RpZnlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTEwNjItXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzoxMDYzOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TKSlcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTEwNjQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jPTE4NTY9c3RhdGljIGludCBkb19mYW5vdGlmeV9tYXJrKGludCBmYW5vdGlmeV9mZCwgdW5zaWduZWQgaW50IGZsYWdzLCBfX3U2NCBtYXNrLFxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xOTE0LVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM6MTkxNTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TKSlcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTE5MTYtXFx0XFx0dmFsaWRfbWFzayB8PSBGQU5PVElGWV9QRVJNX0VWRU5UUztcXG4tLVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM9MjE1Nj1zdGF0aWMgaW50IF9faW5pdCBmYW5vdGlmeV91c2VyX3NldHVwKHZvaWQpXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTIxODItXFx0XFx0XFx0XFx0XFx0XFx0U0xBQl9QQU5JQyk7XFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYzoyMTgzOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19GQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMpKSB7XFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0yMTg0LVxcdFxcdGZhbm90aWZ5X3Blcm1fZXZlbnRfY2FjaGVwID1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MDY6MzguODAyNTA5NTU2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDU2OTM0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogZmFub3RpZnkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGBmYW5vdGlmeWAgc3Vic3lzdGVtLiBUaGUga2V5IGhlcmUsIHRvIG1ha2UgdGhpcyB3b3J0aHdoaWxlIGZvciBmdXp6aW5nLCBpcyB0byBjb25maXJtIGEgZmV3IHRoaW5ncy4gRmlyc3QsIGBmYW5vdGlmeV9pc19wZXJtX2V2ZW50YCBjaGVja3MgZm9yIGBJU19FTkFCTEVEKENPTkZJR19GQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMpYC4gVGhpcyBpcyBzaWduaWZpY2FudCEgU28sIGl0IGxvb2tzIGxpa2UgYEZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OU2AgaXMgYWJzb2x1dGVseSByZXF1aXJlZC4gSSBhbHNvIGtub3cgdGhhdCBgRkFOT1RJRllgIGl0c2VsZiBoYXMgdG8gYmUgZW5hYmxlZC5cblxuVGhlcmVmb3JlLCBmb3IgbXkgZnV6emluZyBhcHByb2FjaCwgSSdtIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBlbnRyeSBwb2ludHMsIHNvIEkgd2lsbCBwcmlvcml0aXplIGBmYW5vdGlmeV9oYW5kbGVfZXZlbnRgIGFuZCBgZmFub3RpZnlfcmVhZGAgYXMgY3JpdGljYWwgZnV6eiB0YXJnZXRzLiBUbyBtYWtlIHN1cmUgdGhlIHN1YnN5c3RlbSBpcyBjb25maWd1cmVkIGNvcnJlY3RseSB0byB0cmlnZ2VyIHRoZXNlIGZ1bmN0aW9ucywgSSB3aWxsIHNwZWNpZnkgYEVuYWJsZUNvbmZpZ3M9W1wiRkFOT1RJRllcIiwgXCJGQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlNcIl1gLiBJJ20gY29uZmlkZW50IHRoaXMgc2V0dXAgd2lsbCBnaXZlIG1lIGEgZ29vZCBzaG90IGF0IHJldmVhbGluZyB2dWxuZXJhYmlsaXRpZXMgd2l0aGluIHRoZSBgZmFub3RpZnlgIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU2NSwiT3V0cHV0VG9rZW5zIjoxMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MDY6NDIuOTA4MjEwMzY4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MDEzNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGQU5PVElGWVwiLFxuICAgIFwiRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmFub3RpZnlfaGFuZGxlX2V2ZW50XCIsXG4gICAgXCJmYW5vdGlmeV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSByYW5nZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgYW5kIGNvcGllZCB0byB1c2Vyc3BhY2UgZm9yIGZhbm90aWZ5IHBlcm1pc3Npb24gZXZlbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZmFub3RpZnkgbG9naWMuIEl0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGQU5PVElGWVwiLFxuICAgIFwiRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmFub3RpZnlfaGFuZGxlX2V2ZW50XCIsXG4gICAgXCJmYW5vdGlmeV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSByYW5nZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgYW5kIGNvcGllZCB0byB1c2Vyc3BhY2UgZm9yIGZhbm90aWZ5IHBlcm1pc3Npb24gZXZlbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZmFub3RpZnkgbG9naWMuIEl0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflownw68s[1] Phase: Succeeded StartedAt: 2026-08-01 04:06:55 +0000 UTC FinishedAt: 2026-08-01 04:06:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 04:06:55 +0000 UTC FinishedAt: 2026-08-01 04:06:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2] Phase: Succeeded StartedAt: 2026-08-01 04:06:55 +0000 UTC FinishedAt: 2026-08-01 05:35:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 04:06:55 +0000 UTC FinishedAt: 2026-08-01 05:35:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 04:06:55 +0000 UTC FinishedAt: 2026-08-01 04:07:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 04:06:55 +0000 UTC FinishedAt: 2026-08-01 04:07:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflownw68s/series-workflownw68s-convert-artifact-2821016116/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 04:07:05 +0000 UTC FinishedAt: 2026-08-01 04:24:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 04:07:05 +0000 UTC FinishedAt: 2026-08-01 04:24:33 +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:*556e3cfa-8bc6-49ef-86cb-6f93021f038d,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-workflownw68s/series-workflownw68s-convert-artifact-2821016116/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": "daf5351f-0f25-493e-aa35-8eca329b1ed6", "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-workflownw68s/series-workflownw68s-build-action-76087346/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 04:07:05 +0000 UTC FinishedAt: 2026-08-01 04:24:23 +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:*556e3cfa-8bc6-49ef-86cb-6f93021f038d,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-workflownw68s/series-workflownw68s-convert-artifact-2821016116/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": "daf5351f-0f25-493e-aa35-8eca329b1ed6", "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-workflownw68s/series-workflownw68s-build-action-76087346/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 04:24:33 +0000 UTC FinishedAt: 2026-08-01 04:24:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 04:24:33 +0000 UTC FinishedAt: 2026-08-01 04:24:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 04:24:33 +0000 UTC FinishedAt: 2026-08-01 04:24:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 04:24:33 +0000 UTC FinishedAt: 2026-08-01 04:24:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflownw68s/series-workflownw68s-convert-artifact-1014686707/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 04:24:43 +0000 UTC FinishedAt: 2026-08-01 04:26:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 04:24:43 +0000 UTC FinishedAt: 2026-08-01 04:26:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*daf5351f-0f25-493e-aa35-8eca329b1ed6,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-workflownw68s/series-workflownw68s-build-action-76087346/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-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 04:26:52 +0000 UTC FinishedAt: 2026-08-01 04:26:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 04:26:52 +0000 UTC FinishedAt: 2026-08-01 04:26:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 04:26:52 +0000 UTC FinishedAt: 2026-08-01 04:45:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 04:26:52 +0000 UTC FinishedAt: 2026-08-01 04:45:35 +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:*556e3cfa-8bc6-49ef-86cb-6f93021f038d,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-workflownw68s/series-workflownw68s-convert-artifact-1014686707/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": "e400c2df-6ec9-40f1-9b62-d85c97f33b09", "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-workflownw68s/series-workflownw68s-build-action-2711722919/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 04:26:52 +0000 UTC FinishedAt: 2026-08-01 04:45:24 +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:*556e3cfa-8bc6-49ef-86cb-6f93021f038d,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-workflownw68s/series-workflownw68s-convert-artifact-1014686707/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": "e400c2df-6ec9-40f1-9b62-d85c97f33b09", "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-workflownw68s/series-workflownw68s-build-action-2711722919/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 04:45:35 +0000 UTC FinishedAt: 2026-08-01 04:45:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 04:45:35 +0000 UTC FinishedAt: 2026-08-01 04:45:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 04:45:35 +0000 UTC FinishedAt: 2026-08-01 04:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 04:45:35 +0000 UTC FinishedAt: 2026-08-01 04:47:19 +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:*e400c2df-6ec9-40f1-9b62-d85c97f33b09,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-workflownw68s/series-workflownw68s-build-action-2711722919/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-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 04:47:33 +0000 UTC FinishedAt: 2026-08-01 05:35:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 04:47:33 +0000 UTC FinishedAt: 2026-08-01 04:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 04:47:33 +0000 UTC FinishedAt: 2026-08-01 04:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 04:47:34 +0000 UTC FinishedAt: 2026-08-01 05:35:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*daf5351f-0f25-493e-aa35-8eca329b1ed6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e400c2df-6ec9-40f1-9b62-d85c97f33b09,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-workflownw68s/series-workflownw68s-build-action-76087346/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-workflownw68s/series-workflownw68s-build-action-2711722919/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 04:47:34 +0000 UTC FinishedAt: 2026-08-01 04:47:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 04:47:34 +0000 UTC FinishedAt: 2026-08-01 04:47:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownw68s/series-workflownw68s-convert-artifact-942741228/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 04:47:34 +0000 UTC FinishedAt: 2026-08-01 04:47:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 04:47:50 +0000 UTC FinishedAt: 2026-08-01 05:35:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw68s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fanotify_handle_event","fanotify_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["FANOTIFY","FANOTIFY_ACCESS_PERMISSIONS"],"series_id":"ebddd7f6-8f8b-4746-9cde-7e823f7b11f3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 04:47:50 +0000 UTC FinishedAt: 2026-08-01 05:35:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*daf5351f-0f25-493e-aa35-8eca329b1ed6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e400c2df-6ec9-40f1-9b62-d85c97f33b09,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-workflownw68s/series-workflownw68s-build-action-76087346/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-workflownw68s/series-workflownw68s-build-action-2711722919/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-workflownw68s/series-workflownw68s-convert-artifact-942741228/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,}