Name: series-workflow6cp52 Phase: Succeeded StartedAt: 2026-09-07 18:01:00 +0000 UTC FinishedAt: 2026-09-07 22:02:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[0] Phase: Succeeded StartedAt: 2026-09-07 18:01:00 +0000 UTC FinishedAt: 2026-09-07 18:22:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 18:01:00 +0000 UTC FinishedAt: 2026-09-07 18:22:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c96294afbcb5737da18229e788ca45a5d534abc5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "HUGETLB_PAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c96294afbcb5737da18229e788ca45a5d534abc5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "HUGETLB_PAGE" ], "series_id": "90ff0e2b-4793-489c-b92d-1f1c82af5f07" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_reserve_pages", "hugepage_subpool_put_pages", "hugetlbfs_file_mmap" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX3Jlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXRsYmZzX2ZpbGVfbW1hcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlb3JkZXJzIGVycm9yLXBhdGggY2xlYW51cHMgaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCB0byBwcmV2ZW50IGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgLyBkb3VibGUtZnJlZSBjb25kaXRpb24gd2hlcmUgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKClgIGNvdWxkIHJlbGVhc2UgYW5kIGZyZWUgYHNwb29sYCB2aWEgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woKWAsIGZvbGxvd2VkIGJ5IGEgc3Vic2VxdWVudCBhY2Nlc3MgdG8gYHNwb29sYCBpbiB0aGUgYGlmIChnYmxfcmVzZXJ2ZSBcdTAwMjZcdTAwMjYgc3Bvb2wpYCBibG9jay5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljLiBUaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCBpcyBhIG1lbW9yeSBsaWZldGltZSAvIFVBRiBpc3N1ZSwgd2hpY2ggaXMgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyB0ZWFyZG93biBvcmRlcmluZyBpbiBodWdldGxiX3Jlc2VydmVfcGFnZXMoKSBpbiBtbS9odWdldGxiLmMgdG8gcmVzdG9yZSB1c2VkX2hwYWdlcyBiZWZvcmUgcHV0dGluZyBzdWJwb29sIHJlc2VydmF0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGV4ZXJjaXNlZCB3aGVuIGh1Z2V0bGIgcmVzZXJ2YXRpb25zIGZhaWwgb3IgcmFjZSBkdXJpbmcgbW1hcCwgbWVtZmRfY3JlYXRlLCBvciBzaG1nZXQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ODJkNTQ4ZWU1YmU4NjFiNTFmMmU2ZDY1Njc3YjA1YmU1MTdkYWFjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxODoyMTo0NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDc4NTc3Mjg0NTc5NTIuLjNlM2NkYTE4MWU3MjQgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTY4MDgsMTUgJiM0Mzs2ODA4LDYgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBvdXRfcHV0X3BhZ2VzOlxuIFx0c3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlO1xuLVx0aWYgKHNwb29sX3Jlc3YpIHtcbi1cdFx0LyogcHV0IHN1YiBwb29sJiMzOTtzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovXG4tXHRcdGdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpO1xuLVx0XHQvKlxuLVx0XHQgKiBzdWJwb29sJiMzOTtzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsXG4tXHRcdCAqIHJldHVybiB0byBoc3RhdGUuXG4tXHRcdCAqL1xuLVx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XG4tXHR9XG4gXHQvKiBSZXN0b3JlIHVzZWRfaHBhZ2VzIGZvciBwYWdlcyB0aGF0IGZhaWxlZCBnbG9iYWwgcmVzZXJ2YXRpb24gKi9cbiBcdGlmIChnYmxfcmVzZXJ2ZSBcdTAwMjZcdTAwMjYgc3Bvb2wpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbkBAIC02ODI2LDYgJiM0Mzs2ODE3LDE1IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7XG4gXHRcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbiBcdH1cbiYjNDM7XHRpZiAoc3Bvb2xfcmVzdikge1xuJiM0MztcdFx0LyogcHV0IHN1YiBwb29sJiMzOTtzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovXG4mIzQzO1x0XHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBzdWJwb29sJiMzOTtzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsXG4mIzQzO1x0XHQgKiByZXR1cm4gdG8gaHN0YXRlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XG4mIzQzO1x0fVxuIG91dF91bmNoYXJnZV9jZ3JvdXA6XG4gXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXG4gXHRcdFx0XHRcdCAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmc19maWxlX21tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHRlYXJkb3duIG9yZGVyaW5nIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpIGluIG1tL2h1Z2V0bGIuYyB0byByZXN0b3JlIHVzZWRfaHBhZ2VzIGJlZm9yZSBwdXR0aW5nIHN1YnBvb2wgcmVzZXJ2YXRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhlcmNpc2VkIHdoZW4gaHVnZXRsYiByZXNlcnZhdGlvbnMgZmFpbCBvciByYWNlIGR1cmluZyBtbWFwLCBtZW1mZF9jcmVhdGUsIG9yIHNobWdldC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY4MmQ1NDhlZTViZTg2MWI1MWYyZTZkNjU2NzdiMDViZTUxN2RhYWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE4OjIxOjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDc4NTc3Mjg0NTc5NTIuLjNlM2NkYTE4MWU3MjQgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTY4MDgsMTUgJiM0Mzs2ODA4LDYgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwKIAogb3V0X3B1dF9wYWdlczoKIAlzcG9vbF9yZXN2ID0gY2hnIC0gZ2JsX3Jlc2VydmU7Ci0JaWYgKHNwb29sX3Jlc3YpIHsKLQkJLyogcHV0IHN1YiBwb29sJiMzOTtzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovCi0JCWdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpOwotCQkvKgotCQkgKiBzdWJwb29sJiMzOTtzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsCi0JCSAqIHJldHVybiB0byBoc3RhdGUuCi0JCSAqLwotCQlodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7Ci0JfQogCS8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqLwogCWlmIChnYmxfcmVzZXJ2ZSAmYW1wOyZhbXA7IHNwb29sKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC02ODI2LDYgJiM0Mzs2ODE3LDE1IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7CiAJCXVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTsKIAl9CiYjNDM7CWlmIChzcG9vbF9yZXN2KSB7CiYjNDM7CQkvKiBwdXQgc3ViIHBvb2wmIzM5O3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi8KJiM0MzsJCWdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpOwomIzQzOwkJLyoKJiM0MzsJCSAqIHN1YnBvb2wmIzM5O3MgcmVzZXJ2ZWQgcGFnZXMgY2FuIG5vdCBiZSBwdXQgYmFjayBkdWUgdG8gcmFjZSwKJiM0MzsJCSAqIHJldHVybiB0byBoc3RhdGUuCiYjNDM7CQkgKi8KJiM0MzsJCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2KTsKJiM0MzsJfQogb3V0X3VuY2hhcmdlX2Nncm91cDoKIAlodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksCiAJCQkJCSAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIwMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBodWdldGxiLmNgIERpZmY6IFJlc2VydmF0aW9uIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaHVnZXRsYi5jYCBkaWZmLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgd2l0aGluIHRoZSBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IHBhZ2UgcmVzZXJ2YXRpb25zIGFyZSBtYW5hZ2VkLCBsaWtlbHkgd2l0aGluIHN1YnBvb2xzIGFuZCB0aGUgZ2xvYmFsIHBvb2wuIFRoZSBjaGFuZ2UgaXMgY2xlYXJseSBmb2N1c2VkIG9uIHRoZSBsb2dpYyBhZnRlciB0aGUgZ2xvYmFsIHJlc2VydmF0aW9uIGF0dGVtcHQsIGFuZCBJIHNlZSB0aGUgY3J1Y2lhbCBsaW5lIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AgY2FsbGVkLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIGNvZGUgYXR0ZW1wdGVkIHRvIHJlbGVhc2UgYSBzdWJwb29sJiMzOTtzIHJlc2VydmF0aW9uIGlmIGEgZ2xvYmFsIHJlc2VydmF0aW9uIGZhaWxlZC4gSXQgbG9va3MgbGlrZSBpdCB3YXMgYXR0ZW1wdGluZyB0byBwdXQgdGhlIHN1YnBvb2wmIzM5O3MgcmVzZXJ2YXRpb24gYmFjaywgYW5kIGlmIGl0IGNvdWxkIG5vdCwgaXQgd291bGQgcmV0dXJuIHRoZSBwYWdlcyB0byB0aGUgaHN0YXRlLgoKVGhlIGRpZmYgaW50cm9kdWNlcyBhIGNoYW5nZS4gVGhlIG9yaWdpbmFsIGxvZ2ljIHdhcyBpbnNpZGUgYSBjb25kaXRpb25hbCBgaWYgKHNwb29sX3Jlc3YpYC4gTm93IHRoYXQgaWYgc3RhdGVtZW50IGlzIHJlcGVhdGVkLiBUaGUgc2Vjb25kIHRpbWUsIGFmdGVyIHRoZSBsaW5lcyBmb3IgcGFnZSByZXN0b3JlIGlmIGdsb2JhbCByZXNlcnZhdGlvbiBmYWlsZWQuIFRoaXMgaW1wbGllcyB0aGVyZSB3YXMgYSBidWcgd2hlcmUgdGhlIHN1YnBvb2wmIzM5O3MgcmVzZXJ2YXRpb24gd2FzbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgcHV0IGJhY2sgaW4gY2VydGFpbiBzY2VuYXJpb3MsIHByb2JhYmx5IHJlbGF0ZWQgdG8gcmFjZSBjb25kaXRpb25zLiBUaGUgY29tbWVudGVkLW91dCBsaW5lcyBwb2ludCB0byBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBzdWJwb29sJiMzOTtzIHJlc2VydmVkIHBhZ2VzIGNhbiYjMzk7dCBiZSBwdXQgYmFjayBhbmQgdGhhdCB0aGUgc3VicG9vbCYjMzk7cyByZXNlcnZlZCBwYWdlcyBuZWVkIHRvIGJlIHJldHVybmVkIHRvIHRoZSBoc3RhdGUuIFRoZSBjb21tZW50IGAvKiBSZXN0b3JlIHVzZWRfaHBhZ2VzIGZvciBwYWdlcyB0aGF0IGZhaWxlZCBnbG9iYWwgcmVzZXJ2YXRpb24gKi9gIGFsc28gYWxpZ25zIHdpdGggdGhpcyB1bmRlcnN0YW5kaW5nLiBUaGUgb3JpZ2luYWwgbG9naWMgbGlrZWx5IGhhZCBhIGhvbGUgaW4gaXRzIGhhbmRsaW5nIG9mIHJlc2VydmF0aW9uIHJlZnVuZHMgd2hlbiBhIGdsb2JhbCByZXNlcnZhdGlvbiBmYWlsZWQsIGxlYWRpbmcgdG8gbWVtb3J5IGxlYWtzIG9yIGluY29ycmVjdCBhY2NvdW50aW5nLiBUaGUgZHVwbGljYXRlZCBjb2RlIGVuc3VyZXMgdGhlIHJlc2VydmF0aW9uIGlzIGFsd2F5cyBwdXQgYmFjaywgaXJyZXNwZWN0aXZlIG9mIGEgc3VjY2Vzc2Z1bCBnbG9iYWwgcmVzZXJ2YXRpb24sIGFuZCBsaWtlbHkgYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlJiMzOTtzIGV4ZWN1dGlvbiBwYXRocyB0byBjb25maXJtIHRoaXMsIGJ1dCB0aGF0JiMzOTtzIG15IHdvcmtpbmcgaHlwb3RoZXNpcyBiYXNlZCBvbiB0aGUgZGlmZiBhbmQgdGhlIGNvbW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjc3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NzcwOlx0XHRcdGFkZCA9IHJlZ2lvbl9hZGQocmVzdl9tYXAsIGZyb20sIHRvLCByZWdpb25zX25lZWRlZCwgaCwgaF9jZyk7XG42NzcxOlx0XG42NzcyOlx0XHRcdGlmICh1bmxpa2VseShhZGQgXHUwMDNjIDApKSB7XG42NzczOlx0XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuNjc3NDpcdFx0XHRcdGVyciA9IGFkZDtcbjY3NzU6XHRcdFx0XHRnb3RvIG91dF9wdXRfcGFnZXM7XG42Nzc2Olx0XHRcdH0gZWxzZSBpZiAodW5saWtlbHkoY2hnIFx1MDAzZSBhZGQpKSB7XG42Nzc3Olx0XHRcdFx0LypcbjY3Nzg6XHRcdFx0XHQgKiBwYWdlcyBpbiB0aGlzIHJhbmdlIHdlcmUgYWRkZWQgdG8gdGhlIHJlc2VydmVcbjY3Nzk6XHRcdFx0XHQgKiBtYXAgYmV0d2VlbiByZWdpb25fY2hnIGFuZCByZWdpb25fYWRkLiAgVGhpc1xuNjc4MDpcdFx0XHRcdCAqIGluZGljYXRlcyBhIHJhY2Ugd2l0aCBhbGxvY19odWdldGxiX2ZvbGlvLiAgQWRqdXN0XG42NzgxOlx0XHRcdFx0ICogdGhlIHN1YnBvb2wgYW5kIHJlc2VydmUgY291bnRzIG1vZGlmaWVkIGFib3ZlXG42NzgyOlx0XHRcdFx0ICogYmFzZWQgb24gdGhlIGRpZmZlcmVuY2UuXG42NzgzOlx0XHRcdFx0ICovXG42Nzg0Olx0XHRcdFx0bG9uZyByc3ZfYWRqdXN0O1xuNjc4NTpcdFxuNjc4NjpcdFx0XHRcdC8qXG42Nzg3Olx0XHRcdFx0ICogaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoKSB3aWxsIHB1dCB0aGVcbjY3ODg6XHRcdFx0XHQgKiByZWZlcmVuY2UgdG8gaF9jZy1cdTAwM2Vjc3MuIFNlZSBjb21tZW50IGJlbG93IGZvciBkZXRhaWwuXG42Nzg5Olx0XHRcdFx0ICovXG42NzkwOlx0XHRcdFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoXG42NzkxOlx0XHRcdFx0XHRoc3RhdGVfaW5kZXgoaCksXG42NzkyOlx0XHRcdFx0XHQoY2hnIC0gYWRkKSAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuNjc5MzpcdFxuNjc5NDpcdFx0XHRcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCxcbjY3OTU6XHRcdFx0XHRcdFx0XHRcdFx0Y2hnIC0gYWRkKTtcbjY3OTY6XHRcdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcbjY3OTc6XHRcdFx0fSBlbHNlIGlmIChoX2NnKSB7XG42Nzk4Olx0XHRcdFx0LypcbjY3OTk6XHRcdFx0XHQgKiBUaGUgZmlsZV9yZWdpb25zIHdpbGwgaG9sZCB0aGVpciBvd24gcmVmZXJlbmNlIHRvXG42ODAwOlx0XHRcdFx0ICogaF9jZy1cdTAwM2Vjc3MuIFNvIHdlIHNob3VsZCByZWxlYXNlIHRoZSByZWZlcmVuY2UgaGVsZFxuNjgwMTpcdFx0XHRcdCAqIHZpYSBodWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwX3JzdmQoKSB3aGVuIHdlIGFyZVxuNjgwMjpcdFx0XHRcdCAqIGRvbmUuXG42ODAzOlx0XHRcdFx0ICovXG42ODA0Olx0XHRcdFx0aHVnZXRsYl9jZ3JvdXBfcHV0X3JzdmRfY2dyb3VwKGhfY2cpO1xuNjgwNTpcdFx0XHR9XG42ODA2Olx0XHR9XG42ODA3Olx0XHRyZXR1cm4gY2hnO1xuNjgwODpcdFxuNjgwOTpcdG91dF9wdXRfcGFnZXM6XG42ODEwOlx0XHRzcG9vbF9yZXN2ID0gY2hnIC0gZ2JsX3Jlc2VydmU7XG42ODExOlx0XHQvKiBSZXN0b3JlIHVzZWRfaHBhZ2VzIGZvciBwYWdlcyB0aGF0IGZhaWxlZCBnbG9iYWwgcmVzZXJ2YXRpb24gKi9cbjY4MTI6XHRcdGlmIChnYmxfcmVzZXJ2ZSBcdTAwMjZcdTAwMjYgc3Bvb2wpIHtcbjY4MTM6XHRcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjY4MTQ6XHRcbjY4MTU6XHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuNjgxNjpcdFx0XHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcbjY4MTc6XHRcdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcbjY4MTg6XHRcdFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuNjgxOTpcdFx0fVxuNjgyMDpcdFx0aWYgKHNwb29sX3Jlc3YpIHtcbjY4MjE6XHRcdFx0LyogcHV0IHN1YiBwb29sJiMzOTtzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovXG42ODIyOlx0XHRcdGdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpO1xuNjgyMzpcdFx0XHQvKlxuNjgyNDpcdFx0XHQgKiBzdWJwb29sJiMzOTtzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsXG42ODI1Olx0XHRcdCAqIHJldHVybiB0byBoc3RhdGUuXG42ODI2Olx0XHRcdCAqL1xuNjgyNzpcdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XG42ODI4Olx0XHR9XG42ODI5Olx0b3V0X3VuY2hhcmdlX2Nncm91cDpcbjY4MzA6XHRcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcbjY4MzE6XHRcdFx0XHRcdFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuNjgzMjpcdG91dF9lcnI6XG42ODMzOlx0XHRodWdldGxiX3ZtYV9sb2NrX2ZyZWUodm1hKTtcbjY4MzQ6XHRcdGlmICghdm1hIHx8IHZtYV90ZXN0KHZtYSwgVk1BX01BWVNIQVJFX0JJVCkpXG42ODM1Olx0XHRcdC8qIE9ubHkgY2FsbCByZWdpb25fYWJvcnQgaWYgdGhlIHJlZ2lvbl9jaGcgc3VjY2VlZGVkIGJ1dCB0aGVcbjY4MzY6XHRcdFx0ICogcmVnaW9uX2FkZCBmYWlsZWQgb3IgZGlkbiYjMzk7dCBydW4uXG42ODM3Olx0XHRcdCAqL1xuNjgzODpcdFx0XHRpZiAoY2hnIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgYWRkIFx1MDAzYyAwKVxuNjgzOTpcdFx0XHRcdHJlZ2lvbl9hYm9ydChyZXN2X21hcCwgZnJvbSwgdG8sIHJlZ2lvbnNfbmVlZGVkKTtcbjY4NDA6XHRcdGlmICh2bWEgXHUwMDI2XHUwMDI2IGlzX3ZtYV9yZXN2X3NldCh2bWEsIEhQQUdFX1JFU1ZfT1dORVIpKSB7XG42ODQxOlx0XHRcdGtyZWZfcHV0KFx1MDAyNnJlc3ZfbWFwLVx1MDAzZXJlZnMsIHJlc3ZfbWFwX3JlbGVhc2UpO1xuNjg0MjpcdFx0XHRzZXRfdm1hX3Jlc3ZfbWFwKHZtYSwgTlVMTCk7XG42ODQzOlx0XHR9XG42ODQ0Olx0XHRyZXR1cm4gZXJyO1xuNjg0NTpcdH1cbjY4NDY6XHRcbjY4NDc6XHRsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxuNjg0ODpcdFx0XHRcdFx0XHRcdFx0XHRsb25nIGZyZWVkKVxuNjg0OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDk4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zIGluIFN1YnBvb2wgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpYCBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIHRoYXQgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2xgIG1pZ2h0IGZyZWUgYHNwb29sYCAob3IgZHJvcCBpdHMgcmVmZXJlbmNlIGNvdW50KSByaWdodCBiZWZvcmUgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBnZXRzIGEgY2hhbmNlIHRvIGRvIGl0cyBqb2IuIFRoYXQgc2VlbXMgbGlrZSBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIG9yIGEgcmFjZSBjb25kaXRpb24gYXQgdGhlIHZlcnkgbGVhc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZWNoYW5pY3Mgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIGNvbmZpcm0gdGhlIHJhY2UuIEkgaGF2ZSB0byB2ZXJpZnkgd2hhdCBhY3Rpb25zIGFyZSBwZXJmb3JtZWQgYnkgZWFjaCBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHN0ZXBzIGFuZCB3aGVuIGVhY2ggaXMgY2FsbGVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBjbG9zZWx5IGF0IGB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sYCBhbmQgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCwgdG8gc2VlIGlmIG15IGluaXRpYWwgaHVuY2ggaGFzIGFueSBtZXJpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc3x1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xMjk9c3RhdGljIGlubGluZSBib29sIHN1YnBvb2xfaXNfZnJlZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4tLVxubW0vaHVnZXRsYi5jLTE0MC1cbm1tL2h1Z2V0bGIuYzoxNDE6c3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxubW0vaHVnZXRsYi5jLTE0Mi1cdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGlycV9mbGFncylcbi0tXG5tbS9odWdldGxiLmM9MTgzPXZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuLS1cbm1tL2h1Z2V0bGIuYy0xOTItXHRzcG9vbC1cdTAwM2Vjb3VudC0tO1xubW0vaHVnZXRsYi5jOjE5MzpcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbm1tL2h1Z2V0bGIuYy0xOTQtfVxuLS1cbm1tL2h1Z2V0bGIuYz0yMDQ9c3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNDgtICovXG5tbS9odWdldGxiLmM6MjQ5OnN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbm1tL2h1Z2V0bGIuYy0yNTAtXHRcdFx0XHQgICAgICAgbG9uZyBkZWx0YSlcbi0tXG5tbS9odWdldGxiLmMtMjc4LVx0ICovXG5tbS9odWdldGxiLmM6Mjc5Olx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xubW0vaHVnZXRsYi5jLTI4MC1cbi0tXG5tbS9odWdldGxiLmM9MTY3Mz12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGIuYy0xNjk5LVx0ICogdmlhIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKCkuICBTaW5jZSB3ZSBhcmUgJiMzOTtyZXN0b3JpbmcmIzM5OyB0aGVcbm1tL2h1Z2V0bGIuYzoxNzAwOlx0ICogcmVzZXJ2YXRpb24sIGRvIG5vdCBjYWxsIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKCkgYXMgdGhpcyB3aWxsXG5tbS9odWdldGxiLmMtMTcwMS1cdCAqIHJlbW92ZSB0aGUgcmVzZXJ2ZWQgcGFnZSBmcm9tIHRoZSBzdWJwb29sLlxuLS1cbm1tL2h1Z2V0bGIuYy0xNzA5LVx0XHQgKi9cbm1tL2h1Z2V0bGIuYzoxNzEwOlx0XHRpZiAoaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpID09IDApXG5tbS9odWdldGxiLmMtMTcxMS1cdFx0XHRyZXN0b3JlX3Jlc2VydmUgPSB0cnVlO1xuLS1cbm1tL2h1Z2V0bGIuYz0yOTM5PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzA0OS1cbm1tL2h1Z2V0bGIuYzozMDUwOlx0XHRcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XG5tbS9odWdldGxiLmMtMzA1MS1cdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcbi0tXG5tbS9odWdldGxiLmMtMzA2Ni1cdGlmIChtYXBfY2hnIFx1MDAyNlx1MDAyNiAhZ2JsX2NoZykge1xubW0vaHVnZXRsYi5jOjMwNjc6XHRcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xubW0vaHVnZXRsYi5jLTMwNjgtXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbi0tXG5tbS9odWdldGxiLmM9NDcwOT1zdGF0aWMgdm9pZCBodWdldGxiX3ZtX29wX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2V0bGIuYy00NzMyLVx0XHQgKi9cbm1tL2h1Z2V0bGIuYzo0NzMzOlx0XHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCByZXNlcnZlKTtcbm1tL2h1Z2V0bGIuYy00NzM0LVx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG4tLVxubW0vaHVnZXRsYi5jPTY2NTk9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9odWdldGxiLmMtNjc5My1cbm1tL2h1Z2V0bGIuYzo2Nzk0Olx0XHRcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCxcbm1tL2h1Z2V0bGIuYy02Nzk1LVx0XHRcdFx0XHRcdFx0XHRjaGcgLSBhZGQpO1xuLS1cbm1tL2h1Z2V0bGIuYy02ODE3LVx0XHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlO1xubW0vaHVnZXRsYi5jOjY4MTg6XHRcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbm1tL2h1Z2V0bGIuYy02ODE5LVx0fVxuLS1cbm1tL2h1Z2V0bGIuYy02ODIxLVx0XHQvKiBwdXQgc3ViIHBvb2wmIzM5O3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cbm1tL2h1Z2V0bGIuYzo2ODIyOlx0XHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTtcbm1tL2h1Z2V0bGIuYy02ODIzLVx0XHQvKlxuLS1cbm1tL2h1Z2V0bGIuYz02ODQ3PWxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXG4tLVxubW0vaHVnZXRsYi5jLTY4ODEtXHQgKi9cbm1tL2h1Z2V0bGIuYzo2ODgyOlx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgKGNoZyAtIGZyZWVkKSk7XG5tbS9odWdldGxiLmMtNjg4My1cdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTg4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgKioKClJpZ2h0LCBzbyBJJiMzOTttIHN0YXJ0aW5nIGF0IHRoZSB0b3Agb2YgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AsIHNwZWNpZmljYWxseSBsaW5lIDY2NTksIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMgZnJvbSB0aGUgZ3JvdW5kIHVwIHRvIHJlYWxseSBncmFzcCBpdHMgaW1wbGljYXRpb25zLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHRoaW5nIHdvcmtzIGZyb20gdGhlIHZlcnkgYmVnaW5uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjY1OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NjU5Olx0bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbjY2NjA6XHRcdFx0bG9uZyBmcm9tLCBsb25nIHRvLFxuNjY2MTpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbjY2NjI6XHRcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuNjY2MzpcdHtcbjY2NjQ6XHRcdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBzcG9vbF9yZXN2LCBnYmxfcmVzdjtcbjY2NjU6XHRcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xuNjY2NjpcdFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7XG42NjY3Olx0XHRzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwO1xuNjY2ODpcdFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcbjY2Njk6XHRcdGxvbmcgZ2JsX3Jlc2VydmUsIHJlZ2lvbnNfbmVlZGVkID0gMDtcbjY2NzA6XHRcdGludCBlcnI7XG42NjcxOlx0XG42NjcyOlx0XHQvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi9cbjY2NzM6XHRcdGlmIChmcm9tIFx1MDAzZSB0bykge1xuNjY3NDpcdFx0XHRWTV9XQVJOKDEsIFwmIzM0OyVzIGNhbGxlZCB3aXRoIGEgbmVnYXRpdmUgcmFuZ2VcXG5cJiMzNDssIF9fZnVuY19fKTtcbjY2NzU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG42Njc2Olx0XHR9XG42Njc3Olx0XG42Njc4Olx0XHQvKlxuNjY3OTpcdFx0ICogdm1hIHNwZWNpZmljIHNlbWFwaG9yZSB1c2VkIGZvciBwbWQgc2hhcmluZyBhbmQgZmF1bHQvdHJ1bmNhdGlvblxuNjY4MDpcdFx0ICogc3luY2hyb25pemF0aW9uXG42NjgxOlx0XHQgKi9cbjY2ODI6XHRcdGh1Z2V0bGJfdm1hX2xvY2tfYWxsb2Modm1hKTtcbjY2ODM6XHRcbjY2ODQ6XHRcdC8qXG42Njg1Olx0XHQgKiBPbmx5IGFwcGx5IGh1Z2VwYWdlIHJlc2VydmF0aW9uIGlmIGFza2VkLiBBdCBmYXVsdCB0aW1lLCBhblxuNjY4NjpcdFx0ICogYXR0ZW1wdCB3aWxsIGJlIG1hZGUgZm9yIFZNX05PUkVTRVJWRSB0byBhbGxvY2F0ZSBhIHBhZ2VcbjY2ODc6XHRcdCAqIHdpdGhvdXQgdXNpbmcgcmVzZXJ2ZXNcbjY2ODg6XHRcdCAqL1xuNjY4OTpcdFx0aWYgKHZtYV9mbGFnc190ZXN0KFx1MDAyNnZtYV9mbGFncywgVk1BX05PUkVTRVJWRV9CSVQpKVxuNjY5MDpcdFx0XHRyZXR1cm4gMDtcbjY2OTE6XHRcbjY2OTI6XHRcdC8qXG42NjkzOlx0XHQgKiBTaGFyZWQgbWFwcGluZ3MgYmFzZSB0aGVpciByZXNlcnZhdGlvbiBvbiB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRoYXRcbjY2OTQ6XHRcdCAqIGFyZSBhbHJlYWR5IGFsbG9jYXRlZCBvbiBiZWhhbGYgb2YgdGhlIGZpbGUuIFByaXZhdGUgbWFwcGluZ3MgbmVlZFxuNjY5NTpcdFx0ICogdG8gcmVzZXJ2ZSB0aGUgZnVsbCBhcmVhIGV2ZW4gaWYgcmVhZC1vbmx5IGFzIG1wcm90ZWN0KCkgbWF5IGJlXG42Njk2Olx0XHQgKiBjYWxsZWQgdG8gbWFrZSB0aGUgbWFwcGluZyByZWFkLXdyaXRlLiBBc3N1bWUgIXZtYSBpcyBhIHNobSBtYXBwaW5nXG42Njk3Olx0XHQgKi9cbjY2OTg6XHRcdGlmICghdm1hIHx8IHZtYV90ZXN0KHZtYSwgVk1BX01BWVNIQVJFX0JJVCkpIHtcbjY2OTk6XHRcdFx0LypcbjY3MDA6XHRcdFx0ICogcmVzdl9tYXAgY2FuIG5vdCBiZSBOVUxMIGFzIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBpcyBvbmx5XG42NzAxOlx0XHRcdCAqIGNhbGxlZCBmb3IgaW5vZGVzIGZvciB3aGljaCByZXN2X21hcHMgd2VyZSBjcmVhdGVkIChzZWVcbjY3MDI6XHRcdFx0ICogaHVnZXRsYmZzX2dldF9pbm9kZSkuXG42NzAzOlx0XHRcdCAqL1xuNjcwNDpcdFx0XHRyZXN2X21hcCA9IGlub2RlX3Jlc3ZfbWFwKGlub2RlKTtcbjY3MDU6XHRcbjY3MDY6XHRcdFx0Y2hnID0gcmVnaW9uX2NoZyhyZXN2X21hcCwgZnJvbSwgdG8sIFx1MDAyNnJlZ2lvbnNfbmVlZGVkKTtcbjY3MDc6XHRcdH0gZWxzZSB7XG42NzA4Olx0XHRcdC8qIFByaXZhdGUgbWFwcGluZy4gKi9cbjY3MDk6XHRcdFx0cmVzdl9tYXAgPSByZXN2X21hcF9hbGxvYygpO1xuNjcxMDpcdFx0XHRpZiAoIXJlc3ZfbWFwKSB7XG42NzExOlx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjY3MTI6XHRcdFx0XHRnb3RvIG91dF9lcnI7XG42NzEzOlx0XHRcdH1cbjY3MTQ6XHRcbjY3MTU6XHRcdFx0Y2hnID0gdG8gLSBmcm9tO1xuNjcxNjpcdFxuNjcxNzpcdFx0XHRzZXRfdm1hX3Jlc3ZfbWFwKHZtYSwgcmVzdl9tYXApO1xuNjcxODpcdFx0XHRzZXRfdm1hX3Jlc3ZfZmxhZ3Modm1hLCBIUEFHRV9SRVNWX09XTkVSKTtcbjY3MTk6XHRcdH1cbjY3MjA6XHRcbjY3MjE6XHRcdGlmIChjaGcgXHUwMDNjIDApIHtcbjY3MjI6XHRcdFx0LyogcmVnaW9uX2NoZygpIGFib3ZlIGNhbiByZXR1cm4gLUVOT01FTSAqL1xuNjcyMzpcdFx0XHRlcnIgPSAoY2hnID09IC1FTk9NRU0pID8gLUVOT01FTSA6IC1FSU5WQUw7XG42NzI0Olx0XHRcdGdvdG8gb3V0X2VycjtcbjY3MjU6XHRcdH1cbjY3MjY6XHRcbjY3Mjc6XHRcdGVyciA9IGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXG42NzI4Olx0XHRcdFx0XHRjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBcdTAwMjZoX2NnKTtcbjY3Mjk6XHRcdGlmIChlcnIgXHUwMDNjIDApXG42NzMwOlx0XHRcdGdvdG8gb3V0X2VycjtcbjY3MzE6XHRcbjY3MzI6XHRcdGlmICh2bWEgXHUwMDI2XHUwMDI2ICF2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpIFx1MDAyNlx1MDAyNiBoX2NnKSB7XG42NzMzOlx0XHRcdC8qIEZvciBwcml2YXRlIG1hcHBpbmdzLCB0aGUgaHVnZXRsYl9jZ3JvdXAgdW5jaGFyZ2UgaW5mbyBoYW5nc1xuNjczNDpcdFx0XHQgKiBvZiB0aGUgcmVzdl9tYXAuXG42NzM1Olx0XHRcdCAqL1xuNjczNjpcdFx0XHRyZXN2X21hcF9zZXRfaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfaW5mbyhyZXN2X21hcCwgaF9jZywgaCk7XG42NzM3Olx0XHR9XG42NzM4Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY0MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AuLi4gcmlnaHQsIHRoYXQmIzM5O3MgZmlybWx5IHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgYG1tL2h1Z2V0bGIuY2AuIEl0JiMzOTtzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhvc2UgY3J1Y2lhbCBodWdldGxiIHJlc2VydmF0aW9ucyB3aGVuZXZlciB3ZSYjMzk7cmUgZXN0YWJsaXNoaW5nIGEgaHVnZXRsYiBtYXBwaW5nLCB3aGV0aGVyIGl0JiMzOTtzIHRocm91Z2ggYG1tYXBgLCBgc2htZ2V0YCwgb3Igd2hhdGV2ZXIuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciBmb3IgdGhvc2UgZ2lhbnQgcGFnZXMuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcywgaXMgdGhpcyBmdW5jdGlvbmFsaXR5IGV2ZW4gKnJlbGV2YW50KiB0byBjb25zaWRlciBpbiBhIHR5cGljYWwgZW52aXJvbm1lbnQ/IE15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHllczsgaHVnZXRsYmZzIGlzIHByZXR0eSBtdWNoIHN0YW5kYXJkIGlzc3VlIGluIG1vZGVybiBMaW51eCBrZXJuZWxzLiBUaGUgS2NvbmZpZyBvcHRpb25zIGBDT05GSUdfSFVHRVRMQkZTYCBhbmQgYENPTkZJR19IVUdFVExCX1BBR0VgIGFyZSBwcmV0dHkgbXVjaCBhbHdheXMgZW5hYmxlZCBieSBkZWZhdWx0IGluIG1hbnkgZGlzdHJpYnV0aW9ucywgc28gaXQmIzM5O3MgYSBkZWZpbml0ZSBjb25zaWRlcmF0aW9uLiBBbHJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIGFjdHVhbGx5IGNoZWNrIHRob3NlIEtjb25maWcgb3B0aW9ucyB0byBnZXQgbW9yZSBvZiBhIHByZWNpc2UgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTY5ND1jb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcbi0tXG5tbS9LY29uZmlnLTY5Ni1cbm1tL0tjb25maWc6Njk3OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vS2NvbmZpZy02OTgtXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNjgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqSHVudGluZyBEb3duIHRoZSBIVUdFVExCIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgSFVHRVRMQmAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCBhIHByZXR0eSBzb2xpZCBvbmUsIGlzIHRvIGNoZWNrIHRoZSBjb3JlIGZpbGVzeXN0ZW0gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGZzL0tjb25maWdgIOKAkyBpdCYjMzk7cyB0aGUgZ2VuZXJhbCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24sIHNvIGl0JiMzOTtzIGEgbGlrZWx5IGNhbmRpZGF0ZS4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCBJJiMzOTtsbCBkcmlsbCBkb3duIGEgYml0IGRlZXBlciBpbnRvIGBmcy9odWdldGxiZnMvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5OyB0aGF0IHdvdWxkIG1ha2UgcGVyZmVjdCBzZW5zZSBzaW5jZSBpdCYjMzk7cyBkaXJlY3RseSByZWxhdGVkIHRvIGh1Z2UgcGFnZXMuIEZhaWxpbmcgdGhhdCwgSSYjMzk7bGwgZ28gc3RyYWlnaHQgdG8gYG1tL0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGFuZCBodWdlIHBhZ2VzIGFyZSwgd2VsbCwgaHVnZSBwYWdlcyEgSXQmIzM5O3MgcHJhY3RpY2FsbHkgZ3VhcmFudGVlZCB0byBiZSBpbiBvbmUgb2YgdGhvc2UgdGhyZWUgbG9jYXRpb25zLiBMZXQmIzM5O3MgZ2V0IHRvIHdvcmsgYW5kIGZpbmQgdGhlIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbmZzL0tjb25maWctMjY0LVx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcbmZzL0tjb25maWctMjcyLVxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI3Ni1cbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuZnMvS2NvbmZpZy0yNzgtXHRkZWZfYm9vbCBIVUdFVExCX1BBR0Vcbi0tXG5mcy9LY29uZmlnLTI4Mi1cbmZzL0tjb25maWc6MjgzOmNvbmZpZyBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcbmZzL0tjb25maWctMjg0LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NTUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBIdWdlIFBhZ2VzIENvbmZpZ3VyYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlnIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIEh1Z2VUTEJGUyBhbmQgdGhlIGBIVUdFVExCX1BBR0VgIG9wdGlvbi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgSFVHRVRMQkZTYCBpcyBhY3R1YWxseSBlbmFibGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGJvdGggZW5hYmxlZCwgYW5kIGZpbmQgd2hlcmUgdGhleSBhcmUgc2V0LiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIGp1bXAgaW50byBgZnMvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgc2V0dGluZ3MuIEFoYSEgTG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhIGBtZW51Y29uZmlnIEhVR0VUTEJGU2AgYW5kIGEgYGNvbmZpZyBIVUdFVExCX1BBR0VgIGVudHJ5LCB3aXRoIGBIVUdFVExCX1BBR0VgIHNldCBhcyBhIGBkZWZfYm9vbGAgYmFzZWQgb24gYEhVR0VUTEJGU2AuIFRoaXMgY29uZmlybXMgdGhleSYjMzk7cmUgaW50ZXJ0d2luZWQuIEluIG90aGVyIHdvcmRzLCBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBgSFVHRVRMQkZTYCBpcyBzZXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmlsaXR5IG9mIGh1Z2UgcGFnZXMuCgpOb3csIGEgY3JpdGljYWwgbmV4dCBzdGVwIGlzIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHNldHRpbmdzIGFyZSBhY3R1YWxseSAqdXNlZCouIEkgbmVlZCB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlc2UgY29uZmlnIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIGltcGxlbWVudGF0aW9uIGZvciBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCB3aWxsIGJlIGluZm9ybWF0aXZlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgcGljdHVyZSBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGh1Z2UgcGFnZXMgd2hlbiB0aGVzZSBvcHRpb25zIGFyZSBib3RoIHNldC4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbiwgYXMgdGhhdCB3aWxsIGxldCBtZSB1bmRlcnN0YW5kIHdoZXJlIHRoZSBodWdlIHBhZ2UgYWxsb2NhdGlvbiBsb2dpYyBpcyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBtZSB3b3JrIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBlaXRoZXIgb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX3Jlc2VydmVfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xMDI9Y3JlYXRlZCAoc2htZ2V0KFNITV9IVUdFVExCKSkgb3IgYSBtYXBwaW5nIGlzIGNyZWF0ZWQgdmlhIG1tYXAoTUFQX0hVR0VUTEIpLlxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxMDM6VGhlc2Ugb3BlcmF0aW9ucyByZXN1bHQgaW4gYSBjYWxsIHRvIHRoZSByb3V0aW5lIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpOjpcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTA0LVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxMDU6XHRpbnQgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTEwNi1cdFx0XHRcdCAgbG9uZyBmcm9tLCBsb25nIHRvLFxuLS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTA5LVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxMTA6VGhlIGZpcnN0IHRoaW5nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpIGRvZXMgaXMgY2hlY2sgaWYgdGhlIE5PUkVTRVJWRVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMTEtZmxhZyB3YXMgc3BlY2lmaWVkIGluIGVpdGhlciB0aGUgc2htZ2V0KCkgb3IgbW1hcCgpIGNhbGwuICBJZiBOT1JFU0VSVkVcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTEyMj1pbiB3aGljaCByZXNlcnZhdGlvbnMgYXJlIHJlcHJlc2VudGVkIGluIHRoZSByZXNlcnZhdGlvbiBtYXAuXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMzItXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjEzMzpGb3IgcHJpdmF0ZSBtYXBwaW5ncywgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCkgY3JlYXRlcyB0aGUgcmVzZXJ2YXRpb24gbWFwIGFuZFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMzQtaGFuZ3MgaXQgb2ZmIHRoZSBWTUEgc3RydWN0dXJlLiAgSW4gYWRkaXRpb24sIHRoZSBIUEFHRV9SRVNWX09XTkVSIGZsYWcgaXMgc2V0XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xNjk9ZW50cnkgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzLlxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNzAtXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE3MTpJZiBodWdldGxiX3Jlc2VydmVfcGFnZXMoKSB3YXMgc3VjY2Vzc2Z1bCwgdGhlIGdsb2JhbCByZXNlcnZhdGlvbiBjb3VudCBhbmRcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTcyLXJlc2VydmF0aW9uIG1hcCBhc3NvY2lhdGVkIHdpdGggdGhlIG1hcHBpbmcgd2lsbCBiZSBtb2RpZmllZCBhcyByZXF1aXJlZCB0b1xuLS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MjQ5PWNhbGwgdG8gdm1hX2NvbW1pdF9yZXNlcnZhdGlvbigpIGFmdGVyIHRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkLiAgVGhpcyB3b3VsZFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyNTA6YmUgcG9zc2libGUgaWYgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIHdhcyBjYWxsZWQgZm9yIHRoZSBzYW1lIHBhZ2UgaW4gYSBzaGFyZWRcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjUxLW1hcHBpbmcuICBJbiBzdWNoIGNhc2VzLCB0aGUgcmVzZXJ2YXRpb24gY291bnQgYW5kIHN1YnBvb2wgZnJlZSBwYWdlIGNvdW50XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9NzI9UGFnZSBGbGFnc1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTkzLeW9k+WIm+W7uuS4gOS4quW3qOWkp+eahOaciemhtemdouaUr+aMgeeahOWFseS6q+WGheWtmOaute+8iHNobWdldChTSE1fSFVHRVRMQinvvInmiJbpgJrov4dtbWFwKE1BUF9IVUdFVExCKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6OTQ65Yib5bu65LiA5Liq5pig5bCE5pe277yM5bCx5Lya5Yib5bu66aKE55WZ44CC6L+Z5Lqb5pON5L2c5Lya5a+86Ie05a+55Ye95pWwaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCnnmoTosIPnlKg6OlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtOTUtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo5NjpcdGludCBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTk3LVx0XHRcdFx0ICBsb25nIGZyb20sIGxvbmcgdG8sXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTAwLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTAxOmh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygp5YGa55qE56ys5LiA5Lu25LqL5piv5qOA5p+l5Zyo6LCD55Soc2htZ2V0KCnmiJZtbWFwKCnml7bmmK/lkKbmjIflrprkuoZOT1JFU0VSVkVcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTEwMi3moIflv5fjgILlpoLmnpzmjIflrprkuoZOT1JFU0VSVkXvvIzpgqPkuYjov5nkuKrlh73mlbDnq4vljbPov5Tlm57vvIzlm6DkuLrkuI3pnIDopoHpooTnlZnjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xMDg9UFJJVkFUReWSjFNIQVJFROaYoOWwhOS5i+mXtOeahOS4gOS4quW+iOWkp+eahOWMuuWIq+aYr+mihOeVmeWcqOmihOeVmeaYoOWwhOS4reeahOihqOekuuaWueW8j+OAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTExNC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjExNTrlr7nkuo7np4HmnInmmKDlsITvvIxodWdldGxiX3Jlc2VydmVfcGFnZXMoKeWIm+W7uumihOeVmeaYoOWwhOW5tuWwhuWFtuaMguWcqFZNQee7k+aehOS9k+S4iuOAguatpOWklu+8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTE2LUhQQUdFX1JFU1ZfT1dORVLmoIflv5fooqvorr7nva7vvIzku6XooajmmI7or6VWTUHmi6XmnInpooTnlZnjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMzktXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNDA65aaC5p6caHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCnmiJDlip/vvIzlhajlsYDpooTnlZnmlbDlkozkuI7mmKDlsITnm7jlhbPnmoTpooTnlZnmmKDlsITlsIbmoLnmja7pnIDopoHooqvkv67mlLnvvIzku6Xnoa7kv51cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0MS3lnKgmIzM5O2Zyb20mIzM5Oy0mIzM5O3RvJiMzOTvojIPlm7TlhoXlrZjlnKjpooTnlZnjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xOTM9U2V0UGFnZVByaXZhdGUocGFnZSnlkoxyZXN2X2h1Z2VfcGFnZXMt44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjAzLeWcqGFsbG9jX2h1Z2V0bGJfZm9saW8oKeW8gOWni+iwg+eUqHZtYV9uZWVkc19yZXNlcnZhdGlvbigp5ZKM6aG16Z2i5YiG6YWN5ZCO6LCD55SoXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyMDQ6dm1hX2NvbW1pdF9yZXNlcnZhdGlvbigp5LmL6Ze077yM6aKE55WZ5pig5bCE5pyJ5Y+v6IO96KKr5pS55Y+Y44CC5aaC5p6caHVnZXRsYl9yZXNlcnZlX3BhZ2Vz5Zyo5YWxXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDUt5Lqr5pig5bCE5Lit5Li65ZCM5LiA6aG16Z2i6KKr6LCD55So77yM6L+Z5bCG5piv5Y+v6IO955qE44CC5Zyo6L+Z56eN5oOF5Ya15LiL77yM6aKE55WZ6K6h5pWw5ZKM5a2Q5rGg56m66Zey6aG16K6h5pWw5Lya5pyJ5LiA5Liq5YGP5beu44CCXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9OTk9c3RhdGljIGludCBodWdldGxiZnNfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTItXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTM6XHRpZiAoaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKGlub2RlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU0LVx0XHRcdFx0dm1hLVx1MDAzZXZtX3Bnb2ZmIFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfb3JkZXIoaCksXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTQ4ND1zdGF0aWMgaW50IGdldF9oc3RhdGVfaWR4KGludCBwYWdlX3NpemVfbG9nKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0OTQtICogTm90ZSB0aGF0IHNpemUgc2hvdWxkIGJlIGFsaWduZWQgdG8gcHJvcGVyIGh1Z2VwYWdlIHNpemUgaW4gY2FsbGVyIHNpZGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDk1OiAqIG90aGVyd2lzZSBodWdldGxiX3Jlc2VydmVfcGFnZXMgcmVzZXJ2ZXMgb25lIGxlc3MgaHVnZXBhZ2VzIHRoYW4gaW50ZW5kZWQuXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDk2LSAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTQ5Nz1zdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MzYtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTM3Olx0aWYgKGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSwgMCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MzgtXHRcdFx0c2l6ZSBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGhzdGF0ZV9pbm9kZShpbm9kZSkpLCBOVUxMLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTE0ND1pbnQgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlKHB0ZV90ICpkc3RfcHRlLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTE1MC0jZW5kaWYgLyogQ09ORklHX1VTRVJGQVVMVEZEICovXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxNTE6bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBmcm9tLCBsb25nIHRvLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTUyLVx0XHRcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpO1xuLS1cbm1tL2h1Z2V0bGIuYz0yOTM5PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzA0MC1cdFx0ICogdm1hX25lZWRzX3Jlc2VydmF0aW9uIGFuZCB2bWFfY29tbWl0X3Jlc2VydmF0aW9uLlxubW0vaHVnZXRsYi5jOjMwNDE6XHRcdCAqIFRoaXMgaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcy5cbm1tL2h1Z2V0bGIuYy0zMDQyLVx0XHQgKiBBZGp1c3QgZm9yIHRoZSBzdWJwb29sIGNvdW50IGluY3JlbWVudGVkIGFib3ZlIEFORFxubW0vaHVnZXRsYi5jOjMwNDM6XHRcdCAqIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBmb3IgdGhlIHNhbWUgcGFnZS5cdEFsc28sXG5tbS9odWdldGxiLmM6MzA0NDpcdFx0ICogdGhlIHJlc2VydmF0aW9uIGNvdW50IGFkZGVkIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1xubW0vaHVnZXRsYi5jLTMwNDUtXHRcdCAqIG5vIGxvbmdlciBhcHBsaWVzLlxuLS1cbm1tL2h1Z2V0bGIuYz02NDgzPWxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNjY1OC1cbm1tL2h1Z2V0bGIuYzo2NjU5OmxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5tbS9odWdldGxiLmMtNjY2MC1cdFx0bG9uZyBmcm9tLCBsb25nIHRvLFxuLS1cbm1tL2h1Z2V0bGIuYy02Njk5LVx0XHQvKlxubW0vaHVnZXRsYi5jOjY3MDA6XHRcdCAqIHJlc3ZfbWFwIGNhbiBub3QgYmUgTlVMTCBhcyBodWdldGxiX3Jlc2VydmVfcGFnZXMgaXMgb25seVxubW0vaHVnZXRsYi5jLTY3MDEtXHRcdCAqIGNhbGxlZCBmb3IgaW5vZGVzIGZvciB3aGljaCByZXN2X21hcHMgd2VyZSBjcmVhdGVkIChzZWVcbi0tXG5tbS9tZW1mZC5jPTY4PXN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbi0tXG5tbS9tZW1mZC5jLTg5LVxubW0vbWVtZmQuYzo5MDpcdFx0bnJfcmVzdiA9IGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggJiM0MzsgMSwgTlVMTCwgRU1QVFlfVk1BX0ZMQUdTKTtcbm1tL21lbWZkLmMtOTEtXHRcdGlmIChucl9yZXN2IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUwNQoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiAxNTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBIdWdldGxiIFJlc2VydmUgUGFnZXMgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgYnVnOiBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSB2dWxuZXJhYmlsaXR5IHdpdGhpbiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCBpbiBgbW0vaHVnZXRsYi5jYC4gVGhlIHJvb3QgY2F1c2Ugc3RlbXMgZnJvbSBhbiBpbmNvcnJlY3Qgb3JkZXIgb2Ygb3BlcmF0aW9ucyBkdXJpbmcgZXJyb3IgcmVjb3ZlcnksIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBgaHVnZXBhZ2Vfc3VicG9vbGAgc3RydWN0dXJlcy4gTG9va2luZyBhdCB0aGUgY29kZSwgdGhlIG9yaWdpbmFsIHNlcXVlbmNlIGhhZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgIHBvdGVudGlhbGx5IGZyZWVpbmcgdGhlIGBzcG9vbGAgc3RydWN0dXJlIChpZiBpdHMgY291bnQgYW5kIHVzZWQgcGFnZXMgcmVhY2hlZCB6ZXJvKSAqYmVmb3JlKiB0aGUgY29kZSByZXN0b3JlZCB0aGUgYHVzZWRfaHBhZ2VzYCB2YWx1ZSBvZiB0aGUgYHNwb29sYC4gVGhpcyBtZWFucyB0aGF0IGFmdGVyd2FyZHMsIHdlIHdlcmUgYWNjZXNzaW5nIGZyZWVkIG1lbW9yeSBpbiBgc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgZmxhZ3MpO2AgYW5kIHRoZW4gYHNwb29sLSZndDt1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtgIHdoaWNoIGxlYWRzIHRvIGEgdXNlIGFmdGVyIGZyZWUgYnVnLiBUaGUgZml4IGludm9sdmVzIHNpbXBseSByZW9yZGVyaW5nIHRoZSBvcGVyYXRpb25zIHRvIGNvcnJlY3RseSByZXN0b3JlIGBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXNgICpiZWZvcmUqIHBvdGVudGlhbGx5IGZyZWVpbmcgdGhlIGBzcG9vbGAsIGF2b2lkaW5nIHRoZSBVQUYgY29uZGl0aW9uLgoKVGhlIHJlYWNoIGlzIHNpZ25pZmljYW50LiBUaGlzIHBhdGNoIGlzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AuICBUaGlzIGFyZWEgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHN0YW5kYXJkIHN5c3RlbSBjYWxscyBsaWtlIGBtbWFwKE1BUF9IVUdFVExCKWAsIGBzaG1nZXQoU0hNX0hVR0VUTEIpYCwgYG1lbWZkX2NyZWF0ZShNRkRfSFVHRVRMQilgLCBhbmQgb3BlcmF0aW9ucyB3aXRoIHRoZSBgaHVnZXRsYmZzYCBmaWxlIHN5c3RlbS4gIEl0IGlzIHdvcnRoIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHBvaW50cyBmb3IgZnV6emluZyBhcmUgZ29pbmcgdG8gYmUgb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgYnVnLCBhbmQgdGhlaXIgcmVsYXRlZCBmdW5jdGlvbnMsIHNvOiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCwgYGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzYCwgYW5kIGBodWdldGxiZnNfZmlsZV9tbWFwYC4KCkkmIzM5O3ZlIGNoZWNrZWQgdGhlIHN5bWJvbCB2aXNpYmlsaXR5LiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCBpcyBhIGdsb2JhbCwgbm9uLXN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZ29vZCBmb3IgZnV6emluZy4gYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBpcyBzdGF0aWMgYnV0IHN0aWxsIHJlYWNoYWJsZSBiZWNhdXNlIGl0IGlzIGNhbGxlZCBpbiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYC4KClRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBhbHNvIHN0cmFpZ2h0Zm9yd2FyZC4gV2UmIzM5O2xsIG5lZWQgYEhVR0VUTEJGU2AgYW5kIGBIVUdFVExCX1BBR0VgLiBJdCBsb29rcyBsaWtlIGBIVUdFVExCX1BBR0VgIGlzIHNlbGVjdGVkIGJ5IGBIVUdFVExCRlNgIGluIHRoZSBLY29uZmlnLgoKSW4gc3VtbWFyeSwgdGhpcyBpcyBhIHByb21pc2luZyB0YXJnZXQuIFRoZSBmaXggcHJldmVudHMgYSBVQUYgdnVsbmVyYWJpbGl0eSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGVhc2lseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHN5c3RlbSBjYWxscyBhbmQgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucy4KCldvcnRoRnV6emluZzogVHJ1ZQpSZWFzb25pbmc6IFRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIHRvIHByZXZlbnQgVUFGIG9uIHRoZSBgaHVnZXBhZ2Vfc3VicG9vbGAgc3RydWN0dXJlLiBJdCYjMzk7cyBpbiByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIGBtbS9odWdldGxiLmNgLCBhbmQgY2FuIGJlIGV4ZXJjaXNlZCB0aHJvdWdoIGBodWdldGxiZnNgLCBgbW1hcGAsIGBtZW1mZF9jcmVhdGVgLCBvciBgc2htZ2V0YC4KCkZvY3VzU3ltYm9sczogYFsmIzM0O2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyYjMzQ7LCAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssICYjMzQ7aHVnZXRsYl91bnJlc2VydmVfcGFnZXMmIzM0OywgJiMzNDtodWdldGxiZnNfZmlsZV9tbWFwJiMzNDtdYApFbmFibGVDb25maWdzOiBgWyYjMzQ7SFVHRVRMQkZTJiMzNDssICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDtdYAoKQWxyaWdodCwgc2VlbXMgcHJldHR5IHNvbGlkLiBMZXQmIzM5O3MgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX3Jlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXRsYmZzX2ZpbGVfbW1hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgdGVhcmRvd24gb3JkZXJpbmcgaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCkgaW4gbW0vaHVnZXRsYi5jIHRvIHJlc3RvcmUgdXNlZF9ocGFnZXMgYmVmb3JlIHB1dHRpbmcgc3VicG9vbCByZXNlcnZhdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBleGVyY2lzZWQgd2hlbiBodWdldGxiIHJlc2VydmF0aW9ucyBmYWlsIG9yIHJhY2UgZHVyaW5nIG1tYXAsIG1lbWZkX2NyZWF0ZSwgb3Igc2htZ2V0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmc19maWxlX21tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHRlYXJkb3duIG9yZGVyaW5nIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpIGluIG1tL2h1Z2V0bGIuYyB0byByZXN0b3JlIHVzZWRfaHBhZ2VzIGJlZm9yZSBwdXR0aW5nIHN1YnBvb2wgcmVzZXJ2YXRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhlcmNpc2VkIHdoZW4gaHVnZXRsYiByZXNlcnZhdGlvbnMgZmFpbCBvciByYWNlIGR1cmluZyBtbWFwLCBtZW1mZF9jcmVhdGUsIG9yIHNobWdldC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlb3JkZXJzIGVycm9yLXBhdGggY2xlYW51cHMgaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCB0byBwcmV2ZW50IGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgLyBkb3VibGUtZnJlZSBjb25kaXRpb24gd2hlcmUgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKClgIGNvdWxkIHJlbGVhc2UgYW5kIGZyZWUgYHNwb29sYCB2aWEgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woKWAsIGZvbGxvd2VkIGJ5IGEgc3Vic2VxdWVudCBhY2Nlc3MgdG8gYHNwb29sYCBpbiB0aGUgYGlmIChnYmxfcmVzZXJ2ZSBcdTAwMjZcdTAwMjYgc3Bvb2wpYCBibG9jay5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljLiBUaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCBpcyBhIG1lbW9yeSBsaWZldGltZSAvIFVBRiBpc3N1ZSwgd2hpY2ggaXMgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ODJkNTQ4ZWU1YmU4NjFiNTFmMmU2ZDY1Njc3YjA1YmU1MTdkYWFjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxODoyMTo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA3ODU3NzI4NDU3OTUyLi4zZTNjZGExODFlNzI0IDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC02ODA4LDE1ICYjNDM7NjgwOCw2IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIG91dF9wdXRfcGFnZXM6CiAJc3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlOwotCWlmIChzcG9vbF9yZXN2KSB7Ci0JCS8qIHB1dCBzdWIgcG9vbCYjMzk7cyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqLwotCQlnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTsKLQkJLyoKLQkJICogc3VicG9vbCYjMzk7cyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLAotCQkgKiByZXR1cm4gdG8gaHN0YXRlLgotCQkgKi8KLQkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpOwotCX0KIAkvKiBSZXN0b3JlIHVzZWRfaHBhZ2VzIGZvciBwYWdlcyB0aGF0IGZhaWxlZCBnbG9iYWwgcmVzZXJ2YXRpb24gKi8KIAlpZiAoZ2JsX3Jlc2VydmUgJmFtcDsmYW1wOyBzcG9vbCkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjgyNiw2ICYjNDM7NjgxNywxNSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlOwogCQl1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7CiAJfQomIzQzOwlpZiAoc3Bvb2xfcmVzdikgewomIzQzOwkJLyogcHV0IHN1YiBwb29sJiMzOTtzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovCiYjNDM7CQlnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBzdWJwb29sJiMzOTtzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsCiYjNDM7CQkgKiByZXR1cm4gdG8gaHN0YXRlLgomIzQzOwkJICovCiYjNDM7CQlodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7CiYjNDM7CX0KIG91dF91bmNoYXJnZV9jZ3JvdXA6CiAJaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoaHN0YXRlX2luZGV4KGgpLAogCQkJCQkgICAgY2hnICogcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgaF9jZyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDEyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBhbmQgU3Vycm91bmRpbmdzIGluIG1tL2h1Z2V0bGIuYyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoaXMgcHJvcG9zZWQgcGF0Y2ggYW5kIGl0cyBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHRob3JvdWdoIGNvZGUgYW5hbHlzaXMgdXNpbmcgbXkgcHJlZmVycmVkIHRvb2xzLiBJIHdhbnQgdG8gc2VlIHRoZSBjb21wbGV0ZSBjb250ZXh0LCBub3QganVzdCB0aGUgaXNvbGF0ZWQgY2hhbmdlcywgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgY2xvc2UgaW5zcGVjdGlvbiBvZiBgbW0vaHVnZXRsYi5jYCBhcm91bmQgbGluZSA2ODA4LiBUaGlzIHNwZWNpZmljIGxvY2F0aW9uIGlzIG9idmlvdXNseSBjZW50cmFsIHRvIHRoZSBwYXRjaCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgaW1tZWRpYXRlIGVudmlyb25tZW50IHdpbGwgYmUgZXNzZW50aWFsLiBUaGlzIHdpbGwgaW52b2x2ZSB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlIG1vZGlmaWVkIGNvZGUgd2l0aCB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY3ODA6XHRcdFx0XHQgKiBpbmRpY2F0ZXMgYSByYWNlIHdpdGggYWxsb2NfaHVnZXRsYl9mb2xpby4gIEFkanVzdFxuNjc4MTpcdFx0XHRcdCAqIHRoZSBzdWJwb29sIGFuZCByZXNlcnZlIGNvdW50cyBtb2RpZmllZCBhYm92ZVxuNjc4MjpcdFx0XHRcdCAqIGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlLlxuNjc4MzpcdFx0XHRcdCAqL1xuNjc4NDpcdFx0XHRcdGxvbmcgcnN2X2FkanVzdDtcbjY3ODU6XHRcbjY3ODY6XHRcdFx0XHQvKlxuNjc4NzpcdFx0XHRcdCAqIGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKCkgd2lsbCBwdXQgdGhlXG42Nzg4Olx0XHRcdFx0ICogcmVmZXJlbmNlIHRvIGhfY2ctXHUwMDNlY3NzLiBTZWUgY29tbWVudCBiZWxvdyBmb3IgZGV0YWlsLlxuNjc4OTpcdFx0XHRcdCAqL1xuNjc5MDpcdFx0XHRcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKFxuNjc5MTpcdFx0XHRcdFx0aHN0YXRlX2luZGV4KGgpLFxuNjc5MjpcdFx0XHRcdFx0KGNoZyAtIGFkZCkgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcbjY3OTM6XHRcbjY3OTQ6XHRcdFx0XHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsXG42Nzk1Olx0XHRcdFx0XHRcdFx0XHRcdGNoZyAtIGFkZCk7XG42Nzk2Olx0XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtcnN2X2FkanVzdCk7XG42Nzk3Olx0XHRcdH0gZWxzZSBpZiAoaF9jZykge1xuNjc5ODpcdFx0XHRcdC8qXG42Nzk5Olx0XHRcdFx0ICogVGhlIGZpbGVfcmVnaW9ucyB3aWxsIGhvbGQgdGhlaXIgb3duIHJlZmVyZW5jZSB0b1xuNjgwMDpcdFx0XHRcdCAqIGhfY2ctXHUwMDNlY3NzLiBTbyB3ZSBzaG91bGQgcmVsZWFzZSB0aGUgcmVmZXJlbmNlIGhlbGRcbjY4MDE6XHRcdFx0XHQgKiB2aWEgaHVnZXRsYl9jZ3JvdXBfY2hhcmdlX2Nncm91cF9yc3ZkKCkgd2hlbiB3ZSBhcmVcbjY4MDI6XHRcdFx0XHQgKiBkb25lLlxuNjgwMzpcdFx0XHRcdCAqL1xuNjgwNDpcdFx0XHRcdGh1Z2V0bGJfY2dyb3VwX3B1dF9yc3ZkX2Nncm91cChoX2NnKTtcbjY4MDU6XHRcdFx0fVxuNjgwNjpcdFx0fVxuNjgwNzpcdFx0cmV0dXJuIGNoZztcbjY4MDg6XHRcbjY4MDk6XHRvdXRfcHV0X3BhZ2VzOlxuNjgxMDpcdFx0c3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlO1xuNjgxMTpcdFx0LyogUmVzdG9yZSB1c2VkX2hwYWdlcyBmb3IgcGFnZXMgdGhhdCBmYWlsZWQgZ2xvYmFsIHJlc2VydmF0aW9uICovXG42ODEyOlx0XHRpZiAoZ2JsX3Jlc2VydmUgXHUwMDI2XHUwMDI2IHNwb29sKSB7XG42ODEzOlx0XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG42ODE0Olx0XG42ODE1Olx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbjY4MTY6XHRcdFx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXG42ODE3Olx0XHRcdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7XG42ODE4Olx0XHRcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbjY4MTk6XHRcdH1cbjY4MjA6XHRcdGlmIChzcG9vbF9yZXN2KSB7XG42ODIxOlx0XHRcdC8qIHB1dCBzdWIgcG9vbCYjMzk7cyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqL1xuNjgyMjpcdFx0XHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTtcbjY4MjM6XHRcdFx0LypcbjY4MjQ6XHRcdFx0ICogc3VicG9vbCYjMzk7cyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxuNjgyNTpcdFx0XHQgKiByZXR1cm4gdG8gaHN0YXRlLlxuNjgyNjpcdFx0XHQgKi9cbjY4Mjc6XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xuNjgyODpcdFx0fVxuNjgyOTpcdG91dF91bmNoYXJnZV9jZ3JvdXA6XG42ODMwOlx0XHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXG42ODMxOlx0XHRcdFx0XHRcdCAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcbjY4MzI6XHRvdXRfZXJyOlxuNjgzMzpcdFx0aHVnZXRsYl92bWFfbG9ja19mcmVlKHZtYSk7XG42ODM0Olx0XHRpZiAoIXZtYSB8fCB2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKVxuNjgzNTpcdFx0XHQvKiBPbmx5IGNhbGwgcmVnaW9uX2Fib3J0IGlmIHRoZSByZWdpb25fY2hnIHN1Y2NlZWRlZCBidXQgdGhlXG42ODM2Olx0XHRcdCAqIHJlZ2lvbl9hZGQgZmFpbGVkIG9yIGRpZG4mIzM5O3QgcnVuLlxuNjgzNzpcdFx0XHQgKi9cbjY4Mzg6XHRcdFx0aWYgKGNoZyBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGFkZCBcdTAwM2MgMClcbjY4Mzk6XHRcdFx0XHRyZWdpb25fYWJvcnQocmVzdl9tYXAsIGZyb20sIHRvLCByZWdpb25zX25lZWRlZCk7XG42ODQwOlx0XHRpZiAodm1hIFx1MDAyNlx1MDAyNiBpc192bWFfcmVzdl9zZXQodm1hLCBIUEFHRV9SRVNWX09XTkVSKSkge1xuNjg0MTpcdFx0XHRrcmVmX3B1dChcdTAwMjZyZXN2X21hcC1cdTAwM2VyZWZzLCByZXN2X21hcF9yZWxlYXNlKTtcbjY4NDI6XHRcdFx0c2V0X3ZtYV9yZXN2X21hcCh2bWEsIE5VTEwpO1xuNjg0MzpcdFx0fVxuNjg0NDpcdFx0cmV0dXJuIGVycjtcbjY4NDU6XHR9XG42ODQ2Olx0XG42ODQ3Olx0bG9uZyBodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIHN0YXJ0LCBsb25nIGVuZCxcbjY4NDg6XHRcdFx0XHRcdFx0XHRcdFx0bG9uZyBmcmVlZClcbjY4NDk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzZWVuIHNuaXBwZXRzIG9mIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGFuZCBub3cgSSBuZWVkIHRvIGZsZXNoIG91dCBleGFjdGx5IGhvdyB0aGlzIHJvdXRpbmUgd29ya3MuIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIHRoZSBjZW50cmFsIGxvZ2ljIGZvciBhY3R1YWxseSBjbGFpbWluZyBodWdlcGFnZXMgZm9yIGEgdXNlciwgb3IgYSBwcm9jZXNzLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgY29udHJvbCBmbG93IGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbiwgYWNjb3VudGluZywgYW5kIG1heWJlIGV2ZW4gTlVNQSBjb25zaWRlcmF0aW9ucy4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGl0IHVzZXMsIHRoZSBlcnJvciBoYW5kbGluZywgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHJlc291cmNlIGV4aGF1c3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byB3aGVyZSBpdCBtaWdodCB0b3VjaCB0aGUgZ2xvYmFsIHBhZ2UgdGFibGVzLCBhbmQgaG93IHRoZSByZXNlcnZhdGlvbnMgY2FzY2FkZSAob3IgZG9uJiMzOTt0KSBhY3Jvc3MgZGlmZmVyZW50IHByb2Nlc3NlcyBvciBjb250ZXh0cy4gSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZyBjaGVja2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGV2YWx1YXRpbmcgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBvbiBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSB3aGVuIHJ1bm5pbmcgdGhpcyBmdW5jdGlvbiBpbiBwYXJhbGxlbCwgZm9yIGluc3RhbmNlLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSByZWFsbHkgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW50aXJlIHJlc2VydmUgYW5kIHJlbGVhc2UgbGlmZWN5Y2xlIHRvIGFudGljaXBhdGUgYW55IHBvc3NpYmxlIGVkZ2UgY2FzZXMsIGFuZCBhcmVhcyB0byBwb3RlbnRpYWxseSBvcHRpbWl6ZS4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDY1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY3MjA6XHRcbjY3MjE6XHRcdGlmIChjaGcgXHUwMDNjIDApIHtcbjY3MjI6XHRcdFx0LyogcmVnaW9uX2NoZygpIGFib3ZlIGNhbiByZXR1cm4gLUVOT01FTSAqL1xuNjcyMzpcdFx0XHRlcnIgPSAoY2hnID09IC1FTk9NRU0pID8gLUVOT01FTSA6IC1FSU5WQUw7XG42NzI0Olx0XHRcdGdvdG8gb3V0X2VycjtcbjY3MjU6XHRcdH1cbjY3MjY6XHRcbjY3Mjc6XHRcdGVyciA9IGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXG42NzI4Olx0XHRcdFx0XHRjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBcdTAwMjZoX2NnKTtcbjY3Mjk6XHRcdGlmIChlcnIgXHUwMDNjIDApXG42NzMwOlx0XHRcdGdvdG8gb3V0X2VycjtcbjY3MzE6XHRcbjY3MzI6XHRcdGlmICh2bWEgXHUwMDI2XHUwMDI2ICF2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpIFx1MDAyNlx1MDAyNiBoX2NnKSB7XG42NzMzOlx0XHRcdC8qIEZvciBwcml2YXRlIG1hcHBpbmdzLCB0aGUgaHVnZXRsYl9jZ3JvdXAgdW5jaGFyZ2UgaW5mbyBoYW5nc1xuNjczNDpcdFx0XHQgKiBvZiB0aGUgcmVzdl9tYXAuXG42NzM1Olx0XHRcdCAqL1xuNjczNjpcdFx0XHRyZXN2X21hcF9zZXRfaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfaW5mbyhyZXN2X21hcCwgaF9jZywgaCk7XG42NzM3Olx0XHR9XG42NzM4Olx0XG42NzM5Olx0XHQvKlxuNjc0MDpcdFx0ICogVGhlcmUgbXVzdCBiZSBlbm91Z2ggcGFnZXMgaW4gdGhlIHN1YnBvb2wgZm9yIHRoZSBtYXBwaW5nLiBJZlxuNjc0MTpcdFx0ICogdGhlIHN1YnBvb2wgaGFzIGEgbWluaW11bSBzaXplLCB0aGVyZSBtYXkgYmUgc29tZSBnbG9iYWxcbjY3NDI6XHRcdCAqIHJlc2VydmF0aW9ucyBhbHJlYWR5IGluIHBsYWNlIChnYmxfcmVzZXJ2ZSkuXG42NzQzOlx0XHQgKi9cbjY3NDQ6XHRcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7XG42NzQ1Olx0XHRpZiAoZ2JsX3Jlc2VydmUgXHUwMDNjIDApIHtcbjY3NDY6XHRcdFx0ZXJyID0gZ2JsX3Jlc2VydmU7XG42NzQ3Olx0XHRcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcbjY3NDg6XHRcdH1cbjY3NDk6XHRcbjY3NTA6XHRcdC8qXG42NzUxOlx0XHQgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi5cbjY3NTI6XHRcdCAqIEhhbmQgdGhlIHBhZ2VzIGJhY2sgdG8gdGhlIHN1YnBvb2wgaWYgdGhlcmUgYXJlIG5vdFxuNjc1MzpcdFx0ICovXG42NzU0Olx0XHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTtcbjY3NTU6XHRcdGlmIChlcnIgXHUwMDNjIDApXG42NzU2Olx0XHRcdGdvdG8gb3V0X3B1dF9wYWdlcztcbjY3NTc6XHRcbjY3NTg6XHRcdC8qXG42NzU5Olx0XHQgKiBBY2NvdW50IGZvciB0aGUgcmVzZXJ2YXRpb25zIG1hZGUuIFNoYXJlZCBtYXBwaW5ncyByZWNvcmQgcmVnaW9uc1xuNjc2MDpcdFx0ICogdGhhdCBoYXZlIHJlc2VydmF0aW9ucyBhcyB0aGV5IGFyZSBzaGFyZWQgYnkgbXVsdGlwbGUgVk1Bcy5cbjY3NjE6XHRcdCAqIFdoZW4gdGhlIGxhc3QgVk1BIGRpc2FwcGVhcnMsIHRoZSByZWdpb24gbWFwIHNheXMgaG93IG11Y2hcbjY3NjI6XHRcdCAqIHRoZSByZXNlcnZhdGlvbiB3YXMgYW5kIHRoZSBwYWdlIGNhY2hlIHRlbGxzIGhvdyBtdWNoIG9mXG42NzYzOlx0XHQgKiB0aGUgcmVzZXJ2YXRpb24gd2FzIGNvbnN1bWVkLiBQcml2YXRlIG1hcHBpbmdzIGFyZSBwZXItVk1BIGFuZFxuNjc2NDpcdFx0ICogb25seSB0aGUgY29uc3VtZWQgcmVzZXJ2YXRpb25zIGFyZSB0cmFja2VkLiBXaGVuIHRoZSBWTUFcbjY3NjU6XHRcdCAqIGRpc2FwcGVhcnMsIHRoZSBvcmlnaW5hbCByZXNlcnZhdGlvbiBpcyB0aGUgVk1BIHNpemUgYW5kIHRoZVxuNjc2NjpcdFx0ICogY29uc3VtZWQgcmVzZXJ2YXRpb25zIGFyZSBzdG9yZWQgaW4gdGhlIG1hcC4gSGVuY2UsIG5vdGhpbmdcbjY3Njc6XHRcdCAqIGVsc2UgaGFzIHRvIGJlIGRvbmUgZm9yIHByaXZhdGUgbWFwcGluZ3MgaGVyZVxuNjc2ODpcdFx0ICovXG42NzY5Olx0XHRpZiAoIXZtYSB8fCB2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKSB7XG42NzcwOlx0XHRcdGFkZCA9IHJlZ2lvbl9hZGQocmVzdl9tYXAsIGZyb20sIHRvLCByZWdpb25zX25lZWRlZCwgaCwgaF9jZyk7XG42NzcxOlx0XG42NzcyOlx0XHRcdGlmICh1bmxpa2VseShhZGQgXHUwMDNjIDApKSB7XG42NzczOlx0XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuNjc3NDpcdFx0XHRcdGVyciA9IGFkZDtcbjY3NzU6XHRcdFx0XHRnb3RvIG91dF9wdXRfcGFnZXM7XG42Nzc2Olx0XHRcdH0gZWxzZSBpZiAodW5saWtlbHkoY2hnIFx1MDAzZSBhZGQpKSB7XG42Nzc3Olx0XHRcdFx0LypcbjY3Nzg6XHRcdFx0XHQgKiBwYWdlcyBpbiB0aGlzIHJhbmdlIHdlcmUgYWRkZWQgdG8gdGhlIHJlc2VydmVcbjY3Nzk6XHRcdFx0XHQgKiBtYXAgYmV0d2VlbiByZWdpb25fY2hnIGFuZCByZWdpb25fYWRkLiAgVGhpc1xuNjc4MDpcdFx0XHRcdCAqIGluZGljYXRlcyBhIHJhY2Ugd2l0aCBhbGxvY19odWdldGxiX2ZvbGlvLiAgQWRqdXN0XG42NzgxOlx0XHRcdFx0ICogdGhlIHN1YnBvb2wgYW5kIHJlc2VydmUgY291bnRzIG1vZGlmaWVkIGFib3ZlXG42NzgyOlx0XHRcdFx0ICogYmFzZWQgb24gdGhlIGRpZmZlcmVuY2UuXG42NzgzOlx0XHRcdFx0ICovXG42Nzg0Olx0XHRcdFx0bG9uZyByc3ZfYWRqdXN0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2xgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhpcyBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlIGFuZCBiZWhhdmlvci4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgdHJ1ZSBtdXRleCB1bmxvY2ssIGEgcG90ZW50aWFsIHJlbGVhc2UgYmFjayB0byBhIHJlc291cmNlIHBvb2wsIG9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgbnVhbmNlZC4gSSYjMzk7bSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBjbHVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSDigJMgYXJlIHdlIGRlYWxpbmcgd2l0aCBhIHNoYXJlZCByZXNvdXJjZSwgYSBzcGVjaWZpYyBtZW1vcnkgYWxsb2NhdGlvbiwgb3IgbWF5YmUgYSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlPyBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgaGVyZS4gV2hhdCYjMzk7cyB0aGUgYW50aWNpcGF0ZWQgdXNhZ2UgcGF0dGVybj8gSXMgaXQgaGVhdmlseSBjb250ZW5kZWQsIG9yIHJlbGF0aXZlbHkgcmFyZT8gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl0IGRvZXMgKnNvbWV0aGluZyogd2l0aCByZWxlYXNpbmcgYSByZXNvdXJjZSwgcG90ZW50aWFsbHkgY29uZGl0aW9uYWwgYmFzZWQgb24gc29tZSBjcml0ZXJpYSwgc28gdGhlIGBvcmAgaXMgaW50ZXJlc3RpbmcgdG8gbWUgLSBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIG9wZXJhdGlvbnMsIHVubG9ja2luZyB2cyByZWxlYXNlLiBUaGUgdW5kZXJseWluZyBzZW1hbnRpY3Mgb2YgaG93IHRoZSBzdWJwb29sIGlzIG1hbmFnZWQgYXJlIHdoYXQgSSYjMzk7bSBmb2N1c2VkIG9uIC0gSSYjMzk7bGwgdHJhY2UgZG93biBpdHMgcGF0aCBhbmQgc2VlIGV4YWN0bHkgaG93IGl0IGJlaGF2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VubG9ja19vcl9yZWxlYXNlX3N1YnBvb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTEyOT1zdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbi0tXG5tbS9odWdldGxiLmMtMTQwLVxubW0vaHVnZXRsYi5jOjE0MTpzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG5tbS9odWdldGxiLmMtMTQyLVx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzKVxuLS1cbm1tL2h1Z2V0bGIuYz0xODM9dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4tLVxubW0vaHVnZXRsYi5jLTE5Mi1cdHNwb29sLVx1MDAzZWNvdW50LS07XG5tbS9odWdldGxiLmM6MTkzOlx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xubW0vaHVnZXRsYi5jLTE5NC19XG4tLVxubW0vaHVnZXRsYi5jPTI0OT1zdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4tLVxubW0vaHVnZXRsYi5jLTI3OC1cdCAqL1xubW0vaHVnZXRsYi5jOjI3OTpcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbm1tL2h1Z2V0bGIuYy0yODAtXG4tLVxubW0vaHVnZXRsYi5jPTY2NTk9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9odWdldGxiLmMtNjgxNy1cdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcbm1tL2h1Z2V0bGIuYzo2ODE4Olx0XHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG5tbS9odWdldGxiLmMtNjgxOS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBTdWJwb29sIE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBoYW5kbGluZyB0aGUgcmVsZWFzZSBhbmQgcG90ZW50aWFsIHVubG9ja2luZyBvZiBzdWJwb29scywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2xgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgLiBJIGtub3cgdGhlIHRoZW9yeSwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIHByYWN0aWNhbCBpbXBsZW1lbnRhdGlvbi4gTXkgZXhwZXJ0IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoZXJlIGFyZSBsaWtlbHkgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgaGVyZSwgcHJvYmFibHkgYXJvdW5kIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFuZCBob3cgdGhleSYjMzk7cmUgdXNlZCBpbiB0aGUgY29udGV4dCBvZiBodWdlIHBhZ2VzLiBJJiMzOTttIGd1ZXNzaW5nIHRoZSBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAgZnVuY3Rpb24gbWlnaHQgaW52b2x2ZSBzb21lIGNsZXZlciByZWZlcmVuY2UgY291bnRpbmcgb3IgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgcG90ZW50aWFsbHkgY29uY3VycmVudCBvcGVyYXRpb25zLiBBbmQgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYC4uLiB0aGF0IGxpa2VseSB0aWVzIGludG8gaG93IHdlIHJldHVybiBodWdlIHBhZ2UgbWVtb3J5IGJhY2sgdG8gdGhlIHN5c3RlbSwgbWF5YmUgdGhyb3VnaCBzb21lIGtpbmQgb2YgZnJlZSBsaXN0IG9yIG1vcmUgY29tcGxleCBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzIG9mIHRoZWlyIGRhbmNlLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIHdlbGwtcGxhY2VkIGFzc2VydGlvbnMgYW5kIGNvbW1lbnRzIGluIHRoZSBjb2RlIHRvIGd1aWRlIG15IHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzU6XHRcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxuIDEzNjpcdFx0XHRyZXR1cm4gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuIDEzNzpcdFxuIDEzODpcdFx0cmV0dXJuIHRydWU7XG4gMTM5Olx0fVxuIDE0MDpcdFxuIDE0MTpcdHN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiAxNDI6XHRcdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGlycV9mbGFncylcbiAxNDM6XHR7XG4gMTQ0Olx0XHRib29sIGZyZWVfc3VicG9vbCA9IHN1YnBvb2xfaXNfZnJlZShzcG9vbCk7XG4gMTQ1Olx0XG4gMTQ2Olx0XHQvKiBJZiBubyBwYWdlcyBhcmUgdXNlZCwgYW5kIG5vIG90aGVyIGhhbmRsZXMgdG8gdGhlIHN1YnBvb2xcbiAxNDc6XHRcdCAqIHJlbWFpbiwgZ2l2ZSB1cCBhbnkgcmVzZXJ2YXRpb25zIGJhc2VkIG9uIG1pbmltdW0gc2l6ZSBhbmRcbiAxNDg6XHRcdCAqIGZyZWUgdGhlIHN1YnBvb2wgKi9cbiAxNDk6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgaXJxX2ZsYWdzKTtcbiAxNTA6XHRcbiAxNTE6XHRcdGlmIChmcmVlX3N1YnBvb2wpIHtcbiAxNTI6XHRcdFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEpXG4gMTUzOlx0XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShzcG9vbC1cdTAwM2Voc3RhdGUsXG4gMTU0Olx0XHRcdFx0XHRcdFx0LXNwb29sLVx1MDAzZW1pbl9ocGFnZXMpO1xuIDE1NTpcdFx0XHRrZnJlZShzcG9vbCk7XG4gMTU2Olx0XHR9XG4gMTU3Olx0fVxuIDE1ODpcdFxuIDE1OTpcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdlcGFnZV9uZXdfc3VicG9vbChzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIG1heF9ocGFnZXMsXG4gMTYwOlx0XHRcdFx0XHRcdFx0bG9uZyBtaW5faHBhZ2VzKVxuIDE2MTpcdHtcbiAxNjI6XHRcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbiAxNjM6XHRcbiAxNjQ6XHRcdHNwb29sID0ga3phbGxvY19vYmooKnNwb29sKTtcbiAxNjU6XHRcdGlmICghc3Bvb2wpXG4gMTY2Olx0XHRcdHJldHVybiBOVUxMO1xuIDE2NzpcdFxuIDE2ODpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jayk7XG4gMTY5Olx0XHRzcG9vbC1cdTAwM2Vjb3VudCA9IDE7XG4gMTcwOlx0XHRzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzID0gbWF4X2hwYWdlcztcbiAxNzE6XHRcdHNwb29sLVx1MDAzZWhzdGF0ZSA9IGg7XG4gMTcyOlx0XHRzcG9vbC1cdTAwM2VtaW5faHBhZ2VzID0gbWluX2hwYWdlcztcbiAxNzM6XHRcbiAxNzQ6XHRcdGlmIChtaW5faHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNiBodWdldGxiX2FjY3RfbWVtb3J5KGgsIG1pbl9ocGFnZXMpKSB7XG4gMTc1Olx0XHRcdGtmcmVlKHNwb29sKTtcbiAxNzY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMTc3Olx0XHR9XG4gMTc4Olx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID0gbWluX2hwYWdlcztcbiAxNzk6XHRcbiAxODA6XHRcdHJldHVybiBzcG9vbDtcbiAxODE6XHR9XG4gMTgyOlx0XG4gMTgzOlx0dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4gMTg0Olx0e1xuIDE4NTpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAxODY6XHRcbiAxODc6XHRcdGlmICghc3Bvb2wpXG4gMTg4Olx0XHRcdHJldHVybjtcbiAxODk6XHRcbiAxOTA6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiAxOTE6XHRcdEJVR19PTighc3Bvb2wtXHUwMDNlY291bnQpO1xuIDE5MjpcdFx0c3Bvb2wtXHUwMDNlY291bnQtLTtcbiAxOTM6XHRcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbiAxOTQ6XHR9XG4gMTk1Olx0XG4gMTk2Olx0LypcbiAxOTc6XHQgKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGFsbG9jYXRpbmcgYW5kIHJlc2VydmluZyBwYWdlcy5cbiAxOTg6XHQgKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGVcbiAxOTk6XHQgKiByZXF1ZXN0LiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBieSB3aGljaCB0aGVcbiAyMDA6XHQgKiBnbG9iYWwgcG9vbHMgbXVzdCBiZSBhZGp1c3RlZCAodXB3YXJkKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBtYXlcbiAyMDE6XHQgKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZVxuIDIwMjpcdCAqIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuIDIwMzpcdCAqL1xuIDIwNDpcdHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgRGVlcGVyIGludG8gSHVnZXBhZ2UgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgYmVlbiBleGFtaW5pbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gc3RyYXRlZ2llcywgYW5kIEkmIzM5O20gZ2V0dGluZyBhIGdvb2QgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGZsb3cuIE5vdywgSSB3YW50IHRvIHBpdm90IGFuZCByZWFsbHkgZGlnIGludG8gYSBjcml0aWNhbCBmdW5jdGlvbjogYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBzdWJwb29scyB0byByZXR1cm4gcGFnZXMuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IHdoZXJlIHRoZSBwYWdlcyBnbywgYW5kIGhvdyB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgdGhlIG9uZXMgdXNlZCB3aXRoaW4gdGhlIGBodWdlcGFnZV9zdWJwb29sYCBjb250ZXh0LCBhcmUgbW9kaWZpZWQgZHVyaW5nIHRoaXMgJiMzNDtwdXQmIzM0OyBvcGVyYXRpb24uIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gY29udHJpYnV0ZXMgdG8gbWFpbnRhaW5pbmcgdGhlIGludGVncml0eSBvZiBvdXIgaHVnZXBhZ2UgcG9vbHMuIEkgc3VzcGVjdCB3ZSB3aWxsIGZpbmQgc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIHdpdGhpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQ1Olx0ICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZ2xvYmFsIHBhZ2UgcmVzZXJ2YXRpb25zIHRoYXQgbXVzdCBiZSBkcm9wcGVkLlxuIDI0NjpcdCAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpXG4gMjQ3Olx0ICogaW4gdGhlIGNhc2Ugd2hlcmUgYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXG4gMjQ4Olx0ICovXG4gMjQ5Olx0c3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIDI1MDpcdFx0XHRcdFx0ICAgICAgIGxvbmcgZGVsdGEpXG4gMjUxOlx0e1xuIDI1MjpcdFx0bG9uZyByZXQgPSBkZWx0YTtcbiAyNTM6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gMjU0Olx0XG4gMjU1Olx0XHRpZiAoIXNwb29sKVxuIDI1NjpcdFx0XHRyZXR1cm4gZGVsdGE7XG4gMjU3Olx0XG4gMjU4Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMjU5Olx0XG4gMjYwOlx0XHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcdFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cbiAyNjE6XHRcdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4gMjYyOlx0XG4gMjYzOlx0XHQgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi9cbiAyNjQ6XHRcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyBcdTAwM2Mgc3Bvb2wtXHUwMDNlbWluX2hwYWdlcykge1xuIDI2NTpcdFx0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyAmIzQzOyBkZWx0YSBcdTAwM2M9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpXG4gMjY2Olx0XHRcdFx0cmV0ID0gMDtcbiAyNjc6XHRcdFx0ZWxzZVxuIDI2ODpcdFx0XHRcdHJldCA9IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgJiM0MzsgZGVsdGEgLSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuIDI2OTpcdFxuIDI3MDpcdFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICYjNDM7PSBkZWx0YTtcbiAyNzE6XHRcdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgXHUwMDNlIHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpXG4gMjcyOlx0XHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXM7XG4gMjczOlx0XHR9XG4gMjc0Olx0XG4gMjc1Olx0XHQvKlxuIDI3NjpcdFx0ICogSWYgaHVnZXRsYmZzX3B1dF9zdXBlciBjb3VsZG4mIzM5O3QgZnJlZSBzcG9vbCBkdWUgdG8gYW4gb3V0c3RhbmRpbmdcbiAyNzc6XHRcdCAqIHF1b3RhIHJlZmVyZW5jZSwgZnJlZSBpdCBub3cuXG4gMjc4Olx0XHQgKi9cbiAyNzk6XHRcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbiAyODA6XHRcbiAyODE6XHRcdHJldHVybiByZXQ7XG4gMjgyOlx0fVxuIDI4MzpcdFxuIDI4NDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnN1YnBvb2xfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIDI4NTpcdHtcbiAyODY6XHRcdHJldHVybiBzdWJwb29sX2lub2RlKGZpbGVfaW5vZGUodm1hLVx1MDAzZXZtX2ZpbGUpKTtcbiAyODc6XHR9XG4gMjg4Olx0XG4gMjg5Olx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEzNgoJCQkJCQkJb3V0cHV0OiAxODUKCQkJCQkJCXRob3VnaHRzOiA4NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IEZpeGluZyBhIFBvdGVudGlhbCBVQUYgaW4gSHVnZVRMQiBSZXNlcnZhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBUaGUga2V5IGlzc3VlIGlzIHRoZSByZW9yZGVyaW5nIG9mIG9wZXJhdGlvbnMgd2l0aGluIGBvdXRfcHV0X3BhZ2VzYC4gSXQgc2VlbXMgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYSBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgKFVBRikgdnVsbmVyYWJpbGl0eS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2NlbmFyaW8gd2hlcmUgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBjb3VsZCBmcmVlIHRoZSBgc3Bvb2xgIG9iamVjdCBpZiBhIGNlcnRhaW4gY29uZGl0aW9uIGluIGB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sYCB3YXMgbWV0LCBtYWtpbmcgdGhlIHN1YnNlcXVlbnQgYWNjZXNzIG9mIGBzcG9vbC0mZ3Q7bG9ja2AgYSBVQUYuIEVzc2VudGlhbGx5LCB0aGUgY29kZSB3YXMgc3VzY2VwdGlibGUgdG8gZnJlZWluZyB0aGUgc3VicG9vbCBwcmVtYXR1cmVseSwgbGVhZGluZyB0byBtZW1vcnkgY29ycnVwdGlvbi4KClRoZSBmaXgsIHJlb3JkZXJpbmcgdGhlIGNvbmRpdGlvbmFscywgc2VlbXMgc291bmQgYXMgaXQgZW5zdXJlcyB0aGF0IHRoZSBjcml0aWNhbCBjaGVjayBmb3IgdGhlIGBzcG9vbGAmIzM5O3MgdmFsaWRpdHkgb2NjdXJzICpiZWZvcmUqIGFueSBwb3RlbnRpYWxseSBmcmVlaW5nIG9wZXJhdGlvbi4gIEdvb2QgY2F0Y2gsIHRoYXQmIzM5O3MgYSBjbGFzc2ljIGhlYXAgbGlmZXRpbWUgYnVnLiBLQVNBTiBzaG91bGQgZWFzaWx5IGNhdGNoIHRoYXQga2luZCBvZiBpc3N1ZS4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIGlmIHRoaXMgcmVxdWlyZXMgS01TQU4uIEkgbmVlZCB0byBiZSByaWdvcm91cyBoZXJlLCBnaXZlbiB0aGUgcmVzb3VyY2UgY29zdHMuIEkgbmVlZCB0byBjaGVjayBpZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZC4gVGhlIHZhcmlhYmxlcyBpbiBxdWVzdGlvbiBhcmU6IGBzcG9vbF9yZXN2YCwgYGdibF9yZXN2YCwgYGdibF9yZXNlcnZlYCwgYGNoZ2AsIGBzcG9vbGAsIGBoYCwgYW5kIGBmbGFnc2AuIExvb2tpbmcgYXQgdGhlaXIgaW5pdGlhbGl6YXRpb24gd2l0aGluIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLCBgc3Bvb2xfcmVzdmAsIGBnYmxfcmVzZXJ2ZWAsIGBmbGFnc2AsIGBjaGdgLCBldGMuIGFyZSBhbGwgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgY2hhbmdlcyB0aGF0IHdvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYnJhbmNoaW5nIG9yIGJvdW5kcyBjaGVja2luZy4KClRoZXJlZm9yZSwgc2luY2UgdGhlIHBhdGNoIGRpcmVjdGx5IGFkZHJlc3NlcyBhIFVBRi9kb3VibGUtZnJlZSB2dWxuZXJhYmlsaXR5LCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCBLQVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QsIGEgS01TQU4gc2Vzc2lvbiBpcyB1bm5lY2Vzc2FyeS4gS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgaGVyZS4gTm8gc2Vuc2UgaW4gd2FzdGluZyByZXNvdXJjZXMuCgpUaGUgY29uY2x1c2lvbiBpcyBzdHJhaWdodGZvcndhcmQ6IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGF0IGFzc2Vzc21lbnQuIFRpbWUgdG8gZm9ybXVsYXRlIHRoZSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW9yZGVycyBlcnJvci1wYXRoIGNsZWFudXBzIGluIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAgdG8gcHJldmVudCBhIFVzZS1BZnRlci1GcmVlIChVQUYpIC8gZG91YmxlLWZyZWUgY29uZGl0aW9uIHdoZXJlIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcygpYCBjb3VsZCByZWxlYXNlIGFuZCBmcmVlIGBzcG9vbGAgdmlhIGB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKClgLCBmb2xsb3dlZCBieSBhIHN1YnNlcXVlbnQgYWNjZXNzIHRvIGBzcG9vbGAgaW4gdGhlIGBpZiAoZ2JsX3Jlc2VydmUgXHUwMDI2XHUwMDI2IHNwb29sKWAgYmxvY2suXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBzdHJ1Y3R1cmUgcGFkZGluZywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYy4gVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQgaXMgYSBtZW1vcnkgbGlmZXRpbWUgLyBVQUYgaXNzdWUsIHdoaWNoIGlzIGRldGVjdGVkIGJ5IEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVvcmRlcnMgZXJyb3ItcGF0aCBjbGVhbnVwcyBpbiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIHRvIHByZXZlbnQgYSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSAvIGRvdWJsZS1mcmVlIGNvbmRpdGlvbiB3aGVyZSBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoKWAgY291bGQgcmVsZWFzZSBhbmQgZnJlZSBgc3Bvb2xgIHZpYSBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbCgpYCwgZm9sbG93ZWQgYnkgYSBzdWJzZXF1ZW50IGFjY2VzcyB0byBgc3Bvb2xgIGluIHRoZSBgaWYgKGdibF9yZXNlcnZlIFx1MDAyNlx1MDAyNiBzcG9vbClgIGJsb2NrLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcywgc3RydWN0dXJlIHBhZGRpbmcsIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBicmFuY2hpbmcgbG9naWMuIFRoZSBidWcgYmVpbmcgYWRkcmVzc2VkIGlzIGEgbWVtb3J5IGxpZmV0aW1lIC8gVUFGIGlzc3VlLCB3aGljaCBpcyBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjE6NDcuODExNDY0NTQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5MjcwNTk1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJIVUdFVExCX1BBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX3Jlc2VydmVfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzXCIsXG4gICAgXCJodWdldGxiZnNfZmlsZV9tbWFwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW9yZGVycyBlcnJvci1wYXRoIGNsZWFudXBzIGluIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAgdG8gcHJldmVudCBhIFVzZS1BZnRlci1GcmVlIChVQUYpIC8gZG91YmxlLWZyZWUgY29uZGl0aW9uIHdoZXJlIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcygpYCBjb3VsZCByZWxlYXNlIGFuZCBmcmVlIGBzcG9vbGAgdmlhIGB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKClgLCBmb2xsb3dlZCBieSBhIHN1YnNlcXVlbnQgYWNjZXNzIHRvIGBzcG9vbGAgaW4gdGhlIGBpZiAoZ2JsX3Jlc2VydmUgXFx1MDAyNlxcdTAwMjYgc3Bvb2wpYCBibG9jay5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcywgc3RydWN0dXJlIHBhZGRpbmcsIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBicmFuY2hpbmcgbG9naWMuIFRoZSBidWcgYmVpbmcgYWRkcmVzc2VkIGlzIGEgbWVtb3J5IGxpZmV0aW1lIC8gVUFGIGlzc3VlLCB3aGljaCBpcyBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgdGVhcmRvd24gb3JkZXJpbmcgaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCkgaW4gbW0vaHVnZXRsYi5jIHRvIHJlc3RvcmUgdXNlZF9ocGFnZXMgYmVmb3JlIHB1dHRpbmcgc3VicG9vbCByZXNlcnZhdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBleGVyY2lzZWQgd2hlbiBodWdldGxiIHJlc2VydmF0aW9ucyBmYWlsIG9yIHJhY2UgZHVyaW5nIG1tYXAsIG1lbWZkX2NyZWF0ZSwgb3Igc2htZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMTo0Ny44MTE0NzEyNzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4OTIwODk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY4MmQ1NDhlZTViZTg2MWI1MWYyZTZkNjU2NzdiMDViZTUxN2RhYWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAxODoyMTo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCA3ODU3NzI4NDU3OTUyLi4zZTNjZGExODFlNzI0IDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC02ODA4LDE1ICs2ODA4LDYgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFxuIG91dF9wdXRfcGFnZXM6XFxuIFxcdHNwb29sX3Jlc3YgPSBjaGcgLSBnYmxfcmVzZXJ2ZTtcXG4tXFx0aWYgKHNwb29sX3Jlc3YpIHtcXG4tXFx0XFx0LyogcHV0IHN1YiBwb29sJ3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cXG4tXFx0XFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxcbi1cXHRcXHQgKiByZXR1cm4gdG8gaHN0YXRlLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xcbi1cXHR9XFxuIFxcdC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL1xcbiBcXHRpZiAoZ2JsX3Jlc2VydmUgXFx1MDAyNlxcdTAwMjYgc3Bvb2wpIHtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5AQCAtNjgyNiw2ICs2ODE3LDE1IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcXG4gXFx0XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbiBcXHR9XFxuK1xcdGlmIChzcG9vbF9yZXN2KSB7XFxuK1xcdFxcdC8qIHB1dCBzdWIgcG9vbCdzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovXFxuK1xcdFxcdGdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBzdWJwb29sJ3MgcmVzZXJ2ZWQgcGFnZXMgY2FuIG5vdCBiZSBwdXQgYmFjayBkdWUgdG8gcmFjZSxcXG4rXFx0XFx0ICogcmV0dXJuIHRvIGhzdGF0ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2KTtcXG4rXFx0fVxcbiBvdXRfdW5jaGFyZ2VfY2dyb3VwOlxcbiBcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjE6NDguNDAxMzQxMjA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMDc4NDMwNjE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNcIixcbiAgICBcImh1Z2V0bGJmc19maWxlX21tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgdGVhcmRvd24gb3JkZXJpbmcgaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCkgaW4gbW0vaHVnZXRsYi5jIHRvIHJlc3RvcmUgdXNlZF9ocGFnZXMgYmVmb3JlIHB1dHRpbmcgc3VicG9vbCByZXNlcnZhdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBleGVyY2lzZWQgd2hlbiBodWdldGxiIHJlc2VydmF0aW9ucyBmYWlsIG9yIHJhY2UgZHVyaW5nIG1tYXAsIG1lbWZkX2NyZWF0ZSwgb3Igc2htZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY4MmQ1NDhlZTViZTg2MWI1MWYyZTZkNjU2NzdiMDViZTUxN2RhYWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE4OjIxOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA3ODU3NzI4NDU3OTUyLi4zZTNjZGExODFlNzI0IDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC02ODA4LDE1ICs2ODA4LDYgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBvdXRfcHV0X3BhZ2VzOlxuIFx0c3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlO1xuLVx0aWYgKHNwb29sX3Jlc3YpIHtcbi1cdFx0LyogcHV0IHN1YiBwb29sJ3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cbi1cdFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XG4tXHRcdC8qXG4tXHRcdCAqIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxuLVx0XHQgKiByZXR1cm4gdG8gaHN0YXRlLlxuLVx0XHQgKi9cbi1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xuLVx0fVxuIFx0LyogUmVzdG9yZSB1c2VkX2hwYWdlcyBmb3IgcGFnZXMgdGhhdCBmYWlsZWQgZ2xvYmFsIHJlc2VydmF0aW9uICovXG4gXHRpZiAoZ2JsX3Jlc2VydmUgXHUwMDI2XHUwMDI2IHNwb29sKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5AQCAtNjgyNiw2ICs2ODE3LDE1IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7XG4gXHRcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbiBcdH1cbitcdGlmIChzcG9vbF9yZXN2KSB7XG4rXHRcdC8qIHB1dCBzdWIgcG9vbCdzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovXG4rXHRcdGdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpO1xuK1x0XHQvKlxuK1x0XHQgKiBzdWJwb29sJ3MgcmVzZXJ2ZWQgcGFnZXMgY2FuIG5vdCBiZSBwdXQgYmFjayBkdWUgdG8gcmFjZSxcbitcdFx0ICogcmV0dXJuIHRvIGhzdGF0ZS5cbitcdFx0ICovXG4rXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2KTtcbitcdH1cbiBvdXRfdW5jaGFyZ2VfY2dyb3VwOlxuIFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoaHN0YXRlX2luZGV4KGgpLFxuIFx0XHRcdFx0XHQgICAgY2hnICogcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgaF9jZyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMTo0OC40MDEzNDI4NjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTczNTY0NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGh1Z2V0bGIuY2AgRGlmZjogUmVzZXJ2YXRpb24gSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaHVnZXRsYi5jYCBkaWZmLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhlIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgcGFnZSByZXNlcnZhdGlvbnMgYXJlIG1hbmFnZWQsIGxpa2VseSB3aXRoaW4gc3VicG9vbHMgYW5kIHRoZSBnbG9iYWwgcG9vbC4gVGhlIGNoYW5nZSBpcyBjbGVhcmx5IGZvY3VzZWQgb24gdGhlIGxvZ2ljIGFmdGVyIHRoZSBnbG9iYWwgcmVzZXJ2YXRpb24gYXR0ZW1wdCwgYW5kIEkgc2VlIHRoZSBjcnVjaWFsIGxpbmUgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBjYWxsZWQuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBjb2RlIGF0dGVtcHRlZCB0byByZWxlYXNlIGEgc3VicG9vbCdzIHJlc2VydmF0aW9uIGlmIGEgZ2xvYmFsIHJlc2VydmF0aW9uIGZhaWxlZC4gSXQgbG9va3MgbGlrZSBpdCB3YXMgYXR0ZW1wdGluZyB0byBwdXQgdGhlIHN1YnBvb2wncyByZXNlcnZhdGlvbiBiYWNrLCBhbmQgaWYgaXQgY291bGQgbm90LCBpdCB3b3VsZCByZXR1cm4gdGhlIHBhZ2VzIHRvIHRoZSBoc3RhdGUuXG5cblRoZSBkaWZmIGludHJvZHVjZXMgYSBjaGFuZ2UuIFRoZSBvcmlnaW5hbCBsb2dpYyB3YXMgaW5zaWRlIGEgY29uZGl0aW9uYWwgYGlmIChzcG9vbF9yZXN2KWAuIE5vdyB0aGF0IGlmIHN0YXRlbWVudCBpcyByZXBlYXRlZC4gVGhlIHNlY29uZCB0aW1lLCBhZnRlciB0aGUgbGluZXMgZm9yIHBhZ2UgcmVzdG9yZSBpZiBnbG9iYWwgcmVzZXJ2YXRpb24gZmFpbGVkLiBUaGlzIGltcGxpZXMgdGhlcmUgd2FzIGEgYnVnIHdoZXJlIHRoZSBzdWJwb29sJ3MgcmVzZXJ2YXRpb24gd2Fzbid0IGJlaW5nIGNvcnJlY3RseSBwdXQgYmFjayBpbiBjZXJ0YWluIHNjZW5hcmlvcywgcHJvYmFibHkgcmVsYXRlZCB0byByYWNlIGNvbmRpdGlvbnMuIFRoZSBjb21tZW50ZWQtb3V0IGxpbmVzIHBvaW50IHRvIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4ndCBiZSBwdXQgYmFjayBhbmQgdGhhdCB0aGUgc3VicG9vbCdzIHJlc2VydmVkIHBhZ2VzIG5lZWQgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIGhzdGF0ZS4gVGhlIGNvbW1lbnQgYC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL2AgYWxzbyBhbGlnbnMgd2l0aCB0aGlzIHVuZGVyc3RhbmRpbmcuIFRoZSBvcmlnaW5hbCBsb2dpYyBsaWtlbHkgaGFkIGEgaG9sZSBpbiBpdHMgaGFuZGxpbmcgb2YgcmVzZXJ2YXRpb24gcmVmdW5kcyB3aGVuIGEgZ2xvYmFsIHJlc2VydmF0aW9uIGZhaWxlZCwgbGVhZGluZyB0byBtZW1vcnkgbGVha3Mgb3IgaW5jb3JyZWN0IGFjY291bnRpbmcuIFRoZSBkdXBsaWNhdGVkIGNvZGUgZW5zdXJlcyB0aGUgcmVzZXJ2YXRpb24gaXMgYWx3YXlzIHB1dCBiYWNrLCBpcnJlc3BlY3RpdmUgb2YgYSBzdWNjZXNzZnVsIGdsb2JhbCByZXNlcnZhdGlvbiwgYW5kIGxpa2VseSBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbi4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSdzIGV4ZWN1dGlvbiBwYXRocyB0byBjb25maXJtIHRoaXMsIGJ1dCB0aGF0J3MgbXkgd29ya2luZyBoeXBvdGhlc2lzIGJhc2VkIG9uIHRoZSBkaWZmIGFuZCB0aGUgY29tbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMTo1NC45NzQ5MDk3MjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3NzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY3NzA6XFx0XFx0XFx0YWRkID0gcmVnaW9uX2FkZChyZXN2X21hcCwgZnJvbSwgdG8sIHJlZ2lvbnNfbmVlZGVkLCBoLCBoX2NnKTtcXG42NzcxOlxcdFxcbjY3NzI6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGFkZCBcXHUwMDNjIDApKSB7XFxuNjc3MzpcXHRcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxuNjc3NDpcXHRcXHRcXHRcXHRlcnIgPSBhZGQ7XFxuNjc3NTpcXHRcXHRcXHRcXHRnb3RvIG91dF9wdXRfcGFnZXM7XFxuNjc3NjpcXHRcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KGNoZyBcXHUwMDNlIGFkZCkpIHtcXG42Nzc3OlxcdFxcdFxcdFxcdC8qXFxuNjc3ODpcXHRcXHRcXHRcXHQgKiBwYWdlcyBpbiB0aGlzIHJhbmdlIHdlcmUgYWRkZWQgdG8gdGhlIHJlc2VydmVcXG42Nzc5OlxcdFxcdFxcdFxcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXFxuNjc4MDpcXHRcXHRcXHRcXHQgKiBpbmRpY2F0ZXMgYSByYWNlIHdpdGggYWxsb2NfaHVnZXRsYl9mb2xpby4gIEFkanVzdFxcbjY3ODE6XFx0XFx0XFx0XFx0ICogdGhlIHN1YnBvb2wgYW5kIHJlc2VydmUgY291bnRzIG1vZGlmaWVkIGFib3ZlXFxuNjc4MjpcXHRcXHRcXHRcXHQgKiBiYXNlZCBvbiB0aGUgZGlmZmVyZW5jZS5cXG42NzgzOlxcdFxcdFxcdFxcdCAqL1xcbjY3ODQ6XFx0XFx0XFx0XFx0bG9uZyByc3ZfYWRqdXN0O1xcbjY3ODU6XFx0XFxuNjc4NjpcXHRcXHRcXHRcXHQvKlxcbjY3ODc6XFx0XFx0XFx0XFx0ICogaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoKSB3aWxsIHB1dCB0aGVcXG42Nzg4OlxcdFxcdFxcdFxcdCAqIHJlZmVyZW5jZSB0byBoX2NnLVxcdTAwM2Vjc3MuIFNlZSBjb21tZW50IGJlbG93IGZvciBkZXRhaWwuXFxuNjc4OTpcXHRcXHRcXHRcXHQgKi9cXG42NzkwOlxcdFxcdFxcdFxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKFxcbjY3OTE6XFx0XFx0XFx0XFx0XFx0aHN0YXRlX2luZGV4KGgpLFxcbjY3OTI6XFx0XFx0XFx0XFx0XFx0KGNoZyAtIGFkZCkgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcXG42NzkzOlxcdFxcbjY3OTQ6XFx0XFx0XFx0XFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLFxcbjY3OTU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2hnIC0gYWRkKTtcXG42Nzk2OlxcdFxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xcbjY3OTc6XFx0XFx0XFx0fSBlbHNlIGlmIChoX2NnKSB7XFxuNjc5ODpcXHRcXHRcXHRcXHQvKlxcbjY3OTk6XFx0XFx0XFx0XFx0ICogVGhlIGZpbGVfcmVnaW9ucyB3aWxsIGhvbGQgdGhlaXIgb3duIHJlZmVyZW5jZSB0b1xcbjY4MDA6XFx0XFx0XFx0XFx0ICogaF9jZy1cXHUwMDNlY3NzLiBTbyB3ZSBzaG91bGQgcmVsZWFzZSB0aGUgcmVmZXJlbmNlIGhlbGRcXG42ODAxOlxcdFxcdFxcdFxcdCAqIHZpYSBodWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwX3JzdmQoKSB3aGVuIHdlIGFyZVxcbjY4MDI6XFx0XFx0XFx0XFx0ICogZG9uZS5cXG42ODAzOlxcdFxcdFxcdFxcdCAqL1xcbjY4MDQ6XFx0XFx0XFx0XFx0aHVnZXRsYl9jZ3JvdXBfcHV0X3JzdmRfY2dyb3VwKGhfY2cpO1xcbjY4MDU6XFx0XFx0XFx0fVxcbjY4MDY6XFx0XFx0fVxcbjY4MDc6XFx0XFx0cmV0dXJuIGNoZztcXG42ODA4OlxcdFxcbjY4MDk6XFx0b3V0X3B1dF9wYWdlczpcXG42ODEwOlxcdFxcdHNwb29sX3Jlc3YgPSBjaGcgLSBnYmxfcmVzZXJ2ZTtcXG42ODExOlxcdFxcdC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL1xcbjY4MTI6XFx0XFx0aWYgKGdibF9yZXNlcnZlIFxcdTAwMjZcXHUwMDI2IHNwb29sKSB7XFxuNjgxMzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjY4MTQ6XFx0XFxuNjgxNTpcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG42ODE2OlxcdFxcdFxcdGlmIChzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcXG42ODE3OlxcdFxcdFxcdFxcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcXG42ODE4OlxcdFxcdFxcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcXG42ODE5OlxcdFxcdH1cXG42ODIwOlxcdFxcdGlmIChzcG9vbF9yZXN2KSB7XFxuNjgyMTpcXHRcXHRcXHQvKiBwdXQgc3ViIHBvb2wncyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqL1xcbjY4MjI6XFx0XFx0XFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XFxuNjgyMzpcXHRcXHRcXHQvKlxcbjY4MjQ6XFx0XFx0XFx0ICogc3VicG9vbCdzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsXFxuNjgyNTpcXHRcXHRcXHQgKiByZXR1cm4gdG8gaHN0YXRlLlxcbjY4MjY6XFx0XFx0XFx0ICovXFxuNjgyNzpcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XFxuNjgyODpcXHRcXHR9XFxuNjgyOTpcXHRvdXRfdW5jaGFyZ2VfY2dyb3VwOlxcbjY4MzA6XFx0XFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoaHN0YXRlX2luZGV4KGgpLFxcbjY4MzE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xcbjY4MzI6XFx0b3V0X2VycjpcXG42ODMzOlxcdFxcdGh1Z2V0bGJfdm1hX2xvY2tfZnJlZSh2bWEpO1xcbjY4MzQ6XFx0XFx0aWYgKCF2bWEgfHwgdm1hX3Rlc3Qodm1hLCBWTUFfTUFZU0hBUkVfQklUKSlcXG42ODM1OlxcdFxcdFxcdC8qIE9ubHkgY2FsbCByZWdpb25fYWJvcnQgaWYgdGhlIHJlZ2lvbl9jaGcgc3VjY2VlZGVkIGJ1dCB0aGVcXG42ODM2OlxcdFxcdFxcdCAqIHJlZ2lvbl9hZGQgZmFpbGVkIG9yIGRpZG4ndCBydW4uXFxuNjgzNzpcXHRcXHRcXHQgKi9cXG42ODM4OlxcdFxcdFxcdGlmIChjaGcgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBhZGQgXFx1MDAzYyAwKVxcbjY4Mzk6XFx0XFx0XFx0XFx0cmVnaW9uX2Fib3J0KHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQpO1xcbjY4NDA6XFx0XFx0aWYgKHZtYSBcXHUwMDI2XFx1MDAyNiBpc192bWFfcmVzdl9zZXQodm1hLCBIUEFHRV9SRVNWX09XTkVSKSkge1xcbjY4NDE6XFx0XFx0XFx0a3JlZl9wdXQoXFx1MDAyNnJlc3ZfbWFwLVxcdTAwM2VyZWZzLCByZXN2X21hcF9yZWxlYXNlKTtcXG42ODQyOlxcdFxcdFxcdHNldF92bWFfcmVzdl9tYXAodm1hLCBOVUxMKTtcXG42ODQzOlxcdFxcdH1cXG42ODQ0OlxcdFxcdHJldHVybiBlcnI7XFxuNjg0NTpcXHR9XFxuNjg0NjpcXHRcXG42ODQ3OlxcdGxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXFxuNjg0ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRsb25nIGZyZWVkKVxcbjY4NDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMTo1NC45NzU0MDA2MTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTk0MTE1MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zIGluIFN1YnBvb2wgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKWAgZnVuY3Rpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KWAgZnVuY3Rpb24uIE15IGluaXRpYWwgY29uY2VybiBpcyB0aGF0IGB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sYCBtaWdodCBmcmVlIGBzcG9vbGAgKG9yIGRyb3AgaXRzIHJlZmVyZW5jZSBjb3VudCkgcmlnaHQgYmVmb3JlIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AgZ2V0cyBhIGNoYW5jZSB0byBkbyBpdHMgam9iLiBUaGF0IHNlZW1zIGxpa2UgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBvciBhIHJhY2UgY29uZGl0aW9uIGF0IHRoZSB2ZXJ5IGxlYXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgbWVjaGFuaWNzIG9mIHRoZXNlIGZ1bmN0aW9ucyB0byBjb25maXJtIHRoZSByYWNlLiBJIGhhdmUgdG8gdmVyaWZ5IHdoYXQgYWN0aW9ucyBhcmUgcGVyZm9ybWVkIGJ5IGVhY2ggZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoZSBleGFjdCBzdGVwcyBhbmQgd2hlbiBlYWNoIGlzIGNhbGxlZC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBjbG9zZWx5IGF0IGB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sYCBhbmQgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCwgdG8gc2VlIGlmIG15IGluaXRpYWwgaHVuY2ggaGFzIGFueSBtZXJpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ5OCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjIxOjU4LjE2OTUxOTQzN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjYzNDk5MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXN8dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTEyOT1zdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNDAtXFxubW0vaHVnZXRsYi5jOjE0MTpzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxubW0vaHVnZXRsYi5jLTE0Mi1cXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGlycV9mbGFncylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xODM9dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXFxuLS1cXG5tbS9odWdldGxiLmMtMTkyLVxcdHNwb29sLVxcdTAwM2Vjb3VudC0tO1xcbm1tL2h1Z2V0bGIuYzoxOTM6XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYy0xOTQtfVxcbi0tXFxubW0vaHVnZXRsYi5jPTIwND1zdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxuLS1cXG5tbS9odWdldGxiLmMtMjQ4LSAqL1xcbm1tL2h1Z2V0bGIuYzoyNDk6c3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbm1tL2h1Z2V0bGIuYy0yNTAtXFx0XFx0XFx0XFx0ICAgICAgIGxvbmcgZGVsdGEpXFxuLS1cXG5tbS9odWdldGxiLmMtMjc4LVxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoyNzk6XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYy0yODAtXFxuLS1cXG5tbS9odWdldGxiLmM9MTY3Mz12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE2OTktXFx0ICogdmlhIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKCkuICBTaW5jZSB3ZSBhcmUgJ3Jlc3RvcmluZycgdGhlXFxubW0vaHVnZXRsYi5jOjE3MDA6XFx0ICogcmVzZXJ2YXRpb24sIGRvIG5vdCBjYWxsIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKCkgYXMgdGhpcyB3aWxsXFxubW0vaHVnZXRsYi5jLTE3MDEtXFx0ICogcmVtb3ZlIHRoZSByZXNlcnZlZCBwYWdlIGZyb20gdGhlIHN1YnBvb2wuXFxuLS1cXG5tbS9odWdldGxiLmMtMTcwOS1cXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6MTcxMDpcXHRcXHRpZiAoaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpID09IDApXFxubW0vaHVnZXRsYi5jLTE3MTEtXFx0XFx0XFx0cmVzdG9yZV9yZXNlcnZlID0gdHJ1ZTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yOTM5PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMDQ5LVxcbm1tL2h1Z2V0bGIuYzozMDUwOlxcdFxcdFxcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxubW0vaHVnZXRsYi5jLTMwNTEtXFx0XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtcnN2X2FkanVzdCk7XFxuLS1cXG5tbS9odWdldGxiLmMtMzA2Ni1cXHRpZiAobWFwX2NoZyBcXHUwMDI2XFx1MDAyNiAhZ2JsX2NoZykge1xcbm1tL2h1Z2V0bGIuYzozMDY3OlxcdFxcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xcbm1tL2h1Z2V0bGIuYy0zMDY4LVxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz00NzA5PXN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1fb3BfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdldGxiLmMtNDczMi1cXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NDczMzpcXHRcXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCByZXNlcnZlKTtcXG5tbS9odWdldGxiLmMtNDczNC1cXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxuLS1cXG5tbS9odWdldGxiLmM9NjY1OT1sb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY3OTMtXFxubW0vaHVnZXRsYi5jOjY3OTQ6XFx0XFx0XFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLFxcbm1tL2h1Z2V0bGIuYy02Nzk1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNoZyAtIGFkZCk7XFxuLS1cXG5tbS9odWdldGxiLmMtNjgxNy1cXHRcXHRcXHRzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7XFxubW0vaHVnZXRsYi5jOjY4MTg6XFx0XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYy02ODE5LVxcdH1cXG4tLVxcbm1tL2h1Z2V0bGIuYy02ODIxLVxcdFxcdC8qIHB1dCBzdWIgcG9vbCdzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovXFxubW0vaHVnZXRsYi5jOjY4MjI6XFx0XFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XFxubW0vaHVnZXRsYi5jLTY4MjMtXFx0XFx0LypcXG4tLVxcbm1tL2h1Z2V0bGIuYz02ODQ3PWxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXFxuLS1cXG5tbS9odWdldGxiLmMtNjg4MS1cXHQgKi9cXG5tbS9odWdldGxiLmM6Njg4MjpcXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAoY2hnIC0gZnJlZWQpKTtcXG5tbS9odWdldGxiLmMtNjg4My1cXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjIxOjU4LjI5NTg3NTUyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NjU2MDg4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCoqXG5cblJpZ2h0LCBzbyBJJ20gc3RhcnRpbmcgYXQgdGhlIHRvcCBvZiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgc3BlY2lmaWNhbGx5IGxpbmUgNjY1OSwgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljIGZyb20gdGhlIGdyb3VuZCB1cCB0byByZWFsbHkgZ3Jhc3AgaXRzIGltcGxpY2F0aW9ucy4gTGV0J3Mgc2VlIGhvdyB0aGlzIHRoaW5nIHdvcmtzIGZyb20gdGhlIHZlcnkgYmVnaW5uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTg4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjE6NTkuODYxNDg4MDk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYyNzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2V0bGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjU5LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NjU5OlxcdGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuNjY2MDpcXHRcXHRcXHRsb25nIGZyb20sIGxvbmcgdG8sXFxuNjY2MTpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG42NjYyOlxcdFxcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncylcXG42NjYzOlxcdHtcXG42NjY0OlxcdFxcdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBzcG9vbF9yZXN2LCBnYmxfcmVzdjtcXG42NjY1OlxcdFxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xcbjY2NjY6XFx0XFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7XFxuNjY2NzpcXHRcXHRzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwO1xcbjY2Njg6XFx0XFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcXG42NjY5OlxcdFxcdGxvbmcgZ2JsX3Jlc2VydmUsIHJlZ2lvbnNfbmVlZGVkID0gMDtcXG42NjcwOlxcdFxcdGludCBlcnI7XFxuNjY3MTpcXHRcXG42NjcyOlxcdFxcdC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqL1xcbjY2NzM6XFx0XFx0aWYgKGZyb20gXFx1MDAzZSB0bykge1xcbjY2NzQ6XFx0XFx0XFx0Vk1fV0FSTigxLCBcXFwiJXMgY2FsbGVkIHdpdGggYSBuZWdhdGl2ZSByYW5nZVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbjY2NzU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNjY3NjpcXHRcXHR9XFxuNjY3NzpcXHRcXG42Njc4OlxcdFxcdC8qXFxuNjY3OTpcXHRcXHQgKiB2bWEgc3BlY2lmaWMgc2VtYXBob3JlIHVzZWQgZm9yIHBtZCBzaGFyaW5nIGFuZCBmYXVsdC90cnVuY2F0aW9uXFxuNjY4MDpcXHRcXHQgKiBzeW5jaHJvbml6YXRpb25cXG42NjgxOlxcdFxcdCAqL1xcbjY2ODI6XFx0XFx0aHVnZXRsYl92bWFfbG9ja19hbGxvYyh2bWEpO1xcbjY2ODM6XFx0XFxuNjY4NDpcXHRcXHQvKlxcbjY2ODU6XFx0XFx0ICogT25seSBhcHBseSBodWdlcGFnZSByZXNlcnZhdGlvbiBpZiBhc2tlZC4gQXQgZmF1bHQgdGltZSwgYW5cXG42Njg2OlxcdFxcdCAqIGF0dGVtcHQgd2lsbCBiZSBtYWRlIGZvciBWTV9OT1JFU0VSVkUgdG8gYWxsb2NhdGUgYSBwYWdlXFxuNjY4NzpcXHRcXHQgKiB3aXRob3V0IHVzaW5nIHJlc2VydmVzXFxuNjY4ODpcXHRcXHQgKi9cXG42Njg5OlxcdFxcdGlmICh2bWFfZmxhZ3NfdGVzdChcXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTk9SRVNFUlZFX0JJVCkpXFxuNjY5MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG42NjkxOlxcdFxcbjY2OTI6XFx0XFx0LypcXG42NjkzOlxcdFxcdCAqIFNoYXJlZCBtYXBwaW5ncyBiYXNlIHRoZWlyIHJlc2VydmF0aW9uIG9uIHRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdFxcbjY2OTQ6XFx0XFx0ICogYXJlIGFscmVhZHkgYWxsb2NhdGVkIG9uIGJlaGFsZiBvZiB0aGUgZmlsZS4gUHJpdmF0ZSBtYXBwaW5ncyBuZWVkXFxuNjY5NTpcXHRcXHQgKiB0byByZXNlcnZlIHRoZSBmdWxsIGFyZWEgZXZlbiBpZiByZWFkLW9ubHkgYXMgbXByb3RlY3QoKSBtYXkgYmVcXG42Njk2OlxcdFxcdCAqIGNhbGxlZCB0byBtYWtlIHRoZSBtYXBwaW5nIHJlYWQtd3JpdGUuIEFzc3VtZSAhdm1hIGlzIGEgc2htIG1hcHBpbmdcXG42Njk3OlxcdFxcdCAqL1xcbjY2OTg6XFx0XFx0aWYgKCF2bWEgfHwgdm1hX3Rlc3Qodm1hLCBWTUFfTUFZU0hBUkVfQklUKSkge1xcbjY2OTk6XFx0XFx0XFx0LypcXG42NzAwOlxcdFxcdFxcdCAqIHJlc3ZfbWFwIGNhbiBub3QgYmUgTlVMTCBhcyBodWdldGxiX3Jlc2VydmVfcGFnZXMgaXMgb25seVxcbjY3MDE6XFx0XFx0XFx0ICogY2FsbGVkIGZvciBpbm9kZXMgZm9yIHdoaWNoIHJlc3ZfbWFwcyB3ZXJlIGNyZWF0ZWQgKHNlZVxcbjY3MDI6XFx0XFx0XFx0ICogaHVnZXRsYmZzX2dldF9pbm9kZSkuXFxuNjcwMzpcXHRcXHRcXHQgKi9cXG42NzA0OlxcdFxcdFxcdHJlc3ZfbWFwID0gaW5vZGVfcmVzdl9tYXAoaW5vZGUpO1xcbjY3MDU6XFx0XFxuNjcwNjpcXHRcXHRcXHRjaGcgPSByZWdpb25fY2hnKHJlc3ZfbWFwLCBmcm9tLCB0bywgXFx1MDAyNnJlZ2lvbnNfbmVlZGVkKTtcXG42NzA3OlxcdFxcdH0gZWxzZSB7XFxuNjcwODpcXHRcXHRcXHQvKiBQcml2YXRlIG1hcHBpbmcuICovXFxuNjcwOTpcXHRcXHRcXHRyZXN2X21hcCA9IHJlc3ZfbWFwX2FsbG9jKCk7XFxuNjcxMDpcXHRcXHRcXHRpZiAoIXJlc3ZfbWFwKSB7XFxuNjcxMTpcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjY3MTI6XFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjY3MTM6XFx0XFx0XFx0fVxcbjY3MTQ6XFx0XFxuNjcxNTpcXHRcXHRcXHRjaGcgPSB0byAtIGZyb207XFxuNjcxNjpcXHRcXG42NzE3OlxcdFxcdFxcdHNldF92bWFfcmVzdl9tYXAodm1hLCByZXN2X21hcCk7XFxuNjcxODpcXHRcXHRcXHRzZXRfdm1hX3Jlc3ZfZmxhZ3Modm1hLCBIUEFHRV9SRVNWX09XTkVSKTtcXG42NzE5OlxcdFxcdH1cXG42NzIwOlxcdFxcbjY3MjE6XFx0XFx0aWYgKGNoZyBcXHUwMDNjIDApIHtcXG42NzIyOlxcdFxcdFxcdC8qIHJlZ2lvbl9jaGcoKSBhYm92ZSBjYW4gcmV0dXJuIC1FTk9NRU0gKi9cXG42NzIzOlxcdFxcdFxcdGVyciA9IChjaGcgPT0gLUVOT01FTSkgPyAtRU5PTUVNIDogLUVJTlZBTDtcXG42NzI0OlxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG42NzI1OlxcdFxcdH1cXG42NzI2OlxcdFxcbjY3Mjc6XFx0XFx0ZXJyID0gaHVnZXRsYl9jZ3JvdXBfY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcXG42NzI4OlxcdFxcdFxcdFxcdFxcdGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIFxcdTAwMjZoX2NnKTtcXG42NzI5OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjY3MzA6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjY3MzE6XFx0XFxuNjczMjpcXHRcXHRpZiAodm1hIFxcdTAwMjZcXHUwMDI2ICF2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpIFxcdTAwMjZcXHUwMDI2IGhfY2cpIHtcXG42NzMzOlxcdFxcdFxcdC8qIEZvciBwcml2YXRlIG1hcHBpbmdzLCB0aGUgaHVnZXRsYl9jZ3JvdXAgdW5jaGFyZ2UgaW5mbyBoYW5nc1xcbjY3MzQ6XFx0XFx0XFx0ICogb2YgdGhlIHJlc3ZfbWFwLlxcbjY3MzU6XFx0XFx0XFx0ICovXFxuNjczNjpcXHRcXHRcXHRyZXN2X21hcF9zZXRfaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfaW5mbyhyZXN2X21hcCwgaF9jZywgaCk7XFxuNjczNzpcXHRcXHR9XFxuNjczODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjE6NTkuODYxODU0MTc3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg3MTI3MzQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLi4uIHJpZ2h0LCB0aGF0J3MgZmlybWx5IHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgYG1tL2h1Z2V0bGIuY2AuIEl0J3MgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aG9zZSBjcnVjaWFsIGh1Z2V0bGIgcmVzZXJ2YXRpb25zIHdoZW5ldmVyIHdlJ3JlIGVzdGFibGlzaGluZyBhIGh1Z2V0bGIgbWFwcGluZywgd2hldGhlciBpdCdzIHRocm91Z2ggYG1tYXBgLCBgc2htZ2V0YCwgb3Igd2hhdGV2ZXIuIEVzc2VudGlhbGx5LCBpdCdzIHRoZSBnYXRla2VlcGVyIGZvciB0aG9zZSBnaWFudCBwYWdlcy4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGZ1bmN0aW9uYWxpdHkgZXZlbiAqcmVsZXZhbnQqIHRvIGNvbnNpZGVyIGluIGEgdHlwaWNhbCBlbnZpcm9ubWVudD8gTXkgaW1tZWRpYXRlIGFzc2Vzc21lbnQgaXMgeWVzOyBodWdldGxiZnMgaXMgcHJldHR5IG11Y2ggc3RhbmRhcmQgaXNzdWUgaW4gbW9kZXJuIExpbnV4IGtlcm5lbHMuIFRoZSBLY29uZmlnIG9wdGlvbnMgYENPTkZJR19IVUdFVExCRlNgIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIHByZXR0eSBtdWNoIGFsd2F5cyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gbWFueSBkaXN0cmlidXRpb25zLCBzbyBpdCdzIGEgZGVmaW5pdGUgY29uc2lkZXJhdGlvbi4gQWxyaWdodCwgdGltZSB0byBkaWcgZGVlcGVyIGFuZCBhY3R1YWxseSBjaGVjayB0aG9zZSBLY29uZmlnIG9wdGlvbnMgdG8gZ2V0IG1vcmUgb2YgYSBwcmVjaXNlIHBpY3R1cmUgb2YgdGhlIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjQzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MDIuNzMzMTMxOTUxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTczODg5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njk0PWNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xcbi0tXFxubW0vS2NvbmZpZy02OTYtXFxubW0vS2NvbmZpZzo2OTc6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy02OTgtXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMjowMi44MDQ4NzczMDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3ODAxNTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqSHVudGluZyBEb3duIHRoZSBIVUdFVExCIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBIVUdFVExCYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIGEgcHJldHR5IHNvbGlkIG9uZSwgaXMgdG8gY2hlY2sgdGhlIGNvcmUgZmlsZXN5c3RlbSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBmaWxlcy4gSSdsbCBzdGFydCB3aXRoIGBmcy9LY29uZmlnYCDigJMgaXQncyB0aGUgZ2VuZXJhbCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24sIHNvIGl0J3MgYSBsaWtlbHkgY2FuZGlkYXRlLiBJZiBpdCdzIG5vdCB0aGVyZSwgSSdsbCBkcmlsbCBkb3duIGEgYml0IGRlZXBlciBpbnRvIGBmcy9odWdldGxiZnMvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5OyB0aGF0IHdvdWxkIG1ha2UgcGVyZmVjdCBzZW5zZSBzaW5jZSBpdCdzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gaHVnZSBwYWdlcy4gRmFpbGluZyB0aGF0LCBJJ2xsIGdvIHN0cmFpZ2h0IHRvIGBtbS9LY29uZmlnYC4gVGhhdCdzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGFuZCBodWdlIHBhZ2VzIGFyZSwgd2VsbCwgaHVnZSBwYWdlcyEgSXQncyBwcmFjdGljYWxseSBndWFyYW50ZWVkIHRvIGJlIGluIG9uZSBvZiB0aG9zZSB0aHJlZSBsb2NhdGlvbnMuIExldCdzIGdldCB0byB3b3JrIGFuZCBmaW5kIHRoZSBzb3VyY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNjgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMjowNC44ODI4OTU2MzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjA0NzAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI0OS1cXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjUxLVxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuZnMvS2NvbmZpZy0yNjQtXFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNzItXFxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWctMjc0LVxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNzYtXFxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZnMvS2NvbmZpZy0yNzgtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuLS1cXG5mcy9LY29uZmlnLTI4Mi1cXG5mcy9LY29uZmlnOjI4Mzpjb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxuZnMvS2NvbmZpZy0yODQtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjIyOjA1LjA1ODk1MTQwNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTU4MzEyNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBIdWdlIFBhZ2VzIENvbmZpZ3VyYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvbmZpZyB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBIdWdlVExCRlMgYW5kIHRoZSBgSFVHRVRMQl9QQUdFYCBvcHRpb24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYEhVR0VUTEJGU2AgaXMgYWN0dWFsbHkgZW5hYmxlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIGFyZSBib3RoIGVuYWJsZWQsIGFuZCBmaW5kIHdoZXJlIHRoZXkgYXJlIHNldC4gTGV0J3Mgc2VlLi4uIEknbGwganVtcCBpbnRvIGBmcy9LY29uZmlnYCB0byBjb25maXJtIHRoZSBzZXR0aW5ncy4gQWhhISBMb29rcyBsaWtlIHRoZXJlJ3MgYSBgbWVudWNvbmZpZyBIVUdFVExCRlNgIGFuZCBhIGBjb25maWcgSFVHRVRMQl9QQUdFYCBlbnRyeSwgd2l0aCBgSFVHRVRMQl9QQUdFYCBzZXQgYXMgYSBgZGVmX2Jvb2xgIGJhc2VkIG9uIGBIVUdFVExCRlNgLiBUaGlzIGNvbmZpcm1zIHRoZXkncmUgaW50ZXJ0d2luZWQuIEluIG90aGVyIHdvcmRzLCBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGBIVUdFVExCRlNgIGlzIHNldCBpbiB0aGUgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBhdmFpbGFiaWxpdHkgb2YgaHVnZSBwYWdlcy5cblxuTm93LCBhIGNyaXRpY2FsIG5leHQgc3RlcCBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBzZXR0aW5ncyBhcmUgYWN0dWFsbHkgKnVzZWQqLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZXNlIGNvbmZpZyBvcHRpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2Agd2lsbCBiZSBpbmZvcm1hdGl2ZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHBpY3R1cmUgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBodWdlIHBhZ2VzIHdoZW4gdGhlc2Ugb3B0aW9ucyBhcmUgYm90aCBzZXQuIEknbGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbiwgYXMgdGhhdCB3aWxsIGxldCBtZSB1bmRlcnN0YW5kIHdoZXJlIHRoZSBodWdlIHBhZ2UgYWxsb2NhdGlvbiBsb2dpYyBpcyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBtZSB3b3JrIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBlaXRoZXIgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjU1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MDcuNjE3MjY4MzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDQ0MDE1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTAyPWNyZWF0ZWQgKHNobWdldChTSE1fSFVHRVRMQikpIG9yIGEgbWFwcGluZyBpcyBjcmVhdGVkIHZpYSBtbWFwKE1BUF9IVUdFVExCKS5cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjEwMzpUaGVzZSBvcGVyYXRpb25zIHJlc3VsdCBpbiBhIGNhbGwgdG8gdGhlIHJvdXRpbmUgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCk6OlxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTA0LVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTA1OlxcdGludCBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTEwNi1cXHRcXHRcXHRcXHQgIGxvbmcgZnJvbSwgbG9uZyB0byxcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTA5LVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTEwOlRoZSBmaXJzdCB0aGluZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoKSBkb2VzIGlzIGNoZWNrIGlmIHRoZSBOT1JFU0VSVkVcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTExMS1mbGFnIHdhcyBzcGVjaWZpZWQgaW4gZWl0aGVyIHRoZSBzaG1nZXQoKSBvciBtbWFwKCkgY2FsbC4gIElmIE5PUkVTRVJWRVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xMjI9aW4gd2hpY2ggcmVzZXJ2YXRpb25zIGFyZSByZXByZXNlbnRlZCBpbiB0aGUgcmVzZXJ2YXRpb24gbWFwLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMzItXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxMzM6Rm9yIHByaXZhdGUgbWFwcGluZ3MsIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpIGNyZWF0ZXMgdGhlIHJlc2VydmF0aW9uIG1hcCBhbmRcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTEzNC1oYW5ncyBpdCBvZmYgdGhlIFZNQSBzdHJ1Y3R1cmUuICBJbiBhZGRpdGlvbiwgdGhlIEhQQUdFX1JFU1ZfT1dORVIgZmxhZyBpcyBzZXRcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTY5PWVudHJ5IGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cy5cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE3MC1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE3MTpJZiBodWdldGxiX3Jlc2VydmVfcGFnZXMoKSB3YXMgc3VjY2Vzc2Z1bCwgdGhlIGdsb2JhbCByZXNlcnZhdGlvbiBjb3VudCBhbmRcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE3Mi1yZXNlcnZhdGlvbiBtYXAgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYXBwaW5nIHdpbGwgYmUgbW9kaWZpZWQgYXMgcmVxdWlyZWQgdG9cXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MjQ5PWNhbGwgdG8gdm1hX2NvbW1pdF9yZXNlcnZhdGlvbigpIGFmdGVyIHRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkLiAgVGhpcyB3b3VsZFxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjUwOmJlIHBvc3NpYmxlIGlmIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyB3YXMgY2FsbGVkIGZvciB0aGUgc2FtZSBwYWdlIGluIGEgc2hhcmVkXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yNTEtbWFwcGluZy4gIEluIHN1Y2ggY2FzZXMsIHRoZSByZXNlcnZhdGlvbiBjb3VudCBhbmQgc3VicG9vbCBmcmVlIHBhZ2UgY291bnRcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTcyPVBhZ2UgRmxhZ3NcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTkzLeW9k+WIm+W7uuS4gOS4quW3qOWkp+eahOaciemhtemdouaUr+aMgeeahOWFseS6q+WGheWtmOaute+8iHNobWdldChTSE1fSFVHRVRMQinvvInmiJbpgJrov4dtbWFwKE1BUF9IVUdFVExCKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0Ojk0OuWIm+W7uuS4gOS4quaYoOWwhOaXtu+8jOWwseS8muWIm+W7uumihOeVmeOAgui/meS6m+aTjeS9nOS8muWvvOiHtOWvueWHveaVsGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygp55qE6LCD55SoOjpcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC05NS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo5NjpcXHRpbnQgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtOTctXFx0XFx0XFx0XFx0ICBsb25nIGZyb20sIGxvbmcgdG8sXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMDAtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTAxOmh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygp5YGa55qE56ys5LiA5Lu25LqL5piv5qOA5p+l5Zyo6LCD55Soc2htZ2V0KCnmiJZtbWFwKCnml7bmmK/lkKbmjIflrprkuoZOT1JFU0VSVkVcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMDIt5qCH5b+X44CC5aaC5p6c5oyH5a6a5LqGTk9SRVNFUlZF77yM6YKj5LmI6L+Z5Liq5Ye95pWw56uL5Y2z6L+U5Zue77yM5Zug5Li65LiN6ZyA6KaB6aKE55WZ44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xMDg9UFJJVkFUReWSjFNIQVJFROaYoOWwhOS5i+mXtOeahOS4gOS4quW+iOWkp+eahOWMuuWIq+aYr+mihOeVmeWcqOmihOeVmeaYoOWwhOS4reeahOihqOekuuaWueW8j+OAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTE0LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjExNTrlr7nkuo7np4HmnInmmKDlsITvvIxodWdldGxiX3Jlc2VydmVfcGFnZXMoKeWIm+W7uumihOeVmeaYoOWwhOW5tuWwhuWFtuaMguWcqFZNQee7k+aehOS9k+S4iuOAguatpOWklu+8jFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTExNi1IUEFHRV9SRVNWX09XTkVS5qCH5b+X6KKr6K6+572u77yM5Lul6KGo5piO6K+lVk1B5oul5pyJ6aKE55WZ44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMzktXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTQwOuWmguaenGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygp5oiQ5Yqf77yM5YWo5bGA6aKE55WZ5pWw5ZKM5LiO5pig5bCE55u45YWz55qE6aKE55WZ5pig5bCE5bCG5qC55o2u6ZyA6KaB6KKr5L+u5pS577yM5Lul56Gu5L+dXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTQxLeWcqCdmcm9tJy0ndG8n6IyD5Zu05YaF5a2Y5Zyo6aKE55WZ44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xOTM9U2V0UGFnZVByaXZhdGUocGFnZSnlkoxyZXN2X2h1Z2VfcGFnZXMt44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDMt5ZyoYWxsb2NfaHVnZXRsYl9mb2xpbygp5byA5aeL6LCD55Sodm1hX25lZWRzX3Jlc2VydmF0aW9uKCnlkozpobXpnaLliIbphY3lkI7osIPnlKhcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyMDQ6dm1hX2NvbW1pdF9yZXNlcnZhdGlvbigp5LmL6Ze077yM6aKE55WZ5pig5bCE5pyJ5Y+v6IO96KKr5pS55Y+Y44CC5aaC5p6caHVnZXRsYl9yZXNlcnZlX3BhZ2Vz5Zyo5YWxXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjA1LeS6q+aYoOWwhOS4reS4uuWQjOS4gOmhtemdouiiq+iwg+eUqO+8jOi/meWwhuaYr+WPr+iDveeahOOAguWcqOi/meenjeaDheWGteS4i++8jOmihOeVmeiuoeaVsOWSjOWtkOaxoOepuumXsumhteiuoeaVsOS8muacieS4gOS4quWBj+W3ruOAglxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9OTk9c3RhdGljIGludCBodWdldGxiZnNfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1Mi1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTM6XFx0aWYgKGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTQtXFx0XFx0XFx0XFx0dm1hLVxcdTAwM2V2bV9wZ29mZiBcXHUwMDNlXFx1MDAzZSBodWdlX3BhZ2Vfb3JkZXIoaCksXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xNDg0PXN0YXRpYyBpbnQgZ2V0X2hzdGF0ZV9pZHgoaW50IHBhZ2Vfc2l6ZV9sb2cpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDk0LSAqIE5vdGUgdGhhdCBzaXplIHNob3VsZCBiZSBhbGlnbmVkIHRvIHByb3BlciBodWdlcGFnZSBzaXplIGluIGNhbGxlciBzaWRlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0OTU6ICogb3RoZXJ3aXNlIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyByZXNlcnZlcyBvbmUgbGVzcyBodWdlcGFnZXMgdGhhbiBpbnRlbmRlZC5cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDk2LSAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTE0OTc9c3RydWN0IGZpbGUgKmh1Z2V0bGJfZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MzYtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTUzNzpcXHRpZiAoaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKGlub2RlLCAwLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MzgtXFx0XFx0XFx0c2l6ZSBcXHUwMDNlXFx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaHN0YXRlX2lub2RlKGlub2RlKSksIE5VTEwsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xNDQ9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTE1MC0jZW5kaWYgLyogQ09ORklHX1VTRVJGQVVMVEZEICovXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTUxOmxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgZnJvbSwgbG9uZyB0byxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xNTItXFx0XFx0XFx0ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuLS1cXG5tbS9odWdldGxiLmM9MjkzOT1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMzA0MC1cXHRcXHQgKiB2bWFfbmVlZHNfcmVzZXJ2YXRpb24gYW5kIHZtYV9jb21taXRfcmVzZXJ2YXRpb24uXFxubW0vaHVnZXRsYi5jOjMwNDE6XFx0XFx0ICogVGhpcyBpbmRpY2F0ZXMgYSByYWNlIHdpdGggaHVnZXRsYl9yZXNlcnZlX3BhZ2VzLlxcbm1tL2h1Z2V0bGIuYy0zMDQyLVxcdFxcdCAqIEFkanVzdCBmb3IgdGhlIHN1YnBvb2wgY291bnQgaW5jcmVtZW50ZWQgYWJvdmUgQU5EXFxubW0vaHVnZXRsYi5jOjMwNDM6XFx0XFx0ICogaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIGZvciB0aGUgc2FtZSBwYWdlLlxcdEFsc28sXFxubW0vaHVnZXRsYi5jOjMwNDQ6XFx0XFx0ICogdGhlIHJlc2VydmF0aW9uIGNvdW50IGFkZGVkIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1xcbm1tL2h1Z2V0bGIuYy0zMDQ1LVxcdFxcdCAqIG5vIGxvbmdlciBhcHBsaWVzLlxcbi0tXFxubW0vaHVnZXRsYi5jPTY0ODM9bG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY2NTgtXFxubW0vaHVnZXRsYi5jOjY2NTk6bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG5tbS9odWdldGxiLmMtNjY2MC1cXHRcXHRsb25nIGZyb20sIGxvbmcgdG8sXFxuLS1cXG5tbS9odWdldGxiLmMtNjY5OS1cXHRcXHQvKlxcbm1tL2h1Z2V0bGIuYzo2NzAwOlxcdFxcdCAqIHJlc3ZfbWFwIGNhbiBub3QgYmUgTlVMTCBhcyBodWdldGxiX3Jlc2VydmVfcGFnZXMgaXMgb25seVxcbm1tL2h1Z2V0bGIuYy02NzAxLVxcdFxcdCAqIGNhbGxlZCBmb3IgaW5vZGVzIGZvciB3aGljaCByZXN2X21hcHMgd2VyZSBjcmVhdGVkIChzZWVcXG4tLVxcbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbi0tXFxubW0vbWVtZmQuYy04OS1cXG5tbS9tZW1mZC5jOjkwOlxcdFxcdG5yX3Jlc3YgPSBodWdldGxiX3Jlc2VydmVfcGFnZXMoaW5vZGUsIGlkeCwgaWR4ICsgMSwgTlVMTCwgRU1QVFlfVk1BX0ZMQUdTKTtcXG5tbS9tZW1mZC5jLTkxLVxcdFxcdGlmIChucl9yZXN2IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MTAuMjIxNjc5MTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODgxMDkwNzM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgSHVnZXRsYiBSZXNlcnZlIFBhZ2VzIEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBidWc6IGl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgdnVsbmVyYWJpbGl0eSB3aXRoaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgaW4gYG1tL2h1Z2V0bGIuY2AuIFRoZSByb290IGNhdXNlIHN0ZW1zIGZyb20gYW4gaW5jb3JyZWN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgZHVyaW5nIGVycm9yIHJlY292ZXJ5LCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggYGh1Z2VwYWdlX3N1YnBvb2xgIHN0cnVjdHVyZXMuIExvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZSBoYWQgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBwb3RlbnRpYWxseSBmcmVlaW5nIHRoZSBgc3Bvb2xgIHN0cnVjdHVyZSAoaWYgaXRzIGNvdW50IGFuZCB1c2VkIHBhZ2VzIHJlYWNoZWQgemVybykgKmJlZm9yZSogdGhlIGNvZGUgcmVzdG9yZWQgdGhlIGB1c2VkX2hwYWdlc2AgdmFsdWUgb2YgdGhlIGBzcG9vbGAuIFRoaXMgbWVhbnMgdGhhdCBhZnRlcndhcmRzLCB3ZSB3ZXJlIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgaW4gYHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtgIGFuZCB0aGVuIGBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtgIHdoaWNoIGxlYWRzIHRvIGEgdXNlIGFmdGVyIGZyZWUgYnVnLiBUaGUgZml4IGludm9sdmVzIHNpbXBseSByZW9yZGVyaW5nIHRoZSBvcGVyYXRpb25zIHRvIGNvcnJlY3RseSByZXN0b3JlIGBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlc2AgKmJlZm9yZSogcG90ZW50aWFsbHkgZnJlZWluZyB0aGUgYHNwb29sYCwgYXZvaWRpbmcgdGhlIFVBRiBjb25kaXRpb24uXG5cblRoZSByZWFjaCBpcyBzaWduaWZpY2FudC4gVGhpcyBwYXRjaCBpcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9odWdldGxiLmNgLiAgVGhpcyBhcmVhIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBzeXN0ZW0gY2FsbHMgbGlrZSBgbW1hcChNQVBfSFVHRVRMQilgLCBgc2htZ2V0KFNITV9IVUdFVExCKWAsIGBtZW1mZF9jcmVhdGUoTUZEX0hVR0VUTEIpYCwgYW5kIG9wZXJhdGlvbnMgd2l0aCB0aGUgYGh1Z2V0bGJmc2AgZmlsZSBzeXN0ZW0uICBJdCBpcyB3b3J0aCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHBvaW50cyBmb3IgZnV6emluZyBhcmUgZ29pbmcgdG8gYmUgb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgYnVnLCBhbmQgdGhlaXIgcmVsYXRlZCBmdW5jdGlvbnMsIHNvOiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCwgYGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzYCwgYW5kIGBodWdldGxiZnNfZmlsZV9tbWFwYC5cblxuSSd2ZSBjaGVja2VkIHRoZSBzeW1ib2wgdmlzaWJpbGl0eS4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgaXMgYSBnbG9iYWwsIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGdvb2QgZm9yIGZ1enppbmcuIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AgaXMgc3RhdGljIGJ1dCBzdGlsbCByZWFjaGFibGUgYmVjYXVzZSBpdCBpcyBjYWxsZWQgaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AuXG5cblRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBhbHNvIHN0cmFpZ2h0Zm9yd2FyZC4gV2UnbGwgbmVlZCBgSFVHRVRMQkZTYCBhbmQgYEhVR0VUTEJfUEFHRWAuIEl0IGxvb2tzIGxpa2UgYEhVR0VUTEJfUEFHRWAgaXMgc2VsZWN0ZWQgYnkgYEhVR0VUTEJGU2AgaW4gdGhlIEtjb25maWcuXG5cbkluIHN1bW1hcnksIHRoaXMgaXMgYSBwcm9taXNpbmcgdGFyZ2V0LiBUaGUgZml4IHByZXZlbnRzIGEgVUFGIHZ1bG5lcmFiaWxpdHkgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBlYXNpbHkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzeXN0ZW0gY2FsbHMgYW5kIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMuXG5cbldvcnRoRnV6emluZzogVHJ1ZVxuUmVhc29uaW5nOiBUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCB0byBwcmV2ZW50IFVBRiBvbiB0aGUgYGh1Z2VwYWdlX3N1YnBvb2xgIHN0cnVjdHVyZS4gSXQncyBpbiByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIGBtbS9odWdldGxiLmNgLCBhbmQgY2FuIGJlIGV4ZXJjaXNlZCB0aHJvdWdoIGBodWdldGxiZnNgLCBgbW1hcGAsIGBtZW1mZF9jcmVhdGVgLCBvciBgc2htZ2V0YC5cblxuRm9jdXNTeW1ib2xzOiBgW1wiaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXCIsIFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNcIiwgXCJodWdldGxiX3VucmVzZXJ2ZV9wYWdlc1wiLCBcImh1Z2V0bGJmc19maWxlX21tYXBcIl1gXG5FbmFibGVDb25maWdzOiBgW1wiSFVHRVRMQkZTXCIsIFwiSFVHRVRMQl9QQUdFXCJdYFxuXG5BbHJpZ2h0LCBzZWVtcyBwcmV0dHkgc29saWQuIExldCdzIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTA1LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MTkuMDMyNTg5ODQ4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMDUxNTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNcIixcbiAgICBcImh1Z2V0bGJmc19maWxlX21tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgdGVhcmRvd24gb3JkZXJpbmcgaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCkgaW4gbW0vaHVnZXRsYi5jIHRvIHJlc3RvcmUgdXNlZF9ocGFnZXMgYmVmb3JlIHB1dHRpbmcgc3VicG9vbCByZXNlcnZhdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBleGVyY2lzZWQgd2hlbiBodWdldGxiIHJlc2VydmF0aW9ucyBmYWlsIG9yIHJhY2UgZHVyaW5nIG1tYXAsIG1lbWZkX2NyZWF0ZSwgb3Igc2htZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXCIsXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc1wiLFxuICAgIFwiaHVnZXRsYmZzX2ZpbGVfbW1hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyB0ZWFyZG93biBvcmRlcmluZyBpbiBodWdldGxiX3Jlc2VydmVfcGFnZXMoKSBpbiBtbS9odWdldGxiLmMgdG8gcmVzdG9yZSB1c2VkX2hwYWdlcyBiZWZvcmUgcHV0dGluZyBzdWJwb29sIHJlc2VydmF0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGV4ZXJjaXNlZCB3aGVuIGh1Z2V0bGIgcmVzZXJ2YXRpb25zIGZhaWwgb3IgcmFjZSBkdXJpbmcgbW1hcCwgbWVtZmRfY3JlYXRlLCBvciBzaG1nZXQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjIyOjE5LjE4NTY1MzI2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NTI4NTgwMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMjoxOS4xODYyMjQ2MTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMTU1MjI4MDg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVvcmRlcnMgZXJyb3ItcGF0aCBjbGVhbnVwcyBpbiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIHRvIHByZXZlbnQgYSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSAvIGRvdWJsZS1mcmVlIGNvbmRpdGlvbiB3aGVyZSBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoKWAgY291bGQgcmVsZWFzZSBhbmQgZnJlZSBgc3Bvb2xgIHZpYSBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbCgpYCwgZm9sbG93ZWQgYnkgYSBzdWJzZXF1ZW50IGFjY2VzcyB0byBgc3Bvb2xgIGluIHRoZSBgaWYgKGdibF9yZXNlcnZlIFxcdTAwMjZcXHUwMDI2IHNwb29sKWAgYmxvY2suXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljLiBUaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCBpcyBhIG1lbW9yeSBsaWZldGltZSAvIFVBRiBpc3N1ZSwgd2hpY2ggaXMgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjgyZDU0OGVlNWJlODYxYjUxZjJlNmQ2NTY3N2IwNWJlNTE3ZGFhY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTg6MjE6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDc4NTc3Mjg0NTc5NTIuLjNlM2NkYTE4MWU3MjQgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTY4MDgsMTUgKzY4MDgsNiBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFxuIG91dF9wdXRfcGFnZXM6XG4gXHRzcG9vbF9yZXN2ID0gY2hnIC0gZ2JsX3Jlc2VydmU7XG4tXHRpZiAoc3Bvb2xfcmVzdikge1xuLVx0XHQvKiBwdXQgc3ViIHBvb2wncyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqL1xuLVx0XHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTtcbi1cdFx0Lypcbi1cdFx0ICogc3VicG9vbCdzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsXG4tXHRcdCAqIHJldHVybiB0byBoc3RhdGUuXG4tXHRcdCAqL1xuLVx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XG4tXHR9XG4gXHQvKiBSZXN0b3JlIHVzZWRfaHBhZ2VzIGZvciBwYWdlcyB0aGF0IGZhaWxlZCBnbG9iYWwgcmVzZXJ2YXRpb24gKi9cbiBcdGlmIChnYmxfcmVzZXJ2ZSBcdTAwMjZcdTAwMjYgc3Bvb2wpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbkBAIC02ODI2LDYgKzY4MTcsMTUgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcbiBcdFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuIFx0fVxuK1x0aWYgKHNwb29sX3Jlc3YpIHtcbitcdFx0LyogcHV0IHN1YiBwb29sJ3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cbitcdFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XG4rXHRcdC8qXG4rXHRcdCAqIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxuK1x0XHQgKiByZXR1cm4gdG8gaHN0YXRlLlxuK1x0XHQgKi9cbitcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xuK1x0fVxuIG91dF91bmNoYXJnZV9jZ3JvdXA6XG4gXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXG4gXHRcdFx0XHRcdCAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjIyOjE5LjE4NjIyNTg3NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDk3NDM4ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggYW5kIFN1cnJvdW5kaW5ncyBpbiBtbS9odWdldGxiLmMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoaXMgcHJvcG9zZWQgcGF0Y2ggYW5kIGl0cyBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgdGhvcm91Z2ggY29kZSBhbmFseXNpcyB1c2luZyBteSBwcmVmZXJyZWQgdG9vbHMuIEkgd2FudCB0byBzZWUgdGhlIGNvbXBsZXRlIGNvbnRleHQsIG5vdCBqdXN0IHRoZSBpc29sYXRlZCBjaGFuZ2VzLCBzbyBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGNsb3NlIGluc3BlY3Rpb24gb2YgYG1tL2h1Z2V0bGIuY2AgYXJvdW5kIGxpbmUgNjgwOC4gVGhpcyBzcGVjaWZpYyBsb2NhdGlvbiBpcyBvYnZpb3VzbHkgY2VudHJhbCB0byB0aGUgcGF0Y2ggYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGltbWVkaWF0ZSBlbnZpcm9ubWVudCB3aWxsIGJlIGVzc2VudGlhbC4gVGhpcyB3aWxsIGludm9sdmUgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb25zIG9mIHRoZSBtb2RpZmllZCBjb2RlIHdpdGggdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MjMuMjgzNjY3NTU0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjc4MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjc4MDpcXHRcXHRcXHRcXHQgKiBpbmRpY2F0ZXMgYSByYWNlIHdpdGggYWxsb2NfaHVnZXRsYl9mb2xpby4gIEFkanVzdFxcbjY3ODE6XFx0XFx0XFx0XFx0ICogdGhlIHN1YnBvb2wgYW5kIHJlc2VydmUgY291bnRzIG1vZGlmaWVkIGFib3ZlXFxuNjc4MjpcXHRcXHRcXHRcXHQgKiBiYXNlZCBvbiB0aGUgZGlmZmVyZW5jZS5cXG42NzgzOlxcdFxcdFxcdFxcdCAqL1xcbjY3ODQ6XFx0XFx0XFx0XFx0bG9uZyByc3ZfYWRqdXN0O1xcbjY3ODU6XFx0XFxuNjc4NjpcXHRcXHRcXHRcXHQvKlxcbjY3ODc6XFx0XFx0XFx0XFx0ICogaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoKSB3aWxsIHB1dCB0aGVcXG42Nzg4OlxcdFxcdFxcdFxcdCAqIHJlZmVyZW5jZSB0byBoX2NnLVxcdTAwM2Vjc3MuIFNlZSBjb21tZW50IGJlbG93IGZvciBkZXRhaWwuXFxuNjc4OTpcXHRcXHRcXHRcXHQgKi9cXG42NzkwOlxcdFxcdFxcdFxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKFxcbjY3OTE6XFx0XFx0XFx0XFx0XFx0aHN0YXRlX2luZGV4KGgpLFxcbjY3OTI6XFx0XFx0XFx0XFx0XFx0KGNoZyAtIGFkZCkgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcXG42NzkzOlxcdFxcbjY3OTQ6XFx0XFx0XFx0XFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLFxcbjY3OTU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2hnIC0gYWRkKTtcXG42Nzk2OlxcdFxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xcbjY3OTc6XFx0XFx0XFx0fSBlbHNlIGlmIChoX2NnKSB7XFxuNjc5ODpcXHRcXHRcXHRcXHQvKlxcbjY3OTk6XFx0XFx0XFx0XFx0ICogVGhlIGZpbGVfcmVnaW9ucyB3aWxsIGhvbGQgdGhlaXIgb3duIHJlZmVyZW5jZSB0b1xcbjY4MDA6XFx0XFx0XFx0XFx0ICogaF9jZy1cXHUwMDNlY3NzLiBTbyB3ZSBzaG91bGQgcmVsZWFzZSB0aGUgcmVmZXJlbmNlIGhlbGRcXG42ODAxOlxcdFxcdFxcdFxcdCAqIHZpYSBodWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwX3JzdmQoKSB3aGVuIHdlIGFyZVxcbjY4MDI6XFx0XFx0XFx0XFx0ICogZG9uZS5cXG42ODAzOlxcdFxcdFxcdFxcdCAqL1xcbjY4MDQ6XFx0XFx0XFx0XFx0aHVnZXRsYl9jZ3JvdXBfcHV0X3JzdmRfY2dyb3VwKGhfY2cpO1xcbjY4MDU6XFx0XFx0XFx0fVxcbjY4MDY6XFx0XFx0fVxcbjY4MDc6XFx0XFx0cmV0dXJuIGNoZztcXG42ODA4OlxcdFxcbjY4MDk6XFx0b3V0X3B1dF9wYWdlczpcXG42ODEwOlxcdFxcdHNwb29sX3Jlc3YgPSBjaGcgLSBnYmxfcmVzZXJ2ZTtcXG42ODExOlxcdFxcdC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL1xcbjY4MTI6XFx0XFx0aWYgKGdibF9yZXNlcnZlIFxcdTAwMjZcXHUwMDI2IHNwb29sKSB7XFxuNjgxMzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjY4MTQ6XFx0XFxuNjgxNTpcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG42ODE2OlxcdFxcdFxcdGlmIChzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcXG42ODE3OlxcdFxcdFxcdFxcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcXG42ODE4OlxcdFxcdFxcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcXG42ODE5OlxcdFxcdH1cXG42ODIwOlxcdFxcdGlmIChzcG9vbF9yZXN2KSB7XFxuNjgyMTpcXHRcXHRcXHQvKiBwdXQgc3ViIHBvb2wncyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqL1xcbjY4MjI6XFx0XFx0XFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XFxuNjgyMzpcXHRcXHRcXHQvKlxcbjY4MjQ6XFx0XFx0XFx0ICogc3VicG9vbCdzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsXFxuNjgyNTpcXHRcXHRcXHQgKiByZXR1cm4gdG8gaHN0YXRlLlxcbjY4MjY6XFx0XFx0XFx0ICovXFxuNjgyNzpcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XFxuNjgyODpcXHRcXHR9XFxuNjgyOTpcXHRvdXRfdW5jaGFyZ2VfY2dyb3VwOlxcbjY4MzA6XFx0XFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoaHN0YXRlX2luZGV4KGgpLFxcbjY4MzE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xcbjY4MzI6XFx0b3V0X2VycjpcXG42ODMzOlxcdFxcdGh1Z2V0bGJfdm1hX2xvY2tfZnJlZSh2bWEpO1xcbjY4MzQ6XFx0XFx0aWYgKCF2bWEgfHwgdm1hX3Rlc3Qodm1hLCBWTUFfTUFZU0hBUkVfQklUKSlcXG42ODM1OlxcdFxcdFxcdC8qIE9ubHkgY2FsbCByZWdpb25fYWJvcnQgaWYgdGhlIHJlZ2lvbl9jaGcgc3VjY2VlZGVkIGJ1dCB0aGVcXG42ODM2OlxcdFxcdFxcdCAqIHJlZ2lvbl9hZGQgZmFpbGVkIG9yIGRpZG4ndCBydW4uXFxuNjgzNzpcXHRcXHRcXHQgKi9cXG42ODM4OlxcdFxcdFxcdGlmIChjaGcgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBhZGQgXFx1MDAzYyAwKVxcbjY4Mzk6XFx0XFx0XFx0XFx0cmVnaW9uX2Fib3J0KHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQpO1xcbjY4NDA6XFx0XFx0aWYgKHZtYSBcXHUwMDI2XFx1MDAyNiBpc192bWFfcmVzdl9zZXQodm1hLCBIUEFHRV9SRVNWX09XTkVSKSkge1xcbjY4NDE6XFx0XFx0XFx0a3JlZl9wdXQoXFx1MDAyNnJlc3ZfbWFwLVxcdTAwM2VyZWZzLCByZXN2X21hcF9yZWxlYXNlKTtcXG42ODQyOlxcdFxcdFxcdHNldF92bWFfcmVzdl9tYXAodm1hLCBOVUxMKTtcXG42ODQzOlxcdFxcdH1cXG42ODQ0OlxcdFxcdHJldHVybiBlcnI7XFxuNjg0NTpcXHR9XFxuNjg0NjpcXHRcXG42ODQ3OlxcdGxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXFxuNjg0ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRsb25nIGZyZWVkKVxcbjY4NDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMjoyMy4yODQwODA5OTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0Nzg0MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHNlZW4gc25pcHBldHMgb2YgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgYW5kIG5vdyBJIG5lZWQgdG8gZmxlc2ggb3V0IGV4YWN0bHkgaG93IHRoaXMgcm91dGluZSB3b3Jrcy4gR2l2ZW4gdGhlIG5hbWUsIEknbSBleHBlY3RpbmcgdGhpcyBpcyB0aGUgY2VudHJhbCBsb2dpYyBmb3IgYWN0dWFsbHkgY2xhaW1pbmcgaHVnZXBhZ2VzIGZvciBhIHVzZXIsIG9yIGEgcHJvY2Vzcy4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgY29udHJvbCBmbG93IGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbiwgYWNjb3VudGluZywgYW5kIG1heWJlIGV2ZW4gTlVNQSBjb25zaWRlcmF0aW9ucy4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24gaXQgdXNlcywgdGhlIGVycm9yIGhhbmRsaW5nLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggcmVzb3VyY2UgZXhoYXVzdGlvbi4gSSdsbCBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gd2hlcmUgaXQgbWlnaHQgdG91Y2ggdGhlIGdsb2JhbCBwYWdlIHRhYmxlcywgYW5kIGhvdyB0aGUgcmVzZXJ2YXRpb25zIGNhc2NhZGUgKG9yIGRvbid0KSBhY3Jvc3MgZGlmZmVyZW50IHByb2Nlc3NlcyBvciBjb250ZXh0cy4gSSdtIGFsc28gYW50aWNpcGF0aW5nIGNoZWNraW5nIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgZXZhbHVhdGluZyB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIG9uIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlIHdoZW4gcnVubmluZyB0aGlzIGZ1bmN0aW9uIGluIHBhcmFsbGVsLCBmb3IgaW5zdGFuY2UuIEknbSBob3BpbmcgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGVudGlyZSByZXNlcnZlIGFuZCByZWxlYXNlIGxpZmVjeWNsZSB0byBhbnRpY2lwYXRlIGFueSBwb3NzaWJsZSBlZGdlIGNhc2VzLCBhbmQgYXJlYXMgdG8gcG90ZW50aWFsbHkgb3B0aW1pemUuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgxNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MjUuNzMxOTI1ODc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzQzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjcyMCxcbiAgXCJMaW5lQ291bnRcIjogNjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjcyMDpcXHRcXG42NzIxOlxcdFxcdGlmIChjaGcgXFx1MDAzYyAwKSB7XFxuNjcyMjpcXHRcXHRcXHQvKiByZWdpb25fY2hnKCkgYWJvdmUgY2FuIHJldHVybiAtRU5PTUVNICovXFxuNjcyMzpcXHRcXHRcXHRlcnIgPSAoY2hnID09IC1FTk9NRU0pID8gLUVOT01FTSA6IC1FSU5WQUw7XFxuNjcyNDpcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuNjcyNTpcXHRcXHR9XFxuNjcyNjpcXHRcXG42NzI3OlxcdFxcdGVyciA9IGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXFxuNjcyODpcXHRcXHRcXHRcXHRcXHRjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBcXHUwMDI2aF9jZyk7XFxuNjcyOTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG42NzMwOlxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG42NzMxOlxcdFxcbjY3MzI6XFx0XFx0aWYgKHZtYSBcXHUwMDI2XFx1MDAyNiAhdm1hX3Rlc3Qodm1hLCBWTUFfTUFZU0hBUkVfQklUKSBcXHUwMDI2XFx1MDAyNiBoX2NnKSB7XFxuNjczMzpcXHRcXHRcXHQvKiBGb3IgcHJpdmF0ZSBtYXBwaW5ncywgdGhlIGh1Z2V0bGJfY2dyb3VwIHVuY2hhcmdlIGluZm8gaGFuZ3NcXG42NzM0OlxcdFxcdFxcdCAqIG9mIHRoZSByZXN2X21hcC5cXG42NzM1OlxcdFxcdFxcdCAqL1xcbjY3MzY6XFx0XFx0XFx0cmVzdl9tYXBfc2V0X2h1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2luZm8ocmVzdl9tYXAsIGhfY2csIGgpO1xcbjY3Mzc6XFx0XFx0fVxcbjY3Mzg6XFx0XFxuNjczOTpcXHRcXHQvKlxcbjY3NDA6XFx0XFx0ICogVGhlcmUgbXVzdCBiZSBlbm91Z2ggcGFnZXMgaW4gdGhlIHN1YnBvb2wgZm9yIHRoZSBtYXBwaW5nLiBJZlxcbjY3NDE6XFx0XFx0ICogdGhlIHN1YnBvb2wgaGFzIGEgbWluaW11bSBzaXplLCB0aGVyZSBtYXkgYmUgc29tZSBnbG9iYWxcXG42NzQyOlxcdFxcdCAqIHJlc2VydmF0aW9ucyBhbHJlYWR5IGluIHBsYWNlIChnYmxfcmVzZXJ2ZSkuXFxuNjc0MzpcXHRcXHQgKi9cXG42NzQ0OlxcdFxcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7XFxuNjc0NTpcXHRcXHRpZiAoZ2JsX3Jlc2VydmUgXFx1MDAzYyAwKSB7XFxuNjc0NjpcXHRcXHRcXHRlcnIgPSBnYmxfcmVzZXJ2ZTtcXG42NzQ3OlxcdFxcdFxcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcXG42NzQ4OlxcdFxcdH1cXG42NzQ5OlxcdFxcbjY3NTA6XFx0XFx0LypcXG42NzUxOlxcdFxcdCAqIENoZWNrIGVub3VnaCBodWdlcGFnZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIHJlc2VydmF0aW9uLlxcbjY3NTI6XFx0XFx0ICogSGFuZCB0aGUgcGFnZXMgYmFjayB0byB0aGUgc3VicG9vbCBpZiB0aGVyZSBhcmUgbm90XFxuNjc1MzpcXHRcXHQgKi9cXG42NzU0OlxcdFxcdGVyciA9IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc2VydmUpO1xcbjY3NTU6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuNjc1NjpcXHRcXHRcXHRnb3RvIG91dF9wdXRfcGFnZXM7XFxuNjc1NzpcXHRcXG42NzU4OlxcdFxcdC8qXFxuNjc1OTpcXHRcXHQgKiBBY2NvdW50IGZvciB0aGUgcmVzZXJ2YXRpb25zIG1hZGUuIFNoYXJlZCBtYXBwaW5ncyByZWNvcmQgcmVnaW9uc1xcbjY3NjA6XFx0XFx0ICogdGhhdCBoYXZlIHJlc2VydmF0aW9ucyBhcyB0aGV5IGFyZSBzaGFyZWQgYnkgbXVsdGlwbGUgVk1Bcy5cXG42NzYxOlxcdFxcdCAqIFdoZW4gdGhlIGxhc3QgVk1BIGRpc2FwcGVhcnMsIHRoZSByZWdpb24gbWFwIHNheXMgaG93IG11Y2hcXG42NzYyOlxcdFxcdCAqIHRoZSByZXNlcnZhdGlvbiB3YXMgYW5kIHRoZSBwYWdlIGNhY2hlIHRlbGxzIGhvdyBtdWNoIG9mXFxuNjc2MzpcXHRcXHQgKiB0aGUgcmVzZXJ2YXRpb24gd2FzIGNvbnN1bWVkLiBQcml2YXRlIG1hcHBpbmdzIGFyZSBwZXItVk1BIGFuZFxcbjY3NjQ6XFx0XFx0ICogb25seSB0aGUgY29uc3VtZWQgcmVzZXJ2YXRpb25zIGFyZSB0cmFja2VkLiBXaGVuIHRoZSBWTUFcXG42NzY1OlxcdFxcdCAqIGRpc2FwcGVhcnMsIHRoZSBvcmlnaW5hbCByZXNlcnZhdGlvbiBpcyB0aGUgVk1BIHNpemUgYW5kIHRoZVxcbjY3NjY6XFx0XFx0ICogY29uc3VtZWQgcmVzZXJ2YXRpb25zIGFyZSBzdG9yZWQgaW4gdGhlIG1hcC4gSGVuY2UsIG5vdGhpbmdcXG42NzY3OlxcdFxcdCAqIGVsc2UgaGFzIHRvIGJlIGRvbmUgZm9yIHByaXZhdGUgbWFwcGluZ3MgaGVyZVxcbjY3Njg6XFx0XFx0ICovXFxuNjc2OTpcXHRcXHRpZiAoIXZtYSB8fCB2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKSB7XFxuNjc3MDpcXHRcXHRcXHRhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpO1xcbjY3NzE6XFx0XFxuNjc3MjpcXHRcXHRcXHRpZiAodW5saWtlbHkoYWRkIFxcdTAwM2MgMCkpIHtcXG42NzczOlxcdFxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcXG42Nzc0OlxcdFxcdFxcdFxcdGVyciA9IGFkZDtcXG42Nzc1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3B1dF9wYWdlcztcXG42Nzc2OlxcdFxcdFxcdH0gZWxzZSBpZiAodW5saWtlbHkoY2hnIFxcdTAwM2UgYWRkKSkge1xcbjY3Nzc6XFx0XFx0XFx0XFx0LypcXG42Nzc4OlxcdFxcdFxcdFxcdCAqIHBhZ2VzIGluIHRoaXMgcmFuZ2Ugd2VyZSBhZGRlZCB0byB0aGUgcmVzZXJ2ZVxcbjY3Nzk6XFx0XFx0XFx0XFx0ICogbWFwIGJldHdlZW4gcmVnaW9uX2NoZyBhbmQgcmVnaW9uX2FkZC4gIFRoaXNcXG42NzgwOlxcdFxcdFxcdFxcdCAqIGluZGljYXRlcyBhIHJhY2Ugd2l0aCBhbGxvY19odWdldGxiX2ZvbGlvLiAgQWRqdXN0XFxuNjc4MTpcXHRcXHRcXHRcXHQgKiB0aGUgc3VicG9vbCBhbmQgcmVzZXJ2ZSBjb3VudHMgbW9kaWZpZWQgYWJvdmVcXG42NzgyOlxcdFxcdFxcdFxcdCAqIGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlLlxcbjY3ODM6XFx0XFx0XFx0XFx0ICovXFxuNjc4NDpcXHRcXHRcXHRcXHRsb25nIHJzdl9hZGp1c3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjIyOjI1LjczMjU1NzE0NloiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjQwMDI3NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhpcyBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlIGFuZCBiZWhhdmlvci4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSB0cnVlIG11dGV4IHVubG9jaywgYSBwb3RlbnRpYWwgcmVsZWFzZSBiYWNrIHRvIGEgcmVzb3VyY2UgcG9vbCwgb3IgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBudWFuY2VkLiBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUg4oCTIGFyZSB3ZSBkZWFsaW5nIHdpdGggYSBzaGFyZWQgcmVzb3VyY2UsIGEgc3BlY2lmaWMgbWVtb3J5IGFsbG9jYXRpb24sIG9yIG1heWJlIGEgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZT8gQ29udGV4dCBpcyBldmVyeXRoaW5nIGhlcmUuIFdoYXQncyB0aGUgYW50aWNpcGF0ZWQgdXNhZ2UgcGF0dGVybj8gSXMgaXQgaGVhdmlseSBjb250ZW5kZWQsIG9yIHJlbGF0aXZlbHkgcmFyZT8gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl0IGRvZXMgKnNvbWV0aGluZyogd2l0aCByZWxlYXNpbmcgYSByZXNvdXJjZSwgcG90ZW50aWFsbHkgY29uZGl0aW9uYWwgYmFzZWQgb24gc29tZSBjcml0ZXJpYSwgc28gdGhlIGBvcmAgaXMgaW50ZXJlc3RpbmcgdG8gbWUgLSBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIG9wZXJhdGlvbnMsIHVubG9ja2luZyB2cyByZWxlYXNlLiBUaGUgdW5kZXJseWluZyBzZW1hbnRpY3Mgb2YgaG93IHRoZSBzdWJwb29sIGlzIG1hbmFnZWQgYXJlIHdoYXQgSSdtIGZvY3VzZWQgb24gLSBJJ2xsIHRyYWNlIGRvd24gaXRzIHBhdGggYW5kIHNlZSBleGFjdGx5IGhvdyBpdCBiZWhhdmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjAzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMjoyOS45NzI1ODc0OTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDE0NzczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MTI5PXN0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE0MC1cXG5tbS9odWdldGxiLmM6MTQxOnN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG5tbS9odWdldGxiLmMtMTQyLVxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzKVxcbi0tXFxubW0vaHVnZXRsYi5jPTE4Mz12b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xOTItXFx0c3Bvb2wtXFx1MDAzZWNvdW50LS07XFxubW0vaHVnZXRsYi5jOjE5MzpcXHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XFxubW0vaHVnZXRsYi5jLTE5NC19XFxuLS1cXG5tbS9odWdldGxiLmM9MjQ5PXN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNzgtXFx0ICovXFxubW0vaHVnZXRsYi5jOjI3OTpcXHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XFxubW0vaHVnZXRsYi5jLTI4MC1cXG4tLVxcbm1tL2h1Z2V0bGIuYz02NjU5PWxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5tbS9odWdldGxiLmMtNjgxNy1cXHRcXHRcXHRzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7XFxubW0vaHVnZXRsYi5jOjY4MTg6XFx0XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYy02ODE5LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MzAuMDk2NzM5NjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI2NzEwNjkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIFN1YnBvb2wgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBoYW5kbGluZyB0aGUgcmVsZWFzZSBhbmQgcG90ZW50aWFsIHVubG9ja2luZyBvZiBzdWJwb29scywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2xgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgLiBJIGtub3cgdGhlIHRoZW9yeSwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIHByYWN0aWNhbCBpbXBsZW1lbnRhdGlvbi4gTXkgZXhwZXJ0IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoZXJlIGFyZSBsaWtlbHkgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgaGVyZSwgcHJvYmFibHkgYXJvdW5kIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFuZCBob3cgdGhleSdyZSB1c2VkIGluIHRoZSBjb250ZXh0IG9mIGh1Z2UgcGFnZXMuIEknbSBndWVzc2luZyB0aGUgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2xgIGZ1bmN0aW9uIG1pZ2h0IGludm9sdmUgc29tZSBjbGV2ZXIgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHBvdGVudGlhbGx5IGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gQW5kIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AuLi4gdGhhdCBsaWtlbHkgdGllcyBpbnRvIGhvdyB3ZSByZXR1cm4gaHVnZSBwYWdlIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0sIG1heWJlIHRocm91Z2ggc29tZSBraW5kIG9mIGZyZWUgbGlzdCBvciBtb3JlIGNvbXBsZXggYWxsb2NhdGlvbiBzdHJhdGVneS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgZGV0YWlscyBvZiB0aGVpciBkYW5jZS4gSSdtIGV4cGVjdGluZyBzb21lIHdlbGwtcGxhY2VkIGFzc2VydGlvbnMgYW5kIGNvbW1lbnRzIGluIHRoZSBjb2RlIHRvIGd1aWRlIG15IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4ODksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMjozMi4zNjM4NTAwMzhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEyNDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2V0bGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzU6XFx0XFx0aWYgKHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxcbiAxMzY6XFx0XFx0XFx0cmV0dXJuIHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID09IHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzO1xcbiAxMzc6XFx0XFxuIDEzODpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMTM5OlxcdH1cXG4gMTQwOlxcdFxcbiAxNDE6XFx0c3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbiAxNDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBpcnFfZmxhZ3MpXFxuIDE0MzpcXHR7XFxuIDE0NDpcXHRcXHRib29sIGZyZWVfc3VicG9vbCA9IHN1YnBvb2xfaXNfZnJlZShzcG9vbCk7XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdFxcdC8qIElmIG5vIHBhZ2VzIGFyZSB1c2VkLCBhbmQgbm8gb3RoZXIgaGFuZGxlcyB0byB0aGUgc3VicG9vbFxcbiAxNDc6XFx0XFx0ICogcmVtYWluLCBnaXZlIHVwIGFueSByZXNlcnZhdGlvbnMgYmFzZWQgb24gbWluaW11bSBzaXplIGFuZFxcbiAxNDg6XFx0XFx0ICogZnJlZSB0aGUgc3VicG9vbCAqL1xcbiAxNDk6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2ssIGlycV9mbGFncyk7XFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdGlmIChmcmVlX3N1YnBvb2wpIHtcXG4gMTUyOlxcdFxcdFxcdGlmIChzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyAhPSAtMSlcXG4gMTUzOlxcdFxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3Bvb2wtXFx1MDAzZWhzdGF0ZSxcXG4gMTU0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdC1zcG9vbC1cXHUwMDNlbWluX2hwYWdlcyk7XFxuIDE1NTpcXHRcXHRcXHRrZnJlZShzcG9vbCk7XFxuIDE1NjpcXHRcXHR9XFxuIDE1NzpcXHR9XFxuIDE1ODpcXHRcXG4gMTU5OlxcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdlcGFnZV9uZXdfc3VicG9vbChzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIG1heF9ocGFnZXMsXFxuIDE2MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRsb25nIG1pbl9ocGFnZXMpXFxuIDE2MTpcXHR7XFxuIDE2MjpcXHRcXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdHNwb29sID0ga3phbGxvY19vYmooKnNwb29sKTtcXG4gMTY1OlxcdFxcdGlmICghc3Bvb2wpXFxuIDE2NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnNwb29sLVxcdTAwM2Vsb2NrKTtcXG4gMTY5OlxcdFxcdHNwb29sLVxcdTAwM2Vjb3VudCA9IDE7XFxuIDE3MDpcXHRcXHRzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyA9IG1heF9ocGFnZXM7XFxuIDE3MTpcXHRcXHRzcG9vbC1cXHUwMDNlaHN0YXRlID0gaDtcXG4gMTcyOlxcdFxcdHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzID0gbWluX2hwYWdlcztcXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0aWYgKG1pbl9ocGFnZXMgIT0gLTEgXFx1MDAyNlxcdTAwMjYgaHVnZXRsYl9hY2N0X21lbW9yeShoLCBtaW5faHBhZ2VzKSkge1xcbiAxNzU6XFx0XFx0XFx0a2ZyZWUoc3Bvb2wpO1xcbiAxNzY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE3NzpcXHRcXHR9XFxuIDE3ODpcXHRcXHRzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9IG1pbl9ocGFnZXM7XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdHJldHVybiBzcG9vbDtcXG4gMTgxOlxcdH1cXG4gMTgyOlxcdFxcbiAxODM6XFx0dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXFxuIDE4NDpcXHR7XFxuIDE4NTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAxODY6XFx0XFxuIDE4NzpcXHRcXHRpZiAoIXNwb29sKVxcbiAxODg6XFx0XFx0XFx0cmV0dXJuO1xcbiAxODk6XFx0XFxuIDE5MDpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gMTkxOlxcdFxcdEJVR19PTighc3Bvb2wtXFx1MDAzZWNvdW50KTtcXG4gMTkyOlxcdFxcdHNwb29sLVxcdTAwM2Vjb3VudC0tO1xcbiAxOTM6XFx0XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbiAxOTQ6XFx0fVxcbiAxOTU6XFx0XFxuIDE5NjpcXHQvKlxcbiAxOTc6XFx0ICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBhbGxvY2F0aW5nIGFuZCByZXNlcnZpbmcgcGFnZXMuXFxuIDE5ODpcXHQgKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGVcXG4gMTk5OlxcdCAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZVxcbiAyMDA6XFx0ICogZ2xvYmFsIHBvb2xzIG11c3QgYmUgYWRqdXN0ZWQgKHVwd2FyZCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5XFxuIDIwMTpcXHQgKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZVxcbiAyMDI6XFx0ICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXFxuIDIwMzpcXHQgKi9cXG4gMjA0OlxcdHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MzIuMzY0NDY3MzY5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNDM3NzQ2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gSHVnZXBhZ2UgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGJlZW4gZXhhbWluaW5nIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIGFuZCBJJ20gZ2V0dGluZyBhIGdvb2QgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGZsb3cuIE5vdywgSSB3YW50IHRvIHBpdm90IGFuZCByZWFsbHkgZGlnIGludG8gYSBjcml0aWNhbCBmdW5jdGlvbjogYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYC4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIHN1YnBvb2xzIHRvIHJldHVybiBwYWdlcy4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgd2hlcmUgdGhlIHBhZ2VzIGdvLCBhbmQgaG93IHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgZXNwZWNpYWxseSB0aGUgb25lcyB1c2VkIHdpdGhpbiB0aGUgYGh1Z2VwYWdlX3N1YnBvb2xgIGNvbnRleHQsIGFyZSBtb2RpZmllZCBkdXJpbmcgdGhpcyBcInB1dFwiIG9wZXJhdGlvbi4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBjb250cmlidXRlcyB0byBtYWludGFpbmluZyB0aGUgaW50ZWdyaXR5IG9mIG91ciBodWdlcGFnZSBwb29scy4gSSBzdXNwZWN0IHdlIHdpbGwgZmluZCBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgd2l0aGluIHRoaXMgcGFydCBvZiB0aGUgY29kZWJhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjIyOjM0LjYwODI0NDM4NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjM0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0NTpcXHQgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBnbG9iYWwgcGFnZSByZXNlcnZhdGlvbnMgdGhhdCBtdXN0IGJlIGRyb3BwZWQuXFxuIDI0NjpcXHQgKiBUaGUgcmV0dXJuIHZhbHVlIG1heSBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKVxcbiAyNDc6XFx0ICogaW4gdGhlIGNhc2Ugd2hlcmUgYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXFxuIDI0ODpcXHQgKi9cXG4gMjQ5OlxcdHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4gMjUwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBsb25nIGRlbHRhKVxcbiAyNTE6XFx0e1xcbiAyNTI6XFx0XFx0bG9uZyByZXQgPSBkZWx0YTtcXG4gMjUzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDI1NDpcXHRcXG4gMjU1OlxcdFxcdGlmICghc3Bvb2wpXFxuIDI1NjpcXHRcXHRcXHRyZXR1cm4gZGVsdGE7XFxuIDI1NzpcXHRcXG4gMjU4OlxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiAyNTk6XFx0XFxuIDI2MDpcXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXFx0XFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cXG4gMjYxOlxcdFxcdFxcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyAtPSBkZWx0YTtcXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0IC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXFxuIDI2NDpcXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXFx1MDAyNlxcdTAwMjYgc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzIFxcdTAwM2Mgc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMpIHtcXG4gMjY1OlxcdFxcdFxcdGlmIChzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIFxcdTAwM2M9IHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzKVxcbiAyNjY6XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4gMjY3OlxcdFxcdFxcdGVsc2VcXG4gMjY4OlxcdFxcdFxcdFxcdHJldCA9IHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgLSBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcztcXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0XFx0c3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgKz0gZGVsdGE7XFxuIDI3MTpcXHRcXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgXFx1MDAzZSBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcylcXG4gMjcyOlxcdFxcdFxcdFxcdHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID0gc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXM7XFxuIDI3MzpcXHRcXHR9XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdC8qXFxuIDI3NjpcXHRcXHQgKiBJZiBodWdldGxiZnNfcHV0X3N1cGVyIGNvdWxkbid0IGZyZWUgc3Bvb2wgZHVlIHRvIGFuIG91dHN0YW5kaW5nXFxuIDI3NzpcXHRcXHQgKiBxdW90YSByZWZlcmVuY2UsIGZyZWUgaXQgbm93LlxcbiAyNzg6XFx0XFx0ICovXFxuIDI3OTpcXHRcXHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdHJldHVybiByZXQ7XFxuIDI4MjpcXHR9XFxuIDI4MzpcXHRcXG4gMjg0OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnN1YnBvb2xfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAyODU6XFx0e1xcbiAyODY6XFx0XFx0cmV0dXJuIHN1YnBvb2xfaW5vZGUoZmlsZV9pbm9kZSh2bWEtXFx1MDAzZXZtX2ZpbGUpKTtcXG4gMjg3OlxcdH1cXG4gMjg4OlxcdFxcbiAyODk6XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MzQuNjA4NjY5Njg1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMjk4MDgzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IEZpeGluZyBhIFBvdGVudGlhbCBVQUYgaW4gSHVnZVRMQiBSZXNlcnZhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gVGhlIGtleSBpc3N1ZSBpcyB0aGUgcmVvcmRlcmluZyBvZiBvcGVyYXRpb25zIHdpdGhpbiBgb3V0X3B1dF9wYWdlc2AuIEl0IHNlZW1zIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIChVQUYpIHZ1bG5lcmFiaWxpdHkuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNjZW5hcmlvIHdoZXJlIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AgY291bGQgZnJlZSB0aGUgYHNwb29sYCBvYmplY3QgaWYgYSBjZXJ0YWluIGNvbmRpdGlvbiBpbiBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAgd2FzIG1ldCwgbWFraW5nIHRoZSBzdWJzZXF1ZW50IGFjY2VzcyBvZiBgc3Bvb2wtXHUwMDNlbG9ja2AgYSBVQUYuIEVzc2VudGlhbGx5LCB0aGUgY29kZSB3YXMgc3VzY2VwdGlibGUgdG8gZnJlZWluZyB0aGUgc3VicG9vbCBwcmVtYXR1cmVseSwgbGVhZGluZyB0byBtZW1vcnkgY29ycnVwdGlvbi5cblxuVGhlIGZpeCwgcmVvcmRlcmluZyB0aGUgY29uZGl0aW9uYWxzLCBzZWVtcyBzb3VuZCBhcyBpdCBlbnN1cmVzIHRoYXQgdGhlIGNyaXRpY2FsIGNoZWNrIGZvciB0aGUgYHNwb29sYCdzIHZhbGlkaXR5IG9jY3VycyAqYmVmb3JlKiBhbnkgcG90ZW50aWFsbHkgZnJlZWluZyBvcGVyYXRpb24uICBHb29kIGNhdGNoLCB0aGF0J3MgYSBjbGFzc2ljIGhlYXAgbGlmZXRpbWUgYnVnLiBLQVNBTiBzaG91bGQgZWFzaWx5IGNhdGNoIHRoYXQga2luZCBvZiBpc3N1ZS5cblxuTm93LCBsZXQncyBjb25zaWRlciBpZiB0aGlzIHJlcXVpcmVzIEtNU0FOLiBJIG5lZWQgdG8gYmUgcmlnb3JvdXMgaGVyZSwgZ2l2ZW4gdGhlIHJlc291cmNlIGNvc3RzLiBJIG5lZWQgdG8gY2hlY2sgaWYgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQuIFRoZSB2YXJpYWJsZXMgaW4gcXVlc3Rpb24gYXJlOiBgc3Bvb2xfcmVzdmAsIGBnYmxfcmVzdmAsIGBnYmxfcmVzZXJ2ZWAsIGBjaGdgLCBgc3Bvb2xgLCBgaGAsIGFuZCBgZmxhZ3NgLiBMb29raW5nIGF0IHRoZWlyIGluaXRpYWxpemF0aW9uIHdpdGhpbiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYHNwb29sX3Jlc3ZgLCBgZ2JsX3Jlc2VydmVgLCBgZmxhZ3NgLCBgY2hnYCwgZXRjLiBhcmUgYWxsIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGNoYW5nZXMgdGhhdCB3b3VsZCByZXN1bHQgaW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGJyYW5jaGluZyBvciBib3VuZHMgY2hlY2tpbmcuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhlIHBhdGNoIGRpcmVjdGx5IGFkZHJlc3NlcyBhIFVBRi9kb3VibGUtZnJlZSB2dWxuZXJhYmlsaXR5LCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCBLQVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QsIGEgS01TQU4gc2Vzc2lvbiBpcyB1bm5lY2Vzc2FyeS4gS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgaGVyZS4gTm8gc2Vuc2UgaW4gd2FzdGluZyByZXNvdXJjZXMuXG5cblRoZSBjb25jbHVzaW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogYE5lZWRzS01TQU4gPSBmYWxzZWAuIEknbSBjb25maWRlbnQgaW4gdGhhdCBhc3Nlc3NtZW50LiBUaW1lIHRvIGZvcm11bGF0ZSB0aGUgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEzNiwiT3V0cHV0VG9rZW5zIjoxODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMjo0MC43Mzg0ODA0NzVaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JkZXJzIGVycm9yLXBhdGggY2xlYW51cHMgaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCB0byBwcmV2ZW50IGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgLyBkb3VibGUtZnJlZSBjb25kaXRpb24gd2hlcmUgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKClgIGNvdWxkIHJlbGVhc2UgYW5kIGZyZWUgYHNwb29sYCB2aWEgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woKWAsIGZvbGxvd2VkIGJ5IGEgc3Vic2VxdWVudCBhY2Nlc3MgdG8gYHNwb29sYCBpbiB0aGUgYGlmIChnYmxfcmVzZXJ2ZSBcXHUwMDI2XFx1MDAyNiBzcG9vbClgIGJsb2NrLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBzdHJ1Y3R1cmUgcGFkZGluZywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYy4gVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQgaXMgYSBtZW1vcnkgbGlmZXRpbWUgLyBVQUYgaXNzdWUsIHdoaWNoIGlzIGRldGVjdGVkIGJ5IEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JkZXJzIGVycm9yLXBhdGggY2xlYW51cHMgaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCB0byBwcmV2ZW50IGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgLyBkb3VibGUtZnJlZSBjb25kaXRpb24gd2hlcmUgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKClgIGNvdWxkIHJlbGVhc2UgYW5kIGZyZWUgYHNwb29sYCB2aWEgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woKWAsIGZvbGxvd2VkIGJ5IGEgc3Vic2VxdWVudCBhY2Nlc3MgdG8gYHNwb29sYCBpbiB0aGUgYGlmIChnYmxfcmVzZXJ2ZSBcXHUwMDI2XFx1MDAyNiBzcG9vbClgIGJsb2NrLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBzdHJ1Y3R1cmUgcGFkZGluZywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYy4gVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQgaXMgYSBtZW1vcnkgbGlmZXRpbWUgLyBVQUYgaXNzdWUsIHdoaWNoIGlzIGRldGVjdGVkIGJ5IEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cp52[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 18:01:00 +0000 UTC FinishedAt: 2026-09-07 18:22:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c96294afbcb5737da18229e788ca45a5d534abc5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "HUGETLB_PAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c96294afbcb5737da18229e788ca45a5d534abc5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "HUGETLB_PAGE" ], "series_id": "90ff0e2b-4793-489c-b92d-1f1c82af5f07" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_reserve_pages", "hugepage_subpool_put_pages", "hugetlbfs_file_mmap" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX3Jlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXRsYmZzX2ZpbGVfbW1hcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlb3JkZXJzIGVycm9yLXBhdGggY2xlYW51cHMgaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCB0byBwcmV2ZW50IGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgLyBkb3VibGUtZnJlZSBjb25kaXRpb24gd2hlcmUgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKClgIGNvdWxkIHJlbGVhc2UgYW5kIGZyZWUgYHNwb29sYCB2aWEgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woKWAsIGZvbGxvd2VkIGJ5IGEgc3Vic2VxdWVudCBhY2Nlc3MgdG8gYHNwb29sYCBpbiB0aGUgYGlmIChnYmxfcmVzZXJ2ZSBcdTAwMjZcdTAwMjYgc3Bvb2wpYCBibG9jay5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljLiBUaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCBpcyBhIG1lbW9yeSBsaWZldGltZSAvIFVBRiBpc3N1ZSwgd2hpY2ggaXMgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyB0ZWFyZG93biBvcmRlcmluZyBpbiBodWdldGxiX3Jlc2VydmVfcGFnZXMoKSBpbiBtbS9odWdldGxiLmMgdG8gcmVzdG9yZSB1c2VkX2hwYWdlcyBiZWZvcmUgcHV0dGluZyBzdWJwb29sIHJlc2VydmF0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGV4ZXJjaXNlZCB3aGVuIGh1Z2V0bGIgcmVzZXJ2YXRpb25zIGZhaWwgb3IgcmFjZSBkdXJpbmcgbW1hcCwgbWVtZmRfY3JlYXRlLCBvciBzaG1nZXQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ODJkNTQ4ZWU1YmU4NjFiNTFmMmU2ZDY1Njc3YjA1YmU1MTdkYWFjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxODoyMTo0NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDc4NTc3Mjg0NTc5NTIuLjNlM2NkYTE4MWU3MjQgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTY4MDgsMTUgJiM0Mzs2ODA4LDYgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBvdXRfcHV0X3BhZ2VzOlxuIFx0c3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlO1xuLVx0aWYgKHNwb29sX3Jlc3YpIHtcbi1cdFx0LyogcHV0IHN1YiBwb29sJiMzOTtzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovXG4tXHRcdGdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpO1xuLVx0XHQvKlxuLVx0XHQgKiBzdWJwb29sJiMzOTtzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsXG4tXHRcdCAqIHJldHVybiB0byBoc3RhdGUuXG4tXHRcdCAqL1xuLVx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XG4tXHR9XG4gXHQvKiBSZXN0b3JlIHVzZWRfaHBhZ2VzIGZvciBwYWdlcyB0aGF0IGZhaWxlZCBnbG9iYWwgcmVzZXJ2YXRpb24gKi9cbiBcdGlmIChnYmxfcmVzZXJ2ZSBcdTAwMjZcdTAwMjYgc3Bvb2wpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbkBAIC02ODI2LDYgJiM0Mzs2ODE3LDE1IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7XG4gXHRcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbiBcdH1cbiYjNDM7XHRpZiAoc3Bvb2xfcmVzdikge1xuJiM0MztcdFx0LyogcHV0IHN1YiBwb29sJiMzOTtzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovXG4mIzQzO1x0XHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBzdWJwb29sJiMzOTtzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsXG4mIzQzO1x0XHQgKiByZXR1cm4gdG8gaHN0YXRlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XG4mIzQzO1x0fVxuIG91dF91bmNoYXJnZV9jZ3JvdXA6XG4gXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXG4gXHRcdFx0XHRcdCAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmc19maWxlX21tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHRlYXJkb3duIG9yZGVyaW5nIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpIGluIG1tL2h1Z2V0bGIuYyB0byByZXN0b3JlIHVzZWRfaHBhZ2VzIGJlZm9yZSBwdXR0aW5nIHN1YnBvb2wgcmVzZXJ2YXRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhlcmNpc2VkIHdoZW4gaHVnZXRsYiByZXNlcnZhdGlvbnMgZmFpbCBvciByYWNlIGR1cmluZyBtbWFwLCBtZW1mZF9jcmVhdGUsIG9yIHNobWdldC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY4MmQ1NDhlZTViZTg2MWI1MWYyZTZkNjU2NzdiMDViZTUxN2RhYWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE4OjIxOjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDc4NTc3Mjg0NTc5NTIuLjNlM2NkYTE4MWU3MjQgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTY4MDgsMTUgJiM0Mzs2ODA4LDYgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwKIAogb3V0X3B1dF9wYWdlczoKIAlzcG9vbF9yZXN2ID0gY2hnIC0gZ2JsX3Jlc2VydmU7Ci0JaWYgKHNwb29sX3Jlc3YpIHsKLQkJLyogcHV0IHN1YiBwb29sJiMzOTtzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovCi0JCWdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpOwotCQkvKgotCQkgKiBzdWJwb29sJiMzOTtzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsCi0JCSAqIHJldHVybiB0byBoc3RhdGUuCi0JCSAqLwotCQlodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7Ci0JfQogCS8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqLwogCWlmIChnYmxfcmVzZXJ2ZSAmYW1wOyZhbXA7IHNwb29sKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC02ODI2LDYgJiM0Mzs2ODE3LDE1IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7CiAJCXVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTsKIAl9CiYjNDM7CWlmIChzcG9vbF9yZXN2KSB7CiYjNDM7CQkvKiBwdXQgc3ViIHBvb2wmIzM5O3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi8KJiM0MzsJCWdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpOwomIzQzOwkJLyoKJiM0MzsJCSAqIHN1YnBvb2wmIzM5O3MgcmVzZXJ2ZWQgcGFnZXMgY2FuIG5vdCBiZSBwdXQgYmFjayBkdWUgdG8gcmFjZSwKJiM0MzsJCSAqIHJldHVybiB0byBoc3RhdGUuCiYjNDM7CQkgKi8KJiM0MzsJCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2KTsKJiM0MzsJfQogb3V0X3VuY2hhcmdlX2Nncm91cDoKIAlodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksCiAJCQkJCSAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIwMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBodWdldGxiLmNgIERpZmY6IFJlc2VydmF0aW9uIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaHVnZXRsYi5jYCBkaWZmLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgd2l0aGluIHRoZSBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IHBhZ2UgcmVzZXJ2YXRpb25zIGFyZSBtYW5hZ2VkLCBsaWtlbHkgd2l0aGluIHN1YnBvb2xzIGFuZCB0aGUgZ2xvYmFsIHBvb2wuIFRoZSBjaGFuZ2UgaXMgY2xlYXJseSBmb2N1c2VkIG9uIHRoZSBsb2dpYyBhZnRlciB0aGUgZ2xvYmFsIHJlc2VydmF0aW9uIGF0dGVtcHQsIGFuZCBJIHNlZSB0aGUgY3J1Y2lhbCBsaW5lIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AgY2FsbGVkLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIGNvZGUgYXR0ZW1wdGVkIHRvIHJlbGVhc2UgYSBzdWJwb29sJiMzOTtzIHJlc2VydmF0aW9uIGlmIGEgZ2xvYmFsIHJlc2VydmF0aW9uIGZhaWxlZC4gSXQgbG9va3MgbGlrZSBpdCB3YXMgYXR0ZW1wdGluZyB0byBwdXQgdGhlIHN1YnBvb2wmIzM5O3MgcmVzZXJ2YXRpb24gYmFjaywgYW5kIGlmIGl0IGNvdWxkIG5vdCwgaXQgd291bGQgcmV0dXJuIHRoZSBwYWdlcyB0byB0aGUgaHN0YXRlLgoKVGhlIGRpZmYgaW50cm9kdWNlcyBhIGNoYW5nZS4gVGhlIG9yaWdpbmFsIGxvZ2ljIHdhcyBpbnNpZGUgYSBjb25kaXRpb25hbCBgaWYgKHNwb29sX3Jlc3YpYC4gTm93IHRoYXQgaWYgc3RhdGVtZW50IGlzIHJlcGVhdGVkLiBUaGUgc2Vjb25kIHRpbWUsIGFmdGVyIHRoZSBsaW5lcyBmb3IgcGFnZSByZXN0b3JlIGlmIGdsb2JhbCByZXNlcnZhdGlvbiBmYWlsZWQuIFRoaXMgaW1wbGllcyB0aGVyZSB3YXMgYSBidWcgd2hlcmUgdGhlIHN1YnBvb2wmIzM5O3MgcmVzZXJ2YXRpb24gd2FzbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgcHV0IGJhY2sgaW4gY2VydGFpbiBzY2VuYXJpb3MsIHByb2JhYmx5IHJlbGF0ZWQgdG8gcmFjZSBjb25kaXRpb25zLiBUaGUgY29tbWVudGVkLW91dCBsaW5lcyBwb2ludCB0byBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBzdWJwb29sJiMzOTtzIHJlc2VydmVkIHBhZ2VzIGNhbiYjMzk7dCBiZSBwdXQgYmFjayBhbmQgdGhhdCB0aGUgc3VicG9vbCYjMzk7cyByZXNlcnZlZCBwYWdlcyBuZWVkIHRvIGJlIHJldHVybmVkIHRvIHRoZSBoc3RhdGUuIFRoZSBjb21tZW50IGAvKiBSZXN0b3JlIHVzZWRfaHBhZ2VzIGZvciBwYWdlcyB0aGF0IGZhaWxlZCBnbG9iYWwgcmVzZXJ2YXRpb24gKi9gIGFsc28gYWxpZ25zIHdpdGggdGhpcyB1bmRlcnN0YW5kaW5nLiBUaGUgb3JpZ2luYWwgbG9naWMgbGlrZWx5IGhhZCBhIGhvbGUgaW4gaXRzIGhhbmRsaW5nIG9mIHJlc2VydmF0aW9uIHJlZnVuZHMgd2hlbiBhIGdsb2JhbCByZXNlcnZhdGlvbiBmYWlsZWQsIGxlYWRpbmcgdG8gbWVtb3J5IGxlYWtzIG9yIGluY29ycmVjdCBhY2NvdW50aW5nLiBUaGUgZHVwbGljYXRlZCBjb2RlIGVuc3VyZXMgdGhlIHJlc2VydmF0aW9uIGlzIGFsd2F5cyBwdXQgYmFjaywgaXJyZXNwZWN0aXZlIG9mIGEgc3VjY2Vzc2Z1bCBnbG9iYWwgcmVzZXJ2YXRpb24sIGFuZCBsaWtlbHkgYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlJiMzOTtzIGV4ZWN1dGlvbiBwYXRocyB0byBjb25maXJtIHRoaXMsIGJ1dCB0aGF0JiMzOTtzIG15IHdvcmtpbmcgaHlwb3RoZXNpcyBiYXNlZCBvbiB0aGUgZGlmZiBhbmQgdGhlIGNvbW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjc3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NzcwOlx0XHRcdGFkZCA9IHJlZ2lvbl9hZGQocmVzdl9tYXAsIGZyb20sIHRvLCByZWdpb25zX25lZWRlZCwgaCwgaF9jZyk7XG42NzcxOlx0XG42NzcyOlx0XHRcdGlmICh1bmxpa2VseShhZGQgXHUwMDNjIDApKSB7XG42NzczOlx0XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuNjc3NDpcdFx0XHRcdGVyciA9IGFkZDtcbjY3NzU6XHRcdFx0XHRnb3RvIG91dF9wdXRfcGFnZXM7XG42Nzc2Olx0XHRcdH0gZWxzZSBpZiAodW5saWtlbHkoY2hnIFx1MDAzZSBhZGQpKSB7XG42Nzc3Olx0XHRcdFx0LypcbjY3Nzg6XHRcdFx0XHQgKiBwYWdlcyBpbiB0aGlzIHJhbmdlIHdlcmUgYWRkZWQgdG8gdGhlIHJlc2VydmVcbjY3Nzk6XHRcdFx0XHQgKiBtYXAgYmV0d2VlbiByZWdpb25fY2hnIGFuZCByZWdpb25fYWRkLiAgVGhpc1xuNjc4MDpcdFx0XHRcdCAqIGluZGljYXRlcyBhIHJhY2Ugd2l0aCBhbGxvY19odWdldGxiX2ZvbGlvLiAgQWRqdXN0XG42NzgxOlx0XHRcdFx0ICogdGhlIHN1YnBvb2wgYW5kIHJlc2VydmUgY291bnRzIG1vZGlmaWVkIGFib3ZlXG42NzgyOlx0XHRcdFx0ICogYmFzZWQgb24gdGhlIGRpZmZlcmVuY2UuXG42NzgzOlx0XHRcdFx0ICovXG42Nzg0Olx0XHRcdFx0bG9uZyByc3ZfYWRqdXN0O1xuNjc4NTpcdFxuNjc4NjpcdFx0XHRcdC8qXG42Nzg3Olx0XHRcdFx0ICogaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoKSB3aWxsIHB1dCB0aGVcbjY3ODg6XHRcdFx0XHQgKiByZWZlcmVuY2UgdG8gaF9jZy1cdTAwM2Vjc3MuIFNlZSBjb21tZW50IGJlbG93IGZvciBkZXRhaWwuXG42Nzg5Olx0XHRcdFx0ICovXG42NzkwOlx0XHRcdFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoXG42NzkxOlx0XHRcdFx0XHRoc3RhdGVfaW5kZXgoaCksXG42NzkyOlx0XHRcdFx0XHQoY2hnIC0gYWRkKSAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuNjc5MzpcdFxuNjc5NDpcdFx0XHRcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCxcbjY3OTU6XHRcdFx0XHRcdFx0XHRcdFx0Y2hnIC0gYWRkKTtcbjY3OTY6XHRcdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcbjY3OTc6XHRcdFx0fSBlbHNlIGlmIChoX2NnKSB7XG42Nzk4Olx0XHRcdFx0LypcbjY3OTk6XHRcdFx0XHQgKiBUaGUgZmlsZV9yZWdpb25zIHdpbGwgaG9sZCB0aGVpciBvd24gcmVmZXJlbmNlIHRvXG42ODAwOlx0XHRcdFx0ICogaF9jZy1cdTAwM2Vjc3MuIFNvIHdlIHNob3VsZCByZWxlYXNlIHRoZSByZWZlcmVuY2UgaGVsZFxuNjgwMTpcdFx0XHRcdCAqIHZpYSBodWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwX3JzdmQoKSB3aGVuIHdlIGFyZVxuNjgwMjpcdFx0XHRcdCAqIGRvbmUuXG42ODAzOlx0XHRcdFx0ICovXG42ODA0Olx0XHRcdFx0aHVnZXRsYl9jZ3JvdXBfcHV0X3JzdmRfY2dyb3VwKGhfY2cpO1xuNjgwNTpcdFx0XHR9XG42ODA2Olx0XHR9XG42ODA3Olx0XHRyZXR1cm4gY2hnO1xuNjgwODpcdFxuNjgwOTpcdG91dF9wdXRfcGFnZXM6XG42ODEwOlx0XHRzcG9vbF9yZXN2ID0gY2hnIC0gZ2JsX3Jlc2VydmU7XG42ODExOlx0XHQvKiBSZXN0b3JlIHVzZWRfaHBhZ2VzIGZvciBwYWdlcyB0aGF0IGZhaWxlZCBnbG9iYWwgcmVzZXJ2YXRpb24gKi9cbjY4MTI6XHRcdGlmIChnYmxfcmVzZXJ2ZSBcdTAwMjZcdTAwMjYgc3Bvb2wpIHtcbjY4MTM6XHRcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjY4MTQ6XHRcbjY4MTU6XHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuNjgxNjpcdFx0XHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcbjY4MTc6XHRcdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcbjY4MTg6XHRcdFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuNjgxOTpcdFx0fVxuNjgyMDpcdFx0aWYgKHNwb29sX3Jlc3YpIHtcbjY4MjE6XHRcdFx0LyogcHV0IHN1YiBwb29sJiMzOTtzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovXG42ODIyOlx0XHRcdGdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpO1xuNjgyMzpcdFx0XHQvKlxuNjgyNDpcdFx0XHQgKiBzdWJwb29sJiMzOTtzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsXG42ODI1Olx0XHRcdCAqIHJldHVybiB0byBoc3RhdGUuXG42ODI2Olx0XHRcdCAqL1xuNjgyNzpcdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XG42ODI4Olx0XHR9XG42ODI5Olx0b3V0X3VuY2hhcmdlX2Nncm91cDpcbjY4MzA6XHRcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcbjY4MzE6XHRcdFx0XHRcdFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuNjgzMjpcdG91dF9lcnI6XG42ODMzOlx0XHRodWdldGxiX3ZtYV9sb2NrX2ZyZWUodm1hKTtcbjY4MzQ6XHRcdGlmICghdm1hIHx8IHZtYV90ZXN0KHZtYSwgVk1BX01BWVNIQVJFX0JJVCkpXG42ODM1Olx0XHRcdC8qIE9ubHkgY2FsbCByZWdpb25fYWJvcnQgaWYgdGhlIHJlZ2lvbl9jaGcgc3VjY2VlZGVkIGJ1dCB0aGVcbjY4MzY6XHRcdFx0ICogcmVnaW9uX2FkZCBmYWlsZWQgb3IgZGlkbiYjMzk7dCBydW4uXG42ODM3Olx0XHRcdCAqL1xuNjgzODpcdFx0XHRpZiAoY2hnIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgYWRkIFx1MDAzYyAwKVxuNjgzOTpcdFx0XHRcdHJlZ2lvbl9hYm9ydChyZXN2X21hcCwgZnJvbSwgdG8sIHJlZ2lvbnNfbmVlZGVkKTtcbjY4NDA6XHRcdGlmICh2bWEgXHUwMDI2XHUwMDI2IGlzX3ZtYV9yZXN2X3NldCh2bWEsIEhQQUdFX1JFU1ZfT1dORVIpKSB7XG42ODQxOlx0XHRcdGtyZWZfcHV0KFx1MDAyNnJlc3ZfbWFwLVx1MDAzZXJlZnMsIHJlc3ZfbWFwX3JlbGVhc2UpO1xuNjg0MjpcdFx0XHRzZXRfdm1hX3Jlc3ZfbWFwKHZtYSwgTlVMTCk7XG42ODQzOlx0XHR9XG42ODQ0Olx0XHRyZXR1cm4gZXJyO1xuNjg0NTpcdH1cbjY4NDY6XHRcbjY4NDc6XHRsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxuNjg0ODpcdFx0XHRcdFx0XHRcdFx0XHRsb25nIGZyZWVkKVxuNjg0OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDk4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zIGluIFN1YnBvb2wgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpYCBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIHRoYXQgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2xgIG1pZ2h0IGZyZWUgYHNwb29sYCAob3IgZHJvcCBpdHMgcmVmZXJlbmNlIGNvdW50KSByaWdodCBiZWZvcmUgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBnZXRzIGEgY2hhbmNlIHRvIGRvIGl0cyBqb2IuIFRoYXQgc2VlbXMgbGlrZSBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIG9yIGEgcmFjZSBjb25kaXRpb24gYXQgdGhlIHZlcnkgbGVhc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZWNoYW5pY3Mgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIGNvbmZpcm0gdGhlIHJhY2UuIEkgaGF2ZSB0byB2ZXJpZnkgd2hhdCBhY3Rpb25zIGFyZSBwZXJmb3JtZWQgYnkgZWFjaCBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHN0ZXBzIGFuZCB3aGVuIGVhY2ggaXMgY2FsbGVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBjbG9zZWx5IGF0IGB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sYCBhbmQgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCwgdG8gc2VlIGlmIG15IGluaXRpYWwgaHVuY2ggaGFzIGFueSBtZXJpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc3x1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xMjk9c3RhdGljIGlubGluZSBib29sIHN1YnBvb2xfaXNfZnJlZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4tLVxubW0vaHVnZXRsYi5jLTE0MC1cbm1tL2h1Z2V0bGIuYzoxNDE6c3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxubW0vaHVnZXRsYi5jLTE0Mi1cdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGlycV9mbGFncylcbi0tXG5tbS9odWdldGxiLmM9MTgzPXZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuLS1cbm1tL2h1Z2V0bGIuYy0xOTItXHRzcG9vbC1cdTAwM2Vjb3VudC0tO1xubW0vaHVnZXRsYi5jOjE5MzpcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbm1tL2h1Z2V0bGIuYy0xOTQtfVxuLS1cbm1tL2h1Z2V0bGIuYz0yMDQ9c3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNDgtICovXG5tbS9odWdldGxiLmM6MjQ5OnN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbm1tL2h1Z2V0bGIuYy0yNTAtXHRcdFx0XHQgICAgICAgbG9uZyBkZWx0YSlcbi0tXG5tbS9odWdldGxiLmMtMjc4LVx0ICovXG5tbS9odWdldGxiLmM6Mjc5Olx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xubW0vaHVnZXRsYi5jLTI4MC1cbi0tXG5tbS9odWdldGxiLmM9MTY3Mz12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGIuYy0xNjk5LVx0ICogdmlhIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKCkuICBTaW5jZSB3ZSBhcmUgJiMzOTtyZXN0b3JpbmcmIzM5OyB0aGVcbm1tL2h1Z2V0bGIuYzoxNzAwOlx0ICogcmVzZXJ2YXRpb24sIGRvIG5vdCBjYWxsIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKCkgYXMgdGhpcyB3aWxsXG5tbS9odWdldGxiLmMtMTcwMS1cdCAqIHJlbW92ZSB0aGUgcmVzZXJ2ZWQgcGFnZSBmcm9tIHRoZSBzdWJwb29sLlxuLS1cbm1tL2h1Z2V0bGIuYy0xNzA5LVx0XHQgKi9cbm1tL2h1Z2V0bGIuYzoxNzEwOlx0XHRpZiAoaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpID09IDApXG5tbS9odWdldGxiLmMtMTcxMS1cdFx0XHRyZXN0b3JlX3Jlc2VydmUgPSB0cnVlO1xuLS1cbm1tL2h1Z2V0bGIuYz0yOTM5PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzA0OS1cbm1tL2h1Z2V0bGIuYzozMDUwOlx0XHRcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XG5tbS9odWdldGxiLmMtMzA1MS1cdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcbi0tXG5tbS9odWdldGxiLmMtMzA2Ni1cdGlmIChtYXBfY2hnIFx1MDAyNlx1MDAyNiAhZ2JsX2NoZykge1xubW0vaHVnZXRsYi5jOjMwNjc6XHRcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xubW0vaHVnZXRsYi5jLTMwNjgtXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbi0tXG5tbS9odWdldGxiLmM9NDcwOT1zdGF0aWMgdm9pZCBodWdldGxiX3ZtX29wX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2V0bGIuYy00NzMyLVx0XHQgKi9cbm1tL2h1Z2V0bGIuYzo0NzMzOlx0XHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCByZXNlcnZlKTtcbm1tL2h1Z2V0bGIuYy00NzM0LVx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG4tLVxubW0vaHVnZXRsYi5jPTY2NTk9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9odWdldGxiLmMtNjc5My1cbm1tL2h1Z2V0bGIuYzo2Nzk0Olx0XHRcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCxcbm1tL2h1Z2V0bGIuYy02Nzk1LVx0XHRcdFx0XHRcdFx0XHRjaGcgLSBhZGQpO1xuLS1cbm1tL2h1Z2V0bGIuYy02ODE3LVx0XHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlO1xubW0vaHVnZXRsYi5jOjY4MTg6XHRcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbm1tL2h1Z2V0bGIuYy02ODE5LVx0fVxuLS1cbm1tL2h1Z2V0bGIuYy02ODIxLVx0XHQvKiBwdXQgc3ViIHBvb2wmIzM5O3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cbm1tL2h1Z2V0bGIuYzo2ODIyOlx0XHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTtcbm1tL2h1Z2V0bGIuYy02ODIzLVx0XHQvKlxuLS1cbm1tL2h1Z2V0bGIuYz02ODQ3PWxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXG4tLVxubW0vaHVnZXRsYi5jLTY4ODEtXHQgKi9cbm1tL2h1Z2V0bGIuYzo2ODgyOlx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgKGNoZyAtIGZyZWVkKSk7XG5tbS9odWdldGxiLmMtNjg4My1cdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTg4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgKioKClJpZ2h0LCBzbyBJJiMzOTttIHN0YXJ0aW5nIGF0IHRoZSB0b3Agb2YgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AsIHNwZWNpZmljYWxseSBsaW5lIDY2NTksIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMgZnJvbSB0aGUgZ3JvdW5kIHVwIHRvIHJlYWxseSBncmFzcCBpdHMgaW1wbGljYXRpb25zLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHRoaW5nIHdvcmtzIGZyb20gdGhlIHZlcnkgYmVnaW5uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjY1OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NjU5Olx0bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbjY2NjA6XHRcdFx0bG9uZyBmcm9tLCBsb25nIHRvLFxuNjY2MTpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbjY2NjI6XHRcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuNjY2MzpcdHtcbjY2NjQ6XHRcdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBzcG9vbF9yZXN2LCBnYmxfcmVzdjtcbjY2NjU6XHRcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xuNjY2NjpcdFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7XG42NjY3Olx0XHRzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwO1xuNjY2ODpcdFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcbjY2Njk6XHRcdGxvbmcgZ2JsX3Jlc2VydmUsIHJlZ2lvbnNfbmVlZGVkID0gMDtcbjY2NzA6XHRcdGludCBlcnI7XG42NjcxOlx0XG42NjcyOlx0XHQvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi9cbjY2NzM6XHRcdGlmIChmcm9tIFx1MDAzZSB0bykge1xuNjY3NDpcdFx0XHRWTV9XQVJOKDEsIFwmIzM0OyVzIGNhbGxlZCB3aXRoIGEgbmVnYXRpdmUgcmFuZ2VcXG5cJiMzNDssIF9fZnVuY19fKTtcbjY2NzU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG42Njc2Olx0XHR9XG42Njc3Olx0XG42Njc4Olx0XHQvKlxuNjY3OTpcdFx0ICogdm1hIHNwZWNpZmljIHNlbWFwaG9yZSB1c2VkIGZvciBwbWQgc2hhcmluZyBhbmQgZmF1bHQvdHJ1bmNhdGlvblxuNjY4MDpcdFx0ICogc3luY2hyb25pemF0aW9uXG42NjgxOlx0XHQgKi9cbjY2ODI6XHRcdGh1Z2V0bGJfdm1hX2xvY2tfYWxsb2Modm1hKTtcbjY2ODM6XHRcbjY2ODQ6XHRcdC8qXG42Njg1Olx0XHQgKiBPbmx5IGFwcGx5IGh1Z2VwYWdlIHJlc2VydmF0aW9uIGlmIGFza2VkLiBBdCBmYXVsdCB0aW1lLCBhblxuNjY4NjpcdFx0ICogYXR0ZW1wdCB3aWxsIGJlIG1hZGUgZm9yIFZNX05PUkVTRVJWRSB0byBhbGxvY2F0ZSBhIHBhZ2VcbjY2ODc6XHRcdCAqIHdpdGhvdXQgdXNpbmcgcmVzZXJ2ZXNcbjY2ODg6XHRcdCAqL1xuNjY4OTpcdFx0aWYgKHZtYV9mbGFnc190ZXN0KFx1MDAyNnZtYV9mbGFncywgVk1BX05PUkVTRVJWRV9CSVQpKVxuNjY5MDpcdFx0XHRyZXR1cm4gMDtcbjY2OTE6XHRcbjY2OTI6XHRcdC8qXG42NjkzOlx0XHQgKiBTaGFyZWQgbWFwcGluZ3MgYmFzZSB0aGVpciByZXNlcnZhdGlvbiBvbiB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRoYXRcbjY2OTQ6XHRcdCAqIGFyZSBhbHJlYWR5IGFsbG9jYXRlZCBvbiBiZWhhbGYgb2YgdGhlIGZpbGUuIFByaXZhdGUgbWFwcGluZ3MgbmVlZFxuNjY5NTpcdFx0ICogdG8gcmVzZXJ2ZSB0aGUgZnVsbCBhcmVhIGV2ZW4gaWYgcmVhZC1vbmx5IGFzIG1wcm90ZWN0KCkgbWF5IGJlXG42Njk2Olx0XHQgKiBjYWxsZWQgdG8gbWFrZSB0aGUgbWFwcGluZyByZWFkLXdyaXRlLiBBc3N1bWUgIXZtYSBpcyBhIHNobSBtYXBwaW5nXG42Njk3Olx0XHQgKi9cbjY2OTg6XHRcdGlmICghdm1hIHx8IHZtYV90ZXN0KHZtYSwgVk1BX01BWVNIQVJFX0JJVCkpIHtcbjY2OTk6XHRcdFx0LypcbjY3MDA6XHRcdFx0ICogcmVzdl9tYXAgY2FuIG5vdCBiZSBOVUxMIGFzIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBpcyBvbmx5XG42NzAxOlx0XHRcdCAqIGNhbGxlZCBmb3IgaW5vZGVzIGZvciB3aGljaCByZXN2X21hcHMgd2VyZSBjcmVhdGVkIChzZWVcbjY3MDI6XHRcdFx0ICogaHVnZXRsYmZzX2dldF9pbm9kZSkuXG42NzAzOlx0XHRcdCAqL1xuNjcwNDpcdFx0XHRyZXN2X21hcCA9IGlub2RlX3Jlc3ZfbWFwKGlub2RlKTtcbjY3MDU6XHRcbjY3MDY6XHRcdFx0Y2hnID0gcmVnaW9uX2NoZyhyZXN2X21hcCwgZnJvbSwgdG8sIFx1MDAyNnJlZ2lvbnNfbmVlZGVkKTtcbjY3MDc6XHRcdH0gZWxzZSB7XG42NzA4Olx0XHRcdC8qIFByaXZhdGUgbWFwcGluZy4gKi9cbjY3MDk6XHRcdFx0cmVzdl9tYXAgPSByZXN2X21hcF9hbGxvYygpO1xuNjcxMDpcdFx0XHRpZiAoIXJlc3ZfbWFwKSB7XG42NzExOlx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjY3MTI6XHRcdFx0XHRnb3RvIG91dF9lcnI7XG42NzEzOlx0XHRcdH1cbjY3MTQ6XHRcbjY3MTU6XHRcdFx0Y2hnID0gdG8gLSBmcm9tO1xuNjcxNjpcdFxuNjcxNzpcdFx0XHRzZXRfdm1hX3Jlc3ZfbWFwKHZtYSwgcmVzdl9tYXApO1xuNjcxODpcdFx0XHRzZXRfdm1hX3Jlc3ZfZmxhZ3Modm1hLCBIUEFHRV9SRVNWX09XTkVSKTtcbjY3MTk6XHRcdH1cbjY3MjA6XHRcbjY3MjE6XHRcdGlmIChjaGcgXHUwMDNjIDApIHtcbjY3MjI6XHRcdFx0LyogcmVnaW9uX2NoZygpIGFib3ZlIGNhbiByZXR1cm4gLUVOT01FTSAqL1xuNjcyMzpcdFx0XHRlcnIgPSAoY2hnID09IC1FTk9NRU0pID8gLUVOT01FTSA6IC1FSU5WQUw7XG42NzI0Olx0XHRcdGdvdG8gb3V0X2VycjtcbjY3MjU6XHRcdH1cbjY3MjY6XHRcbjY3Mjc6XHRcdGVyciA9IGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXG42NzI4Olx0XHRcdFx0XHRjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBcdTAwMjZoX2NnKTtcbjY3Mjk6XHRcdGlmIChlcnIgXHUwMDNjIDApXG42NzMwOlx0XHRcdGdvdG8gb3V0X2VycjtcbjY3MzE6XHRcbjY3MzI6XHRcdGlmICh2bWEgXHUwMDI2XHUwMDI2ICF2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpIFx1MDAyNlx1MDAyNiBoX2NnKSB7XG42NzMzOlx0XHRcdC8qIEZvciBwcml2YXRlIG1hcHBpbmdzLCB0aGUgaHVnZXRsYl9jZ3JvdXAgdW5jaGFyZ2UgaW5mbyBoYW5nc1xuNjczNDpcdFx0XHQgKiBvZiB0aGUgcmVzdl9tYXAuXG42NzM1Olx0XHRcdCAqL1xuNjczNjpcdFx0XHRyZXN2X21hcF9zZXRfaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfaW5mbyhyZXN2X21hcCwgaF9jZywgaCk7XG42NzM3Olx0XHR9XG42NzM4Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY0MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AuLi4gcmlnaHQsIHRoYXQmIzM5O3MgZmlybWx5IHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgYG1tL2h1Z2V0bGIuY2AuIEl0JiMzOTtzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhvc2UgY3J1Y2lhbCBodWdldGxiIHJlc2VydmF0aW9ucyB3aGVuZXZlciB3ZSYjMzk7cmUgZXN0YWJsaXNoaW5nIGEgaHVnZXRsYiBtYXBwaW5nLCB3aGV0aGVyIGl0JiMzOTtzIHRocm91Z2ggYG1tYXBgLCBgc2htZ2V0YCwgb3Igd2hhdGV2ZXIuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciBmb3IgdGhvc2UgZ2lhbnQgcGFnZXMuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcywgaXMgdGhpcyBmdW5jdGlvbmFsaXR5IGV2ZW4gKnJlbGV2YW50KiB0byBjb25zaWRlciBpbiBhIHR5cGljYWwgZW52aXJvbm1lbnQ/IE15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHllczsgaHVnZXRsYmZzIGlzIHByZXR0eSBtdWNoIHN0YW5kYXJkIGlzc3VlIGluIG1vZGVybiBMaW51eCBrZXJuZWxzLiBUaGUgS2NvbmZpZyBvcHRpb25zIGBDT05GSUdfSFVHRVRMQkZTYCBhbmQgYENPTkZJR19IVUdFVExCX1BBR0VgIGFyZSBwcmV0dHkgbXVjaCBhbHdheXMgZW5hYmxlZCBieSBkZWZhdWx0IGluIG1hbnkgZGlzdHJpYnV0aW9ucywgc28gaXQmIzM5O3MgYSBkZWZpbml0ZSBjb25zaWRlcmF0aW9uLiBBbHJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIGFjdHVhbGx5IGNoZWNrIHRob3NlIEtjb25maWcgb3B0aW9ucyB0byBnZXQgbW9yZSBvZiBhIHByZWNpc2UgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTY5ND1jb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcbi0tXG5tbS9LY29uZmlnLTY5Ni1cbm1tL0tjb25maWc6Njk3OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vS2NvbmZpZy02OTgtXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNjgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqSHVudGluZyBEb3duIHRoZSBIVUdFVExCIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgSFVHRVRMQmAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCBhIHByZXR0eSBzb2xpZCBvbmUsIGlzIHRvIGNoZWNrIHRoZSBjb3JlIGZpbGVzeXN0ZW0gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGZzL0tjb25maWdgIOKAkyBpdCYjMzk7cyB0aGUgZ2VuZXJhbCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24sIHNvIGl0JiMzOTtzIGEgbGlrZWx5IGNhbmRpZGF0ZS4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCBJJiMzOTtsbCBkcmlsbCBkb3duIGEgYml0IGRlZXBlciBpbnRvIGBmcy9odWdldGxiZnMvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5OyB0aGF0IHdvdWxkIG1ha2UgcGVyZmVjdCBzZW5zZSBzaW5jZSBpdCYjMzk7cyBkaXJlY3RseSByZWxhdGVkIHRvIGh1Z2UgcGFnZXMuIEZhaWxpbmcgdGhhdCwgSSYjMzk7bGwgZ28gc3RyYWlnaHQgdG8gYG1tL0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGFuZCBodWdlIHBhZ2VzIGFyZSwgd2VsbCwgaHVnZSBwYWdlcyEgSXQmIzM5O3MgcHJhY3RpY2FsbHkgZ3VhcmFudGVlZCB0byBiZSBpbiBvbmUgb2YgdGhvc2UgdGhyZWUgbG9jYXRpb25zLiBMZXQmIzM5O3MgZ2V0IHRvIHdvcmsgYW5kIGZpbmQgdGhlIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbmZzL0tjb25maWctMjY0LVx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcbmZzL0tjb25maWctMjcyLVxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI3Ni1cbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuZnMvS2NvbmZpZy0yNzgtXHRkZWZfYm9vbCBIVUdFVExCX1BBR0Vcbi0tXG5mcy9LY29uZmlnLTI4Mi1cbmZzL0tjb25maWc6MjgzOmNvbmZpZyBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcbmZzL0tjb25maWctMjg0LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NTUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBIdWdlIFBhZ2VzIENvbmZpZ3VyYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlnIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIEh1Z2VUTEJGUyBhbmQgdGhlIGBIVUdFVExCX1BBR0VgIG9wdGlvbi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgSFVHRVRMQkZTYCBpcyBhY3R1YWxseSBlbmFibGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGJvdGggZW5hYmxlZCwgYW5kIGZpbmQgd2hlcmUgdGhleSBhcmUgc2V0LiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIGp1bXAgaW50byBgZnMvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgc2V0dGluZ3MuIEFoYSEgTG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhIGBtZW51Y29uZmlnIEhVR0VUTEJGU2AgYW5kIGEgYGNvbmZpZyBIVUdFVExCX1BBR0VgIGVudHJ5LCB3aXRoIGBIVUdFVExCX1BBR0VgIHNldCBhcyBhIGBkZWZfYm9vbGAgYmFzZWQgb24gYEhVR0VUTEJGU2AuIFRoaXMgY29uZmlybXMgdGhleSYjMzk7cmUgaW50ZXJ0d2luZWQuIEluIG90aGVyIHdvcmRzLCBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBgSFVHRVRMQkZTYCBpcyBzZXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmlsaXR5IG9mIGh1Z2UgcGFnZXMuCgpOb3csIGEgY3JpdGljYWwgbmV4dCBzdGVwIGlzIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHNldHRpbmdzIGFyZSBhY3R1YWxseSAqdXNlZCouIEkgbmVlZCB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlc2UgY29uZmlnIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIGltcGxlbWVudGF0aW9uIGZvciBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCB3aWxsIGJlIGluZm9ybWF0aXZlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgcGljdHVyZSBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGh1Z2UgcGFnZXMgd2hlbiB0aGVzZSBvcHRpb25zIGFyZSBib3RoIHNldC4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbiwgYXMgdGhhdCB3aWxsIGxldCBtZSB1bmRlcnN0YW5kIHdoZXJlIHRoZSBodWdlIHBhZ2UgYWxsb2NhdGlvbiBsb2dpYyBpcyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBtZSB3b3JrIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBlaXRoZXIgb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX3Jlc2VydmVfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xMDI9Y3JlYXRlZCAoc2htZ2V0KFNITV9IVUdFVExCKSkgb3IgYSBtYXBwaW5nIGlzIGNyZWF0ZWQgdmlhIG1tYXAoTUFQX0hVR0VUTEIpLlxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxMDM6VGhlc2Ugb3BlcmF0aW9ucyByZXN1bHQgaW4gYSBjYWxsIHRvIHRoZSByb3V0aW5lIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpOjpcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTA0LVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxMDU6XHRpbnQgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTEwNi1cdFx0XHRcdCAgbG9uZyBmcm9tLCBsb25nIHRvLFxuLS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTA5LVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxMTA6VGhlIGZpcnN0IHRoaW5nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpIGRvZXMgaXMgY2hlY2sgaWYgdGhlIE5PUkVTRVJWRVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMTEtZmxhZyB3YXMgc3BlY2lmaWVkIGluIGVpdGhlciB0aGUgc2htZ2V0KCkgb3IgbW1hcCgpIGNhbGwuICBJZiBOT1JFU0VSVkVcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTEyMj1pbiB3aGljaCByZXNlcnZhdGlvbnMgYXJlIHJlcHJlc2VudGVkIGluIHRoZSByZXNlcnZhdGlvbiBtYXAuXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMzItXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjEzMzpGb3IgcHJpdmF0ZSBtYXBwaW5ncywgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCkgY3JlYXRlcyB0aGUgcmVzZXJ2YXRpb24gbWFwIGFuZFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMzQtaGFuZ3MgaXQgb2ZmIHRoZSBWTUEgc3RydWN0dXJlLiAgSW4gYWRkaXRpb24sIHRoZSBIUEFHRV9SRVNWX09XTkVSIGZsYWcgaXMgc2V0XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xNjk9ZW50cnkgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzLlxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNzAtXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE3MTpJZiBodWdldGxiX3Jlc2VydmVfcGFnZXMoKSB3YXMgc3VjY2Vzc2Z1bCwgdGhlIGdsb2JhbCByZXNlcnZhdGlvbiBjb3VudCBhbmRcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTcyLXJlc2VydmF0aW9uIG1hcCBhc3NvY2lhdGVkIHdpdGggdGhlIG1hcHBpbmcgd2lsbCBiZSBtb2RpZmllZCBhcyByZXF1aXJlZCB0b1xuLS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MjQ5PWNhbGwgdG8gdm1hX2NvbW1pdF9yZXNlcnZhdGlvbigpIGFmdGVyIHRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkLiAgVGhpcyB3b3VsZFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyNTA6YmUgcG9zc2libGUgaWYgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIHdhcyBjYWxsZWQgZm9yIHRoZSBzYW1lIHBhZ2UgaW4gYSBzaGFyZWRcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjUxLW1hcHBpbmcuICBJbiBzdWNoIGNhc2VzLCB0aGUgcmVzZXJ2YXRpb24gY291bnQgYW5kIHN1YnBvb2wgZnJlZSBwYWdlIGNvdW50XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9NzI9UGFnZSBGbGFnc1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTkzLeW9k+WIm+W7uuS4gOS4quW3qOWkp+eahOaciemhtemdouaUr+aMgeeahOWFseS6q+WGheWtmOaute+8iHNobWdldChTSE1fSFVHRVRMQinvvInmiJbpgJrov4dtbWFwKE1BUF9IVUdFVExCKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6OTQ65Yib5bu65LiA5Liq5pig5bCE5pe277yM5bCx5Lya5Yib5bu66aKE55WZ44CC6L+Z5Lqb5pON5L2c5Lya5a+86Ie05a+55Ye95pWwaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCnnmoTosIPnlKg6OlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtOTUtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo5NjpcdGludCBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTk3LVx0XHRcdFx0ICBsb25nIGZyb20sIGxvbmcgdG8sXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTAwLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTAxOmh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygp5YGa55qE56ys5LiA5Lu25LqL5piv5qOA5p+l5Zyo6LCD55Soc2htZ2V0KCnmiJZtbWFwKCnml7bmmK/lkKbmjIflrprkuoZOT1JFU0VSVkVcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTEwMi3moIflv5fjgILlpoLmnpzmjIflrprkuoZOT1JFU0VSVkXvvIzpgqPkuYjov5nkuKrlh73mlbDnq4vljbPov5Tlm57vvIzlm6DkuLrkuI3pnIDopoHpooTnlZnjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xMDg9UFJJVkFUReWSjFNIQVJFROaYoOWwhOS5i+mXtOeahOS4gOS4quW+iOWkp+eahOWMuuWIq+aYr+mihOeVmeWcqOmihOeVmeaYoOWwhOS4reeahOihqOekuuaWueW8j+OAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTExNC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjExNTrlr7nkuo7np4HmnInmmKDlsITvvIxodWdldGxiX3Jlc2VydmVfcGFnZXMoKeWIm+W7uumihOeVmeaYoOWwhOW5tuWwhuWFtuaMguWcqFZNQee7k+aehOS9k+S4iuOAguatpOWklu+8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTE2LUhQQUdFX1JFU1ZfT1dORVLmoIflv5fooqvorr7nva7vvIzku6XooajmmI7or6VWTUHmi6XmnInpooTnlZnjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMzktXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNDA65aaC5p6caHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCnmiJDlip/vvIzlhajlsYDpooTnlZnmlbDlkozkuI7mmKDlsITnm7jlhbPnmoTpooTnlZnmmKDlsITlsIbmoLnmja7pnIDopoHooqvkv67mlLnvvIzku6Xnoa7kv51cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0MS3lnKgmIzM5O2Zyb20mIzM5Oy0mIzM5O3RvJiMzOTvojIPlm7TlhoXlrZjlnKjpooTnlZnjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xOTM9U2V0UGFnZVByaXZhdGUocGFnZSnlkoxyZXN2X2h1Z2VfcGFnZXMt44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjAzLeWcqGFsbG9jX2h1Z2V0bGJfZm9saW8oKeW8gOWni+iwg+eUqHZtYV9uZWVkc19yZXNlcnZhdGlvbigp5ZKM6aG16Z2i5YiG6YWN5ZCO6LCD55SoXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyMDQ6dm1hX2NvbW1pdF9yZXNlcnZhdGlvbigp5LmL6Ze077yM6aKE55WZ5pig5bCE5pyJ5Y+v6IO96KKr5pS55Y+Y44CC5aaC5p6caHVnZXRsYl9yZXNlcnZlX3BhZ2Vz5Zyo5YWxXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDUt5Lqr5pig5bCE5Lit5Li65ZCM5LiA6aG16Z2i6KKr6LCD55So77yM6L+Z5bCG5piv5Y+v6IO955qE44CC5Zyo6L+Z56eN5oOF5Ya15LiL77yM6aKE55WZ6K6h5pWw5ZKM5a2Q5rGg56m66Zey6aG16K6h5pWw5Lya5pyJ5LiA5Liq5YGP5beu44CCXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9OTk9c3RhdGljIGludCBodWdldGxiZnNfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTItXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTM6XHRpZiAoaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKGlub2RlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU0LVx0XHRcdFx0dm1hLVx1MDAzZXZtX3Bnb2ZmIFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfb3JkZXIoaCksXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTQ4ND1zdGF0aWMgaW50IGdldF9oc3RhdGVfaWR4KGludCBwYWdlX3NpemVfbG9nKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0OTQtICogTm90ZSB0aGF0IHNpemUgc2hvdWxkIGJlIGFsaWduZWQgdG8gcHJvcGVyIGh1Z2VwYWdlIHNpemUgaW4gY2FsbGVyIHNpZGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDk1OiAqIG90aGVyd2lzZSBodWdldGxiX3Jlc2VydmVfcGFnZXMgcmVzZXJ2ZXMgb25lIGxlc3MgaHVnZXBhZ2VzIHRoYW4gaW50ZW5kZWQuXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDk2LSAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTQ5Nz1zdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MzYtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTM3Olx0aWYgKGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSwgMCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MzgtXHRcdFx0c2l6ZSBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGhzdGF0ZV9pbm9kZShpbm9kZSkpLCBOVUxMLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTE0ND1pbnQgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlKHB0ZV90ICpkc3RfcHRlLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTE1MC0jZW5kaWYgLyogQ09ORklHX1VTRVJGQVVMVEZEICovXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxNTE6bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBmcm9tLCBsb25nIHRvLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTUyLVx0XHRcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpO1xuLS1cbm1tL2h1Z2V0bGIuYz0yOTM5PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzA0MC1cdFx0ICogdm1hX25lZWRzX3Jlc2VydmF0aW9uIGFuZCB2bWFfY29tbWl0X3Jlc2VydmF0aW9uLlxubW0vaHVnZXRsYi5jOjMwNDE6XHRcdCAqIFRoaXMgaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcy5cbm1tL2h1Z2V0bGIuYy0zMDQyLVx0XHQgKiBBZGp1c3QgZm9yIHRoZSBzdWJwb29sIGNvdW50IGluY3JlbWVudGVkIGFib3ZlIEFORFxubW0vaHVnZXRsYi5jOjMwNDM6XHRcdCAqIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBmb3IgdGhlIHNhbWUgcGFnZS5cdEFsc28sXG5tbS9odWdldGxiLmM6MzA0NDpcdFx0ICogdGhlIHJlc2VydmF0aW9uIGNvdW50IGFkZGVkIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1xubW0vaHVnZXRsYi5jLTMwNDUtXHRcdCAqIG5vIGxvbmdlciBhcHBsaWVzLlxuLS1cbm1tL2h1Z2V0bGIuYz02NDgzPWxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNjY1OC1cbm1tL2h1Z2V0bGIuYzo2NjU5OmxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5tbS9odWdldGxiLmMtNjY2MC1cdFx0bG9uZyBmcm9tLCBsb25nIHRvLFxuLS1cbm1tL2h1Z2V0bGIuYy02Njk5LVx0XHQvKlxubW0vaHVnZXRsYi5jOjY3MDA6XHRcdCAqIHJlc3ZfbWFwIGNhbiBub3QgYmUgTlVMTCBhcyBodWdldGxiX3Jlc2VydmVfcGFnZXMgaXMgb25seVxubW0vaHVnZXRsYi5jLTY3MDEtXHRcdCAqIGNhbGxlZCBmb3IgaW5vZGVzIGZvciB3aGljaCByZXN2X21hcHMgd2VyZSBjcmVhdGVkIChzZWVcbi0tXG5tbS9tZW1mZC5jPTY4PXN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbi0tXG5tbS9tZW1mZC5jLTg5LVxubW0vbWVtZmQuYzo5MDpcdFx0bnJfcmVzdiA9IGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggJiM0MzsgMSwgTlVMTCwgRU1QVFlfVk1BX0ZMQUdTKTtcbm1tL21lbWZkLmMtOTEtXHRcdGlmIChucl9yZXN2IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUwNQoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiAxNTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBIdWdldGxiIFJlc2VydmUgUGFnZXMgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgYnVnOiBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSB2dWxuZXJhYmlsaXR5IHdpdGhpbiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCBpbiBgbW0vaHVnZXRsYi5jYC4gVGhlIHJvb3QgY2F1c2Ugc3RlbXMgZnJvbSBhbiBpbmNvcnJlY3Qgb3JkZXIgb2Ygb3BlcmF0aW9ucyBkdXJpbmcgZXJyb3IgcmVjb3ZlcnksIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBgaHVnZXBhZ2Vfc3VicG9vbGAgc3RydWN0dXJlcy4gTG9va2luZyBhdCB0aGUgY29kZSwgdGhlIG9yaWdpbmFsIHNlcXVlbmNlIGhhZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgIHBvdGVudGlhbGx5IGZyZWVpbmcgdGhlIGBzcG9vbGAgc3RydWN0dXJlIChpZiBpdHMgY291bnQgYW5kIHVzZWQgcGFnZXMgcmVhY2hlZCB6ZXJvKSAqYmVmb3JlKiB0aGUgY29kZSByZXN0b3JlZCB0aGUgYHVzZWRfaHBhZ2VzYCB2YWx1ZSBvZiB0aGUgYHNwb29sYC4gVGhpcyBtZWFucyB0aGF0IGFmdGVyd2FyZHMsIHdlIHdlcmUgYWNjZXNzaW5nIGZyZWVkIG1lbW9yeSBpbiBgc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgZmxhZ3MpO2AgYW5kIHRoZW4gYHNwb29sLSZndDt1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtgIHdoaWNoIGxlYWRzIHRvIGEgdXNlIGFmdGVyIGZyZWUgYnVnLiBUaGUgZml4IGludm9sdmVzIHNpbXBseSByZW9yZGVyaW5nIHRoZSBvcGVyYXRpb25zIHRvIGNvcnJlY3RseSByZXN0b3JlIGBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXNgICpiZWZvcmUqIHBvdGVudGlhbGx5IGZyZWVpbmcgdGhlIGBzcG9vbGAsIGF2b2lkaW5nIHRoZSBVQUYgY29uZGl0aW9uLgoKVGhlIHJlYWNoIGlzIHNpZ25pZmljYW50LiBUaGlzIHBhdGNoIGlzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AuICBUaGlzIGFyZWEgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHN0YW5kYXJkIHN5c3RlbSBjYWxscyBsaWtlIGBtbWFwKE1BUF9IVUdFVExCKWAsIGBzaG1nZXQoU0hNX0hVR0VUTEIpYCwgYG1lbWZkX2NyZWF0ZShNRkRfSFVHRVRMQilgLCBhbmQgb3BlcmF0aW9ucyB3aXRoIHRoZSBgaHVnZXRsYmZzYCBmaWxlIHN5c3RlbS4gIEl0IGlzIHdvcnRoIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHBvaW50cyBmb3IgZnV6emluZyBhcmUgZ29pbmcgdG8gYmUgb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgYnVnLCBhbmQgdGhlaXIgcmVsYXRlZCBmdW5jdGlvbnMsIHNvOiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCwgYGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzYCwgYW5kIGBodWdldGxiZnNfZmlsZV9tbWFwYC4KCkkmIzM5O3ZlIGNoZWNrZWQgdGhlIHN5bWJvbCB2aXNpYmlsaXR5LiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCBpcyBhIGdsb2JhbCwgbm9uLXN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZ29vZCBmb3IgZnV6emluZy4gYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBpcyBzdGF0aWMgYnV0IHN0aWxsIHJlYWNoYWJsZSBiZWNhdXNlIGl0IGlzIGNhbGxlZCBpbiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYC4KClRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBhbHNvIHN0cmFpZ2h0Zm9yd2FyZC4gV2UmIzM5O2xsIG5lZWQgYEhVR0VUTEJGU2AgYW5kIGBIVUdFVExCX1BBR0VgLiBJdCBsb29rcyBsaWtlIGBIVUdFVExCX1BBR0VgIGlzIHNlbGVjdGVkIGJ5IGBIVUdFVExCRlNgIGluIHRoZSBLY29uZmlnLgoKSW4gc3VtbWFyeSwgdGhpcyBpcyBhIHByb21pc2luZyB0YXJnZXQuIFRoZSBmaXggcHJldmVudHMgYSBVQUYgdnVsbmVyYWJpbGl0eSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGVhc2lseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHN5c3RlbSBjYWxscyBhbmQgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucy4KCldvcnRoRnV6emluZzogVHJ1ZQpSZWFzb25pbmc6IFRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIHRvIHByZXZlbnQgVUFGIG9uIHRoZSBgaHVnZXBhZ2Vfc3VicG9vbGAgc3RydWN0dXJlLiBJdCYjMzk7cyBpbiByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIGBtbS9odWdldGxiLmNgLCBhbmQgY2FuIGJlIGV4ZXJjaXNlZCB0aHJvdWdoIGBodWdldGxiZnNgLCBgbW1hcGAsIGBtZW1mZF9jcmVhdGVgLCBvciBgc2htZ2V0YC4KCkZvY3VzU3ltYm9sczogYFsmIzM0O2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyYjMzQ7LCAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssICYjMzQ7aHVnZXRsYl91bnJlc2VydmVfcGFnZXMmIzM0OywgJiMzNDtodWdldGxiZnNfZmlsZV9tbWFwJiMzNDtdYApFbmFibGVDb25maWdzOiBgWyYjMzQ7SFVHRVRMQkZTJiMzNDssICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDtdYAoKQWxyaWdodCwgc2VlbXMgcHJldHR5IHNvbGlkLiBMZXQmIzM5O3MgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX3Jlc2VydmVfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXRsYmZzX2ZpbGVfbW1hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgdGVhcmRvd24gb3JkZXJpbmcgaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCkgaW4gbW0vaHVnZXRsYi5jIHRvIHJlc3RvcmUgdXNlZF9ocGFnZXMgYmVmb3JlIHB1dHRpbmcgc3VicG9vbCByZXNlcnZhdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBleGVyY2lzZWQgd2hlbiBodWdldGxiIHJlc2VydmF0aW9ucyBmYWlsIG9yIHJhY2UgZHVyaW5nIG1tYXAsIG1lbWZkX2NyZWF0ZSwgb3Igc2htZ2V0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmc19maWxlX21tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHRlYXJkb3duIG9yZGVyaW5nIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpIGluIG1tL2h1Z2V0bGIuYyB0byByZXN0b3JlIHVzZWRfaHBhZ2VzIGJlZm9yZSBwdXR0aW5nIHN1YnBvb2wgcmVzZXJ2YXRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhlcmNpc2VkIHdoZW4gaHVnZXRsYiByZXNlcnZhdGlvbnMgZmFpbCBvciByYWNlIGR1cmluZyBtbWFwLCBtZW1mZF9jcmVhdGUsIG9yIHNobWdldC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlb3JkZXJzIGVycm9yLXBhdGggY2xlYW51cHMgaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCB0byBwcmV2ZW50IGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgLyBkb3VibGUtZnJlZSBjb25kaXRpb24gd2hlcmUgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKClgIGNvdWxkIHJlbGVhc2UgYW5kIGZyZWUgYHNwb29sYCB2aWEgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woKWAsIGZvbGxvd2VkIGJ5IGEgc3Vic2VxdWVudCBhY2Nlc3MgdG8gYHNwb29sYCBpbiB0aGUgYGlmIChnYmxfcmVzZXJ2ZSBcdTAwMjZcdTAwMjYgc3Bvb2wpYCBibG9jay5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljLiBUaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCBpcyBhIG1lbW9yeSBsaWZldGltZSAvIFVBRiBpc3N1ZSwgd2hpY2ggaXMgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ODJkNTQ4ZWU1YmU4NjFiNTFmMmU2ZDY1Njc3YjA1YmU1MTdkYWFjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxODoyMTo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA3ODU3NzI4NDU3OTUyLi4zZTNjZGExODFlNzI0IDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC02ODA4LDE1ICYjNDM7NjgwOCw2IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIG91dF9wdXRfcGFnZXM6CiAJc3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlOwotCWlmIChzcG9vbF9yZXN2KSB7Ci0JCS8qIHB1dCBzdWIgcG9vbCYjMzk7cyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqLwotCQlnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTsKLQkJLyoKLQkJICogc3VicG9vbCYjMzk7cyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLAotCQkgKiByZXR1cm4gdG8gaHN0YXRlLgotCQkgKi8KLQkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpOwotCX0KIAkvKiBSZXN0b3JlIHVzZWRfaHBhZ2VzIGZvciBwYWdlcyB0aGF0IGZhaWxlZCBnbG9iYWwgcmVzZXJ2YXRpb24gKi8KIAlpZiAoZ2JsX3Jlc2VydmUgJmFtcDsmYW1wOyBzcG9vbCkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjgyNiw2ICYjNDM7NjgxNywxNSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlOwogCQl1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7CiAJfQomIzQzOwlpZiAoc3Bvb2xfcmVzdikgewomIzQzOwkJLyogcHV0IHN1YiBwb29sJiMzOTtzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovCiYjNDM7CQlnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBzdWJwb29sJiMzOTtzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsCiYjNDM7CQkgKiByZXR1cm4gdG8gaHN0YXRlLgomIzQzOwkJICovCiYjNDM7CQlodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7CiYjNDM7CX0KIG91dF91bmNoYXJnZV9jZ3JvdXA6CiAJaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoaHN0YXRlX2luZGV4KGgpLAogCQkJCQkgICAgY2hnICogcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgaF9jZyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDEyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBhbmQgU3Vycm91bmRpbmdzIGluIG1tL2h1Z2V0bGIuYyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoaXMgcHJvcG9zZWQgcGF0Y2ggYW5kIGl0cyBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHRob3JvdWdoIGNvZGUgYW5hbHlzaXMgdXNpbmcgbXkgcHJlZmVycmVkIHRvb2xzLiBJIHdhbnQgdG8gc2VlIHRoZSBjb21wbGV0ZSBjb250ZXh0LCBub3QganVzdCB0aGUgaXNvbGF0ZWQgY2hhbmdlcywgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgY2xvc2UgaW5zcGVjdGlvbiBvZiBgbW0vaHVnZXRsYi5jYCBhcm91bmQgbGluZSA2ODA4LiBUaGlzIHNwZWNpZmljIGxvY2F0aW9uIGlzIG9idmlvdXNseSBjZW50cmFsIHRvIHRoZSBwYXRjaCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgaW1tZWRpYXRlIGVudmlyb25tZW50IHdpbGwgYmUgZXNzZW50aWFsLiBUaGlzIHdpbGwgaW52b2x2ZSB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlIG1vZGlmaWVkIGNvZGUgd2l0aCB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY3ODA6XHRcdFx0XHQgKiBpbmRpY2F0ZXMgYSByYWNlIHdpdGggYWxsb2NfaHVnZXRsYl9mb2xpby4gIEFkanVzdFxuNjc4MTpcdFx0XHRcdCAqIHRoZSBzdWJwb29sIGFuZCByZXNlcnZlIGNvdW50cyBtb2RpZmllZCBhYm92ZVxuNjc4MjpcdFx0XHRcdCAqIGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlLlxuNjc4MzpcdFx0XHRcdCAqL1xuNjc4NDpcdFx0XHRcdGxvbmcgcnN2X2FkanVzdDtcbjY3ODU6XHRcbjY3ODY6XHRcdFx0XHQvKlxuNjc4NzpcdFx0XHRcdCAqIGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKCkgd2lsbCBwdXQgdGhlXG42Nzg4Olx0XHRcdFx0ICogcmVmZXJlbmNlIHRvIGhfY2ctXHUwMDNlY3NzLiBTZWUgY29tbWVudCBiZWxvdyBmb3IgZGV0YWlsLlxuNjc4OTpcdFx0XHRcdCAqL1xuNjc5MDpcdFx0XHRcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKFxuNjc5MTpcdFx0XHRcdFx0aHN0YXRlX2luZGV4KGgpLFxuNjc5MjpcdFx0XHRcdFx0KGNoZyAtIGFkZCkgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcbjY3OTM6XHRcbjY3OTQ6XHRcdFx0XHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsXG42Nzk1Olx0XHRcdFx0XHRcdFx0XHRcdGNoZyAtIGFkZCk7XG42Nzk2Olx0XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtcnN2X2FkanVzdCk7XG42Nzk3Olx0XHRcdH0gZWxzZSBpZiAoaF9jZykge1xuNjc5ODpcdFx0XHRcdC8qXG42Nzk5Olx0XHRcdFx0ICogVGhlIGZpbGVfcmVnaW9ucyB3aWxsIGhvbGQgdGhlaXIgb3duIHJlZmVyZW5jZSB0b1xuNjgwMDpcdFx0XHRcdCAqIGhfY2ctXHUwMDNlY3NzLiBTbyB3ZSBzaG91bGQgcmVsZWFzZSB0aGUgcmVmZXJlbmNlIGhlbGRcbjY4MDE6XHRcdFx0XHQgKiB2aWEgaHVnZXRsYl9jZ3JvdXBfY2hhcmdlX2Nncm91cF9yc3ZkKCkgd2hlbiB3ZSBhcmVcbjY4MDI6XHRcdFx0XHQgKiBkb25lLlxuNjgwMzpcdFx0XHRcdCAqL1xuNjgwNDpcdFx0XHRcdGh1Z2V0bGJfY2dyb3VwX3B1dF9yc3ZkX2Nncm91cChoX2NnKTtcbjY4MDU6XHRcdFx0fVxuNjgwNjpcdFx0fVxuNjgwNzpcdFx0cmV0dXJuIGNoZztcbjY4MDg6XHRcbjY4MDk6XHRvdXRfcHV0X3BhZ2VzOlxuNjgxMDpcdFx0c3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlO1xuNjgxMTpcdFx0LyogUmVzdG9yZSB1c2VkX2hwYWdlcyBmb3IgcGFnZXMgdGhhdCBmYWlsZWQgZ2xvYmFsIHJlc2VydmF0aW9uICovXG42ODEyOlx0XHRpZiAoZ2JsX3Jlc2VydmUgXHUwMDI2XHUwMDI2IHNwb29sKSB7XG42ODEzOlx0XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG42ODE0Olx0XG42ODE1Olx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbjY4MTY6XHRcdFx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXG42ODE3Olx0XHRcdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7XG42ODE4Olx0XHRcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbjY4MTk6XHRcdH1cbjY4MjA6XHRcdGlmIChzcG9vbF9yZXN2KSB7XG42ODIxOlx0XHRcdC8qIHB1dCBzdWIgcG9vbCYjMzk7cyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqL1xuNjgyMjpcdFx0XHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTtcbjY4MjM6XHRcdFx0LypcbjY4MjQ6XHRcdFx0ICogc3VicG9vbCYjMzk7cyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxuNjgyNTpcdFx0XHQgKiByZXR1cm4gdG8gaHN0YXRlLlxuNjgyNjpcdFx0XHQgKi9cbjY4Mjc6XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xuNjgyODpcdFx0fVxuNjgyOTpcdG91dF91bmNoYXJnZV9jZ3JvdXA6XG42ODMwOlx0XHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXG42ODMxOlx0XHRcdFx0XHRcdCAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcbjY4MzI6XHRvdXRfZXJyOlxuNjgzMzpcdFx0aHVnZXRsYl92bWFfbG9ja19mcmVlKHZtYSk7XG42ODM0Olx0XHRpZiAoIXZtYSB8fCB2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKVxuNjgzNTpcdFx0XHQvKiBPbmx5IGNhbGwgcmVnaW9uX2Fib3J0IGlmIHRoZSByZWdpb25fY2hnIHN1Y2NlZWRlZCBidXQgdGhlXG42ODM2Olx0XHRcdCAqIHJlZ2lvbl9hZGQgZmFpbGVkIG9yIGRpZG4mIzM5O3QgcnVuLlxuNjgzNzpcdFx0XHQgKi9cbjY4Mzg6XHRcdFx0aWYgKGNoZyBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGFkZCBcdTAwM2MgMClcbjY4Mzk6XHRcdFx0XHRyZWdpb25fYWJvcnQocmVzdl9tYXAsIGZyb20sIHRvLCByZWdpb25zX25lZWRlZCk7XG42ODQwOlx0XHRpZiAodm1hIFx1MDAyNlx1MDAyNiBpc192bWFfcmVzdl9zZXQodm1hLCBIUEFHRV9SRVNWX09XTkVSKSkge1xuNjg0MTpcdFx0XHRrcmVmX3B1dChcdTAwMjZyZXN2X21hcC1cdTAwM2VyZWZzLCByZXN2X21hcF9yZWxlYXNlKTtcbjY4NDI6XHRcdFx0c2V0X3ZtYV9yZXN2X21hcCh2bWEsIE5VTEwpO1xuNjg0MzpcdFx0fVxuNjg0NDpcdFx0cmV0dXJuIGVycjtcbjY4NDU6XHR9XG42ODQ2Olx0XG42ODQ3Olx0bG9uZyBodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIHN0YXJ0LCBsb25nIGVuZCxcbjY4NDg6XHRcdFx0XHRcdFx0XHRcdFx0bG9uZyBmcmVlZClcbjY4NDk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzZWVuIHNuaXBwZXRzIG9mIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGFuZCBub3cgSSBuZWVkIHRvIGZsZXNoIG91dCBleGFjdGx5IGhvdyB0aGlzIHJvdXRpbmUgd29ya3MuIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIHRoZSBjZW50cmFsIGxvZ2ljIGZvciBhY3R1YWxseSBjbGFpbWluZyBodWdlcGFnZXMgZm9yIGEgdXNlciwgb3IgYSBwcm9jZXNzLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgY29udHJvbCBmbG93IGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbiwgYWNjb3VudGluZywgYW5kIG1heWJlIGV2ZW4gTlVNQSBjb25zaWRlcmF0aW9ucy4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGl0IHVzZXMsIHRoZSBlcnJvciBoYW5kbGluZywgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHJlc291cmNlIGV4aGF1c3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byB3aGVyZSBpdCBtaWdodCB0b3VjaCB0aGUgZ2xvYmFsIHBhZ2UgdGFibGVzLCBhbmQgaG93IHRoZSByZXNlcnZhdGlvbnMgY2FzY2FkZSAob3IgZG9uJiMzOTt0KSBhY3Jvc3MgZGlmZmVyZW50IHByb2Nlc3NlcyBvciBjb250ZXh0cy4gSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZyBjaGVja2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGV2YWx1YXRpbmcgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBvbiBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSB3aGVuIHJ1bm5pbmcgdGhpcyBmdW5jdGlvbiBpbiBwYXJhbGxlbCwgZm9yIGluc3RhbmNlLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSByZWFsbHkgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW50aXJlIHJlc2VydmUgYW5kIHJlbGVhc2UgbGlmZWN5Y2xlIHRvIGFudGljaXBhdGUgYW55IHBvc3NpYmxlIGVkZ2UgY2FzZXMsIGFuZCBhcmVhcyB0byBwb3RlbnRpYWxseSBvcHRpbWl6ZS4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDY1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY3MjA6XHRcbjY3MjE6XHRcdGlmIChjaGcgXHUwMDNjIDApIHtcbjY3MjI6XHRcdFx0LyogcmVnaW9uX2NoZygpIGFib3ZlIGNhbiByZXR1cm4gLUVOT01FTSAqL1xuNjcyMzpcdFx0XHRlcnIgPSAoY2hnID09IC1FTk9NRU0pID8gLUVOT01FTSA6IC1FSU5WQUw7XG42NzI0Olx0XHRcdGdvdG8gb3V0X2VycjtcbjY3MjU6XHRcdH1cbjY3MjY6XHRcbjY3Mjc6XHRcdGVyciA9IGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXG42NzI4Olx0XHRcdFx0XHRjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBcdTAwMjZoX2NnKTtcbjY3Mjk6XHRcdGlmIChlcnIgXHUwMDNjIDApXG42NzMwOlx0XHRcdGdvdG8gb3V0X2VycjtcbjY3MzE6XHRcbjY3MzI6XHRcdGlmICh2bWEgXHUwMDI2XHUwMDI2ICF2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpIFx1MDAyNlx1MDAyNiBoX2NnKSB7XG42NzMzOlx0XHRcdC8qIEZvciBwcml2YXRlIG1hcHBpbmdzLCB0aGUgaHVnZXRsYl9jZ3JvdXAgdW5jaGFyZ2UgaW5mbyBoYW5nc1xuNjczNDpcdFx0XHQgKiBvZiB0aGUgcmVzdl9tYXAuXG42NzM1Olx0XHRcdCAqL1xuNjczNjpcdFx0XHRyZXN2X21hcF9zZXRfaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfaW5mbyhyZXN2X21hcCwgaF9jZywgaCk7XG42NzM3Olx0XHR9XG42NzM4Olx0XG42NzM5Olx0XHQvKlxuNjc0MDpcdFx0ICogVGhlcmUgbXVzdCBiZSBlbm91Z2ggcGFnZXMgaW4gdGhlIHN1YnBvb2wgZm9yIHRoZSBtYXBwaW5nLiBJZlxuNjc0MTpcdFx0ICogdGhlIHN1YnBvb2wgaGFzIGEgbWluaW11bSBzaXplLCB0aGVyZSBtYXkgYmUgc29tZSBnbG9iYWxcbjY3NDI6XHRcdCAqIHJlc2VydmF0aW9ucyBhbHJlYWR5IGluIHBsYWNlIChnYmxfcmVzZXJ2ZSkuXG42NzQzOlx0XHQgKi9cbjY3NDQ6XHRcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7XG42NzQ1Olx0XHRpZiAoZ2JsX3Jlc2VydmUgXHUwMDNjIDApIHtcbjY3NDY6XHRcdFx0ZXJyID0gZ2JsX3Jlc2VydmU7XG42NzQ3Olx0XHRcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcbjY3NDg6XHRcdH1cbjY3NDk6XHRcbjY3NTA6XHRcdC8qXG42NzUxOlx0XHQgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi5cbjY3NTI6XHRcdCAqIEhhbmQgdGhlIHBhZ2VzIGJhY2sgdG8gdGhlIHN1YnBvb2wgaWYgdGhlcmUgYXJlIG5vdFxuNjc1MzpcdFx0ICovXG42NzU0Olx0XHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTtcbjY3NTU6XHRcdGlmIChlcnIgXHUwMDNjIDApXG42NzU2Olx0XHRcdGdvdG8gb3V0X3B1dF9wYWdlcztcbjY3NTc6XHRcbjY3NTg6XHRcdC8qXG42NzU5Olx0XHQgKiBBY2NvdW50IGZvciB0aGUgcmVzZXJ2YXRpb25zIG1hZGUuIFNoYXJlZCBtYXBwaW5ncyByZWNvcmQgcmVnaW9uc1xuNjc2MDpcdFx0ICogdGhhdCBoYXZlIHJlc2VydmF0aW9ucyBhcyB0aGV5IGFyZSBzaGFyZWQgYnkgbXVsdGlwbGUgVk1Bcy5cbjY3NjE6XHRcdCAqIFdoZW4gdGhlIGxhc3QgVk1BIGRpc2FwcGVhcnMsIHRoZSByZWdpb24gbWFwIHNheXMgaG93IG11Y2hcbjY3NjI6XHRcdCAqIHRoZSByZXNlcnZhdGlvbiB3YXMgYW5kIHRoZSBwYWdlIGNhY2hlIHRlbGxzIGhvdyBtdWNoIG9mXG42NzYzOlx0XHQgKiB0aGUgcmVzZXJ2YXRpb24gd2FzIGNvbnN1bWVkLiBQcml2YXRlIG1hcHBpbmdzIGFyZSBwZXItVk1BIGFuZFxuNjc2NDpcdFx0ICogb25seSB0aGUgY29uc3VtZWQgcmVzZXJ2YXRpb25zIGFyZSB0cmFja2VkLiBXaGVuIHRoZSBWTUFcbjY3NjU6XHRcdCAqIGRpc2FwcGVhcnMsIHRoZSBvcmlnaW5hbCByZXNlcnZhdGlvbiBpcyB0aGUgVk1BIHNpemUgYW5kIHRoZVxuNjc2NjpcdFx0ICogY29uc3VtZWQgcmVzZXJ2YXRpb25zIGFyZSBzdG9yZWQgaW4gdGhlIG1hcC4gSGVuY2UsIG5vdGhpbmdcbjY3Njc6XHRcdCAqIGVsc2UgaGFzIHRvIGJlIGRvbmUgZm9yIHByaXZhdGUgbWFwcGluZ3MgaGVyZVxuNjc2ODpcdFx0ICovXG42NzY5Olx0XHRpZiAoIXZtYSB8fCB2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKSB7XG42NzcwOlx0XHRcdGFkZCA9IHJlZ2lvbl9hZGQocmVzdl9tYXAsIGZyb20sIHRvLCByZWdpb25zX25lZWRlZCwgaCwgaF9jZyk7XG42NzcxOlx0XG42NzcyOlx0XHRcdGlmICh1bmxpa2VseShhZGQgXHUwMDNjIDApKSB7XG42NzczOlx0XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuNjc3NDpcdFx0XHRcdGVyciA9IGFkZDtcbjY3NzU6XHRcdFx0XHRnb3RvIG91dF9wdXRfcGFnZXM7XG42Nzc2Olx0XHRcdH0gZWxzZSBpZiAodW5saWtlbHkoY2hnIFx1MDAzZSBhZGQpKSB7XG42Nzc3Olx0XHRcdFx0LypcbjY3Nzg6XHRcdFx0XHQgKiBwYWdlcyBpbiB0aGlzIHJhbmdlIHdlcmUgYWRkZWQgdG8gdGhlIHJlc2VydmVcbjY3Nzk6XHRcdFx0XHQgKiBtYXAgYmV0d2VlbiByZWdpb25fY2hnIGFuZCByZWdpb25fYWRkLiAgVGhpc1xuNjc4MDpcdFx0XHRcdCAqIGluZGljYXRlcyBhIHJhY2Ugd2l0aCBhbGxvY19odWdldGxiX2ZvbGlvLiAgQWRqdXN0XG42NzgxOlx0XHRcdFx0ICogdGhlIHN1YnBvb2wgYW5kIHJlc2VydmUgY291bnRzIG1vZGlmaWVkIGFib3ZlXG42NzgyOlx0XHRcdFx0ICogYmFzZWQgb24gdGhlIGRpZmZlcmVuY2UuXG42NzgzOlx0XHRcdFx0ICovXG42Nzg0Olx0XHRcdFx0bG9uZyByc3ZfYWRqdXN0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2xgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhpcyBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlIGFuZCBiZWhhdmlvci4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgdHJ1ZSBtdXRleCB1bmxvY2ssIGEgcG90ZW50aWFsIHJlbGVhc2UgYmFjayB0byBhIHJlc291cmNlIHBvb2wsIG9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgbnVhbmNlZC4gSSYjMzk7bSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBjbHVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSDigJMgYXJlIHdlIGRlYWxpbmcgd2l0aCBhIHNoYXJlZCByZXNvdXJjZSwgYSBzcGVjaWZpYyBtZW1vcnkgYWxsb2NhdGlvbiwgb3IgbWF5YmUgYSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlPyBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgaGVyZS4gV2hhdCYjMzk7cyB0aGUgYW50aWNpcGF0ZWQgdXNhZ2UgcGF0dGVybj8gSXMgaXQgaGVhdmlseSBjb250ZW5kZWQsIG9yIHJlbGF0aXZlbHkgcmFyZT8gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl0IGRvZXMgKnNvbWV0aGluZyogd2l0aCByZWxlYXNpbmcgYSByZXNvdXJjZSwgcG90ZW50aWFsbHkgY29uZGl0aW9uYWwgYmFzZWQgb24gc29tZSBjcml0ZXJpYSwgc28gdGhlIGBvcmAgaXMgaW50ZXJlc3RpbmcgdG8gbWUgLSBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIG9wZXJhdGlvbnMsIHVubG9ja2luZyB2cyByZWxlYXNlLiBUaGUgdW5kZXJseWluZyBzZW1hbnRpY3Mgb2YgaG93IHRoZSBzdWJwb29sIGlzIG1hbmFnZWQgYXJlIHdoYXQgSSYjMzk7bSBmb2N1c2VkIG9uIC0gSSYjMzk7bGwgdHJhY2UgZG93biBpdHMgcGF0aCBhbmQgc2VlIGV4YWN0bHkgaG93IGl0IGJlaGF2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VubG9ja19vcl9yZWxlYXNlX3N1YnBvb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTEyOT1zdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbi0tXG5tbS9odWdldGxiLmMtMTQwLVxubW0vaHVnZXRsYi5jOjE0MTpzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG5tbS9odWdldGxiLmMtMTQyLVx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzKVxuLS1cbm1tL2h1Z2V0bGIuYz0xODM9dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4tLVxubW0vaHVnZXRsYi5jLTE5Mi1cdHNwb29sLVx1MDAzZWNvdW50LS07XG5tbS9odWdldGxiLmM6MTkzOlx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xubW0vaHVnZXRsYi5jLTE5NC19XG4tLVxubW0vaHVnZXRsYi5jPTI0OT1zdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4tLVxubW0vaHVnZXRsYi5jLTI3OC1cdCAqL1xubW0vaHVnZXRsYi5jOjI3OTpcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbm1tL2h1Z2V0bGIuYy0yODAtXG4tLVxubW0vaHVnZXRsYi5jPTY2NTk9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9odWdldGxiLmMtNjgxNy1cdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcbm1tL2h1Z2V0bGIuYzo2ODE4Olx0XHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG5tbS9odWdldGxiLmMtNjgxOS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBTdWJwb29sIE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBoYW5kbGluZyB0aGUgcmVsZWFzZSBhbmQgcG90ZW50aWFsIHVubG9ja2luZyBvZiBzdWJwb29scywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2xgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgLiBJIGtub3cgdGhlIHRoZW9yeSwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIHByYWN0aWNhbCBpbXBsZW1lbnRhdGlvbi4gTXkgZXhwZXJ0IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoZXJlIGFyZSBsaWtlbHkgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgaGVyZSwgcHJvYmFibHkgYXJvdW5kIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFuZCBob3cgdGhleSYjMzk7cmUgdXNlZCBpbiB0aGUgY29udGV4dCBvZiBodWdlIHBhZ2VzLiBJJiMzOTttIGd1ZXNzaW5nIHRoZSBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAgZnVuY3Rpb24gbWlnaHQgaW52b2x2ZSBzb21lIGNsZXZlciByZWZlcmVuY2UgY291bnRpbmcgb3IgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgcG90ZW50aWFsbHkgY29uY3VycmVudCBvcGVyYXRpb25zLiBBbmQgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYC4uLiB0aGF0IGxpa2VseSB0aWVzIGludG8gaG93IHdlIHJldHVybiBodWdlIHBhZ2UgbWVtb3J5IGJhY2sgdG8gdGhlIHN5c3RlbSwgbWF5YmUgdGhyb3VnaCBzb21lIGtpbmQgb2YgZnJlZSBsaXN0IG9yIG1vcmUgY29tcGxleCBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzIG9mIHRoZWlyIGRhbmNlLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIHdlbGwtcGxhY2VkIGFzc2VydGlvbnMgYW5kIGNvbW1lbnRzIGluIHRoZSBjb2RlIHRvIGd1aWRlIG15IHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzU6XHRcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxuIDEzNjpcdFx0XHRyZXR1cm4gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuIDEzNzpcdFxuIDEzODpcdFx0cmV0dXJuIHRydWU7XG4gMTM5Olx0fVxuIDE0MDpcdFxuIDE0MTpcdHN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiAxNDI6XHRcdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGlycV9mbGFncylcbiAxNDM6XHR7XG4gMTQ0Olx0XHRib29sIGZyZWVfc3VicG9vbCA9IHN1YnBvb2xfaXNfZnJlZShzcG9vbCk7XG4gMTQ1Olx0XG4gMTQ2Olx0XHQvKiBJZiBubyBwYWdlcyBhcmUgdXNlZCwgYW5kIG5vIG90aGVyIGhhbmRsZXMgdG8gdGhlIHN1YnBvb2xcbiAxNDc6XHRcdCAqIHJlbWFpbiwgZ2l2ZSB1cCBhbnkgcmVzZXJ2YXRpb25zIGJhc2VkIG9uIG1pbmltdW0gc2l6ZSBhbmRcbiAxNDg6XHRcdCAqIGZyZWUgdGhlIHN1YnBvb2wgKi9cbiAxNDk6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgaXJxX2ZsYWdzKTtcbiAxNTA6XHRcbiAxNTE6XHRcdGlmIChmcmVlX3N1YnBvb2wpIHtcbiAxNTI6XHRcdFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEpXG4gMTUzOlx0XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShzcG9vbC1cdTAwM2Voc3RhdGUsXG4gMTU0Olx0XHRcdFx0XHRcdFx0LXNwb29sLVx1MDAzZW1pbl9ocGFnZXMpO1xuIDE1NTpcdFx0XHRrZnJlZShzcG9vbCk7XG4gMTU2Olx0XHR9XG4gMTU3Olx0fVxuIDE1ODpcdFxuIDE1OTpcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdlcGFnZV9uZXdfc3VicG9vbChzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIG1heF9ocGFnZXMsXG4gMTYwOlx0XHRcdFx0XHRcdFx0bG9uZyBtaW5faHBhZ2VzKVxuIDE2MTpcdHtcbiAxNjI6XHRcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbDtcbiAxNjM6XHRcbiAxNjQ6XHRcdHNwb29sID0ga3phbGxvY19vYmooKnNwb29sKTtcbiAxNjU6XHRcdGlmICghc3Bvb2wpXG4gMTY2Olx0XHRcdHJldHVybiBOVUxMO1xuIDE2NzpcdFxuIDE2ODpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jayk7XG4gMTY5Olx0XHRzcG9vbC1cdTAwM2Vjb3VudCA9IDE7XG4gMTcwOlx0XHRzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzID0gbWF4X2hwYWdlcztcbiAxNzE6XHRcdHNwb29sLVx1MDAzZWhzdGF0ZSA9IGg7XG4gMTcyOlx0XHRzcG9vbC1cdTAwM2VtaW5faHBhZ2VzID0gbWluX2hwYWdlcztcbiAxNzM6XHRcbiAxNzQ6XHRcdGlmIChtaW5faHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNiBodWdldGxiX2FjY3RfbWVtb3J5KGgsIG1pbl9ocGFnZXMpKSB7XG4gMTc1Olx0XHRcdGtmcmVlKHNwb29sKTtcbiAxNzY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMTc3Olx0XHR9XG4gMTc4Olx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID0gbWluX2hwYWdlcztcbiAxNzk6XHRcbiAxODA6XHRcdHJldHVybiBzcG9vbDtcbiAxODE6XHR9XG4gMTgyOlx0XG4gMTgzOlx0dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4gMTg0Olx0e1xuIDE4NTpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAxODY6XHRcbiAxODc6XHRcdGlmICghc3Bvb2wpXG4gMTg4Olx0XHRcdHJldHVybjtcbiAxODk6XHRcbiAxOTA6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiAxOTE6XHRcdEJVR19PTighc3Bvb2wtXHUwMDNlY291bnQpO1xuIDE5MjpcdFx0c3Bvb2wtXHUwMDNlY291bnQtLTtcbiAxOTM6XHRcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbiAxOTQ6XHR9XG4gMTk1Olx0XG4gMTk2Olx0LypcbiAxOTc6XHQgKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGFsbG9jYXRpbmcgYW5kIHJlc2VydmluZyBwYWdlcy5cbiAxOTg6XHQgKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGVcbiAxOTk6XHQgKiByZXF1ZXN0LiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBieSB3aGljaCB0aGVcbiAyMDA6XHQgKiBnbG9iYWwgcG9vbHMgbXVzdCBiZSBhZGp1c3RlZCAodXB3YXJkKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBtYXlcbiAyMDE6XHQgKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZVxuIDIwMjpcdCAqIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuIDIwMzpcdCAqL1xuIDIwNDpcdHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgRGVlcGVyIGludG8gSHVnZXBhZ2UgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgYmVlbiBleGFtaW5pbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gc3RyYXRlZ2llcywgYW5kIEkmIzM5O20gZ2V0dGluZyBhIGdvb2QgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGZsb3cuIE5vdywgSSB3YW50IHRvIHBpdm90IGFuZCByZWFsbHkgZGlnIGludG8gYSBjcml0aWNhbCBmdW5jdGlvbjogYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBzdWJwb29scyB0byByZXR1cm4gcGFnZXMuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IHdoZXJlIHRoZSBwYWdlcyBnbywgYW5kIGhvdyB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgdGhlIG9uZXMgdXNlZCB3aXRoaW4gdGhlIGBodWdlcGFnZV9zdWJwb29sYCBjb250ZXh0LCBhcmUgbW9kaWZpZWQgZHVyaW5nIHRoaXMgJiMzNDtwdXQmIzM0OyBvcGVyYXRpb24uIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gY29udHJpYnV0ZXMgdG8gbWFpbnRhaW5pbmcgdGhlIGludGVncml0eSBvZiBvdXIgaHVnZXBhZ2UgcG9vbHMuIEkgc3VzcGVjdCB3ZSB3aWxsIGZpbmQgc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIHdpdGhpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQ1Olx0ICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZ2xvYmFsIHBhZ2UgcmVzZXJ2YXRpb25zIHRoYXQgbXVzdCBiZSBkcm9wcGVkLlxuIDI0NjpcdCAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpXG4gMjQ3Olx0ICogaW4gdGhlIGNhc2Ugd2hlcmUgYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXG4gMjQ4Olx0ICovXG4gMjQ5Olx0c3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIDI1MDpcdFx0XHRcdFx0ICAgICAgIGxvbmcgZGVsdGEpXG4gMjUxOlx0e1xuIDI1MjpcdFx0bG9uZyByZXQgPSBkZWx0YTtcbiAyNTM6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gMjU0Olx0XG4gMjU1Olx0XHRpZiAoIXNwb29sKVxuIDI1NjpcdFx0XHRyZXR1cm4gZGVsdGE7XG4gMjU3Olx0XG4gMjU4Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMjU5Olx0XG4gMjYwOlx0XHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcdFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cbiAyNjE6XHRcdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4gMjYyOlx0XG4gMjYzOlx0XHQgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi9cbiAyNjQ6XHRcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyBcdTAwM2Mgc3Bvb2wtXHUwMDNlbWluX2hwYWdlcykge1xuIDI2NTpcdFx0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyAmIzQzOyBkZWx0YSBcdTAwM2M9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpXG4gMjY2Olx0XHRcdFx0cmV0ID0gMDtcbiAyNjc6XHRcdFx0ZWxzZVxuIDI2ODpcdFx0XHRcdHJldCA9IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgJiM0MzsgZGVsdGEgLSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuIDI2OTpcdFxuIDI3MDpcdFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICYjNDM7PSBkZWx0YTtcbiAyNzE6XHRcdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgXHUwMDNlIHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpXG4gMjcyOlx0XHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXM7XG4gMjczOlx0XHR9XG4gMjc0Olx0XG4gMjc1Olx0XHQvKlxuIDI3NjpcdFx0ICogSWYgaHVnZXRsYmZzX3B1dF9zdXBlciBjb3VsZG4mIzM5O3QgZnJlZSBzcG9vbCBkdWUgdG8gYW4gb3V0c3RhbmRpbmdcbiAyNzc6XHRcdCAqIHF1b3RhIHJlZmVyZW5jZSwgZnJlZSBpdCBub3cuXG4gMjc4Olx0XHQgKi9cbiAyNzk6XHRcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbiAyODA6XHRcbiAyODE6XHRcdHJldHVybiByZXQ7XG4gMjgyOlx0fVxuIDI4MzpcdFxuIDI4NDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnN1YnBvb2xfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIDI4NTpcdHtcbiAyODY6XHRcdHJldHVybiBzdWJwb29sX2lub2RlKGZpbGVfaW5vZGUodm1hLVx1MDAzZXZtX2ZpbGUpKTtcbiAyODc6XHR9XG4gMjg4Olx0XG4gMjg5Olx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEzNgoJCQkJCQkJb3V0cHV0OiAxODUKCQkJCQkJCXRob3VnaHRzOiA4NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IEZpeGluZyBhIFBvdGVudGlhbCBVQUYgaW4gSHVnZVRMQiBSZXNlcnZhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBUaGUga2V5IGlzc3VlIGlzIHRoZSByZW9yZGVyaW5nIG9mIG9wZXJhdGlvbnMgd2l0aGluIGBvdXRfcHV0X3BhZ2VzYC4gSXQgc2VlbXMgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYSBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgKFVBRikgdnVsbmVyYWJpbGl0eS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2NlbmFyaW8gd2hlcmUgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBjb3VsZCBmcmVlIHRoZSBgc3Bvb2xgIG9iamVjdCBpZiBhIGNlcnRhaW4gY29uZGl0aW9uIGluIGB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sYCB3YXMgbWV0LCBtYWtpbmcgdGhlIHN1YnNlcXVlbnQgYWNjZXNzIG9mIGBzcG9vbC0mZ3Q7bG9ja2AgYSBVQUYuIEVzc2VudGlhbGx5LCB0aGUgY29kZSB3YXMgc3VzY2VwdGlibGUgdG8gZnJlZWluZyB0aGUgc3VicG9vbCBwcmVtYXR1cmVseSwgbGVhZGluZyB0byBtZW1vcnkgY29ycnVwdGlvbi4KClRoZSBmaXgsIHJlb3JkZXJpbmcgdGhlIGNvbmRpdGlvbmFscywgc2VlbXMgc291bmQgYXMgaXQgZW5zdXJlcyB0aGF0IHRoZSBjcml0aWNhbCBjaGVjayBmb3IgdGhlIGBzcG9vbGAmIzM5O3MgdmFsaWRpdHkgb2NjdXJzICpiZWZvcmUqIGFueSBwb3RlbnRpYWxseSBmcmVlaW5nIG9wZXJhdGlvbi4gIEdvb2QgY2F0Y2gsIHRoYXQmIzM5O3MgYSBjbGFzc2ljIGhlYXAgbGlmZXRpbWUgYnVnLiBLQVNBTiBzaG91bGQgZWFzaWx5IGNhdGNoIHRoYXQga2luZCBvZiBpc3N1ZS4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIGlmIHRoaXMgcmVxdWlyZXMgS01TQU4uIEkgbmVlZCB0byBiZSByaWdvcm91cyBoZXJlLCBnaXZlbiB0aGUgcmVzb3VyY2UgY29zdHMuIEkgbmVlZCB0byBjaGVjayBpZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZC4gVGhlIHZhcmlhYmxlcyBpbiBxdWVzdGlvbiBhcmU6IGBzcG9vbF9yZXN2YCwgYGdibF9yZXN2YCwgYGdibF9yZXNlcnZlYCwgYGNoZ2AsIGBzcG9vbGAsIGBoYCwgYW5kIGBmbGFnc2AuIExvb2tpbmcgYXQgdGhlaXIgaW5pdGlhbGl6YXRpb24gd2l0aGluIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLCBgc3Bvb2xfcmVzdmAsIGBnYmxfcmVzZXJ2ZWAsIGBmbGFnc2AsIGBjaGdgLCBldGMuIGFyZSBhbGwgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgY2hhbmdlcyB0aGF0IHdvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYnJhbmNoaW5nIG9yIGJvdW5kcyBjaGVja2luZy4KClRoZXJlZm9yZSwgc2luY2UgdGhlIHBhdGNoIGRpcmVjdGx5IGFkZHJlc3NlcyBhIFVBRi9kb3VibGUtZnJlZSB2dWxuZXJhYmlsaXR5LCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCBLQVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QsIGEgS01TQU4gc2Vzc2lvbiBpcyB1bm5lY2Vzc2FyeS4gS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgaGVyZS4gTm8gc2Vuc2UgaW4gd2FzdGluZyByZXNvdXJjZXMuCgpUaGUgY29uY2x1c2lvbiBpcyBzdHJhaWdodGZvcndhcmQ6IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGF0IGFzc2Vzc21lbnQuIFRpbWUgdG8gZm9ybXVsYXRlIHRoZSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW9yZGVycyBlcnJvci1wYXRoIGNsZWFudXBzIGluIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAgdG8gcHJldmVudCBhIFVzZS1BZnRlci1GcmVlIChVQUYpIC8gZG91YmxlLWZyZWUgY29uZGl0aW9uIHdoZXJlIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcygpYCBjb3VsZCByZWxlYXNlIGFuZCBmcmVlIGBzcG9vbGAgdmlhIGB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKClgLCBmb2xsb3dlZCBieSBhIHN1YnNlcXVlbnQgYWNjZXNzIHRvIGBzcG9vbGAgaW4gdGhlIGBpZiAoZ2JsX3Jlc2VydmUgXHUwMDI2XHUwMDI2IHNwb29sKWAgYmxvY2suXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBzdHJ1Y3R1cmUgcGFkZGluZywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYy4gVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQgaXMgYSBtZW1vcnkgbGlmZXRpbWUgLyBVQUYgaXNzdWUsIHdoaWNoIGlzIGRldGVjdGVkIGJ5IEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVvcmRlcnMgZXJyb3ItcGF0aCBjbGVhbnVwcyBpbiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIHRvIHByZXZlbnQgYSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSAvIGRvdWJsZS1mcmVlIGNvbmRpdGlvbiB3aGVyZSBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoKWAgY291bGQgcmVsZWFzZSBhbmQgZnJlZSBgc3Bvb2xgIHZpYSBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbCgpYCwgZm9sbG93ZWQgYnkgYSBzdWJzZXF1ZW50IGFjY2VzcyB0byBgc3Bvb2xgIGluIHRoZSBgaWYgKGdibF9yZXNlcnZlIFx1MDAyNlx1MDAyNiBzcG9vbClgIGJsb2NrLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcywgc3RydWN0dXJlIHBhZGRpbmcsIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBicmFuY2hpbmcgbG9naWMuIFRoZSBidWcgYmVpbmcgYWRkcmVzc2VkIGlzIGEgbWVtb3J5IGxpZmV0aW1lIC8gVUFGIGlzc3VlLCB3aGljaCBpcyBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjE6NDcuODExNDY0NTQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5MjcwNTk1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJIVUdFVExCX1BBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX3Jlc2VydmVfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzXCIsXG4gICAgXCJodWdldGxiZnNfZmlsZV9tbWFwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW9yZGVycyBlcnJvci1wYXRoIGNsZWFudXBzIGluIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAgdG8gcHJldmVudCBhIFVzZS1BZnRlci1GcmVlIChVQUYpIC8gZG91YmxlLWZyZWUgY29uZGl0aW9uIHdoZXJlIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcygpYCBjb3VsZCByZWxlYXNlIGFuZCBmcmVlIGBzcG9vbGAgdmlhIGB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKClgLCBmb2xsb3dlZCBieSBhIHN1YnNlcXVlbnQgYWNjZXNzIHRvIGBzcG9vbGAgaW4gdGhlIGBpZiAoZ2JsX3Jlc2VydmUgXFx1MDAyNlxcdTAwMjYgc3Bvb2wpYCBibG9jay5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcywgc3RydWN0dXJlIHBhZGRpbmcsIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBicmFuY2hpbmcgbG9naWMuIFRoZSBidWcgYmVpbmcgYWRkcmVzc2VkIGlzIGEgbWVtb3J5IGxpZmV0aW1lIC8gVUFGIGlzc3VlLCB3aGljaCBpcyBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgdGVhcmRvd24gb3JkZXJpbmcgaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCkgaW4gbW0vaHVnZXRsYi5jIHRvIHJlc3RvcmUgdXNlZF9ocGFnZXMgYmVmb3JlIHB1dHRpbmcgc3VicG9vbCByZXNlcnZhdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBleGVyY2lzZWQgd2hlbiBodWdldGxiIHJlc2VydmF0aW9ucyBmYWlsIG9yIHJhY2UgZHVyaW5nIG1tYXAsIG1lbWZkX2NyZWF0ZSwgb3Igc2htZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMTo0Ny44MTE0NzEyNzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4OTIwODk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY4MmQ1NDhlZTViZTg2MWI1MWYyZTZkNjU2NzdiMDViZTUxN2RhYWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAxODoyMTo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCA3ODU3NzI4NDU3OTUyLi4zZTNjZGExODFlNzI0IDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC02ODA4LDE1ICs2ODA4LDYgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFxuIG91dF9wdXRfcGFnZXM6XFxuIFxcdHNwb29sX3Jlc3YgPSBjaGcgLSBnYmxfcmVzZXJ2ZTtcXG4tXFx0aWYgKHNwb29sX3Jlc3YpIHtcXG4tXFx0XFx0LyogcHV0IHN1YiBwb29sJ3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cXG4tXFx0XFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxcbi1cXHRcXHQgKiByZXR1cm4gdG8gaHN0YXRlLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xcbi1cXHR9XFxuIFxcdC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL1xcbiBcXHRpZiAoZ2JsX3Jlc2VydmUgXFx1MDAyNlxcdTAwMjYgc3Bvb2wpIHtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5AQCAtNjgyNiw2ICs2ODE3LDE1IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcXG4gXFx0XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbiBcXHR9XFxuK1xcdGlmIChzcG9vbF9yZXN2KSB7XFxuK1xcdFxcdC8qIHB1dCBzdWIgcG9vbCdzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovXFxuK1xcdFxcdGdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBzdWJwb29sJ3MgcmVzZXJ2ZWQgcGFnZXMgY2FuIG5vdCBiZSBwdXQgYmFjayBkdWUgdG8gcmFjZSxcXG4rXFx0XFx0ICogcmV0dXJuIHRvIGhzdGF0ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2KTtcXG4rXFx0fVxcbiBvdXRfdW5jaGFyZ2VfY2dyb3VwOlxcbiBcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjE6NDguNDAxMzQxMjA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMDc4NDMwNjE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNcIixcbiAgICBcImh1Z2V0bGJmc19maWxlX21tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgdGVhcmRvd24gb3JkZXJpbmcgaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCkgaW4gbW0vaHVnZXRsYi5jIHRvIHJlc3RvcmUgdXNlZF9ocGFnZXMgYmVmb3JlIHB1dHRpbmcgc3VicG9vbCByZXNlcnZhdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBleGVyY2lzZWQgd2hlbiBodWdldGxiIHJlc2VydmF0aW9ucyBmYWlsIG9yIHJhY2UgZHVyaW5nIG1tYXAsIG1lbWZkX2NyZWF0ZSwgb3Igc2htZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY4MmQ1NDhlZTViZTg2MWI1MWYyZTZkNjU2NzdiMDViZTUxN2RhYWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE4OjIxOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA3ODU3NzI4NDU3OTUyLi4zZTNjZGExODFlNzI0IDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC02ODA4LDE1ICs2ODA4LDYgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBvdXRfcHV0X3BhZ2VzOlxuIFx0c3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlO1xuLVx0aWYgKHNwb29sX3Jlc3YpIHtcbi1cdFx0LyogcHV0IHN1YiBwb29sJ3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cbi1cdFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XG4tXHRcdC8qXG4tXHRcdCAqIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxuLVx0XHQgKiByZXR1cm4gdG8gaHN0YXRlLlxuLVx0XHQgKi9cbi1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xuLVx0fVxuIFx0LyogUmVzdG9yZSB1c2VkX2hwYWdlcyBmb3IgcGFnZXMgdGhhdCBmYWlsZWQgZ2xvYmFsIHJlc2VydmF0aW9uICovXG4gXHRpZiAoZ2JsX3Jlc2VydmUgXHUwMDI2XHUwMDI2IHNwb29sKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5AQCAtNjgyNiw2ICs2ODE3LDE1IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7XG4gXHRcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbiBcdH1cbitcdGlmIChzcG9vbF9yZXN2KSB7XG4rXHRcdC8qIHB1dCBzdWIgcG9vbCdzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovXG4rXHRcdGdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpO1xuK1x0XHQvKlxuK1x0XHQgKiBzdWJwb29sJ3MgcmVzZXJ2ZWQgcGFnZXMgY2FuIG5vdCBiZSBwdXQgYmFjayBkdWUgdG8gcmFjZSxcbitcdFx0ICogcmV0dXJuIHRvIGhzdGF0ZS5cbitcdFx0ICovXG4rXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2KTtcbitcdH1cbiBvdXRfdW5jaGFyZ2VfY2dyb3VwOlxuIFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoaHN0YXRlX2luZGV4KGgpLFxuIFx0XHRcdFx0XHQgICAgY2hnICogcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgaF9jZyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMTo0OC40MDEzNDI4NjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTczNTY0NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGh1Z2V0bGIuY2AgRGlmZjogUmVzZXJ2YXRpb24gSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaHVnZXRsYi5jYCBkaWZmLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhlIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgcGFnZSByZXNlcnZhdGlvbnMgYXJlIG1hbmFnZWQsIGxpa2VseSB3aXRoaW4gc3VicG9vbHMgYW5kIHRoZSBnbG9iYWwgcG9vbC4gVGhlIGNoYW5nZSBpcyBjbGVhcmx5IGZvY3VzZWQgb24gdGhlIGxvZ2ljIGFmdGVyIHRoZSBnbG9iYWwgcmVzZXJ2YXRpb24gYXR0ZW1wdCwgYW5kIEkgc2VlIHRoZSBjcnVjaWFsIGxpbmUgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBjYWxsZWQuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBjb2RlIGF0dGVtcHRlZCB0byByZWxlYXNlIGEgc3VicG9vbCdzIHJlc2VydmF0aW9uIGlmIGEgZ2xvYmFsIHJlc2VydmF0aW9uIGZhaWxlZC4gSXQgbG9va3MgbGlrZSBpdCB3YXMgYXR0ZW1wdGluZyB0byBwdXQgdGhlIHN1YnBvb2wncyByZXNlcnZhdGlvbiBiYWNrLCBhbmQgaWYgaXQgY291bGQgbm90LCBpdCB3b3VsZCByZXR1cm4gdGhlIHBhZ2VzIHRvIHRoZSBoc3RhdGUuXG5cblRoZSBkaWZmIGludHJvZHVjZXMgYSBjaGFuZ2UuIFRoZSBvcmlnaW5hbCBsb2dpYyB3YXMgaW5zaWRlIGEgY29uZGl0aW9uYWwgYGlmIChzcG9vbF9yZXN2KWAuIE5vdyB0aGF0IGlmIHN0YXRlbWVudCBpcyByZXBlYXRlZC4gVGhlIHNlY29uZCB0aW1lLCBhZnRlciB0aGUgbGluZXMgZm9yIHBhZ2UgcmVzdG9yZSBpZiBnbG9iYWwgcmVzZXJ2YXRpb24gZmFpbGVkLiBUaGlzIGltcGxpZXMgdGhlcmUgd2FzIGEgYnVnIHdoZXJlIHRoZSBzdWJwb29sJ3MgcmVzZXJ2YXRpb24gd2Fzbid0IGJlaW5nIGNvcnJlY3RseSBwdXQgYmFjayBpbiBjZXJ0YWluIHNjZW5hcmlvcywgcHJvYmFibHkgcmVsYXRlZCB0byByYWNlIGNvbmRpdGlvbnMuIFRoZSBjb21tZW50ZWQtb3V0IGxpbmVzIHBvaW50IHRvIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4ndCBiZSBwdXQgYmFjayBhbmQgdGhhdCB0aGUgc3VicG9vbCdzIHJlc2VydmVkIHBhZ2VzIG5lZWQgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIGhzdGF0ZS4gVGhlIGNvbW1lbnQgYC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL2AgYWxzbyBhbGlnbnMgd2l0aCB0aGlzIHVuZGVyc3RhbmRpbmcuIFRoZSBvcmlnaW5hbCBsb2dpYyBsaWtlbHkgaGFkIGEgaG9sZSBpbiBpdHMgaGFuZGxpbmcgb2YgcmVzZXJ2YXRpb24gcmVmdW5kcyB3aGVuIGEgZ2xvYmFsIHJlc2VydmF0aW9uIGZhaWxlZCwgbGVhZGluZyB0byBtZW1vcnkgbGVha3Mgb3IgaW5jb3JyZWN0IGFjY291bnRpbmcuIFRoZSBkdXBsaWNhdGVkIGNvZGUgZW5zdXJlcyB0aGUgcmVzZXJ2YXRpb24gaXMgYWx3YXlzIHB1dCBiYWNrLCBpcnJlc3BlY3RpdmUgb2YgYSBzdWNjZXNzZnVsIGdsb2JhbCByZXNlcnZhdGlvbiwgYW5kIGxpa2VseSBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbi4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSdzIGV4ZWN1dGlvbiBwYXRocyB0byBjb25maXJtIHRoaXMsIGJ1dCB0aGF0J3MgbXkgd29ya2luZyBoeXBvdGhlc2lzIGJhc2VkIG9uIHRoZSBkaWZmIGFuZCB0aGUgY29tbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMTo1NC45NzQ5MDk3MjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3NzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY3NzA6XFx0XFx0XFx0YWRkID0gcmVnaW9uX2FkZChyZXN2X21hcCwgZnJvbSwgdG8sIHJlZ2lvbnNfbmVlZGVkLCBoLCBoX2NnKTtcXG42NzcxOlxcdFxcbjY3NzI6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGFkZCBcXHUwMDNjIDApKSB7XFxuNjc3MzpcXHRcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxuNjc3NDpcXHRcXHRcXHRcXHRlcnIgPSBhZGQ7XFxuNjc3NTpcXHRcXHRcXHRcXHRnb3RvIG91dF9wdXRfcGFnZXM7XFxuNjc3NjpcXHRcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KGNoZyBcXHUwMDNlIGFkZCkpIHtcXG42Nzc3OlxcdFxcdFxcdFxcdC8qXFxuNjc3ODpcXHRcXHRcXHRcXHQgKiBwYWdlcyBpbiB0aGlzIHJhbmdlIHdlcmUgYWRkZWQgdG8gdGhlIHJlc2VydmVcXG42Nzc5OlxcdFxcdFxcdFxcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXFxuNjc4MDpcXHRcXHRcXHRcXHQgKiBpbmRpY2F0ZXMgYSByYWNlIHdpdGggYWxsb2NfaHVnZXRsYl9mb2xpby4gIEFkanVzdFxcbjY3ODE6XFx0XFx0XFx0XFx0ICogdGhlIHN1YnBvb2wgYW5kIHJlc2VydmUgY291bnRzIG1vZGlmaWVkIGFib3ZlXFxuNjc4MjpcXHRcXHRcXHRcXHQgKiBiYXNlZCBvbiB0aGUgZGlmZmVyZW5jZS5cXG42NzgzOlxcdFxcdFxcdFxcdCAqL1xcbjY3ODQ6XFx0XFx0XFx0XFx0bG9uZyByc3ZfYWRqdXN0O1xcbjY3ODU6XFx0XFxuNjc4NjpcXHRcXHRcXHRcXHQvKlxcbjY3ODc6XFx0XFx0XFx0XFx0ICogaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoKSB3aWxsIHB1dCB0aGVcXG42Nzg4OlxcdFxcdFxcdFxcdCAqIHJlZmVyZW5jZSB0byBoX2NnLVxcdTAwM2Vjc3MuIFNlZSBjb21tZW50IGJlbG93IGZvciBkZXRhaWwuXFxuNjc4OTpcXHRcXHRcXHRcXHQgKi9cXG42NzkwOlxcdFxcdFxcdFxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKFxcbjY3OTE6XFx0XFx0XFx0XFx0XFx0aHN0YXRlX2luZGV4KGgpLFxcbjY3OTI6XFx0XFx0XFx0XFx0XFx0KGNoZyAtIGFkZCkgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcXG42NzkzOlxcdFxcbjY3OTQ6XFx0XFx0XFx0XFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLFxcbjY3OTU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2hnIC0gYWRkKTtcXG42Nzk2OlxcdFxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xcbjY3OTc6XFx0XFx0XFx0fSBlbHNlIGlmIChoX2NnKSB7XFxuNjc5ODpcXHRcXHRcXHRcXHQvKlxcbjY3OTk6XFx0XFx0XFx0XFx0ICogVGhlIGZpbGVfcmVnaW9ucyB3aWxsIGhvbGQgdGhlaXIgb3duIHJlZmVyZW5jZSB0b1xcbjY4MDA6XFx0XFx0XFx0XFx0ICogaF9jZy1cXHUwMDNlY3NzLiBTbyB3ZSBzaG91bGQgcmVsZWFzZSB0aGUgcmVmZXJlbmNlIGhlbGRcXG42ODAxOlxcdFxcdFxcdFxcdCAqIHZpYSBodWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwX3JzdmQoKSB3aGVuIHdlIGFyZVxcbjY4MDI6XFx0XFx0XFx0XFx0ICogZG9uZS5cXG42ODAzOlxcdFxcdFxcdFxcdCAqL1xcbjY4MDQ6XFx0XFx0XFx0XFx0aHVnZXRsYl9jZ3JvdXBfcHV0X3JzdmRfY2dyb3VwKGhfY2cpO1xcbjY4MDU6XFx0XFx0XFx0fVxcbjY4MDY6XFx0XFx0fVxcbjY4MDc6XFx0XFx0cmV0dXJuIGNoZztcXG42ODA4OlxcdFxcbjY4MDk6XFx0b3V0X3B1dF9wYWdlczpcXG42ODEwOlxcdFxcdHNwb29sX3Jlc3YgPSBjaGcgLSBnYmxfcmVzZXJ2ZTtcXG42ODExOlxcdFxcdC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL1xcbjY4MTI6XFx0XFx0aWYgKGdibF9yZXNlcnZlIFxcdTAwMjZcXHUwMDI2IHNwb29sKSB7XFxuNjgxMzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjY4MTQ6XFx0XFxuNjgxNTpcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG42ODE2OlxcdFxcdFxcdGlmIChzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcXG42ODE3OlxcdFxcdFxcdFxcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcXG42ODE4OlxcdFxcdFxcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcXG42ODE5OlxcdFxcdH1cXG42ODIwOlxcdFxcdGlmIChzcG9vbF9yZXN2KSB7XFxuNjgyMTpcXHRcXHRcXHQvKiBwdXQgc3ViIHBvb2wncyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqL1xcbjY4MjI6XFx0XFx0XFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XFxuNjgyMzpcXHRcXHRcXHQvKlxcbjY4MjQ6XFx0XFx0XFx0ICogc3VicG9vbCdzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsXFxuNjgyNTpcXHRcXHRcXHQgKiByZXR1cm4gdG8gaHN0YXRlLlxcbjY4MjY6XFx0XFx0XFx0ICovXFxuNjgyNzpcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XFxuNjgyODpcXHRcXHR9XFxuNjgyOTpcXHRvdXRfdW5jaGFyZ2VfY2dyb3VwOlxcbjY4MzA6XFx0XFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoaHN0YXRlX2luZGV4KGgpLFxcbjY4MzE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xcbjY4MzI6XFx0b3V0X2VycjpcXG42ODMzOlxcdFxcdGh1Z2V0bGJfdm1hX2xvY2tfZnJlZSh2bWEpO1xcbjY4MzQ6XFx0XFx0aWYgKCF2bWEgfHwgdm1hX3Rlc3Qodm1hLCBWTUFfTUFZU0hBUkVfQklUKSlcXG42ODM1OlxcdFxcdFxcdC8qIE9ubHkgY2FsbCByZWdpb25fYWJvcnQgaWYgdGhlIHJlZ2lvbl9jaGcgc3VjY2VlZGVkIGJ1dCB0aGVcXG42ODM2OlxcdFxcdFxcdCAqIHJlZ2lvbl9hZGQgZmFpbGVkIG9yIGRpZG4ndCBydW4uXFxuNjgzNzpcXHRcXHRcXHQgKi9cXG42ODM4OlxcdFxcdFxcdGlmIChjaGcgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBhZGQgXFx1MDAzYyAwKVxcbjY4Mzk6XFx0XFx0XFx0XFx0cmVnaW9uX2Fib3J0KHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQpO1xcbjY4NDA6XFx0XFx0aWYgKHZtYSBcXHUwMDI2XFx1MDAyNiBpc192bWFfcmVzdl9zZXQodm1hLCBIUEFHRV9SRVNWX09XTkVSKSkge1xcbjY4NDE6XFx0XFx0XFx0a3JlZl9wdXQoXFx1MDAyNnJlc3ZfbWFwLVxcdTAwM2VyZWZzLCByZXN2X21hcF9yZWxlYXNlKTtcXG42ODQyOlxcdFxcdFxcdHNldF92bWFfcmVzdl9tYXAodm1hLCBOVUxMKTtcXG42ODQzOlxcdFxcdH1cXG42ODQ0OlxcdFxcdHJldHVybiBlcnI7XFxuNjg0NTpcXHR9XFxuNjg0NjpcXHRcXG42ODQ3OlxcdGxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXFxuNjg0ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRsb25nIGZyZWVkKVxcbjY4NDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMTo1NC45NzU0MDA2MTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTk0MTE1MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zIGluIFN1YnBvb2wgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKWAgZnVuY3Rpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KWAgZnVuY3Rpb24uIE15IGluaXRpYWwgY29uY2VybiBpcyB0aGF0IGB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sYCBtaWdodCBmcmVlIGBzcG9vbGAgKG9yIGRyb3AgaXRzIHJlZmVyZW5jZSBjb3VudCkgcmlnaHQgYmVmb3JlIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AgZ2V0cyBhIGNoYW5jZSB0byBkbyBpdHMgam9iLiBUaGF0IHNlZW1zIGxpa2UgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBvciBhIHJhY2UgY29uZGl0aW9uIGF0IHRoZSB2ZXJ5IGxlYXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgbWVjaGFuaWNzIG9mIHRoZXNlIGZ1bmN0aW9ucyB0byBjb25maXJtIHRoZSByYWNlLiBJIGhhdmUgdG8gdmVyaWZ5IHdoYXQgYWN0aW9ucyBhcmUgcGVyZm9ybWVkIGJ5IGVhY2ggZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoZSBleGFjdCBzdGVwcyBhbmQgd2hlbiBlYWNoIGlzIGNhbGxlZC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBjbG9zZWx5IGF0IGB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sYCBhbmQgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCwgdG8gc2VlIGlmIG15IGluaXRpYWwgaHVuY2ggaGFzIGFueSBtZXJpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ5OCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjIxOjU4LjE2OTUxOTQzN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjYzNDk5MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXN8dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTEyOT1zdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNDAtXFxubW0vaHVnZXRsYi5jOjE0MTpzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxubW0vaHVnZXRsYi5jLTE0Mi1cXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGlycV9mbGFncylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xODM9dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXFxuLS1cXG5tbS9odWdldGxiLmMtMTkyLVxcdHNwb29sLVxcdTAwM2Vjb3VudC0tO1xcbm1tL2h1Z2V0bGIuYzoxOTM6XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYy0xOTQtfVxcbi0tXFxubW0vaHVnZXRsYi5jPTIwND1zdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxuLS1cXG5tbS9odWdldGxiLmMtMjQ4LSAqL1xcbm1tL2h1Z2V0bGIuYzoyNDk6c3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbm1tL2h1Z2V0bGIuYy0yNTAtXFx0XFx0XFx0XFx0ICAgICAgIGxvbmcgZGVsdGEpXFxuLS1cXG5tbS9odWdldGxiLmMtMjc4LVxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoyNzk6XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYy0yODAtXFxuLS1cXG5tbS9odWdldGxiLmM9MTY3Mz12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE2OTktXFx0ICogdmlhIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKCkuICBTaW5jZSB3ZSBhcmUgJ3Jlc3RvcmluZycgdGhlXFxubW0vaHVnZXRsYi5jOjE3MDA6XFx0ICogcmVzZXJ2YXRpb24sIGRvIG5vdCBjYWxsIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKCkgYXMgdGhpcyB3aWxsXFxubW0vaHVnZXRsYi5jLTE3MDEtXFx0ICogcmVtb3ZlIHRoZSByZXNlcnZlZCBwYWdlIGZyb20gdGhlIHN1YnBvb2wuXFxuLS1cXG5tbS9odWdldGxiLmMtMTcwOS1cXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6MTcxMDpcXHRcXHRpZiAoaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpID09IDApXFxubW0vaHVnZXRsYi5jLTE3MTEtXFx0XFx0XFx0cmVzdG9yZV9yZXNlcnZlID0gdHJ1ZTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yOTM5PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMDQ5LVxcbm1tL2h1Z2V0bGIuYzozMDUwOlxcdFxcdFxcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxubW0vaHVnZXRsYi5jLTMwNTEtXFx0XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtcnN2X2FkanVzdCk7XFxuLS1cXG5tbS9odWdldGxiLmMtMzA2Ni1cXHRpZiAobWFwX2NoZyBcXHUwMDI2XFx1MDAyNiAhZ2JsX2NoZykge1xcbm1tL2h1Z2V0bGIuYzozMDY3OlxcdFxcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xcbm1tL2h1Z2V0bGIuYy0zMDY4LVxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz00NzA5PXN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1fb3BfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdldGxiLmMtNDczMi1cXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NDczMzpcXHRcXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCByZXNlcnZlKTtcXG5tbS9odWdldGxiLmMtNDczNC1cXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxuLS1cXG5tbS9odWdldGxiLmM9NjY1OT1sb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY3OTMtXFxubW0vaHVnZXRsYi5jOjY3OTQ6XFx0XFx0XFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLFxcbm1tL2h1Z2V0bGIuYy02Nzk1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNoZyAtIGFkZCk7XFxuLS1cXG5tbS9odWdldGxiLmMtNjgxNy1cXHRcXHRcXHRzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7XFxubW0vaHVnZXRsYi5jOjY4MTg6XFx0XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYy02ODE5LVxcdH1cXG4tLVxcbm1tL2h1Z2V0bGIuYy02ODIxLVxcdFxcdC8qIHB1dCBzdWIgcG9vbCdzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovXFxubW0vaHVnZXRsYi5jOjY4MjI6XFx0XFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XFxubW0vaHVnZXRsYi5jLTY4MjMtXFx0XFx0LypcXG4tLVxcbm1tL2h1Z2V0bGIuYz02ODQ3PWxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXFxuLS1cXG5tbS9odWdldGxiLmMtNjg4MS1cXHQgKi9cXG5tbS9odWdldGxiLmM6Njg4MjpcXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAoY2hnIC0gZnJlZWQpKTtcXG5tbS9odWdldGxiLmMtNjg4My1cXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjIxOjU4LjI5NTg3NTUyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NjU2MDg4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCoqXG5cblJpZ2h0LCBzbyBJJ20gc3RhcnRpbmcgYXQgdGhlIHRvcCBvZiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgc3BlY2lmaWNhbGx5IGxpbmUgNjY1OSwgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljIGZyb20gdGhlIGdyb3VuZCB1cCB0byByZWFsbHkgZ3Jhc3AgaXRzIGltcGxpY2F0aW9ucy4gTGV0J3Mgc2VlIGhvdyB0aGlzIHRoaW5nIHdvcmtzIGZyb20gdGhlIHZlcnkgYmVnaW5uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTg4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjE6NTkuODYxNDg4MDk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYyNzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2V0bGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjU5LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NjU5OlxcdGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuNjY2MDpcXHRcXHRcXHRsb25nIGZyb20sIGxvbmcgdG8sXFxuNjY2MTpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG42NjYyOlxcdFxcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncylcXG42NjYzOlxcdHtcXG42NjY0OlxcdFxcdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBzcG9vbF9yZXN2LCBnYmxfcmVzdjtcXG42NjY1OlxcdFxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xcbjY2NjY6XFx0XFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7XFxuNjY2NzpcXHRcXHRzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwO1xcbjY2Njg6XFx0XFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcXG42NjY5OlxcdFxcdGxvbmcgZ2JsX3Jlc2VydmUsIHJlZ2lvbnNfbmVlZGVkID0gMDtcXG42NjcwOlxcdFxcdGludCBlcnI7XFxuNjY3MTpcXHRcXG42NjcyOlxcdFxcdC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqL1xcbjY2NzM6XFx0XFx0aWYgKGZyb20gXFx1MDAzZSB0bykge1xcbjY2NzQ6XFx0XFx0XFx0Vk1fV0FSTigxLCBcXFwiJXMgY2FsbGVkIHdpdGggYSBuZWdhdGl2ZSByYW5nZVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbjY2NzU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNjY3NjpcXHRcXHR9XFxuNjY3NzpcXHRcXG42Njc4OlxcdFxcdC8qXFxuNjY3OTpcXHRcXHQgKiB2bWEgc3BlY2lmaWMgc2VtYXBob3JlIHVzZWQgZm9yIHBtZCBzaGFyaW5nIGFuZCBmYXVsdC90cnVuY2F0aW9uXFxuNjY4MDpcXHRcXHQgKiBzeW5jaHJvbml6YXRpb25cXG42NjgxOlxcdFxcdCAqL1xcbjY2ODI6XFx0XFx0aHVnZXRsYl92bWFfbG9ja19hbGxvYyh2bWEpO1xcbjY2ODM6XFx0XFxuNjY4NDpcXHRcXHQvKlxcbjY2ODU6XFx0XFx0ICogT25seSBhcHBseSBodWdlcGFnZSByZXNlcnZhdGlvbiBpZiBhc2tlZC4gQXQgZmF1bHQgdGltZSwgYW5cXG42Njg2OlxcdFxcdCAqIGF0dGVtcHQgd2lsbCBiZSBtYWRlIGZvciBWTV9OT1JFU0VSVkUgdG8gYWxsb2NhdGUgYSBwYWdlXFxuNjY4NzpcXHRcXHQgKiB3aXRob3V0IHVzaW5nIHJlc2VydmVzXFxuNjY4ODpcXHRcXHQgKi9cXG42Njg5OlxcdFxcdGlmICh2bWFfZmxhZ3NfdGVzdChcXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTk9SRVNFUlZFX0JJVCkpXFxuNjY5MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG42NjkxOlxcdFxcbjY2OTI6XFx0XFx0LypcXG42NjkzOlxcdFxcdCAqIFNoYXJlZCBtYXBwaW5ncyBiYXNlIHRoZWlyIHJlc2VydmF0aW9uIG9uIHRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdFxcbjY2OTQ6XFx0XFx0ICogYXJlIGFscmVhZHkgYWxsb2NhdGVkIG9uIGJlaGFsZiBvZiB0aGUgZmlsZS4gUHJpdmF0ZSBtYXBwaW5ncyBuZWVkXFxuNjY5NTpcXHRcXHQgKiB0byByZXNlcnZlIHRoZSBmdWxsIGFyZWEgZXZlbiBpZiByZWFkLW9ubHkgYXMgbXByb3RlY3QoKSBtYXkgYmVcXG42Njk2OlxcdFxcdCAqIGNhbGxlZCB0byBtYWtlIHRoZSBtYXBwaW5nIHJlYWQtd3JpdGUuIEFzc3VtZSAhdm1hIGlzIGEgc2htIG1hcHBpbmdcXG42Njk3OlxcdFxcdCAqL1xcbjY2OTg6XFx0XFx0aWYgKCF2bWEgfHwgdm1hX3Rlc3Qodm1hLCBWTUFfTUFZU0hBUkVfQklUKSkge1xcbjY2OTk6XFx0XFx0XFx0LypcXG42NzAwOlxcdFxcdFxcdCAqIHJlc3ZfbWFwIGNhbiBub3QgYmUgTlVMTCBhcyBodWdldGxiX3Jlc2VydmVfcGFnZXMgaXMgb25seVxcbjY3MDE6XFx0XFx0XFx0ICogY2FsbGVkIGZvciBpbm9kZXMgZm9yIHdoaWNoIHJlc3ZfbWFwcyB3ZXJlIGNyZWF0ZWQgKHNlZVxcbjY3MDI6XFx0XFx0XFx0ICogaHVnZXRsYmZzX2dldF9pbm9kZSkuXFxuNjcwMzpcXHRcXHRcXHQgKi9cXG42NzA0OlxcdFxcdFxcdHJlc3ZfbWFwID0gaW5vZGVfcmVzdl9tYXAoaW5vZGUpO1xcbjY3MDU6XFx0XFxuNjcwNjpcXHRcXHRcXHRjaGcgPSByZWdpb25fY2hnKHJlc3ZfbWFwLCBmcm9tLCB0bywgXFx1MDAyNnJlZ2lvbnNfbmVlZGVkKTtcXG42NzA3OlxcdFxcdH0gZWxzZSB7XFxuNjcwODpcXHRcXHRcXHQvKiBQcml2YXRlIG1hcHBpbmcuICovXFxuNjcwOTpcXHRcXHRcXHRyZXN2X21hcCA9IHJlc3ZfbWFwX2FsbG9jKCk7XFxuNjcxMDpcXHRcXHRcXHRpZiAoIXJlc3ZfbWFwKSB7XFxuNjcxMTpcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjY3MTI6XFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjY3MTM6XFx0XFx0XFx0fVxcbjY3MTQ6XFx0XFxuNjcxNTpcXHRcXHRcXHRjaGcgPSB0byAtIGZyb207XFxuNjcxNjpcXHRcXG42NzE3OlxcdFxcdFxcdHNldF92bWFfcmVzdl9tYXAodm1hLCByZXN2X21hcCk7XFxuNjcxODpcXHRcXHRcXHRzZXRfdm1hX3Jlc3ZfZmxhZ3Modm1hLCBIUEFHRV9SRVNWX09XTkVSKTtcXG42NzE5OlxcdFxcdH1cXG42NzIwOlxcdFxcbjY3MjE6XFx0XFx0aWYgKGNoZyBcXHUwMDNjIDApIHtcXG42NzIyOlxcdFxcdFxcdC8qIHJlZ2lvbl9jaGcoKSBhYm92ZSBjYW4gcmV0dXJuIC1FTk9NRU0gKi9cXG42NzIzOlxcdFxcdFxcdGVyciA9IChjaGcgPT0gLUVOT01FTSkgPyAtRU5PTUVNIDogLUVJTlZBTDtcXG42NzI0OlxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG42NzI1OlxcdFxcdH1cXG42NzI2OlxcdFxcbjY3Mjc6XFx0XFx0ZXJyID0gaHVnZXRsYl9jZ3JvdXBfY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcXG42NzI4OlxcdFxcdFxcdFxcdFxcdGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIFxcdTAwMjZoX2NnKTtcXG42NzI5OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjY3MzA6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjY3MzE6XFx0XFxuNjczMjpcXHRcXHRpZiAodm1hIFxcdTAwMjZcXHUwMDI2ICF2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpIFxcdTAwMjZcXHUwMDI2IGhfY2cpIHtcXG42NzMzOlxcdFxcdFxcdC8qIEZvciBwcml2YXRlIG1hcHBpbmdzLCB0aGUgaHVnZXRsYl9jZ3JvdXAgdW5jaGFyZ2UgaW5mbyBoYW5nc1xcbjY3MzQ6XFx0XFx0XFx0ICogb2YgdGhlIHJlc3ZfbWFwLlxcbjY3MzU6XFx0XFx0XFx0ICovXFxuNjczNjpcXHRcXHRcXHRyZXN2X21hcF9zZXRfaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfaW5mbyhyZXN2X21hcCwgaF9jZywgaCk7XFxuNjczNzpcXHRcXHR9XFxuNjczODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjE6NTkuODYxODU0MTc3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg3MTI3MzQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLi4uIHJpZ2h0LCB0aGF0J3MgZmlybWx5IHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgYG1tL2h1Z2V0bGIuY2AuIEl0J3MgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aG9zZSBjcnVjaWFsIGh1Z2V0bGIgcmVzZXJ2YXRpb25zIHdoZW5ldmVyIHdlJ3JlIGVzdGFibGlzaGluZyBhIGh1Z2V0bGIgbWFwcGluZywgd2hldGhlciBpdCdzIHRocm91Z2ggYG1tYXBgLCBgc2htZ2V0YCwgb3Igd2hhdGV2ZXIuIEVzc2VudGlhbGx5LCBpdCdzIHRoZSBnYXRla2VlcGVyIGZvciB0aG9zZSBnaWFudCBwYWdlcy4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGZ1bmN0aW9uYWxpdHkgZXZlbiAqcmVsZXZhbnQqIHRvIGNvbnNpZGVyIGluIGEgdHlwaWNhbCBlbnZpcm9ubWVudD8gTXkgaW1tZWRpYXRlIGFzc2Vzc21lbnQgaXMgeWVzOyBodWdldGxiZnMgaXMgcHJldHR5IG11Y2ggc3RhbmRhcmQgaXNzdWUgaW4gbW9kZXJuIExpbnV4IGtlcm5lbHMuIFRoZSBLY29uZmlnIG9wdGlvbnMgYENPTkZJR19IVUdFVExCRlNgIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIHByZXR0eSBtdWNoIGFsd2F5cyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gbWFueSBkaXN0cmlidXRpb25zLCBzbyBpdCdzIGEgZGVmaW5pdGUgY29uc2lkZXJhdGlvbi4gQWxyaWdodCwgdGltZSB0byBkaWcgZGVlcGVyIGFuZCBhY3R1YWxseSBjaGVjayB0aG9zZSBLY29uZmlnIG9wdGlvbnMgdG8gZ2V0IG1vcmUgb2YgYSBwcmVjaXNlIHBpY3R1cmUgb2YgdGhlIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjQzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MDIuNzMzMTMxOTUxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTczODg5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njk0PWNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xcbi0tXFxubW0vS2NvbmZpZy02OTYtXFxubW0vS2NvbmZpZzo2OTc6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy02OTgtXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMjowMi44MDQ4NzczMDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3ODAxNTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqSHVudGluZyBEb3duIHRoZSBIVUdFVExCIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBIVUdFVExCYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIGEgcHJldHR5IHNvbGlkIG9uZSwgaXMgdG8gY2hlY2sgdGhlIGNvcmUgZmlsZXN5c3RlbSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBmaWxlcy4gSSdsbCBzdGFydCB3aXRoIGBmcy9LY29uZmlnYCDigJMgaXQncyB0aGUgZ2VuZXJhbCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24sIHNvIGl0J3MgYSBsaWtlbHkgY2FuZGlkYXRlLiBJZiBpdCdzIG5vdCB0aGVyZSwgSSdsbCBkcmlsbCBkb3duIGEgYml0IGRlZXBlciBpbnRvIGBmcy9odWdldGxiZnMvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5OyB0aGF0IHdvdWxkIG1ha2UgcGVyZmVjdCBzZW5zZSBzaW5jZSBpdCdzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gaHVnZSBwYWdlcy4gRmFpbGluZyB0aGF0LCBJJ2xsIGdvIHN0cmFpZ2h0IHRvIGBtbS9LY29uZmlnYC4gVGhhdCdzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGFuZCBodWdlIHBhZ2VzIGFyZSwgd2VsbCwgaHVnZSBwYWdlcyEgSXQncyBwcmFjdGljYWxseSBndWFyYW50ZWVkIHRvIGJlIGluIG9uZSBvZiB0aG9zZSB0aHJlZSBsb2NhdGlvbnMuIExldCdzIGdldCB0byB3b3JrIGFuZCBmaW5kIHRoZSBzb3VyY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNjgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMjowNC44ODI4OTU2MzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjA0NzAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI0OS1cXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjUxLVxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuZnMvS2NvbmZpZy0yNjQtXFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNzItXFxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWctMjc0LVxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNzYtXFxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZnMvS2NvbmZpZy0yNzgtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuLS1cXG5mcy9LY29uZmlnLTI4Mi1cXG5mcy9LY29uZmlnOjI4Mzpjb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxuZnMvS2NvbmZpZy0yODQtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjIyOjA1LjA1ODk1MTQwNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTU4MzEyNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBIdWdlIFBhZ2VzIENvbmZpZ3VyYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvbmZpZyB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBIdWdlVExCRlMgYW5kIHRoZSBgSFVHRVRMQl9QQUdFYCBvcHRpb24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYEhVR0VUTEJGU2AgaXMgYWN0dWFsbHkgZW5hYmxlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIGFyZSBib3RoIGVuYWJsZWQsIGFuZCBmaW5kIHdoZXJlIHRoZXkgYXJlIHNldC4gTGV0J3Mgc2VlLi4uIEknbGwganVtcCBpbnRvIGBmcy9LY29uZmlnYCB0byBjb25maXJtIHRoZSBzZXR0aW5ncy4gQWhhISBMb29rcyBsaWtlIHRoZXJlJ3MgYSBgbWVudWNvbmZpZyBIVUdFVExCRlNgIGFuZCBhIGBjb25maWcgSFVHRVRMQl9QQUdFYCBlbnRyeSwgd2l0aCBgSFVHRVRMQl9QQUdFYCBzZXQgYXMgYSBgZGVmX2Jvb2xgIGJhc2VkIG9uIGBIVUdFVExCRlNgLiBUaGlzIGNvbmZpcm1zIHRoZXkncmUgaW50ZXJ0d2luZWQuIEluIG90aGVyIHdvcmRzLCBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGBIVUdFVExCRlNgIGlzIHNldCBpbiB0aGUgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBhdmFpbGFiaWxpdHkgb2YgaHVnZSBwYWdlcy5cblxuTm93LCBhIGNyaXRpY2FsIG5leHQgc3RlcCBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBzZXR0aW5ncyBhcmUgYWN0dWFsbHkgKnVzZWQqLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZXNlIGNvbmZpZyBvcHRpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2Agd2lsbCBiZSBpbmZvcm1hdGl2ZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHBpY3R1cmUgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBodWdlIHBhZ2VzIHdoZW4gdGhlc2Ugb3B0aW9ucyBhcmUgYm90aCBzZXQuIEknbGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbiwgYXMgdGhhdCB3aWxsIGxldCBtZSB1bmRlcnN0YW5kIHdoZXJlIHRoZSBodWdlIHBhZ2UgYWxsb2NhdGlvbiBsb2dpYyBpcyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBtZSB3b3JrIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBlaXRoZXIgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjU1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MDcuNjE3MjY4MzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDQ0MDE1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTAyPWNyZWF0ZWQgKHNobWdldChTSE1fSFVHRVRMQikpIG9yIGEgbWFwcGluZyBpcyBjcmVhdGVkIHZpYSBtbWFwKE1BUF9IVUdFVExCKS5cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjEwMzpUaGVzZSBvcGVyYXRpb25zIHJlc3VsdCBpbiBhIGNhbGwgdG8gdGhlIHJvdXRpbmUgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCk6OlxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTA0LVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTA1OlxcdGludCBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTEwNi1cXHRcXHRcXHRcXHQgIGxvbmcgZnJvbSwgbG9uZyB0byxcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTA5LVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTEwOlRoZSBmaXJzdCB0aGluZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoKSBkb2VzIGlzIGNoZWNrIGlmIHRoZSBOT1JFU0VSVkVcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTExMS1mbGFnIHdhcyBzcGVjaWZpZWQgaW4gZWl0aGVyIHRoZSBzaG1nZXQoKSBvciBtbWFwKCkgY2FsbC4gIElmIE5PUkVTRVJWRVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xMjI9aW4gd2hpY2ggcmVzZXJ2YXRpb25zIGFyZSByZXByZXNlbnRlZCBpbiB0aGUgcmVzZXJ2YXRpb24gbWFwLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMzItXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxMzM6Rm9yIHByaXZhdGUgbWFwcGluZ3MsIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpIGNyZWF0ZXMgdGhlIHJlc2VydmF0aW9uIG1hcCBhbmRcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTEzNC1oYW5ncyBpdCBvZmYgdGhlIFZNQSBzdHJ1Y3R1cmUuICBJbiBhZGRpdGlvbiwgdGhlIEhQQUdFX1JFU1ZfT1dORVIgZmxhZyBpcyBzZXRcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTY5PWVudHJ5IGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cy5cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE3MC1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE3MTpJZiBodWdldGxiX3Jlc2VydmVfcGFnZXMoKSB3YXMgc3VjY2Vzc2Z1bCwgdGhlIGdsb2JhbCByZXNlcnZhdGlvbiBjb3VudCBhbmRcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE3Mi1yZXNlcnZhdGlvbiBtYXAgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYXBwaW5nIHdpbGwgYmUgbW9kaWZpZWQgYXMgcmVxdWlyZWQgdG9cXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MjQ5PWNhbGwgdG8gdm1hX2NvbW1pdF9yZXNlcnZhdGlvbigpIGFmdGVyIHRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkLiAgVGhpcyB3b3VsZFxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjUwOmJlIHBvc3NpYmxlIGlmIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyB3YXMgY2FsbGVkIGZvciB0aGUgc2FtZSBwYWdlIGluIGEgc2hhcmVkXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yNTEtbWFwcGluZy4gIEluIHN1Y2ggY2FzZXMsIHRoZSByZXNlcnZhdGlvbiBjb3VudCBhbmQgc3VicG9vbCBmcmVlIHBhZ2UgY291bnRcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTcyPVBhZ2UgRmxhZ3NcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTkzLeW9k+WIm+W7uuS4gOS4quW3qOWkp+eahOaciemhtemdouaUr+aMgeeahOWFseS6q+WGheWtmOaute+8iHNobWdldChTSE1fSFVHRVRMQinvvInmiJbpgJrov4dtbWFwKE1BUF9IVUdFVExCKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0Ojk0OuWIm+W7uuS4gOS4quaYoOWwhOaXtu+8jOWwseS8muWIm+W7uumihOeVmeOAgui/meS6m+aTjeS9nOS8muWvvOiHtOWvueWHveaVsGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygp55qE6LCD55SoOjpcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC05NS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo5NjpcXHRpbnQgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtOTctXFx0XFx0XFx0XFx0ICBsb25nIGZyb20sIGxvbmcgdG8sXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMDAtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTAxOmh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygp5YGa55qE56ys5LiA5Lu25LqL5piv5qOA5p+l5Zyo6LCD55Soc2htZ2V0KCnmiJZtbWFwKCnml7bmmK/lkKbmjIflrprkuoZOT1JFU0VSVkVcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMDIt5qCH5b+X44CC5aaC5p6c5oyH5a6a5LqGTk9SRVNFUlZF77yM6YKj5LmI6L+Z5Liq5Ye95pWw56uL5Y2z6L+U5Zue77yM5Zug5Li65LiN6ZyA6KaB6aKE55WZ44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xMDg9UFJJVkFUReWSjFNIQVJFROaYoOWwhOS5i+mXtOeahOS4gOS4quW+iOWkp+eahOWMuuWIq+aYr+mihOeVmeWcqOmihOeVmeaYoOWwhOS4reeahOihqOekuuaWueW8j+OAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTE0LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjExNTrlr7nkuo7np4HmnInmmKDlsITvvIxodWdldGxiX3Jlc2VydmVfcGFnZXMoKeWIm+W7uumihOeVmeaYoOWwhOW5tuWwhuWFtuaMguWcqFZNQee7k+aehOS9k+S4iuOAguatpOWklu+8jFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTExNi1IUEFHRV9SRVNWX09XTkVS5qCH5b+X6KKr6K6+572u77yM5Lul6KGo5piO6K+lVk1B5oul5pyJ6aKE55WZ44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMzktXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTQwOuWmguaenGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygp5oiQ5Yqf77yM5YWo5bGA6aKE55WZ5pWw5ZKM5LiO5pig5bCE55u45YWz55qE6aKE55WZ5pig5bCE5bCG5qC55o2u6ZyA6KaB6KKr5L+u5pS577yM5Lul56Gu5L+dXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTQxLeWcqCdmcm9tJy0ndG8n6IyD5Zu05YaF5a2Y5Zyo6aKE55WZ44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xOTM9U2V0UGFnZVByaXZhdGUocGFnZSnlkoxyZXN2X2h1Z2VfcGFnZXMt44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDMt5ZyoYWxsb2NfaHVnZXRsYl9mb2xpbygp5byA5aeL6LCD55Sodm1hX25lZWRzX3Jlc2VydmF0aW9uKCnlkozpobXpnaLliIbphY3lkI7osIPnlKhcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyMDQ6dm1hX2NvbW1pdF9yZXNlcnZhdGlvbigp5LmL6Ze077yM6aKE55WZ5pig5bCE5pyJ5Y+v6IO96KKr5pS55Y+Y44CC5aaC5p6caHVnZXRsYl9yZXNlcnZlX3BhZ2Vz5Zyo5YWxXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjA1LeS6q+aYoOWwhOS4reS4uuWQjOS4gOmhtemdouiiq+iwg+eUqO+8jOi/meWwhuaYr+WPr+iDveeahOOAguWcqOi/meenjeaDheWGteS4i++8jOmihOeVmeiuoeaVsOWSjOWtkOaxoOepuumXsumhteiuoeaVsOS8muacieS4gOS4quWBj+W3ruOAglxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9OTk9c3RhdGljIGludCBodWdldGxiZnNfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1Mi1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTM6XFx0aWYgKGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTQtXFx0XFx0XFx0XFx0dm1hLVxcdTAwM2V2bV9wZ29mZiBcXHUwMDNlXFx1MDAzZSBodWdlX3BhZ2Vfb3JkZXIoaCksXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xNDg0PXN0YXRpYyBpbnQgZ2V0X2hzdGF0ZV9pZHgoaW50IHBhZ2Vfc2l6ZV9sb2cpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDk0LSAqIE5vdGUgdGhhdCBzaXplIHNob3VsZCBiZSBhbGlnbmVkIHRvIHByb3BlciBodWdlcGFnZSBzaXplIGluIGNhbGxlciBzaWRlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0OTU6ICogb3RoZXJ3aXNlIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyByZXNlcnZlcyBvbmUgbGVzcyBodWdlcGFnZXMgdGhhbiBpbnRlbmRlZC5cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDk2LSAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTE0OTc9c3RydWN0IGZpbGUgKmh1Z2V0bGJfZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MzYtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTUzNzpcXHRpZiAoaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKGlub2RlLCAwLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MzgtXFx0XFx0XFx0c2l6ZSBcXHUwMDNlXFx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaHN0YXRlX2lub2RlKGlub2RlKSksIE5VTEwsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xNDQ9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTE1MC0jZW5kaWYgLyogQ09ORklHX1VTRVJGQVVMVEZEICovXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTUxOmxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgZnJvbSwgbG9uZyB0byxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xNTItXFx0XFx0XFx0ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuLS1cXG5tbS9odWdldGxiLmM9MjkzOT1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMzA0MC1cXHRcXHQgKiB2bWFfbmVlZHNfcmVzZXJ2YXRpb24gYW5kIHZtYV9jb21taXRfcmVzZXJ2YXRpb24uXFxubW0vaHVnZXRsYi5jOjMwNDE6XFx0XFx0ICogVGhpcyBpbmRpY2F0ZXMgYSByYWNlIHdpdGggaHVnZXRsYl9yZXNlcnZlX3BhZ2VzLlxcbm1tL2h1Z2V0bGIuYy0zMDQyLVxcdFxcdCAqIEFkanVzdCBmb3IgdGhlIHN1YnBvb2wgY291bnQgaW5jcmVtZW50ZWQgYWJvdmUgQU5EXFxubW0vaHVnZXRsYi5jOjMwNDM6XFx0XFx0ICogaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIGZvciB0aGUgc2FtZSBwYWdlLlxcdEFsc28sXFxubW0vaHVnZXRsYi5jOjMwNDQ6XFx0XFx0ICogdGhlIHJlc2VydmF0aW9uIGNvdW50IGFkZGVkIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1xcbm1tL2h1Z2V0bGIuYy0zMDQ1LVxcdFxcdCAqIG5vIGxvbmdlciBhcHBsaWVzLlxcbi0tXFxubW0vaHVnZXRsYi5jPTY0ODM9bG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY2NTgtXFxubW0vaHVnZXRsYi5jOjY2NTk6bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG5tbS9odWdldGxiLmMtNjY2MC1cXHRcXHRsb25nIGZyb20sIGxvbmcgdG8sXFxuLS1cXG5tbS9odWdldGxiLmMtNjY5OS1cXHRcXHQvKlxcbm1tL2h1Z2V0bGIuYzo2NzAwOlxcdFxcdCAqIHJlc3ZfbWFwIGNhbiBub3QgYmUgTlVMTCBhcyBodWdldGxiX3Jlc2VydmVfcGFnZXMgaXMgb25seVxcbm1tL2h1Z2V0bGIuYy02NzAxLVxcdFxcdCAqIGNhbGxlZCBmb3IgaW5vZGVzIGZvciB3aGljaCByZXN2X21hcHMgd2VyZSBjcmVhdGVkIChzZWVcXG4tLVxcbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbi0tXFxubW0vbWVtZmQuYy04OS1cXG5tbS9tZW1mZC5jOjkwOlxcdFxcdG5yX3Jlc3YgPSBodWdldGxiX3Jlc2VydmVfcGFnZXMoaW5vZGUsIGlkeCwgaWR4ICsgMSwgTlVMTCwgRU1QVFlfVk1BX0ZMQUdTKTtcXG5tbS9tZW1mZC5jLTkxLVxcdFxcdGlmIChucl9yZXN2IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MTAuMjIxNjc5MTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODgxMDkwNzM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgSHVnZXRsYiBSZXNlcnZlIFBhZ2VzIEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBidWc6IGl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgdnVsbmVyYWJpbGl0eSB3aXRoaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgaW4gYG1tL2h1Z2V0bGIuY2AuIFRoZSByb290IGNhdXNlIHN0ZW1zIGZyb20gYW4gaW5jb3JyZWN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgZHVyaW5nIGVycm9yIHJlY292ZXJ5LCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggYGh1Z2VwYWdlX3N1YnBvb2xgIHN0cnVjdHVyZXMuIExvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZSBoYWQgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBwb3RlbnRpYWxseSBmcmVlaW5nIHRoZSBgc3Bvb2xgIHN0cnVjdHVyZSAoaWYgaXRzIGNvdW50IGFuZCB1c2VkIHBhZ2VzIHJlYWNoZWQgemVybykgKmJlZm9yZSogdGhlIGNvZGUgcmVzdG9yZWQgdGhlIGB1c2VkX2hwYWdlc2AgdmFsdWUgb2YgdGhlIGBzcG9vbGAuIFRoaXMgbWVhbnMgdGhhdCBhZnRlcndhcmRzLCB3ZSB3ZXJlIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgaW4gYHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtgIGFuZCB0aGVuIGBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtgIHdoaWNoIGxlYWRzIHRvIGEgdXNlIGFmdGVyIGZyZWUgYnVnLiBUaGUgZml4IGludm9sdmVzIHNpbXBseSByZW9yZGVyaW5nIHRoZSBvcGVyYXRpb25zIHRvIGNvcnJlY3RseSByZXN0b3JlIGBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlc2AgKmJlZm9yZSogcG90ZW50aWFsbHkgZnJlZWluZyB0aGUgYHNwb29sYCwgYXZvaWRpbmcgdGhlIFVBRiBjb25kaXRpb24uXG5cblRoZSByZWFjaCBpcyBzaWduaWZpY2FudC4gVGhpcyBwYXRjaCBpcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9odWdldGxiLmNgLiAgVGhpcyBhcmVhIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBzeXN0ZW0gY2FsbHMgbGlrZSBgbW1hcChNQVBfSFVHRVRMQilgLCBgc2htZ2V0KFNITV9IVUdFVExCKWAsIGBtZW1mZF9jcmVhdGUoTUZEX0hVR0VUTEIpYCwgYW5kIG9wZXJhdGlvbnMgd2l0aCB0aGUgYGh1Z2V0bGJmc2AgZmlsZSBzeXN0ZW0uICBJdCBpcyB3b3J0aCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHBvaW50cyBmb3IgZnV6emluZyBhcmUgZ29pbmcgdG8gYmUgb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgYnVnLCBhbmQgdGhlaXIgcmVsYXRlZCBmdW5jdGlvbnMsIHNvOiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCwgYGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzYCwgYW5kIGBodWdldGxiZnNfZmlsZV9tbWFwYC5cblxuSSd2ZSBjaGVja2VkIHRoZSBzeW1ib2wgdmlzaWJpbGl0eS4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgaXMgYSBnbG9iYWwsIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGdvb2QgZm9yIGZ1enppbmcuIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AgaXMgc3RhdGljIGJ1dCBzdGlsbCByZWFjaGFibGUgYmVjYXVzZSBpdCBpcyBjYWxsZWQgaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AuXG5cblRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBhbHNvIHN0cmFpZ2h0Zm9yd2FyZC4gV2UnbGwgbmVlZCBgSFVHRVRMQkZTYCBhbmQgYEhVR0VUTEJfUEFHRWAuIEl0IGxvb2tzIGxpa2UgYEhVR0VUTEJfUEFHRWAgaXMgc2VsZWN0ZWQgYnkgYEhVR0VUTEJGU2AgaW4gdGhlIEtjb25maWcuXG5cbkluIHN1bW1hcnksIHRoaXMgaXMgYSBwcm9taXNpbmcgdGFyZ2V0LiBUaGUgZml4IHByZXZlbnRzIGEgVUFGIHZ1bG5lcmFiaWxpdHkgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBlYXNpbHkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzeXN0ZW0gY2FsbHMgYW5kIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMuXG5cbldvcnRoRnV6emluZzogVHJ1ZVxuUmVhc29uaW5nOiBUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCB0byBwcmV2ZW50IFVBRiBvbiB0aGUgYGh1Z2VwYWdlX3N1YnBvb2xgIHN0cnVjdHVyZS4gSXQncyBpbiByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIGBtbS9odWdldGxiLmNgLCBhbmQgY2FuIGJlIGV4ZXJjaXNlZCB0aHJvdWdoIGBodWdldGxiZnNgLCBgbW1hcGAsIGBtZW1mZF9jcmVhdGVgLCBvciBgc2htZ2V0YC5cblxuRm9jdXNTeW1ib2xzOiBgW1wiaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXCIsIFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNcIiwgXCJodWdldGxiX3VucmVzZXJ2ZV9wYWdlc1wiLCBcImh1Z2V0bGJmc19maWxlX21tYXBcIl1gXG5FbmFibGVDb25maWdzOiBgW1wiSFVHRVRMQkZTXCIsIFwiSFVHRVRMQl9QQUdFXCJdYFxuXG5BbHJpZ2h0LCBzZWVtcyBwcmV0dHkgc29saWQuIExldCdzIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTA1LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MTkuMDMyNTg5ODQ4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMDUxNTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNcIixcbiAgICBcImh1Z2V0bGJmc19maWxlX21tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgdGVhcmRvd24gb3JkZXJpbmcgaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCkgaW4gbW0vaHVnZXRsYi5jIHRvIHJlc3RvcmUgdXNlZF9ocGFnZXMgYmVmb3JlIHB1dHRpbmcgc3VicG9vbCByZXNlcnZhdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBleGVyY2lzZWQgd2hlbiBodWdldGxiIHJlc2VydmF0aW9ucyBmYWlsIG9yIHJhY2UgZHVyaW5nIG1tYXAsIG1lbWZkX2NyZWF0ZSwgb3Igc2htZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXCIsXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc1wiLFxuICAgIFwiaHVnZXRsYmZzX2ZpbGVfbW1hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyB0ZWFyZG93biBvcmRlcmluZyBpbiBodWdldGxiX3Jlc2VydmVfcGFnZXMoKSBpbiBtbS9odWdldGxiLmMgdG8gcmVzdG9yZSB1c2VkX2hwYWdlcyBiZWZvcmUgcHV0dGluZyBzdWJwb29sIHJlc2VydmF0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGV4ZXJjaXNlZCB3aGVuIGh1Z2V0bGIgcmVzZXJ2YXRpb25zIGZhaWwgb3IgcmFjZSBkdXJpbmcgbW1hcCwgbWVtZmRfY3JlYXRlLCBvciBzaG1nZXQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjIyOjE5LjE4NTY1MzI2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NTI4NTgwMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMjoxOS4xODYyMjQ2MTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMTU1MjI4MDg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVvcmRlcnMgZXJyb3ItcGF0aCBjbGVhbnVwcyBpbiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIHRvIHByZXZlbnQgYSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSAvIGRvdWJsZS1mcmVlIGNvbmRpdGlvbiB3aGVyZSBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoKWAgY291bGQgcmVsZWFzZSBhbmQgZnJlZSBgc3Bvb2xgIHZpYSBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbCgpYCwgZm9sbG93ZWQgYnkgYSBzdWJzZXF1ZW50IGFjY2VzcyB0byBgc3Bvb2xgIGluIHRoZSBgaWYgKGdibF9yZXNlcnZlIFxcdTAwMjZcXHUwMDI2IHNwb29sKWAgYmxvY2suXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljLiBUaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCBpcyBhIG1lbW9yeSBsaWZldGltZSAvIFVBRiBpc3N1ZSwgd2hpY2ggaXMgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjgyZDU0OGVlNWJlODYxYjUxZjJlNmQ2NTY3N2IwNWJlNTE3ZGFhY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTg6MjE6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDc4NTc3Mjg0NTc5NTIuLjNlM2NkYTE4MWU3MjQgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTY4MDgsMTUgKzY4MDgsNiBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFxuIG91dF9wdXRfcGFnZXM6XG4gXHRzcG9vbF9yZXN2ID0gY2hnIC0gZ2JsX3Jlc2VydmU7XG4tXHRpZiAoc3Bvb2xfcmVzdikge1xuLVx0XHQvKiBwdXQgc3ViIHBvb2wncyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqL1xuLVx0XHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTtcbi1cdFx0Lypcbi1cdFx0ICogc3VicG9vbCdzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsXG4tXHRcdCAqIHJldHVybiB0byBoc3RhdGUuXG4tXHRcdCAqL1xuLVx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XG4tXHR9XG4gXHQvKiBSZXN0b3JlIHVzZWRfaHBhZ2VzIGZvciBwYWdlcyB0aGF0IGZhaWxlZCBnbG9iYWwgcmVzZXJ2YXRpb24gKi9cbiBcdGlmIChnYmxfcmVzZXJ2ZSBcdTAwMjZcdTAwMjYgc3Bvb2wpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbkBAIC02ODI2LDYgKzY4MTcsMTUgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcbiBcdFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuIFx0fVxuK1x0aWYgKHNwb29sX3Jlc3YpIHtcbitcdFx0LyogcHV0IHN1YiBwb29sJ3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cbitcdFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XG4rXHRcdC8qXG4rXHRcdCAqIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxuK1x0XHQgKiByZXR1cm4gdG8gaHN0YXRlLlxuK1x0XHQgKi9cbitcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xuK1x0fVxuIG91dF91bmNoYXJnZV9jZ3JvdXA6XG4gXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXG4gXHRcdFx0XHRcdCAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjIyOjE5LjE4NjIyNTg3NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDk3NDM4ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggYW5kIFN1cnJvdW5kaW5ncyBpbiBtbS9odWdldGxiLmMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoaXMgcHJvcG9zZWQgcGF0Y2ggYW5kIGl0cyBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgdGhvcm91Z2ggY29kZSBhbmFseXNpcyB1c2luZyBteSBwcmVmZXJyZWQgdG9vbHMuIEkgd2FudCB0byBzZWUgdGhlIGNvbXBsZXRlIGNvbnRleHQsIG5vdCBqdXN0IHRoZSBpc29sYXRlZCBjaGFuZ2VzLCBzbyBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGNsb3NlIGluc3BlY3Rpb24gb2YgYG1tL2h1Z2V0bGIuY2AgYXJvdW5kIGxpbmUgNjgwOC4gVGhpcyBzcGVjaWZpYyBsb2NhdGlvbiBpcyBvYnZpb3VzbHkgY2VudHJhbCB0byB0aGUgcGF0Y2ggYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGltbWVkaWF0ZSBlbnZpcm9ubWVudCB3aWxsIGJlIGVzc2VudGlhbC4gVGhpcyB3aWxsIGludm9sdmUgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb25zIG9mIHRoZSBtb2RpZmllZCBjb2RlIHdpdGggdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MjMuMjgzNjY3NTU0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjc4MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjc4MDpcXHRcXHRcXHRcXHQgKiBpbmRpY2F0ZXMgYSByYWNlIHdpdGggYWxsb2NfaHVnZXRsYl9mb2xpby4gIEFkanVzdFxcbjY3ODE6XFx0XFx0XFx0XFx0ICogdGhlIHN1YnBvb2wgYW5kIHJlc2VydmUgY291bnRzIG1vZGlmaWVkIGFib3ZlXFxuNjc4MjpcXHRcXHRcXHRcXHQgKiBiYXNlZCBvbiB0aGUgZGlmZmVyZW5jZS5cXG42NzgzOlxcdFxcdFxcdFxcdCAqL1xcbjY3ODQ6XFx0XFx0XFx0XFx0bG9uZyByc3ZfYWRqdXN0O1xcbjY3ODU6XFx0XFxuNjc4NjpcXHRcXHRcXHRcXHQvKlxcbjY3ODc6XFx0XFx0XFx0XFx0ICogaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoKSB3aWxsIHB1dCB0aGVcXG42Nzg4OlxcdFxcdFxcdFxcdCAqIHJlZmVyZW5jZSB0byBoX2NnLVxcdTAwM2Vjc3MuIFNlZSBjb21tZW50IGJlbG93IGZvciBkZXRhaWwuXFxuNjc4OTpcXHRcXHRcXHRcXHQgKi9cXG42NzkwOlxcdFxcdFxcdFxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKFxcbjY3OTE6XFx0XFx0XFx0XFx0XFx0aHN0YXRlX2luZGV4KGgpLFxcbjY3OTI6XFx0XFx0XFx0XFx0XFx0KGNoZyAtIGFkZCkgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcXG42NzkzOlxcdFxcbjY3OTQ6XFx0XFx0XFx0XFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLFxcbjY3OTU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2hnIC0gYWRkKTtcXG42Nzk2OlxcdFxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xcbjY3OTc6XFx0XFx0XFx0fSBlbHNlIGlmIChoX2NnKSB7XFxuNjc5ODpcXHRcXHRcXHRcXHQvKlxcbjY3OTk6XFx0XFx0XFx0XFx0ICogVGhlIGZpbGVfcmVnaW9ucyB3aWxsIGhvbGQgdGhlaXIgb3duIHJlZmVyZW5jZSB0b1xcbjY4MDA6XFx0XFx0XFx0XFx0ICogaF9jZy1cXHUwMDNlY3NzLiBTbyB3ZSBzaG91bGQgcmVsZWFzZSB0aGUgcmVmZXJlbmNlIGhlbGRcXG42ODAxOlxcdFxcdFxcdFxcdCAqIHZpYSBodWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwX3JzdmQoKSB3aGVuIHdlIGFyZVxcbjY4MDI6XFx0XFx0XFx0XFx0ICogZG9uZS5cXG42ODAzOlxcdFxcdFxcdFxcdCAqL1xcbjY4MDQ6XFx0XFx0XFx0XFx0aHVnZXRsYl9jZ3JvdXBfcHV0X3JzdmRfY2dyb3VwKGhfY2cpO1xcbjY4MDU6XFx0XFx0XFx0fVxcbjY4MDY6XFx0XFx0fVxcbjY4MDc6XFx0XFx0cmV0dXJuIGNoZztcXG42ODA4OlxcdFxcbjY4MDk6XFx0b3V0X3B1dF9wYWdlczpcXG42ODEwOlxcdFxcdHNwb29sX3Jlc3YgPSBjaGcgLSBnYmxfcmVzZXJ2ZTtcXG42ODExOlxcdFxcdC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL1xcbjY4MTI6XFx0XFx0aWYgKGdibF9yZXNlcnZlIFxcdTAwMjZcXHUwMDI2IHNwb29sKSB7XFxuNjgxMzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjY4MTQ6XFx0XFxuNjgxNTpcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG42ODE2OlxcdFxcdFxcdGlmIChzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcXG42ODE3OlxcdFxcdFxcdFxcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcXG42ODE4OlxcdFxcdFxcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcXG42ODE5OlxcdFxcdH1cXG42ODIwOlxcdFxcdGlmIChzcG9vbF9yZXN2KSB7XFxuNjgyMTpcXHRcXHRcXHQvKiBwdXQgc3ViIHBvb2wncyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqL1xcbjY4MjI6XFx0XFx0XFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XFxuNjgyMzpcXHRcXHRcXHQvKlxcbjY4MjQ6XFx0XFx0XFx0ICogc3VicG9vbCdzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsXFxuNjgyNTpcXHRcXHRcXHQgKiByZXR1cm4gdG8gaHN0YXRlLlxcbjY4MjY6XFx0XFx0XFx0ICovXFxuNjgyNzpcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XFxuNjgyODpcXHRcXHR9XFxuNjgyOTpcXHRvdXRfdW5jaGFyZ2VfY2dyb3VwOlxcbjY4MzA6XFx0XFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoaHN0YXRlX2luZGV4KGgpLFxcbjY4MzE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xcbjY4MzI6XFx0b3V0X2VycjpcXG42ODMzOlxcdFxcdGh1Z2V0bGJfdm1hX2xvY2tfZnJlZSh2bWEpO1xcbjY4MzQ6XFx0XFx0aWYgKCF2bWEgfHwgdm1hX3Rlc3Qodm1hLCBWTUFfTUFZU0hBUkVfQklUKSlcXG42ODM1OlxcdFxcdFxcdC8qIE9ubHkgY2FsbCByZWdpb25fYWJvcnQgaWYgdGhlIHJlZ2lvbl9jaGcgc3VjY2VlZGVkIGJ1dCB0aGVcXG42ODM2OlxcdFxcdFxcdCAqIHJlZ2lvbl9hZGQgZmFpbGVkIG9yIGRpZG4ndCBydW4uXFxuNjgzNzpcXHRcXHRcXHQgKi9cXG42ODM4OlxcdFxcdFxcdGlmIChjaGcgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBhZGQgXFx1MDAzYyAwKVxcbjY4Mzk6XFx0XFx0XFx0XFx0cmVnaW9uX2Fib3J0KHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQpO1xcbjY4NDA6XFx0XFx0aWYgKHZtYSBcXHUwMDI2XFx1MDAyNiBpc192bWFfcmVzdl9zZXQodm1hLCBIUEFHRV9SRVNWX09XTkVSKSkge1xcbjY4NDE6XFx0XFx0XFx0a3JlZl9wdXQoXFx1MDAyNnJlc3ZfbWFwLVxcdTAwM2VyZWZzLCByZXN2X21hcF9yZWxlYXNlKTtcXG42ODQyOlxcdFxcdFxcdHNldF92bWFfcmVzdl9tYXAodm1hLCBOVUxMKTtcXG42ODQzOlxcdFxcdH1cXG42ODQ0OlxcdFxcdHJldHVybiBlcnI7XFxuNjg0NTpcXHR9XFxuNjg0NjpcXHRcXG42ODQ3OlxcdGxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXFxuNjg0ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRsb25nIGZyZWVkKVxcbjY4NDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMjoyMy4yODQwODA5OTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0Nzg0MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHNlZW4gc25pcHBldHMgb2YgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgYW5kIG5vdyBJIG5lZWQgdG8gZmxlc2ggb3V0IGV4YWN0bHkgaG93IHRoaXMgcm91dGluZSB3b3Jrcy4gR2l2ZW4gdGhlIG5hbWUsIEknbSBleHBlY3RpbmcgdGhpcyBpcyB0aGUgY2VudHJhbCBsb2dpYyBmb3IgYWN0dWFsbHkgY2xhaW1pbmcgaHVnZXBhZ2VzIGZvciBhIHVzZXIsIG9yIGEgcHJvY2Vzcy4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgY29udHJvbCBmbG93IGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbiwgYWNjb3VudGluZywgYW5kIG1heWJlIGV2ZW4gTlVNQSBjb25zaWRlcmF0aW9ucy4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24gaXQgdXNlcywgdGhlIGVycm9yIGhhbmRsaW5nLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggcmVzb3VyY2UgZXhoYXVzdGlvbi4gSSdsbCBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gd2hlcmUgaXQgbWlnaHQgdG91Y2ggdGhlIGdsb2JhbCBwYWdlIHRhYmxlcywgYW5kIGhvdyB0aGUgcmVzZXJ2YXRpb25zIGNhc2NhZGUgKG9yIGRvbid0KSBhY3Jvc3MgZGlmZmVyZW50IHByb2Nlc3NlcyBvciBjb250ZXh0cy4gSSdtIGFsc28gYW50aWNpcGF0aW5nIGNoZWNraW5nIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgZXZhbHVhdGluZyB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIG9uIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlIHdoZW4gcnVubmluZyB0aGlzIGZ1bmN0aW9uIGluIHBhcmFsbGVsLCBmb3IgaW5zdGFuY2UuIEknbSBob3BpbmcgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGVudGlyZSByZXNlcnZlIGFuZCByZWxlYXNlIGxpZmVjeWNsZSB0byBhbnRpY2lwYXRlIGFueSBwb3NzaWJsZSBlZGdlIGNhc2VzLCBhbmQgYXJlYXMgdG8gcG90ZW50aWFsbHkgb3B0aW1pemUuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgxNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MjUuNzMxOTI1ODc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzQzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjcyMCxcbiAgXCJMaW5lQ291bnRcIjogNjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjcyMDpcXHRcXG42NzIxOlxcdFxcdGlmIChjaGcgXFx1MDAzYyAwKSB7XFxuNjcyMjpcXHRcXHRcXHQvKiByZWdpb25fY2hnKCkgYWJvdmUgY2FuIHJldHVybiAtRU5PTUVNICovXFxuNjcyMzpcXHRcXHRcXHRlcnIgPSAoY2hnID09IC1FTk9NRU0pID8gLUVOT01FTSA6IC1FSU5WQUw7XFxuNjcyNDpcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuNjcyNTpcXHRcXHR9XFxuNjcyNjpcXHRcXG42NzI3OlxcdFxcdGVyciA9IGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXFxuNjcyODpcXHRcXHRcXHRcXHRcXHRjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBcXHUwMDI2aF9jZyk7XFxuNjcyOTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG42NzMwOlxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG42NzMxOlxcdFxcbjY3MzI6XFx0XFx0aWYgKHZtYSBcXHUwMDI2XFx1MDAyNiAhdm1hX3Rlc3Qodm1hLCBWTUFfTUFZU0hBUkVfQklUKSBcXHUwMDI2XFx1MDAyNiBoX2NnKSB7XFxuNjczMzpcXHRcXHRcXHQvKiBGb3IgcHJpdmF0ZSBtYXBwaW5ncywgdGhlIGh1Z2V0bGJfY2dyb3VwIHVuY2hhcmdlIGluZm8gaGFuZ3NcXG42NzM0OlxcdFxcdFxcdCAqIG9mIHRoZSByZXN2X21hcC5cXG42NzM1OlxcdFxcdFxcdCAqL1xcbjY3MzY6XFx0XFx0XFx0cmVzdl9tYXBfc2V0X2h1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2luZm8ocmVzdl9tYXAsIGhfY2csIGgpO1xcbjY3Mzc6XFx0XFx0fVxcbjY3Mzg6XFx0XFxuNjczOTpcXHRcXHQvKlxcbjY3NDA6XFx0XFx0ICogVGhlcmUgbXVzdCBiZSBlbm91Z2ggcGFnZXMgaW4gdGhlIHN1YnBvb2wgZm9yIHRoZSBtYXBwaW5nLiBJZlxcbjY3NDE6XFx0XFx0ICogdGhlIHN1YnBvb2wgaGFzIGEgbWluaW11bSBzaXplLCB0aGVyZSBtYXkgYmUgc29tZSBnbG9iYWxcXG42NzQyOlxcdFxcdCAqIHJlc2VydmF0aW9ucyBhbHJlYWR5IGluIHBsYWNlIChnYmxfcmVzZXJ2ZSkuXFxuNjc0MzpcXHRcXHQgKi9cXG42NzQ0OlxcdFxcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7XFxuNjc0NTpcXHRcXHRpZiAoZ2JsX3Jlc2VydmUgXFx1MDAzYyAwKSB7XFxuNjc0NjpcXHRcXHRcXHRlcnIgPSBnYmxfcmVzZXJ2ZTtcXG42NzQ3OlxcdFxcdFxcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcXG42NzQ4OlxcdFxcdH1cXG42NzQ5OlxcdFxcbjY3NTA6XFx0XFx0LypcXG42NzUxOlxcdFxcdCAqIENoZWNrIGVub3VnaCBodWdlcGFnZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIHJlc2VydmF0aW9uLlxcbjY3NTI6XFx0XFx0ICogSGFuZCB0aGUgcGFnZXMgYmFjayB0byB0aGUgc3VicG9vbCBpZiB0aGVyZSBhcmUgbm90XFxuNjc1MzpcXHRcXHQgKi9cXG42NzU0OlxcdFxcdGVyciA9IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc2VydmUpO1xcbjY3NTU6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuNjc1NjpcXHRcXHRcXHRnb3RvIG91dF9wdXRfcGFnZXM7XFxuNjc1NzpcXHRcXG42NzU4OlxcdFxcdC8qXFxuNjc1OTpcXHRcXHQgKiBBY2NvdW50IGZvciB0aGUgcmVzZXJ2YXRpb25zIG1hZGUuIFNoYXJlZCBtYXBwaW5ncyByZWNvcmQgcmVnaW9uc1xcbjY3NjA6XFx0XFx0ICogdGhhdCBoYXZlIHJlc2VydmF0aW9ucyBhcyB0aGV5IGFyZSBzaGFyZWQgYnkgbXVsdGlwbGUgVk1Bcy5cXG42NzYxOlxcdFxcdCAqIFdoZW4gdGhlIGxhc3QgVk1BIGRpc2FwcGVhcnMsIHRoZSByZWdpb24gbWFwIHNheXMgaG93IG11Y2hcXG42NzYyOlxcdFxcdCAqIHRoZSByZXNlcnZhdGlvbiB3YXMgYW5kIHRoZSBwYWdlIGNhY2hlIHRlbGxzIGhvdyBtdWNoIG9mXFxuNjc2MzpcXHRcXHQgKiB0aGUgcmVzZXJ2YXRpb24gd2FzIGNvbnN1bWVkLiBQcml2YXRlIG1hcHBpbmdzIGFyZSBwZXItVk1BIGFuZFxcbjY3NjQ6XFx0XFx0ICogb25seSB0aGUgY29uc3VtZWQgcmVzZXJ2YXRpb25zIGFyZSB0cmFja2VkLiBXaGVuIHRoZSBWTUFcXG42NzY1OlxcdFxcdCAqIGRpc2FwcGVhcnMsIHRoZSBvcmlnaW5hbCByZXNlcnZhdGlvbiBpcyB0aGUgVk1BIHNpemUgYW5kIHRoZVxcbjY3NjY6XFx0XFx0ICogY29uc3VtZWQgcmVzZXJ2YXRpb25zIGFyZSBzdG9yZWQgaW4gdGhlIG1hcC4gSGVuY2UsIG5vdGhpbmdcXG42NzY3OlxcdFxcdCAqIGVsc2UgaGFzIHRvIGJlIGRvbmUgZm9yIHByaXZhdGUgbWFwcGluZ3MgaGVyZVxcbjY3Njg6XFx0XFx0ICovXFxuNjc2OTpcXHRcXHRpZiAoIXZtYSB8fCB2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKSB7XFxuNjc3MDpcXHRcXHRcXHRhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpO1xcbjY3NzE6XFx0XFxuNjc3MjpcXHRcXHRcXHRpZiAodW5saWtlbHkoYWRkIFxcdTAwM2MgMCkpIHtcXG42NzczOlxcdFxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcXG42Nzc0OlxcdFxcdFxcdFxcdGVyciA9IGFkZDtcXG42Nzc1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3B1dF9wYWdlcztcXG42Nzc2OlxcdFxcdFxcdH0gZWxzZSBpZiAodW5saWtlbHkoY2hnIFxcdTAwM2UgYWRkKSkge1xcbjY3Nzc6XFx0XFx0XFx0XFx0LypcXG42Nzc4OlxcdFxcdFxcdFxcdCAqIHBhZ2VzIGluIHRoaXMgcmFuZ2Ugd2VyZSBhZGRlZCB0byB0aGUgcmVzZXJ2ZVxcbjY3Nzk6XFx0XFx0XFx0XFx0ICogbWFwIGJldHdlZW4gcmVnaW9uX2NoZyBhbmQgcmVnaW9uX2FkZC4gIFRoaXNcXG42NzgwOlxcdFxcdFxcdFxcdCAqIGluZGljYXRlcyBhIHJhY2Ugd2l0aCBhbGxvY19odWdldGxiX2ZvbGlvLiAgQWRqdXN0XFxuNjc4MTpcXHRcXHRcXHRcXHQgKiB0aGUgc3VicG9vbCBhbmQgcmVzZXJ2ZSBjb3VudHMgbW9kaWZpZWQgYWJvdmVcXG42NzgyOlxcdFxcdFxcdFxcdCAqIGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlLlxcbjY3ODM6XFx0XFx0XFx0XFx0ICovXFxuNjc4NDpcXHRcXHRcXHRcXHRsb25nIHJzdl9hZGp1c3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjIyOjI1LjczMjU1NzE0NloiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjQwMDI3NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhpcyBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlIGFuZCBiZWhhdmlvci4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSB0cnVlIG11dGV4IHVubG9jaywgYSBwb3RlbnRpYWwgcmVsZWFzZSBiYWNrIHRvIGEgcmVzb3VyY2UgcG9vbCwgb3IgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBudWFuY2VkLiBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUg4oCTIGFyZSB3ZSBkZWFsaW5nIHdpdGggYSBzaGFyZWQgcmVzb3VyY2UsIGEgc3BlY2lmaWMgbWVtb3J5IGFsbG9jYXRpb24sIG9yIG1heWJlIGEgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZT8gQ29udGV4dCBpcyBldmVyeXRoaW5nIGhlcmUuIFdoYXQncyB0aGUgYW50aWNpcGF0ZWQgdXNhZ2UgcGF0dGVybj8gSXMgaXQgaGVhdmlseSBjb250ZW5kZWQsIG9yIHJlbGF0aXZlbHkgcmFyZT8gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl0IGRvZXMgKnNvbWV0aGluZyogd2l0aCByZWxlYXNpbmcgYSByZXNvdXJjZSwgcG90ZW50aWFsbHkgY29uZGl0aW9uYWwgYmFzZWQgb24gc29tZSBjcml0ZXJpYSwgc28gdGhlIGBvcmAgaXMgaW50ZXJlc3RpbmcgdG8gbWUgLSBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIG9wZXJhdGlvbnMsIHVubG9ja2luZyB2cyByZWxlYXNlLiBUaGUgdW5kZXJseWluZyBzZW1hbnRpY3Mgb2YgaG93IHRoZSBzdWJwb29sIGlzIG1hbmFnZWQgYXJlIHdoYXQgSSdtIGZvY3VzZWQgb24gLSBJJ2xsIHRyYWNlIGRvd24gaXRzIHBhdGggYW5kIHNlZSBleGFjdGx5IGhvdyBpdCBiZWhhdmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjAzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMjoyOS45NzI1ODc0OTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDE0NzczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MTI5PXN0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE0MC1cXG5tbS9odWdldGxiLmM6MTQxOnN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG5tbS9odWdldGxiLmMtMTQyLVxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzKVxcbi0tXFxubW0vaHVnZXRsYi5jPTE4Mz12b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xOTItXFx0c3Bvb2wtXFx1MDAzZWNvdW50LS07XFxubW0vaHVnZXRsYi5jOjE5MzpcXHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XFxubW0vaHVnZXRsYi5jLTE5NC19XFxuLS1cXG5tbS9odWdldGxiLmM9MjQ5PXN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNzgtXFx0ICovXFxubW0vaHVnZXRsYi5jOjI3OTpcXHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XFxubW0vaHVnZXRsYi5jLTI4MC1cXG4tLVxcbm1tL2h1Z2V0bGIuYz02NjU5PWxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5tbS9odWdldGxiLmMtNjgxNy1cXHRcXHRcXHRzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7XFxubW0vaHVnZXRsYi5jOjY4MTg6XFx0XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYy02ODE5LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MzAuMDk2NzM5NjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI2NzEwNjkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIFN1YnBvb2wgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBoYW5kbGluZyB0aGUgcmVsZWFzZSBhbmQgcG90ZW50aWFsIHVubG9ja2luZyBvZiBzdWJwb29scywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2xgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgLiBJIGtub3cgdGhlIHRoZW9yeSwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIHByYWN0aWNhbCBpbXBsZW1lbnRhdGlvbi4gTXkgZXhwZXJ0IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoZXJlIGFyZSBsaWtlbHkgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgaGVyZSwgcHJvYmFibHkgYXJvdW5kIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFuZCBob3cgdGhleSdyZSB1c2VkIGluIHRoZSBjb250ZXh0IG9mIGh1Z2UgcGFnZXMuIEknbSBndWVzc2luZyB0aGUgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2xgIGZ1bmN0aW9uIG1pZ2h0IGludm9sdmUgc29tZSBjbGV2ZXIgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHBvdGVudGlhbGx5IGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gQW5kIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AuLi4gdGhhdCBsaWtlbHkgdGllcyBpbnRvIGhvdyB3ZSByZXR1cm4gaHVnZSBwYWdlIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0sIG1heWJlIHRocm91Z2ggc29tZSBraW5kIG9mIGZyZWUgbGlzdCBvciBtb3JlIGNvbXBsZXggYWxsb2NhdGlvbiBzdHJhdGVneS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgZGV0YWlscyBvZiB0aGVpciBkYW5jZS4gSSdtIGV4cGVjdGluZyBzb21lIHdlbGwtcGxhY2VkIGFzc2VydGlvbnMgYW5kIGNvbW1lbnRzIGluIHRoZSBjb2RlIHRvIGd1aWRlIG15IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4ODksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMjozMi4zNjM4NTAwMzhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEyNDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2V0bGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzU6XFx0XFx0aWYgKHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxcbiAxMzY6XFx0XFx0XFx0cmV0dXJuIHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID09IHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzO1xcbiAxMzc6XFx0XFxuIDEzODpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMTM5OlxcdH1cXG4gMTQwOlxcdFxcbiAxNDE6XFx0c3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbiAxNDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBpcnFfZmxhZ3MpXFxuIDE0MzpcXHR7XFxuIDE0NDpcXHRcXHRib29sIGZyZWVfc3VicG9vbCA9IHN1YnBvb2xfaXNfZnJlZShzcG9vbCk7XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdFxcdC8qIElmIG5vIHBhZ2VzIGFyZSB1c2VkLCBhbmQgbm8gb3RoZXIgaGFuZGxlcyB0byB0aGUgc3VicG9vbFxcbiAxNDc6XFx0XFx0ICogcmVtYWluLCBnaXZlIHVwIGFueSByZXNlcnZhdGlvbnMgYmFzZWQgb24gbWluaW11bSBzaXplIGFuZFxcbiAxNDg6XFx0XFx0ICogZnJlZSB0aGUgc3VicG9vbCAqL1xcbiAxNDk6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2ssIGlycV9mbGFncyk7XFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdGlmIChmcmVlX3N1YnBvb2wpIHtcXG4gMTUyOlxcdFxcdFxcdGlmIChzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyAhPSAtMSlcXG4gMTUzOlxcdFxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3Bvb2wtXFx1MDAzZWhzdGF0ZSxcXG4gMTU0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdC1zcG9vbC1cXHUwMDNlbWluX2hwYWdlcyk7XFxuIDE1NTpcXHRcXHRcXHRrZnJlZShzcG9vbCk7XFxuIDE1NjpcXHRcXHR9XFxuIDE1NzpcXHR9XFxuIDE1ODpcXHRcXG4gMTU5OlxcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdlcGFnZV9uZXdfc3VicG9vbChzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIG1heF9ocGFnZXMsXFxuIDE2MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRsb25nIG1pbl9ocGFnZXMpXFxuIDE2MTpcXHR7XFxuIDE2MjpcXHRcXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2w7XFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdHNwb29sID0ga3phbGxvY19vYmooKnNwb29sKTtcXG4gMTY1OlxcdFxcdGlmICghc3Bvb2wpXFxuIDE2NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnNwb29sLVxcdTAwM2Vsb2NrKTtcXG4gMTY5OlxcdFxcdHNwb29sLVxcdTAwM2Vjb3VudCA9IDE7XFxuIDE3MDpcXHRcXHRzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyA9IG1heF9ocGFnZXM7XFxuIDE3MTpcXHRcXHRzcG9vbC1cXHUwMDNlaHN0YXRlID0gaDtcXG4gMTcyOlxcdFxcdHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzID0gbWluX2hwYWdlcztcXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0aWYgKG1pbl9ocGFnZXMgIT0gLTEgXFx1MDAyNlxcdTAwMjYgaHVnZXRsYl9hY2N0X21lbW9yeShoLCBtaW5faHBhZ2VzKSkge1xcbiAxNzU6XFx0XFx0XFx0a2ZyZWUoc3Bvb2wpO1xcbiAxNzY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE3NzpcXHRcXHR9XFxuIDE3ODpcXHRcXHRzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyA9IG1pbl9ocGFnZXM7XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdHJldHVybiBzcG9vbDtcXG4gMTgxOlxcdH1cXG4gMTgyOlxcdFxcbiAxODM6XFx0dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXFxuIDE4NDpcXHR7XFxuIDE4NTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAxODY6XFx0XFxuIDE4NzpcXHRcXHRpZiAoIXNwb29sKVxcbiAxODg6XFx0XFx0XFx0cmV0dXJuO1xcbiAxODk6XFx0XFxuIDE5MDpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3Bvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gMTkxOlxcdFxcdEJVR19PTighc3Bvb2wtXFx1MDAzZWNvdW50KTtcXG4gMTkyOlxcdFxcdHNwb29sLVxcdTAwM2Vjb3VudC0tO1xcbiAxOTM6XFx0XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbiAxOTQ6XFx0fVxcbiAxOTU6XFx0XFxuIDE5NjpcXHQvKlxcbiAxOTc6XFx0ICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBhbGxvY2F0aW5nIGFuZCByZXNlcnZpbmcgcGFnZXMuXFxuIDE5ODpcXHQgKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGVcXG4gMTk5OlxcdCAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZVxcbiAyMDA6XFx0ICogZ2xvYmFsIHBvb2xzIG11c3QgYmUgYWRqdXN0ZWQgKHVwd2FyZCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5XFxuIDIwMTpcXHQgKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZVxcbiAyMDI6XFx0ICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXFxuIDIwMzpcXHQgKi9cXG4gMjA0OlxcdHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MzIuMzY0NDY3MzY5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNDM3NzQ2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gSHVnZXBhZ2UgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGJlZW4gZXhhbWluaW5nIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIGFuZCBJJ20gZ2V0dGluZyBhIGdvb2QgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGZsb3cuIE5vdywgSSB3YW50IHRvIHBpdm90IGFuZCByZWFsbHkgZGlnIGludG8gYSBjcml0aWNhbCBmdW5jdGlvbjogYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYC4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIHN1YnBvb2xzIHRvIHJldHVybiBwYWdlcy4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgd2hlcmUgdGhlIHBhZ2VzIGdvLCBhbmQgaG93IHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgZXNwZWNpYWxseSB0aGUgb25lcyB1c2VkIHdpdGhpbiB0aGUgYGh1Z2VwYWdlX3N1YnBvb2xgIGNvbnRleHQsIGFyZSBtb2RpZmllZCBkdXJpbmcgdGhpcyBcInB1dFwiIG9wZXJhdGlvbi4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBjb250cmlidXRlcyB0byBtYWludGFpbmluZyB0aGUgaW50ZWdyaXR5IG9mIG91ciBodWdlcGFnZSBwb29scy4gSSBzdXNwZWN0IHdlIHdpbGwgZmluZCBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgd2l0aGluIHRoaXMgcGFydCBvZiB0aGUgY29kZWJhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjIyOjM0LjYwODI0NDM4NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjM0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0NTpcXHQgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBnbG9iYWwgcGFnZSByZXNlcnZhdGlvbnMgdGhhdCBtdXN0IGJlIGRyb3BwZWQuXFxuIDI0NjpcXHQgKiBUaGUgcmV0dXJuIHZhbHVlIG1heSBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKVxcbiAyNDc6XFx0ICogaW4gdGhlIGNhc2Ugd2hlcmUgYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXFxuIDI0ODpcXHQgKi9cXG4gMjQ5OlxcdHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4gMjUwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBsb25nIGRlbHRhKVxcbiAyNTE6XFx0e1xcbiAyNTI6XFx0XFx0bG9uZyByZXQgPSBkZWx0YTtcXG4gMjUzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDI1NDpcXHRcXG4gMjU1OlxcdFxcdGlmICghc3Bvb2wpXFxuIDI1NjpcXHRcXHRcXHRyZXR1cm4gZGVsdGE7XFxuIDI1NzpcXHRcXG4gMjU4OlxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiAyNTk6XFx0XFxuIDI2MDpcXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXFx0XFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cXG4gMjYxOlxcdFxcdFxcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyAtPSBkZWx0YTtcXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0IC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXFxuIDI2NDpcXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXFx1MDAyNlxcdTAwMjYgc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzIFxcdTAwM2Mgc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMpIHtcXG4gMjY1OlxcdFxcdFxcdGlmIChzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIFxcdTAwM2M9IHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzKVxcbiAyNjY6XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4gMjY3OlxcdFxcdFxcdGVsc2VcXG4gMjY4OlxcdFxcdFxcdFxcdHJldCA9IHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgLSBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcztcXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0XFx0c3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgKz0gZGVsdGE7XFxuIDI3MTpcXHRcXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgXFx1MDAzZSBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcylcXG4gMjcyOlxcdFxcdFxcdFxcdHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID0gc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXM7XFxuIDI3MzpcXHRcXHR9XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdC8qXFxuIDI3NjpcXHRcXHQgKiBJZiBodWdldGxiZnNfcHV0X3N1cGVyIGNvdWxkbid0IGZyZWUgc3Bvb2wgZHVlIHRvIGFuIG91dHN0YW5kaW5nXFxuIDI3NzpcXHRcXHQgKiBxdW90YSByZWZlcmVuY2UsIGZyZWUgaXQgbm93LlxcbiAyNzg6XFx0XFx0ICovXFxuIDI3OTpcXHRcXHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdHJldHVybiByZXQ7XFxuIDI4MjpcXHR9XFxuIDI4MzpcXHRcXG4gMjg0OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnN1YnBvb2xfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAyODU6XFx0e1xcbiAyODY6XFx0XFx0cmV0dXJuIHN1YnBvb2xfaW5vZGUoZmlsZV9pbm9kZSh2bWEtXFx1MDAzZXZtX2ZpbGUpKTtcXG4gMjg3OlxcdH1cXG4gMjg4OlxcdFxcbiAyODk6XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MjI6MzQuNjA4NjY5Njg1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMjk4MDgzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IEZpeGluZyBhIFBvdGVudGlhbCBVQUYgaW4gSHVnZVRMQiBSZXNlcnZhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gVGhlIGtleSBpc3N1ZSBpcyB0aGUgcmVvcmRlcmluZyBvZiBvcGVyYXRpb25zIHdpdGhpbiBgb3V0X3B1dF9wYWdlc2AuIEl0IHNlZW1zIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIChVQUYpIHZ1bG5lcmFiaWxpdHkuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNjZW5hcmlvIHdoZXJlIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AgY291bGQgZnJlZSB0aGUgYHNwb29sYCBvYmplY3QgaWYgYSBjZXJ0YWluIGNvbmRpdGlvbiBpbiBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAgd2FzIG1ldCwgbWFraW5nIHRoZSBzdWJzZXF1ZW50IGFjY2VzcyBvZiBgc3Bvb2wtXHUwMDNlbG9ja2AgYSBVQUYuIEVzc2VudGlhbGx5LCB0aGUgY29kZSB3YXMgc3VzY2VwdGlibGUgdG8gZnJlZWluZyB0aGUgc3VicG9vbCBwcmVtYXR1cmVseSwgbGVhZGluZyB0byBtZW1vcnkgY29ycnVwdGlvbi5cblxuVGhlIGZpeCwgcmVvcmRlcmluZyB0aGUgY29uZGl0aW9uYWxzLCBzZWVtcyBzb3VuZCBhcyBpdCBlbnN1cmVzIHRoYXQgdGhlIGNyaXRpY2FsIGNoZWNrIGZvciB0aGUgYHNwb29sYCdzIHZhbGlkaXR5IG9jY3VycyAqYmVmb3JlKiBhbnkgcG90ZW50aWFsbHkgZnJlZWluZyBvcGVyYXRpb24uICBHb29kIGNhdGNoLCB0aGF0J3MgYSBjbGFzc2ljIGhlYXAgbGlmZXRpbWUgYnVnLiBLQVNBTiBzaG91bGQgZWFzaWx5IGNhdGNoIHRoYXQga2luZCBvZiBpc3N1ZS5cblxuTm93LCBsZXQncyBjb25zaWRlciBpZiB0aGlzIHJlcXVpcmVzIEtNU0FOLiBJIG5lZWQgdG8gYmUgcmlnb3JvdXMgaGVyZSwgZ2l2ZW4gdGhlIHJlc291cmNlIGNvc3RzLiBJIG5lZWQgdG8gY2hlY2sgaWYgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQuIFRoZSB2YXJpYWJsZXMgaW4gcXVlc3Rpb24gYXJlOiBgc3Bvb2xfcmVzdmAsIGBnYmxfcmVzdmAsIGBnYmxfcmVzZXJ2ZWAsIGBjaGdgLCBgc3Bvb2xgLCBgaGAsIGFuZCBgZmxhZ3NgLiBMb29raW5nIGF0IHRoZWlyIGluaXRpYWxpemF0aW9uIHdpdGhpbiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYHNwb29sX3Jlc3ZgLCBgZ2JsX3Jlc2VydmVgLCBgZmxhZ3NgLCBgY2hnYCwgZXRjLiBhcmUgYWxsIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGNoYW5nZXMgdGhhdCB3b3VsZCByZXN1bHQgaW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGJyYW5jaGluZyBvciBib3VuZHMgY2hlY2tpbmcuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhlIHBhdGNoIGRpcmVjdGx5IGFkZHJlc3NlcyBhIFVBRi9kb3VibGUtZnJlZSB2dWxuZXJhYmlsaXR5LCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCBLQVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QsIGEgS01TQU4gc2Vzc2lvbiBpcyB1bm5lY2Vzc2FyeS4gS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgaGVyZS4gTm8gc2Vuc2UgaW4gd2FzdGluZyByZXNvdXJjZXMuXG5cblRoZSBjb25jbHVzaW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogYE5lZWRzS01TQU4gPSBmYWxzZWAuIEknbSBjb25maWRlbnQgaW4gdGhhdCBhc3Nlc3NtZW50LiBUaW1lIHRvIGZvcm11bGF0ZSB0aGUgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEzNiwiT3V0cHV0VG9rZW5zIjoxODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoyMjo0MC43Mzg0ODA0NzVaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JkZXJzIGVycm9yLXBhdGggY2xlYW51cHMgaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCB0byBwcmV2ZW50IGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgLyBkb3VibGUtZnJlZSBjb25kaXRpb24gd2hlcmUgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKClgIGNvdWxkIHJlbGVhc2UgYW5kIGZyZWUgYHNwb29sYCB2aWEgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woKWAsIGZvbGxvd2VkIGJ5IGEgc3Vic2VxdWVudCBhY2Nlc3MgdG8gYHNwb29sYCBpbiB0aGUgYGlmIChnYmxfcmVzZXJ2ZSBcXHUwMDI2XFx1MDAyNiBzcG9vbClgIGJsb2NrLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBzdHJ1Y3R1cmUgcGFkZGluZywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYy4gVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQgaXMgYSBtZW1vcnkgbGlmZXRpbWUgLyBVQUYgaXNzdWUsIHdoaWNoIGlzIGRldGVjdGVkIGJ5IEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JkZXJzIGVycm9yLXBhdGggY2xlYW51cHMgaW4gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCB0byBwcmV2ZW50IGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgLyBkb3VibGUtZnJlZSBjb25kaXRpb24gd2hlcmUgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKClgIGNvdWxkIHJlbGVhc2UgYW5kIGZyZWUgYHNwb29sYCB2aWEgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woKWAsIGZvbGxvd2VkIGJ5IGEgc3Vic2VxdWVudCBhY2Nlc3MgdG8gYHNwb29sYCBpbiB0aGUgYGlmIChnYmxfcmVzZXJ2ZSBcXHUwMDI2XFx1MDAyNiBzcG9vbClgIGJsb2NrLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBzdHJ1Y3R1cmUgcGFkZGluZywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYy4gVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQgaXMgYSBtZW1vcnkgbGlmZXRpbWUgLyBVQUYgaXNzdWUsIHdoaWNoIGlzIGRldGVjdGVkIGJ5IEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cp52[1] Phase: Succeeded StartedAt: 2026-09-07 18:22:51 +0000 UTC FinishedAt: 2026-09-07 18:22:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 18:22:51 +0000 UTC FinishedAt: 2026-09-07 18:22:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2] Phase: Succeeded StartedAt: 2026-09-07 18:22:51 +0000 UTC FinishedAt: 2026-09-07 22:02:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 18:22:51 +0000 UTC FinishedAt: 2026-09-07 22:02:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 18:22:51 +0000 UTC FinishedAt: 2026-09-07 18:23:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 18:22:51 +0000 UTC FinishedAt: 2026-09-07 18:22:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6cp52/series-workflow6cp52-convert-artifact-280990129/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 18:23:01 +0000 UTC FinishedAt: 2026-09-07 18:39:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 18:23:01 +0000 UTC FinishedAt: 2026-09-07 18:39:57 +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:*cd6136e8-ae53-4276-b850-06397934a27f,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-workflow6cp52/series-workflow6cp52-convert-artifact-280990129/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": "1c7f180b-34f0-4d1c-95d6-40991d8dc3e8", "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-workflow6cp52/series-workflow6cp52-build-action-548679647/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 18:23:01 +0000 UTC FinishedAt: 2026-09-07 18:39:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cd6136e8-ae53-4276-b850-06397934a27f,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-workflow6cp52/series-workflow6cp52-convert-artifact-280990129/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": "1c7f180b-34f0-4d1c-95d6-40991d8dc3e8", "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-workflow6cp52/series-workflow6cp52-build-action-548679647/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 18:39:57 +0000 UTC FinishedAt: 2026-09-07 18:39:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 18:39:57 +0000 UTC FinishedAt: 2026-09-07 18:39:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 18:39:57 +0000 UTC FinishedAt: 2026-09-07 18:40:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 18:39:57 +0000 UTC FinishedAt: 2026-09-07 18:40:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6cp52/series-workflow6cp52-convert-artifact-1005030404/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 18:40:07 +0000 UTC FinishedAt: 2026-09-07 18:42:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 18:40:07 +0000 UTC FinishedAt: 2026-09-07 18:41:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1c7f180b-34f0-4d1c-95d6-40991d8dc3e8,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-workflow6cp52/series-workflow6cp52-build-action-548679647/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-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 18:42:04 +0000 UTC FinishedAt: 2026-09-07 18:42:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 18:42:04 +0000 UTC FinishedAt: 2026-09-07 18:42:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 18:42:04 +0000 UTC FinishedAt: 2026-09-07 18:58:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 18:42:04 +0000 UTC FinishedAt: 2026-09-07 18:58:11 +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:*cd6136e8-ae53-4276-b850-06397934a27f,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-workflow6cp52/series-workflow6cp52-convert-artifact-1005030404/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": "9b6a2d59-b220-4e16-91d7-c2820f729486", "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-workflow6cp52/series-workflow6cp52-build-action-490571280/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 18:42:04 +0000 UTC FinishedAt: 2026-09-07 18:58:01 +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:*cd6136e8-ae53-4276-b850-06397934a27f,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-workflow6cp52/series-workflow6cp52-convert-artifact-1005030404/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": "9b6a2d59-b220-4e16-91d7-c2820f729486", "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-workflow6cp52/series-workflow6cp52-build-action-490571280/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 18:58:11 +0000 UTC FinishedAt: 2026-09-07 18:58:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 18:58:11 +0000 UTC FinishedAt: 2026-09-07 18:58:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 18:58:11 +0000 UTC FinishedAt: 2026-09-07 18:59:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 18:58:11 +0000 UTC FinishedAt: 2026-09-07 18:59:46 +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:*9b6a2d59-b220-4e16-91d7-c2820f729486,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-workflow6cp52/series-workflow6cp52-build-action-490571280/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-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 18:59:56 +0000 UTC FinishedAt: 2026-09-07 22:02:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 18:59:56 +0000 UTC FinishedAt: 2026-09-07 22:02:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*1c7f180b-34f0-4d1c-95d6-40991d8dc3e8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9b6a2d59-b220-4e16-91d7-c2820f729486,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-workflow6cp52/series-workflow6cp52-build-action-548679647/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-workflow6cp52/series-workflow6cp52-build-action-490571280/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 18:59:56 +0000 UTC FinishedAt: 2026-09-07 19:00:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 18:59:56 +0000 UTC FinishedAt: 2026-09-07 19:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6cp52/series-workflow6cp52-convert-artifact-1517608461/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 18:59:56 +0000 UTC FinishedAt: 2026-09-07 18:59:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 18:59:56 +0000 UTC FinishedAt: 2026-09-07 18:59:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 18:59:56 +0000 UTC FinishedAt: 2026-09-07 18:59:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 19:00:06 +0000 UTC FinishedAt: 2026-09-07 22:02:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cp52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","hugepage_subpool_put_pages","hugetlbfs_file_mmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c96294afbcb5737da18229e788ca45a5d534abc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PAGE"],"series_id":"90ff0e2b-4793-489c-b92d-1f1c82af5f07","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 19:00:06 +0000 UTC FinishedAt: 2026-09-07 22:02:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1c7f180b-34f0-4d1c-95d6-40991d8dc3e8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9b6a2d59-b220-4e16-91d7-c2820f729486,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-workflow6cp52/series-workflow6cp52-build-action-548679647/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-workflow6cp52/series-workflow6cp52-build-action-490571280/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-workflow6cp52/series-workflow6cp52-convert-artifact-1517608461/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,}