Name: series-workflowtd7st Phase: Succeeded StartedAt: 2026-06-30 02:59:44 +0000 UTC FinishedAt: 2026-06-30 07:28:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[0] Phase: Succeeded StartedAt: 2026-06-30 02:59:44 +0000 UTC FinishedAt: 2026-06-30 03:13:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 02:59:44 +0000 UTC FinishedAt: 2026-06-30 03:13:42 +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": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING", "MEMCG" ], "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": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING", "MEMCG" ], "series_id": "f529acf5-1b21-404c-a114-bfb3dea06505" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_slab_obj_exts" ], "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzaXplIGNhbGN1bGF0aW9uIGZvciB0aGUgc2xhYm9ial9leHQgYXJyYXkgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIHRvIHByZXZlbnQgYSBjeWNsaWMgZGVwZW5kZW5jeSBiZXR3ZWVuIGttYWxsb2MgY2FjaGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgaG93IHNsYWIgZXh0ZW5zaW9ucyBhcmUgYWxsb2NhdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzllOGZmODA0OTM4NTIxMWZkNDJlZGMyNjI2MzhhZjVmNGE4MjJhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDAzOjExOjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggOWVjNzc0ZGM3MDA5NjkuLjBjMzBkNjg5ODIwYTExIDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmNcbkBAIC0yMTI0LDE1ICYjNDM7MjEyNCwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuIH1cbiBcbiAvKlxuLSAqIENhbGN1bGF0ZSB0aGUgYWxsb2NhdGlvbiBzaXplIGZvciBzbGFib2JqX2V4dCBhcnJheS5cbiYjNDM7ICogU2l6ZSBvZiB0aGUgc2xhYm9ial9leHQgYXJyYXkgZm9yIEBzbGFiLlxuICAqXG4tICogV2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZW5hYmxlZCwgdGhlIG9ial9leHRzIGFycmF5XG4tICogY291bGQgYmUgYWxsb2NhdGVkIGZyb20gdGhlIHNhbWUgc2xhYiBjYWNoZSBpdCYjMzk7cyBiZWluZyBhbGxvY2F0ZWQgZm9yLlxuLSAqIFRoaXMgd291bGQgcHJldmVudCB0aGUgc2xhYiBmcm9tIGV2ZXIgYmVpbmcgZnJlZWQgYmVjYXVzZSBpdCB3b3VsZFxuLSAqIGFsd2F5cyBjb250YWluIGF0IGxlYXN0IG9uZSBhbGxvY2F0ZWQgb2JqZWN0IChpdHMgb3duIG9ial9leHRzIGFycmF5KS5cbi0gKlxuLSAqIFRvIGF2b2lkIHRoaXMsIGluY3JlYXNlIHRoZSBhbGxvY2F0aW9uIHNpemUgd2hlbiB3ZSBkZXRlY3QgdGhlIGFycmF5XG4tICogbWF5IGNvbWUgZnJvbSB0aGUgc2FtZSBjYWNoZSwgZm9yY2luZyBpdCB0byB1c2UgYSBkaWZmZXJlbnQgY2FjaGUuXG4mIzQzOyAqIFRoZSBhcnJheSBpcyBpdHNlbGYga21hbGxvYygpJiMzOTtkLiBJZiBpdCBjYW1lIGZyb20gdGhlIHNhbWUgb3IgYSBzbWFsbGVyXG4mIzQzOyAqIGttYWxsb2MgY2FjaGUgdGhhbiBAcywgdGhlIFwmIzM0O3NsYWIgaG9sZHMgYW5vdGhlciBzbGFiJiMzOTtzIGFycmF5XCYjMzQ7IHJlbGF0aW9uIGNvdWxkXG4mIzQzOyAqIGZvcm0gYSBjeWNsZSAoc2VsZiwgb3IgZS5nLiBrbWFsbG9jLTUxMiBcdTAwM2MtXHUwMDNlIGttYWxsb2MtMWspIHRoYXQgcGlucyB0aGUgc2xhYnNcbiYjNDM7ICogZm9yZXZlciBhbmQgcmVjdXJzZXMgdmlhIGZyZWVfc2xhYl9vYmpfZXh0cygpIC1cdTAwM2Uga2ZyZWUoKSAtXHUwMDNlIGRpc2NhcmRfc2xhYigpXG4mIzQzOyAqIGF0IHRlYXJkb3duLiBGb3JjZSBpdCBpbnRvIGEgc3RyaWN0bHkgbGFyZ2VyIGNhY2hlIHRvIGtlZXAgdGhhdCByZWxhdGlvbiBhXG4mIzQzOyAqIERBRyAoYWN5Y2xpYykuXG4gICovXG4gc3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0XHRcdFx0IHN0cnVjdCBzbGFiICpzbGFiLCBnZnBfdCBnZnApXG5AQCAtMjE0MywxOCAmIzQzOzIxNDIsMTkgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdGlmIChzeiBcdTAwM2UgS01BTExPQ19NQVhfQ0FDSEVfU0laRSlcbiBcdFx0cmV0dXJuIHN6O1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogT25seSBidW1wIHRoZSBzaXplIHdoZW4gdGhlIG9iamVjdCAobm90IHRoZSBvYmpfZXh0cyBhcnJheSkgaXNcbiYjNDM7XHQgKiBhbGxvY2F0ZWQgZnJvbSBLTUFMTE9DX05PUk1BTCwgZWl0aGVyIGJ5IG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1xuJiM0MztcdCAqIG9yIG1lbWNnIG9uIFNMVUJfVElOWSB3aXRoIF9fR0ZQX1JFQ0xBSU1BQkxFfF9fR0ZQX0FDQ09VTlQuXG4mIzQzO1x0ICogT3RoZXJ3aXNlLCBvYmpfZXh0cyBhbGxvY2F0aW9ucyBjYW5ub3QgZm9ybSBhIGN5Y2xlIGJldHdlZW5cbiYjNDM7XHQgKiBrbWFsbG9jIGNhY2hlcy5cbiYjNDM7XHQgKi9cbiBcdGlmICghaXNfa21hbGxvY19ub3JtYWwocykpXG4gXHRcdHJldHVybiBzejtcbiBcbiBcdG9ial9leHRzX2NhY2hlID0ga21hbGxvY19zbGFiKHN6LCBOVUxMLCBnZnAsIF9fa21hbGxvY190b2tlbigwKSk7XG4tXHQvKlxuLVx0ICogV2UgY2FuJiMzOTt0IHNpbXBseSBjb21wYXJlIHMgd2l0aCBvYmpfZXh0c19jYWNoZSwgYmVjYXVzZSBwYXJ0aXRpb25lZCBrbWFsbG9jXG4tXHQgKiBjYWNoZXMgaGF2ZSBtdWx0aXBsZSBjYWNoZXMgcGVyIHNpemUsIHNlbGVjdGVkIGJ5IGNhbGxlciBhZGRyZXNzIG9yIHR5cGUuXG4tXHQgKiBTaW5jZSBjYWxsZXIgYWRkcmVzcyBvciB0eXBlIG1heSBkaWZmZXIgYmV0d2VlbiBrbWFsbG9jX3NsYWIoKSBhbmQgYWN0dWFsXG4tXHQgKiBhbGxvY2F0aW9uLCBidW1wIHNpemUgd2hlbiBzaXplcyBhcmUgZXF1YWwuXG4tXHQgKi9cbi1cdGlmIChzLVx1MDAzZW9iamVjdF9zaXplID09IG9ial9leHRzX2NhY2hlLVx1MDAzZW9iamVjdF9zaXplKVxuLVx0XHRyZXR1cm4gb2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUgJiM0MzsgMTtcbiYjNDM7XHRpZiAob2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUgXHUwMDNjPSBzLVx1MDAzZW9iamVjdF9zaXplKVxuJiM0MztcdFx0cmV0dXJuIHMtXHUwMDNlb2JqZWN0X3NpemUgJiM0MzsgMTtcbiBcbiBcdHJldHVybiBzejtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDM6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNpemUgY2FsY3VsYXRpb24gZm9yIHRoZSBzbGFib2JqX2V4dCBhcnJheSBpbiB0aGUgU0xVQiBhbGxvY2F0b3IgdG8gcHJldmVudCBhIGN5Y2xpYyBkZXBlbmRlbmN5IGJldHdlZW4ga21hbGxvYyBjYWNoZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgc2xhYiBleHRlbnNpb25zIGFyZSBhbGxvY2F0ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM5ZThmZjgwNDkzODUyMTFmZDQyZWRjMjYyNjM4YWY1ZjRhODIyYTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAwMzoxMToyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCA5ZWM3NzRkYzcwMDk2OS4uMGMzMGQ2ODk4MjBhMTEgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmMKQEAgLTIxMjQsMTUgJiM0MzsyMTI0LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpCiB9CiAKIC8qCi0gKiBDYWxjdWxhdGUgdGhlIGFsbG9jYXRpb24gc2l6ZSBmb3Igc2xhYm9ial9leHQgYXJyYXkuCiYjNDM7ICogU2l6ZSBvZiB0aGUgc2xhYm9ial9leHQgYXJyYXkgZm9yIEBzbGFiLgogICoKLSAqIFdoZW4gbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGVuYWJsZWQsIHRoZSBvYmpfZXh0cyBhcnJheQotICogY291bGQgYmUgYWxsb2NhdGVkIGZyb20gdGhlIHNhbWUgc2xhYiBjYWNoZSBpdCYjMzk7cyBiZWluZyBhbGxvY2F0ZWQgZm9yLgotICogVGhpcyB3b3VsZCBwcmV2ZW50IHRoZSBzbGFiIGZyb20gZXZlciBiZWluZyBmcmVlZCBiZWNhdXNlIGl0IHdvdWxkCi0gKiBhbHdheXMgY29udGFpbiBhdCBsZWFzdCBvbmUgYWxsb2NhdGVkIG9iamVjdCAoaXRzIG93biBvYmpfZXh0cyBhcnJheSkuCi0gKgotICogVG8gYXZvaWQgdGhpcywgaW5jcmVhc2UgdGhlIGFsbG9jYXRpb24gc2l6ZSB3aGVuIHdlIGRldGVjdCB0aGUgYXJyYXkKLSAqIG1heSBjb21lIGZyb20gdGhlIHNhbWUgY2FjaGUsIGZvcmNpbmcgaXQgdG8gdXNlIGEgZGlmZmVyZW50IGNhY2hlLgomIzQzOyAqIFRoZSBhcnJheSBpcyBpdHNlbGYga21hbGxvYygpJiMzOTtkLiBJZiBpdCBjYW1lIGZyb20gdGhlIHNhbWUgb3IgYSBzbWFsbGVyCiYjNDM7ICoga21hbGxvYyBjYWNoZSB0aGFuIEBzLCB0aGUgJiMzNDtzbGFiIGhvbGRzIGFub3RoZXIgc2xhYiYjMzk7cyBhcnJheSYjMzQ7IHJlbGF0aW9uIGNvdWxkCiYjNDM7ICogZm9ybSBhIGN5Y2xlIChzZWxmLCBvciBlLmcuIGttYWxsb2MtNTEyICZsdDstJmd0OyBrbWFsbG9jLTFrKSB0aGF0IHBpbnMgdGhlIHNsYWJzCiYjNDM7ICogZm9yZXZlciBhbmQgcmVjdXJzZXMgdmlhIGZyZWVfc2xhYl9vYmpfZXh0cygpIC0mZ3Q7IGtmcmVlKCkgLSZndDsgZGlzY2FyZF9zbGFiKCkKJiM0MzsgKiBhdCB0ZWFyZG93bi4gRm9yY2UgaXQgaW50byBhIHN0cmljdGx5IGxhcmdlciBjYWNoZSB0byBrZWVwIHRoYXQgcmVsYXRpb24gYQomIzQzOyAqIERBRyAoYWN5Y2xpYykuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCQkJCSBzdHJ1Y3Qgc2xhYiAqc2xhYiwgZ2ZwX3QgZ2ZwKQpAQCAtMjE0MywxOCAmIzQzOzIxNDIsMTkgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAlpZiAoc3ogJmd0OyBLTUFMTE9DX01BWF9DQUNIRV9TSVpFKQogCQlyZXR1cm4gc3o7CiAKJiM0MzsJLyoKJiM0MzsJICogT25seSBidW1wIHRoZSBzaXplIHdoZW4gdGhlIG9iamVjdCAobm90IHRoZSBvYmpfZXh0cyBhcnJheSkgaXMKJiM0MzsJICogYWxsb2NhdGVkIGZyb20gS01BTExPQ19OT1JNQUwsIGVpdGhlciBieSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcKJiM0MzsJICogb3IgbWVtY2cgb24gU0xVQl9USU5ZIHdpdGggX19HRlBfUkVDTEFJTUFCTEV8X19HRlBfQUNDT1VOVC4KJiM0MzsJICogT3RoZXJ3aXNlLCBvYmpfZXh0cyBhbGxvY2F0aW9ucyBjYW5ub3QgZm9ybSBhIGN5Y2xlIGJldHdlZW4KJiM0MzsJICoga21hbGxvYyBjYWNoZXMuCiYjNDM7CSAqLwogCWlmICghaXNfa21hbGxvY19ub3JtYWwocykpCiAJCXJldHVybiBzejsKIAogCW9ial9leHRzX2NhY2hlID0ga21hbGxvY19zbGFiKHN6LCBOVUxMLCBnZnAsIF9fa21hbGxvY190b2tlbigwKSk7Ci0JLyoKLQkgKiBXZSBjYW4mIzM5O3Qgc2ltcGx5IGNvbXBhcmUgcyB3aXRoIG9ial9leHRzX2NhY2hlLCBiZWNhdXNlIHBhcnRpdGlvbmVkIGttYWxsb2MKLQkgKiBjYWNoZXMgaGF2ZSBtdWx0aXBsZSBjYWNoZXMgcGVyIHNpemUsIHNlbGVjdGVkIGJ5IGNhbGxlciBhZGRyZXNzIG9yIHR5cGUuCi0JICogU2luY2UgY2FsbGVyIGFkZHJlc3Mgb3IgdHlwZSBtYXkgZGlmZmVyIGJldHdlZW4ga21hbGxvY19zbGFiKCkgYW5kIGFjdHVhbAotCSAqIGFsbG9jYXRpb24sIGJ1bXAgc2l6ZSB3aGVuIHNpemVzIGFyZSBlcXVhbC4KLQkgKi8KLQlpZiAocy0mZ3Q7b2JqZWN0X3NpemUgPT0gb2JqX2V4dHNfY2FjaGUtJmd0O29iamVjdF9zaXplKQotCQlyZXR1cm4gb2JqX2V4dHNfY2FjaGUtJmd0O29iamVjdF9zaXplICYjNDM7IDE7CiYjNDM7CWlmIChvYmpfZXh0c19jYWNoZS0mZ3Q7b2JqZWN0X3NpemUgJmx0Oz0gcy0mZ3Q7b2JqZWN0X3NpemUpCiYjNDM7CQlyZXR1cm4gcy0mZ3Q7b2JqZWN0X3NpemUgJiM0MzsgMTsKIAogCXJldHVybiBzejsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTTFVCIEFsbG9jYXRvciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgcG9raW5nIGFyb3VuZCBpbiBgbW0vc2x1Yi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgb2JqX2V4dHNfYWxsb2Nfc2l6ZWAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXkmIzM5O3JlIHR3ZWFraW5nIHRoZSBsb2dpYyBmb3IgY2FsY3VsYXRpbmcgdGhlIHNpemUgbmVlZGVkIHRvIGFsbG9jYXRlIHRoYXQgYHNsYWJvYmpfZXh0YCBhcnJheS4gVGhlIG9yaWdpbmFsIGNvZGUmIzM5O3MgY2hlY2ssIGJhc2VkIG9uIHdoZXRoZXIgdGhlIG9iamVjdCBzaXplcyBvZiB0aGUgdGFyZ2V0IHNsYWIgYW5kIHRoZSBgb2JqX2V4dHNfY2FjaGVgIGFyZSBlcXVhbCwgaXMgYmVpbmcgcmVwbGFjZWQuIE5vdyBpdCBpcyBhbiBpbmVxdWFsaXR5IGNoZWNrLgoKVGhlIG9sZCBjaGVjayBsb29rZWQgbGlrZSB0aGlzOiBgaWYgKHMtJmd0O29iamVjdF9zaXplID09IG9ial9leHRzX2NhY2hlLSZndDtvYmplY3Rfc2l6ZSkgcmV0dXJuIG9ial9leHRzX2NhY2hlLSZndDtvYmplY3Rfc2l6ZSAmIzQzOyAxO2AKTm93LCBpdCYjMzk7czogYGlmIChvYmpfZXh0c19jYWNoZS0mZ3Q7b2JqZWN0X3NpemUgJmx0Oz0gcy0mZ3Q7b2JqZWN0X3NpemUpIHJldHVybiBzLSZndDtvYmplY3Rfc2l6ZSAmIzQzOyAxO2AKClRoaXMgZmVlbHMgbGlrZSBhIHByZXR0eSBjcml0aWNhbCBjaGFuZ2UgYXQgdGhlIGhlYXJ0IG9mIHRoZSBTTFVCIGFsbG9jYXRvci4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBkZXNpZ25lZCB0byBicmVhayBhIHNsYWIgZGVwZW5kZW5jeSBjeWNsZSBieSBlbnN1cmluZyB0aGF0IHRoZSBgc2xhYm9ial9leHRgIGFycmF5IGlzIGFsd2F5cyBhbGxvY2F0ZWQgZnJvbSBhIHN0cmljdGx5IGxhcmdlciBjYWNoZS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYXJlYSBmb3IgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzLCB3aGljaCBtZWFucyBpdCBuZWVkcyBzb21lIHNlcmlvdXMgZnV6emluZy4gCgpUaW1lIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgaW52b2x2ZWQgYW5kIGZvY3VzIGluIG9uIHRob3NlIHN5bWJvbHMuIExldCYjMzk7cyBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGBvYmpfZXh0c19hbGxvY19zaXplYCB3aXRoaW4gYG1tL3NsdWIuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyB1c2VkIGFuZCB3aGVyZSBpdOKAmXMgY2FsbGVkIGZyb20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqX2V4dHNfYWxsb2Nfc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjEyMT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMTM1LSAqL1xubW0vc2x1Yi5jOjIxMzY6c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMTM3LVx0XHRcdFx0XHQgc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcClcbi0tXG5tbS9zbHViLmM9MjE2Mj1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTIxNzctXG5tbS9zbHViLmM6MjE3ODpcdHN6ID0gb2JqX2V4dHNfYWxsb2Nfc2l6ZShzLCBzbGFiLCBnZnApO1xubW0vc2x1Yi5jLTIxNzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIGNvZGU6CgoqKlRyYWNpbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIEZsb3cqKgoKUmlnaHQsIHNvIGBvYmpfZXh0c19hbGxvY19zaXplYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyB1bHRpbWF0ZWx5IGRldGVybWluaW5nIGhvdyBtdWNoIG1lbW9yeSB0byBhbGxvY2F0ZSwgYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AuIE15IG5leHQgdGhvdWdodCBpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBUbyByZWFsbHkgZ2V0IGEgZ3Jhc3Agb24gaG93IHRoaXMgYWxsb2NhdGlvbiB3b3JrcywgSSBuZWVkIHRvIHRyYWNlICp3aGVyZSogYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGl0c2VsZiBpcyBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgdXB3YXJkcyB3aWxsIHByb3ZpZGUgY3JpdGljYWwgY29udGV4dDsgaXQgd2lsbCBlbHVjaWRhdGUgdGhlICp3aHkqIG9mIHRoaXMgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGluaXRpYXRpbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0yMTM2PXN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTIxNjEtXG5tbS9zbHViLmM6MjE2MjppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjE2My1cdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjIzNj1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG4tLVxubW0vc2x1Yi5jLTIyNzUtICovXG5tbS9zbHViLmM6MjI3NjpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbm1tL3NsdWIuYy0yMjc3LXtcbi0tXG5tbS9zbHViLmM9MjMyNz1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMzMwLVxubW0vc2x1Yi5jOjIzMzE6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMzMyLVx0XHRcdCAgICAgICBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjMzNz1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG4tLVxubW0vc2x1Yi5jLTIzNDAtXG5tbS9zbHViLmM6MjM0MTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMzQyLVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmM9MjM1MT1wcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2x1Yi5jLTIzNTQtXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXHUwMDI2XHUwMDI2XG5tbS9zbHViLmM6MjM1NTpcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHtcbm1tL3NsdWIuYy0yMzU2LVx0XHRwcl93YXJuX29uY2UoXCYjMzQ7JXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXG5cJiMzNDssXG4tLVxubW0vc2x1Yi5jPTMzNTg9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFjY291bnRfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgaW50IG9yZGVyLFxuLS1cbm1tL3NsdWIuYy0zMzY0LVx0XHRcdCFzbGFiX29ial9leHRzKHNsYWIpKVxubW0vc2x1Yi5jOjMzNjU6XHRcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxubW0vc2x1Yi5jLTMzNjYtXHRcdFx0XHQgICAgYWxsb2NfZmxhZ3MgfCBTTEFCX0FMTE9DX05FV19TTEFCKTtcbi0tXG5tbS9zbHViLmM9MzM4Nz1zdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zNDM3LVx0ICovXG5tbS9zbHViLmM6MzQzODpcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XG5tbS9zbHViLmMtMzQzOS1cdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI4NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbToKCioqRGVsdmluZyBpbnRvIFNsYWIgT2JqZWN0IEV4dGVuc2lvbiBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgc2xhYiBvYmplY3QgZXh0ZW5zaW9ucyBhcmUgYWxsb2NhdGVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBJIHNlZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQgYnkgYm90aCBgcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2tgIGFuZCBgYWNjb3VudF9zbGFiYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIGBhbGxvY19zbGFiX29ial9leHRzYCB0byBiZSBhY3R1YWxseSAqZGVmaW5lZCogYW5kLCBjcml0aWNhbGx5LCAqdXRpbGl6ZWQqIHdpdGhpbiB0aGUgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGF0IHBsYXkgaGVyZS4gVGhpcyBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcsIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBvciBpZiBJJiMzOTttIGNvbnNpZGVyaW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHNsYWIgYWxsb2NhdG9yLiBLbm93aW5nICp3aGVuKiB0aGlzIGZ1bmN0aW9uIGlzIGFjdGl2ZSB3aWxsIGxlYWQgbWUgdG8gdGhlIHJlYXNvbnMgd2h5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM1Mzc9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzU4Ni1cdFx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpIFx1MDAyNlx1MDAyNlxubW0vbWVtY29udHJvbC5jOjM1ODc6XHRcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBzbGFiX2FsbG9jX2ZsYWdzKSkge1xubW0vbWVtY29udHJvbC5jLTM1ODgtXHRcdFx0Y29udGludWU7XG4tLVxubW0vc2xhYi5oLTIyLSNkZWZpbmUgU0xBQl9BTExPQ19OT0xPQ0tcdDB4MDEgLyogYSBrbWFsbG9jX25vbG9jaygpIGFsbG9jYXRpb24gKi9cbm1tL3NsYWIuaDoyMzojZGVmaW5lIFNMQUJfQUxMT0NfTkVXX1NMQUJcdDB4MDIgLyogYSBmbGFnIGZvciBhbGxvY19zbGFiX29ial9leHRzKCkgKi9cbm1tL3NsYWIuaC0yNC0jZGVmaW5lIFNMQUJfQUxMT0NfTk9fUkVDVVJTRVx0MHgwNCAvKiBwcmV2ZW50IGttYWxsb2MoKSByZWN1cnNpb24gKi9cbi0tXG5tbS9zbGFiLmg9NjE2PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpzbGFiX29ial9leHQoc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2xhYi5oLTYyOC1cbm1tL3NsYWIuaDo2Mjk6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2xhYi5oLTYzMC1cdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XG4tLVxubW0vc2x1Yi5jPTIxMzY9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMjE2MS1cbm1tL3NsdWIuYzoyMTYyOmludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMTYzLVx0XHRcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL3NsdWIuYz0yMjM2PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3Bpbilcbi0tXG5tbS9zbHViLmMtMjI3NS0gKi9cbm1tL3NsdWIuYzoyMjc2OnN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxubW0vc2x1Yi5jLTIyNzcte1xuLS1cbm1tL3NsdWIuYz0yMzI3PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTIzMzAtXG5tbS9zbHViLmM6MjMzMTpzdGF0aWMgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIzMzItXHRcdFx0ICAgICAgIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL3NsdWIuYz0yMzM3PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3Bpbilcbi0tXG5tbS9zbHViLmMtMjM0MC1cbm1tL3NsdWIuYzoyMzQxOnN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIzNDItXHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYz0yMzUxPXByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtMjM1NC1cdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSBcdTAwMjZcdTAwMjZcbm1tL3NsdWIuYzoyMzU1Olx0ICAgIGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKSkge1xubW0vc2x1Yi5jLTIzNTYtXHRcdHByX3dhcm5fb25jZShcJiMzNDslcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcblwmIzM0Oyxcbi0tXG5tbS9zbHViLmM9MzM1OD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCBpbnQgb3JkZXIsXG4tLVxubW0vc2x1Yi5jLTMzNjQtXHRcdFx0IXNsYWJfb2JqX2V4dHMoc2xhYikpXG5tbS9zbHViLmM6MzM2NTpcdFx0YWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBnZnAsXG5tbS9zbHViLmMtMzM2Ni1cdFx0XHRcdCAgICBhbGxvY19mbGFncyB8IFNMQUJfQUxMT0NfTkVXX1NMQUIpO1xuLS1cbm1tL3NsdWIuYz0zMzg3PXN0YXRpYyBzdHJ1Y3Qgc2xhYiAqYWxsb2NhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTM0MzctXHQgKi9cbm1tL3NsdWIuYzozNDM4Olx0YWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzLCBzbGFiKTtcbm1tL3NsdWIuYy0zNDM5LVx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzMxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYSBoaWdoIGxldmVsIG9mIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gYG1tL3NsdWIuY2AgYW5kIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgZGlyZWN0aW5nIG1lIHRvIGEgc3BlY2lmaWMgYXJlYSBvZiB0aGUga2VybmVsIHNvdXJjZTogYG1tL3NsdWIuY2AgYXJvdW5kIGxpbmUgMjE2Mi4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7QWgsIHByb2JhYmx5IHJlbGF0ZWQgdG8gc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3IgY29uZmlndXJhdGlvbi1kZXBlbmRlbnQgYmVoYXZpb3Igd2l0aGluIHRoZSBTTFVCIGFsbG9jYXRvci4mIzM0OyBNeSBmb2N1cyBpbW1lZGlhdGVseSB6b29tcyBpbiBvbiB0aGF0IGxpbmUsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB0aGUgYCNpZmRlZmAgZGlyZWN0aXZlcyBzdXJyb3VuZGluZyBpdC4gVGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgcGFydCBsaWVzLCBsaWtlbHkgZGVhbGluZyB3aXRoIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIGFudGljaXBhdGUgdGhpcyBpcyB3aGVyZSB0aGUgY29kZSBicmFuY2hlcywgaGFuZGxpbmcgbWVtb3J5IGFsbG9jYXRpb24gZGlmZmVyZW50bHkgYmFzZWQgb24gdGhlIGRlZmluZWQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIEkmIzM5O20ga2VlbiB0byBzZWUgd2hhdCBzcGVjaWZpYyBmZWF0dXJlcyBvciBvcHRpbWl6YXRpb25zIGFyZSBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkIGF0IHRoYXQgbG9jYXRpb24uIFRoaXMgaXMgb2Z0ZW4gd2hlcmUgeW91IGZpbmQgdGhlIG51YW5jZXMgdGhhdCBhZmZlY3QgcGVyZm9ybWFuY2Ugb3IgZmVhdHVyZSBhdmFpbGFiaWxpdHkgb24gZGlmZmVyZW50IGhhcmR3YXJlLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hhdCBhbHdheXMgY29tZXMgdXAgaW4gcmVhbC13b3JsZCBrZXJuZWwgZGVidWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMDA6XHRcdCAqIElmIHZlY3RvciBwcmV2aW91c2x5IGZhaWxlZCB0byBhbGxvY2F0ZSB0aGVuIHdlIGhhdmUgbGl2ZVxuMjEwMTpcdFx0ICogb2JqZWN0cyB3aXRoIG5vIHRhZyByZWZlcmVuY2UuIE1hcmsgYWxsIHJlZmVyZW5jZXMgaW4gdGhpc1xuMjEwMjpcdFx0ICogdmVjdG9yIGFzIGVtcHR5IHRvIGF2b2lkIHdhcm5pbmdzIGxhdGVyIG9uLlxuMjEwMzpcdFx0ICovXG4yMTA0Olx0XHRpZiAob2JqX2V4dHMgPT0gT0JKRVhUU19BTExPQ19GQUlMKSB7XG4yMTA1Olx0XHRcdHVuc2lnbmVkIGludCBpO1xuMjEwNjpcdFxuMjEwNzpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmplY3RzOyBpJiM0MzsmIzQzOylcbjIxMDg6XHRcdFx0XHRzZXRfY29kZXRhZ19lbXB0eShcdTAwMjZ2ZWNbaV0ucmVmKTtcbjIxMDk6XHRcdH1cbjIxMTA6XHR9XG4yMTExOlx0XG4yMTEyOlx0I2Vsc2UgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cbjIxMTM6XHRcbjIxMTQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopIHt9XG4yMTE1Olx0c3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpIHsgcmV0dXJuIGZhbHNlOyB9XG4yMTE2Olx0c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuMjExNzpcdFx0XHRcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cykge31cbjIxMTg6XHRcbjIxMTk6XHQjZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cbjIxMjA6XHRcbjIxMjE6XHRzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuMjEyMjpcdHtcbjIxMjM6XHRcdHNsYWItXHUwMDNlb2JqX2V4dHMgPSAwO1xuMjEyNDpcdH1cbjIxMjU6XHRcbjIxMjY6XHQvKlxuMjEyNzpcdCAqIFNpemUgb2YgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGZvciBAc2xhYi5cbjIxMjg6XHQgKlxuMjEyOTpcdCAqIFRoZSBhcnJheSBpcyBpdHNlbGYga21hbGxvYygpJiMzOTtkLiBJZiBpdCBjYW1lIGZyb20gdGhlIHNhbWUgb3IgYSBzbWFsbGVyXG4yMTMwOlx0ICoga21hbGxvYyBjYWNoZSB0aGFuIEBzLCB0aGUgXCYjMzQ7c2xhYiBob2xkcyBhbm90aGVyIHNsYWImIzM5O3MgYXJyYXlcJiMzNDsgcmVsYXRpb24gY291bGRcbjIxMzE6XHQgKiBmb3JtIGEgY3ljbGUgKHNlbGYsIG9yIGUuZy4ga21hbGxvYy01MTIgXHUwMDNjLVx1MDAzZSBrbWFsbG9jLTFrKSB0aGF0IHBpbnMgdGhlIHNsYWJzXG4yMTMyOlx0ICogZm9yZXZlciBhbmQgcmVjdXJzZXMgdmlhIGZyZWVfc2xhYl9vYmpfZXh0cygpIC1cdTAwM2Uga2ZyZWUoKSAtXHUwMDNlIGRpc2NhcmRfc2xhYigpXG4yMTMzOlx0ICogYXQgdGVhcmRvd24uIEZvcmNlIGl0IGludG8gYSBzdHJpY3RseSBsYXJnZXIgY2FjaGUgdG8ga2VlcCB0aGF0IHJlbGF0aW9uIGFcbjIxMzQ6XHQgKiBEQUcgKGFjeWNsaWMpLlxuMjEzNTpcdCAqL1xuMjEzNjpcdHN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4yMTM3Olx0XHRcdFx0XHRcdCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgZ2ZwX3QgZ2ZwKVxuMjEzODpcdHtcbjIxMzk6XHRcdHNpemVfdCBzeiA9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc2xhYi1cdTAwM2VvYmplY3RzO1xuMjE0MDpcdFx0c3RydWN0IGttZW1fY2FjaGUgKm9ial9leHRzX2NhY2hlO1xuMjE0MTpcdFxuMjE0MjpcdFx0aWYgKHN6IFx1MDAzZSBLTUFMTE9DX01BWF9DQUNIRV9TSVpFKVxuMjE0MzpcdFx0XHRyZXR1cm4gc3o7XG4yMTQ0Olx0XG4yMTQ1Olx0XHQvKlxuMjE0NjpcdFx0ICogT25seSBidW1wIHRoZSBzaXplIHdoZW4gdGhlIG9iamVjdCAobm90IHRoZSBvYmpfZXh0cyBhcnJheSkgaXNcbjIxNDc6XHRcdCAqIGFsbG9jYXRlZCBmcm9tIEtNQUxMT0NfTk9STUFMLCBlaXRoZXIgYnkgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXG4yMTQ4Olx0XHQgKiBvciBtZW1jZyBvbiBTTFVCX1RJTlkgd2l0aCBfX0dGUF9SRUNMQUlNQUJMRXxfX0dGUF9BQ0NPVU5ULlxuMjE0OTpcdFx0ICogT3RoZXJ3aXNlLCBvYmpfZXh0cyBhbGxvY2F0aW9ucyBjYW5ub3QgZm9ybSBhIGN5Y2xlIGJldHdlZW5cbjIxNTA6XHRcdCAqIGttYWxsb2MgY2FjaGVzLlxuMjE1MTpcdFx0ICovXG4yMTUyOlx0XHRpZiAoIWlzX2ttYWxsb2Nfbm9ybWFsKHMpKVxuMjE1MzpcdFx0XHRyZXR1cm4gc3o7XG4yMTU0Olx0XG4yMTU1Olx0XHRvYmpfZXh0c19jYWNoZSA9IGttYWxsb2Nfc2xhYihzeiwgTlVMTCwgZ2ZwLCBfX2ttYWxsb2NfdG9rZW4oMCkpO1xuMjE1NjpcdFx0aWYgKG9ial9leHRzX2NhY2hlLVx1MDAzZW9iamVjdF9zaXplIFx1MDAzYz0gcy1cdTAwM2VvYmplY3Rfc2l6ZSlcbjIxNTc6XHRcdFx0cmV0dXJuIHMtXHUwMDNlb2JqZWN0X3NpemUgJiM0MzsgMTtcbjIxNTg6XHRcbjIxNTk6XHRcdHJldHVybiBzejtcbjIxNjA6XHR9XG4yMTYxOlx0XG4yMTYyOlx0aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuMjE2MzpcdFx0XHRcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuMjE2NDpcdHtcbjIxNjU6XHRcdGNvbnN0IGJvb2wgYWxsb3dfc3BpbiA9IGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGFsbG9jX2ZsYWdzKTtcbjIxNjY6XHRcdHVuc2lnbmVkIGludCBvYmplY3RzID0gb2Jqc19wZXJfc2xhYihzLCBzbGFiKTtcbjIxNjc6XHRcdGJvb2wgbmV3X3NsYWIgPSBhbGxvY19mbGFncyBcdTAwMjYgU0xBQl9BTExPQ19ORVdfU0xBQjtcbjIxNjg6XHRcdHVuc2lnbmVkIGxvbmcgbmV3X2V4dHM7XG4yMTY5Olx0XHR1bnNpZ25lZCBsb25nIG9sZF9leHRzO1xuMjE3MDpcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICp2ZWM7XG4yMTcxOlx0XHRzaXplX3Qgc3o7XG4yMTcyOlx0XG4yMTczOlx0XHRnZnAgXHUwMDI2PSB+T0JKQ0dTX0NMRUFSX01BU0s7XG4yMTc0Olx0XHQvKiBQcmV2ZW50IHJlY3Vyc2l2ZSBleHRlbnNpb24gdmVjdG9yIGFsbG9jYXRpb24gKi9cbjIxNzU6XHRcdGFsbG9jX2ZsYWdzIHw9IFNMQUJfQUxMT0NfTk9fUkVDVVJTRTtcbjIxNzY6XHRcdGFsbG9jX2ZsYWdzIFx1MDAyNj0gflNMQUJfQUxMT0NfTkVXX1NMQUI7XG4yMTc3Olx0XG4yMTc4Olx0XHRzeiA9IG9ial9leHRzX2FsbG9jX3NpemUocywgc2xhYiwgZ2ZwKTtcbjIxNzk6XHRcbjIxODA6XHRcdC8qIFRoaXMgd2lsbCB1c2Uga21hbGxvY19ub2xvY2soKSBpZiBhbGxvY19mbGFncyBzYXkgc28gKi9cbjIxODE6XHRcdHZlYyA9IGttYWxsb2NfZmxhZ3Moc3osIGdmcCB8IF9fR0ZQX1pFUk8sIGFsbG9jX2ZsYWdzLCBzbGFiX25pZChzbGFiKSk7XG4yMTgyOlx0XG4yMTgzOlx0XHRpZiAoIXZlYykge1xuMjE4NDpcdFx0XHQvKlxuMjE4NTpcdFx0XHQgKiBUcnkgdG8gbWFyayB2ZWN0b3JzIHdoaWNoIGZhaWxlZCB0byBhbGxvY2F0ZS5cbjIxODY6XHRcdFx0ICogSWYgdGhpcyBvcGVyYXRpb24gZmFpbHMsIHRoZXJlIG1heSBiZSBhIHJhY2luZyBwcm9jZXNzXG4yMTg3Olx0XHRcdCAqIHRoYXQgaGFzIGFscmVhZHkgY29tcGxldGVkIHRoZSBhbGxvY2F0aW9uLlxuMjE4ODpcdFx0XHQgKi9cbjIxODk6XHRcdFx0aWYgKCFtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHNsYWIpIFx1MDAyNlx1MDAyNlxuMjE5MDpcdFx0XHQgICAgc2xhYl9vYmpfZXh0cyhzbGFiKSlcbjIxOTE6XHRcdFx0XHRyZXR1cm4gMDtcbjIxOTI6XHRcbjIxOTM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMTk0Olx0XHR9XG4yMTk1Olx0XG4yMTk2Olx0XHRWTV9XQVJOX09OX09OQ0UodmlydF90b19zbGFiKHZlYykgIT0gTlVMTCBcdTAwMjZcdTAwMjZcbjIxOTc6XHRcdFx0XHR2aXJ0X3RvX3NsYWIodmVjKS1cdTAwM2VzbGFiX2NhY2hlID09IHMpO1xuMjE5ODpcdFxuMjE5OTpcdFx0bmV3X2V4dHMgPSAodW5zaWduZWQgbG9uZyl2ZWM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NjEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkNoZWNraW5nIHRoZSAjaWZkZWYgYXJvdW5kIGFsbG9jX3NsYWJfb2JqX2V4dHMqKgoKUmlnaHQsIHNvIEkgc2VlIGEgYCNpZmRlZmAgc3Vycm91bmRpbmcgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCAqd2h5KiBpdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBUaGVyZSYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGEgZ29vZCByZWFzb24gZm9yIHRoaXMuIElzIGl0IGEgcGxhdGZvcm0tc3BlY2lmaWMgZmVhdHVyZT8gQSBidWlsZC10aW1lIG9wdGltaXphdGlvbiB0aGF0IG9ubHkgYXBwbGllcyB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM/IE9yIG1heWJlIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBmZWF0dXJlIGZsYWcgb3IgZXhwZXJpbWVudGFsIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgZGVmaW5lZCBvciBub3QgZGVmaW5lZC4KCkkmIzM5O20gcHJvYmFibHkgZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgZGVmaW5pdGlvbiBvZiB3aGF0ZXZlciBtYWNybyBpcyBiZWluZyBjaGVja2VkIGluIHRoZSBgI2lmZGVmYC4gVGhhdCB3aWxsIHRlbGwgbWUgdW5kZXIgd2hpY2ggY2lyY3Vtc3RhbmNlcyB0aGlzIGZ1bmN0aW9uIGdldHMgaW5jbHVkZWQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgY29kZSBwYXRocyBvbiBib3RoIHNpZGVzIG9mIHRoYXQgY29uZGl0aW9uYWwgYW5kIGNvbXBhcmUgdGhlbSwgdG8gc2VlIHdoYXQgZnVuY3Rpb25hbGl0eSBJJiMzOTttIGdldHRpbmcgb3IgbG9zaW5nIGRlcGVuZGluZyBvbiB0aGUgbWFjcm8mIzM5O3Mgc3RhdGUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLCBtZW1vcnkgdXNhZ2UsIGFuZCBwb3NzaWJseSBldmVuIHRoZSBvdmVyYWxsIGRlc2lnbiBvZiB0aGUgc2xhYiBhbGxvY2F0b3IuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIHBpZWNlIG9mIGNvZGUsIHdvcnRoIGEgdGhvcm91Z2ggbG9vay4gVGhlIGZhY3QgdGhhdCB0aGUgY29kZSBhdXRob3IgY2hvc2UgdG8gdXNlIGFuIGlmZGVmLCBpbnN0ZWFkIG9mIGp1c3QgYW4gaWYsIHN1Z2dlc3RzIHRoZXJlIGlzIGEgYmlnIGRpZmZlcmVuY2UgaW4gYm90aCBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2xhYi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsYWIuaC0yMi0jZGVmaW5lIFNMQUJfQUxMT0NfTk9MT0NLXHQweDAxIC8qIGEga21hbGxvY19ub2xvY2soKSBhbGxvY2F0aW9uICovXG5tbS9zbGFiLmg6MjM6I2RlZmluZSBTTEFCX0FMTE9DX05FV19TTEFCXHQweDAyIC8qIGEgZmxhZyBmb3IgYWxsb2Nfc2xhYl9vYmpfZXh0cygpICovXG5tbS9zbGFiLmgtMjQtI2RlZmluZSBTTEFCX0FMTE9DX05PX1JFQ1VSU0VcdDB4MDQgLyogcHJldmVudCBrbWFsbG9jKCkgcmVjdXJzaW9uICovXG4tLVxubW0vc2xhYi5oPTYxNj1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsYWIuaC02MjgtXG5tbS9zbGFiLmg6NjI5OmludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsYWIuaC02MzAtXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjA0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW0vc2xhYi5oYCoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbW0vc2xhYi5oYC4gU3BlY2lmaWNhbGx5LCBJIHRoaW5rIGxvb2tpbmcgYXJvdW5kIGxpbmUgNjI5IHdpbGwgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoaXMgbG9jYXRpb24gdXN1YWxseSBob3VzZXMgaW1wb3J0YW50IGRlZmluaXRpb25zIG9yIG1hY3JvcyB0aGF0IGFyZSBjcml0aWNhbCBmb3IgZ3Jhc3BpbmcgdGhlIGNvbmNlcHRzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvcmUgc3RydWN0dXJlcyBvciBmdW5jdGlvbnMgcmVsYXRlZCB0byBvYmplY3QgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gaW4gdGhlIHNsYWIgYWxsb2NhdG9yLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byB0cmFjZSBob3cgdGhlIG1lbW9yeSBpcyBiZWluZyBoYW5kbGVkLiBJJiMzOTttIGhvcGluZyB0aGlzIHdpbGwgaWxsdW1pbmF0ZSB3aGF0ZXZlciBwcm9ibGVtIEkmIzM5O20gdHJ5aW5nIHRvIHNvbHZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3NsYWIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKVxuIDYwMTpcdHtcbiA2MDI6XHRcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTtcbiA2MDM6XHR9XG4gNjA0Olx0I2VuZGlmXG4gNjA1Olx0XG4gNjA2Olx0LypcbiA2MDc6XHQgKiBzbGFiX29ial9leHQgLSBnZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHNsYWIgb2JqZWN0IGV4dGVuc2lvbiBtZXRhZGF0YVxuIDYwODpcdCAqIGFzc29jaWF0ZWQgd2l0aCBhbiBvYmplY3QgaW4gYSBzbGFiLlxuIDYwOTpcdCAqIEBzbGFiOiBhIHBvaW50ZXIgdG8gdGhlIHNsYWIgc3RydWN0XG4gNjEwOlx0ICogQG9ial9leHRzOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBleHRlbnNpb24gdmVjdG9yXG4gNjExOlx0ICogQGluZGV4OiBhbiBpbmRleCBvZiB0aGUgb2JqZWN0XG4gNjEyOlx0ICpcbiA2MTM6XHQgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgb2JqZWN0IGV4dGVuc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9iamVjdC5cbiA2MTQ6XHQgKiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gYSBzZWN0aW9uIGNvdmVyZWQgYnkgZ2V0L3B1dF9zbGFiX29ial9leHRzKCkuXG4gNjE1Olx0ICovXG4gNjE2Olx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKnNsYWJfb2JqX2V4dChzdHJ1Y3Qgc2xhYiAqc2xhYixcbiA2MTc6XHRcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4gNjE4Olx0XHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpXG4gNjE5Olx0e1xuIDYyMDpcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0O1xuIDYyMTpcdFxuIDYyMjpcdFx0Vk1fV0FSTl9PTl9PTkNFKG9ial9leHRzICE9IHNsYWJfb2JqX2V4dHMoc2xhYikpO1xuIDYyMzpcdFxuIDYyNDpcdFx0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgJiM0MztcbiA2MjU6XHRcdFx0XHRcdFx0IHNsYWJfZ2V0X3N0cmlkZShzbGFiKSAqIGluZGV4KTtcbiA2MjY6XHRcdHJldHVybiBrYXNhbl9yZXNldF90YWcob2JqX2V4dCk7XG4gNjI3Olx0fVxuIDYyODpcdFxuIDYyOTpcdGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiA2MzA6XHRcdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XG4gNjMxOlx0XG4gNjMyOlx0I2Vsc2UgLyogQ09ORklHX1NMQUJfT0JKX0VYVCAqL1xuIDYzMzpcdFxuIDYzNDpcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuIDYzNTpcdHtcbiA2MzY6XHRcdHJldHVybiAwO1xuIDYzNzpcdH1cbiA2Mzg6XHRcbiA2Mzk6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLFxuIDY0MDpcdFx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbiA2NDE6XHRcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBpbmRleClcbiA2NDI6XHR7XG4gNjQzOlx0XHRyZXR1cm4gTlVMTDtcbiA2NDQ6XHR9XG4gNjQ1Olx0XG4gNjQ2Olx0c3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSkgeyB9XG4gNjQ3Olx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKSB7IHJldHVybiAwOyB9XG4gNjQ4Olx0XG4gNjQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNTAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBDT05GSUdfU0xBQl9PQkpfRVhUYCBEZXBlbmRlbmN5KioKClJpZ2h0LCBzbyBJJiMzOTttIGhpdHRpbmcgYSBzbmFnIOKAkyBpdCBsb29rcyBsaWtlIGBDT05GSUdfU0xBQl9PQkpfRVhUYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHNvbWV0aGluZyBJJiMzOTttIHdvcmtpbmcgb24uIFRoZSBjb2RlJiMzOTtzIG1ha2luZyBpdCBwcmV0dHkgY2xlYXIgdGhhdCBJIGNhbiYjMzk7dCBtb3ZlIGZvcndhcmQgd2l0aG91dCB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBlbmFibGVkLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyBmaWd1cmluZyBvdXQgKndoYXQqIGV4YWN0bHkgZW5hYmxlcyBgQ09ORklHX1NMQUJfT0JKX0VYVGAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCB0cmFjaW5nIGRlcGVuZGVuY2llcywgYW5kIHNlZWluZyB3aGVyZSB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHNldCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gUHJvYmFibHkgc29tZXRoaW5nIGxpa2UgdGhpcyB3aWxsIGdldCBtZSBzdGFydGVkOiBgZmluZCAuIC1uYW1lICYjMzQ7S2NvbmZpZyYjMzQ7IC1wcmludDAgfCB4YXJncyAtMCBncmVwIC1IICYjMzQ7Q09ORklHX1NMQUJfT0JKX0VYVCYjMzQ7YC4gVGhlbiBJJiMzOTtsbCBzdGFydCBjaGVja2luZyB0aGUgY29udGV4dC4gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTEFCX09CSl9FWFQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwMzM9Y29uZmlnIE5VTUFfQkFMQU5DSU5HX0RFRkFVTFRfRU5BQkxFRFxuLS1cbmluaXQvS2NvbmZpZy0xMDQwLVxuaW5pdC9LY29uZmlnOjEwNDE6Y29uZmlnIFNMQUJfT0JKX0VYVFxuaW5pdC9LY29uZmlnLTEwNDItXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgd2hlcmUmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBbY29udGV4dCBpcyBtaXNzaW5nLCBidXQgaXQgd291bGQgaGF2ZSBiZWVuIGluc2VydGVkIGhlcmUsIGUuZy4sICYjMzQ7dGhlIG5ldyBmaWxlc3lzdGVtIGRyaXZlciBJJiMzOTttIHdvcmtpbmcgb24mIzM0O10/IE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgaGVhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBMZXQmIzM5O3Mgc2VlLi4uIEtjb25maWcgZmlsZXMgYXJlIHRoZSBzdGFuZGFyZC4gR2l2ZW4gdGhlIHR5cGljYWwgc3RydWN0dXJlLCBpdCYjMzk7cyBwcm9iYWJseSBiZXN0IHRvIHN0YXJ0IHdpdGggYGluaXQvS2NvbmZpZ2AuIEFuZCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDEwNDEuIEkmIzM5O20gYmV0dGluZyB0aGVyZSYjMzk7cyBhIHJlbGF0ZWQgc2VjdGlvbiB0aGVyZSwgb3IgYXQgbGVhc3QgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LiBJdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBiZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDMwOlx0XHQgIHJlc291cmNlcyB3aXRoaW4gdGhlIHNhbWUgY2FjaGUgZG9tYWluLCByZWR1Y2luZyBjYWNoZSBtaXNzZXMgYW5kXG4xMDMxOlx0XHQgIGxvd2VyaW5nIGRhdGEgYWNjZXNzIGxhdGVuY3kuXG4xMDMyOlx0XG4xMDMzOlx0Y29uZmlnIE5VTUFfQkFMQU5DSU5HX0RFRkFVTFRfRU5BQkxFRFxuMTAzNDpcdFx0Ym9vbCBcJiMzNDtBdXRvbWF0aWNhbGx5IGVuYWJsZSBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudFwmIzM0O1xuMTAzNTpcdFx0ZGVmYXVsdCB5XG4xMDM2Olx0XHRkZXBlbmRzIG9uIE5VTUFfQkFMQU5DSU5HXG4xMDM3Olx0XHRoZWxwXG4xMDM4Olx0XHQgIElmIHNldCwgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIHdpbGwgYmUgZW5hYmxlZCBpZiBydW5uaW5nIG9uIGEgTlVNQVxuMTAzOTpcdFx0ICBtYWNoaW5lLlxuMTA0MDpcdFxuMTA0MTpcdGNvbmZpZyBTTEFCX09CSl9FWFRcbjEwNDI6XHRcdGJvb2xcbjEwNDM6XHRcbjEwNDQ6XHRtZW51Y29uZmlnIENHUk9VUFNcbjEwNDU6XHRcdGJvb2wgXCYjMzQ7Q29udHJvbCBHcm91cCBzdXBwb3J0XCYjMzQ7XG4xMDQ2Olx0XHRzZWxlY3QgS0VSTkZTXG4xMDQ3Olx0XHRoZWxwXG4xMDQ4Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZ3JvdXBpbmcgc2V0cyBvZiBwcm9jZXNzZXMgdG9nZXRoZXIsIGZvclxuMTA0OTpcdFx0ICB1c2Ugd2l0aCBwcm9jZXNzIGNvbnRyb2wgc3Vic3lzdGVtcyBzdWNoIGFzIENwdXNldHMsIENGUywgbWVtb3J5XG4xMDUwOlx0XHQgIGNvbnRyb2xzIG9yIGRldmljZSBpc29sYXRpb24uXG4xMDUxOlx0XHQgIFNlZVxuMTA1MjpcdFx0XHQtIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRlc2lnbi1DRlMucnN0XHQoQ0ZTKVxuMTA1MzpcdFx0XHQtIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxLyAoZmVhdHVyZXMgZm9yIGdyb3VwaW5nLCBpc29sYXRpb25cbjEwNTQ6XHRcdFx0XHRcdFx0ICBhbmQgcmVzb3VyY2UgY29udHJvbClcbjEwNTU6XHRcbjEwNTY6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA1NzpcdFxuMTA1ODpcdGlmIENHUk9VUFNcbjEwNTk6XHRcbjEwNjA6XHRjb25maWcgUEFHRV9DT1VOVEVSXG4xMDYxOlx0XHRib29sXG4xMDYyOlx0XG4xMDYzOlx0Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4xMDY0Olx0XHRib29sIFwmIzM0O0Zhdm9yIGR5bmFtaWMgbW9kaWZpY2F0aW9uIGxhdGVuY3kgcmVkdWN0aW9uIGJ5IGRlZmF1bHRcJiMzNDtcbjEwNjU6XHRcdGhlbHBcbjEwNjY6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgXCYjMzQ7ZmF2b3JkeW5tb2RzXCYjMzQ7IG1vdW50IG9wdGlvbiBieSBkZWZhdWx0XG4xMDY3Olx0XHQgIHdoaWNoIHJlZHVjZXMgdGhlIGxhdGVuY2llcyBvZiBkeW5hbWljIGNncm91cCBtb2RpZmljYXRpb25zIHN1Y2hcbjEwNjg6XHRcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXG4xMDY5Olx0XHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXG4xMDcwOlx0XG4xMDcxOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwNzI6XHRcbjEwNzM6XHRjb25maWcgTUVNQ0dcbjEwNzQ6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwNzU6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwNzY6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDc3Olx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDc4Olx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwNzk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzOTEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgU0xBQl9PQkpfRVhUKioKCkFscmlnaHQsIHNvIGBTTEFCX09CSl9FWFRgIGlzIGJlaW5nIHB1bGxlZCBpbiBieSBgTUVNQ0dgLiBGaW5lLCB0aGF0JiMzOTtzIGEgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXM6IFdoYXQgKmVsc2UqIGlzIHNlbGVjdGluZyBgU0xBQl9PQkpfRVhUYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGRlcGVuZGVuY3kgdHJlZSwgZXNwZWNpYWxseSBpZiB0aGVyZSYjMzk7cyBhbnkgb3ZlcmxhcCBvciBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyBJJiMzOTttIGZhbWlsaWFyIHdpdGguIFVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZSB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIGlmIHRoaXMgdXNhZ2UgaXMgZXhwZWN0ZWQsIGVmZmljaWVudCwgb3IgaWYgaXQgbWlnaHQgaW1wYWN0IG90aGVyIGFyZWFzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBjb2RlIHRvIHNlZSB3aGVyZSBlbHNlIHRoaXMgaXMgYmVpbmcgdXNlZCBhbmQgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aG9zZSBjaG9pY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgU0xBQl9PQkpfRVhUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDczPWNvbmZpZyBNRU1DR1xuLS1cbmluaXQvS2NvbmZpZy0xMDc2LVx0c2VsZWN0IEVWRU5URkRcbmluaXQvS2NvbmZpZzoxMDc3Olx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuaW5pdC9LY29uZmlnLTEwNzgtXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbi0tXG5tbS9LY29uZmlnLmRlYnVnPTMyND1jb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xuLS1cbm1tL0tjb25maWcuZGVidWctMzMxLVx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXG5tbS9LY29uZmlnLmRlYnVnOjMzMjpcdHNlbGVjdCBTTEFCX09CSl9FWFRcbm1tL0tjb25maWcuZGVidWctMzMzLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc3MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBhbHNvIGltcGxpZXMgdGhlIHNlbGVjdGlvbiBvZiBgU0xBQl9PQkpfRVhUYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2Ug4oCTIHByb2ZpbGluZyBsaWtlbHkgbmVlZHMgdGhhdCBleHRyYSBvYmplY3QgbWV0YWRhdGEuIE5vdywgdGhpcyBtZWFucyB3ZSYjMzk7cmUgaW4gYSBzaXR1YXRpb24gd2hlcmUgd2UgbmVlZCBlaXRoZXIgYE1FTUNHYCAobWVtb3J5IGNvbnRyb2wgZ3JvdXBzKSBvciB0aGUgcHJvZmlsaW5nIG9wdGlvbiBpdHNlbGYgdG8gYmUgZW5hYmxlZC4gIEkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGltcG9ydGFudCBkZXBlbmRlbmN5IHRvIGtlZXAgaW4gbWluZCwgYmVjYXVzZSBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZXNlIGZlYXR1cmVzIGNvdWxkIHBvdGVudGlhbGx5IGluZmx1ZW5jZSBwZXJmb3JtYW5jZS4gTGV0IG1lIGp1c3QgdGFrZSBhIHF1aWNrIHBlZWsgYXQgYG1tL0tjb25maWcuZGVidWdgIGFuZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBvcHRpb25zIHdoaWxlIEkmIzM5O20gYXQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0XHQgIG92ZXJoZWFkIGluIHRoZSBwYWdlIGZhdWx0IHBhdGguXG4gMzIxOlx0XG4gMzIyOlx0XHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cbiAzMjM6XHRcbiAzMjQ6XHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xuIDMyNTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXCYjMzQ7XG4gMzI2Olx0XHRkZWZhdWx0IG5cbiAzMjc6XHRcdGRlcGVuZHMgb24gTU1VXG4gMzI4Olx0XHRkZXBlbmRzIG9uIFBST0NfRlNcbiAzMjk6XHRcdGRlcGVuZHMgb24gIURFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVVxuIDMzMDpcdFx0c2VsZWN0IENPREVfVEFHR0lOR1xuIDMzMTpcdFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXG4gMzMyOlx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4gMzMzOlx0XHRoZWxwXG4gMzM0Olx0XHQgIFRyYWNrIGFsbG9jYXRpb24gc291cmNlIGNvZGUgYW5kIHJlY29yZCB0b3RhbCBhbGxvY2F0aW9uIHNpemVcbiAzMzU6XHRcdCAgaW5pdGlhdGVkIGF0IHRoYXQgY29kZSBsb2NhdGlvbi4gVGhlIG1lY2hhbmlzbSBjYW4gYmUgdXNlZCB0byB0cmFja1xuIDMzNjpcdFx0ICBtZW1vcnkgbGVha3Mgd2l0aCBhIGxvdyBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IGltcGFjdC5cbiAzMzc6XHRcbiAzMzg6XHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcbiAzMzk6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XCYjMzQ7XG4gMzQwOlx0XHRkZWZhdWx0IHlcbiAzNDE6XHRcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xuIDM0MjpcdFxuIDM0MzpcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG4gMzQ0Olx0XHRib29sIFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1wmIzM0O1xuIDM0NTpcdFx0ZGVmYXVsdCBuXG4gMzQ2Olx0XHRkZXBlbmRzIG9uIE1FTV9BTExPQ19QUk9GSUxJTkdcbiAzNDc6XHRcdHNlbGVjdCBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxuIDM0ODpcdFx0aGVscFxuIDM0OTpcdFx0ICBBZGRzIHdhcm5pbmdzIHdpdGggaGVscGZ1bCBlcnJvciBtZXNzYWdlcyBmb3IgbWVtb3J5IGFsbG9jYXRpb25cbiAzNTA6XHRcdCAgcHJvZmlsaW5nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ2NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU2xhYiBBbGxvY2F0aW9uIGZvciBNZW1vcnkgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBzbGFiIGFsbG9jYXRvciBjb2RlLCBhbmQgcmlnaHQgb2ZmIHRoZSBiYXQsIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBhbmQgYE1FTUNHYCBzZWVtIGxpa2Ugc29saWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGVuYWJsZSBmb3IgdGhpcyBhbmFseXNpcy4gTm93LCB0cmFjaW5nIHRoZSBjYWxsIHN0YWNrLCBpdCBsb29rcyBsaWtlIGBvYmpfZXh0c19hbGxvY19zaXplYCBpcyBjYWxsZWQgYnkgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBUaGlzIGBhbGxvY19zbGFiX29ial9leHRzYCBmdW5jdGlvbiBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9va2AgYW5kIGBhY2NvdW50X3NsYWJgLiBUaGVuIGBhY2NvdW50X3NsYWJgIGlzIGNhbGxlZCBieSBgYWxsb2NhdGVfc2xhYmAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYF9fX3NsYWJfYWxsb2NgLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBgX19zbGFiX2FsbG9jYCwgdGhlbiBgc2xhYl9hbGxvY19ub2RlYCwgdWx0aW1hdGVseSBiZWluZyBjYWxsZWQgYnkgYGttZW1fY2FjaGVfYWxsb2NgIGFuZCBga21hbGxvY2AuCgpUaGF0IHdob2xlIGNoYWluIGxvb2tzIGxpa2UgYSBwcmV0dHkgaG90IHBhdGgsIHdoaWNoIG1lYW5zIGFueSBwZXJmb3JtYW5jZSBnYWlucyBoZXJlIGNvdWxkIGJlIHNpZ25pZmljYW50LiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBvbmx5IGNhbGxlZCB3aGVuIGBzbGFiX29ial9leHRzKHNsYWIpYCBpcyBmYWxzZS4gVGhhdCBoYXBwZW5zIHdoZW4gYSBuZXcgc2xhYiBpcyBhbGxvY2F0ZWQgb3Igd2hlbiBpdCYjMzk7cyBmaXJzdCBuZWVkZWQuIFNvIHRoaXMgaXMgbm90IGEgaG90IHBhdGgsIHRoaXMgaXMgYSBwYXRoIHRoYXQgb25seSBhZmZlY3RzIHBlcmZvcm1hbmNlIHRoZSBmaXJzdCB0aW1lIGEgc2xhYiBpcyBjcmVhdGVkLCBvciB3aGVuIHRoZSBmaXJzdCBzbGFiIGlzIGNyZWF0ZWQuCgpUaGUgcGF0Y2ggbm90ZXMgdGhhdCB0aGUgYXJyYXkgYmVpbmcgYWxsb2NhdGVkIGlzIGBrbWFsbG9jKClgJiMzOTtkLiBUaGUga2V5IGlzc3VlIGFwcGVhcnMgdG8gYmUgcG90ZW50aWFsIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBpZiB0aGUgYXJyYXkgY29tZXMgZnJvbSB0aGUgc2FtZSBvciBhIHNtYWxsZXIga21hbGxvYyBjYWNoZSB0aGFuIHRoZSBzbGFiIGl0c2VsZi4gVGhpcyBjYW4gbGVhZCB0byBwaW5uaW5nIHRoZSBzbGFicyBmb3JldmVyIGFuZCByZWN1cnNpb24gdmlhIGBmcmVlX3NsYWJfb2JqX2V4dHMoKWAsIGBrZnJlZSgpYCwgYW5kIHRoZW4gYGRpc2NhcmRfc2xhYigpYC4gVGhlIHNvbHV0aW9uIHN1Z2dlc3RlZCBpbiB0aGUgcGF0Y2ggaXMgdG8gZm9yY2UgdGhlIGFsbG9jYXRpb24gaW50byBhIHN0cmljdGx5IGxhcmdlciBjYWNoZSwgdG8gZW5zdXJlIHRoZSByZWxhdGlvbnNoaXAgc3RheXMgYWN5Y2xpYy4gTWFrZXMgc2Vuc2UgLSBwcmV2ZW50aW5nIHRoYXQgY2lyY3VsYXIgZGVwZW5kZW5jeSBpcyBjcml0aWNhbCBmb3IgY2xlYW51cCBhbmQgcHJldmVudGluZyBtZW1vcnkgbGVha3MuCgpHaXZlbiB0aGF0IGBvYmpfZXh0c19hbGxvY19zaXplYCBpcyBzdGF0aWMgaW5saW5lLCBteSBhdHRlbnRpb24gc2hvdWxkIHNoaWZ0IHRvIGBhbGxvY19zbGFiX29ial9leHRzYCBhcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBleHBvcnRlZCBvciBpZiBpdCBjYW4gYmUgZm9jdXNlZCBvbiBtb3JlIHNwZWNpZmljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjEzNj1zdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0yMTYxLVxubW0vc2x1Yi5jOjIxNjI6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIxNjMtXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIyMzY9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMjc1LSAqL1xubW0vc2x1Yi5jOjIyNzY6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG5tbS9zbHViLmMtMjI3Ny17XG4tLVxubW0vc2x1Yi5jPTIzMjc9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtMjMzMC1cbm1tL3NsdWIuYzoyMzMxOnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMzMi1cdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIzMzc9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMzQwLVxubW0vc2x1Yi5jOjIzNDE6c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjM0Mi1cdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jPTIzNTE9cHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0yMzU0LVx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpIFx1MDAyNlx1MDAyNlxubW0vc2x1Yi5jOjIzNTU6XHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XG5tbS9zbHViLmMtMjM1Ni1cdFx0cHJfd2Fybl9vbmNlKFwmIzM0OyVzLCAlczogRmFpbGVkIHRvIGNyZWF0ZSBzbGFiIGV4dGVuc2lvbiB2ZWN0b3IhXFxuXCYjMzQ7LFxuLS1cbm1tL3NsdWIuYz0zMzU4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcbi0tXG5tbS9zbHViLmMtMzM2NC1cdFx0XHQhc2xhYl9vYmpfZXh0cyhzbGFiKSlcbm1tL3NsdWIuYzozMzY1Olx0XHRhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGdmcCxcbm1tL3NsdWIuYy0zMzY2LVx0XHRcdFx0ICAgIGFsbG9jX2ZsYWdzIHwgU0xBQl9BTExPQ19ORVdfU0xBQik7XG4tLVxubW0vc2x1Yi5jPTMzODc9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMzQzNy1cdCAqL1xubW0vc2x1Yi5jOjM0Mzg6XHRhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHMsIHNsYWIpO1xubW0vc2x1Yi5jLTM0MzktXHRhY2NvdW50X3NsYWIoc2xhYiwgb29fb3JkZXIob28pLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgU2xhYiBPYmplY3QgRXh0ZW5zaW9ucyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBkZWZpbmVkICp0d2ljZSo/IFRoYXQmIzM5O3MgdW51c3VhbC4gTXkgZmlyc3QgdGhvdWdodCBpcyBhIHNpbXBsZSBtaXN0YWtlLCBtYXliZSBhIHJlZHVuZGFudCBkZWNsYXJhdGlvbi4gQnV0IHdhaXQuLi4gQWhhISBBZnRlciBhIGNsb3NlciBsb29rLCBpdCBzZWVtcyBvbmUgaXMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiwgYW5kIHRoZSBvdGhlciBpcyBhIGR1bW15IG9yIHN0dWIgZGVmaW5pdGlvbiB0byBiZSB1c2VkIHdoZW4gYENPTkZJR19TTEFCX09CSl9FWFRgIGlzIGRpc2FibGVkLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBwcmVwcm9jZXNzb3IgdHJpY2sgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBjb3JyZWN0IGV4ZWN1dGlvbiBwYXRoLiBMZXQgbWUgZ28gYmFjayB0byB3aGVyZSBpdCBpcyBkZWZpbmVkLCBsZXQgbWUgc2VlLi4uIEFoLCB0aGVyZSBpdCBpcyEgSW4gYG1tL3NsdWIuY2AsIGFyb3VuZCBsaW5lIDIxNjIsIEkgc2VlIHRoZSBgI2lmZGVmIENPTkZJR19TTEFCX09CSl9FWFRgIGNvbmRpdGlvbmFsLiBTbywgdGhlIGR1bW15IGRlZmluaXRpb24gbXVzdCBiZSBvdXRzaWRlIHRoYXQgYmxvY2suIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHdoYXQgdGhhdCBkdW1teSBmdW5jdGlvbiBkb2VzLCBsZXQgbWUgY2hlY2sgbGluZSAyMzMxLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjMyNTpcdH1cbjIzMjY6XHRcbjIzMjc6XHRzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuMjMyODpcdHtcbjIzMjk6XHR9XG4yMzMwOlx0XG4yMzMxOlx0c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbjIzMzI6XHRcdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4yMzMzOlx0e1xuMjMzNDpcdFx0cmV0dXJuIDA7XG4yMzM1Olx0fVxuMjMzNjpcdFxuMjMzNzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3BpbilcbjIzMzg6XHR7XG4yMzM5Olx0fVxuMjM0MDpcdFxuMjM0MTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuMjM0MjpcdFx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcbjIzNDM6XHR7XG4yMzQ0Olx0fVxuMjM0NTpcdFxuMjM0NjpcdCNlbmRpZiAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovXG4yMzQ3Olx0XG4yMzQ4Olx0I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4yMzQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIHRocm91Z2ggdGhpcyBjb2RlLCBhbmQgSSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgZnVuY3Rpb24uIFJpZ2h0LCBsaW5lIDIzMzEsIHRoYXQmIzM5O3MganVzdCBhIGR1bW15IGRlZmluaXRpb24uIFRoZSAqYWN0dWFsKiBkZWZpbml0aW9uIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBpcyBiYWNrIG9uIGxpbmUgMjE2Mi4gR29vZCwgZ290IHRoYXQuIE5vdywgSSBzZWUgdGhhdCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXNuJiMzOTt0IGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgaGFuZHkuIFRoYXQgbWVhbnMgSSBjYW4gcHJvYmFibHkgdHJhY2UgaXRzIHVzYWdlIHByZXR0eSBlZmZlY3RpdmVseS4gSG9sZCBvbi4uLiBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLiBJIHJlY2FsbCBzZWVpbmcgdGhpcyBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgbW0vbWVtY29udHJvbC5jYC4gWWVwLCBoZXJlIHdlIGdvLCBsaW5lIDM1MzcgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhhdCBjYWxsIHNpdGUgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM1MzA6XHRcdC8qXG4zNTMxOlx0XHQgKiBGb3IgZWFjaCBhY2NvdW50ZWQgb2JqZWN0IHRoZXJlIGlzIGFuIGV4dHJhIHNwYWNlIHdoaWNoIGlzIHVzZWRcbjM1MzI6XHRcdCAqIHRvIHN0b3JlIG9ial9jZ3JvdXAgbWVtYmVyc2hpcC4gQ2hhcmdlIGl0IHRvby5cbjM1MzM6XHRcdCAqL1xuMzUzNDpcdFx0cmV0dXJuIHMtXHUwMDNlc2l6ZSAmIzQzOyBzaXplb2Yoc3RydWN0IG9ial9jZ3JvdXAgKik7XG4zNTM1Olx0fVxuMzUzNjpcdFxuMzUzNzpcdGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4zNTM4Olx0XHRcdFx0XHQgIGdmcF90IGZsYWdzLCB1bnNpZ25lZCBpbnQgc2xhYl9hbGxvY19mbGFncyxcbjM1Mzk6XHRcdFx0XHRcdCAgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxuMzU0MDpcdHtcbjM1NDE6XHRcdHNpemVfdCBvYmpfc2l6ZSA9IG9ial9mdWxsX3NpemUocyk7XG4zNTQyOlx0XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4zNTQzOlx0XHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbjM1NDQ6XHRcdHVuc2lnbmVkIGxvbmcgb2ZmO1xuMzU0NTpcdFx0c2l6ZV90IGk7XG4zNTQ2Olx0XG4zNTQ3Olx0XHQvKlxuMzU0ODpcdFx0ICogVGhlIG9idGFpbmVkIG9iamNnIHBvaW50ZXIgaXMgc2FmZSB0byB1c2Ugd2l0aGluIHRoZSBjdXJyZW50IHNjb3BlLFxuMzU0OTpcdFx0ICogZGVmaW5lZCBieSBjdXJyZW50IHRhc2sgb3Igc2V0X2FjdGl2ZV9tZW1jZygpIHBhaXIuXG4zNTUwOlx0XHQgKiBvYmpfY2dyb3VwX2dldCgpIGlzIHVzZWQgdG8gZ2V0IGEgcGVybWFuZW50IHJlZmVyZW5jZS5cbjM1NTE6XHRcdCAqL1xuMzU1MjpcdFx0b2JqY2cgPSBjdXJyZW50X29ial9jZ3JvdXAoKTtcbjM1NTM6XHRcdGlmICghb2JqY2cgfHwgb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcbjM1NTQ6XHRcdFx0cmV0dXJuIHRydWU7XG4zNTU1Olx0XG4zNTU2Olx0XHQvKlxuMzU1NzpcdFx0ICogc2xhYl9hbGxvY19ub2RlKCkgYXZvaWRzIHRoZSBOVUxMIGNoZWNrLCBzbyB3ZSBtaWdodCBiZSBjYWxsZWQgd2l0aCBhXG4zNTU4Olx0XHQgKiBzaW5nbGUgTlVMTCBvYmplY3QuIGttZW1fY2FjaGVfYWxsb2NfYnVsaygpIGFib3J0cyBpZiBpdCBjYW4mIzM5O3QgZmlsbFxuMzU1OTpcdFx0ICogdGhlIHdob2xlIHJlcXVlc3RlZCBzaXplLlxuMzU2MDpcdFx0ICogcmV0dXJuIHN1Y2Nlc3MgYXMgdGhlcmUmIzM5O3Mgbm90aGluZyB0byBmcmVlIGJhY2tcbjM1NjE6XHRcdCAqL1xuMzU2MjpcdFx0aWYgKHVubGlrZWx5KCpwID09IE5VTEwpKVxuMzU2MzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjM1NjQ6XHRcbjM1NjU6XHRcdGZsYWdzIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbjM1NjY6XHRcbjM1Njc6XHRcdGlmIChscnUpIHtcbjM1Njg6XHRcdFx0aW50IHJldDtcbjM1Njk6XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuMzU3MDpcdFxuMzU3MTpcdFx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuMzU3MjpcdFx0XHRyZXQgPSBtZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgbHJ1LCBmbGFncyk7XG4zNTczOlx0XHRcdGNzc19wdXQoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKTtcbjM1NzQ6XHRcbjM1NzU6XHRcdFx0aWYgKHJldClcbjM1NzY6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4zNTc3Olx0XHR9XG4zNTc4Olx0XG4zNTc5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaXplOyBpJiM0MzsmIzQzOykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg4OAoJCQkJCQkJb3V0cHV0OiAxMDAKCQkJCQkJCXRob3VnaHRzOiA2NjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNMVUIgU2xhYiBFeHRlbnNpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUmIzM5O3MgbXkgYnJlYWtkb3duLiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlOyBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHNsYWIgYWxsb2NhdGlvbiBhbmQgYWxzbyB3aXRoaW4gdGhlIG1lbWNnIHBvc3QtYWxsb2MgaG9vaywgbWFraW5nIGl0IGEgY3JpdGljYWwgY29tcG9uZW50IG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgY2hhbmdlIG1vZGlmaWVzIGBvYmpfZXh0c19hbGxvY19zaXplYCwgd2hpY2ggaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgdGhlIGNhbGxpbmcgZnVuY3Rpb24sIGBhbGxvY19zbGFiX29ial9leHRzYCwgdGhhdCBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIEkgYnJpZWZseSBjb25zaWRlcmVkIGBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5YCwgYnV0IGxldCYjMzk7cyBzdGljayB3aXRoIHRoZSBtYWluIGZ1bmN0aW9uIGZvciBub3cuCgpJIGNvbmZpcm1lZCB0aGF0IGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBhIGdsb2JhbCBmdW5jdGlvbiBkZWZpbmVkIGluIGBtbS9zbHViLmNgIGFuZCBkZWNsYXJlZCBpbiBgbW0vc2xhYi5oYC4gSXQmIzM5O3Mgbm90IGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIHRvIGtlcm5lbCBtb2R1bGVzLCBidXQgc3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IHRhcmdldCBpdC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgdGVjaG5pY2FsbHkgdGFyZ2V0YWJsZSwgYnV0IHRhcmdldGluZyBhIGdsb2JhbCBmdW5jdGlvbiBpcyB1c3VhbGx5IGJldHRlciBmb3IgY2xhcml0eS4gU28sIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyB0aGUgdGFyZ2V0LiBUaGUgaW5saW5lIG5hdHVyZSBvZiBgb2JqX2V4dHNfYWxsb2Nfc2l6ZWAgbWVhbnMgaXQgd29uJiMzOTt0IGFwcGVhciBpbiB0aGUgc3ltYm9sIHRhYmxlLgoKTW92aW5nIG9uIHRvIHRoZSBjb25maWd1cmF0aW9uLCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYW5kIGBNRU1DR2Agc2VlbSByZWxldmFudCBzaW5jZSB0aGV5IGluZGlyZWN0bHkgc2VsZWN0IGBTTEFCX09CSl9FWFRgLiBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlbS4gQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBNRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBzdWZmaWNpZW50IHRvIGVuYWJsZSBgU0xBQl9PQkpfRVhUYCwgdGhvdWdoIGBNRU1DR2AgYWxzbyBkb2VzIGl0LCBzbyBsZXQmIzM5O3MgaW5jbHVkZSBib3RoIGZvciB0aG9yb3VnaG5lc3MuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBjb2RlIG1vZGlmaWVzIGhvdyB0aGUgYHNsYWJvYmpfZXh0YCBhcnJheSBzaXplIGlzIGNhbGN1bGF0ZWQsIHNwZWNpZmljYWxseSB0aGUgY2hlY2sgdGhhdCBkZXRlcm1pbmVzIGlmIHdlIG5lZWQgYW4gZXh0ZW5zaW9uLiBUaGlzIHJldmlzZWQgbG9naWMgcHJldmVudHMgYSBwb3RlbnRpYWwgY3ljbGljIGRlcGVuZGVuY3kgaXNzdWUgd2l0aGluIHRoZSBTTFVCIGFsbG9jYXRvci4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmc7IGl0IHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY291bGQgcmV2ZWFsIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMuCgpTbywgaW4gc3VtbWFyeSwgaGVyZSBhcmUgbXkgZGVjaXNpb25zOgoKKiAgICoqRm9jdXMgU3ltYm9sOioqIGBhbGxvY19zbGFiX29ial9leHRzYAoqICAgKipFbmFibGUgQ29uZmlnczoqKiBgTUVNX0FMTE9DX1BST0ZJTElOR2AsIGBNRU1DR2AKCkkmIzM5O20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkIGFuZCB1c2UgdGhlIHNldC1yZXN1bHRzIHRvb2wgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNpemUgY2FsY3VsYXRpb24gZm9yIHRoZSBzbGFib2JqX2V4dCBhcnJheSBpbiB0aGUgU0xVQiBhbGxvY2F0b3IgdG8gcHJldmVudCBhIGN5Y2xpYyBkZXBlbmRlbmN5IGJldHdlZW4ga21hbGxvYyBjYWNoZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgc2xhYiBleHRlbnNpb25zIGFyZSBhbGxvY2F0ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzaXplIGNhbGN1bGF0aW9uIGZvciB0aGUgc2xhYm9ial9leHQgYXJyYXkgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIHRvIHByZXZlbnQgYSBjeWNsaWMgZGVwZW5kZW5jeSBiZXR3ZWVuIGttYWxsb2MgY2FjaGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgaG93IHNsYWIgZXh0ZW5zaW9ucyBhcmUgYWxsb2NhdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6MzAuNTM2MTc4NDYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk0NzY2OTkzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNpemUgY2FsY3VsYXRpb24gZm9yIHRoZSBzbGFib2JqX2V4dCBhcnJheSBpbiB0aGUgU0xVQiBhbGxvY2F0b3IgdG8gcHJldmVudCBhIGN5Y2xpYyBkZXBlbmRlbmN5IGJldHdlZW4ga21hbGxvYyBjYWNoZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgc2xhYiBleHRlbnNpb25zIGFyZSBhbGxvY2F0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjExOjMwLjUzNjE4NjI4MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyMDIzMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzllOGZmODA0OTM4NTIxMWZkNDJlZGMyNjI2MzhhZjVmNGE4MjJhNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAzMCAwMzoxMToyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcXG5pbmRleCA5ZWM3NzRkYzcwMDk2OS4uMGMzMGQ2ODk4MjBhMTEgMTAwNjQ0XFxuLS0tIGEvbW0vc2x1Yi5jXFxuKysrIGIvbW0vc2x1Yi5jXFxuQEAgLTIxMjQsMTUgKzIxMjQsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gfVxcbiBcXG4gLypcXG4tICogQ2FsY3VsYXRlIHRoZSBhbGxvY2F0aW9uIHNpemUgZm9yIHNsYWJvYmpfZXh0IGFycmF5LlxcbisgKiBTaXplIG9mIHRoZSBzbGFib2JqX2V4dCBhcnJheSBmb3IgQHNsYWIuXFxuICAqXFxuLSAqIFdoZW4gbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGVuYWJsZWQsIHRoZSBvYmpfZXh0cyBhcnJheVxcbi0gKiBjb3VsZCBiZSBhbGxvY2F0ZWQgZnJvbSB0aGUgc2FtZSBzbGFiIGNhY2hlIGl0J3MgYmVpbmcgYWxsb2NhdGVkIGZvci5cXG4tICogVGhpcyB3b3VsZCBwcmV2ZW50IHRoZSBzbGFiIGZyb20gZXZlciBiZWluZyBmcmVlZCBiZWNhdXNlIGl0IHdvdWxkXFxuLSAqIGFsd2F5cyBjb250YWluIGF0IGxlYXN0IG9uZSBhbGxvY2F0ZWQgb2JqZWN0IChpdHMgb3duIG9ial9leHRzIGFycmF5KS5cXG4tICpcXG4tICogVG8gYXZvaWQgdGhpcywgaW5jcmVhc2UgdGhlIGFsbG9jYXRpb24gc2l6ZSB3aGVuIHdlIGRldGVjdCB0aGUgYXJyYXlcXG4tICogbWF5IGNvbWUgZnJvbSB0aGUgc2FtZSBjYWNoZSwgZm9yY2luZyBpdCB0byB1c2UgYSBkaWZmZXJlbnQgY2FjaGUuXFxuKyAqIFRoZSBhcnJheSBpcyBpdHNlbGYga21hbGxvYygpJ2QuIElmIGl0IGNhbWUgZnJvbSB0aGUgc2FtZSBvciBhIHNtYWxsZXJcXG4rICoga21hbGxvYyBjYWNoZSB0aGFuIEBzLCB0aGUgXFxcInNsYWIgaG9sZHMgYW5vdGhlciBzbGFiJ3MgYXJyYXlcXFwiIHJlbGF0aW9uIGNvdWxkXFxuKyAqIGZvcm0gYSBjeWNsZSAoc2VsZiwgb3IgZS5nLiBrbWFsbG9jLTUxMiBcXHUwMDNjLVxcdTAwM2Uga21hbGxvYy0xaykgdGhhdCBwaW5zIHRoZSBzbGFic1xcbisgKiBmb3JldmVyIGFuZCByZWN1cnNlcyB2aWEgZnJlZV9zbGFiX29ial9leHRzKCkgLVxcdTAwM2Uga2ZyZWUoKSAtXFx1MDAzZSBkaXNjYXJkX3NsYWIoKVxcbisgKiBhdCB0ZWFyZG93bi4gRm9yY2UgaXQgaW50byBhIHN0cmljdGx5IGxhcmdlciBjYWNoZSB0byBrZWVwIHRoYXQgcmVsYXRpb24gYVxcbisgKiBEQUcgKGFjeWNsaWMpLlxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4gXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzbGFiICpzbGFiLCBnZnBfdCBnZnApXFxuQEAgLTIxNDMsMTggKzIxNDIsMTkgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4gXFx0aWYgKHN6IFxcdTAwM2UgS01BTExPQ19NQVhfQ0FDSEVfU0laRSlcXG4gXFx0XFx0cmV0dXJuIHN6O1xcbiBcXG4rXFx0LypcXG4rXFx0ICogT25seSBidW1wIHRoZSBzaXplIHdoZW4gdGhlIG9iamVjdCAobm90IHRoZSBvYmpfZXh0cyBhcnJheSkgaXNcXG4rXFx0ICogYWxsb2NhdGVkIGZyb20gS01BTExPQ19OT1JNQUwsIGVpdGhlciBieSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcXG4rXFx0ICogb3IgbWVtY2cgb24gU0xVQl9USU5ZIHdpdGggX19HRlBfUkVDTEFJTUFCTEV8X19HRlBfQUNDT1VOVC5cXG4rXFx0ICogT3RoZXJ3aXNlLCBvYmpfZXh0cyBhbGxvY2F0aW9ucyBjYW5ub3QgZm9ybSBhIGN5Y2xlIGJldHdlZW5cXG4rXFx0ICoga21hbGxvYyBjYWNoZXMuXFxuK1xcdCAqL1xcbiBcXHRpZiAoIWlzX2ttYWxsb2Nfbm9ybWFsKHMpKVxcbiBcXHRcXHRyZXR1cm4gc3o7XFxuIFxcbiBcXHRvYmpfZXh0c19jYWNoZSA9IGttYWxsb2Nfc2xhYihzeiwgTlVMTCwgZ2ZwLCBfX2ttYWxsb2NfdG9rZW4oMCkpO1xcbi1cXHQvKlxcbi1cXHQgKiBXZSBjYW4ndCBzaW1wbHkgY29tcGFyZSBzIHdpdGggb2JqX2V4dHNfY2FjaGUsIGJlY2F1c2UgcGFydGl0aW9uZWQga21hbGxvY1xcbi1cXHQgKiBjYWNoZXMgaGF2ZSBtdWx0aXBsZSBjYWNoZXMgcGVyIHNpemUsIHNlbGVjdGVkIGJ5IGNhbGxlciBhZGRyZXNzIG9yIHR5cGUuXFxuLVxcdCAqIFNpbmNlIGNhbGxlciBhZGRyZXNzIG9yIHR5cGUgbWF5IGRpZmZlciBiZXR3ZWVuIGttYWxsb2Nfc2xhYigpIGFuZCBhY3R1YWxcXG4tXFx0ICogYWxsb2NhdGlvbiwgYnVtcCBzaXplIHdoZW4gc2l6ZXMgYXJlIGVxdWFsLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHMtXFx1MDAzZW9iamVjdF9zaXplID09IG9ial9leHRzX2NhY2hlLVxcdTAwM2VvYmplY3Rfc2l6ZSlcXG4tXFx0XFx0cmV0dXJuIG9ial9leHRzX2NhY2hlLVxcdTAwM2VvYmplY3Rfc2l6ZSArIDE7XFxuK1xcdGlmIChvYmpfZXh0c19jYWNoZS1cXHUwMDNlb2JqZWN0X3NpemUgXFx1MDAzYz0gcy1cXHUwMDNlb2JqZWN0X3NpemUpXFxuK1xcdFxcdHJldHVybiBzLVxcdTAwM2VvYmplY3Rfc2l6ZSArIDE7XFxuIFxcbiBcXHRyZXR1cm4gc3o7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6MzEuMTU5MTQzNzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4ODUzNzE4OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2Nfc2xhYl9vYmpfZXh0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzaXplIGNhbGN1bGF0aW9uIGZvciB0aGUgc2xhYm9ial9leHQgYXJyYXkgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIHRvIHByZXZlbnQgYSBjeWNsaWMgZGVwZW5kZW5jeSBiZXR3ZWVuIGttYWxsb2MgY2FjaGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgaG93IHNsYWIgZXh0ZW5zaW9ucyBhcmUgYWxsb2NhdGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM5ZThmZjgwNDkzODUyMTFmZDQyZWRjMjYyNjM4YWY1ZjRhODIyYTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAwMzoxMToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggOWVjNzc0ZGM3MDA5NjkuLjBjMzBkNjg5ODIwYTExIDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4rKysgYi9tbS9zbHViLmNcbkBAIC0yMTI0LDE1ICsyMTI0LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXG4gfVxuIFxuIC8qXG4tICogQ2FsY3VsYXRlIHRoZSBhbGxvY2F0aW9uIHNpemUgZm9yIHNsYWJvYmpfZXh0IGFycmF5LlxuKyAqIFNpemUgb2YgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGZvciBAc2xhYi5cbiAgKlxuLSAqIFdoZW4gbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGVuYWJsZWQsIHRoZSBvYmpfZXh0cyBhcnJheVxuLSAqIGNvdWxkIGJlIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgY2FjaGUgaXQncyBiZWluZyBhbGxvY2F0ZWQgZm9yLlxuLSAqIFRoaXMgd291bGQgcHJldmVudCB0aGUgc2xhYiBmcm9tIGV2ZXIgYmVpbmcgZnJlZWQgYmVjYXVzZSBpdCB3b3VsZFxuLSAqIGFsd2F5cyBjb250YWluIGF0IGxlYXN0IG9uZSBhbGxvY2F0ZWQgb2JqZWN0IChpdHMgb3duIG9ial9leHRzIGFycmF5KS5cbi0gKlxuLSAqIFRvIGF2b2lkIHRoaXMsIGluY3JlYXNlIHRoZSBhbGxvY2F0aW9uIHNpemUgd2hlbiB3ZSBkZXRlY3QgdGhlIGFycmF5XG4tICogbWF5IGNvbWUgZnJvbSB0aGUgc2FtZSBjYWNoZSwgZm9yY2luZyBpdCB0byB1c2UgYSBkaWZmZXJlbnQgY2FjaGUuXG4rICogVGhlIGFycmF5IGlzIGl0c2VsZiBrbWFsbG9jKCknZC4gSWYgaXQgY2FtZSBmcm9tIHRoZSBzYW1lIG9yIGEgc21hbGxlclxuKyAqIGttYWxsb2MgY2FjaGUgdGhhbiBAcywgdGhlIFwic2xhYiBob2xkcyBhbm90aGVyIHNsYWIncyBhcnJheVwiIHJlbGF0aW9uIGNvdWxkXG4rICogZm9ybSBhIGN5Y2xlIChzZWxmLCBvciBlLmcuIGttYWxsb2MtNTEyIFx1MDAzYy1cdTAwM2Uga21hbGxvYy0xaykgdGhhdCBwaW5zIHRoZSBzbGFic1xuKyAqIGZvcmV2ZXIgYW5kIHJlY3Vyc2VzIHZpYSBmcmVlX3NsYWJfb2JqX2V4dHMoKSAtXHUwMDNlIGtmcmVlKCkgLVx1MDAzZSBkaXNjYXJkX3NsYWIoKVxuKyAqIGF0IHRlYXJkb3duLiBGb3JjZSBpdCBpbnRvIGEgc3RyaWN0bHkgbGFyZ2VyIGNhY2hlIHRvIGtlZXAgdGhhdCByZWxhdGlvbiBhXG4rICogREFHIChhY3ljbGljKS5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0XHRcdFx0XHQgc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcClcbkBAIC0yMTQzLDE4ICsyMTQyLDE5IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRpZiAoc3ogXHUwMDNlIEtNQUxMT0NfTUFYX0NBQ0hFX1NJWkUpXG4gXHRcdHJldHVybiBzejtcbiBcbitcdC8qXG4rXHQgKiBPbmx5IGJ1bXAgdGhlIHNpemUgd2hlbiB0aGUgb2JqZWN0IChub3QgdGhlIG9ial9leHRzIGFycmF5KSBpc1xuK1x0ICogYWxsb2NhdGVkIGZyb20gS01BTExPQ19OT1JNQUwsIGVpdGhlciBieSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcbitcdCAqIG9yIG1lbWNnIG9uIFNMVUJfVElOWSB3aXRoIF9fR0ZQX1JFQ0xBSU1BQkxFfF9fR0ZQX0FDQ09VTlQuXG4rXHQgKiBPdGhlcndpc2UsIG9ial9leHRzIGFsbG9jYXRpb25zIGNhbm5vdCBmb3JtIGEgY3ljbGUgYmV0d2VlblxuK1x0ICoga21hbGxvYyBjYWNoZXMuXG4rXHQgKi9cbiBcdGlmICghaXNfa21hbGxvY19ub3JtYWwocykpXG4gXHRcdHJldHVybiBzejtcbiBcbiBcdG9ial9leHRzX2NhY2hlID0ga21hbGxvY19zbGFiKHN6LCBOVUxMLCBnZnAsIF9fa21hbGxvY190b2tlbigwKSk7XG4tXHQvKlxuLVx0ICogV2UgY2FuJ3Qgc2ltcGx5IGNvbXBhcmUgcyB3aXRoIG9ial9leHRzX2NhY2hlLCBiZWNhdXNlIHBhcnRpdGlvbmVkIGttYWxsb2Ncbi1cdCAqIGNhY2hlcyBoYXZlIG11bHRpcGxlIGNhY2hlcyBwZXIgc2l6ZSwgc2VsZWN0ZWQgYnkgY2FsbGVyIGFkZHJlc3Mgb3IgdHlwZS5cbi1cdCAqIFNpbmNlIGNhbGxlciBhZGRyZXNzIG9yIHR5cGUgbWF5IGRpZmZlciBiZXR3ZWVuIGttYWxsb2Nfc2xhYigpIGFuZCBhY3R1YWxcbi1cdCAqIGFsbG9jYXRpb24sIGJ1bXAgc2l6ZSB3aGVuIHNpemVzIGFyZSBlcXVhbC5cbi1cdCAqL1xuLVx0aWYgKHMtXHUwMDNlb2JqZWN0X3NpemUgPT0gb2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUpXG4tXHRcdHJldHVybiBvYmpfZXh0c19jYWNoZS1cdTAwM2VvYmplY3Rfc2l6ZSArIDE7XG4rXHRpZiAob2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUgXHUwMDNjPSBzLVx1MDAzZW9iamVjdF9zaXplKVxuK1x0XHRyZXR1cm4gcy1cdTAwM2VvYmplY3Rfc2l6ZSArIDE7XG4gXG4gXHRyZXR1cm4gc3o7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6MzEuMTU5MTQ2MDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTE3MTY4ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNMVUIgQWxsb2NhdG9yIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBwb2tpbmcgYXJvdW5kIGluIGBtbS9zbHViLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBvYmpfZXh0c19hbGxvY19zaXplYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhleSdyZSB0d2Vha2luZyB0aGUgbG9naWMgZm9yIGNhbGN1bGF0aW5nIHRoZSBzaXplIG5lZWRlZCB0byBhbGxvY2F0ZSB0aGF0IGBzbGFib2JqX2V4dGAgYXJyYXkuIFRoZSBvcmlnaW5hbCBjb2RlJ3MgY2hlY2ssIGJhc2VkIG9uIHdoZXRoZXIgdGhlIG9iamVjdCBzaXplcyBvZiB0aGUgdGFyZ2V0IHNsYWIgYW5kIHRoZSBgb2JqX2V4dHNfY2FjaGVgIGFyZSBlcXVhbCwgaXMgYmVpbmcgcmVwbGFjZWQuIE5vdyBpdCBpcyBhbiBpbmVxdWFsaXR5IGNoZWNrLlxuXG5UaGUgb2xkIGNoZWNrIGxvb2tlZCBsaWtlIHRoaXM6IGBpZiAocy1cdTAwM2VvYmplY3Rfc2l6ZSA9PSBvYmpfZXh0c19jYWNoZS1cdTAwM2VvYmplY3Rfc2l6ZSkgcmV0dXJuIG9ial9leHRzX2NhY2hlLVx1MDAzZW9iamVjdF9zaXplICsgMTtgXG5Ob3csIGl0J3M6IGBpZiAob2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUgXHUwMDNjPSBzLVx1MDAzZW9iamVjdF9zaXplKSByZXR1cm4gcy1cdTAwM2VvYmplY3Rfc2l6ZSArIDE7YFxuXG5UaGlzIGZlZWxzIGxpa2UgYSBwcmV0dHkgY3JpdGljYWwgY2hhbmdlIGF0IHRoZSBoZWFydCBvZiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGxvb2tzIGxpa2UgaXQncyBkZXNpZ25lZCB0byBicmVhayBhIHNsYWIgZGVwZW5kZW5jeSBjeWNsZSBieSBlbnN1cmluZyB0aGF0IHRoZSBgc2xhYm9ial9leHRgIGFycmF5IGlzIGFsd2F5cyBhbGxvY2F0ZWQgZnJvbSBhIHN0cmljdGx5IGxhcmdlciBjYWNoZS4gVGhhdCdzIGEgY2xhc3NpYyBhcmVhIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMsIHdoaWNoIG1lYW5zIGl0IG5lZWRzIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBcblxuVGltZSB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIGludm9sdmVkIGFuZCBmb2N1cyBpbiBvbiB0aG9zZSBzeW1ib2xzLiBMZXQncyBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGBvYmpfZXh0c19hbGxvY19zaXplYCB3aXRoaW4gYG1tL3NsdWIuY2AgdG8gc2VlIGhvdyBpdCdzIHVzZWQgYW5kIHdoZXJlIGl04oCZcyBjYWxsZWQgZnJvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjExOjM2LjA3NjMxNjk0MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU5NTAzOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqX2V4dHNfYWxsb2Nfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTIxMjE9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0yMTM1LSAqL1xcbm1tL3NsdWIuYzoyMTM2OnN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIxMzctXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzbGFiICpzbGFiLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9zbHViLmM9MjE2Mj1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjE3Ny1cXG5tbS9zbHViLmM6MjE3ODpcXHRzeiA9IG9ial9leHRzX2FsbG9jX3NpemUocywgc2xhYiwgZ2ZwKTtcXG5tbS9zbHViLmMtMjE3OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6MzYuMjQyMjc1OTA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5MzY1MDIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgY29kZTpcblxuKipUcmFjaW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBGbG93KipcblxuUmlnaHQsIHNvIGBvYmpfZXh0c19hbGxvY19zaXplYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIHVsdGltYXRlbHkgZGV0ZXJtaW5pbmcgaG93IG11Y2ggbWVtb3J5IHRvIGFsbG9jYXRlLCBhbmQgaXQncyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBNeSBuZXh0IHRob3VnaHQgaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dC4gVG8gcmVhbGx5IGdldCBhIGdyYXNwIG9uIGhvdyB0aGlzIGFsbG9jYXRpb24gd29ya3MsIEkgbmVlZCB0byB0cmFjZSAqd2hlcmUqIGBhbGxvY19zbGFiX29ial9leHRzYCBpdHNlbGYgaXMgY2FsbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIHVwd2FyZHMgd2lsbCBwcm92aWRlIGNyaXRpY2FsIGNvbnRleHQ7IGl0IHdpbGwgZWx1Y2lkYXRlIHRoZSAqd2h5KiBvZiB0aGlzIGFsbG9jYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbml0aWF0aW5nIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMzoxMTozOS4yMzU5Mjg5MDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4ODA2MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3NsYWJfb2JqX2V4dHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0yMTM2PXN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjE2MS1cXG5tbS9zbHViLmM6MjE2MjppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIxNjMtXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjIzNj1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjI3NS0gKi9cXG5tbS9zbHViLmM6MjI3NjpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtMjI3Ny17XFxuLS1cXG5tbS9zbHViLmM9MjMyNz1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIzMzAtXFxubW0vc2x1Yi5jOjIzMzE6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMzMi1cXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjMzNz1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjM0MC1cXG5tbS9zbHViLmM6MjM0MTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjM0Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmM9MjM1MT1wcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMjM1NC1cXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmM6MjM1NTpcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxubW0vc2x1Yi5jLTIzNTYtXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCIlcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcXFxuXFxcIixcXG4tLVxcbm1tL3NsdWIuYz0zMzU4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcXG4tLVxcbm1tL3NsdWIuYy0zMzY0LVxcdFxcdFxcdCFzbGFiX29ial9leHRzKHNsYWIpKVxcbm1tL3NsdWIuYzozMzY1OlxcdFxcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxcbm1tL3NsdWIuYy0zMzY2LVxcdFxcdFxcdFxcdCAgICBhbGxvY19mbGFncyB8IFNMQUJfQUxMT0NfTkVXX1NMQUIpO1xcbi0tXFxubW0vc2x1Yi5jPTMzODc9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zNDM3LVxcdCAqL1xcbm1tL3NsdWIuYzozNDM4OlxcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XFxubW0vc2x1Yi5jLTM0MzktXFx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6MzkuMzg0NzQxMzIzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5OTU3MzA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipEZWx2aW5nIGludG8gU2xhYiBPYmplY3QgRXh0ZW5zaW9uIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgc2xhYiBvYmplY3QgZXh0ZW5zaW9ucyBhcmUgYWxsb2NhdGVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBJIHNlZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQgYnkgYm90aCBgcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2tgIGFuZCBgYWNjb3VudF9zbGFiYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBjb25maWcgb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIHRvIGJlIGFjdHVhbGx5ICpkZWZpbmVkKiBhbmQsIGNyaXRpY2FsbHksICp1dGlsaXplZCogd2l0aGluIHRoZSBzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgY29uZGl0aW9uYWwgbG9naWMgYXQgcGxheSBoZXJlLiBUaGlzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZywgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIG9yIGlmIEknbSBjb25zaWRlcmluZyBtb2RpZmljYXRpb25zIHRvIHRoZSBzbGFiIGFsbG9jYXRvci4gS25vd2luZyAqd2hlbiogdGhpcyBmdW5jdGlvbiBpcyBhY3RpdmUgd2lsbCBsZWFkIG1lIHRvIHRoZSByZWFzb25zIHdoeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI4NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjExOjQyLjY4NDMxNjY1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk5MDI3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2Nfc2xhYl9vYmpfZXh0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTM1Mzc9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTg2LVxcdFxcdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbWNvbnRyb2wuYzozNTg3OlxcdFxcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBzbGFiX2FsbG9jX2ZsYWdzKSkge1xcbm1tL21lbWNvbnRyb2wuYy0zNTg4LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vc2xhYi5oLTIyLSNkZWZpbmUgU0xBQl9BTExPQ19OT0xPQ0tcXHQweDAxIC8qIGEga21hbGxvY19ub2xvY2soKSBhbGxvY2F0aW9uICovXFxubW0vc2xhYi5oOjIzOiNkZWZpbmUgU0xBQl9BTExPQ19ORVdfU0xBQlxcdDB4MDIgLyogYSBmbGFnIGZvciBhbGxvY19zbGFiX29ial9leHRzKCkgKi9cXG5tbS9zbGFiLmgtMjQtI2RlZmluZSBTTEFCX0FMTE9DX05PX1JFQ1VSU0VcXHQweDA0IC8qIHByZXZlbnQga21hbGxvYygpIHJlY3Vyc2lvbiAqL1xcbi0tXFxubW0vc2xhYi5oPTYxNj1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2xhYi5oLTYyOC1cXG5tbS9zbGFiLmg6NjI5OmludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbGFiLmgtNjMwLVxcdFxcdFxcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcXG4tLVxcbm1tL3NsdWIuYz0yMTM2PXN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjE2MS1cXG5tbS9zbHViLmM6MjE2MjppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIxNjMtXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjIzNj1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjI3NS0gKi9cXG5tbS9zbHViLmM6MjI3NjpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtMjI3Ny17XFxuLS1cXG5tbS9zbHViLmM9MjMyNz1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIzMzAtXFxubW0vc2x1Yi5jOjIzMzE6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMzMi1cXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjMzNz1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjM0MC1cXG5tbS9zbHViLmM6MjM0MTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjM0Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmM9MjM1MT1wcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMjM1NC1cXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmM6MjM1NTpcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxubW0vc2x1Yi5jLTIzNTYtXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCIlcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcXFxuXFxcIixcXG4tLVxcbm1tL3NsdWIuYz0zMzU4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcXG4tLVxcbm1tL3NsdWIuYy0zMzY0LVxcdFxcdFxcdCFzbGFiX29ial9leHRzKHNsYWIpKVxcbm1tL3NsdWIuYzozMzY1OlxcdFxcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxcbm1tL3NsdWIuYy0zMzY2LVxcdFxcdFxcdFxcdCAgICBhbGxvY19mbGFncyB8IFNMQUJfQUxMT0NfTkVXX1NMQUIpO1xcbi0tXFxubW0vc2x1Yi5jPTMzODc9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zNDM3LVxcdCAqL1xcbm1tL3NsdWIuYzozNDM4OlxcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XFxubW0vc2x1Yi5jLTM0MzktXFx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6NDIuODg0MjI0MzY2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3MDYwNzkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0ZXh0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGEgaGlnaCBsZXZlbCBvZiBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gYG1tL3NsdWIuY2AgYW5kIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuT2theSwgc28gdGhlIHByb21wdCBpcyBkaXJlY3RpbmcgbWUgdG8gYSBzcGVjaWZpYyBhcmVhIG9mIHRoZSBrZXJuZWwgc291cmNlOiBgbW0vc2x1Yi5jYCBhcm91bmQgbGluZSAyMTYyLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nLCBcIkFoLCBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9yIGNvbmZpZ3VyYXRpb24tZGVwZW5kZW50IGJlaGF2aW9yIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuXCIgTXkgZm9jdXMgaW1tZWRpYXRlbHkgem9vbXMgaW4gb24gdGhhdCBsaW5lLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgdGhlIGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgaXQuIFRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIHBhcnQgbGllcywgbGlrZWx5IGRlYWxpbmcgd2l0aCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSBhbnRpY2lwYXRlIHRoaXMgaXMgd2hlcmUgdGhlIGNvZGUgYnJhbmNoZXMsIGhhbmRsaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGRpZmZlcmVudGx5IGJhc2VkIG9uIHRoZSBkZWZpbmVkIGtlcm5lbCBjb25maWd1cmF0aW9uIG9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiBJJ20ga2VlbiB0byBzZWUgd2hhdCBzcGVjaWZpYyBmZWF0dXJlcyBvciBvcHRpbWl6YXRpb25zIGFyZSBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkIGF0IHRoYXQgbG9jYXRpb24uIFRoaXMgaXMgb2Z0ZW4gd2hlcmUgeW91IGZpbmQgdGhlIG51YW5jZXMgdGhhdCBhZmZlY3QgcGVyZm9ybWFuY2Ugb3IgZmVhdHVyZSBhdmFpbGFiaWxpdHkgb24gZGlmZmVyZW50IGhhcmR3YXJlLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLCBiZWNhdXNlIHRoYXQncyB3aGF0IGFsd2F5cyBjb21lcyB1cCBpbiByZWFsLXdvcmxkIGtlcm5lbCBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMzoxMTo0Ni4yNTQ4MzQ4NjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zbHViLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxMDA6XFx0XFx0ICogSWYgdmVjdG9yIHByZXZpb3VzbHkgZmFpbGVkIHRvIGFsbG9jYXRlIHRoZW4gd2UgaGF2ZSBsaXZlXFxuMjEwMTpcXHRcXHQgKiBvYmplY3RzIHdpdGggbm8gdGFnIHJlZmVyZW5jZS4gTWFyayBhbGwgcmVmZXJlbmNlcyBpbiB0aGlzXFxuMjEwMjpcXHRcXHQgKiB2ZWN0b3IgYXMgZW1wdHkgdG8gYXZvaWQgd2FybmluZ3MgbGF0ZXIgb24uXFxuMjEwMzpcXHRcXHQgKi9cXG4yMTA0OlxcdFxcdGlmIChvYmpfZXh0cyA9PSBPQkpFWFRTX0FMTE9DX0ZBSUwpIHtcXG4yMTA1OlxcdFxcdFxcdHVuc2lnbmVkIGludCBpO1xcbjIxMDY6XFx0XFxuMjEwNzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgb2JqZWN0czsgaSsrKVxcbjIxMDg6XFx0XFx0XFx0XFx0c2V0X2NvZGV0YWdfZW1wdHkoXFx1MDAyNnZlY1tpXS5yZWYpO1xcbjIxMDk6XFx0XFx0fVxcbjIxMTA6XFx0fVxcbjIxMTE6XFx0XFxuMjExMjpcXHQjZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbjIxMTM6XFx0XFxuMjExNDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopIHt9XFxuMjExNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gZmFsc2U7IH1cXG4yMTE2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG4yMTE3OlxcdFxcdFxcdFxcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cykge31cXG4yMTE4OlxcdFxcbjIxMTk6XFx0I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXFxuMjEyMDpcXHRcXG4yMTIxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuMjEyMjpcXHR7XFxuMjEyMzpcXHRcXHRzbGFiLVxcdTAwM2VvYmpfZXh0cyA9IDA7XFxuMjEyNDpcXHR9XFxuMjEyNTpcXHRcXG4yMTI2OlxcdC8qXFxuMjEyNzpcXHQgKiBTaXplIG9mIHRoZSBzbGFib2JqX2V4dCBhcnJheSBmb3IgQHNsYWIuXFxuMjEyODpcXHQgKlxcbjIxMjk6XFx0ICogVGhlIGFycmF5IGlzIGl0c2VsZiBrbWFsbG9jKCknZC4gSWYgaXQgY2FtZSBmcm9tIHRoZSBzYW1lIG9yIGEgc21hbGxlclxcbjIxMzA6XFx0ICoga21hbGxvYyBjYWNoZSB0aGFuIEBzLCB0aGUgXFxcInNsYWIgaG9sZHMgYW5vdGhlciBzbGFiJ3MgYXJyYXlcXFwiIHJlbGF0aW9uIGNvdWxkXFxuMjEzMTpcXHQgKiBmb3JtIGEgY3ljbGUgKHNlbGYsIG9yIGUuZy4ga21hbGxvYy01MTIgXFx1MDAzYy1cXHUwMDNlIGttYWxsb2MtMWspIHRoYXQgcGlucyB0aGUgc2xhYnNcXG4yMTMyOlxcdCAqIGZvcmV2ZXIgYW5kIHJlY3Vyc2VzIHZpYSBmcmVlX3NsYWJfb2JqX2V4dHMoKSAtXFx1MDAzZSBrZnJlZSgpIC1cXHUwMDNlIGRpc2NhcmRfc2xhYigpXFxuMjEzMzpcXHQgKiBhdCB0ZWFyZG93bi4gRm9yY2UgaXQgaW50byBhIHN0cmljdGx5IGxhcmdlciBjYWNoZSB0byBrZWVwIHRoYXQgcmVsYXRpb24gYVxcbjIxMzQ6XFx0ICogREFHIChhY3ljbGljKS5cXG4yMTM1OlxcdCAqL1xcbjIxMzY6XFx0c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4yMTM3OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgZ2ZwX3QgZ2ZwKVxcbjIxMzg6XFx0e1xcbjIxMzk6XFx0XFx0c2l6ZV90IHN6ID0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzbGFiLVxcdTAwM2VvYmplY3RzO1xcbjIxNDA6XFx0XFx0c3RydWN0IGttZW1fY2FjaGUgKm9ial9leHRzX2NhY2hlO1xcbjIxNDE6XFx0XFxuMjE0MjpcXHRcXHRpZiAoc3ogXFx1MDAzZSBLTUFMTE9DX01BWF9DQUNIRV9TSVpFKVxcbjIxNDM6XFx0XFx0XFx0cmV0dXJuIHN6O1xcbjIxNDQ6XFx0XFxuMjE0NTpcXHRcXHQvKlxcbjIxNDY6XFx0XFx0ICogT25seSBidW1wIHRoZSBzaXplIHdoZW4gdGhlIG9iamVjdCAobm90IHRoZSBvYmpfZXh0cyBhcnJheSkgaXNcXG4yMTQ3OlxcdFxcdCAqIGFsbG9jYXRlZCBmcm9tIEtNQUxMT0NfTk9STUFMLCBlaXRoZXIgYnkgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXFxuMjE0ODpcXHRcXHQgKiBvciBtZW1jZyBvbiBTTFVCX1RJTlkgd2l0aCBfX0dGUF9SRUNMQUlNQUJMRXxfX0dGUF9BQ0NPVU5ULlxcbjIxNDk6XFx0XFx0ICogT3RoZXJ3aXNlLCBvYmpfZXh0cyBhbGxvY2F0aW9ucyBjYW5ub3QgZm9ybSBhIGN5Y2xlIGJldHdlZW5cXG4yMTUwOlxcdFxcdCAqIGttYWxsb2MgY2FjaGVzLlxcbjIxNTE6XFx0XFx0ICovXFxuMjE1MjpcXHRcXHRpZiAoIWlzX2ttYWxsb2Nfbm9ybWFsKHMpKVxcbjIxNTM6XFx0XFx0XFx0cmV0dXJuIHN6O1xcbjIxNTQ6XFx0XFxuMjE1NTpcXHRcXHRvYmpfZXh0c19jYWNoZSA9IGttYWxsb2Nfc2xhYihzeiwgTlVMTCwgZ2ZwLCBfX2ttYWxsb2NfdG9rZW4oMCkpO1xcbjIxNTY6XFx0XFx0aWYgKG9ial9leHRzX2NhY2hlLVxcdTAwM2VvYmplY3Rfc2l6ZSBcXHUwMDNjPSBzLVxcdTAwM2VvYmplY3Rfc2l6ZSlcXG4yMTU3OlxcdFxcdFxcdHJldHVybiBzLVxcdTAwM2VvYmplY3Rfc2l6ZSArIDE7XFxuMjE1ODpcXHRcXG4yMTU5OlxcdFxcdHJldHVybiBzejtcXG4yMTYwOlxcdH1cXG4yMTYxOlxcdFxcbjIxNjI6XFx0aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbjIxNjM6XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuMjE2NDpcXHR7XFxuMjE2NTpcXHRcXHRjb25zdCBib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7XFxuMjE2NjpcXHRcXHR1bnNpZ25lZCBpbnQgb2JqZWN0cyA9IG9ianNfcGVyX3NsYWIocywgc2xhYik7XFxuMjE2NzpcXHRcXHRib29sIG5ld19zbGFiID0gYWxsb2NfZmxhZ3MgXFx1MDAyNiBTTEFCX0FMTE9DX05FV19TTEFCO1xcbjIxNjg6XFx0XFx0dW5zaWduZWQgbG9uZyBuZXdfZXh0cztcXG4yMTY5OlxcdFxcdHVuc2lnbmVkIGxvbmcgb2xkX2V4dHM7XFxuMjE3MDpcXHRcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYztcXG4yMTcxOlxcdFxcdHNpemVfdCBzejtcXG4yMTcyOlxcdFxcbjIxNzM6XFx0XFx0Z2ZwIFxcdTAwMjY9IH5PQkpDR1NfQ0xFQVJfTUFTSztcXG4yMTc0OlxcdFxcdC8qIFByZXZlbnQgcmVjdXJzaXZlIGV4dGVuc2lvbiB2ZWN0b3IgYWxsb2NhdGlvbiAqL1xcbjIxNzU6XFx0XFx0YWxsb2NfZmxhZ3MgfD0gU0xBQl9BTExPQ19OT19SRUNVUlNFO1xcbjIxNzY6XFx0XFx0YWxsb2NfZmxhZ3MgXFx1MDAyNj0gflNMQUJfQUxMT0NfTkVXX1NMQUI7XFxuMjE3NzpcXHRcXG4yMTc4OlxcdFxcdHN6ID0gb2JqX2V4dHNfYWxsb2Nfc2l6ZShzLCBzbGFiLCBnZnApO1xcbjIxNzk6XFx0XFxuMjE4MDpcXHRcXHQvKiBUaGlzIHdpbGwgdXNlIGttYWxsb2Nfbm9sb2NrKCkgaWYgYWxsb2NfZmxhZ3Mgc2F5IHNvICovXFxuMjE4MTpcXHRcXHR2ZWMgPSBrbWFsbG9jX2ZsYWdzKHN6LCBnZnAgfCBfX0dGUF9aRVJPLCBhbGxvY19mbGFncywgc2xhYl9uaWQoc2xhYikpO1xcbjIxODI6XFx0XFxuMjE4MzpcXHRcXHRpZiAoIXZlYykge1xcbjIxODQ6XFx0XFx0XFx0LypcXG4yMTg1OlxcdFxcdFxcdCAqIFRyeSB0byBtYXJrIHZlY3RvcnMgd2hpY2ggZmFpbGVkIHRvIGFsbG9jYXRlLlxcbjIxODY6XFx0XFx0XFx0ICogSWYgdGhpcyBvcGVyYXRpb24gZmFpbHMsIHRoZXJlIG1heSBiZSBhIHJhY2luZyBwcm9jZXNzXFxuMjE4NzpcXHRcXHRcXHQgKiB0aGF0IGhhcyBhbHJlYWR5IGNvbXBsZXRlZCB0aGUgYWxsb2NhdGlvbi5cXG4yMTg4OlxcdFxcdFxcdCAqL1xcbjIxODk6XFx0XFx0XFx0aWYgKCFtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHNsYWIpIFxcdTAwMjZcXHUwMDI2XFxuMjE5MDpcXHRcXHRcXHQgICAgc2xhYl9vYmpfZXh0cyhzbGFiKSlcXG4yMTkxOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjIxOTI6XFx0XFxuMjE5MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMTk0OlxcdFxcdH1cXG4yMTk1OlxcdFxcbjIxOTY6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHZpcnRfdG9fc2xhYih2ZWMpICE9IE5VTEwgXFx1MDAyNlxcdTAwMjZcXG4yMTk3OlxcdFxcdFxcdFxcdHZpcnRfdG9fc2xhYih2ZWMpLVxcdTAwM2VzbGFiX2NhY2hlID09IHMpO1xcbjIxOTg6XFx0XFxuMjE5OTpcXHRcXHRuZXdfZXh0cyA9ICh1bnNpZ25lZCBsb25nKXZlYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6NDYuMjU2Mjc0MzQxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDM5OTQ4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqQ2hlY2tpbmcgdGhlICNpZmRlZiBhcm91bmQgYWxsb2Nfc2xhYl9vYmpfZXh0cyoqXG5cblJpZ2h0LCBzbyBJIHNlZSBhIGAjaWZkZWZgIHN1cnJvdW5kaW5nIGBhbGxvY19zbGFiX29ial9leHRzYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgKndoeSogaXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBUaGVyZSdzIGFsbW9zdCBjZXJ0YWlubHkgYSBnb29kIHJlYXNvbiBmb3IgdGhpcy4gSXMgaXQgYSBwbGF0Zm9ybS1zcGVjaWZpYyBmZWF0dXJlPyBBIGJ1aWxkLXRpbWUgb3B0aW1pemF0aW9uIHRoYXQgb25seSBhcHBsaWVzIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucz8gT3IgbWF5YmUgaXQncyByZWxhdGVkIHRvIHNvbWUgZmVhdHVyZSBmbGFnIG9yIGV4cGVyaW1lbnRhbCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGl0IGJlaW5nIGRlZmluZWQgb3Igbm90IGRlZmluZWQuXG5cbkknbSBwcm9iYWJseSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSBkZWZpbml0aW9uIG9mIHdoYXRldmVyIG1hY3JvIGlzIGJlaW5nIGNoZWNrZWQgaW4gdGhlIGAjaWZkZWZgLiBUaGF0IHdpbGwgdGVsbCBtZSB1bmRlciB3aGljaCBjaXJjdW1zdGFuY2VzIHRoaXMgZnVuY3Rpb24gZ2V0cyBpbmNsdWRlZC4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvZGUgcGF0aHMgb24gYm90aCBzaWRlcyBvZiB0aGF0IGNvbmRpdGlvbmFsIGFuZCBjb21wYXJlIHRoZW0sIHRvIHNlZSB3aGF0IGZ1bmN0aW9uYWxpdHkgSSdtIGdldHRpbmcgb3IgbG9zaW5nIGRlcGVuZGluZyBvbiB0aGUgbWFjcm8ncyBzdGF0ZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSwgbWVtb3J5IHVzYWdlLCBhbmQgcG9zc2libHkgZXZlbiB0aGUgb3ZlcmFsbCBkZXNpZ24gb2YgdGhlIHNsYWIgYWxsb2NhdG9yLiBUaGlzIHNlZW1zIGxpa2UgYSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBwaWVjZSBvZiBjb2RlLCB3b3J0aCBhIHRob3JvdWdoIGxvb2suIFRoZSBmYWN0IHRoYXQgdGhlIGNvZGUgYXV0aG9yIGNob3NlIHRvIHVzZSBhbiBpZmRlZiwgaW5zdGVhZCBvZiBqdXN0IGFuIGlmLCBzdWdnZXN0cyB0aGVyZSBpcyBhIGJpZyBkaWZmZXJlbmNlIGluIGJvdGggY29kZSBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY2MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6NTAuNjAwMjcxNjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODk3ODk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsYWIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbGFiLmgtMjItI2RlZmluZSBTTEFCX0FMTE9DX05PTE9DS1xcdDB4MDEgLyogYSBrbWFsbG9jX25vbG9jaygpIGFsbG9jYXRpb24gKi9cXG5tbS9zbGFiLmg6MjM6I2RlZmluZSBTTEFCX0FMTE9DX05FV19TTEFCXFx0MHgwMiAvKiBhIGZsYWcgZm9yIGFsbG9jX3NsYWJfb2JqX2V4dHMoKSAqL1xcbm1tL3NsYWIuaC0yNC0jZGVmaW5lIFNMQUJfQUxMT0NfTk9fUkVDVVJTRVxcdDB4MDQgLyogcHJldmVudCBrbWFsbG9jKCkgcmVjdXJzaW9uICovXFxuLS1cXG5tbS9zbGFiLmg9NjE2PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpzbGFiX29ial9leHQoc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbGFiLmgtNjI4LVxcbm1tL3NsYWIuaDo2Mjk6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbm1tL3NsYWIuaC02MzAtXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMzoxMTo1MC44MTkyNTU5NDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjczNTIxNDYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbW0vc2xhYi5oYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIExldCdzIHN0YXJ0IHdpdGggYG1tL3NsYWIuaGAuIFNwZWNpZmljYWxseSwgSSB0aGluayBsb29raW5nIGFyb3VuZCBsaW5lIDYyOSB3aWxsIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50LiBUaGlzIGxvY2F0aW9uIHVzdWFsbHkgaG91c2VzIGltcG9ydGFudCBkZWZpbml0aW9ucyBvciBtYWNyb3MgdGhhdCBhcmUgY3JpdGljYWwgZm9yIGdyYXNwaW5nIHRoZSBjb25jZXB0cy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGNvcmUgc3RydWN0dXJlcyBvciBmdW5jdGlvbnMgcmVsYXRlZCB0byBvYmplY3QgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gaW4gdGhlIHNsYWIgYWxsb2NhdG9yLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byB0cmFjZSBob3cgdGhlIG1lbW9yeSBpcyBiZWluZyBoYW5kbGVkLiBJJ20gaG9waW5nIHRoaXMgd2lsbCBpbGx1bWluYXRlIHdoYXRldmVyIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIwNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjExOjUzLjU1NDQ3MzI4N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc2xhYi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbGFiX2dldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIpXFxuIDYwMTpcXHR7XFxuIDYwMjpcXHRcXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCk7XFxuIDYwMzpcXHR9XFxuIDYwNDpcXHQjZW5kaWZcXG4gNjA1OlxcdFxcbiA2MDY6XFx0LypcXG4gNjA3OlxcdCAqIHNsYWJfb2JqX2V4dCAtIGdldCB0aGUgcG9pbnRlciB0byB0aGUgc2xhYiBvYmplY3QgZXh0ZW5zaW9uIG1ldGFkYXRhXFxuIDYwODpcXHQgKiBhc3NvY2lhdGVkIHdpdGggYW4gb2JqZWN0IGluIGEgc2xhYi5cXG4gNjA5OlxcdCAqIEBzbGFiOiBhIHBvaW50ZXIgdG8gdGhlIHNsYWIgc3RydWN0XFxuIDYxMDpcXHQgKiBAb2JqX2V4dHM6IGEgcG9pbnRlciB0byB0aGUgb2JqZWN0IGV4dGVuc2lvbiB2ZWN0b3JcXG4gNjExOlxcdCAqIEBpbmRleDogYW4gaW5kZXggb2YgdGhlIG9iamVjdFxcbiA2MTI6XFx0ICpcXG4gNjEzOlxcdCAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgZXh0ZW5zaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgb2JqZWN0LlxcbiA2MTQ6XFx0ICogTXVzdCBiZSBjYWxsZWQgd2l0aGluIGEgc2VjdGlvbiBjb3ZlcmVkIGJ5IGdldC9wdXRfc2xhYl9vYmpfZXh0cygpLlxcbiA2MTU6XFx0ICovXFxuIDYxNjpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLFxcbiA2MTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXFxuIDYxODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGluZGV4KVxcbiA2MTk6XFx0e1xcbiA2MjA6XFx0XFx0c3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0O1xcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRWTV9XQVJOX09OX09OQ0Uob2JqX2V4dHMgIT0gc2xhYl9vYmpfZXh0cyhzbGFiKSk7XFxuIDYyMzpcXHRcXG4gNjI0OlxcdFxcdG9ial9leHQgPSAoc3RydWN0IHNsYWJvYmpfZXh0ICopKG9ial9leHRzICtcXG4gNjI1OlxcdFxcdFxcdFxcdFxcdFxcdCBzbGFiX2dldF9zdHJpZGUoc2xhYikgKiBpbmRleCk7XFxuIDYyNjpcXHRcXHRyZXR1cm4ga2FzYW5fcmVzZXRfdGFnKG9ial9leHQpO1xcbiA2Mjc6XFx0fVxcbiA2Mjg6XFx0XFxuIDYyOTpcXHRpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuIDYzMDpcXHRcXHRcXHRcXHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XFxuIDYzMTpcXHRcXG4gNjMyOlxcdCNlbHNlIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cXG4gNjMzOlxcdFxcbiA2MzQ6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuIDYzNTpcXHR7XFxuIDYzNjpcXHRcXHRyZXR1cm4gMDtcXG4gNjM3OlxcdH1cXG4gNjM4OlxcdFxcbiA2Mzk6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKnNsYWJfb2JqX2V4dChzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4gNjQwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbiA2NDE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBpbmRleClcXG4gNjQyOlxcdHtcXG4gNjQzOlxcdFxcdHJldHVybiBOVUxMO1xcbiA2NDQ6XFx0fVxcbiA2NDU6XFx0XFxuIDY0NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKSB7IH1cXG4gNjQ3OlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNsYWJfZ2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gMDsgfVxcbiA2NDg6XFx0XFxuIDY0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6NTMuNTU0NjE4MTg3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDA1NjY3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYENPTkZJR19TTEFCX09CSl9FWFRgIERlcGVuZGVuY3kqKlxuXG5SaWdodCwgc28gSSdtIGhpdHRpbmcgYSBzbmFnIOKAkyBpdCBsb29rcyBsaWtlIGBDT05GSUdfU0xBQl9PQkpfRVhUYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHNvbWV0aGluZyBJJ20gd29ya2luZyBvbi4gVGhlIGNvZGUncyBtYWtpbmcgaXQgcHJldHR5IGNsZWFyIHRoYXQgSSBjYW4ndCBtb3ZlIGZvcndhcmQgd2l0aG91dCB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBlbmFibGVkLlxuXG5NeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGZpZ3VyaW5nIG91dCAqd2hhdCogZXhhY3RseSBlbmFibGVzIGBDT05GSUdfU0xBQl9PQkpfRVhUYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBmaWxlcywgdHJhY2luZyBkZXBlbmRlbmNpZXMsIGFuZCBzZWVpbmcgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIFByb2JhYmx5IHNvbWV0aGluZyBsaWtlIHRoaXMgd2lsbCBnZXQgbWUgc3RhcnRlZDogYGZpbmQgLiAtbmFtZSBcIktjb25maWdcIiAtcHJpbnQwIHwgeGFyZ3MgLTAgZ3JlcCAtSCBcIkNPTkZJR19TTEFCX09CSl9FWFRcImAuIFRoZW4gSSdsbCBzdGFydCBjaGVja2luZyB0aGUgY29udGV4dC4gTGV0J3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE1MCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6NTYuNTk1MTg3NzY1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzUyMTAxOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTEFCX09CSl9FWFRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDMzPWNvbmZpZyBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDQwLVxcbmluaXQvS2NvbmZpZzoxMDQxOmNvbmZpZyBTTEFCX09CSl9FWFRcXG5pbml0L0tjb25maWctMTA0Mi1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjEyOjAxLjk0NzMwMTg2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg2Mzg5MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlJ3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFtjb250ZXh0IGlzIG1pc3NpbmcsIGJ1dCBpdCB3b3VsZCBoYXZlIGJlZW4gaW5zZXJ0ZWQgaGVyZSwgZS5nLiwgXCJ0aGUgbmV3IGZpbGVzeXN0ZW0gZHJpdmVyIEknbSB3b3JraW5nIG9uXCJdPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbS4gTGV0J3Mgc2VlLi4uIEtjb25maWcgZmlsZXMgYXJlIHRoZSBzdGFuZGFyZC4gR2l2ZW4gdGhlIHR5cGljYWwgc3RydWN0dXJlLCBpdCdzIHByb2JhYmx5IGJlc3QgdG8gc3RhcnQgd2l0aCBgaW5pdC9LY29uZmlnYC4gQW5kLCBnaXZlbiBteSBleHBlcmllbmNlLCBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBhcm91bmQgbGluZSAxMDQxLiBJJ20gYmV0dGluZyB0aGVyZSdzIGEgcmVsYXRlZCBzZWN0aW9uIHRoZXJlLCBvciBhdCBsZWFzdCBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQuIEl0J3MgdXN1YWxseSBhIGdvb2QgYmV0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDk0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTI6MDUuMjMzNjk0MjE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAzMDpcXHRcXHQgIHJlc291cmNlcyB3aXRoaW4gdGhlIHNhbWUgY2FjaGUgZG9tYWluLCByZWR1Y2luZyBjYWNoZSBtaXNzZXMgYW5kXFxuMTAzMTpcXHRcXHQgIGxvd2VyaW5nIGRhdGEgYWNjZXNzIGxhdGVuY3kuXFxuMTAzMjpcXHRcXG4xMDMzOlxcdGNvbmZpZyBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURcXG4xMDM0OlxcdFxcdGJvb2wgXFxcIkF1dG9tYXRpY2FsbHkgZW5hYmxlIE5VTUEgYXdhcmUgbWVtb3J5L3Rhc2sgcGxhY2VtZW50XFxcIlxcbjEwMzU6XFx0XFx0ZGVmYXVsdCB5XFxuMTAzNjpcXHRcXHRkZXBlbmRzIG9uIE5VTUFfQkFMQU5DSU5HXFxuMTAzNzpcXHRcXHRoZWxwXFxuMTAzODpcXHRcXHQgIElmIHNldCwgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIHdpbGwgYmUgZW5hYmxlZCBpZiBydW5uaW5nIG9uIGEgTlVNQVxcbjEwMzk6XFx0XFx0ICBtYWNoaW5lLlxcbjEwNDA6XFx0XFxuMTA0MTpcXHRjb25maWcgU0xBQl9PQkpfRVhUXFxuMTA0MjpcXHRcXHRib29sXFxuMTA0MzpcXHRcXG4xMDQ0OlxcdG1lbnVjb25maWcgQ0dST1VQU1xcbjEwNDU6XFx0XFx0Ym9vbCBcXFwiQ29udHJvbCBHcm91cCBzdXBwb3J0XFxcIlxcbjEwNDY6XFx0XFx0c2VsZWN0IEtFUk5GU1xcbjEwNDc6XFx0XFx0aGVscFxcbjEwNDg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGdyb3VwaW5nIHNldHMgb2YgcHJvY2Vzc2VzIHRvZ2V0aGVyLCBmb3JcXG4xMDQ5OlxcdFxcdCAgdXNlIHdpdGggcHJvY2VzcyBjb250cm9sIHN1YnN5c3RlbXMgc3VjaCBhcyBDcHVzZXRzLCBDRlMsIG1lbW9yeVxcbjEwNTA6XFx0XFx0ICBjb250cm9scyBvciBkZXZpY2UgaXNvbGF0aW9uLlxcbjEwNTE6XFx0XFx0ICBTZWVcXG4xMDUyOlxcdFxcdFxcdC0gRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZGVzaWduLUNGUy5yc3RcXHQoQ0ZTKVxcbjEwNTM6XFx0XFx0XFx0LSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS8gKGZlYXR1cmVzIGZvciBncm91cGluZywgaXNvbGF0aW9uXFxuMTA1NDpcXHRcXHRcXHRcXHRcXHRcXHQgIGFuZCByZXNvdXJjZSBjb250cm9sKVxcbjEwNTU6XFx0XFxuMTA1NjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDU3OlxcdFxcbjEwNTg6XFx0aWYgQ0dST1VQU1xcbjEwNTk6XFx0XFxuMTA2MDpcXHRjb25maWcgUEFHRV9DT1VOVEVSXFxuMTA2MTpcXHRcXHRib29sXFxuMTA2MjpcXHRcXG4xMDYzOlxcdGNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbjEwNjQ6XFx0XFx0Ym9vbCBcXFwiRmF2b3IgZHluYW1pYyBtb2RpZmljYXRpb24gbGF0ZW5jeSByZWR1Y3Rpb24gYnkgZGVmYXVsdFxcXCJcXG4xMDY1OlxcdFxcdGhlbHBcXG4xMDY2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgXFxcImZhdm9yZHlubW9kc1xcXCIgbW91bnQgb3B0aW9uIGJ5IGRlZmF1bHRcXG4xMDY3OlxcdFxcdCAgd2hpY2ggcmVkdWNlcyB0aGUgbGF0ZW5jaWVzIG9mIGR5bmFtaWMgY2dyb3VwIG1vZGlmaWNhdGlvbnMgc3VjaFxcbjEwNjg6XFx0XFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcXG4xMDY5OlxcdFxcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cXG4xMDcwOlxcdFxcbjEwNzE6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA3MjpcXHRcXG4xMDczOlxcdGNvbmZpZyBNRU1DR1xcbjEwNzQ6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA3NTpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA3NjpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwNzc6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwNzg6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA3OTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjEyOjA1LjIzMzk0NDA5OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ3NzQ5NTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgU0xBQl9PQkpfRVhUKipcblxuQWxyaWdodCwgc28gYFNMQUJfT0JKX0VYVGAgaXMgYmVpbmcgcHVsbGVkIGluIGJ5IGBNRU1DR2AuIEZpbmUsIHRoYXQncyBhIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiBXaGF0ICplbHNlKiBpcyBzZWxlY3RpbmcgYFNMQUJfT0JKX0VYVGA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBkZXBlbmRlbmN5IHRyZWUsIGVzcGVjaWFsbHkgaWYgdGhlcmUncyBhbnkgb3ZlcmxhcCBvciBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyBJJ20gZmFtaWxpYXIgd2l0aC4gVW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgaWYgdGhpcyB1c2FnZSBpcyBleHBlY3RlZCwgZWZmaWNpZW50LCBvciBpZiBpdCBtaWdodCBpbXBhY3Qgb3RoZXIgYXJlYXMuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgY29kZSB0byBzZWUgd2hlcmUgZWxzZSB0aGlzIGlzIGJlaW5nIHVzZWQgYW5kIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhvc2UgY2hvaWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjEyOjA4Ljg4MTY5NTg3NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk2Mzc5NzQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgU0xBQl9PQkpfRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3Mz1jb25maWcgTUVNQ0dcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDc2LVxcdHNlbGVjdCBFVkVOVEZEXFxuaW5pdC9LY29uZmlnOjEwNzc6XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbmluaXQvS2NvbmZpZy0xMDc4LVxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0zMjQ9Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMzMxLVxcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxcbm1tL0tjb25maWcuZGVidWc6MzMyOlxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG5tbS9LY29uZmlnLmRlYnVnLTMzMy1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjEyOjEyLjg0NTQ5ODU5MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc2NTcwNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgc28gYE1FTV9BTExPQ19QUk9GSUxJTkdgIGFsc28gaW1wbGllcyB0aGUgc2VsZWN0aW9uIG9mIGBTTEFCX09CSl9FWFRgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZSDigJMgcHJvZmlsaW5nIGxpa2VseSBuZWVkcyB0aGF0IGV4dHJhIG9iamVjdCBtZXRhZGF0YS4gTm93LCB0aGlzIG1lYW5zIHdlJ3JlIGluIGEgc2l0dWF0aW9uIHdoZXJlIHdlIG5lZWQgZWl0aGVyIGBNRU1DR2AgKG1lbW9yeSBjb250cm9sIGdyb3Vwcykgb3IgdGhlIHByb2ZpbGluZyBvcHRpb24gaXRzZWxmIHRvIGJlIGVuYWJsZWQuICBJJ20gbWFraW5nIGEgbWVudGFsIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGltcG9ydGFudCBkZXBlbmRlbmN5IHRvIGtlZXAgaW4gbWluZCwgYmVjYXVzZSBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgY29tYmluYXRpb24gb2YgdGhlc2UgZmVhdHVyZXMgY291bGQgcG90ZW50aWFsbHkgaW5mbHVlbmNlIHBlcmZvcm1hbmNlLiBMZXQgbWUganVzdCB0YWtlIGEgcXVpY2sgcGVlayBhdCBgbW0vS2NvbmZpZy5kZWJ1Z2AgYW5kIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhbnkgb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgb3B0aW9ucyB3aGlsZSBJJ20gYXQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzcxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTI6MTYuMDIyMDcxODI3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHRcXHQgIG92ZXJoZWFkIGluIHRoZSBwYWdlIGZhdWx0IHBhdGguXFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxcbiAzMjM6XFx0XFxuIDMyNDpcXHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xcbiAzMjU6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1xcXCJcXG4gMzI2OlxcdFxcdGRlZmF1bHQgblxcbiAzMjc6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gMzI4OlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiAzMjk6XFx0XFx0ZGVwZW5kcyBvbiAhREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVXFxuIDMzMDpcXHRcXHRzZWxlY3QgQ09ERV9UQUdHSU5HXFxuIDMzMTpcXHRcXHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cXG4gMzMyOlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4gMzMzOlxcdFxcdGhlbHBcXG4gMzM0OlxcdFxcdCAgVHJhY2sgYWxsb2NhdGlvbiBzb3VyY2UgY29kZSBhbmQgcmVjb3JkIHRvdGFsIGFsbG9jYXRpb24gc2l6ZVxcbiAzMzU6XFx0XFx0ICBpbml0aWF0ZWQgYXQgdGhhdCBjb2RlIGxvY2F0aW9uLiBUaGUgbWVjaGFuaXNtIGNhbiBiZSB1c2VkIHRvIHRyYWNrXFxuIDMzNjpcXHRcXHQgIG1lbW9yeSBsZWFrcyB3aXRoIGEgbG93IHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgaW1wYWN0LlxcbiAzMzc6XFx0XFxuIDMzODpcXHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcXG4gMzM5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYnkgZGVmYXVsdFxcXCJcXG4gMzQwOlxcdFxcdGRlZmF1bHQgeVxcbiAzNDE6XFx0XFx0ZGVwZW5kcyBvbiBNRU1fQUxMT0NfUFJPRklMSU5HXFxuIDM0MjpcXHRcXG4gMzQzOlxcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxuIDM0NDpcXHRcXHRib29sIFxcXCJNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxlciBkZWJ1Z2dpbmdcXFwiXFxuIDM0NTpcXHRcXHRkZWZhdWx0IG5cXG4gMzQ2OlxcdFxcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xcbiAzNDc6XFx0XFx0c2VsZWN0IE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxuIDM0ODpcXHRcXHRoZWxwXFxuIDM0OTpcXHRcXHQgIEFkZHMgd2FybmluZ3Mgd2l0aCBoZWxwZnVsIGVycm9yIG1lc3NhZ2VzIGZvciBtZW1vcnkgYWxsb2NhdGlvblxcbiAzNTA6XFx0XFx0ICBwcm9maWxpbmcuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjEyOjE2LjAyMjIwNjc4N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTU0MzYxOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTbGFiIEFsbG9jYXRpb24gZm9yIE1lbW9yeSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBzbGFiIGFsbG9jYXRvciBjb2RlLCBhbmQgcmlnaHQgb2ZmIHRoZSBiYXQsIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBhbmQgYE1FTUNHYCBzZWVtIGxpa2Ugc29saWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGVuYWJsZSBmb3IgdGhpcyBhbmFseXNpcy4gTm93LCB0cmFjaW5nIHRoZSBjYWxsIHN0YWNrLCBpdCBsb29rcyBsaWtlIGBvYmpfZXh0c19hbGxvY19zaXplYCBpcyBjYWxsZWQgYnkgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBUaGlzIGBhbGxvY19zbGFiX29ial9leHRzYCBmdW5jdGlvbiBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9va2AgYW5kIGBhY2NvdW50X3NsYWJgLiBUaGVuIGBhY2NvdW50X3NsYWJgIGlzIGNhbGxlZCBieSBgYWxsb2NhdGVfc2xhYmAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYF9fX3NsYWJfYWxsb2NgLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBgX19zbGFiX2FsbG9jYCwgdGhlbiBgc2xhYl9hbGxvY19ub2RlYCwgdWx0aW1hdGVseSBiZWluZyBjYWxsZWQgYnkgYGttZW1fY2FjaGVfYWxsb2NgIGFuZCBga21hbGxvY2AuXG5cblRoYXQgd2hvbGUgY2hhaW4gbG9va3MgbGlrZSBhIHByZXR0eSBob3QgcGF0aCwgd2hpY2ggbWVhbnMgYW55IHBlcmZvcm1hbmNlIGdhaW5zIGhlcmUgY291bGQgYmUgc2lnbmlmaWNhbnQuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYHNsYWJfb2JqX2V4dHMoc2xhYilgIGlzIGZhbHNlLiBUaGF0IGhhcHBlbnMgd2hlbiBhIG5ldyBzbGFiIGlzIGFsbG9jYXRlZCBvciB3aGVuIGl0J3MgZmlyc3QgbmVlZGVkLiBTbyB0aGlzIGlzIG5vdCBhIGhvdCBwYXRoLCB0aGlzIGlzIGEgcGF0aCB0aGF0IG9ubHkgYWZmZWN0cyBwZXJmb3JtYW5jZSB0aGUgZmlyc3QgdGltZSBhIHNsYWIgaXMgY3JlYXRlZCwgb3Igd2hlbiB0aGUgZmlyc3Qgc2xhYiBpcyBjcmVhdGVkLlxuXG5UaGUgcGF0Y2ggbm90ZXMgdGhhdCB0aGUgYXJyYXkgYmVpbmcgYWxsb2NhdGVkIGlzIGBrbWFsbG9jKClgJ2QuIFRoZSBrZXkgaXNzdWUgYXBwZWFycyB0byBiZSBwb3RlbnRpYWwgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGlmIHRoZSBhcnJheSBjb21lcyBmcm9tIHRoZSBzYW1lIG9yIGEgc21hbGxlciBrbWFsbG9jIGNhY2hlIHRoYW4gdGhlIHNsYWIgaXRzZWxmLiBUaGlzIGNhbiBsZWFkIHRvIHBpbm5pbmcgdGhlIHNsYWJzIGZvcmV2ZXIgYW5kIHJlY3Vyc2lvbiB2aWEgYGZyZWVfc2xhYl9vYmpfZXh0cygpYCwgYGtmcmVlKClgLCBhbmQgdGhlbiBgZGlzY2FyZF9zbGFiKClgLiBUaGUgc29sdXRpb24gc3VnZ2VzdGVkIGluIHRoZSBwYXRjaCBpcyB0byBmb3JjZSB0aGUgYWxsb2NhdGlvbiBpbnRvIGEgc3RyaWN0bHkgbGFyZ2VyIGNhY2hlLCB0byBlbnN1cmUgdGhlIHJlbGF0aW9uc2hpcCBzdGF5cyBhY3ljbGljLiBNYWtlcyBzZW5zZSAtIHByZXZlbnRpbmcgdGhhdCBjaXJjdWxhciBkZXBlbmRlbmN5IGlzIGNyaXRpY2FsIGZvciBjbGVhbnVwIGFuZCBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcy5cblxuR2l2ZW4gdGhhdCBgb2JqX2V4dHNfYWxsb2Nfc2l6ZWAgaXMgc3RhdGljIGlubGluZSwgbXkgYXR0ZW50aW9uIHNob3VsZCBzaGlmdCB0byBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaW50ZXJlc3QuIExldCdzIHNlZSBpZiBpdCdzIGV4cG9ydGVkIG9yIGlmIGl0IGNhbiBiZSBmb2N1c2VkIG9uIG1vcmUgc3BlY2lmaWNhbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ2NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjEyOjIyLjU3NjU3MTg1NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzOTI4MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3NsYWJfb2JqX2V4dHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0yMTM2PXN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjE2MS1cXG5tbS9zbHViLmM6MjE2MjppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIxNjMtXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjIzNj1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjI3NS0gKi9cXG5tbS9zbHViLmM6MjI3NjpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtMjI3Ny17XFxuLS1cXG5tbS9zbHViLmM9MjMyNz1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIzMzAtXFxubW0vc2x1Yi5jOjIzMzE6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMzMi1cXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjMzNz1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjM0MC1cXG5tbS9zbHViLmM6MjM0MTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjM0Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmM9MjM1MT1wcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMjM1NC1cXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmM6MjM1NTpcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxubW0vc2x1Yi5jLTIzNTYtXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCIlcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcXFxuXFxcIixcXG4tLVxcbm1tL3NsdWIuYz0zMzU4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcXG4tLVxcbm1tL3NsdWIuYy0zMzY0LVxcdFxcdFxcdCFzbGFiX29ial9leHRzKHNsYWIpKVxcbm1tL3NsdWIuYzozMzY1OlxcdFxcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxcbm1tL3NsdWIuYy0zMzY2LVxcdFxcdFxcdFxcdCAgICBhbGxvY19mbGFncyB8IFNMQUJfQUxMT0NfTkVXX1NMQUIpO1xcbi0tXFxubW0vc2x1Yi5jPTMzODc9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zNDM3LVxcdCAqL1xcbm1tL3NsdWIuYzozNDM4OlxcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XFxubW0vc2x1Yi5jLTM0MzktXFx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTI6MjIuODIwNTEwMzUyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTYwMzc1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgU2xhYiBPYmplY3QgRXh0ZW5zaW9ucyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIGRlZmluZWQgKnR3aWNlKj8gVGhhdCdzIHVudXN1YWwuIE15IGZpcnN0IHRob3VnaHQgaXMgYSBzaW1wbGUgbWlzdGFrZSwgbWF5YmUgYSByZWR1bmRhbnQgZGVjbGFyYXRpb24uIEJ1dCB3YWl0Li4uIEFoYSEgQWZ0ZXIgYSBjbG9zZXIgbG9vaywgaXQgc2VlbXMgb25lIGlzIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24sIGFuZCB0aGUgb3RoZXIgaXMgYSBkdW1teSBvciBzdHViIGRlZmluaXRpb24gdG8gYmUgdXNlZCB3aGVuIGBDT05GSUdfU0xBQl9PQkpfRVhUYCBpcyBkaXNhYmxlZC4gVGhhdCdzIGEgY2xhc3NpYyBwcmVwcm9jZXNzb3IgdHJpY2sgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBmb2xsb3dpbmcgdGhlIGNvcnJlY3QgZXhlY3V0aW9uIHBhdGguIExldCBtZSBnbyBiYWNrIHRvIHdoZXJlIGl0IGlzIGRlZmluZWQsIGxldCBtZSBzZWUuLi4gQWgsIHRoZXJlIGl0IGlzISBJbiBgbW0vc2x1Yi5jYCwgYXJvdW5kIGxpbmUgMjE2MiwgSSBzZWUgdGhlIGAjaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVGAgY29uZGl0aW9uYWwuIFNvLCB0aGUgZHVtbXkgZGVmaW5pdGlvbiBtdXN0IGJlIG91dHNpZGUgdGhhdCBibG9jay4gTm93LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgd2hhdCB0aGF0IGR1bW15IGZ1bmN0aW9uIGRvZXMsIGxldCBtZSBjaGVjayBsaW5lIDIzMzEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTczLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTI6MjYuNzM2NTUxMTczWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MjY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zbHViLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMyNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjMyNTpcXHR9XFxuMjMyNjpcXHRcXG4yMzI3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuMjMyODpcXHR7XFxuMjMyOTpcXHR9XFxuMjMzMDpcXHRcXG4yMzMxOlxcdHN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuMjMzMjpcXHRcXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuMjMzMzpcXHR7XFxuMjMzNDpcXHRcXHRyZXR1cm4gMDtcXG4yMzM1OlxcdH1cXG4yMzM2OlxcdFxcbjIzMzc6XFx0c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbjIzMzg6XFx0e1xcbjIzMzk6XFx0fVxcbjIzNDA6XFx0XFxuMjM0MTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4yMzQyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4yMzQzOlxcdHtcXG4yMzQ0OlxcdH1cXG4yMzQ1OlxcdFxcbjIzNDY6XFx0I2VuZGlmIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cXG4yMzQ3OlxcdFxcbjIzNDg6XFx0I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxuMjM0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTI6MjYuNzM2OTE1NzAzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3Njg1ODMwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyB0aHJvdWdoIHRoaXMgY29kZSwgYW5kIEkndmUgemVyb2VkIGluIG9uIHRoZSBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgZnVuY3Rpb24uIFJpZ2h0LCBsaW5lIDIzMzEsIHRoYXQncyBqdXN0IGEgZHVtbXkgZGVmaW5pdGlvbi4gVGhlICphY3R1YWwqIGRlZmluaXRpb24gSSdtIGludGVyZXN0ZWQgaW4gaXMgYmFjayBvbiBsaW5lIDIxNjIuIEdvb2QsIGdvdCB0aGF0LiBOb3csIEkgc2VlIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzbid0IGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgaGFuZHkuIFRoYXQgbWVhbnMgSSBjYW4gcHJvYmFibHkgdHJhY2UgaXRzIHVzYWdlIHByZXR0eSBlZmZlY3RpdmVseS4gSG9sZCBvbi4uLiBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLiBJIHJlY2FsbCBzZWVpbmcgdGhpcyBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgbW0vbWVtY29udHJvbC5jYC4gWWVwLCBoZXJlIHdlIGdvLCBsaW5lIDM1MzcgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhhdCBjYWxsIHNpdGUgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NDAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjEyOjMwLjUwNTUwMDkyOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzI4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM1MzA6XFx0XFx0LypcXG4zNTMxOlxcdFxcdCAqIEZvciBlYWNoIGFjY291bnRlZCBvYmplY3QgdGhlcmUgaXMgYW4gZXh0cmEgc3BhY2Ugd2hpY2ggaXMgdXNlZFxcbjM1MzI6XFx0XFx0ICogdG8gc3RvcmUgb2JqX2Nncm91cCBtZW1iZXJzaGlwLiBDaGFyZ2UgaXQgdG9vLlxcbjM1MzM6XFx0XFx0ICovXFxuMzUzNDpcXHRcXHRyZXR1cm4gcy1cXHUwMDNlc2l6ZSArIHNpemVvZihzdHJ1Y3Qgb2JqX2Nncm91cCAqKTtcXG4zNTM1OlxcdH1cXG4zNTM2OlxcdFxcbjM1Mzc6XFx0Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4zNTM4OlxcdFxcdFxcdFxcdFxcdCAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBzbGFiX2FsbG9jX2ZsYWdzLFxcbjM1Mzk6XFx0XFx0XFx0XFx0XFx0ICBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXFxuMzU0MDpcXHR7XFxuMzU0MTpcXHRcXHRzaXplX3Qgb2JqX3NpemUgPSBvYmpfZnVsbF9zaXplKHMpO1xcbjM1NDI6XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbjM1NDM6XFx0XFx0c3RydWN0IHNsYWIgKnNsYWI7XFxuMzU0NDpcXHRcXHR1bnNpZ25lZCBsb25nIG9mZjtcXG4zNTQ1OlxcdFxcdHNpemVfdCBpO1xcbjM1NDY6XFx0XFxuMzU0NzpcXHRcXHQvKlxcbjM1NDg6XFx0XFx0ICogVGhlIG9idGFpbmVkIG9iamNnIHBvaW50ZXIgaXMgc2FmZSB0byB1c2Ugd2l0aGluIHRoZSBjdXJyZW50IHNjb3BlLFxcbjM1NDk6XFx0XFx0ICogZGVmaW5lZCBieSBjdXJyZW50IHRhc2sgb3Igc2V0X2FjdGl2ZV9tZW1jZygpIHBhaXIuXFxuMzU1MDpcXHRcXHQgKiBvYmpfY2dyb3VwX2dldCgpIGlzIHVzZWQgdG8gZ2V0IGEgcGVybWFuZW50IHJlZmVyZW5jZS5cXG4zNTUxOlxcdFxcdCAqL1xcbjM1NTI6XFx0XFx0b2JqY2cgPSBjdXJyZW50X29ial9jZ3JvdXAoKTtcXG4zNTUzOlxcdFxcdGlmICghb2JqY2cgfHwgb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG4zNTU0OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjM1NTU6XFx0XFxuMzU1NjpcXHRcXHQvKlxcbjM1NTc6XFx0XFx0ICogc2xhYl9hbGxvY19ub2RlKCkgYXZvaWRzIHRoZSBOVUxMIGNoZWNrLCBzbyB3ZSBtaWdodCBiZSBjYWxsZWQgd2l0aCBhXFxuMzU1ODpcXHRcXHQgKiBzaW5nbGUgTlVMTCBvYmplY3QuIGttZW1fY2FjaGVfYWxsb2NfYnVsaygpIGFib3J0cyBpZiBpdCBjYW4ndCBmaWxsXFxuMzU1OTpcXHRcXHQgKiB0aGUgd2hvbGUgcmVxdWVzdGVkIHNpemUuXFxuMzU2MDpcXHRcXHQgKiByZXR1cm4gc3VjY2VzcyBhcyB0aGVyZSdzIG5vdGhpbmcgdG8gZnJlZSBiYWNrXFxuMzU2MTpcXHRcXHQgKi9cXG4zNTYyOlxcdFxcdGlmICh1bmxpa2VseSgqcCA9PSBOVUxMKSlcXG4zNTYzOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjM1NjQ6XFx0XFxuMzU2NTpcXHRcXHRmbGFncyBcXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xcbjM1NjY6XFx0XFxuMzU2NzpcXHRcXHRpZiAobHJ1KSB7XFxuMzU2ODpcXHRcXHRcXHRpbnQgcmV0O1xcbjM1Njk6XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjM1NzA6XFx0XFxuMzU3MTpcXHRcXHRcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xcbjM1NzI6XFx0XFx0XFx0cmV0ID0gbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZmxhZ3MpO1xcbjM1NzM6XFx0XFx0XFx0Y3NzX3B1dChcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcyk7XFxuMzU3NDpcXHRcXG4zNTc1OlxcdFxcdFxcdGlmIChyZXQpXFxuMzU3NjpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMzU3NzpcXHRcXHR9XFxuMzU3ODpcXHRcXG4zNTc5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzaXplOyBpKyspIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTI6MzAuNTA1Nzc1ODA5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzMzUzNjg5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNMVUIgU2xhYiBFeHRlbnNpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBoZXJlJ3MgbXkgYnJlYWtkb3duLiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlOyBpdCdzIGNhbGxlZCBkdXJpbmcgc2xhYiBhbGxvY2F0aW9uIGFuZCBhbHNvIHdpdGhpbiB0aGUgbWVtY2cgcG9zdC1hbGxvYyBob29rLCBtYWtpbmcgaXQgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBjaGFuZ2UgbW9kaWZpZXMgYG9ial9leHRzX2FsbG9jX3NpemVgLCB3aGljaCBpcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24sIGJ1dCBpdCdzIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIHRoYXQgSSBuZWVkIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBJIGJyaWVmbHkgY29uc2lkZXJlZCBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAsIGJ1dCBsZXQncyBzdGljayB3aXRoIHRoZSBtYWluIGZ1bmN0aW9uIGZvciBub3cuXG5cbkkgY29uZmlybWVkIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uIGRlZmluZWQgaW4gYG1tL3NsdWIuY2AgYW5kIGRlY2xhcmVkIGluIGBtbS9zbGFiLmhgLiBJdCdzIG5vdCBleHBvcnRlZCwgbWVhbmluZyBpdCdzIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIHRvIGtlcm5lbCBtb2R1bGVzLCBidXQgc3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IHRhcmdldCBpdC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgdGVjaG5pY2FsbHkgdGFyZ2V0YWJsZSwgYnV0IHRhcmdldGluZyBhIGdsb2JhbCBmdW5jdGlvbiBpcyB1c3VhbGx5IGJldHRlciBmb3IgY2xhcml0eS4gU28sIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyB0aGUgdGFyZ2V0LiBUaGUgaW5saW5lIG5hdHVyZSBvZiBgb2JqX2V4dHNfYWxsb2Nfc2l6ZWAgbWVhbnMgaXQgd29uJ3QgYXBwZWFyIGluIHRoZSBzeW1ib2wgdGFibGUuXG5cbk1vdmluZyBvbiB0byB0aGUgY29uZmlndXJhdGlvbiwgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGFuZCBgTUVNQ0dgIHNlZW0gcmVsZXZhbnQgc2luY2UgdGhleSBpbmRpcmVjdGx5IHNlbGVjdCBgU0xBQl9PQkpfRVhUYC4gV2UgbmVlZCB0byBpbmNsdWRlIHRoZW0uIEEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgc3VmZmljaWVudCB0byBlbmFibGUgYFNMQUJfT0JKX0VYVGAsIHRob3VnaCBgTUVNQ0dgIGFsc28gZG9lcyBpdCwgc28gbGV0J3MgaW5jbHVkZSBib3RoIGZvciB0aG9yb3VnaG5lc3MuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIGNvZGUgbW9kaWZpZXMgaG93IHRoZSBgc2xhYm9ial9leHRgIGFycmF5IHNpemUgaXMgY2FsY3VsYXRlZCwgc3BlY2lmaWNhbGx5IHRoZSBjaGVjayB0aGF0IGRldGVybWluZXMgaWYgd2UgbmVlZCBhbiBleHRlbnNpb24uIFRoaXMgcmV2aXNlZCBsb2dpYyBwcmV2ZW50cyBhIHBvdGVudGlhbCBjeWNsaWMgZGVwZW5kZW5jeSBpc3N1ZSB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgaXQgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjb3VsZCByZXZlYWwgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcy5cblxuU28sIGluIHN1bW1hcnksIGhlcmUgYXJlIG15IGRlY2lzaW9uczpcblxuKiAgICoqRm9jdXMgU3ltYm9sOioqIGBhbGxvY19zbGFiX29ial9leHRzYFxuKiAgICoqRW5hYmxlIENvbmZpZ3M6KiogYE1FTV9BTExPQ19QUk9GSUxJTkdgLCBgTUVNQ0dgXG5cbkknbSByZWFkeSB0byBtb3ZlIGZvcndhcmQgYW5kIHVzZSB0aGUgc2V0LXJlc3VsdHMgdG9vbCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODg4LCJPdXRwdXRUb2tlbnMiOjEwMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjEyOjM5Ljg0MTE0NzM2MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTcwOTIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNpemUgY2FsY3VsYXRpb24gZm9yIHRoZSBzbGFib2JqX2V4dCBhcnJheSBpbiB0aGUgU0xVQiBhbGxvY2F0b3IgdG8gcHJldmVudCBhIGN5Y2xpYyBkZXBlbmRlbmN5IGJldHdlZW4ga21hbGxvYyBjYWNoZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgc2xhYiBleHRlbnNpb25zIGFyZSBhbGxvY2F0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNpemUgY2FsY3VsYXRpb24gZm9yIHRoZSBzbGFib2JqX2V4dCBhcnJheSBpbiB0aGUgU0xVQiBhbGxvY2F0b3IgdG8gcHJldmVudCBhIGN5Y2xpYyBkZXBlbmRlbmN5IGJldHdlZW4ga21hbGxvYyBjYWNoZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgc2xhYiBleHRlbnNpb25zIGFyZSBhbGxvY2F0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowtd7st[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 02:59:44 +0000 UTC FinishedAt: 2026-06-30 03:12: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": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING", "MEMCG" ], "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": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING", "MEMCG" ], "series_id": "f529acf5-1b21-404c-a114-bfb3dea06505" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_slab_obj_exts" ], "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzaXplIGNhbGN1bGF0aW9uIGZvciB0aGUgc2xhYm9ial9leHQgYXJyYXkgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIHRvIHByZXZlbnQgYSBjeWNsaWMgZGVwZW5kZW5jeSBiZXR3ZWVuIGttYWxsb2MgY2FjaGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgaG93IHNsYWIgZXh0ZW5zaW9ucyBhcmUgYWxsb2NhdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzllOGZmODA0OTM4NTIxMWZkNDJlZGMyNjI2MzhhZjVmNGE4MjJhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDAzOjExOjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggOWVjNzc0ZGM3MDA5NjkuLjBjMzBkNjg5ODIwYTExIDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmNcbkBAIC0yMTI0LDE1ICYjNDM7MjEyNCwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuIH1cbiBcbiAvKlxuLSAqIENhbGN1bGF0ZSB0aGUgYWxsb2NhdGlvbiBzaXplIGZvciBzbGFib2JqX2V4dCBhcnJheS5cbiYjNDM7ICogU2l6ZSBvZiB0aGUgc2xhYm9ial9leHQgYXJyYXkgZm9yIEBzbGFiLlxuICAqXG4tICogV2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZW5hYmxlZCwgdGhlIG9ial9leHRzIGFycmF5XG4tICogY291bGQgYmUgYWxsb2NhdGVkIGZyb20gdGhlIHNhbWUgc2xhYiBjYWNoZSBpdCYjMzk7cyBiZWluZyBhbGxvY2F0ZWQgZm9yLlxuLSAqIFRoaXMgd291bGQgcHJldmVudCB0aGUgc2xhYiBmcm9tIGV2ZXIgYmVpbmcgZnJlZWQgYmVjYXVzZSBpdCB3b3VsZFxuLSAqIGFsd2F5cyBjb250YWluIGF0IGxlYXN0IG9uZSBhbGxvY2F0ZWQgb2JqZWN0IChpdHMgb3duIG9ial9leHRzIGFycmF5KS5cbi0gKlxuLSAqIFRvIGF2b2lkIHRoaXMsIGluY3JlYXNlIHRoZSBhbGxvY2F0aW9uIHNpemUgd2hlbiB3ZSBkZXRlY3QgdGhlIGFycmF5XG4tICogbWF5IGNvbWUgZnJvbSB0aGUgc2FtZSBjYWNoZSwgZm9yY2luZyBpdCB0byB1c2UgYSBkaWZmZXJlbnQgY2FjaGUuXG4mIzQzOyAqIFRoZSBhcnJheSBpcyBpdHNlbGYga21hbGxvYygpJiMzOTtkLiBJZiBpdCBjYW1lIGZyb20gdGhlIHNhbWUgb3IgYSBzbWFsbGVyXG4mIzQzOyAqIGttYWxsb2MgY2FjaGUgdGhhbiBAcywgdGhlIFwmIzM0O3NsYWIgaG9sZHMgYW5vdGhlciBzbGFiJiMzOTtzIGFycmF5XCYjMzQ7IHJlbGF0aW9uIGNvdWxkXG4mIzQzOyAqIGZvcm0gYSBjeWNsZSAoc2VsZiwgb3IgZS5nLiBrbWFsbG9jLTUxMiBcdTAwM2MtXHUwMDNlIGttYWxsb2MtMWspIHRoYXQgcGlucyB0aGUgc2xhYnNcbiYjNDM7ICogZm9yZXZlciBhbmQgcmVjdXJzZXMgdmlhIGZyZWVfc2xhYl9vYmpfZXh0cygpIC1cdTAwM2Uga2ZyZWUoKSAtXHUwMDNlIGRpc2NhcmRfc2xhYigpXG4mIzQzOyAqIGF0IHRlYXJkb3duLiBGb3JjZSBpdCBpbnRvIGEgc3RyaWN0bHkgbGFyZ2VyIGNhY2hlIHRvIGtlZXAgdGhhdCByZWxhdGlvbiBhXG4mIzQzOyAqIERBRyAoYWN5Y2xpYykuXG4gICovXG4gc3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0XHRcdFx0IHN0cnVjdCBzbGFiICpzbGFiLCBnZnBfdCBnZnApXG5AQCAtMjE0MywxOCAmIzQzOzIxNDIsMTkgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdGlmIChzeiBcdTAwM2UgS01BTExPQ19NQVhfQ0FDSEVfU0laRSlcbiBcdFx0cmV0dXJuIHN6O1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogT25seSBidW1wIHRoZSBzaXplIHdoZW4gdGhlIG9iamVjdCAobm90IHRoZSBvYmpfZXh0cyBhcnJheSkgaXNcbiYjNDM7XHQgKiBhbGxvY2F0ZWQgZnJvbSBLTUFMTE9DX05PUk1BTCwgZWl0aGVyIGJ5IG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1xuJiM0MztcdCAqIG9yIG1lbWNnIG9uIFNMVUJfVElOWSB3aXRoIF9fR0ZQX1JFQ0xBSU1BQkxFfF9fR0ZQX0FDQ09VTlQuXG4mIzQzO1x0ICogT3RoZXJ3aXNlLCBvYmpfZXh0cyBhbGxvY2F0aW9ucyBjYW5ub3QgZm9ybSBhIGN5Y2xlIGJldHdlZW5cbiYjNDM7XHQgKiBrbWFsbG9jIGNhY2hlcy5cbiYjNDM7XHQgKi9cbiBcdGlmICghaXNfa21hbGxvY19ub3JtYWwocykpXG4gXHRcdHJldHVybiBzejtcbiBcbiBcdG9ial9leHRzX2NhY2hlID0ga21hbGxvY19zbGFiKHN6LCBOVUxMLCBnZnAsIF9fa21hbGxvY190b2tlbigwKSk7XG4tXHQvKlxuLVx0ICogV2UgY2FuJiMzOTt0IHNpbXBseSBjb21wYXJlIHMgd2l0aCBvYmpfZXh0c19jYWNoZSwgYmVjYXVzZSBwYXJ0aXRpb25lZCBrbWFsbG9jXG4tXHQgKiBjYWNoZXMgaGF2ZSBtdWx0aXBsZSBjYWNoZXMgcGVyIHNpemUsIHNlbGVjdGVkIGJ5IGNhbGxlciBhZGRyZXNzIG9yIHR5cGUuXG4tXHQgKiBTaW5jZSBjYWxsZXIgYWRkcmVzcyBvciB0eXBlIG1heSBkaWZmZXIgYmV0d2VlbiBrbWFsbG9jX3NsYWIoKSBhbmQgYWN0dWFsXG4tXHQgKiBhbGxvY2F0aW9uLCBidW1wIHNpemUgd2hlbiBzaXplcyBhcmUgZXF1YWwuXG4tXHQgKi9cbi1cdGlmIChzLVx1MDAzZW9iamVjdF9zaXplID09IG9ial9leHRzX2NhY2hlLVx1MDAzZW9iamVjdF9zaXplKVxuLVx0XHRyZXR1cm4gb2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUgJiM0MzsgMTtcbiYjNDM7XHRpZiAob2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUgXHUwMDNjPSBzLVx1MDAzZW9iamVjdF9zaXplKVxuJiM0MztcdFx0cmV0dXJuIHMtXHUwMDNlb2JqZWN0X3NpemUgJiM0MzsgMTtcbiBcbiBcdHJldHVybiBzejtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDM6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNpemUgY2FsY3VsYXRpb24gZm9yIHRoZSBzbGFib2JqX2V4dCBhcnJheSBpbiB0aGUgU0xVQiBhbGxvY2F0b3IgdG8gcHJldmVudCBhIGN5Y2xpYyBkZXBlbmRlbmN5IGJldHdlZW4ga21hbGxvYyBjYWNoZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgc2xhYiBleHRlbnNpb25zIGFyZSBhbGxvY2F0ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM5ZThmZjgwNDkzODUyMTFmZDQyZWRjMjYyNjM4YWY1ZjRhODIyYTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAwMzoxMToyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCA5ZWM3NzRkYzcwMDk2OS4uMGMzMGQ2ODk4MjBhMTEgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmMKQEAgLTIxMjQsMTUgJiM0MzsyMTI0LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpCiB9CiAKIC8qCi0gKiBDYWxjdWxhdGUgdGhlIGFsbG9jYXRpb24gc2l6ZSBmb3Igc2xhYm9ial9leHQgYXJyYXkuCiYjNDM7ICogU2l6ZSBvZiB0aGUgc2xhYm9ial9leHQgYXJyYXkgZm9yIEBzbGFiLgogICoKLSAqIFdoZW4gbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGVuYWJsZWQsIHRoZSBvYmpfZXh0cyBhcnJheQotICogY291bGQgYmUgYWxsb2NhdGVkIGZyb20gdGhlIHNhbWUgc2xhYiBjYWNoZSBpdCYjMzk7cyBiZWluZyBhbGxvY2F0ZWQgZm9yLgotICogVGhpcyB3b3VsZCBwcmV2ZW50IHRoZSBzbGFiIGZyb20gZXZlciBiZWluZyBmcmVlZCBiZWNhdXNlIGl0IHdvdWxkCi0gKiBhbHdheXMgY29udGFpbiBhdCBsZWFzdCBvbmUgYWxsb2NhdGVkIG9iamVjdCAoaXRzIG93biBvYmpfZXh0cyBhcnJheSkuCi0gKgotICogVG8gYXZvaWQgdGhpcywgaW5jcmVhc2UgdGhlIGFsbG9jYXRpb24gc2l6ZSB3aGVuIHdlIGRldGVjdCB0aGUgYXJyYXkKLSAqIG1heSBjb21lIGZyb20gdGhlIHNhbWUgY2FjaGUsIGZvcmNpbmcgaXQgdG8gdXNlIGEgZGlmZmVyZW50IGNhY2hlLgomIzQzOyAqIFRoZSBhcnJheSBpcyBpdHNlbGYga21hbGxvYygpJiMzOTtkLiBJZiBpdCBjYW1lIGZyb20gdGhlIHNhbWUgb3IgYSBzbWFsbGVyCiYjNDM7ICoga21hbGxvYyBjYWNoZSB0aGFuIEBzLCB0aGUgJiMzNDtzbGFiIGhvbGRzIGFub3RoZXIgc2xhYiYjMzk7cyBhcnJheSYjMzQ7IHJlbGF0aW9uIGNvdWxkCiYjNDM7ICogZm9ybSBhIGN5Y2xlIChzZWxmLCBvciBlLmcuIGttYWxsb2MtNTEyICZsdDstJmd0OyBrbWFsbG9jLTFrKSB0aGF0IHBpbnMgdGhlIHNsYWJzCiYjNDM7ICogZm9yZXZlciBhbmQgcmVjdXJzZXMgdmlhIGZyZWVfc2xhYl9vYmpfZXh0cygpIC0mZ3Q7IGtmcmVlKCkgLSZndDsgZGlzY2FyZF9zbGFiKCkKJiM0MzsgKiBhdCB0ZWFyZG93bi4gRm9yY2UgaXQgaW50byBhIHN0cmljdGx5IGxhcmdlciBjYWNoZSB0byBrZWVwIHRoYXQgcmVsYXRpb24gYQomIzQzOyAqIERBRyAoYWN5Y2xpYykuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCQkJCSBzdHJ1Y3Qgc2xhYiAqc2xhYiwgZ2ZwX3QgZ2ZwKQpAQCAtMjE0MywxOCAmIzQzOzIxNDIsMTkgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAlpZiAoc3ogJmd0OyBLTUFMTE9DX01BWF9DQUNIRV9TSVpFKQogCQlyZXR1cm4gc3o7CiAKJiM0MzsJLyoKJiM0MzsJICogT25seSBidW1wIHRoZSBzaXplIHdoZW4gdGhlIG9iamVjdCAobm90IHRoZSBvYmpfZXh0cyBhcnJheSkgaXMKJiM0MzsJICogYWxsb2NhdGVkIGZyb20gS01BTExPQ19OT1JNQUwsIGVpdGhlciBieSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcKJiM0MzsJICogb3IgbWVtY2cgb24gU0xVQl9USU5ZIHdpdGggX19HRlBfUkVDTEFJTUFCTEV8X19HRlBfQUNDT1VOVC4KJiM0MzsJICogT3RoZXJ3aXNlLCBvYmpfZXh0cyBhbGxvY2F0aW9ucyBjYW5ub3QgZm9ybSBhIGN5Y2xlIGJldHdlZW4KJiM0MzsJICoga21hbGxvYyBjYWNoZXMuCiYjNDM7CSAqLwogCWlmICghaXNfa21hbGxvY19ub3JtYWwocykpCiAJCXJldHVybiBzejsKIAogCW9ial9leHRzX2NhY2hlID0ga21hbGxvY19zbGFiKHN6LCBOVUxMLCBnZnAsIF9fa21hbGxvY190b2tlbigwKSk7Ci0JLyoKLQkgKiBXZSBjYW4mIzM5O3Qgc2ltcGx5IGNvbXBhcmUgcyB3aXRoIG9ial9leHRzX2NhY2hlLCBiZWNhdXNlIHBhcnRpdGlvbmVkIGttYWxsb2MKLQkgKiBjYWNoZXMgaGF2ZSBtdWx0aXBsZSBjYWNoZXMgcGVyIHNpemUsIHNlbGVjdGVkIGJ5IGNhbGxlciBhZGRyZXNzIG9yIHR5cGUuCi0JICogU2luY2UgY2FsbGVyIGFkZHJlc3Mgb3IgdHlwZSBtYXkgZGlmZmVyIGJldHdlZW4ga21hbGxvY19zbGFiKCkgYW5kIGFjdHVhbAotCSAqIGFsbG9jYXRpb24sIGJ1bXAgc2l6ZSB3aGVuIHNpemVzIGFyZSBlcXVhbC4KLQkgKi8KLQlpZiAocy0mZ3Q7b2JqZWN0X3NpemUgPT0gb2JqX2V4dHNfY2FjaGUtJmd0O29iamVjdF9zaXplKQotCQlyZXR1cm4gb2JqX2V4dHNfY2FjaGUtJmd0O29iamVjdF9zaXplICYjNDM7IDE7CiYjNDM7CWlmIChvYmpfZXh0c19jYWNoZS0mZ3Q7b2JqZWN0X3NpemUgJmx0Oz0gcy0mZ3Q7b2JqZWN0X3NpemUpCiYjNDM7CQlyZXR1cm4gcy0mZ3Q7b2JqZWN0X3NpemUgJiM0MzsgMTsKIAogCXJldHVybiBzejsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTTFVCIEFsbG9jYXRvciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgcG9raW5nIGFyb3VuZCBpbiBgbW0vc2x1Yi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgb2JqX2V4dHNfYWxsb2Nfc2l6ZWAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXkmIzM5O3JlIHR3ZWFraW5nIHRoZSBsb2dpYyBmb3IgY2FsY3VsYXRpbmcgdGhlIHNpemUgbmVlZGVkIHRvIGFsbG9jYXRlIHRoYXQgYHNsYWJvYmpfZXh0YCBhcnJheS4gVGhlIG9yaWdpbmFsIGNvZGUmIzM5O3MgY2hlY2ssIGJhc2VkIG9uIHdoZXRoZXIgdGhlIG9iamVjdCBzaXplcyBvZiB0aGUgdGFyZ2V0IHNsYWIgYW5kIHRoZSBgb2JqX2V4dHNfY2FjaGVgIGFyZSBlcXVhbCwgaXMgYmVpbmcgcmVwbGFjZWQuIE5vdyBpdCBpcyBhbiBpbmVxdWFsaXR5IGNoZWNrLgoKVGhlIG9sZCBjaGVjayBsb29rZWQgbGlrZSB0aGlzOiBgaWYgKHMtJmd0O29iamVjdF9zaXplID09IG9ial9leHRzX2NhY2hlLSZndDtvYmplY3Rfc2l6ZSkgcmV0dXJuIG9ial9leHRzX2NhY2hlLSZndDtvYmplY3Rfc2l6ZSAmIzQzOyAxO2AKTm93LCBpdCYjMzk7czogYGlmIChvYmpfZXh0c19jYWNoZS0mZ3Q7b2JqZWN0X3NpemUgJmx0Oz0gcy0mZ3Q7b2JqZWN0X3NpemUpIHJldHVybiBzLSZndDtvYmplY3Rfc2l6ZSAmIzQzOyAxO2AKClRoaXMgZmVlbHMgbGlrZSBhIHByZXR0eSBjcml0aWNhbCBjaGFuZ2UgYXQgdGhlIGhlYXJ0IG9mIHRoZSBTTFVCIGFsbG9jYXRvci4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBkZXNpZ25lZCB0byBicmVhayBhIHNsYWIgZGVwZW5kZW5jeSBjeWNsZSBieSBlbnN1cmluZyB0aGF0IHRoZSBgc2xhYm9ial9leHRgIGFycmF5IGlzIGFsd2F5cyBhbGxvY2F0ZWQgZnJvbSBhIHN0cmljdGx5IGxhcmdlciBjYWNoZS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYXJlYSBmb3IgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzLCB3aGljaCBtZWFucyBpdCBuZWVkcyBzb21lIHNlcmlvdXMgZnV6emluZy4gCgpUaW1lIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgaW52b2x2ZWQgYW5kIGZvY3VzIGluIG9uIHRob3NlIHN5bWJvbHMuIExldCYjMzk7cyBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGBvYmpfZXh0c19hbGxvY19zaXplYCB3aXRoaW4gYG1tL3NsdWIuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyB1c2VkIGFuZCB3aGVyZSBpdOKAmXMgY2FsbGVkIGZyb20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqX2V4dHNfYWxsb2Nfc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjEyMT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMTM1LSAqL1xubW0vc2x1Yi5jOjIxMzY6c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMTM3LVx0XHRcdFx0XHQgc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcClcbi0tXG5tbS9zbHViLmM9MjE2Mj1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTIxNzctXG5tbS9zbHViLmM6MjE3ODpcdHN6ID0gb2JqX2V4dHNfYWxsb2Nfc2l6ZShzLCBzbGFiLCBnZnApO1xubW0vc2x1Yi5jLTIxNzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIGNvZGU6CgoqKlRyYWNpbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIEZsb3cqKgoKUmlnaHQsIHNvIGBvYmpfZXh0c19hbGxvY19zaXplYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyB1bHRpbWF0ZWx5IGRldGVybWluaW5nIGhvdyBtdWNoIG1lbW9yeSB0byBhbGxvY2F0ZSwgYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AuIE15IG5leHQgdGhvdWdodCBpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBUbyByZWFsbHkgZ2V0IGEgZ3Jhc3Agb24gaG93IHRoaXMgYWxsb2NhdGlvbiB3b3JrcywgSSBuZWVkIHRvIHRyYWNlICp3aGVyZSogYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGl0c2VsZiBpcyBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgdXB3YXJkcyB3aWxsIHByb3ZpZGUgY3JpdGljYWwgY29udGV4dDsgaXQgd2lsbCBlbHVjaWRhdGUgdGhlICp3aHkqIG9mIHRoaXMgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGluaXRpYXRpbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0yMTM2PXN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTIxNjEtXG5tbS9zbHViLmM6MjE2MjppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjE2My1cdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjIzNj1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG4tLVxubW0vc2x1Yi5jLTIyNzUtICovXG5tbS9zbHViLmM6MjI3NjpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbm1tL3NsdWIuYy0yMjc3LXtcbi0tXG5tbS9zbHViLmM9MjMyNz1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMzMwLVxubW0vc2x1Yi5jOjIzMzE6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMzMyLVx0XHRcdCAgICAgICBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjMzNz1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG4tLVxubW0vc2x1Yi5jLTIzNDAtXG5tbS9zbHViLmM6MjM0MTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMzQyLVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmM9MjM1MT1wcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2x1Yi5jLTIzNTQtXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXHUwMDI2XHUwMDI2XG5tbS9zbHViLmM6MjM1NTpcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHtcbm1tL3NsdWIuYy0yMzU2LVx0XHRwcl93YXJuX29uY2UoXCYjMzQ7JXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXG5cJiMzNDssXG4tLVxubW0vc2x1Yi5jPTMzNTg9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFjY291bnRfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgaW50IG9yZGVyLFxuLS1cbm1tL3NsdWIuYy0zMzY0LVx0XHRcdCFzbGFiX29ial9leHRzKHNsYWIpKVxubW0vc2x1Yi5jOjMzNjU6XHRcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxubW0vc2x1Yi5jLTMzNjYtXHRcdFx0XHQgICAgYWxsb2NfZmxhZ3MgfCBTTEFCX0FMTE9DX05FV19TTEFCKTtcbi0tXG5tbS9zbHViLmM9MzM4Nz1zdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zNDM3LVx0ICovXG5tbS9zbHViLmM6MzQzODpcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XG5tbS9zbHViLmMtMzQzOS1cdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI4NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbToKCioqRGVsdmluZyBpbnRvIFNsYWIgT2JqZWN0IEV4dGVuc2lvbiBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgc2xhYiBvYmplY3QgZXh0ZW5zaW9ucyBhcmUgYWxsb2NhdGVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBJIHNlZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQgYnkgYm90aCBgcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2tgIGFuZCBgYWNjb3VudF9zbGFiYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIGBhbGxvY19zbGFiX29ial9leHRzYCB0byBiZSBhY3R1YWxseSAqZGVmaW5lZCogYW5kLCBjcml0aWNhbGx5LCAqdXRpbGl6ZWQqIHdpdGhpbiB0aGUgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGF0IHBsYXkgaGVyZS4gVGhpcyBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcsIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBvciBpZiBJJiMzOTttIGNvbnNpZGVyaW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHNsYWIgYWxsb2NhdG9yLiBLbm93aW5nICp3aGVuKiB0aGlzIGZ1bmN0aW9uIGlzIGFjdGl2ZSB3aWxsIGxlYWQgbWUgdG8gdGhlIHJlYXNvbnMgd2h5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM1Mzc9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzU4Ni1cdFx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpIFx1MDAyNlx1MDAyNlxubW0vbWVtY29udHJvbC5jOjM1ODc6XHRcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBzbGFiX2FsbG9jX2ZsYWdzKSkge1xubW0vbWVtY29udHJvbC5jLTM1ODgtXHRcdFx0Y29udGludWU7XG4tLVxubW0vc2xhYi5oLTIyLSNkZWZpbmUgU0xBQl9BTExPQ19OT0xPQ0tcdDB4MDEgLyogYSBrbWFsbG9jX25vbG9jaygpIGFsbG9jYXRpb24gKi9cbm1tL3NsYWIuaDoyMzojZGVmaW5lIFNMQUJfQUxMT0NfTkVXX1NMQUJcdDB4MDIgLyogYSBmbGFnIGZvciBhbGxvY19zbGFiX29ial9leHRzKCkgKi9cbm1tL3NsYWIuaC0yNC0jZGVmaW5lIFNMQUJfQUxMT0NfTk9fUkVDVVJTRVx0MHgwNCAvKiBwcmV2ZW50IGttYWxsb2MoKSByZWN1cnNpb24gKi9cbi0tXG5tbS9zbGFiLmg9NjE2PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpzbGFiX29ial9leHQoc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2xhYi5oLTYyOC1cbm1tL3NsYWIuaDo2Mjk6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2xhYi5oLTYzMC1cdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XG4tLVxubW0vc2x1Yi5jPTIxMzY9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMjE2MS1cbm1tL3NsdWIuYzoyMTYyOmludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMTYzLVx0XHRcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL3NsdWIuYz0yMjM2PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3Bpbilcbi0tXG5tbS9zbHViLmMtMjI3NS0gKi9cbm1tL3NsdWIuYzoyMjc2OnN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxubW0vc2x1Yi5jLTIyNzcte1xuLS1cbm1tL3NsdWIuYz0yMzI3PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTIzMzAtXG5tbS9zbHViLmM6MjMzMTpzdGF0aWMgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIzMzItXHRcdFx0ICAgICAgIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL3NsdWIuYz0yMzM3PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3Bpbilcbi0tXG5tbS9zbHViLmMtMjM0MC1cbm1tL3NsdWIuYzoyMzQxOnN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIzNDItXHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYz0yMzUxPXByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtMjM1NC1cdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSBcdTAwMjZcdTAwMjZcbm1tL3NsdWIuYzoyMzU1Olx0ICAgIGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKSkge1xubW0vc2x1Yi5jLTIzNTYtXHRcdHByX3dhcm5fb25jZShcJiMzNDslcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcblwmIzM0Oyxcbi0tXG5tbS9zbHViLmM9MzM1OD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCBpbnQgb3JkZXIsXG4tLVxubW0vc2x1Yi5jLTMzNjQtXHRcdFx0IXNsYWJfb2JqX2V4dHMoc2xhYikpXG5tbS9zbHViLmM6MzM2NTpcdFx0YWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBnZnAsXG5tbS9zbHViLmMtMzM2Ni1cdFx0XHRcdCAgICBhbGxvY19mbGFncyB8IFNMQUJfQUxMT0NfTkVXX1NMQUIpO1xuLS1cbm1tL3NsdWIuYz0zMzg3PXN0YXRpYyBzdHJ1Y3Qgc2xhYiAqYWxsb2NhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTM0MzctXHQgKi9cbm1tL3NsdWIuYzozNDM4Olx0YWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzLCBzbGFiKTtcbm1tL3NsdWIuYy0zNDM5LVx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzMxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYSBoaWdoIGxldmVsIG9mIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gYG1tL3NsdWIuY2AgYW5kIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgZGlyZWN0aW5nIG1lIHRvIGEgc3BlY2lmaWMgYXJlYSBvZiB0aGUga2VybmVsIHNvdXJjZTogYG1tL3NsdWIuY2AgYXJvdW5kIGxpbmUgMjE2Mi4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7QWgsIHByb2JhYmx5IHJlbGF0ZWQgdG8gc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3IgY29uZmlndXJhdGlvbi1kZXBlbmRlbnQgYmVoYXZpb3Igd2l0aGluIHRoZSBTTFVCIGFsbG9jYXRvci4mIzM0OyBNeSBmb2N1cyBpbW1lZGlhdGVseSB6b29tcyBpbiBvbiB0aGF0IGxpbmUsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB0aGUgYCNpZmRlZmAgZGlyZWN0aXZlcyBzdXJyb3VuZGluZyBpdC4gVGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgcGFydCBsaWVzLCBsaWtlbHkgZGVhbGluZyB3aXRoIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIGFudGljaXBhdGUgdGhpcyBpcyB3aGVyZSB0aGUgY29kZSBicmFuY2hlcywgaGFuZGxpbmcgbWVtb3J5IGFsbG9jYXRpb24gZGlmZmVyZW50bHkgYmFzZWQgb24gdGhlIGRlZmluZWQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIEkmIzM5O20ga2VlbiB0byBzZWUgd2hhdCBzcGVjaWZpYyBmZWF0dXJlcyBvciBvcHRpbWl6YXRpb25zIGFyZSBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkIGF0IHRoYXQgbG9jYXRpb24uIFRoaXMgaXMgb2Z0ZW4gd2hlcmUgeW91IGZpbmQgdGhlIG51YW5jZXMgdGhhdCBhZmZlY3QgcGVyZm9ybWFuY2Ugb3IgZmVhdHVyZSBhdmFpbGFiaWxpdHkgb24gZGlmZmVyZW50IGhhcmR3YXJlLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hhdCBhbHdheXMgY29tZXMgdXAgaW4gcmVhbC13b3JsZCBrZXJuZWwgZGVidWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMDA6XHRcdCAqIElmIHZlY3RvciBwcmV2aW91c2x5IGZhaWxlZCB0byBhbGxvY2F0ZSB0aGVuIHdlIGhhdmUgbGl2ZVxuMjEwMTpcdFx0ICogb2JqZWN0cyB3aXRoIG5vIHRhZyByZWZlcmVuY2UuIE1hcmsgYWxsIHJlZmVyZW5jZXMgaW4gdGhpc1xuMjEwMjpcdFx0ICogdmVjdG9yIGFzIGVtcHR5IHRvIGF2b2lkIHdhcm5pbmdzIGxhdGVyIG9uLlxuMjEwMzpcdFx0ICovXG4yMTA0Olx0XHRpZiAob2JqX2V4dHMgPT0gT0JKRVhUU19BTExPQ19GQUlMKSB7XG4yMTA1Olx0XHRcdHVuc2lnbmVkIGludCBpO1xuMjEwNjpcdFxuMjEwNzpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmplY3RzOyBpJiM0MzsmIzQzOylcbjIxMDg6XHRcdFx0XHRzZXRfY29kZXRhZ19lbXB0eShcdTAwMjZ2ZWNbaV0ucmVmKTtcbjIxMDk6XHRcdH1cbjIxMTA6XHR9XG4yMTExOlx0XG4yMTEyOlx0I2Vsc2UgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cbjIxMTM6XHRcbjIxMTQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopIHt9XG4yMTE1Olx0c3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpIHsgcmV0dXJuIGZhbHNlOyB9XG4yMTE2Olx0c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuMjExNzpcdFx0XHRcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cykge31cbjIxMTg6XHRcbjIxMTk6XHQjZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cbjIxMjA6XHRcbjIxMjE6XHRzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuMjEyMjpcdHtcbjIxMjM6XHRcdHNsYWItXHUwMDNlb2JqX2V4dHMgPSAwO1xuMjEyNDpcdH1cbjIxMjU6XHRcbjIxMjY6XHQvKlxuMjEyNzpcdCAqIFNpemUgb2YgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGZvciBAc2xhYi5cbjIxMjg6XHQgKlxuMjEyOTpcdCAqIFRoZSBhcnJheSBpcyBpdHNlbGYga21hbGxvYygpJiMzOTtkLiBJZiBpdCBjYW1lIGZyb20gdGhlIHNhbWUgb3IgYSBzbWFsbGVyXG4yMTMwOlx0ICoga21hbGxvYyBjYWNoZSB0aGFuIEBzLCB0aGUgXCYjMzQ7c2xhYiBob2xkcyBhbm90aGVyIHNsYWImIzM5O3MgYXJyYXlcJiMzNDsgcmVsYXRpb24gY291bGRcbjIxMzE6XHQgKiBmb3JtIGEgY3ljbGUgKHNlbGYsIG9yIGUuZy4ga21hbGxvYy01MTIgXHUwMDNjLVx1MDAzZSBrbWFsbG9jLTFrKSB0aGF0IHBpbnMgdGhlIHNsYWJzXG4yMTMyOlx0ICogZm9yZXZlciBhbmQgcmVjdXJzZXMgdmlhIGZyZWVfc2xhYl9vYmpfZXh0cygpIC1cdTAwM2Uga2ZyZWUoKSAtXHUwMDNlIGRpc2NhcmRfc2xhYigpXG4yMTMzOlx0ICogYXQgdGVhcmRvd24uIEZvcmNlIGl0IGludG8gYSBzdHJpY3RseSBsYXJnZXIgY2FjaGUgdG8ga2VlcCB0aGF0IHJlbGF0aW9uIGFcbjIxMzQ6XHQgKiBEQUcgKGFjeWNsaWMpLlxuMjEzNTpcdCAqL1xuMjEzNjpcdHN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4yMTM3Olx0XHRcdFx0XHRcdCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgZ2ZwX3QgZ2ZwKVxuMjEzODpcdHtcbjIxMzk6XHRcdHNpemVfdCBzeiA9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc2xhYi1cdTAwM2VvYmplY3RzO1xuMjE0MDpcdFx0c3RydWN0IGttZW1fY2FjaGUgKm9ial9leHRzX2NhY2hlO1xuMjE0MTpcdFxuMjE0MjpcdFx0aWYgKHN6IFx1MDAzZSBLTUFMTE9DX01BWF9DQUNIRV9TSVpFKVxuMjE0MzpcdFx0XHRyZXR1cm4gc3o7XG4yMTQ0Olx0XG4yMTQ1Olx0XHQvKlxuMjE0NjpcdFx0ICogT25seSBidW1wIHRoZSBzaXplIHdoZW4gdGhlIG9iamVjdCAobm90IHRoZSBvYmpfZXh0cyBhcnJheSkgaXNcbjIxNDc6XHRcdCAqIGFsbG9jYXRlZCBmcm9tIEtNQUxMT0NfTk9STUFMLCBlaXRoZXIgYnkgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXG4yMTQ4Olx0XHQgKiBvciBtZW1jZyBvbiBTTFVCX1RJTlkgd2l0aCBfX0dGUF9SRUNMQUlNQUJMRXxfX0dGUF9BQ0NPVU5ULlxuMjE0OTpcdFx0ICogT3RoZXJ3aXNlLCBvYmpfZXh0cyBhbGxvY2F0aW9ucyBjYW5ub3QgZm9ybSBhIGN5Y2xlIGJldHdlZW5cbjIxNTA6XHRcdCAqIGttYWxsb2MgY2FjaGVzLlxuMjE1MTpcdFx0ICovXG4yMTUyOlx0XHRpZiAoIWlzX2ttYWxsb2Nfbm9ybWFsKHMpKVxuMjE1MzpcdFx0XHRyZXR1cm4gc3o7XG4yMTU0Olx0XG4yMTU1Olx0XHRvYmpfZXh0c19jYWNoZSA9IGttYWxsb2Nfc2xhYihzeiwgTlVMTCwgZ2ZwLCBfX2ttYWxsb2NfdG9rZW4oMCkpO1xuMjE1NjpcdFx0aWYgKG9ial9leHRzX2NhY2hlLVx1MDAzZW9iamVjdF9zaXplIFx1MDAzYz0gcy1cdTAwM2VvYmplY3Rfc2l6ZSlcbjIxNTc6XHRcdFx0cmV0dXJuIHMtXHUwMDNlb2JqZWN0X3NpemUgJiM0MzsgMTtcbjIxNTg6XHRcbjIxNTk6XHRcdHJldHVybiBzejtcbjIxNjA6XHR9XG4yMTYxOlx0XG4yMTYyOlx0aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuMjE2MzpcdFx0XHRcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuMjE2NDpcdHtcbjIxNjU6XHRcdGNvbnN0IGJvb2wgYWxsb3dfc3BpbiA9IGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGFsbG9jX2ZsYWdzKTtcbjIxNjY6XHRcdHVuc2lnbmVkIGludCBvYmplY3RzID0gb2Jqc19wZXJfc2xhYihzLCBzbGFiKTtcbjIxNjc6XHRcdGJvb2wgbmV3X3NsYWIgPSBhbGxvY19mbGFncyBcdTAwMjYgU0xBQl9BTExPQ19ORVdfU0xBQjtcbjIxNjg6XHRcdHVuc2lnbmVkIGxvbmcgbmV3X2V4dHM7XG4yMTY5Olx0XHR1bnNpZ25lZCBsb25nIG9sZF9leHRzO1xuMjE3MDpcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICp2ZWM7XG4yMTcxOlx0XHRzaXplX3Qgc3o7XG4yMTcyOlx0XG4yMTczOlx0XHRnZnAgXHUwMDI2PSB+T0JKQ0dTX0NMRUFSX01BU0s7XG4yMTc0Olx0XHQvKiBQcmV2ZW50IHJlY3Vyc2l2ZSBleHRlbnNpb24gdmVjdG9yIGFsbG9jYXRpb24gKi9cbjIxNzU6XHRcdGFsbG9jX2ZsYWdzIHw9IFNMQUJfQUxMT0NfTk9fUkVDVVJTRTtcbjIxNzY6XHRcdGFsbG9jX2ZsYWdzIFx1MDAyNj0gflNMQUJfQUxMT0NfTkVXX1NMQUI7XG4yMTc3Olx0XG4yMTc4Olx0XHRzeiA9IG9ial9leHRzX2FsbG9jX3NpemUocywgc2xhYiwgZ2ZwKTtcbjIxNzk6XHRcbjIxODA6XHRcdC8qIFRoaXMgd2lsbCB1c2Uga21hbGxvY19ub2xvY2soKSBpZiBhbGxvY19mbGFncyBzYXkgc28gKi9cbjIxODE6XHRcdHZlYyA9IGttYWxsb2NfZmxhZ3Moc3osIGdmcCB8IF9fR0ZQX1pFUk8sIGFsbG9jX2ZsYWdzLCBzbGFiX25pZChzbGFiKSk7XG4yMTgyOlx0XG4yMTgzOlx0XHRpZiAoIXZlYykge1xuMjE4NDpcdFx0XHQvKlxuMjE4NTpcdFx0XHQgKiBUcnkgdG8gbWFyayB2ZWN0b3JzIHdoaWNoIGZhaWxlZCB0byBhbGxvY2F0ZS5cbjIxODY6XHRcdFx0ICogSWYgdGhpcyBvcGVyYXRpb24gZmFpbHMsIHRoZXJlIG1heSBiZSBhIHJhY2luZyBwcm9jZXNzXG4yMTg3Olx0XHRcdCAqIHRoYXQgaGFzIGFscmVhZHkgY29tcGxldGVkIHRoZSBhbGxvY2F0aW9uLlxuMjE4ODpcdFx0XHQgKi9cbjIxODk6XHRcdFx0aWYgKCFtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHNsYWIpIFx1MDAyNlx1MDAyNlxuMjE5MDpcdFx0XHQgICAgc2xhYl9vYmpfZXh0cyhzbGFiKSlcbjIxOTE6XHRcdFx0XHRyZXR1cm4gMDtcbjIxOTI6XHRcbjIxOTM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMTk0Olx0XHR9XG4yMTk1Olx0XG4yMTk2Olx0XHRWTV9XQVJOX09OX09OQ0UodmlydF90b19zbGFiKHZlYykgIT0gTlVMTCBcdTAwMjZcdTAwMjZcbjIxOTc6XHRcdFx0XHR2aXJ0X3RvX3NsYWIodmVjKS1cdTAwM2VzbGFiX2NhY2hlID09IHMpO1xuMjE5ODpcdFxuMjE5OTpcdFx0bmV3X2V4dHMgPSAodW5zaWduZWQgbG9uZyl2ZWM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NjEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkNoZWNraW5nIHRoZSAjaWZkZWYgYXJvdW5kIGFsbG9jX3NsYWJfb2JqX2V4dHMqKgoKUmlnaHQsIHNvIEkgc2VlIGEgYCNpZmRlZmAgc3Vycm91bmRpbmcgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCAqd2h5KiBpdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBUaGVyZSYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGEgZ29vZCByZWFzb24gZm9yIHRoaXMuIElzIGl0IGEgcGxhdGZvcm0tc3BlY2lmaWMgZmVhdHVyZT8gQSBidWlsZC10aW1lIG9wdGltaXphdGlvbiB0aGF0IG9ubHkgYXBwbGllcyB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM/IE9yIG1heWJlIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBmZWF0dXJlIGZsYWcgb3IgZXhwZXJpbWVudGFsIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgZGVmaW5lZCBvciBub3QgZGVmaW5lZC4KCkkmIzM5O20gcHJvYmFibHkgZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgZGVmaW5pdGlvbiBvZiB3aGF0ZXZlciBtYWNybyBpcyBiZWluZyBjaGVja2VkIGluIHRoZSBgI2lmZGVmYC4gVGhhdCB3aWxsIHRlbGwgbWUgdW5kZXIgd2hpY2ggY2lyY3Vtc3RhbmNlcyB0aGlzIGZ1bmN0aW9uIGdldHMgaW5jbHVkZWQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgY29kZSBwYXRocyBvbiBib3RoIHNpZGVzIG9mIHRoYXQgY29uZGl0aW9uYWwgYW5kIGNvbXBhcmUgdGhlbSwgdG8gc2VlIHdoYXQgZnVuY3Rpb25hbGl0eSBJJiMzOTttIGdldHRpbmcgb3IgbG9zaW5nIGRlcGVuZGluZyBvbiB0aGUgbWFjcm8mIzM5O3Mgc3RhdGUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLCBtZW1vcnkgdXNhZ2UsIGFuZCBwb3NzaWJseSBldmVuIHRoZSBvdmVyYWxsIGRlc2lnbiBvZiB0aGUgc2xhYiBhbGxvY2F0b3IuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIHBpZWNlIG9mIGNvZGUsIHdvcnRoIGEgdGhvcm91Z2ggbG9vay4gVGhlIGZhY3QgdGhhdCB0aGUgY29kZSBhdXRob3IgY2hvc2UgdG8gdXNlIGFuIGlmZGVmLCBpbnN0ZWFkIG9mIGp1c3QgYW4gaWYsIHN1Z2dlc3RzIHRoZXJlIGlzIGEgYmlnIGRpZmZlcmVuY2UgaW4gYm90aCBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2xhYi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsYWIuaC0yMi0jZGVmaW5lIFNMQUJfQUxMT0NfTk9MT0NLXHQweDAxIC8qIGEga21hbGxvY19ub2xvY2soKSBhbGxvY2F0aW9uICovXG5tbS9zbGFiLmg6MjM6I2RlZmluZSBTTEFCX0FMTE9DX05FV19TTEFCXHQweDAyIC8qIGEgZmxhZyBmb3IgYWxsb2Nfc2xhYl9vYmpfZXh0cygpICovXG5tbS9zbGFiLmgtMjQtI2RlZmluZSBTTEFCX0FMTE9DX05PX1JFQ1VSU0VcdDB4MDQgLyogcHJldmVudCBrbWFsbG9jKCkgcmVjdXJzaW9uICovXG4tLVxubW0vc2xhYi5oPTYxNj1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsYWIuaC02MjgtXG5tbS9zbGFiLmg6NjI5OmludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsYWIuaC02MzAtXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjA0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW0vc2xhYi5oYCoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbW0vc2xhYi5oYC4gU3BlY2lmaWNhbGx5LCBJIHRoaW5rIGxvb2tpbmcgYXJvdW5kIGxpbmUgNjI5IHdpbGwgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoaXMgbG9jYXRpb24gdXN1YWxseSBob3VzZXMgaW1wb3J0YW50IGRlZmluaXRpb25zIG9yIG1hY3JvcyB0aGF0IGFyZSBjcml0aWNhbCBmb3IgZ3Jhc3BpbmcgdGhlIGNvbmNlcHRzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvcmUgc3RydWN0dXJlcyBvciBmdW5jdGlvbnMgcmVsYXRlZCB0byBvYmplY3QgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gaW4gdGhlIHNsYWIgYWxsb2NhdG9yLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byB0cmFjZSBob3cgdGhlIG1lbW9yeSBpcyBiZWluZyBoYW5kbGVkLiBJJiMzOTttIGhvcGluZyB0aGlzIHdpbGwgaWxsdW1pbmF0ZSB3aGF0ZXZlciBwcm9ibGVtIEkmIzM5O20gdHJ5aW5nIHRvIHNvbHZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3NsYWIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKVxuIDYwMTpcdHtcbiA2MDI6XHRcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTtcbiA2MDM6XHR9XG4gNjA0Olx0I2VuZGlmXG4gNjA1Olx0XG4gNjA2Olx0LypcbiA2MDc6XHQgKiBzbGFiX29ial9leHQgLSBnZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHNsYWIgb2JqZWN0IGV4dGVuc2lvbiBtZXRhZGF0YVxuIDYwODpcdCAqIGFzc29jaWF0ZWQgd2l0aCBhbiBvYmplY3QgaW4gYSBzbGFiLlxuIDYwOTpcdCAqIEBzbGFiOiBhIHBvaW50ZXIgdG8gdGhlIHNsYWIgc3RydWN0XG4gNjEwOlx0ICogQG9ial9leHRzOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBleHRlbnNpb24gdmVjdG9yXG4gNjExOlx0ICogQGluZGV4OiBhbiBpbmRleCBvZiB0aGUgb2JqZWN0XG4gNjEyOlx0ICpcbiA2MTM6XHQgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgb2JqZWN0IGV4dGVuc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9iamVjdC5cbiA2MTQ6XHQgKiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gYSBzZWN0aW9uIGNvdmVyZWQgYnkgZ2V0L3B1dF9zbGFiX29ial9leHRzKCkuXG4gNjE1Olx0ICovXG4gNjE2Olx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKnNsYWJfb2JqX2V4dChzdHJ1Y3Qgc2xhYiAqc2xhYixcbiA2MTc6XHRcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4gNjE4Olx0XHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpXG4gNjE5Olx0e1xuIDYyMDpcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0O1xuIDYyMTpcdFxuIDYyMjpcdFx0Vk1fV0FSTl9PTl9PTkNFKG9ial9leHRzICE9IHNsYWJfb2JqX2V4dHMoc2xhYikpO1xuIDYyMzpcdFxuIDYyNDpcdFx0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgJiM0MztcbiA2MjU6XHRcdFx0XHRcdFx0IHNsYWJfZ2V0X3N0cmlkZShzbGFiKSAqIGluZGV4KTtcbiA2MjY6XHRcdHJldHVybiBrYXNhbl9yZXNldF90YWcob2JqX2V4dCk7XG4gNjI3Olx0fVxuIDYyODpcdFxuIDYyOTpcdGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiA2MzA6XHRcdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XG4gNjMxOlx0XG4gNjMyOlx0I2Vsc2UgLyogQ09ORklHX1NMQUJfT0JKX0VYVCAqL1xuIDYzMzpcdFxuIDYzNDpcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuIDYzNTpcdHtcbiA2MzY6XHRcdHJldHVybiAwO1xuIDYzNzpcdH1cbiA2Mzg6XHRcbiA2Mzk6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLFxuIDY0MDpcdFx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbiA2NDE6XHRcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBpbmRleClcbiA2NDI6XHR7XG4gNjQzOlx0XHRyZXR1cm4gTlVMTDtcbiA2NDQ6XHR9XG4gNjQ1Olx0XG4gNjQ2Olx0c3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSkgeyB9XG4gNjQ3Olx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKSB7IHJldHVybiAwOyB9XG4gNjQ4Olx0XG4gNjQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNTAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBDT05GSUdfU0xBQl9PQkpfRVhUYCBEZXBlbmRlbmN5KioKClJpZ2h0LCBzbyBJJiMzOTttIGhpdHRpbmcgYSBzbmFnIOKAkyBpdCBsb29rcyBsaWtlIGBDT05GSUdfU0xBQl9PQkpfRVhUYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHNvbWV0aGluZyBJJiMzOTttIHdvcmtpbmcgb24uIFRoZSBjb2RlJiMzOTtzIG1ha2luZyBpdCBwcmV0dHkgY2xlYXIgdGhhdCBJIGNhbiYjMzk7dCBtb3ZlIGZvcndhcmQgd2l0aG91dCB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBlbmFibGVkLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyBmaWd1cmluZyBvdXQgKndoYXQqIGV4YWN0bHkgZW5hYmxlcyBgQ09ORklHX1NMQUJfT0JKX0VYVGAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCB0cmFjaW5nIGRlcGVuZGVuY2llcywgYW5kIHNlZWluZyB3aGVyZSB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHNldCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gUHJvYmFibHkgc29tZXRoaW5nIGxpa2UgdGhpcyB3aWxsIGdldCBtZSBzdGFydGVkOiBgZmluZCAuIC1uYW1lICYjMzQ7S2NvbmZpZyYjMzQ7IC1wcmludDAgfCB4YXJncyAtMCBncmVwIC1IICYjMzQ7Q09ORklHX1NMQUJfT0JKX0VYVCYjMzQ7YC4gVGhlbiBJJiMzOTtsbCBzdGFydCBjaGVja2luZyB0aGUgY29udGV4dC4gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTEFCX09CSl9FWFQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwMzM9Y29uZmlnIE5VTUFfQkFMQU5DSU5HX0RFRkFVTFRfRU5BQkxFRFxuLS1cbmluaXQvS2NvbmZpZy0xMDQwLVxuaW5pdC9LY29uZmlnOjEwNDE6Y29uZmlnIFNMQUJfT0JKX0VYVFxuaW5pdC9LY29uZmlnLTEwNDItXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgd2hlcmUmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBbY29udGV4dCBpcyBtaXNzaW5nLCBidXQgaXQgd291bGQgaGF2ZSBiZWVuIGluc2VydGVkIGhlcmUsIGUuZy4sICYjMzQ7dGhlIG5ldyBmaWxlc3lzdGVtIGRyaXZlciBJJiMzOTttIHdvcmtpbmcgb24mIzM0O10/IE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgaGVhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBMZXQmIzM5O3Mgc2VlLi4uIEtjb25maWcgZmlsZXMgYXJlIHRoZSBzdGFuZGFyZC4gR2l2ZW4gdGhlIHR5cGljYWwgc3RydWN0dXJlLCBpdCYjMzk7cyBwcm9iYWJseSBiZXN0IHRvIHN0YXJ0IHdpdGggYGluaXQvS2NvbmZpZ2AuIEFuZCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDEwNDEuIEkmIzM5O20gYmV0dGluZyB0aGVyZSYjMzk7cyBhIHJlbGF0ZWQgc2VjdGlvbiB0aGVyZSwgb3IgYXQgbGVhc3QgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LiBJdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBiZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDMwOlx0XHQgIHJlc291cmNlcyB3aXRoaW4gdGhlIHNhbWUgY2FjaGUgZG9tYWluLCByZWR1Y2luZyBjYWNoZSBtaXNzZXMgYW5kXG4xMDMxOlx0XHQgIGxvd2VyaW5nIGRhdGEgYWNjZXNzIGxhdGVuY3kuXG4xMDMyOlx0XG4xMDMzOlx0Y29uZmlnIE5VTUFfQkFMQU5DSU5HX0RFRkFVTFRfRU5BQkxFRFxuMTAzNDpcdFx0Ym9vbCBcJiMzNDtBdXRvbWF0aWNhbGx5IGVuYWJsZSBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudFwmIzM0O1xuMTAzNTpcdFx0ZGVmYXVsdCB5XG4xMDM2Olx0XHRkZXBlbmRzIG9uIE5VTUFfQkFMQU5DSU5HXG4xMDM3Olx0XHRoZWxwXG4xMDM4Olx0XHQgIElmIHNldCwgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIHdpbGwgYmUgZW5hYmxlZCBpZiBydW5uaW5nIG9uIGEgTlVNQVxuMTAzOTpcdFx0ICBtYWNoaW5lLlxuMTA0MDpcdFxuMTA0MTpcdGNvbmZpZyBTTEFCX09CSl9FWFRcbjEwNDI6XHRcdGJvb2xcbjEwNDM6XHRcbjEwNDQ6XHRtZW51Y29uZmlnIENHUk9VUFNcbjEwNDU6XHRcdGJvb2wgXCYjMzQ7Q29udHJvbCBHcm91cCBzdXBwb3J0XCYjMzQ7XG4xMDQ2Olx0XHRzZWxlY3QgS0VSTkZTXG4xMDQ3Olx0XHRoZWxwXG4xMDQ4Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZ3JvdXBpbmcgc2V0cyBvZiBwcm9jZXNzZXMgdG9nZXRoZXIsIGZvclxuMTA0OTpcdFx0ICB1c2Ugd2l0aCBwcm9jZXNzIGNvbnRyb2wgc3Vic3lzdGVtcyBzdWNoIGFzIENwdXNldHMsIENGUywgbWVtb3J5XG4xMDUwOlx0XHQgIGNvbnRyb2xzIG9yIGRldmljZSBpc29sYXRpb24uXG4xMDUxOlx0XHQgIFNlZVxuMTA1MjpcdFx0XHQtIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRlc2lnbi1DRlMucnN0XHQoQ0ZTKVxuMTA1MzpcdFx0XHQtIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxLyAoZmVhdHVyZXMgZm9yIGdyb3VwaW5nLCBpc29sYXRpb25cbjEwNTQ6XHRcdFx0XHRcdFx0ICBhbmQgcmVzb3VyY2UgY29udHJvbClcbjEwNTU6XHRcbjEwNTY6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA1NzpcdFxuMTA1ODpcdGlmIENHUk9VUFNcbjEwNTk6XHRcbjEwNjA6XHRjb25maWcgUEFHRV9DT1VOVEVSXG4xMDYxOlx0XHRib29sXG4xMDYyOlx0XG4xMDYzOlx0Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4xMDY0Olx0XHRib29sIFwmIzM0O0Zhdm9yIGR5bmFtaWMgbW9kaWZpY2F0aW9uIGxhdGVuY3kgcmVkdWN0aW9uIGJ5IGRlZmF1bHRcJiMzNDtcbjEwNjU6XHRcdGhlbHBcbjEwNjY6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgXCYjMzQ7ZmF2b3JkeW5tb2RzXCYjMzQ7IG1vdW50IG9wdGlvbiBieSBkZWZhdWx0XG4xMDY3Olx0XHQgIHdoaWNoIHJlZHVjZXMgdGhlIGxhdGVuY2llcyBvZiBkeW5hbWljIGNncm91cCBtb2RpZmljYXRpb25zIHN1Y2hcbjEwNjg6XHRcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXG4xMDY5Olx0XHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXG4xMDcwOlx0XG4xMDcxOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwNzI6XHRcbjEwNzM6XHRjb25maWcgTUVNQ0dcbjEwNzQ6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwNzU6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwNzY6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDc3Olx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDc4Olx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwNzk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzOTEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgU0xBQl9PQkpfRVhUKioKCkFscmlnaHQsIHNvIGBTTEFCX09CSl9FWFRgIGlzIGJlaW5nIHB1bGxlZCBpbiBieSBgTUVNQ0dgLiBGaW5lLCB0aGF0JiMzOTtzIGEgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXM6IFdoYXQgKmVsc2UqIGlzIHNlbGVjdGluZyBgU0xBQl9PQkpfRVhUYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGRlcGVuZGVuY3kgdHJlZSwgZXNwZWNpYWxseSBpZiB0aGVyZSYjMzk7cyBhbnkgb3ZlcmxhcCBvciBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyBJJiMzOTttIGZhbWlsaWFyIHdpdGguIFVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZSB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIGlmIHRoaXMgdXNhZ2UgaXMgZXhwZWN0ZWQsIGVmZmljaWVudCwgb3IgaWYgaXQgbWlnaHQgaW1wYWN0IG90aGVyIGFyZWFzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBjb2RlIHRvIHNlZSB3aGVyZSBlbHNlIHRoaXMgaXMgYmVpbmcgdXNlZCBhbmQgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aG9zZSBjaG9pY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgU0xBQl9PQkpfRVhUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDczPWNvbmZpZyBNRU1DR1xuLS1cbmluaXQvS2NvbmZpZy0xMDc2LVx0c2VsZWN0IEVWRU5URkRcbmluaXQvS2NvbmZpZzoxMDc3Olx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuaW5pdC9LY29uZmlnLTEwNzgtXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbi0tXG5tbS9LY29uZmlnLmRlYnVnPTMyND1jb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xuLS1cbm1tL0tjb25maWcuZGVidWctMzMxLVx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXG5tbS9LY29uZmlnLmRlYnVnOjMzMjpcdHNlbGVjdCBTTEFCX09CSl9FWFRcbm1tL0tjb25maWcuZGVidWctMzMzLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc3MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBhbHNvIGltcGxpZXMgdGhlIHNlbGVjdGlvbiBvZiBgU0xBQl9PQkpfRVhUYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2Ug4oCTIHByb2ZpbGluZyBsaWtlbHkgbmVlZHMgdGhhdCBleHRyYSBvYmplY3QgbWV0YWRhdGEuIE5vdywgdGhpcyBtZWFucyB3ZSYjMzk7cmUgaW4gYSBzaXR1YXRpb24gd2hlcmUgd2UgbmVlZCBlaXRoZXIgYE1FTUNHYCAobWVtb3J5IGNvbnRyb2wgZ3JvdXBzKSBvciB0aGUgcHJvZmlsaW5nIG9wdGlvbiBpdHNlbGYgdG8gYmUgZW5hYmxlZC4gIEkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGltcG9ydGFudCBkZXBlbmRlbmN5IHRvIGtlZXAgaW4gbWluZCwgYmVjYXVzZSBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZXNlIGZlYXR1cmVzIGNvdWxkIHBvdGVudGlhbGx5IGluZmx1ZW5jZSBwZXJmb3JtYW5jZS4gTGV0IG1lIGp1c3QgdGFrZSBhIHF1aWNrIHBlZWsgYXQgYG1tL0tjb25maWcuZGVidWdgIGFuZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBvcHRpb25zIHdoaWxlIEkmIzM5O20gYXQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0XHQgIG92ZXJoZWFkIGluIHRoZSBwYWdlIGZhdWx0IHBhdGguXG4gMzIxOlx0XG4gMzIyOlx0XHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cbiAzMjM6XHRcbiAzMjQ6XHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xuIDMyNTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXCYjMzQ7XG4gMzI2Olx0XHRkZWZhdWx0IG5cbiAzMjc6XHRcdGRlcGVuZHMgb24gTU1VXG4gMzI4Olx0XHRkZXBlbmRzIG9uIFBST0NfRlNcbiAzMjk6XHRcdGRlcGVuZHMgb24gIURFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVVxuIDMzMDpcdFx0c2VsZWN0IENPREVfVEFHR0lOR1xuIDMzMTpcdFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXG4gMzMyOlx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4gMzMzOlx0XHRoZWxwXG4gMzM0Olx0XHQgIFRyYWNrIGFsbG9jYXRpb24gc291cmNlIGNvZGUgYW5kIHJlY29yZCB0b3RhbCBhbGxvY2F0aW9uIHNpemVcbiAzMzU6XHRcdCAgaW5pdGlhdGVkIGF0IHRoYXQgY29kZSBsb2NhdGlvbi4gVGhlIG1lY2hhbmlzbSBjYW4gYmUgdXNlZCB0byB0cmFja1xuIDMzNjpcdFx0ICBtZW1vcnkgbGVha3Mgd2l0aCBhIGxvdyBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IGltcGFjdC5cbiAzMzc6XHRcbiAzMzg6XHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcbiAzMzk6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XCYjMzQ7XG4gMzQwOlx0XHRkZWZhdWx0IHlcbiAzNDE6XHRcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xuIDM0MjpcdFxuIDM0MzpcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG4gMzQ0Olx0XHRib29sIFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1wmIzM0O1xuIDM0NTpcdFx0ZGVmYXVsdCBuXG4gMzQ2Olx0XHRkZXBlbmRzIG9uIE1FTV9BTExPQ19QUk9GSUxJTkdcbiAzNDc6XHRcdHNlbGVjdCBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxuIDM0ODpcdFx0aGVscFxuIDM0OTpcdFx0ICBBZGRzIHdhcm5pbmdzIHdpdGggaGVscGZ1bCBlcnJvciBtZXNzYWdlcyBmb3IgbWVtb3J5IGFsbG9jYXRpb25cbiAzNTA6XHRcdCAgcHJvZmlsaW5nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ2NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU2xhYiBBbGxvY2F0aW9uIGZvciBNZW1vcnkgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBzbGFiIGFsbG9jYXRvciBjb2RlLCBhbmQgcmlnaHQgb2ZmIHRoZSBiYXQsIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBhbmQgYE1FTUNHYCBzZWVtIGxpa2Ugc29saWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGVuYWJsZSBmb3IgdGhpcyBhbmFseXNpcy4gTm93LCB0cmFjaW5nIHRoZSBjYWxsIHN0YWNrLCBpdCBsb29rcyBsaWtlIGBvYmpfZXh0c19hbGxvY19zaXplYCBpcyBjYWxsZWQgYnkgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBUaGlzIGBhbGxvY19zbGFiX29ial9leHRzYCBmdW5jdGlvbiBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9va2AgYW5kIGBhY2NvdW50X3NsYWJgLiBUaGVuIGBhY2NvdW50X3NsYWJgIGlzIGNhbGxlZCBieSBgYWxsb2NhdGVfc2xhYmAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYF9fX3NsYWJfYWxsb2NgLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBgX19zbGFiX2FsbG9jYCwgdGhlbiBgc2xhYl9hbGxvY19ub2RlYCwgdWx0aW1hdGVseSBiZWluZyBjYWxsZWQgYnkgYGttZW1fY2FjaGVfYWxsb2NgIGFuZCBga21hbGxvY2AuCgpUaGF0IHdob2xlIGNoYWluIGxvb2tzIGxpa2UgYSBwcmV0dHkgaG90IHBhdGgsIHdoaWNoIG1lYW5zIGFueSBwZXJmb3JtYW5jZSBnYWlucyBoZXJlIGNvdWxkIGJlIHNpZ25pZmljYW50LiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBvbmx5IGNhbGxlZCB3aGVuIGBzbGFiX29ial9leHRzKHNsYWIpYCBpcyBmYWxzZS4gVGhhdCBoYXBwZW5zIHdoZW4gYSBuZXcgc2xhYiBpcyBhbGxvY2F0ZWQgb3Igd2hlbiBpdCYjMzk7cyBmaXJzdCBuZWVkZWQuIFNvIHRoaXMgaXMgbm90IGEgaG90IHBhdGgsIHRoaXMgaXMgYSBwYXRoIHRoYXQgb25seSBhZmZlY3RzIHBlcmZvcm1hbmNlIHRoZSBmaXJzdCB0aW1lIGEgc2xhYiBpcyBjcmVhdGVkLCBvciB3aGVuIHRoZSBmaXJzdCBzbGFiIGlzIGNyZWF0ZWQuCgpUaGUgcGF0Y2ggbm90ZXMgdGhhdCB0aGUgYXJyYXkgYmVpbmcgYWxsb2NhdGVkIGlzIGBrbWFsbG9jKClgJiMzOTtkLiBUaGUga2V5IGlzc3VlIGFwcGVhcnMgdG8gYmUgcG90ZW50aWFsIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBpZiB0aGUgYXJyYXkgY29tZXMgZnJvbSB0aGUgc2FtZSBvciBhIHNtYWxsZXIga21hbGxvYyBjYWNoZSB0aGFuIHRoZSBzbGFiIGl0c2VsZi4gVGhpcyBjYW4gbGVhZCB0byBwaW5uaW5nIHRoZSBzbGFicyBmb3JldmVyIGFuZCByZWN1cnNpb24gdmlhIGBmcmVlX3NsYWJfb2JqX2V4dHMoKWAsIGBrZnJlZSgpYCwgYW5kIHRoZW4gYGRpc2NhcmRfc2xhYigpYC4gVGhlIHNvbHV0aW9uIHN1Z2dlc3RlZCBpbiB0aGUgcGF0Y2ggaXMgdG8gZm9yY2UgdGhlIGFsbG9jYXRpb24gaW50byBhIHN0cmljdGx5IGxhcmdlciBjYWNoZSwgdG8gZW5zdXJlIHRoZSByZWxhdGlvbnNoaXAgc3RheXMgYWN5Y2xpYy4gTWFrZXMgc2Vuc2UgLSBwcmV2ZW50aW5nIHRoYXQgY2lyY3VsYXIgZGVwZW5kZW5jeSBpcyBjcml0aWNhbCBmb3IgY2xlYW51cCBhbmQgcHJldmVudGluZyBtZW1vcnkgbGVha3MuCgpHaXZlbiB0aGF0IGBvYmpfZXh0c19hbGxvY19zaXplYCBpcyBzdGF0aWMgaW5saW5lLCBteSBhdHRlbnRpb24gc2hvdWxkIHNoaWZ0IHRvIGBhbGxvY19zbGFiX29ial9leHRzYCBhcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBleHBvcnRlZCBvciBpZiBpdCBjYW4gYmUgZm9jdXNlZCBvbiBtb3JlIHNwZWNpZmljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjEzNj1zdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0yMTYxLVxubW0vc2x1Yi5jOjIxNjI6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIxNjMtXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIyMzY9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMjc1LSAqL1xubW0vc2x1Yi5jOjIyNzY6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG5tbS9zbHViLmMtMjI3Ny17XG4tLVxubW0vc2x1Yi5jPTIzMjc9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtMjMzMC1cbm1tL3NsdWIuYzoyMzMxOnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMzMi1cdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIzMzc9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMzQwLVxubW0vc2x1Yi5jOjIzNDE6c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjM0Mi1cdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jPTIzNTE9cHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0yMzU0LVx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpIFx1MDAyNlx1MDAyNlxubW0vc2x1Yi5jOjIzNTU6XHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XG5tbS9zbHViLmMtMjM1Ni1cdFx0cHJfd2Fybl9vbmNlKFwmIzM0OyVzLCAlczogRmFpbGVkIHRvIGNyZWF0ZSBzbGFiIGV4dGVuc2lvbiB2ZWN0b3IhXFxuXCYjMzQ7LFxuLS1cbm1tL3NsdWIuYz0zMzU4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcbi0tXG5tbS9zbHViLmMtMzM2NC1cdFx0XHQhc2xhYl9vYmpfZXh0cyhzbGFiKSlcbm1tL3NsdWIuYzozMzY1Olx0XHRhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGdmcCxcbm1tL3NsdWIuYy0zMzY2LVx0XHRcdFx0ICAgIGFsbG9jX2ZsYWdzIHwgU0xBQl9BTExPQ19ORVdfU0xBQik7XG4tLVxubW0vc2x1Yi5jPTMzODc9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMzQzNy1cdCAqL1xubW0vc2x1Yi5jOjM0Mzg6XHRhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHMsIHNsYWIpO1xubW0vc2x1Yi5jLTM0MzktXHRhY2NvdW50X3NsYWIoc2xhYiwgb29fb3JkZXIob28pLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgU2xhYiBPYmplY3QgRXh0ZW5zaW9ucyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBkZWZpbmVkICp0d2ljZSo/IFRoYXQmIzM5O3MgdW51c3VhbC4gTXkgZmlyc3QgdGhvdWdodCBpcyBhIHNpbXBsZSBtaXN0YWtlLCBtYXliZSBhIHJlZHVuZGFudCBkZWNsYXJhdGlvbi4gQnV0IHdhaXQuLi4gQWhhISBBZnRlciBhIGNsb3NlciBsb29rLCBpdCBzZWVtcyBvbmUgaXMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiwgYW5kIHRoZSBvdGhlciBpcyBhIGR1bW15IG9yIHN0dWIgZGVmaW5pdGlvbiB0byBiZSB1c2VkIHdoZW4gYENPTkZJR19TTEFCX09CSl9FWFRgIGlzIGRpc2FibGVkLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBwcmVwcm9jZXNzb3IgdHJpY2sgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBjb3JyZWN0IGV4ZWN1dGlvbiBwYXRoLiBMZXQgbWUgZ28gYmFjayB0byB3aGVyZSBpdCBpcyBkZWZpbmVkLCBsZXQgbWUgc2VlLi4uIEFoLCB0aGVyZSBpdCBpcyEgSW4gYG1tL3NsdWIuY2AsIGFyb3VuZCBsaW5lIDIxNjIsIEkgc2VlIHRoZSBgI2lmZGVmIENPTkZJR19TTEFCX09CSl9FWFRgIGNvbmRpdGlvbmFsLiBTbywgdGhlIGR1bW15IGRlZmluaXRpb24gbXVzdCBiZSBvdXRzaWRlIHRoYXQgYmxvY2suIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHdoYXQgdGhhdCBkdW1teSBmdW5jdGlvbiBkb2VzLCBsZXQgbWUgY2hlY2sgbGluZSAyMzMxLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjMyNTpcdH1cbjIzMjY6XHRcbjIzMjc6XHRzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuMjMyODpcdHtcbjIzMjk6XHR9XG4yMzMwOlx0XG4yMzMxOlx0c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbjIzMzI6XHRcdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4yMzMzOlx0e1xuMjMzNDpcdFx0cmV0dXJuIDA7XG4yMzM1Olx0fVxuMjMzNjpcdFxuMjMzNzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3BpbilcbjIzMzg6XHR7XG4yMzM5Olx0fVxuMjM0MDpcdFxuMjM0MTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuMjM0MjpcdFx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcbjIzNDM6XHR7XG4yMzQ0Olx0fVxuMjM0NTpcdFxuMjM0NjpcdCNlbmRpZiAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovXG4yMzQ3Olx0XG4yMzQ4Olx0I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4yMzQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIHRocm91Z2ggdGhpcyBjb2RlLCBhbmQgSSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgZnVuY3Rpb24uIFJpZ2h0LCBsaW5lIDIzMzEsIHRoYXQmIzM5O3MganVzdCBhIGR1bW15IGRlZmluaXRpb24uIFRoZSAqYWN0dWFsKiBkZWZpbml0aW9uIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBpcyBiYWNrIG9uIGxpbmUgMjE2Mi4gR29vZCwgZ290IHRoYXQuIE5vdywgSSBzZWUgdGhhdCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXNuJiMzOTt0IGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgaGFuZHkuIFRoYXQgbWVhbnMgSSBjYW4gcHJvYmFibHkgdHJhY2UgaXRzIHVzYWdlIHByZXR0eSBlZmZlY3RpdmVseS4gSG9sZCBvbi4uLiBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLiBJIHJlY2FsbCBzZWVpbmcgdGhpcyBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgbW0vbWVtY29udHJvbC5jYC4gWWVwLCBoZXJlIHdlIGdvLCBsaW5lIDM1MzcgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhhdCBjYWxsIHNpdGUgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM1MzA6XHRcdC8qXG4zNTMxOlx0XHQgKiBGb3IgZWFjaCBhY2NvdW50ZWQgb2JqZWN0IHRoZXJlIGlzIGFuIGV4dHJhIHNwYWNlIHdoaWNoIGlzIHVzZWRcbjM1MzI6XHRcdCAqIHRvIHN0b3JlIG9ial9jZ3JvdXAgbWVtYmVyc2hpcC4gQ2hhcmdlIGl0IHRvby5cbjM1MzM6XHRcdCAqL1xuMzUzNDpcdFx0cmV0dXJuIHMtXHUwMDNlc2l6ZSAmIzQzOyBzaXplb2Yoc3RydWN0IG9ial9jZ3JvdXAgKik7XG4zNTM1Olx0fVxuMzUzNjpcdFxuMzUzNzpcdGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4zNTM4Olx0XHRcdFx0XHQgIGdmcF90IGZsYWdzLCB1bnNpZ25lZCBpbnQgc2xhYl9hbGxvY19mbGFncyxcbjM1Mzk6XHRcdFx0XHRcdCAgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxuMzU0MDpcdHtcbjM1NDE6XHRcdHNpemVfdCBvYmpfc2l6ZSA9IG9ial9mdWxsX3NpemUocyk7XG4zNTQyOlx0XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4zNTQzOlx0XHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbjM1NDQ6XHRcdHVuc2lnbmVkIGxvbmcgb2ZmO1xuMzU0NTpcdFx0c2l6ZV90IGk7XG4zNTQ2Olx0XG4zNTQ3Olx0XHQvKlxuMzU0ODpcdFx0ICogVGhlIG9idGFpbmVkIG9iamNnIHBvaW50ZXIgaXMgc2FmZSB0byB1c2Ugd2l0aGluIHRoZSBjdXJyZW50IHNjb3BlLFxuMzU0OTpcdFx0ICogZGVmaW5lZCBieSBjdXJyZW50IHRhc2sgb3Igc2V0X2FjdGl2ZV9tZW1jZygpIHBhaXIuXG4zNTUwOlx0XHQgKiBvYmpfY2dyb3VwX2dldCgpIGlzIHVzZWQgdG8gZ2V0IGEgcGVybWFuZW50IHJlZmVyZW5jZS5cbjM1NTE6XHRcdCAqL1xuMzU1MjpcdFx0b2JqY2cgPSBjdXJyZW50X29ial9jZ3JvdXAoKTtcbjM1NTM6XHRcdGlmICghb2JqY2cgfHwgb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcbjM1NTQ6XHRcdFx0cmV0dXJuIHRydWU7XG4zNTU1Olx0XG4zNTU2Olx0XHQvKlxuMzU1NzpcdFx0ICogc2xhYl9hbGxvY19ub2RlKCkgYXZvaWRzIHRoZSBOVUxMIGNoZWNrLCBzbyB3ZSBtaWdodCBiZSBjYWxsZWQgd2l0aCBhXG4zNTU4Olx0XHQgKiBzaW5nbGUgTlVMTCBvYmplY3QuIGttZW1fY2FjaGVfYWxsb2NfYnVsaygpIGFib3J0cyBpZiBpdCBjYW4mIzM5O3QgZmlsbFxuMzU1OTpcdFx0ICogdGhlIHdob2xlIHJlcXVlc3RlZCBzaXplLlxuMzU2MDpcdFx0ICogcmV0dXJuIHN1Y2Nlc3MgYXMgdGhlcmUmIzM5O3Mgbm90aGluZyB0byBmcmVlIGJhY2tcbjM1NjE6XHRcdCAqL1xuMzU2MjpcdFx0aWYgKHVubGlrZWx5KCpwID09IE5VTEwpKVxuMzU2MzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjM1NjQ6XHRcbjM1NjU6XHRcdGZsYWdzIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbjM1NjY6XHRcbjM1Njc6XHRcdGlmIChscnUpIHtcbjM1Njg6XHRcdFx0aW50IHJldDtcbjM1Njk6XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuMzU3MDpcdFxuMzU3MTpcdFx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuMzU3MjpcdFx0XHRyZXQgPSBtZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgbHJ1LCBmbGFncyk7XG4zNTczOlx0XHRcdGNzc19wdXQoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKTtcbjM1NzQ6XHRcbjM1NzU6XHRcdFx0aWYgKHJldClcbjM1NzY6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4zNTc3Olx0XHR9XG4zNTc4Olx0XG4zNTc5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaXplOyBpJiM0MzsmIzQzOykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg4OAoJCQkJCQkJb3V0cHV0OiAxMDAKCQkJCQkJCXRob3VnaHRzOiA2NjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNMVUIgU2xhYiBFeHRlbnNpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUmIzM5O3MgbXkgYnJlYWtkb3duLiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlOyBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHNsYWIgYWxsb2NhdGlvbiBhbmQgYWxzbyB3aXRoaW4gdGhlIG1lbWNnIHBvc3QtYWxsb2MgaG9vaywgbWFraW5nIGl0IGEgY3JpdGljYWwgY29tcG9uZW50IG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgY2hhbmdlIG1vZGlmaWVzIGBvYmpfZXh0c19hbGxvY19zaXplYCwgd2hpY2ggaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgdGhlIGNhbGxpbmcgZnVuY3Rpb24sIGBhbGxvY19zbGFiX29ial9leHRzYCwgdGhhdCBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIEkgYnJpZWZseSBjb25zaWRlcmVkIGBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5YCwgYnV0IGxldCYjMzk7cyBzdGljayB3aXRoIHRoZSBtYWluIGZ1bmN0aW9uIGZvciBub3cuCgpJIGNvbmZpcm1lZCB0aGF0IGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBhIGdsb2JhbCBmdW5jdGlvbiBkZWZpbmVkIGluIGBtbS9zbHViLmNgIGFuZCBkZWNsYXJlZCBpbiBgbW0vc2xhYi5oYC4gSXQmIzM5O3Mgbm90IGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIHRvIGtlcm5lbCBtb2R1bGVzLCBidXQgc3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IHRhcmdldCBpdC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgdGVjaG5pY2FsbHkgdGFyZ2V0YWJsZSwgYnV0IHRhcmdldGluZyBhIGdsb2JhbCBmdW5jdGlvbiBpcyB1c3VhbGx5IGJldHRlciBmb3IgY2xhcml0eS4gU28sIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyB0aGUgdGFyZ2V0LiBUaGUgaW5saW5lIG5hdHVyZSBvZiBgb2JqX2V4dHNfYWxsb2Nfc2l6ZWAgbWVhbnMgaXQgd29uJiMzOTt0IGFwcGVhciBpbiB0aGUgc3ltYm9sIHRhYmxlLgoKTW92aW5nIG9uIHRvIHRoZSBjb25maWd1cmF0aW9uLCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYW5kIGBNRU1DR2Agc2VlbSByZWxldmFudCBzaW5jZSB0aGV5IGluZGlyZWN0bHkgc2VsZWN0IGBTTEFCX09CSl9FWFRgLiBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlbS4gQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBNRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBzdWZmaWNpZW50IHRvIGVuYWJsZSBgU0xBQl9PQkpfRVhUYCwgdGhvdWdoIGBNRU1DR2AgYWxzbyBkb2VzIGl0LCBzbyBsZXQmIzM5O3MgaW5jbHVkZSBib3RoIGZvciB0aG9yb3VnaG5lc3MuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBjb2RlIG1vZGlmaWVzIGhvdyB0aGUgYHNsYWJvYmpfZXh0YCBhcnJheSBzaXplIGlzIGNhbGN1bGF0ZWQsIHNwZWNpZmljYWxseSB0aGUgY2hlY2sgdGhhdCBkZXRlcm1pbmVzIGlmIHdlIG5lZWQgYW4gZXh0ZW5zaW9uLiBUaGlzIHJldmlzZWQgbG9naWMgcHJldmVudHMgYSBwb3RlbnRpYWwgY3ljbGljIGRlcGVuZGVuY3kgaXNzdWUgd2l0aGluIHRoZSBTTFVCIGFsbG9jYXRvci4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmc7IGl0IHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY291bGQgcmV2ZWFsIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMuCgpTbywgaW4gc3VtbWFyeSwgaGVyZSBhcmUgbXkgZGVjaXNpb25zOgoKKiAgICoqRm9jdXMgU3ltYm9sOioqIGBhbGxvY19zbGFiX29ial9leHRzYAoqICAgKipFbmFibGUgQ29uZmlnczoqKiBgTUVNX0FMTE9DX1BST0ZJTElOR2AsIGBNRU1DR2AKCkkmIzM5O20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkIGFuZCB1c2UgdGhlIHNldC1yZXN1bHRzIHRvb2wgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNpemUgY2FsY3VsYXRpb24gZm9yIHRoZSBzbGFib2JqX2V4dCBhcnJheSBpbiB0aGUgU0xVQiBhbGxvY2F0b3IgdG8gcHJldmVudCBhIGN5Y2xpYyBkZXBlbmRlbmN5IGJldHdlZW4ga21hbGxvYyBjYWNoZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgc2xhYiBleHRlbnNpb25zIGFyZSBhbGxvY2F0ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzaXplIGNhbGN1bGF0aW9uIGZvciB0aGUgc2xhYm9ial9leHQgYXJyYXkgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIHRvIHByZXZlbnQgYSBjeWNsaWMgZGVwZW5kZW5jeSBiZXR3ZWVuIGttYWxsb2MgY2FjaGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgaG93IHNsYWIgZXh0ZW5zaW9ucyBhcmUgYWxsb2NhdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6MzAuNTM2MTc4NDYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk0NzY2OTkzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNpemUgY2FsY3VsYXRpb24gZm9yIHRoZSBzbGFib2JqX2V4dCBhcnJheSBpbiB0aGUgU0xVQiBhbGxvY2F0b3IgdG8gcHJldmVudCBhIGN5Y2xpYyBkZXBlbmRlbmN5IGJldHdlZW4ga21hbGxvYyBjYWNoZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgc2xhYiBleHRlbnNpb25zIGFyZSBhbGxvY2F0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjExOjMwLjUzNjE4NjI4MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyMDIzMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzllOGZmODA0OTM4NTIxMWZkNDJlZGMyNjI2MzhhZjVmNGE4MjJhNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAzMCAwMzoxMToyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcXG5pbmRleCA5ZWM3NzRkYzcwMDk2OS4uMGMzMGQ2ODk4MjBhMTEgMTAwNjQ0XFxuLS0tIGEvbW0vc2x1Yi5jXFxuKysrIGIvbW0vc2x1Yi5jXFxuQEAgLTIxMjQsMTUgKzIxMjQsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gfVxcbiBcXG4gLypcXG4tICogQ2FsY3VsYXRlIHRoZSBhbGxvY2F0aW9uIHNpemUgZm9yIHNsYWJvYmpfZXh0IGFycmF5LlxcbisgKiBTaXplIG9mIHRoZSBzbGFib2JqX2V4dCBhcnJheSBmb3IgQHNsYWIuXFxuICAqXFxuLSAqIFdoZW4gbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGVuYWJsZWQsIHRoZSBvYmpfZXh0cyBhcnJheVxcbi0gKiBjb3VsZCBiZSBhbGxvY2F0ZWQgZnJvbSB0aGUgc2FtZSBzbGFiIGNhY2hlIGl0J3MgYmVpbmcgYWxsb2NhdGVkIGZvci5cXG4tICogVGhpcyB3b3VsZCBwcmV2ZW50IHRoZSBzbGFiIGZyb20gZXZlciBiZWluZyBmcmVlZCBiZWNhdXNlIGl0IHdvdWxkXFxuLSAqIGFsd2F5cyBjb250YWluIGF0IGxlYXN0IG9uZSBhbGxvY2F0ZWQgb2JqZWN0IChpdHMgb3duIG9ial9leHRzIGFycmF5KS5cXG4tICpcXG4tICogVG8gYXZvaWQgdGhpcywgaW5jcmVhc2UgdGhlIGFsbG9jYXRpb24gc2l6ZSB3aGVuIHdlIGRldGVjdCB0aGUgYXJyYXlcXG4tICogbWF5IGNvbWUgZnJvbSB0aGUgc2FtZSBjYWNoZSwgZm9yY2luZyBpdCB0byB1c2UgYSBkaWZmZXJlbnQgY2FjaGUuXFxuKyAqIFRoZSBhcnJheSBpcyBpdHNlbGYga21hbGxvYygpJ2QuIElmIGl0IGNhbWUgZnJvbSB0aGUgc2FtZSBvciBhIHNtYWxsZXJcXG4rICoga21hbGxvYyBjYWNoZSB0aGFuIEBzLCB0aGUgXFxcInNsYWIgaG9sZHMgYW5vdGhlciBzbGFiJ3MgYXJyYXlcXFwiIHJlbGF0aW9uIGNvdWxkXFxuKyAqIGZvcm0gYSBjeWNsZSAoc2VsZiwgb3IgZS5nLiBrbWFsbG9jLTUxMiBcXHUwMDNjLVxcdTAwM2Uga21hbGxvYy0xaykgdGhhdCBwaW5zIHRoZSBzbGFic1xcbisgKiBmb3JldmVyIGFuZCByZWN1cnNlcyB2aWEgZnJlZV9zbGFiX29ial9leHRzKCkgLVxcdTAwM2Uga2ZyZWUoKSAtXFx1MDAzZSBkaXNjYXJkX3NsYWIoKVxcbisgKiBhdCB0ZWFyZG93bi4gRm9yY2UgaXQgaW50byBhIHN0cmljdGx5IGxhcmdlciBjYWNoZSB0byBrZWVwIHRoYXQgcmVsYXRpb24gYVxcbisgKiBEQUcgKGFjeWNsaWMpLlxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4gXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzbGFiICpzbGFiLCBnZnBfdCBnZnApXFxuQEAgLTIxNDMsMTggKzIxNDIsMTkgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4gXFx0aWYgKHN6IFxcdTAwM2UgS01BTExPQ19NQVhfQ0FDSEVfU0laRSlcXG4gXFx0XFx0cmV0dXJuIHN6O1xcbiBcXG4rXFx0LypcXG4rXFx0ICogT25seSBidW1wIHRoZSBzaXplIHdoZW4gdGhlIG9iamVjdCAobm90IHRoZSBvYmpfZXh0cyBhcnJheSkgaXNcXG4rXFx0ICogYWxsb2NhdGVkIGZyb20gS01BTExPQ19OT1JNQUwsIGVpdGhlciBieSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcXG4rXFx0ICogb3IgbWVtY2cgb24gU0xVQl9USU5ZIHdpdGggX19HRlBfUkVDTEFJTUFCTEV8X19HRlBfQUNDT1VOVC5cXG4rXFx0ICogT3RoZXJ3aXNlLCBvYmpfZXh0cyBhbGxvY2F0aW9ucyBjYW5ub3QgZm9ybSBhIGN5Y2xlIGJldHdlZW5cXG4rXFx0ICoga21hbGxvYyBjYWNoZXMuXFxuK1xcdCAqL1xcbiBcXHRpZiAoIWlzX2ttYWxsb2Nfbm9ybWFsKHMpKVxcbiBcXHRcXHRyZXR1cm4gc3o7XFxuIFxcbiBcXHRvYmpfZXh0c19jYWNoZSA9IGttYWxsb2Nfc2xhYihzeiwgTlVMTCwgZ2ZwLCBfX2ttYWxsb2NfdG9rZW4oMCkpO1xcbi1cXHQvKlxcbi1cXHQgKiBXZSBjYW4ndCBzaW1wbHkgY29tcGFyZSBzIHdpdGggb2JqX2V4dHNfY2FjaGUsIGJlY2F1c2UgcGFydGl0aW9uZWQga21hbGxvY1xcbi1cXHQgKiBjYWNoZXMgaGF2ZSBtdWx0aXBsZSBjYWNoZXMgcGVyIHNpemUsIHNlbGVjdGVkIGJ5IGNhbGxlciBhZGRyZXNzIG9yIHR5cGUuXFxuLVxcdCAqIFNpbmNlIGNhbGxlciBhZGRyZXNzIG9yIHR5cGUgbWF5IGRpZmZlciBiZXR3ZWVuIGttYWxsb2Nfc2xhYigpIGFuZCBhY3R1YWxcXG4tXFx0ICogYWxsb2NhdGlvbiwgYnVtcCBzaXplIHdoZW4gc2l6ZXMgYXJlIGVxdWFsLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHMtXFx1MDAzZW9iamVjdF9zaXplID09IG9ial9leHRzX2NhY2hlLVxcdTAwM2VvYmplY3Rfc2l6ZSlcXG4tXFx0XFx0cmV0dXJuIG9ial9leHRzX2NhY2hlLVxcdTAwM2VvYmplY3Rfc2l6ZSArIDE7XFxuK1xcdGlmIChvYmpfZXh0c19jYWNoZS1cXHUwMDNlb2JqZWN0X3NpemUgXFx1MDAzYz0gcy1cXHUwMDNlb2JqZWN0X3NpemUpXFxuK1xcdFxcdHJldHVybiBzLVxcdTAwM2VvYmplY3Rfc2l6ZSArIDE7XFxuIFxcbiBcXHRyZXR1cm4gc3o7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6MzEuMTU5MTQzNzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4ODUzNzE4OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2Nfc2xhYl9vYmpfZXh0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzaXplIGNhbGN1bGF0aW9uIGZvciB0aGUgc2xhYm9ial9leHQgYXJyYXkgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIHRvIHByZXZlbnQgYSBjeWNsaWMgZGVwZW5kZW5jeSBiZXR3ZWVuIGttYWxsb2MgY2FjaGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgaG93IHNsYWIgZXh0ZW5zaW9ucyBhcmUgYWxsb2NhdGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM5ZThmZjgwNDkzODUyMTFmZDQyZWRjMjYyNjM4YWY1ZjRhODIyYTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAwMzoxMToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggOWVjNzc0ZGM3MDA5NjkuLjBjMzBkNjg5ODIwYTExIDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4rKysgYi9tbS9zbHViLmNcbkBAIC0yMTI0LDE1ICsyMTI0LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXG4gfVxuIFxuIC8qXG4tICogQ2FsY3VsYXRlIHRoZSBhbGxvY2F0aW9uIHNpemUgZm9yIHNsYWJvYmpfZXh0IGFycmF5LlxuKyAqIFNpemUgb2YgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGZvciBAc2xhYi5cbiAgKlxuLSAqIFdoZW4gbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGVuYWJsZWQsIHRoZSBvYmpfZXh0cyBhcnJheVxuLSAqIGNvdWxkIGJlIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgY2FjaGUgaXQncyBiZWluZyBhbGxvY2F0ZWQgZm9yLlxuLSAqIFRoaXMgd291bGQgcHJldmVudCB0aGUgc2xhYiBmcm9tIGV2ZXIgYmVpbmcgZnJlZWQgYmVjYXVzZSBpdCB3b3VsZFxuLSAqIGFsd2F5cyBjb250YWluIGF0IGxlYXN0IG9uZSBhbGxvY2F0ZWQgb2JqZWN0IChpdHMgb3duIG9ial9leHRzIGFycmF5KS5cbi0gKlxuLSAqIFRvIGF2b2lkIHRoaXMsIGluY3JlYXNlIHRoZSBhbGxvY2F0aW9uIHNpemUgd2hlbiB3ZSBkZXRlY3QgdGhlIGFycmF5XG4tICogbWF5IGNvbWUgZnJvbSB0aGUgc2FtZSBjYWNoZSwgZm9yY2luZyBpdCB0byB1c2UgYSBkaWZmZXJlbnQgY2FjaGUuXG4rICogVGhlIGFycmF5IGlzIGl0c2VsZiBrbWFsbG9jKCknZC4gSWYgaXQgY2FtZSBmcm9tIHRoZSBzYW1lIG9yIGEgc21hbGxlclxuKyAqIGttYWxsb2MgY2FjaGUgdGhhbiBAcywgdGhlIFwic2xhYiBob2xkcyBhbm90aGVyIHNsYWIncyBhcnJheVwiIHJlbGF0aW9uIGNvdWxkXG4rICogZm9ybSBhIGN5Y2xlIChzZWxmLCBvciBlLmcuIGttYWxsb2MtNTEyIFx1MDAzYy1cdTAwM2Uga21hbGxvYy0xaykgdGhhdCBwaW5zIHRoZSBzbGFic1xuKyAqIGZvcmV2ZXIgYW5kIHJlY3Vyc2VzIHZpYSBmcmVlX3NsYWJfb2JqX2V4dHMoKSAtXHUwMDNlIGtmcmVlKCkgLVx1MDAzZSBkaXNjYXJkX3NsYWIoKVxuKyAqIGF0IHRlYXJkb3duLiBGb3JjZSBpdCBpbnRvIGEgc3RyaWN0bHkgbGFyZ2VyIGNhY2hlIHRvIGtlZXAgdGhhdCByZWxhdGlvbiBhXG4rICogREFHIChhY3ljbGljKS5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0XHRcdFx0XHQgc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcClcbkBAIC0yMTQzLDE4ICsyMTQyLDE5IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRpZiAoc3ogXHUwMDNlIEtNQUxMT0NfTUFYX0NBQ0hFX1NJWkUpXG4gXHRcdHJldHVybiBzejtcbiBcbitcdC8qXG4rXHQgKiBPbmx5IGJ1bXAgdGhlIHNpemUgd2hlbiB0aGUgb2JqZWN0IChub3QgdGhlIG9ial9leHRzIGFycmF5KSBpc1xuK1x0ICogYWxsb2NhdGVkIGZyb20gS01BTExPQ19OT1JNQUwsIGVpdGhlciBieSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcbitcdCAqIG9yIG1lbWNnIG9uIFNMVUJfVElOWSB3aXRoIF9fR0ZQX1JFQ0xBSU1BQkxFfF9fR0ZQX0FDQ09VTlQuXG4rXHQgKiBPdGhlcndpc2UsIG9ial9leHRzIGFsbG9jYXRpb25zIGNhbm5vdCBmb3JtIGEgY3ljbGUgYmV0d2VlblxuK1x0ICoga21hbGxvYyBjYWNoZXMuXG4rXHQgKi9cbiBcdGlmICghaXNfa21hbGxvY19ub3JtYWwocykpXG4gXHRcdHJldHVybiBzejtcbiBcbiBcdG9ial9leHRzX2NhY2hlID0ga21hbGxvY19zbGFiKHN6LCBOVUxMLCBnZnAsIF9fa21hbGxvY190b2tlbigwKSk7XG4tXHQvKlxuLVx0ICogV2UgY2FuJ3Qgc2ltcGx5IGNvbXBhcmUgcyB3aXRoIG9ial9leHRzX2NhY2hlLCBiZWNhdXNlIHBhcnRpdGlvbmVkIGttYWxsb2Ncbi1cdCAqIGNhY2hlcyBoYXZlIG11bHRpcGxlIGNhY2hlcyBwZXIgc2l6ZSwgc2VsZWN0ZWQgYnkgY2FsbGVyIGFkZHJlc3Mgb3IgdHlwZS5cbi1cdCAqIFNpbmNlIGNhbGxlciBhZGRyZXNzIG9yIHR5cGUgbWF5IGRpZmZlciBiZXR3ZWVuIGttYWxsb2Nfc2xhYigpIGFuZCBhY3R1YWxcbi1cdCAqIGFsbG9jYXRpb24sIGJ1bXAgc2l6ZSB3aGVuIHNpemVzIGFyZSBlcXVhbC5cbi1cdCAqL1xuLVx0aWYgKHMtXHUwMDNlb2JqZWN0X3NpemUgPT0gb2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUpXG4tXHRcdHJldHVybiBvYmpfZXh0c19jYWNoZS1cdTAwM2VvYmplY3Rfc2l6ZSArIDE7XG4rXHRpZiAob2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUgXHUwMDNjPSBzLVx1MDAzZW9iamVjdF9zaXplKVxuK1x0XHRyZXR1cm4gcy1cdTAwM2VvYmplY3Rfc2l6ZSArIDE7XG4gXG4gXHRyZXR1cm4gc3o7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6MzEuMTU5MTQ2MDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTE3MTY4ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNMVUIgQWxsb2NhdG9yIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBwb2tpbmcgYXJvdW5kIGluIGBtbS9zbHViLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBvYmpfZXh0c19hbGxvY19zaXplYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhleSdyZSB0d2Vha2luZyB0aGUgbG9naWMgZm9yIGNhbGN1bGF0aW5nIHRoZSBzaXplIG5lZWRlZCB0byBhbGxvY2F0ZSB0aGF0IGBzbGFib2JqX2V4dGAgYXJyYXkuIFRoZSBvcmlnaW5hbCBjb2RlJ3MgY2hlY2ssIGJhc2VkIG9uIHdoZXRoZXIgdGhlIG9iamVjdCBzaXplcyBvZiB0aGUgdGFyZ2V0IHNsYWIgYW5kIHRoZSBgb2JqX2V4dHNfY2FjaGVgIGFyZSBlcXVhbCwgaXMgYmVpbmcgcmVwbGFjZWQuIE5vdyBpdCBpcyBhbiBpbmVxdWFsaXR5IGNoZWNrLlxuXG5UaGUgb2xkIGNoZWNrIGxvb2tlZCBsaWtlIHRoaXM6IGBpZiAocy1cdTAwM2VvYmplY3Rfc2l6ZSA9PSBvYmpfZXh0c19jYWNoZS1cdTAwM2VvYmplY3Rfc2l6ZSkgcmV0dXJuIG9ial9leHRzX2NhY2hlLVx1MDAzZW9iamVjdF9zaXplICsgMTtgXG5Ob3csIGl0J3M6IGBpZiAob2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUgXHUwMDNjPSBzLVx1MDAzZW9iamVjdF9zaXplKSByZXR1cm4gcy1cdTAwM2VvYmplY3Rfc2l6ZSArIDE7YFxuXG5UaGlzIGZlZWxzIGxpa2UgYSBwcmV0dHkgY3JpdGljYWwgY2hhbmdlIGF0IHRoZSBoZWFydCBvZiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGxvb2tzIGxpa2UgaXQncyBkZXNpZ25lZCB0byBicmVhayBhIHNsYWIgZGVwZW5kZW5jeSBjeWNsZSBieSBlbnN1cmluZyB0aGF0IHRoZSBgc2xhYm9ial9leHRgIGFycmF5IGlzIGFsd2F5cyBhbGxvY2F0ZWQgZnJvbSBhIHN0cmljdGx5IGxhcmdlciBjYWNoZS4gVGhhdCdzIGEgY2xhc3NpYyBhcmVhIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMsIHdoaWNoIG1lYW5zIGl0IG5lZWRzIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBcblxuVGltZSB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIGludm9sdmVkIGFuZCBmb2N1cyBpbiBvbiB0aG9zZSBzeW1ib2xzLiBMZXQncyBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGBvYmpfZXh0c19hbGxvY19zaXplYCB3aXRoaW4gYG1tL3NsdWIuY2AgdG8gc2VlIGhvdyBpdCdzIHVzZWQgYW5kIHdoZXJlIGl04oCZcyBjYWxsZWQgZnJvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjExOjM2LjA3NjMxNjk0MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU5NTAzOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqX2V4dHNfYWxsb2Nfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTIxMjE9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0yMTM1LSAqL1xcbm1tL3NsdWIuYzoyMTM2OnN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIxMzctXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzbGFiICpzbGFiLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9zbHViLmM9MjE2Mj1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjE3Ny1cXG5tbS9zbHViLmM6MjE3ODpcXHRzeiA9IG9ial9leHRzX2FsbG9jX3NpemUocywgc2xhYiwgZ2ZwKTtcXG5tbS9zbHViLmMtMjE3OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6MzYuMjQyMjc1OTA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5MzY1MDIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgY29kZTpcblxuKipUcmFjaW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBGbG93KipcblxuUmlnaHQsIHNvIGBvYmpfZXh0c19hbGxvY19zaXplYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIHVsdGltYXRlbHkgZGV0ZXJtaW5pbmcgaG93IG11Y2ggbWVtb3J5IHRvIGFsbG9jYXRlLCBhbmQgaXQncyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBNeSBuZXh0IHRob3VnaHQgaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dC4gVG8gcmVhbGx5IGdldCBhIGdyYXNwIG9uIGhvdyB0aGlzIGFsbG9jYXRpb24gd29ya3MsIEkgbmVlZCB0byB0cmFjZSAqd2hlcmUqIGBhbGxvY19zbGFiX29ial9leHRzYCBpdHNlbGYgaXMgY2FsbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIHVwd2FyZHMgd2lsbCBwcm92aWRlIGNyaXRpY2FsIGNvbnRleHQ7IGl0IHdpbGwgZWx1Y2lkYXRlIHRoZSAqd2h5KiBvZiB0aGlzIGFsbG9jYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbml0aWF0aW5nIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMzoxMTozOS4yMzU5Mjg5MDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4ODA2MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3NsYWJfb2JqX2V4dHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0yMTM2PXN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjE2MS1cXG5tbS9zbHViLmM6MjE2MjppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIxNjMtXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjIzNj1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjI3NS0gKi9cXG5tbS9zbHViLmM6MjI3NjpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtMjI3Ny17XFxuLS1cXG5tbS9zbHViLmM9MjMyNz1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIzMzAtXFxubW0vc2x1Yi5jOjIzMzE6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMzMi1cXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjMzNz1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjM0MC1cXG5tbS9zbHViLmM6MjM0MTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjM0Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmM9MjM1MT1wcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMjM1NC1cXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmM6MjM1NTpcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxubW0vc2x1Yi5jLTIzNTYtXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCIlcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcXFxuXFxcIixcXG4tLVxcbm1tL3NsdWIuYz0zMzU4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcXG4tLVxcbm1tL3NsdWIuYy0zMzY0LVxcdFxcdFxcdCFzbGFiX29ial9leHRzKHNsYWIpKVxcbm1tL3NsdWIuYzozMzY1OlxcdFxcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxcbm1tL3NsdWIuYy0zMzY2LVxcdFxcdFxcdFxcdCAgICBhbGxvY19mbGFncyB8IFNMQUJfQUxMT0NfTkVXX1NMQUIpO1xcbi0tXFxubW0vc2x1Yi5jPTMzODc9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zNDM3LVxcdCAqL1xcbm1tL3NsdWIuYzozNDM4OlxcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XFxubW0vc2x1Yi5jLTM0MzktXFx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6MzkuMzg0NzQxMzIzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5OTU3MzA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipEZWx2aW5nIGludG8gU2xhYiBPYmplY3QgRXh0ZW5zaW9uIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgc2xhYiBvYmplY3QgZXh0ZW5zaW9ucyBhcmUgYWxsb2NhdGVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBJIHNlZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQgYnkgYm90aCBgcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2tgIGFuZCBgYWNjb3VudF9zbGFiYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBjb25maWcgb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIHRvIGJlIGFjdHVhbGx5ICpkZWZpbmVkKiBhbmQsIGNyaXRpY2FsbHksICp1dGlsaXplZCogd2l0aGluIHRoZSBzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgY29uZGl0aW9uYWwgbG9naWMgYXQgcGxheSBoZXJlLiBUaGlzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZywgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIG9yIGlmIEknbSBjb25zaWRlcmluZyBtb2RpZmljYXRpb25zIHRvIHRoZSBzbGFiIGFsbG9jYXRvci4gS25vd2luZyAqd2hlbiogdGhpcyBmdW5jdGlvbiBpcyBhY3RpdmUgd2lsbCBsZWFkIG1lIHRvIHRoZSByZWFzb25zIHdoeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI4NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjExOjQyLjY4NDMxNjY1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk5MDI3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2Nfc2xhYl9vYmpfZXh0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTM1Mzc9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTg2LVxcdFxcdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbWNvbnRyb2wuYzozNTg3OlxcdFxcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBzbGFiX2FsbG9jX2ZsYWdzKSkge1xcbm1tL21lbWNvbnRyb2wuYy0zNTg4LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vc2xhYi5oLTIyLSNkZWZpbmUgU0xBQl9BTExPQ19OT0xPQ0tcXHQweDAxIC8qIGEga21hbGxvY19ub2xvY2soKSBhbGxvY2F0aW9uICovXFxubW0vc2xhYi5oOjIzOiNkZWZpbmUgU0xBQl9BTExPQ19ORVdfU0xBQlxcdDB4MDIgLyogYSBmbGFnIGZvciBhbGxvY19zbGFiX29ial9leHRzKCkgKi9cXG5tbS9zbGFiLmgtMjQtI2RlZmluZSBTTEFCX0FMTE9DX05PX1JFQ1VSU0VcXHQweDA0IC8qIHByZXZlbnQga21hbGxvYygpIHJlY3Vyc2lvbiAqL1xcbi0tXFxubW0vc2xhYi5oPTYxNj1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2xhYi5oLTYyOC1cXG5tbS9zbGFiLmg6NjI5OmludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbGFiLmgtNjMwLVxcdFxcdFxcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcXG4tLVxcbm1tL3NsdWIuYz0yMTM2PXN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjE2MS1cXG5tbS9zbHViLmM6MjE2MjppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIxNjMtXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjIzNj1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjI3NS0gKi9cXG5tbS9zbHViLmM6MjI3NjpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtMjI3Ny17XFxuLS1cXG5tbS9zbHViLmM9MjMyNz1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIzMzAtXFxubW0vc2x1Yi5jOjIzMzE6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMzMi1cXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjMzNz1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjM0MC1cXG5tbS9zbHViLmM6MjM0MTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjM0Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmM9MjM1MT1wcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMjM1NC1cXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmM6MjM1NTpcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxubW0vc2x1Yi5jLTIzNTYtXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCIlcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcXFxuXFxcIixcXG4tLVxcbm1tL3NsdWIuYz0zMzU4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcXG4tLVxcbm1tL3NsdWIuYy0zMzY0LVxcdFxcdFxcdCFzbGFiX29ial9leHRzKHNsYWIpKVxcbm1tL3NsdWIuYzozMzY1OlxcdFxcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxcbm1tL3NsdWIuYy0zMzY2LVxcdFxcdFxcdFxcdCAgICBhbGxvY19mbGFncyB8IFNMQUJfQUxMT0NfTkVXX1NMQUIpO1xcbi0tXFxubW0vc2x1Yi5jPTMzODc9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zNDM3LVxcdCAqL1xcbm1tL3NsdWIuYzozNDM4OlxcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XFxubW0vc2x1Yi5jLTM0MzktXFx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6NDIuODg0MjI0MzY2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3MDYwNzkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0ZXh0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGEgaGlnaCBsZXZlbCBvZiBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gYG1tL3NsdWIuY2AgYW5kIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuT2theSwgc28gdGhlIHByb21wdCBpcyBkaXJlY3RpbmcgbWUgdG8gYSBzcGVjaWZpYyBhcmVhIG9mIHRoZSBrZXJuZWwgc291cmNlOiBgbW0vc2x1Yi5jYCBhcm91bmQgbGluZSAyMTYyLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nLCBcIkFoLCBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9yIGNvbmZpZ3VyYXRpb24tZGVwZW5kZW50IGJlaGF2aW9yIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuXCIgTXkgZm9jdXMgaW1tZWRpYXRlbHkgem9vbXMgaW4gb24gdGhhdCBsaW5lLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgdGhlIGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgaXQuIFRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIHBhcnQgbGllcywgbGlrZWx5IGRlYWxpbmcgd2l0aCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSBhbnRpY2lwYXRlIHRoaXMgaXMgd2hlcmUgdGhlIGNvZGUgYnJhbmNoZXMsIGhhbmRsaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGRpZmZlcmVudGx5IGJhc2VkIG9uIHRoZSBkZWZpbmVkIGtlcm5lbCBjb25maWd1cmF0aW9uIG9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiBJJ20ga2VlbiB0byBzZWUgd2hhdCBzcGVjaWZpYyBmZWF0dXJlcyBvciBvcHRpbWl6YXRpb25zIGFyZSBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkIGF0IHRoYXQgbG9jYXRpb24uIFRoaXMgaXMgb2Z0ZW4gd2hlcmUgeW91IGZpbmQgdGhlIG51YW5jZXMgdGhhdCBhZmZlY3QgcGVyZm9ybWFuY2Ugb3IgZmVhdHVyZSBhdmFpbGFiaWxpdHkgb24gZGlmZmVyZW50IGhhcmR3YXJlLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLCBiZWNhdXNlIHRoYXQncyB3aGF0IGFsd2F5cyBjb21lcyB1cCBpbiByZWFsLXdvcmxkIGtlcm5lbCBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMzoxMTo0Ni4yNTQ4MzQ4NjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zbHViLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxMDA6XFx0XFx0ICogSWYgdmVjdG9yIHByZXZpb3VzbHkgZmFpbGVkIHRvIGFsbG9jYXRlIHRoZW4gd2UgaGF2ZSBsaXZlXFxuMjEwMTpcXHRcXHQgKiBvYmplY3RzIHdpdGggbm8gdGFnIHJlZmVyZW5jZS4gTWFyayBhbGwgcmVmZXJlbmNlcyBpbiB0aGlzXFxuMjEwMjpcXHRcXHQgKiB2ZWN0b3IgYXMgZW1wdHkgdG8gYXZvaWQgd2FybmluZ3MgbGF0ZXIgb24uXFxuMjEwMzpcXHRcXHQgKi9cXG4yMTA0OlxcdFxcdGlmIChvYmpfZXh0cyA9PSBPQkpFWFRTX0FMTE9DX0ZBSUwpIHtcXG4yMTA1OlxcdFxcdFxcdHVuc2lnbmVkIGludCBpO1xcbjIxMDY6XFx0XFxuMjEwNzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgb2JqZWN0czsgaSsrKVxcbjIxMDg6XFx0XFx0XFx0XFx0c2V0X2NvZGV0YWdfZW1wdHkoXFx1MDAyNnZlY1tpXS5yZWYpO1xcbjIxMDk6XFx0XFx0fVxcbjIxMTA6XFx0fVxcbjIxMTE6XFx0XFxuMjExMjpcXHQjZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbjIxMTM6XFx0XFxuMjExNDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopIHt9XFxuMjExNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gZmFsc2U7IH1cXG4yMTE2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG4yMTE3OlxcdFxcdFxcdFxcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cykge31cXG4yMTE4OlxcdFxcbjIxMTk6XFx0I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXFxuMjEyMDpcXHRcXG4yMTIxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuMjEyMjpcXHR7XFxuMjEyMzpcXHRcXHRzbGFiLVxcdTAwM2VvYmpfZXh0cyA9IDA7XFxuMjEyNDpcXHR9XFxuMjEyNTpcXHRcXG4yMTI2OlxcdC8qXFxuMjEyNzpcXHQgKiBTaXplIG9mIHRoZSBzbGFib2JqX2V4dCBhcnJheSBmb3IgQHNsYWIuXFxuMjEyODpcXHQgKlxcbjIxMjk6XFx0ICogVGhlIGFycmF5IGlzIGl0c2VsZiBrbWFsbG9jKCknZC4gSWYgaXQgY2FtZSBmcm9tIHRoZSBzYW1lIG9yIGEgc21hbGxlclxcbjIxMzA6XFx0ICoga21hbGxvYyBjYWNoZSB0aGFuIEBzLCB0aGUgXFxcInNsYWIgaG9sZHMgYW5vdGhlciBzbGFiJ3MgYXJyYXlcXFwiIHJlbGF0aW9uIGNvdWxkXFxuMjEzMTpcXHQgKiBmb3JtIGEgY3ljbGUgKHNlbGYsIG9yIGUuZy4ga21hbGxvYy01MTIgXFx1MDAzYy1cXHUwMDNlIGttYWxsb2MtMWspIHRoYXQgcGlucyB0aGUgc2xhYnNcXG4yMTMyOlxcdCAqIGZvcmV2ZXIgYW5kIHJlY3Vyc2VzIHZpYSBmcmVlX3NsYWJfb2JqX2V4dHMoKSAtXFx1MDAzZSBrZnJlZSgpIC1cXHUwMDNlIGRpc2NhcmRfc2xhYigpXFxuMjEzMzpcXHQgKiBhdCB0ZWFyZG93bi4gRm9yY2UgaXQgaW50byBhIHN0cmljdGx5IGxhcmdlciBjYWNoZSB0byBrZWVwIHRoYXQgcmVsYXRpb24gYVxcbjIxMzQ6XFx0ICogREFHIChhY3ljbGljKS5cXG4yMTM1OlxcdCAqL1xcbjIxMzY6XFx0c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4yMTM3OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgZ2ZwX3QgZ2ZwKVxcbjIxMzg6XFx0e1xcbjIxMzk6XFx0XFx0c2l6ZV90IHN6ID0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzbGFiLVxcdTAwM2VvYmplY3RzO1xcbjIxNDA6XFx0XFx0c3RydWN0IGttZW1fY2FjaGUgKm9ial9leHRzX2NhY2hlO1xcbjIxNDE6XFx0XFxuMjE0MjpcXHRcXHRpZiAoc3ogXFx1MDAzZSBLTUFMTE9DX01BWF9DQUNIRV9TSVpFKVxcbjIxNDM6XFx0XFx0XFx0cmV0dXJuIHN6O1xcbjIxNDQ6XFx0XFxuMjE0NTpcXHRcXHQvKlxcbjIxNDY6XFx0XFx0ICogT25seSBidW1wIHRoZSBzaXplIHdoZW4gdGhlIG9iamVjdCAobm90IHRoZSBvYmpfZXh0cyBhcnJheSkgaXNcXG4yMTQ3OlxcdFxcdCAqIGFsbG9jYXRlZCBmcm9tIEtNQUxMT0NfTk9STUFMLCBlaXRoZXIgYnkgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXFxuMjE0ODpcXHRcXHQgKiBvciBtZW1jZyBvbiBTTFVCX1RJTlkgd2l0aCBfX0dGUF9SRUNMQUlNQUJMRXxfX0dGUF9BQ0NPVU5ULlxcbjIxNDk6XFx0XFx0ICogT3RoZXJ3aXNlLCBvYmpfZXh0cyBhbGxvY2F0aW9ucyBjYW5ub3QgZm9ybSBhIGN5Y2xlIGJldHdlZW5cXG4yMTUwOlxcdFxcdCAqIGttYWxsb2MgY2FjaGVzLlxcbjIxNTE6XFx0XFx0ICovXFxuMjE1MjpcXHRcXHRpZiAoIWlzX2ttYWxsb2Nfbm9ybWFsKHMpKVxcbjIxNTM6XFx0XFx0XFx0cmV0dXJuIHN6O1xcbjIxNTQ6XFx0XFxuMjE1NTpcXHRcXHRvYmpfZXh0c19jYWNoZSA9IGttYWxsb2Nfc2xhYihzeiwgTlVMTCwgZ2ZwLCBfX2ttYWxsb2NfdG9rZW4oMCkpO1xcbjIxNTY6XFx0XFx0aWYgKG9ial9leHRzX2NhY2hlLVxcdTAwM2VvYmplY3Rfc2l6ZSBcXHUwMDNjPSBzLVxcdTAwM2VvYmplY3Rfc2l6ZSlcXG4yMTU3OlxcdFxcdFxcdHJldHVybiBzLVxcdTAwM2VvYmplY3Rfc2l6ZSArIDE7XFxuMjE1ODpcXHRcXG4yMTU5OlxcdFxcdHJldHVybiBzejtcXG4yMTYwOlxcdH1cXG4yMTYxOlxcdFxcbjIxNjI6XFx0aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbjIxNjM6XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuMjE2NDpcXHR7XFxuMjE2NTpcXHRcXHRjb25zdCBib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7XFxuMjE2NjpcXHRcXHR1bnNpZ25lZCBpbnQgb2JqZWN0cyA9IG9ianNfcGVyX3NsYWIocywgc2xhYik7XFxuMjE2NzpcXHRcXHRib29sIG5ld19zbGFiID0gYWxsb2NfZmxhZ3MgXFx1MDAyNiBTTEFCX0FMTE9DX05FV19TTEFCO1xcbjIxNjg6XFx0XFx0dW5zaWduZWQgbG9uZyBuZXdfZXh0cztcXG4yMTY5OlxcdFxcdHVuc2lnbmVkIGxvbmcgb2xkX2V4dHM7XFxuMjE3MDpcXHRcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYztcXG4yMTcxOlxcdFxcdHNpemVfdCBzejtcXG4yMTcyOlxcdFxcbjIxNzM6XFx0XFx0Z2ZwIFxcdTAwMjY9IH5PQkpDR1NfQ0xFQVJfTUFTSztcXG4yMTc0OlxcdFxcdC8qIFByZXZlbnQgcmVjdXJzaXZlIGV4dGVuc2lvbiB2ZWN0b3IgYWxsb2NhdGlvbiAqL1xcbjIxNzU6XFx0XFx0YWxsb2NfZmxhZ3MgfD0gU0xBQl9BTExPQ19OT19SRUNVUlNFO1xcbjIxNzY6XFx0XFx0YWxsb2NfZmxhZ3MgXFx1MDAyNj0gflNMQUJfQUxMT0NfTkVXX1NMQUI7XFxuMjE3NzpcXHRcXG4yMTc4OlxcdFxcdHN6ID0gb2JqX2V4dHNfYWxsb2Nfc2l6ZShzLCBzbGFiLCBnZnApO1xcbjIxNzk6XFx0XFxuMjE4MDpcXHRcXHQvKiBUaGlzIHdpbGwgdXNlIGttYWxsb2Nfbm9sb2NrKCkgaWYgYWxsb2NfZmxhZ3Mgc2F5IHNvICovXFxuMjE4MTpcXHRcXHR2ZWMgPSBrbWFsbG9jX2ZsYWdzKHN6LCBnZnAgfCBfX0dGUF9aRVJPLCBhbGxvY19mbGFncywgc2xhYl9uaWQoc2xhYikpO1xcbjIxODI6XFx0XFxuMjE4MzpcXHRcXHRpZiAoIXZlYykge1xcbjIxODQ6XFx0XFx0XFx0LypcXG4yMTg1OlxcdFxcdFxcdCAqIFRyeSB0byBtYXJrIHZlY3RvcnMgd2hpY2ggZmFpbGVkIHRvIGFsbG9jYXRlLlxcbjIxODY6XFx0XFx0XFx0ICogSWYgdGhpcyBvcGVyYXRpb24gZmFpbHMsIHRoZXJlIG1heSBiZSBhIHJhY2luZyBwcm9jZXNzXFxuMjE4NzpcXHRcXHRcXHQgKiB0aGF0IGhhcyBhbHJlYWR5IGNvbXBsZXRlZCB0aGUgYWxsb2NhdGlvbi5cXG4yMTg4OlxcdFxcdFxcdCAqL1xcbjIxODk6XFx0XFx0XFx0aWYgKCFtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHNsYWIpIFxcdTAwMjZcXHUwMDI2XFxuMjE5MDpcXHRcXHRcXHQgICAgc2xhYl9vYmpfZXh0cyhzbGFiKSlcXG4yMTkxOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjIxOTI6XFx0XFxuMjE5MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMTk0OlxcdFxcdH1cXG4yMTk1OlxcdFxcbjIxOTY6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHZpcnRfdG9fc2xhYih2ZWMpICE9IE5VTEwgXFx1MDAyNlxcdTAwMjZcXG4yMTk3OlxcdFxcdFxcdFxcdHZpcnRfdG9fc2xhYih2ZWMpLVxcdTAwM2VzbGFiX2NhY2hlID09IHMpO1xcbjIxOTg6XFx0XFxuMjE5OTpcXHRcXHRuZXdfZXh0cyA9ICh1bnNpZ25lZCBsb25nKXZlYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6NDYuMjU2Mjc0MzQxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDM5OTQ4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqQ2hlY2tpbmcgdGhlICNpZmRlZiBhcm91bmQgYWxsb2Nfc2xhYl9vYmpfZXh0cyoqXG5cblJpZ2h0LCBzbyBJIHNlZSBhIGAjaWZkZWZgIHN1cnJvdW5kaW5nIGBhbGxvY19zbGFiX29ial9leHRzYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgKndoeSogaXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBUaGVyZSdzIGFsbW9zdCBjZXJ0YWlubHkgYSBnb29kIHJlYXNvbiBmb3IgdGhpcy4gSXMgaXQgYSBwbGF0Zm9ybS1zcGVjaWZpYyBmZWF0dXJlPyBBIGJ1aWxkLXRpbWUgb3B0aW1pemF0aW9uIHRoYXQgb25seSBhcHBsaWVzIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucz8gT3IgbWF5YmUgaXQncyByZWxhdGVkIHRvIHNvbWUgZmVhdHVyZSBmbGFnIG9yIGV4cGVyaW1lbnRhbCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGl0IGJlaW5nIGRlZmluZWQgb3Igbm90IGRlZmluZWQuXG5cbkknbSBwcm9iYWJseSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSBkZWZpbml0aW9uIG9mIHdoYXRldmVyIG1hY3JvIGlzIGJlaW5nIGNoZWNrZWQgaW4gdGhlIGAjaWZkZWZgLiBUaGF0IHdpbGwgdGVsbCBtZSB1bmRlciB3aGljaCBjaXJjdW1zdGFuY2VzIHRoaXMgZnVuY3Rpb24gZ2V0cyBpbmNsdWRlZC4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvZGUgcGF0aHMgb24gYm90aCBzaWRlcyBvZiB0aGF0IGNvbmRpdGlvbmFsIGFuZCBjb21wYXJlIHRoZW0sIHRvIHNlZSB3aGF0IGZ1bmN0aW9uYWxpdHkgSSdtIGdldHRpbmcgb3IgbG9zaW5nIGRlcGVuZGluZyBvbiB0aGUgbWFjcm8ncyBzdGF0ZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSwgbWVtb3J5IHVzYWdlLCBhbmQgcG9zc2libHkgZXZlbiB0aGUgb3ZlcmFsbCBkZXNpZ24gb2YgdGhlIHNsYWIgYWxsb2NhdG9yLiBUaGlzIHNlZW1zIGxpa2UgYSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBwaWVjZSBvZiBjb2RlLCB3b3J0aCBhIHRob3JvdWdoIGxvb2suIFRoZSBmYWN0IHRoYXQgdGhlIGNvZGUgYXV0aG9yIGNob3NlIHRvIHVzZSBhbiBpZmRlZiwgaW5zdGVhZCBvZiBqdXN0IGFuIGlmLCBzdWdnZXN0cyB0aGVyZSBpcyBhIGJpZyBkaWZmZXJlbmNlIGluIGJvdGggY29kZSBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY2MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6NTAuNjAwMjcxNjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODk3ODk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsYWIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbGFiLmgtMjItI2RlZmluZSBTTEFCX0FMTE9DX05PTE9DS1xcdDB4MDEgLyogYSBrbWFsbG9jX25vbG9jaygpIGFsbG9jYXRpb24gKi9cXG5tbS9zbGFiLmg6MjM6I2RlZmluZSBTTEFCX0FMTE9DX05FV19TTEFCXFx0MHgwMiAvKiBhIGZsYWcgZm9yIGFsbG9jX3NsYWJfb2JqX2V4dHMoKSAqL1xcbm1tL3NsYWIuaC0yNC0jZGVmaW5lIFNMQUJfQUxMT0NfTk9fUkVDVVJTRVxcdDB4MDQgLyogcHJldmVudCBrbWFsbG9jKCkgcmVjdXJzaW9uICovXFxuLS1cXG5tbS9zbGFiLmg9NjE2PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpzbGFiX29ial9leHQoc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbGFiLmgtNjI4LVxcbm1tL3NsYWIuaDo2Mjk6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbm1tL3NsYWIuaC02MzAtXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMzoxMTo1MC44MTkyNTU5NDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjczNTIxNDYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbW0vc2xhYi5oYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIExldCdzIHN0YXJ0IHdpdGggYG1tL3NsYWIuaGAuIFNwZWNpZmljYWxseSwgSSB0aGluayBsb29raW5nIGFyb3VuZCBsaW5lIDYyOSB3aWxsIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50LiBUaGlzIGxvY2F0aW9uIHVzdWFsbHkgaG91c2VzIGltcG9ydGFudCBkZWZpbml0aW9ucyBvciBtYWNyb3MgdGhhdCBhcmUgY3JpdGljYWwgZm9yIGdyYXNwaW5nIHRoZSBjb25jZXB0cy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGNvcmUgc3RydWN0dXJlcyBvciBmdW5jdGlvbnMgcmVsYXRlZCB0byBvYmplY3QgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gaW4gdGhlIHNsYWIgYWxsb2NhdG9yLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byB0cmFjZSBob3cgdGhlIG1lbW9yeSBpcyBiZWluZyBoYW5kbGVkLiBJJ20gaG9waW5nIHRoaXMgd2lsbCBpbGx1bWluYXRlIHdoYXRldmVyIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIwNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjExOjUzLjU1NDQ3MzI4N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc2xhYi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbGFiX2dldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIpXFxuIDYwMTpcXHR7XFxuIDYwMjpcXHRcXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCk7XFxuIDYwMzpcXHR9XFxuIDYwNDpcXHQjZW5kaWZcXG4gNjA1OlxcdFxcbiA2MDY6XFx0LypcXG4gNjA3OlxcdCAqIHNsYWJfb2JqX2V4dCAtIGdldCB0aGUgcG9pbnRlciB0byB0aGUgc2xhYiBvYmplY3QgZXh0ZW5zaW9uIG1ldGFkYXRhXFxuIDYwODpcXHQgKiBhc3NvY2lhdGVkIHdpdGggYW4gb2JqZWN0IGluIGEgc2xhYi5cXG4gNjA5OlxcdCAqIEBzbGFiOiBhIHBvaW50ZXIgdG8gdGhlIHNsYWIgc3RydWN0XFxuIDYxMDpcXHQgKiBAb2JqX2V4dHM6IGEgcG9pbnRlciB0byB0aGUgb2JqZWN0IGV4dGVuc2lvbiB2ZWN0b3JcXG4gNjExOlxcdCAqIEBpbmRleDogYW4gaW5kZXggb2YgdGhlIG9iamVjdFxcbiA2MTI6XFx0ICpcXG4gNjEzOlxcdCAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgZXh0ZW5zaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgb2JqZWN0LlxcbiA2MTQ6XFx0ICogTXVzdCBiZSBjYWxsZWQgd2l0aGluIGEgc2VjdGlvbiBjb3ZlcmVkIGJ5IGdldC9wdXRfc2xhYl9vYmpfZXh0cygpLlxcbiA2MTU6XFx0ICovXFxuIDYxNjpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLFxcbiA2MTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXFxuIDYxODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGluZGV4KVxcbiA2MTk6XFx0e1xcbiA2MjA6XFx0XFx0c3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0O1xcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRWTV9XQVJOX09OX09OQ0Uob2JqX2V4dHMgIT0gc2xhYl9vYmpfZXh0cyhzbGFiKSk7XFxuIDYyMzpcXHRcXG4gNjI0OlxcdFxcdG9ial9leHQgPSAoc3RydWN0IHNsYWJvYmpfZXh0ICopKG9ial9leHRzICtcXG4gNjI1OlxcdFxcdFxcdFxcdFxcdFxcdCBzbGFiX2dldF9zdHJpZGUoc2xhYikgKiBpbmRleCk7XFxuIDYyNjpcXHRcXHRyZXR1cm4ga2FzYW5fcmVzZXRfdGFnKG9ial9leHQpO1xcbiA2Mjc6XFx0fVxcbiA2Mjg6XFx0XFxuIDYyOTpcXHRpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuIDYzMDpcXHRcXHRcXHRcXHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XFxuIDYzMTpcXHRcXG4gNjMyOlxcdCNlbHNlIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cXG4gNjMzOlxcdFxcbiA2MzQ6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuIDYzNTpcXHR7XFxuIDYzNjpcXHRcXHRyZXR1cm4gMDtcXG4gNjM3OlxcdH1cXG4gNjM4OlxcdFxcbiA2Mzk6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKnNsYWJfb2JqX2V4dChzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4gNjQwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbiA2NDE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBpbmRleClcXG4gNjQyOlxcdHtcXG4gNjQzOlxcdFxcdHJldHVybiBOVUxMO1xcbiA2NDQ6XFx0fVxcbiA2NDU6XFx0XFxuIDY0NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKSB7IH1cXG4gNjQ3OlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNsYWJfZ2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gMDsgfVxcbiA2NDg6XFx0XFxuIDY0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6NTMuNTU0NjE4MTg3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDA1NjY3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYENPTkZJR19TTEFCX09CSl9FWFRgIERlcGVuZGVuY3kqKlxuXG5SaWdodCwgc28gSSdtIGhpdHRpbmcgYSBzbmFnIOKAkyBpdCBsb29rcyBsaWtlIGBDT05GSUdfU0xBQl9PQkpfRVhUYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHNvbWV0aGluZyBJJ20gd29ya2luZyBvbi4gVGhlIGNvZGUncyBtYWtpbmcgaXQgcHJldHR5IGNsZWFyIHRoYXQgSSBjYW4ndCBtb3ZlIGZvcndhcmQgd2l0aG91dCB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBlbmFibGVkLlxuXG5NeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGZpZ3VyaW5nIG91dCAqd2hhdCogZXhhY3RseSBlbmFibGVzIGBDT05GSUdfU0xBQl9PQkpfRVhUYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBmaWxlcywgdHJhY2luZyBkZXBlbmRlbmNpZXMsIGFuZCBzZWVpbmcgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIFByb2JhYmx5IHNvbWV0aGluZyBsaWtlIHRoaXMgd2lsbCBnZXQgbWUgc3RhcnRlZDogYGZpbmQgLiAtbmFtZSBcIktjb25maWdcIiAtcHJpbnQwIHwgeGFyZ3MgLTAgZ3JlcCAtSCBcIkNPTkZJR19TTEFCX09CSl9FWFRcImAuIFRoZW4gSSdsbCBzdGFydCBjaGVja2luZyB0aGUgY29udGV4dC4gTGV0J3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE1MCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTE6NTYuNTk1MTg3NzY1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzUyMTAxOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTEFCX09CSl9FWFRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDMzPWNvbmZpZyBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDQwLVxcbmluaXQvS2NvbmZpZzoxMDQxOmNvbmZpZyBTTEFCX09CSl9FWFRcXG5pbml0L0tjb25maWctMTA0Mi1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjEyOjAxLjk0NzMwMTg2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg2Mzg5MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlJ3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFtjb250ZXh0IGlzIG1pc3NpbmcsIGJ1dCBpdCB3b3VsZCBoYXZlIGJlZW4gaW5zZXJ0ZWQgaGVyZSwgZS5nLiwgXCJ0aGUgbmV3IGZpbGVzeXN0ZW0gZHJpdmVyIEknbSB3b3JraW5nIG9uXCJdPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbS4gTGV0J3Mgc2VlLi4uIEtjb25maWcgZmlsZXMgYXJlIHRoZSBzdGFuZGFyZC4gR2l2ZW4gdGhlIHR5cGljYWwgc3RydWN0dXJlLCBpdCdzIHByb2JhYmx5IGJlc3QgdG8gc3RhcnQgd2l0aCBgaW5pdC9LY29uZmlnYC4gQW5kLCBnaXZlbiBteSBleHBlcmllbmNlLCBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBhcm91bmQgbGluZSAxMDQxLiBJJ20gYmV0dGluZyB0aGVyZSdzIGEgcmVsYXRlZCBzZWN0aW9uIHRoZXJlLCBvciBhdCBsZWFzdCBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQuIEl0J3MgdXN1YWxseSBhIGdvb2QgYmV0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDk0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTI6MDUuMjMzNjk0MjE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAzMDpcXHRcXHQgIHJlc291cmNlcyB3aXRoaW4gdGhlIHNhbWUgY2FjaGUgZG9tYWluLCByZWR1Y2luZyBjYWNoZSBtaXNzZXMgYW5kXFxuMTAzMTpcXHRcXHQgIGxvd2VyaW5nIGRhdGEgYWNjZXNzIGxhdGVuY3kuXFxuMTAzMjpcXHRcXG4xMDMzOlxcdGNvbmZpZyBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURcXG4xMDM0OlxcdFxcdGJvb2wgXFxcIkF1dG9tYXRpY2FsbHkgZW5hYmxlIE5VTUEgYXdhcmUgbWVtb3J5L3Rhc2sgcGxhY2VtZW50XFxcIlxcbjEwMzU6XFx0XFx0ZGVmYXVsdCB5XFxuMTAzNjpcXHRcXHRkZXBlbmRzIG9uIE5VTUFfQkFMQU5DSU5HXFxuMTAzNzpcXHRcXHRoZWxwXFxuMTAzODpcXHRcXHQgIElmIHNldCwgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIHdpbGwgYmUgZW5hYmxlZCBpZiBydW5uaW5nIG9uIGEgTlVNQVxcbjEwMzk6XFx0XFx0ICBtYWNoaW5lLlxcbjEwNDA6XFx0XFxuMTA0MTpcXHRjb25maWcgU0xBQl9PQkpfRVhUXFxuMTA0MjpcXHRcXHRib29sXFxuMTA0MzpcXHRcXG4xMDQ0OlxcdG1lbnVjb25maWcgQ0dST1VQU1xcbjEwNDU6XFx0XFx0Ym9vbCBcXFwiQ29udHJvbCBHcm91cCBzdXBwb3J0XFxcIlxcbjEwNDY6XFx0XFx0c2VsZWN0IEtFUk5GU1xcbjEwNDc6XFx0XFx0aGVscFxcbjEwNDg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGdyb3VwaW5nIHNldHMgb2YgcHJvY2Vzc2VzIHRvZ2V0aGVyLCBmb3JcXG4xMDQ5OlxcdFxcdCAgdXNlIHdpdGggcHJvY2VzcyBjb250cm9sIHN1YnN5c3RlbXMgc3VjaCBhcyBDcHVzZXRzLCBDRlMsIG1lbW9yeVxcbjEwNTA6XFx0XFx0ICBjb250cm9scyBvciBkZXZpY2UgaXNvbGF0aW9uLlxcbjEwNTE6XFx0XFx0ICBTZWVcXG4xMDUyOlxcdFxcdFxcdC0gRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZGVzaWduLUNGUy5yc3RcXHQoQ0ZTKVxcbjEwNTM6XFx0XFx0XFx0LSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS8gKGZlYXR1cmVzIGZvciBncm91cGluZywgaXNvbGF0aW9uXFxuMTA1NDpcXHRcXHRcXHRcXHRcXHRcXHQgIGFuZCByZXNvdXJjZSBjb250cm9sKVxcbjEwNTU6XFx0XFxuMTA1NjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDU3OlxcdFxcbjEwNTg6XFx0aWYgQ0dST1VQU1xcbjEwNTk6XFx0XFxuMTA2MDpcXHRjb25maWcgUEFHRV9DT1VOVEVSXFxuMTA2MTpcXHRcXHRib29sXFxuMTA2MjpcXHRcXG4xMDYzOlxcdGNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbjEwNjQ6XFx0XFx0Ym9vbCBcXFwiRmF2b3IgZHluYW1pYyBtb2RpZmljYXRpb24gbGF0ZW5jeSByZWR1Y3Rpb24gYnkgZGVmYXVsdFxcXCJcXG4xMDY1OlxcdFxcdGhlbHBcXG4xMDY2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgXFxcImZhdm9yZHlubW9kc1xcXCIgbW91bnQgb3B0aW9uIGJ5IGRlZmF1bHRcXG4xMDY3OlxcdFxcdCAgd2hpY2ggcmVkdWNlcyB0aGUgbGF0ZW5jaWVzIG9mIGR5bmFtaWMgY2dyb3VwIG1vZGlmaWNhdGlvbnMgc3VjaFxcbjEwNjg6XFx0XFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcXG4xMDY5OlxcdFxcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cXG4xMDcwOlxcdFxcbjEwNzE6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA3MjpcXHRcXG4xMDczOlxcdGNvbmZpZyBNRU1DR1xcbjEwNzQ6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA3NTpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA3NjpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwNzc6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwNzg6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA3OTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjEyOjA1LjIzMzk0NDA5OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ3NzQ5NTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgU0xBQl9PQkpfRVhUKipcblxuQWxyaWdodCwgc28gYFNMQUJfT0JKX0VYVGAgaXMgYmVpbmcgcHVsbGVkIGluIGJ5IGBNRU1DR2AuIEZpbmUsIHRoYXQncyBhIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiBXaGF0ICplbHNlKiBpcyBzZWxlY3RpbmcgYFNMQUJfT0JKX0VYVGA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBkZXBlbmRlbmN5IHRyZWUsIGVzcGVjaWFsbHkgaWYgdGhlcmUncyBhbnkgb3ZlcmxhcCBvciBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyBJJ20gZmFtaWxpYXIgd2l0aC4gVW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgaWYgdGhpcyB1c2FnZSBpcyBleHBlY3RlZCwgZWZmaWNpZW50LCBvciBpZiBpdCBtaWdodCBpbXBhY3Qgb3RoZXIgYXJlYXMuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgY29kZSB0byBzZWUgd2hlcmUgZWxzZSB0aGlzIGlzIGJlaW5nIHVzZWQgYW5kIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhvc2UgY2hvaWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjEyOjA4Ljg4MTY5NTg3NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk2Mzc5NzQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgU0xBQl9PQkpfRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3Mz1jb25maWcgTUVNQ0dcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDc2LVxcdHNlbGVjdCBFVkVOVEZEXFxuaW5pdC9LY29uZmlnOjEwNzc6XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbmluaXQvS2NvbmZpZy0xMDc4LVxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0zMjQ9Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMzMxLVxcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxcbm1tL0tjb25maWcuZGVidWc6MzMyOlxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG5tbS9LY29uZmlnLmRlYnVnLTMzMy1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjEyOjEyLjg0NTQ5ODU5MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc2NTcwNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgc28gYE1FTV9BTExPQ19QUk9GSUxJTkdgIGFsc28gaW1wbGllcyB0aGUgc2VsZWN0aW9uIG9mIGBTTEFCX09CSl9FWFRgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZSDigJMgcHJvZmlsaW5nIGxpa2VseSBuZWVkcyB0aGF0IGV4dHJhIG9iamVjdCBtZXRhZGF0YS4gTm93LCB0aGlzIG1lYW5zIHdlJ3JlIGluIGEgc2l0dWF0aW9uIHdoZXJlIHdlIG5lZWQgZWl0aGVyIGBNRU1DR2AgKG1lbW9yeSBjb250cm9sIGdyb3Vwcykgb3IgdGhlIHByb2ZpbGluZyBvcHRpb24gaXRzZWxmIHRvIGJlIGVuYWJsZWQuICBJJ20gbWFraW5nIGEgbWVudGFsIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGltcG9ydGFudCBkZXBlbmRlbmN5IHRvIGtlZXAgaW4gbWluZCwgYmVjYXVzZSBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgY29tYmluYXRpb24gb2YgdGhlc2UgZmVhdHVyZXMgY291bGQgcG90ZW50aWFsbHkgaW5mbHVlbmNlIHBlcmZvcm1hbmNlLiBMZXQgbWUganVzdCB0YWtlIGEgcXVpY2sgcGVlayBhdCBgbW0vS2NvbmZpZy5kZWJ1Z2AgYW5kIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhbnkgb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgb3B0aW9ucyB3aGlsZSBJJ20gYXQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzcxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTI6MTYuMDIyMDcxODI3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHRcXHQgIG92ZXJoZWFkIGluIHRoZSBwYWdlIGZhdWx0IHBhdGguXFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxcbiAzMjM6XFx0XFxuIDMyNDpcXHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xcbiAzMjU6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1xcXCJcXG4gMzI2OlxcdFxcdGRlZmF1bHQgblxcbiAzMjc6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gMzI4OlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiAzMjk6XFx0XFx0ZGVwZW5kcyBvbiAhREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVXFxuIDMzMDpcXHRcXHRzZWxlY3QgQ09ERV9UQUdHSU5HXFxuIDMzMTpcXHRcXHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cXG4gMzMyOlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4gMzMzOlxcdFxcdGhlbHBcXG4gMzM0OlxcdFxcdCAgVHJhY2sgYWxsb2NhdGlvbiBzb3VyY2UgY29kZSBhbmQgcmVjb3JkIHRvdGFsIGFsbG9jYXRpb24gc2l6ZVxcbiAzMzU6XFx0XFx0ICBpbml0aWF0ZWQgYXQgdGhhdCBjb2RlIGxvY2F0aW9uLiBUaGUgbWVjaGFuaXNtIGNhbiBiZSB1c2VkIHRvIHRyYWNrXFxuIDMzNjpcXHRcXHQgIG1lbW9yeSBsZWFrcyB3aXRoIGEgbG93IHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgaW1wYWN0LlxcbiAzMzc6XFx0XFxuIDMzODpcXHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcXG4gMzM5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYnkgZGVmYXVsdFxcXCJcXG4gMzQwOlxcdFxcdGRlZmF1bHQgeVxcbiAzNDE6XFx0XFx0ZGVwZW5kcyBvbiBNRU1fQUxMT0NfUFJPRklMSU5HXFxuIDM0MjpcXHRcXG4gMzQzOlxcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxuIDM0NDpcXHRcXHRib29sIFxcXCJNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxlciBkZWJ1Z2dpbmdcXFwiXFxuIDM0NTpcXHRcXHRkZWZhdWx0IG5cXG4gMzQ2OlxcdFxcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xcbiAzNDc6XFx0XFx0c2VsZWN0IE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxuIDM0ODpcXHRcXHRoZWxwXFxuIDM0OTpcXHRcXHQgIEFkZHMgd2FybmluZ3Mgd2l0aCBoZWxwZnVsIGVycm9yIG1lc3NhZ2VzIGZvciBtZW1vcnkgYWxsb2NhdGlvblxcbiAzNTA6XFx0XFx0ICBwcm9maWxpbmcuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjEyOjE2LjAyMjIwNjc4N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTU0MzYxOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTbGFiIEFsbG9jYXRpb24gZm9yIE1lbW9yeSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBzbGFiIGFsbG9jYXRvciBjb2RlLCBhbmQgcmlnaHQgb2ZmIHRoZSBiYXQsIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBhbmQgYE1FTUNHYCBzZWVtIGxpa2Ugc29saWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGVuYWJsZSBmb3IgdGhpcyBhbmFseXNpcy4gTm93LCB0cmFjaW5nIHRoZSBjYWxsIHN0YWNrLCBpdCBsb29rcyBsaWtlIGBvYmpfZXh0c19hbGxvY19zaXplYCBpcyBjYWxsZWQgYnkgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBUaGlzIGBhbGxvY19zbGFiX29ial9leHRzYCBmdW5jdGlvbiBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9va2AgYW5kIGBhY2NvdW50X3NsYWJgLiBUaGVuIGBhY2NvdW50X3NsYWJgIGlzIGNhbGxlZCBieSBgYWxsb2NhdGVfc2xhYmAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYF9fX3NsYWJfYWxsb2NgLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBgX19zbGFiX2FsbG9jYCwgdGhlbiBgc2xhYl9hbGxvY19ub2RlYCwgdWx0aW1hdGVseSBiZWluZyBjYWxsZWQgYnkgYGttZW1fY2FjaGVfYWxsb2NgIGFuZCBga21hbGxvY2AuXG5cblRoYXQgd2hvbGUgY2hhaW4gbG9va3MgbGlrZSBhIHByZXR0eSBob3QgcGF0aCwgd2hpY2ggbWVhbnMgYW55IHBlcmZvcm1hbmNlIGdhaW5zIGhlcmUgY291bGQgYmUgc2lnbmlmaWNhbnQuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYHNsYWJfb2JqX2V4dHMoc2xhYilgIGlzIGZhbHNlLiBUaGF0IGhhcHBlbnMgd2hlbiBhIG5ldyBzbGFiIGlzIGFsbG9jYXRlZCBvciB3aGVuIGl0J3MgZmlyc3QgbmVlZGVkLiBTbyB0aGlzIGlzIG5vdCBhIGhvdCBwYXRoLCB0aGlzIGlzIGEgcGF0aCB0aGF0IG9ubHkgYWZmZWN0cyBwZXJmb3JtYW5jZSB0aGUgZmlyc3QgdGltZSBhIHNsYWIgaXMgY3JlYXRlZCwgb3Igd2hlbiB0aGUgZmlyc3Qgc2xhYiBpcyBjcmVhdGVkLlxuXG5UaGUgcGF0Y2ggbm90ZXMgdGhhdCB0aGUgYXJyYXkgYmVpbmcgYWxsb2NhdGVkIGlzIGBrbWFsbG9jKClgJ2QuIFRoZSBrZXkgaXNzdWUgYXBwZWFycyB0byBiZSBwb3RlbnRpYWwgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGlmIHRoZSBhcnJheSBjb21lcyBmcm9tIHRoZSBzYW1lIG9yIGEgc21hbGxlciBrbWFsbG9jIGNhY2hlIHRoYW4gdGhlIHNsYWIgaXRzZWxmLiBUaGlzIGNhbiBsZWFkIHRvIHBpbm5pbmcgdGhlIHNsYWJzIGZvcmV2ZXIgYW5kIHJlY3Vyc2lvbiB2aWEgYGZyZWVfc2xhYl9vYmpfZXh0cygpYCwgYGtmcmVlKClgLCBhbmQgdGhlbiBgZGlzY2FyZF9zbGFiKClgLiBUaGUgc29sdXRpb24gc3VnZ2VzdGVkIGluIHRoZSBwYXRjaCBpcyB0byBmb3JjZSB0aGUgYWxsb2NhdGlvbiBpbnRvIGEgc3RyaWN0bHkgbGFyZ2VyIGNhY2hlLCB0byBlbnN1cmUgdGhlIHJlbGF0aW9uc2hpcCBzdGF5cyBhY3ljbGljLiBNYWtlcyBzZW5zZSAtIHByZXZlbnRpbmcgdGhhdCBjaXJjdWxhciBkZXBlbmRlbmN5IGlzIGNyaXRpY2FsIGZvciBjbGVhbnVwIGFuZCBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcy5cblxuR2l2ZW4gdGhhdCBgb2JqX2V4dHNfYWxsb2Nfc2l6ZWAgaXMgc3RhdGljIGlubGluZSwgbXkgYXR0ZW50aW9uIHNob3VsZCBzaGlmdCB0byBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaW50ZXJlc3QuIExldCdzIHNlZSBpZiBpdCdzIGV4cG9ydGVkIG9yIGlmIGl0IGNhbiBiZSBmb2N1c2VkIG9uIG1vcmUgc3BlY2lmaWNhbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ2NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjEyOjIyLjU3NjU3MTg1NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzOTI4MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3NsYWJfb2JqX2V4dHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0yMTM2PXN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjE2MS1cXG5tbS9zbHViLmM6MjE2MjppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIxNjMtXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjIzNj1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjI3NS0gKi9cXG5tbS9zbHViLmM6MjI3NjpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtMjI3Ny17XFxuLS1cXG5tbS9zbHViLmM9MjMyNz1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIzMzAtXFxubW0vc2x1Yi5jOjIzMzE6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMzMi1cXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjMzNz1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjM0MC1cXG5tbS9zbHViLmM6MjM0MTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjM0Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmM9MjM1MT1wcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMjM1NC1cXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmM6MjM1NTpcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxubW0vc2x1Yi5jLTIzNTYtXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCIlcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcXFxuXFxcIixcXG4tLVxcbm1tL3NsdWIuYz0zMzU4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcXG4tLVxcbm1tL3NsdWIuYy0zMzY0LVxcdFxcdFxcdCFzbGFiX29ial9leHRzKHNsYWIpKVxcbm1tL3NsdWIuYzozMzY1OlxcdFxcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxcbm1tL3NsdWIuYy0zMzY2LVxcdFxcdFxcdFxcdCAgICBhbGxvY19mbGFncyB8IFNMQUJfQUxMT0NfTkVXX1NMQUIpO1xcbi0tXFxubW0vc2x1Yi5jPTMzODc9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zNDM3LVxcdCAqL1xcbm1tL3NsdWIuYzozNDM4OlxcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XFxubW0vc2x1Yi5jLTM0MzktXFx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTI6MjIuODIwNTEwMzUyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTYwMzc1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgU2xhYiBPYmplY3QgRXh0ZW5zaW9ucyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIGRlZmluZWQgKnR3aWNlKj8gVGhhdCdzIHVudXN1YWwuIE15IGZpcnN0IHRob3VnaHQgaXMgYSBzaW1wbGUgbWlzdGFrZSwgbWF5YmUgYSByZWR1bmRhbnQgZGVjbGFyYXRpb24uIEJ1dCB3YWl0Li4uIEFoYSEgQWZ0ZXIgYSBjbG9zZXIgbG9vaywgaXQgc2VlbXMgb25lIGlzIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24sIGFuZCB0aGUgb3RoZXIgaXMgYSBkdW1teSBvciBzdHViIGRlZmluaXRpb24gdG8gYmUgdXNlZCB3aGVuIGBDT05GSUdfU0xBQl9PQkpfRVhUYCBpcyBkaXNhYmxlZC4gVGhhdCdzIGEgY2xhc3NpYyBwcmVwcm9jZXNzb3IgdHJpY2sgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBmb2xsb3dpbmcgdGhlIGNvcnJlY3QgZXhlY3V0aW9uIHBhdGguIExldCBtZSBnbyBiYWNrIHRvIHdoZXJlIGl0IGlzIGRlZmluZWQsIGxldCBtZSBzZWUuLi4gQWgsIHRoZXJlIGl0IGlzISBJbiBgbW0vc2x1Yi5jYCwgYXJvdW5kIGxpbmUgMjE2MiwgSSBzZWUgdGhlIGAjaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVGAgY29uZGl0aW9uYWwuIFNvLCB0aGUgZHVtbXkgZGVmaW5pdGlvbiBtdXN0IGJlIG91dHNpZGUgdGhhdCBibG9jay4gTm93LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgd2hhdCB0aGF0IGR1bW15IGZ1bmN0aW9uIGRvZXMsIGxldCBtZSBjaGVjayBsaW5lIDIzMzEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTczLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTI6MjYuNzM2NTUxMTczWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MjY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zbHViLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMyNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjMyNTpcXHR9XFxuMjMyNjpcXHRcXG4yMzI3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuMjMyODpcXHR7XFxuMjMyOTpcXHR9XFxuMjMzMDpcXHRcXG4yMzMxOlxcdHN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuMjMzMjpcXHRcXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuMjMzMzpcXHR7XFxuMjMzNDpcXHRcXHRyZXR1cm4gMDtcXG4yMzM1OlxcdH1cXG4yMzM2OlxcdFxcbjIzMzc6XFx0c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbjIzMzg6XFx0e1xcbjIzMzk6XFx0fVxcbjIzNDA6XFx0XFxuMjM0MTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4yMzQyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4yMzQzOlxcdHtcXG4yMzQ0OlxcdH1cXG4yMzQ1OlxcdFxcbjIzNDY6XFx0I2VuZGlmIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cXG4yMzQ3OlxcdFxcbjIzNDg6XFx0I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxuMjM0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTI6MjYuNzM2OTE1NzAzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3Njg1ODMwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyB0aHJvdWdoIHRoaXMgY29kZSwgYW5kIEkndmUgemVyb2VkIGluIG9uIHRoZSBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgZnVuY3Rpb24uIFJpZ2h0LCBsaW5lIDIzMzEsIHRoYXQncyBqdXN0IGEgZHVtbXkgZGVmaW5pdGlvbi4gVGhlICphY3R1YWwqIGRlZmluaXRpb24gSSdtIGludGVyZXN0ZWQgaW4gaXMgYmFjayBvbiBsaW5lIDIxNjIuIEdvb2QsIGdvdCB0aGF0LiBOb3csIEkgc2VlIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzbid0IGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgaGFuZHkuIFRoYXQgbWVhbnMgSSBjYW4gcHJvYmFibHkgdHJhY2UgaXRzIHVzYWdlIHByZXR0eSBlZmZlY3RpdmVseS4gSG9sZCBvbi4uLiBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLiBJIHJlY2FsbCBzZWVpbmcgdGhpcyBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgbW0vbWVtY29udHJvbC5jYC4gWWVwLCBoZXJlIHdlIGdvLCBsaW5lIDM1MzcgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhhdCBjYWxsIHNpdGUgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NDAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjEyOjMwLjUwNTUwMDkyOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzI4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM1MzA6XFx0XFx0LypcXG4zNTMxOlxcdFxcdCAqIEZvciBlYWNoIGFjY291bnRlZCBvYmplY3QgdGhlcmUgaXMgYW4gZXh0cmEgc3BhY2Ugd2hpY2ggaXMgdXNlZFxcbjM1MzI6XFx0XFx0ICogdG8gc3RvcmUgb2JqX2Nncm91cCBtZW1iZXJzaGlwLiBDaGFyZ2UgaXQgdG9vLlxcbjM1MzM6XFx0XFx0ICovXFxuMzUzNDpcXHRcXHRyZXR1cm4gcy1cXHUwMDNlc2l6ZSArIHNpemVvZihzdHJ1Y3Qgb2JqX2Nncm91cCAqKTtcXG4zNTM1OlxcdH1cXG4zNTM2OlxcdFxcbjM1Mzc6XFx0Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4zNTM4OlxcdFxcdFxcdFxcdFxcdCAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBzbGFiX2FsbG9jX2ZsYWdzLFxcbjM1Mzk6XFx0XFx0XFx0XFx0XFx0ICBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXFxuMzU0MDpcXHR7XFxuMzU0MTpcXHRcXHRzaXplX3Qgb2JqX3NpemUgPSBvYmpfZnVsbF9zaXplKHMpO1xcbjM1NDI6XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbjM1NDM6XFx0XFx0c3RydWN0IHNsYWIgKnNsYWI7XFxuMzU0NDpcXHRcXHR1bnNpZ25lZCBsb25nIG9mZjtcXG4zNTQ1OlxcdFxcdHNpemVfdCBpO1xcbjM1NDY6XFx0XFxuMzU0NzpcXHRcXHQvKlxcbjM1NDg6XFx0XFx0ICogVGhlIG9idGFpbmVkIG9iamNnIHBvaW50ZXIgaXMgc2FmZSB0byB1c2Ugd2l0aGluIHRoZSBjdXJyZW50IHNjb3BlLFxcbjM1NDk6XFx0XFx0ICogZGVmaW5lZCBieSBjdXJyZW50IHRhc2sgb3Igc2V0X2FjdGl2ZV9tZW1jZygpIHBhaXIuXFxuMzU1MDpcXHRcXHQgKiBvYmpfY2dyb3VwX2dldCgpIGlzIHVzZWQgdG8gZ2V0IGEgcGVybWFuZW50IHJlZmVyZW5jZS5cXG4zNTUxOlxcdFxcdCAqL1xcbjM1NTI6XFx0XFx0b2JqY2cgPSBjdXJyZW50X29ial9jZ3JvdXAoKTtcXG4zNTUzOlxcdFxcdGlmICghb2JqY2cgfHwgb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG4zNTU0OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjM1NTU6XFx0XFxuMzU1NjpcXHRcXHQvKlxcbjM1NTc6XFx0XFx0ICogc2xhYl9hbGxvY19ub2RlKCkgYXZvaWRzIHRoZSBOVUxMIGNoZWNrLCBzbyB3ZSBtaWdodCBiZSBjYWxsZWQgd2l0aCBhXFxuMzU1ODpcXHRcXHQgKiBzaW5nbGUgTlVMTCBvYmplY3QuIGttZW1fY2FjaGVfYWxsb2NfYnVsaygpIGFib3J0cyBpZiBpdCBjYW4ndCBmaWxsXFxuMzU1OTpcXHRcXHQgKiB0aGUgd2hvbGUgcmVxdWVzdGVkIHNpemUuXFxuMzU2MDpcXHRcXHQgKiByZXR1cm4gc3VjY2VzcyBhcyB0aGVyZSdzIG5vdGhpbmcgdG8gZnJlZSBiYWNrXFxuMzU2MTpcXHRcXHQgKi9cXG4zNTYyOlxcdFxcdGlmICh1bmxpa2VseSgqcCA9PSBOVUxMKSlcXG4zNTYzOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjM1NjQ6XFx0XFxuMzU2NTpcXHRcXHRmbGFncyBcXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xcbjM1NjY6XFx0XFxuMzU2NzpcXHRcXHRpZiAobHJ1KSB7XFxuMzU2ODpcXHRcXHRcXHRpbnQgcmV0O1xcbjM1Njk6XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjM1NzA6XFx0XFxuMzU3MTpcXHRcXHRcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xcbjM1NzI6XFx0XFx0XFx0cmV0ID0gbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZmxhZ3MpO1xcbjM1NzM6XFx0XFx0XFx0Y3NzX3B1dChcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcyk7XFxuMzU3NDpcXHRcXG4zNTc1OlxcdFxcdFxcdGlmIChyZXQpXFxuMzU3NjpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMzU3NzpcXHRcXHR9XFxuMzU3ODpcXHRcXG4zNTc5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzaXplOyBpKyspIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDM6MTI6MzAuNTA1Nzc1ODA5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzMzUzNjg5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNMVUIgU2xhYiBFeHRlbnNpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBoZXJlJ3MgbXkgYnJlYWtkb3duLiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlOyBpdCdzIGNhbGxlZCBkdXJpbmcgc2xhYiBhbGxvY2F0aW9uIGFuZCBhbHNvIHdpdGhpbiB0aGUgbWVtY2cgcG9zdC1hbGxvYyBob29rLCBtYWtpbmcgaXQgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBjaGFuZ2UgbW9kaWZpZXMgYG9ial9leHRzX2FsbG9jX3NpemVgLCB3aGljaCBpcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24sIGJ1dCBpdCdzIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIHRoYXQgSSBuZWVkIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBJIGJyaWVmbHkgY29uc2lkZXJlZCBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAsIGJ1dCBsZXQncyBzdGljayB3aXRoIHRoZSBtYWluIGZ1bmN0aW9uIGZvciBub3cuXG5cbkkgY29uZmlybWVkIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uIGRlZmluZWQgaW4gYG1tL3NsdWIuY2AgYW5kIGRlY2xhcmVkIGluIGBtbS9zbGFiLmhgLiBJdCdzIG5vdCBleHBvcnRlZCwgbWVhbmluZyBpdCdzIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIHRvIGtlcm5lbCBtb2R1bGVzLCBidXQgc3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IHRhcmdldCBpdC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgdGVjaG5pY2FsbHkgdGFyZ2V0YWJsZSwgYnV0IHRhcmdldGluZyBhIGdsb2JhbCBmdW5jdGlvbiBpcyB1c3VhbGx5IGJldHRlciBmb3IgY2xhcml0eS4gU28sIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyB0aGUgdGFyZ2V0LiBUaGUgaW5saW5lIG5hdHVyZSBvZiBgb2JqX2V4dHNfYWxsb2Nfc2l6ZWAgbWVhbnMgaXQgd29uJ3QgYXBwZWFyIGluIHRoZSBzeW1ib2wgdGFibGUuXG5cbk1vdmluZyBvbiB0byB0aGUgY29uZmlndXJhdGlvbiwgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGFuZCBgTUVNQ0dgIHNlZW0gcmVsZXZhbnQgc2luY2UgdGhleSBpbmRpcmVjdGx5IHNlbGVjdCBgU0xBQl9PQkpfRVhUYC4gV2UgbmVlZCB0byBpbmNsdWRlIHRoZW0uIEEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgc3VmZmljaWVudCB0byBlbmFibGUgYFNMQUJfT0JKX0VYVGAsIHRob3VnaCBgTUVNQ0dgIGFsc28gZG9lcyBpdCwgc28gbGV0J3MgaW5jbHVkZSBib3RoIGZvciB0aG9yb3VnaG5lc3MuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIGNvZGUgbW9kaWZpZXMgaG93IHRoZSBgc2xhYm9ial9leHRgIGFycmF5IHNpemUgaXMgY2FsY3VsYXRlZCwgc3BlY2lmaWNhbGx5IHRoZSBjaGVjayB0aGF0IGRldGVybWluZXMgaWYgd2UgbmVlZCBhbiBleHRlbnNpb24uIFRoaXMgcmV2aXNlZCBsb2dpYyBwcmV2ZW50cyBhIHBvdGVudGlhbCBjeWNsaWMgZGVwZW5kZW5jeSBpc3N1ZSB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgaXQgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjb3VsZCByZXZlYWwgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcy5cblxuU28sIGluIHN1bW1hcnksIGhlcmUgYXJlIG15IGRlY2lzaW9uczpcblxuKiAgICoqRm9jdXMgU3ltYm9sOioqIGBhbGxvY19zbGFiX29ial9leHRzYFxuKiAgICoqRW5hYmxlIENvbmZpZ3M6KiogYE1FTV9BTExPQ19QUk9GSUxJTkdgLCBgTUVNQ0dgXG5cbkknbSByZWFkeSB0byBtb3ZlIGZvcndhcmQgYW5kIHVzZSB0aGUgc2V0LXJlc3VsdHMgdG9vbCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODg4LCJPdXRwdXRUb2tlbnMiOjEwMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAzOjEyOjM5Ljg0MTE0NzM2MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTcwOTIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNpemUgY2FsY3VsYXRpb24gZm9yIHRoZSBzbGFib2JqX2V4dCBhcnJheSBpbiB0aGUgU0xVQiBhbGxvY2F0b3IgdG8gcHJldmVudCBhIGN5Y2xpYyBkZXBlbmRlbmN5IGJldHdlZW4ga21hbGxvYyBjYWNoZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgc2xhYiBleHRlbnNpb25zIGFyZSBhbGxvY2F0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNpemUgY2FsY3VsYXRpb24gZm9yIHRoZSBzbGFib2JqX2V4dCBhcnJheSBpbiB0aGUgU0xVQiBhbGxvY2F0b3IgdG8gcHJldmVudCBhIGN5Y2xpYyBkZXBlbmRlbmN5IGJldHdlZW4ga21hbGxvYyBjYWNoZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgc2xhYiBleHRlbnNpb25zIGFyZSBhbGxvY2F0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowtd7st[1] Phase: Succeeded StartedAt: 2026-06-30 03:13:42 +0000 UTC FinishedAt: 2026-06-30 03:13:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-30 03:13:42 +0000 UTC FinishedAt: 2026-06-30 03:13:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2] Phase: Succeeded StartedAt: 2026-06-30 03:13:42 +0000 UTC FinishedAt: 2026-06-30 07:28:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 03:13:42 +0000 UTC FinishedAt: 2026-06-30 07:28:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 03:13:42 +0000 UTC FinishedAt: 2026-06-30 03:14:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 03:13:42 +0000 UTC FinishedAt: 2026-06-30 03:13:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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-workflowtd7st/series-workflowtd7st-convert-artifact-4138361462/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 03:14:03 +0000 UTC FinishedAt: 2026-06-30 03:47:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 03:14:03 +0000 UTC FinishedAt: 2026-06-30 03:47:02 +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:*660ee7ff-2dff-410f-9f25-eb39d3e61ad8,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-workflowtd7st/series-workflowtd7st-convert-artifact-4138361462/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": "e78132cc-3f0f-4da7-857e-dcbecb893e54", "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-workflowtd7st/series-workflowtd7st-build-action-705723788/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 03:14:03 +0000 UTC FinishedAt: 2026-06-30 03:46:37 +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:*660ee7ff-2dff-410f-9f25-eb39d3e61ad8,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-workflowtd7st/series-workflowtd7st-convert-artifact-4138361462/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": "e78132cc-3f0f-4da7-857e-dcbecb893e54", "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-workflowtd7st/series-workflowtd7st-build-action-705723788/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 03:47:02 +0000 UTC FinishedAt: 2026-06-30 03:47:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 03:47:02 +0000 UTC FinishedAt: 2026-06-30 03:47:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 03:47:02 +0000 UTC FinishedAt: 2026-06-30 03:47:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 03:47:02 +0000 UTC FinishedAt: 2026-06-30 03:47:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-workflowtd7st/series-workflowtd7st-convert-artifact-1007321353/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 03:47:22 +0000 UTC FinishedAt: 2026-06-30 03:50:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 03:47:22 +0000 UTC FinishedAt: 2026-06-30 03:49:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e78132cc-3f0f-4da7-857e-dcbecb893e54,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-workflowtd7st/series-workflowtd7st-build-action-705723788/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-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 03:50:03 +0000 UTC FinishedAt: 2026-06-30 03:50:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 03:50:03 +0000 UTC FinishedAt: 2026-06-30 03:50:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 03:50:03 +0000 UTC FinishedAt: 2026-06-30 04:17:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 03:50:03 +0000 UTC FinishedAt: 2026-06-30 04:17:42 +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:*660ee7ff-2dff-410f-9f25-eb39d3e61ad8,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-workflowtd7st/series-workflowtd7st-convert-artifact-1007321353/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": "0fd2fb1d-db3a-4c4b-8d82-267af4a112a2", "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-workflowtd7st/series-workflowtd7st-build-action-2446820069/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 03:50:03 +0000 UTC FinishedAt: 2026-06-30 04:17:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*660ee7ff-2dff-410f-9f25-eb39d3e61ad8,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-workflowtd7st/series-workflowtd7st-convert-artifact-1007321353/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": "0fd2fb1d-db3a-4c4b-8d82-267af4a112a2", "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-workflowtd7st/series-workflowtd7st-build-action-2446820069/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 04:17:42 +0000 UTC FinishedAt: 2026-06-30 04:17:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 04:17:42 +0000 UTC FinishedAt: 2026-06-30 04:17:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 04:17:42 +0000 UTC FinishedAt: 2026-06-30 04:19:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 04:17:42 +0000 UTC FinishedAt: 2026-06-30 04:19:37 +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:*0fd2fb1d-db3a-4c4b-8d82-267af4a112a2,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-workflowtd7st/series-workflowtd7st-build-action-2446820069/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-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 04:19:47 +0000 UTC FinishedAt: 2026-06-30 07:28:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 04:19:47 +0000 UTC FinishedAt: 2026-06-30 07:28:03 +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":["alloc_slab_obj_exts"],"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:*e78132cc-3f0f-4da7-857e-dcbecb893e54,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0fd2fb1d-db3a-4c4b-8d82-267af4a112a2,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-workflowtd7st/series-workflowtd7st-build-action-705723788/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-workflowtd7st/series-workflowtd7st-build-action-2446820069/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 04:19:47 +0000 UTC FinishedAt: 2026-06-30 04:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 04:19:47 +0000 UTC FinishedAt: 2026-06-30 04:20:44 +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":["alloc_slab_obj_exts"],"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-workflowtd7st/series-workflowtd7st-convert-artifact-131628638/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 04:19:47 +0000 UTC FinishedAt: 2026-06-30 04:19:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 04:19:47 +0000 UTC FinishedAt: 2026-06-30 04:19:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 04:19:48 +0000 UTC FinishedAt: 2026-06-30 04:19:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 04:21:22 +0000 UTC FinishedAt: 2026-06-30 07:28:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtd7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"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":["alloc_slab_obj_exts"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"f529acf5-1b21-404c-a114-bfb3dea06505","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-06-30 04:21:22 +0000 UTC FinishedAt: 2026-06-30 07:27:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e78132cc-3f0f-4da7-857e-dcbecb893e54,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0fd2fb1d-db3a-4c4b-8d82-267af4a112a2,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-workflowtd7st/series-workflowtd7st-build-action-705723788/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-workflowtd7st/series-workflowtd7st-build-action-2446820069/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-workflowtd7st/series-workflowtd7st-convert-artifact-131628638/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,}