Name: series-workflow4242m Phase: Succeeded StartedAt: 2026-09-03 13:22:54 +0000 UTC FinishedAt: 2026-09-03 17:11:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[0] Phase: Succeeded StartedAt: 2026-09-03 13:22:54 +0000 UTC FinishedAt: 2026-09-03 13:28:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 13:22:54 +0000 UTC FinishedAt: 2026-09-03 13:28:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLUB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLUB" ], "series_id": "b9ad02f1-4214-4707-89db-e2112cee4e67" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__slab_try_return_freelist", "__refill_objects_node", "refill_objects", "refill_sheaf", "kmem_cache_prefill_sheaf", "kmem_cache_refill_sheaf", "kmem_cache_return_sheaf" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMVUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdCYjMzQ7LAogICAgJiMzNDtfX3JlZmlsbF9vYmplY3RzX25vZGUmIzM0OywKICAgICYjMzQ7cmVmaWxsX29iamVjdHMmIzM0OywKICAgICYjMzQ7cmVmaWxsX3NoZWFmJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZiYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX3JlZmlsbF9zaGVhZiYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX3JldHVybl9zaGVhZiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFNMVUIgYWxsb2NhdG9yIGludGVybmFsIGxvY2tpbmcgYW5kIHBhcnRpYWwgbGlzdCBtYW5hZ2VtZW50IGluIGBtbS9zbHViLmNgIChgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYCkuIFNwZWNpZmljYWxseSwgaXQgYWNxdWlyZXMgdGhlIG5vZGUgbGlzdF9sb2NrIGFuZCBhZGRzIHRoZSBzbGFiIHRvIHRoZSBwYXJ0aWFsIGxpc3QgZGlyZWN0bHkgaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBpbnN0ZWFkIG9mIHJlLWFkZGluZyBpdCB0byB0aGUgbG9jYWwgYHBjLnNsYWJzYCBsaXN0IGluIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgLlxuXG5UaGVzZSBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IGFmZmVjdCBTTFVCIGludGVybmFsIHN0YXRlLCBsb2NraW5nLCBhbmQgZnJlZWxpc3QvcGFydGlhbCBsaXN0IHRyYWNraW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKHN1Y2ggYXMgbG9jayBvcmRlciBpbnZlcnNpb25zLCBsaXN0IGNvcnJ1cHRpb24sIGRvdWJsZS1mcmVlLCBvciBzbGFiIG1ldGFkYXRhIGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBjaGVja3MuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGQgYWNjZXNzZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZyZWVsaXN0IHJldHVybiBhbmQgcGFydGlhbCBzbGFiIGxpc3QgbWFuYWdlbWVudCBsb2dpYyB1bmRlciBuLVx1MDAzZWxpc3RfbG9jayBpbiBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdCgpIGFuZCBfX3JlZmlsbF9vYmplY3RzX25vZGUoKSBpbiB0aGUgU0xVQiBhbGxvY2F0b3IgKG1tL3NsdWIuYykuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBTTFVCIGJ1bGsgYWxsb2NhdGlvbiBhbmQgc2hlYWYgcmVmaWxsaW5nIHBhdGhzLCB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgY3JpdGljYWwgZm9yIG1lbW9yeSBzYWZldHkgYW5kIGxvY2sgY29ycmVjdG5lc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MThjY2JhZmQ1OWJiYzY3NTc1ZWYwNDdkMjRmNDZkZDdkZjBlOTQzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMzoyNjozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcbmluZGV4IGY5YjU2Y2I0MzllNzAuLjVjYmJhY2I4ZWUzMmYgMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsdWIuY1xuQEAgLTU2ODQsNiAmIzQzOzU2ODQsOCBAQCBzdGF0aWMgYm9vbCBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHRcdFx0XHQgICAgICAgdm9pZCAqaGVhZCwgaW50IGNudClcbiB7XG4gXHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7XG4mIzQzO1x0c3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0b2xkLmZyZWVsaXN0ID0gc2xhYi1cdTAwM2VmcmVlbGlzdDtcbiBcdG9sZC5jb3VudGVycyA9IHNsYWItXHUwMDNlY291bnRlcnM7XG5AQCAtNTY5NSw5ICYjNDM7NTY5NywxNiBAQCBzdGF0aWMgYm9vbCBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHRuZXcuY291bnRlcnMgPSBvbGQuY291bnRlcnM7XG4gXHRuZXcuaW51c2UgLT0gY250O1xuIFxuLVx0aWYgKCFzbGFiX3VwZGF0ZV9mcmVlbGlzdChzLCBzbGFiLCBcdTAwMjZvbGQsIFx1MDAyNm5ldywgXCYjMzQ7X19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RcJiMzNDspKVxuJiM0MztcdG4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzbGFiX3VwZGF0ZV9mcmVlbGlzdChzLCBzbGFiLCBcdTAwMjZvbGQsIFx1MDAyNm5ldywgXCYjMzQ7X19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RcJiMzNDspKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4gXG4mIzQzO1x0YWRkX3BhcnRpYWwobiwgc2xhYiwgQUREX1RPX1RBSUwpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbkBAIC03Mjk2LDEwICYjNDM7NzMwNSw4IEBAIF9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pXG4gXHRcdFx0dm9pZCAqaGVhZCA9IG9iamVjdDtcbiBcdFx0XHR2b2lkICp0YWlsO1xuIFxuLVx0XHRcdGlmIChfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzLCBzbGFiLCBoZWFkLCBjb3VudCkpIHtcbi1cdFx0XHRcdGxpc3RfYWRkKFx1MDAyNnNsYWItXHUwMDNlc2xhYl9saXN0LCBcdTAwMjZwYy5zbGFicyk7XG4mIzQzO1x0XHRcdGlmIChfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzLCBzbGFiLCBoZWFkLCBjb3VudCkpXG4gXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4gXG4gXHRcdFx0ZG8ge1xuIFx0XHRcdFx0dGFpbCA9IG9iamVjdDtcbkBAIC03MzEyLDcgJiM0Mzs3MzE5LDcgQEAgX19yZWZpbGxfb2JqZWN0c19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWlcbiBcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmICghbGlzdF9lbXB0eShcdTAwMjZwYy5zbGFicykpIHtcbiYjNDM7XHRpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoXHUwMDI2cGMuc2xhYnMpKSkge1xuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuIFxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsYWIsIFx1MDAyNnBjLnNsYWJzLCBzbGFiX2xpc3QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0xVQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0JiMzNDssCiAgICAmIzM0O19fcmVmaWxsX29iamVjdHNfbm9kZSYjMzQ7LAogICAgJiMzNDtyZWZpbGxfb2JqZWN0cyYjMzQ7LAogICAgJiMzNDtyZWZpbGxfc2hlYWYmIzM0OywKICAgICYjMzQ7a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfcmVmaWxsX3NoZWFmJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfcmV0dXJuX3NoZWFmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmcmVlbGlzdCByZXR1cm4gYW5kIHBhcnRpYWwgc2xhYiBsaXN0IG1hbmFnZW1lbnQgbG9naWMgdW5kZXIgbi1cdTAwM2VsaXN0X2xvY2sgaW4gX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3QoKSBhbmQgX19yZWZpbGxfb2JqZWN0c19ub2RlKCkgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIChtbS9zbHViLmMpLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgU0xVQiBidWxrIGFsbG9jYXRpb24gYW5kIHNoZWFmIHJlZmlsbGluZyBwYXRocywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGNyaXRpY2FsIGZvciBtZW1vcnkgc2FmZXR5IGFuZCBsb2NrIGNvcnJlY3RuZXNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDE4Y2NiYWZkNTliYmM2NzU3NWVmMDQ3ZDI0ZjQ2ZGQ3ZGYwZTk0MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTM6MjY6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggZjliNTZjYjQzOWU3MC4uNWNiYmFjYjhlZTMyZiAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsdWIuYwpAQCAtNTY4NCw2ICYjNDM7NTY4NCw4IEBAIHN0YXRpYyBib29sIF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwKIAkJCQkgICAgICAgdm9pZCAqaGVhZCwgaW50IGNudCkKIHsKIAlzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7CiYjNDM7CXN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm47CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlvbGQuZnJlZWxpc3QgPSBzbGFiLSZndDtmcmVlbGlzdDsKIAlvbGQuY291bnRlcnMgPSBzbGFiLSZndDtjb3VudGVyczsKQEAgLTU2OTUsOSAmIzQzOzU2OTcsMTYgQEAgc3RhdGljIGJvb2wgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLAogCW5ldy5jb3VudGVycyA9IG9sZC5jb3VudGVyczsKIAluZXcuaW51c2UgLT0gY250OwogCi0JaWYgKCFzbGFiX3VwZGF0ZV9mcmVlbGlzdChzLCBzbGFiLCAmYW1wO29sZCwgJmFtcDtuZXcsICYjMzQ7X19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3QmIzM0OykpCiYjNDM7CW4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWlmICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgJmFtcDtvbGQsICZhbXA7bmV3LCAmIzM0O19fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0JiMzNDspKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiAJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCiYjNDM7CWFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwogCXJldHVybiB0cnVlOwogfQogCkBAIC03Mjk2LDEwICYjNDM7NzMwNSw4IEBAIF9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pCiAJCQl2b2lkICpoZWFkID0gb2JqZWN0OwogCQkJdm9pZCAqdGFpbDsKIAotCQkJaWYgKF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHMsIHNsYWIsIGhlYWQsIGNvdW50KSkgewotCQkJCWxpc3RfYWRkKCZhbXA7c2xhYi0mZ3Q7c2xhYl9saXN0LCAmYW1wO3BjLnNsYWJzKTsKJiM0MzsJCQlpZiAoX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qocywgc2xhYiwgaGVhZCwgY291bnQpKQogCQkJCWJyZWFrOwotCQkJfQogCiAJCQlkbyB7CiAJCQkJdGFpbCA9IG9iamVjdDsKQEAgLTczMTIsNyAmIzQzOzczMTksNyBAQCBfX3JlZmlsbF9vYmplY3RzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaQogCQkJYnJlYWs7CiAJfQogCi0JaWYgKCFsaXN0X2VtcHR5KCZhbXA7cGMuc2xhYnMpKSB7CiYjNDM7CWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmYW1wO3BjLnNsYWJzKSkpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsYWIsICZhbXA7cGMuc2xhYnMsIHNsYWJfbGlzdCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgc2x1Yi5jIFBhdGNoKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgbW0vc2x1Yi5jYCBwYXRjaC4gTXkgaW5pdGlhbCBtb3ZlIGlzIGFsd2F5cyB0byBnZXQgYSBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZC4gSSYjMzk7bGwgcmVhY2ggZm9yIGVpdGhlciBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiB0aGUgZGlmZiBpdHNlbGYsIG9yIG1heWJlIGZpcmUgdXAgYGdyZXBwZXJgIGlmIEkganVzdCB3YW50IHRvIHF1aWNrbHkgc3BvdCB0aGUga2V5d29yZHMuIFRoYXQmIzM5O2xsIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgY29udGV4dC4KCk9uY2UgSSBoYXZlIGEgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgY2hhbmdlcywgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzLiBJJiMzOTtsbCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gdGhlIGFyZWEgYXJvdW5kIGxpbmVzIDU2ODQgYW5kIDcyOTYgd2l0aGluIGBtbS9zbHViLmNgLiBUaG9zZSBsaW5lIG51bWJlcnMgYXJlIG9mdGVuIGdvb2QgaW5kaWNhdG9ycyBvZiBzaWduaWZpY2FudCBzdHJ1Y3R1cmFsIGNoYW5nZXMsIG9yIGNvcmUgZnVuY3Rpb24gY2FsbHMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1Njc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU2NzU6XHRcbjU2NzY6XHQvKlxuNTY3NzpcdCAqIFRyeSByZXR1cm5pbmcgKHJlbWFpbmRlciBvZikgdGhlIGZyZWVsaXN0IHRoYXQgd2UganVzdCBkZXRhY2hlZCBmcm9tIHRoZVxuNTY3ODpcdCAqIHNsYWIuICBPcHRpbWlzdGljYWxseSBhc3N1bWUgdGhlIHNsYWIgaXMgc3RpbGwgZnVsbCwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gZmluZFxuNTY3OTpcdCAqIHRoZSB0YWlsIG9mIHRoZSBkZXRhY2hlZCBmcmVlbGlzdC5cbjU2ODA6XHQgKlxuNTY4MTpcdCAqIEZhaWwgaWYgdGhlIHNsYWIgaXNuJiMzOTt0IGZ1bGwgYW55bW9yZSBkdWUgdG8gYSBjb25jdXJyZW50IGZyZWUuXG41NjgyOlx0ICovXG41NjgzOlx0c3RhdGljIGJvb2wgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuNTY4NDpcdFx0XHRcdFx0ICAgICAgIHZvaWQgKmhlYWQsIGludCBjbnQpXG41Njg1Olx0e1xuNTY4NjpcdFx0c3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIG9sZCwgbmV3O1xuNTY4NzpcdFx0c3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbjtcbjU2ODg6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG41Njg5Olx0XG41NjkwOlx0XHRvbGQuZnJlZWxpc3QgPSBzbGFiLVx1MDAzZWZyZWVsaXN0O1xuNTY5MTpcdFx0b2xkLmNvdW50ZXJzID0gc2xhYi1cdTAwM2Vjb3VudGVycztcbjU2OTI6XHRcbjU2OTM6XHRcdGlmIChvbGQuZnJlZWxpc3QpXG41Njk0Olx0XHRcdHJldHVybiBmYWxzZTtcbjU2OTU6XHRcbjU2OTY6XHRcdG5ldy5mcmVlbGlzdCA9IGhlYWQ7XG41Njk3Olx0XHRuZXcuY291bnRlcnMgPSBvbGQuY291bnRlcnM7XG41Njk4Olx0XHRuZXcuaW51c2UgLT0gY250O1xuNTY5OTpcdFxuNTcwMDpcdFx0biA9IGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKTtcbjU3MDE6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG41NzAyOlx0XG41NzAzOlx0XHRpZiAoIXNsYWJfdXBkYXRlX2ZyZWVsaXN0KHMsIHNsYWIsIFx1MDAyNm9sZCwgXHUwMDI2bmV3LCBcJiMzNDtfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFwmIzM0OykpIHtcbjU3MDQ6XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuNTcwNTpcdFx0XHRyZXR1cm4gZmFsc2U7XG41NzA2Olx0XHR9XG41NzA3Olx0XG41NzA4Olx0XHRhZGRfcGFydGlhbChuLCBzbGFiLCBBRERfVE9fVEFJTCk7XG41NzA5Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG41NzEwOlx0XHRyZXR1cm4gdHJ1ZTtcbjU3MTE6XHR9XG41NzEyOlx0XG41NzEzOlx0LypcbjU3MTQ6XHQgKiBTbG93IHBhdGggaGFuZGxpbmcuIFRoaXMgbWF5IHN0aWxsIGJlIGNhbGxlZCBmcmVxdWVudGx5IHNpbmNlIG9iamVjdHNcbjU3MTU6XHQgKiBoYXZlIGEgbG9uZ2VyIGxpZmV0aW1lIHRoYW4gdGhlIGNwdSBzbGFicyBpbiBtb3N0IHByb2Nlc3NpbmcgbG9hZHMuXG41NzE2Olx0ICpcbjU3MTc6XHQgKiBTbyB3ZSBzdGlsbCBhdHRlbXB0IHRvIHJlZHVjZSBjYWNoZSBsaW5lIHVzYWdlLiBKdXN0IHRha2UgdGhlIHNsYWJcbjU3MTg6XHQgKiBsb2NrIGFuZCBmcmVlIHRoZSBpdGVtLiBJZiB0aGVyZSBpcyBubyBhZGRpdGlvbmFsIHBhcnRpYWwgc2xhYlxuNTcxOTpcdCAqIGhhbmRsaW5nIHJlcXVpcmVkIHRoZW4gd2UgY2FuIHJldHVybiBpbW1lZGlhdGVseS5cbjU3MjA6XHQgKi9cbjU3MjE6XHRzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG41NzIyOlx0XHRcdFx0dm9pZCAqaGVhZCwgdm9pZCAqdGFpbCwgaW50IGNudCxcbjU3MjM6XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIpXG41NzI0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQwOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqUGVlcmluZyBpbnRvIHRoZSBTbHViIEFsbG9jYXRvcioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbW0vc2x1Yi5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWltaW5nIGZvciBhcm91bmQgbGluZSA3MjkwLiBJIGtub3cgdGhpcyBjb2RlIHByZXR0eSB3ZWxsLCBzbyBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcm91dGluZXMgb3IgcGVyaGFwcyBzb21lIGNyaXRpY2FsIGxvY2tpbmcgbWVjaGFuaXNtIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgbGluZSB0aWVzIGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIG9iamVjdCBtYW5hZ2VtZW50LiBXaGF0IHNwZWNpZmljIGFzcGVjdHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYXJlIGJlaW5nIGFkZHJlc3NlZCBoZXJlPyBJcyBpdCByZWxhdGVkIHRvIGNhY2hlIGxpbmUgYWxpZ25tZW50LCBOVU1BIG5vZGUgaGFuZGxpbmcsIG9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcyNzA6XHRcdHVuc2lnbmVkIGludCByZWZpbGxlZCA9IDA7XG43MjcxOlx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuNzI3MjpcdFx0dm9pZCAqb2JqZWN0O1xuNzI3MzpcdFxuNzI3NDpcdFx0cGMuZmxhZ3MgPSBnZnA7XG43Mjc1Olx0XHRwYy5taW5fb2JqZWN0cyA9IG1pbjtcbjcyNzY6XHRcdHBjLm1heF9vYmplY3RzID0gbWF4O1xuNzI3NzpcdFxuNzI3ODpcdFx0aWYgKCFnZXRfcGFydGlhbF9ub2RlX2J1bGsocywgbiwgXHUwMDI2cGMsIGFsbG93X3NwaW4pKVxuNzI3OTpcdFx0XHRyZXR1cm4gMDtcbjcyODA6XHRcbjcyODE6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCBzbGFiMiwgXHUwMDI2cGMuc2xhYnMsIHNsYWJfbGlzdCkge1xuNzI4MjpcdFxuNzI4MzpcdFx0XHR1bnNpZ25lZCBpbnQgY291bnQ7XG43Mjg0Olx0XG43Mjg1Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnNsYWItXHUwMDNlc2xhYl9saXN0KTtcbjcyODY6XHRcbjcyODc6XHRcdFx0b2JqZWN0ID0gZ2V0X2ZyZWVsaXN0X25vZnJlZXplKHMsIHNsYWIsIFx1MDAyNmNvdW50KTtcbjcyODg6XHRcbjcyODk6XHRcdFx0d2hpbGUgKGNvdW50IFx1MDAyNlx1MDAyNiByZWZpbGxlZCBcdTAwM2MgbWF4KSB7XG43MjkwOlx0XHRcdFx0cFtyZWZpbGxlZF0gPSBvYmplY3Q7XG43MjkxOlx0XHRcdFx0b2JqZWN0ID0gZ2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCk7XG43MjkyOlx0XHRcdFx0bWF5YmVfd2lwZV9vYmpfZnJlZXB0cihzLCBwW3JlZmlsbGVkXSk7XG43MjkzOlx0XG43Mjk0Olx0XHRcdFx0cmVmaWxsZWQmIzQzOyYjNDM7O1xuNzI5NTpcdFx0XHRcdGNvdW50LS07XG43Mjk2Olx0XHRcdH1cbjcyOTc6XHRcbjcyOTg6XHRcdFx0LypcbjcyOTk6XHRcdFx0ICogRnJlZWxpc3QgaGFkIG1vcmUgb2JqZWN0cyB0aGFuIHdlIGNhbiBhY2NvbW1vZGF0ZSwgd2UgbmVlZCB0b1xuNzMwMDpcdFx0XHQgKiBmcmVlIHRoZW0gYmFjay4gRmlyc3Qgd2UgdHJ5IHRvIGJlIG9wdGltaXN0aWMgYW5kIGFzc3VtZSB0aGVcbjczMDE6XHRcdFx0ICogc2xhYiBpcyBzdGlsbCBmdWxsIHNpbmNlIHdlIGp1c3QgZGV0YWNoZWQgaXRzIGZyZWVsaXN0LlxuNzMwMjpcdFx0XHQgKiBPdGhlcndpc2Ugd2UgbXVzdCBmaW5kIHRoZSB0YWlsIG9iamVjdC5cbjczMDM6XHRcdFx0ICovXG43MzA0Olx0XHRcdGlmICh1bmxpa2VseShjb3VudCkpIHtcbjczMDU6XHRcdFx0XHR2b2lkICpoZWFkID0gb2JqZWN0O1xuNzMwNjpcdFx0XHRcdHZvaWQgKnRhaWw7XG43MzA3Olx0XG43MzA4Olx0XHRcdFx0aWYgKF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHMsIHNsYWIsIGhlYWQsIGNvdW50KSlcbjczMDk6XHRcdFx0XHRcdGJyZWFrO1xuNzMxMDpcdFxuNzMxMTpcdFx0XHRcdGRvIHtcbjczMTI6XHRcdFx0XHRcdHRhaWwgPSBvYmplY3Q7XG43MzEzOlx0XHRcdFx0XHRvYmplY3QgPSBnZXRfZnJlZXBvaW50ZXIocywgb2JqZWN0KTtcbjczMTQ6XHRcdFx0XHR9IHdoaWxlIChvYmplY3QpO1xuNzMxNTpcdFx0XHRcdF9fc2xhYl9mcmVlKHMsIHNsYWIsIGhlYWQsIHRhaWwsIGNvdW50LCBfUkVUX0lQXyk7XG43MzE2Olx0XHRcdH1cbjczMTc6XHRcbjczMTg6XHRcdFx0aWYgKHJlZmlsbGVkIFx1MDAzZT0gbWF4KVxuNzMxOTpcdFx0XHRcdGJyZWFrO1xuNzMyMDpcdFx0fVxuNzMyMTpcdFxuNzMyMjpcdFx0aWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFx1MDAyNnBjLnNsYWJzKSkpIHtcbjczMjM6XHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbjczMjQ6XHRcbjczMjU6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzbGFiLCBcdTAwMjZwYy5zbGFicywgc2xhYl9saXN0KVxuNzMyNjpcdFx0XHRcdHNldF9ub2RlX3BhcnRpYWxfc3RhdGUobiwgc2xhYik7XG43MzI3Olx0XG43MzI4Olx0XHRcdGxpc3Rfc3BsaWNlX3RhaWwoXHUwMDI2cGMuc2xhYnMsIFx1MDAyNm4tXHUwMDNlcGFydGlhbCk7XG43MzI5Olx0XG43MzMwOlx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbjczMzE6XHRcdH1cbjczMzI6XHRcbjczMzM6XHRcdHJldHVybiByZWZpbGxlZDtcbjczMzQ6XHR9XG43MzM1Olx0XG43MzM2Olx0I2lmZGVmIENPTkZJR19OVU1BXG43MzM3Olx0c3RhdGljIHVuc2lnbmVkIGludFxuNzMzODpcdF9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxuNzMzOTpcdFx0XHQgICAgIHVuc2lnbmVkIGludCBtYXgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU4MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIFJlZmlsbCBNZWNoYW5pc20qKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGVzZSByZWZpbGwgZnVuY3Rpb25zIOKAkyBgX19yZWZpbGxfb2JqZWN0c19ub2RlYCBhbmQgYF9fcmVmaWxsX29iamVjdHNfYW55YC4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUgZGF0YSBmbG93LCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcy4gVGhlIGJlc3QgYXBwcm9hY2ggaGVyZSBpcyBnb2luZyB0byBiZSB0cmFjaW5nIHRoZSBjYWxscy4gSSYjMzk7bGwgZ2V0IGEgbGlzdCBvZiBhbGwgdGhlIHBsYWNlcyBpbiB0aGUgY29kZWJhc2UgdGhhdCB1c2UgdGhlc2UgZnVuY3Rpb25zLiBBIGBncmVwYCBzZWFyY2ggaXMgdGhlIG9idmlvdXMgc29sdXRpb24gdG8gZmluZCBhbGwgaW5zdGFuY2VzIG9mIHRob3NlIGZ1bmN0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIG1hcCBvZiB3aGVyZSB0aGVzZSBhcmUgdXNlZCBhbmQgd2hhdCYjMzk7cyBsZWFkaW5nIHRvIHRoZWlyIGV4ZWN1dGlvbi4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHdob2xlIHBpY3R1cmUgYW5kIGFueSBwb3NzaWJsZSBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3JlZmlsbF9vYmplY3RzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz03MjYzPXN0YXRpYyB1bnNpZ25lZCBpbnRcbm1tL3NsdWIuYzo3MjY0Ol9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbm1tL3NsdWIuYy03MjY1LVx0XHQgICAgICB1bnNpZ25lZCBpbnQgbWF4LCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxuLS1cbm1tL3NsdWIuYz03MzM3PXN0YXRpYyB1bnNpZ25lZCBpbnRcbm1tL3NsdWIuYzo3MzM4Ol9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxubW0vc2x1Yi5jLTczMzktXHRcdCAgICAgdW5zaWduZWQgaW50IG1heClcbi0tXG5tbS9zbHViLmMtNzM2NS1cbm1tL3NsdWIuYzo3MzY2Olx0XHRcdHIgPSBfX3JlZmlsbF9vYmplY3RzX25vZGUocywgcCwgZ2ZwLCBtaW4sIG1heCwgbixcbm1tL3NsdWIuYy03MzY3LVx0XHRcdFx0XHRcdCAgLyogYWxsb3dfc3BpbiA9ICovIGZhbHNlKTtcbi0tXG5tbS9zbHViLmM9NzM4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxubW0vc2x1Yi5jOjczODk6X19yZWZpbGxfb2JqZWN0c19hbnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXG5tbS9zbHViLmMtNzM5MC1cdFx0ICAgICB1bnNpZ25lZCBpbnQgbWF4KVxuLS1cbm1tL3NsdWIuYz03Mzk3PXJlZmlsbF9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxuLS1cbm1tL3NsdWIuYy03NDAzLVxubW0vc2x1Yi5jOjc0MDQ6XHRyZWZpbGxlZCA9IF9fcmVmaWxsX29iamVjdHNfbm9kZShzLCBwLCBnZnAsIG1pbiwgbWF4LFxubW0vc2x1Yi5jLTc0MDUtXHRcdFx0XHRcdCBnZXRfbm9kZShzLCBsb2NhbF9ub2RlKSxcbi0tXG5tbS9zbHViLmMtNzQwOS1cbm1tL3NsdWIuYzo3NDEwOlx0cmVmaWxsZWQgJiM0Mzs9IF9fcmVmaWxsX29iamVjdHNfYW55KHMsIHAgJiM0MzsgcmVmaWxsZWQsIGdmcCwgbWluIC0gcmVmaWxsZWQsXG5tbS9zbHViLmMtNzQxMS1cdFx0XHRcdFx0IG1heCAtIHJlZmlsbGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzI3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcywgdGhpbmtpbmcgYXMgdGhlIGNvZGUgaXRzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXJzIG9mIGByZWZpbGxfb2JqZWN0c2AqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGByZWZpbGxfb2JqZWN0c2AgaXMgYmVpbmcgdXNlZCwgb3IgbW9yZSBzcGVjaWZpY2FsbHksICp3aG8qIGlzIGNhbGxpbmcgaXQuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUsIGFuZCBkaWFnbm9zaW5nIG9yIG1vZGlmeWluZyBpdC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uIHRvIGlkZW50aWZ5IGl0cyBkZXBlbmRlbmNpZXMgYW5kIHRoZSBhcmVhcyBvZiB0aGUgc3lzdGVtIGl0IGltcGFjdHMuIEtub3dpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBjcml0aWNhbCBjb250ZXh0IG9uIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBvZiBgcmVmaWxsX29iamVjdHNgLCBhbmQgbGlrZWx5IGV4cGxhaW4gdGhlIGRhdGEgaXQgcmVxdWlyZXMgb3IgcHJvZHVjZXMuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZW50cnkgcG9pbnRzIHRvIGZ1bGx5IGNvbXByZWhlbmQgaXRzIGZ1bmN0aW9uLiBXaGF0IGNvZGUgcGF0aCBpcyB0aGlzIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVmaWxsX29iamVjdHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTI4NzI9c3RhdGljIHVuc2lnbmVkIGludFxubW0vc2x1Yi5jOjI4NzM6cmVmaWxsX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXG5tbS9zbHViLmMtMjg3NC1cdCAgICAgICB1bnNpZ25lZCBpbnQgbWF4KTtcbi0tXG5tbS9zbHViLmM9Mjg3Nj1zdGF0aWMgaW50IHJlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLFxuLS1cbm1tL3NsdWIuYy0yODg0LVxubW0vc2x1Yi5jOjI4ODU6XHRmaWxsZWQgPSByZWZpbGxfb2JqZWN0cyhzLCBcdTAwMjZzaGVhZi1cdTAwM2VvYmplY3RzW3NoZWFmLVx1MDAzZXNpemVdLCBnZnAsIHRvX2ZpbGwsXG5tbS9zbHViLmMtMjg4Ni1cdFx0XHRcdHRvX2ZpbGwpO1xuLS1cbm1tL3NsdWIuYz03MjYzPXN0YXRpYyB1bnNpZ25lZCBpbnRcbm1tL3NsdWIuYzo3MjY0Ol9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbm1tL3NsdWIuYy03MjY1LVx0XHQgICAgICB1bnNpZ25lZCBpbnQgbWF4LCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxuLS1cbm1tL3NsdWIuYz03MzM3PXN0YXRpYyB1bnNpZ25lZCBpbnRcbm1tL3NsdWIuYzo3MzM4Ol9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxubW0vc2x1Yi5jLTczMzktXHRcdCAgICAgdW5zaWduZWQgaW50IG1heClcbi0tXG5tbS9zbHViLmMtNzM2NS1cbm1tL3NsdWIuYzo3MzY2Olx0XHRcdHIgPSBfX3JlZmlsbF9vYmplY3RzX25vZGUocywgcCwgZ2ZwLCBtaW4sIG1heCwgbixcbm1tL3NsdWIuYy03MzY3LVx0XHRcdFx0XHRcdCAgLyogYWxsb3dfc3BpbiA9ICovIGZhbHNlKTtcbi0tXG5tbS9zbHViLmM9NzM4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxubW0vc2x1Yi5jOjczODk6X19yZWZpbGxfb2JqZWN0c19hbnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXG5tbS9zbHViLmMtNzM5MC1cdFx0ICAgICB1bnNpZ25lZCBpbnQgbWF4KVxuLS1cbm1tL3NsdWIuYz03Mzk2PXN0YXRpYyB1bnNpZ25lZCBpbnRcbm1tL3NsdWIuYzo3Mzk3OnJlZmlsbF9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxubW0vc2x1Yi5jLTczOTgtXHQgICAgICAgdW5zaWduZWQgaW50IG1heClcbi0tXG5tbS9zbHViLmMtNzQwMy1cbm1tL3NsdWIuYzo3NDA0Olx0cmVmaWxsZWQgPSBfX3JlZmlsbF9vYmplY3RzX25vZGUocywgcCwgZ2ZwLCBtaW4sIG1heCxcbm1tL3NsdWIuYy03NDA1LVx0XHRcdFx0XHQgZ2V0X25vZGUocywgbG9jYWxfbm9kZSksXG4tLVxubW0vc2x1Yi5jLTc0MDktXG5tbS9zbHViLmM6NzQxMDpcdHJlZmlsbGVkICYjNDM7PSBfX3JlZmlsbF9vYmplY3RzX2FueShzLCBwICYjNDM7IHJlZmlsbGVkLCBnZnAsIG1pbiAtIHJlZmlsbGVkLFxubW0vc2x1Yi5jLTc0MTEtXHRcdFx0XHRcdCBtYXggLSByZWZpbGxlZCk7XG4tLVxubW0vc2x1Yi5jPTc0MzM9c3RhdGljIGJvb2wgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy03NDUyLVx0fSBlbHNlIHtcbm1tL3NsdWIuYzo3NDUzOlx0XHRpID0gcmVmaWxsX29iamVjdHMocywgcCwgZmxhZ3MsIHNpemUsIHNpemUpO1xubW0vc2x1Yi5jLTc0NTQtXHRcdGlmIChpIFx1MDAzYyBzaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzkzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFNMVUIgc3BlY2lmaWNhbGx5OgoKKipBbmFseXppbmcgU0xVQiBTaGVhZiBBbGxvY2F0aW9uIGFuZCBGcmVlbGlzdCBSZXR1cm4gTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtbS9zbHViLmNgIOKAkyB0aGF0IHRlbGxzIG1lIHJpZ2h0IGF3YXkgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBTTFVCJiMzOTtzIGludGVybmFsIHdvcmtpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2hlYWYgYWxsb2NhdGlvbiwgYnVsayBhbGxvY2F0aW9uLCBhbmQgZnJlZWxpc3QgcmV0dXJuIGxvZ2ljIGhlcmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byBob3cgYF9fa21lbV9jYWNoZV9hbGxvY19idWxrYCB3b3JrcywgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBzaGVhZiBjYWNoaW5nIGlzIGxpa2VseSBoYW5kbGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGF0IGZ1bmN0aW9uLCBJIG5lZWQgYSBiaWdnZXIgcGljdHVyZSB2aWV3LiBJIHNob3VsZCB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHQsIGhvdyBga21lbV9jYWNoZV9hbGxvY19idWxrYCBhbmQgdGhlIHNoZWFmIGNhY2hpbmcgaXMgdXNlZCBtb3JlIGJyb2FkbHkuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsZXJzIG9mIGByZWZpbGxfc2hlYWZgIG9yIGBrbWVtX2NhY2hlX2FsbG9jX2J1bGtgIGluc3RlYWQsIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVmaWxsX3NoZWFmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2xhYi5oPTkyMD1zdHJ1Y3Qgc2xhYl9zaGVhZiAqXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo5MjE6a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKTtcbmluY2x1ZGUvbGludXgvc2xhYi5oLTkyMi1cbmluY2x1ZGUvbGludXgvc2xhYi5oOjkyMzppbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTkyNC1cdFx0c3RydWN0IHNsYWJfc2hlYWYgKipzaGVhZnAsIHVuc2lnbmVkIGludCBzaXplKTtcbi0tXG5saWIvbWFwbGVfdHJlZS5jPTE1Mj1zdGF0aWMgc3RydWN0IHNsYWJfc2hlYWYgKm10X2dldF9zaGVhZihnZnBfdCBnZnAsIGludCBjb3VudClcbmxpYi9tYXBsZV90cmVlLmMtMTUzLXtcbmxpYi9tYXBsZV90cmVlLmM6MTU0Olx0cmV0dXJuIGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihtYXBsZV9ub2RlX2NhY2hlLCBnZnAsIGNvdW50KTtcbmxpYi9tYXBsZV90cmVlLmMtMTU1LX1cbmxpYi9tYXBsZV90cmVlLmMtMTU2LVxubGliL21hcGxlX3RyZWUuYzoxNTc6c3RhdGljIGludCBtdF9yZWZpbGxfc2hlYWYoZ2ZwX3QgZ2ZwLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqKnNoZWFmLFxubGliL21hcGxlX3RyZWUuYy0xNTgtXHRcdHVuc2lnbmVkIGludCBzaXplKVxubGliL21hcGxlX3RyZWUuYy0xNTkte1xubGliL21hcGxlX3RyZWUuYzoxNjA6XHRyZXR1cm4ga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYobWFwbGVfbm9kZV9jYWNoZSwgZ2ZwLCBzaGVhZiwgc2l6ZSk7XG5saWIvbWFwbGVfdHJlZS5jLTE2MS19XG4tLVxubGliL21hcGxlX3RyZWUuYz0xMDc0PXN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfYWxsb2Nfbm9kZXMoc3RydWN0IG1hX3N0YXRlICptYXMsIGdmcF90IGdmcClcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTExMDgtXG5saWIvbWFwbGVfdHJlZS5jOjExMDk6XHRcdGlmIChtdF9yZWZpbGxfc2hlYWYoZ2ZwLCBcdTAwMjZtYXMtXHUwMDNlc2hlYWYsIHJlZmlsbCkpXG5saWIvbWFwbGVfdHJlZS5jLTExMTAtXHRcdFx0Z290byBlcnJvcjtcbi0tXG5tbS9zbHViLmM9Mjg3Mz1yZWZpbGxfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbi0tXG5tbS9zbHViLmMtMjg3NS1cbm1tL3NsdWIuYzoyODc2OnN0YXRpYyBpbnQgcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsXG5tbS9zbHViLmMtMjg3Ny1cdFx0XHQgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL3NsdWIuYz00NzE0PV9fcGNzX3JlcGxhY2VfZW1wdHlfbWFpbihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcyxcbi0tXG5tbS9zbHViLmMtNDc3My1cbm1tL3NsdWIuYzo0Nzc0Olx0aWYgKHJlZmlsbF9zaGVhZihzLCBlbXB0eSwgZ2ZwIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTikpIHtcbm1tL3NsdWIuYy00Nzc1LVx0XHQvKlxuLS1cbm1tL3NsdWIuYz01MDc0PUVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZik7XG5tbS9zbHViLmMtNTA3NS1cbm1tL3NsdWIuYzo1MDc2OnN0YXRpYyBpbnQgX19wcmVmaWxsX3NoZWFmX3BmbWVtYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtNTA3Ny1cdFx0XHRcdCAgICAgIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZiwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL3NsdWIuYy01MDg1LVxubW0vc2x1Yi5jOjUwODY6XHRyZXQgPSByZWZpbGxfc2hlYWYocywgc2hlYWYsIGdmcF9ub21lbWFsbG9jKTtcbm1tL3NsdWIuYy01MDg3LVxuLS1cbm1tL3NsdWIuYy01MDk0LVx0ICovXG5tbS9zbHViLmM6NTA5NTpcdHJldCA9IHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwKTtcbm1tL3NsdWIuYy01MDk2LVx0c2hlYWYtXHUwMDNlcGZtZW1hbGxvYyA9IHRydWU7XG4tLVxubW0vc2x1Yi5jPTUxMTA9c3RydWN0IHNsYWJfc2hlYWYgKlxubW0vc2x1Yi5jOjUxMTE6a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKVxubW0vc2x1Yi5jLTUxMTIte1xuLS1cbm1tL3NsdWIuYy01MTczLVx0XHRpZiAoc2hlYWYtXHUwMDNlc2l6ZSBcdTAwM2Mgc2l6ZSBcdTAwMjZcdTAwMjZcbm1tL3NsdWIuYzo1MTc0Olx0XHQgICAgX19wcmVmaWxsX3NoZWFmX3BmbWVtYWxsb2Mocywgc2hlYWYsIGdmcCkpIHtcbm1tL3NsdWIuYy01MTc1LVx0XHRcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzaGVhZik7XG4tLVxubW0vc2x1Yi5jLTUxODQtLypcbm1tL3NsdWIuYzo1MTg1OiAqIFVzZSB0aGlzIHRvIHJldHVybiBhIHNoZWFmIG9idGFpbmVkIGJ5IGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZigpXG5tbS9zbHViLmMtNTE4Ni0gKlxuLS1cbm1tL3NsdWIuYz01MTk0PXZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbi0tXG5tbS9zbHViLmMtNTIyOC1cdGlmICghYmFybiB8fCBkYXRhX3JhY2UoYmFybi1cdTAwM2Vucl9mdWxsKSBcdTAwM2U9IE1BWF9GVUxMX1NIRUFWRVMgfHxcbm1tL3NsdWIuYzo1MjI5Olx0ICAgIHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTikpIHtcbm1tL3NsdWIuYy01MjMwLVx0XHRzaGVhZl9mbHVzaF91bnVzZWQocywgc2hlYWYpO1xuLS1cbm1tL3NsdWIuYy01MjM5LS8qXG5tbS9zbHViLmM6NTI0MDogKiBSZWZpbGwgYSBzaGVhZiBwcmV2aW91c2x5IHJldHVybmVkIGJ5IGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZiB0byBhdCBsZWFzdFxubW0vc2x1Yi5jLTUyNDEtICogdGhlIGdpdmVuIHNpemUuXG4tLVxubW0vc2x1Yi5jLTUyNTEtICovXG5tbS9zbHViLmM6NTI1MjppbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbm1tL3NsdWIuYy01MjUzLVx0XHRcdCAgICBzdHJ1Y3Qgc2xhYl9zaGVhZiAqKnNoZWFmcCwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxubW0vc2x1Yi5jLTUyNTgtXHQgKiBUT0RPOiBkbyB3ZSB3YW50IHRvIHN1cHBvcnQgKnNoZWFmID09IE5VTEwgdG8gYmUgZXF1aXZhbGVudCBvZlxubW0vc2x1Yi5jOjUyNTk6XHQgKiBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoKSA/XG5tbS9zbHViLmMtNTI2MC1cdCAqL1xuLS1cbm1tL3NsdWIuYy01MjY5LVx0XHRpZiAobGlrZWx5KHNoZWFmLVx1MDAzZWNhcGFjaXR5ID09IHMtXHUwMDNlc2hlYWZfY2FwYWNpdHkpKVxubW0vc2x1Yi5jOjUyNzA6XHRcdFx0cmV0dXJuIF9fcHJlZmlsbF9zaGVhZl9wZm1lbWFsbG9jKHMsIHNoZWFmLCBnZnApO1xubW0vc2x1Yi5jLTUyNzEtXG4tLVxubW0vc2x1Yi5jLTUyODQtXHQgKi9cbm1tL3NsdWIuYzo1Mjg1Olx0c2hlYWYgPSBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYocywgZ2ZwLCBzaXplKTtcbm1tL3NsdWIuYy01Mjg2LVx0aWYgKCFzaGVhZilcbi0tXG5tbS9zbHViLmMtNTI5NC0vKlxubW0vc2x1Yi5jOjUyOTU6ICogQWxsb2NhdGUgZnJvbSBhIHNoZWFmIG9idGFpbmVkIGJ5IGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZigpXG5tbS9zbHViLmMtNTI5Ni0gKlxuLS1cbm1tL3NsdWIuYz03ODcxPXN0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY3VsYXRlX3NoZWFmX2NhcGFjaXR5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy03OTExLVx0ICogUmVzcGVjdCBhbiBleHBsaWNpdCByZXF1ZXN0IGZvciBjYXBhY2l0eSB0aGF0JiMzOTtzIHR5cGljYWxseSBtb3RpdmF0ZWQgYnlcbm1tL3NsdWIuYzo3OTEyOlx0ICogZXhwZWN0ZWQgbWF4aW11bSBzaXplIG9mIGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZigpIHRvIG5vdCBlbmQgdXBcbm1tL3NsdWIuYy03OTEzLVx0ICogdXNpbmcgbG93LXBlcmZvcm1hbmNlIG92ZXJzaXplIHNoZWF2ZXNcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0xODg9c3RydWN0IHNsYWJfc2hlYWYgKlxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg6MTg5OmttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0xOTAtXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg9MTk1PXZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTE5Ni1cdFx0c3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKTtcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjE5NzppbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTE5OC1cdFx0c3RydWN0IHNsYWJfc2hlYWYgKipzaGVhZnAsIHVuc2lnbmVkIGludCBzaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jPTI1ND1zdHJ1Y3Qgc2xhYl9zaGVhZiAqXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjI1NTprbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IHNpemUpXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTI1Ni17XG4tLVxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0yODItXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjI4MzppbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMjg0LVx0XHQgc3RydWN0IHNsYWJfc2hlYWYgKipzaGVhZnAsIHVuc2lnbmVkIGludCBzaXplKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMjkxLVx0aWYgKHNpemUgXHUwMDNlIHNoZWFmLVx1MDAzZWNhcGFjaXR5KSB7XG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjI5MjpcdFx0c2hlYWYgPSBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYocywgZ2ZwLCBzaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMjkzLVx0XHRpZiAoIXNoZWFmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEwMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNMVUIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBjaGFuZ2VzIGluIGBtbS9zbHViLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgYW5kIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgLiBUaGUgZ29hbCwgaXQgc2VlbXMsIGlzIHRvIGltcHJvdmUgaG93IHBhcnRpYWxseSBmdWxsIHNsYWJzIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IHdoZW4gcmVmaWxsaW5nLgoKSW5pdGlhbGx5LCBJJiMzOTttIG9ic2VydmluZyB0aGUgYWRkaXRpb24gb2YgYSBgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbmAgYW5kIGB1bnNpZ25lZCBsb25nIGZsYWdzYCB3aXRoaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YC4gVGhpcyBpbW1lZGlhdGVseSBzaWduYWxzIHRoYXQgdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIGxvY2tpbmcgYXJvdW5kIHRoZSBub2RlJiMzOTtzIGxpc3QsIHNwZWNpZmljYWxseSB1c2luZyBgc3Bpbl9sb2NrX2lycXNhdmVgIGFuZCBgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZWAuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgY29tbWVudCBzdWdnZXN0cyBzb21lIG1vZGlmaWNhdGlvbiBvZiB0aGUgZnJlZWxpc3QuIFdlJiMzOTtyZSBub3cgYWNxdWlyaW5nIGBuYCB2aWEgYGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKWAgYW5kIHRoZW4gbG9ja2luZyBgbi0mZ3Q7bGlzdF9sb2NrYCB0byBwcm90ZWN0IGFjY2VzcyB0byB0aGUgZnJlZWxpc3QgY291bnRlciB1cGRhdGVzIHdpdGggYHNsYWJfdXBkYXRlX2ZyZWVsaXN0YC4gVGhpcyBpcyBjcnVjaWFsIHRvIGVuc3VyZSBhdG9taWNpdHkuIFRoZSBpbXBvcnRhbnQgYWRkaXRpb24gaXMgYGFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKWAgKmFmdGVyKiB0aGUgc3VjY2Vzc2Z1bCB1cGRhdGUgb2YgdGhlIGZyZWVsaXN0LCB3aGljaCBtZWFucyB0aGF0IHRoZSBzbGFiIGlzIG5vdyBhZGRlZCBiYWNrIHRvIHRoZSBwYXJ0aWFsIGxpc3QgZm9yIHRoZSBub2RlLCBsaWtlbHkgd2l0aCB0aGUgdXBkYXRlZCBgZnJlZWxpc3RgIGFuZCBgaW51c2VgIGNvdW50ZXJzLgoKTG9va2luZyBhdCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYCwgSSBub3RpY2UgYSBjcml0aWNhbCBjaGFuZ2Ugd2l0aGluIHRoZSBsb29wIHdoZXJlIG9iamVjdHMgYXJlIGJlaW5nIHJlZmlsbGVkLiAgVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgY2hlY2sgYW5kIHRoZW4gYGxpc3RfYWRkYCBpbiBhIGNvbmRpdGlvbmFsLCBidXQgbm93IHRoZSBgbGlzdF9hZGRgIGlzIGdvbmUuIEluc3RlYWQsIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgaXMgY2FsbGVkIGRpcmVjdGx5LCBhbmQgaWYgaXQgc3VjY2VlZHMsIHRoZSBjb2RlIGJyZWFrcyBvdXQgb2YgdGhlIGxvb3AuICBUaGUgYGxpc3RfYWRkYCBjYWxsIGlzIG5vdyBpbnNpZGUgdGhlIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgZnVuY3Rpb24uIE1vcmUgc3BlY2lmaWNhbGx5LCAgdGhlIGBhZGRfcGFydGlhbGAgaXMgbm93IGhhbmRsZWQgd2l0aGluIHRoZSAgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YC4gVGhpcyBzZWVtcyBsaWtlIGEgYmV0dGVyIGFwcHJvYWNoIGluIHRlcm1zIG9mIGF0b21pY2l0eSBhcyBhbGwgbW9kaWZpY2F0aW9uIHRvIHRoZSBwYXJ0aWFsIGxpc3QgaXMgaGFwcGVuaW5nIGJlaGluZCB0aGUgbG9jay4KCkZpbmFsbHksIHRoZSBgbGlzdF9lbXB0eWAgY2hlY2sgaGFzIGJlZW4gY2hhbmdlZCB0byBgdW5saWtlbHkoIWxpc3RfZW1wdHkoJmFtcDtwYy5zbGFicykpYC4gVGhhdCYjMzk7cyBhIG1pY3JvLW9wdGltaXphdGlvbiDigJMgbWFya2luZyB0aGF0IGJyYW5jaCBhcyBsZXNzIGxpa2VseSB0byBiZSB0YWtlbi4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIHNsYWJzIGluIGBwYy5zbGFic2AgYXJlICp1c3VhbGx5KiBlbXB0eS4gVGhpcyBtYWtlcyBzZW5zZS4KClNvLCBpbiBlc3NlbmNlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm9kZS1sZXZlbCBsb2NraW5nIGFyb3VuZCBwYXJ0aWFsIHNsYWIgbGlzdCBtYW5pcHVsYXRpb25zIGluIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgdG8gZW5zdXJlIHRocmVhZCBzYWZldHkuIEl0IGFsc28gc3RyZWFtbGluZXMgdGhlIHJlZmlsbCBwcm9jZXNzIGJ5IGludGVncmF0aW5nIHRoZSBwYXJ0aWFsIHNsYWIgcmV0dXJuIGFuZCBhZGRpdGlvbiBpbnRvIHRoZSBzYW1lIGxvY2tlZCBvcGVyYXRpb24sIGhvcGVmdWxseSBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgYW5kIHJlZHVjaW5nIGNvbnRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzIyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3MjI1Olx0XHRcdFx0Y29udGludWU7XG43MjI2Olx0XG43MjI3Olx0XHRcdGlmIChrZmVuY2VfZnJlZShkZi5mcmVlbGlzdCkpXG43MjI4Olx0XHRcdFx0Y29udGludWU7XG43MjI5Olx0XG43MjMwOlx0XHRcdF9fc2xhYl9mcmVlKGRmLnMsIGRmLnNsYWIsIGRmLmZyZWVsaXN0LCBkZi50YWlsLCBkZi5jbnQsXG43MjMxOlx0XHRcdFx0ICAgICBfUkVUX0lQXyk7XG43MjMyOlx0XHR9IHdoaWxlIChsaWtlbHkoc2l6ZSkpO1xuNzIzMzpcdH1cbjcyMzQ6XHRcbjcyMzU6XHQvKiBOb3RlIHRoYXQgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uICovXG43MjM2Olx0dm9pZCBrbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxuNzIzNzpcdHtcbjcyMzg6XHRcdGlmICghc2l6ZSlcbjcyMzk6XHRcdFx0cmV0dXJuO1xuNzI0MDpcdFxuNzI0MTpcdFx0LypcbjcyNDI6XHRcdCAqIGZyZWVpbmcgdG8gc2hlYXZlcyBpcyBzbyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZGV0YWNoZWQgZnJlZWxpc3Qgc29cbjcyNDM6XHRcdCAqIG9uY2Ugd2UgZ28gdGhhdCB3YXksIHdlIGhhdmUgdG8gZG8gZXZlcnl0aGluZyBkaWZmZXJlbnRseVxuNzI0NDpcdFx0ICovXG43MjQ1Olx0XHRpZiAocyBcdTAwMjZcdTAwMjYgY2FjaGVfaGFzX3NoZWF2ZXMocykpIHtcbjcyNDY6XHRcdFx0ZnJlZV90b19wY3NfYnVsayhzLCBzaXplLCBwKTtcbjcyNDc6XHRcdFx0cmV0dXJuO1xuNzI0ODpcdFx0fVxuNzI0OTpcdFxuNzI1MDpcdFx0ZG8ge1xuNzI1MTpcdFx0XHRzdHJ1Y3QgZGV0YWNoZWRfZnJlZWxpc3QgZGY7XG43MjUyOlx0XG43MjUzOlx0XHRcdHNpemUgPSBidWlsZF9kZXRhY2hlZF9mcmVlbGlzdChzLCBzaXplLCBwLCBcdTAwMjZkZik7XG43MjU0Olx0XHRcdGlmICghZGYuc2xhYilcbjcyNTU6XHRcdFx0XHRjb250aW51ZTtcbjcyNTY6XHRcbjcyNTc6XHRcdFx0c2xhYl9mcmVlX2J1bGsoZGYucywgZGYuc2xhYiwgZGYuZnJlZWxpc3QsIGRmLnRhaWwsIFx1MDAyNnBbc2l6ZV0sXG43MjU4Olx0XHRcdFx0ICAgICAgIGRmLmNudCwgX1JFVF9JUF8pO1xuNzI1OTpcdFx0fSB3aGlsZSAobGlrZWx5KHNpemUpKTtcbjcyNjA6XHR9XG43MjYxOlx0RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWVfYnVsayk7XG43MjYyOlx0XG43MjYzOlx0c3RhdGljIHVuc2lnbmVkIGludFxuNzI2NDpcdF9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbjcyNjU6XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG1heCwgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcbjcyNjY6XHRcdFx0ICAgICAgYm9vbCBhbGxvd19zcGluKVxuNzI2NzpcdHtcbjcyNjg6XHRcdHN0cnVjdCBwYXJ0aWFsX2J1bGtfY29udGV4dCBwYztcbjcyNjk6XHRcdHN0cnVjdCBzbGFiICpzbGFiLCAqc2xhYjI7XG43MjcwOlx0XHR1bnNpZ25lZCBpbnQgcmVmaWxsZWQgPSAwO1xuNzI3MTpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjcyNzI6XHRcdHZvaWQgKm9iamVjdDtcbjcyNzM6XHRcbjcyNzQ6XHRcdHBjLmZsYWdzID0gZ2ZwO1xuNzI3NTpcdFx0cGMubWluX29iamVjdHMgPSBtaW47XG43Mjc2Olx0XHRwYy5tYXhfb2JqZWN0cyA9IG1heDtcbjcyNzc6XHRcbjcyNzg6XHRcdGlmICghZ2V0X3BhcnRpYWxfbm9kZV9idWxrKHMsIG4sIFx1MDAyNnBjLCBhbGxvd19zcGluKSlcbjcyNzk6XHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjYyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlNMVUIgTWVtb3J5IEFsbG9jYXRvciBQYXRjaCBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgbW0vc2x1Yi5jYCwgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBhc3Nlc3MgaWYgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggZnV6emluZywgYW5kIGdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGtub3cgdGhhdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgbGlrZSB0aGlzIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGFuZCBmdW5kYW1lbnRhbCB0byB0aGUgc3lzdGVtLiBTbywgdGhhdCYjMzk7cyBhIGNoZWNrIG9uIG15ICYjMzQ7d29ydGggZnV6emluZyYjMzQ7IHJhZGFyLgoKVGhlIGluc3RydWN0aW9ucyBhcmUgcHJldHR5IGNsZWFyIG9uIHRoaXM6IGFueSBtb2RpZmljYXRpb25zIGluIGNvcmUgc3Vic3lzdGVtcyBsaWtlIG1lbW9yeSBtYW5hZ2VtZW50PyBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBoaXRzIHRoYXQgY3JpdGVyaW9uLiBTbywgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgdHJ1ZWAuCgpOb3csIHRoZSB0cmlja2llciBwYXJ0OiBkZXRlcm1pbmluZyB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyB0byBhdm9pZCBkaWx1dGlvbiBvZiB0aGUgZnV6emluZyBlZmZvcnQuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHRlbGxpbmcgbWUgdG8gYXZvaWQgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoaW5ncyBjYWxsZWQgYnkgKmV2ZXJ5dGhpbmcqLiBUaGUgZ29hbCBpcyB0byBpc29sYXRlIHRoZSBzcGVjaWZpYyBsb2dpYyBiZWluZyBhbHRlcmVkLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgYmxhbmtldCBhbGxvY2F0aW9uIG9yIGRlYWxsb2NhdGlvbi4KCkkgbmVlZCB0byBpZGVudGlmeSB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IHRpZWQgdG8gdGhpcyBtb2RpZmljYXRpb24uIFJpZ2h0LiBJIGhhdmU6CgoxLiAgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCAtIGEgc3RhdGljIGhlbHBlciwgbW9kaWZpZWQgZGlyZWN0bHkuCjIuICBgX19yZWZpbGxfb2JqZWN0c19ub2RlYCAtIGFub3RoZXIgc3RhdGljIGhlbHBlci4KMy4gIGByZWZpbGxfb2JqZWN0c2AgLSBzdGF0aWMuCjQuICBgcmVmaWxsX3NoZWFmYCAtIHN0YXRpYy4KNS4gIGBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWZgIC0gc3RhdGljLgo2LiAgYGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmYCAtIGFsc28gc3RhdGljLgo3LiAgYGttZW1fY2FjaGVfYWxsb2NfYnVsa2AgLSBXYWl0LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgd2hhdCBjYWxscyB0aGlzLiBJcyB0aGlzIGV4cG9ydGVkL25vbi1zdGF0aWM/IE5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3Mgc29tZXRoaW5nLiBJJiMzOTtsbCBjaGVjayBpdHMgZGVmaW5pdGlvbiBpbiBgbW0vc2x1Yi5jYC4KCkkmIzM5O20gY29uZmlkZW50IHRoZXNlIGFyZSB0aGUgcmVsZXZhbnQgc3ltYm9scyB0byBmb2N1cyBvbi4gVGhleSByZXByZXNlbnQgdGhlIGNvcmUgbG9naWMgb2YgdGhlIGNoYW5nZSBhbmQgc2hvdWxkIGdpdmUgbWUgZ29vZCBmdXp6aW5nIGNvdmVyYWdlLiBJJiMzOTttIGdvaW5nIHRvIG5vdGUgdGhlc2UgYW5kIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttZW1fY2FjaGVfYWxsb2NfYnVsayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9pb21tdS5jPTMzOT1tc21faW9tbXVfcGFnZXRhYmxlX3ByZWFsbG9jX2FsbG9jYXRlKHN0cnVjdCBtc21fbW11ICptbXUsIHN0cnVjdCBtc21fbW11X3ByZWFsbG9jICpwKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2lvbW11LmMtMzUxLVxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21faW9tbXUuYzozNTI6XHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhwdF9jYWNoZSwgR0ZQX0tFUk5FTCwgcC1cdTAwM2Vjb3VudCwgcC1cdTAwM2VwYWdlcykpIHtcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2lvbW11LmMtMzUzLVx0XHRrdmZyZWUocC1cdTAwM2VwYWdlcyk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYz0xMjg2PXN0YXRpYyBpbnQgcGFudGhvcl92bV9vcF9jdHhfcHJlYWxsb2NfcHRzKHN0cnVjdCBwYW50aG9yX3ZtX29wX2N0eCAqb3BfY3R4KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMTMwNC1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM6MTMwNTpcdGlmICgha21lbV9jYWNoZV9hbGxvY19idWxrKHB0X2NhY2hlLCBHRlBfS0VSTkVMLCBwdF9jb3VudCxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMTMwNi1cdFx0XHRcdCAgIG9wX2N0eC1cdTAwM2Vyc3ZkX3BhZ2VfdGFibGVzLnBhZ2VzKSkge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM9MTQxNz1zdGF0aWMgaW50IHBhbnRob3Jfdm1fcHJlcGFyZV91bm1hcF9vcF9jdHgoc3RydWN0IHBhbnRob3Jfdm1fb3BfY3R4ICpvcF9jdHgsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy0xNDUwLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYzoxNDUxOlx0XHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhwdF9jYWNoZSwgR0ZQX0tFUk5FTCwgcHRfY291bnQsXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTE0NTItXHRcdFx0XHRvcF9jdHgtXHUwMDNlcnN2ZF9wYWdlX3RhYmxlcy5wYWdlcykpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaD05MDQ9dm9pZCBrbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKTtcbmluY2x1ZGUvbGludXgvc2xhYi5oLTkwNS1cbmluY2x1ZGUvbGludXgvc2xhYi5oOjkwNjpib29sIGttZW1fY2FjaGVfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuaW5jbHVkZS9saW51eC9zbGFiLmgtOTA3LVx0XHRzaXplX3Qgc2l6ZSwgdm9pZCAqKnApO1xuaW5jbHVkZS9saW51eC9zbGFiLmg6OTA4OiNkZWZpbmUga21lbV9jYWNoZV9hbGxvY19idWxrKC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjkwOTpcdGFsbG9jX2hvb2tzKGttZW1fY2FjaGVfYWxsb2NfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9zbGFiLmgtOTEwLVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9OTY4PV9fY29sZCBib29sIF9faW9fYWxsb2NfcmVxX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbi0tXG5pb191cmluZy9pb191cmluZy5jLTk3OC1cdCAqL1xuaW9fdXJpbmcvaW9fdXJpbmcuYzo5Nzk6XHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhyZXFfY2FjaGVwLCBnZnAsIG5yX3JlcXMsIHJlcXMpKSB7XG5pb191cmluZy9pb191cmluZy5jLTk4MC1cdFx0cmVxc1swXSA9IGttZW1fY2FjaGVfYWxsb2MocmVxX2NhY2hlcCwgZ2ZwKTtcbi0tXG5saWIvdGVzdF9tZW1pbml0LmM9MjE2PXN0YXRpYyBpbnQgX19pbml0IGRvX2ttZW1fY2FjaGVfc2l6ZShzaXplX3Qgc2l6ZSwgYm9vbCB3YW50X2N0b3IsXG4tLVxubGliL3Rlc3RfbWVtaW5pdC5jLTIzMS1cdFx0aWYgKCF3YW50X3JjdSBcdTAwMjZcdTAwMjYgIXdhbnRfY3Rvcikge1xubGliL3Rlc3RfbWVtaW5pdC5jOjIzMjpcdFx0XHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhjLCBhbGxvY19tYXNrLCBCVUxLX1NJWkUsXG5saWIvdGVzdF9tZW1pbml0LmMtMjMzLVx0XHRcdFx0XHRidWxrX2FycmF5KSkge1xuLS1cbmxpYi90ZXN0X21lbWluaXQuYz0zNDU9c3RhdGljIGludCBfX2luaXQgZG9fa21lbV9jYWNoZV9zaXplX2J1bGsoaW50IHNpemUsIGludCAqdG90YWxfZmFpbHVyZXMpXG4tLVxubGliL3Rlc3RfbWVtaW5pdC5jLTM1NC1cdGZvciAoaXRlciA9IDA7IChpdGVyIFx1MDAzYyBtYXhpdGVyKSBcdTAwMjZcdTAwMjYgIWZhaWw7IGl0ZXImIzQzOyYjNDM7KSB7XG5saWIvdGVzdF9tZW1pbml0LmM6MzU1Olx0XHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhjLCBHRlBfS0VSTkVMLCBBUlJBWV9TSVpFKG9iamVjdHMpLFxubGliL3Rlc3RfbWVtaW5pdC5jLTM1Ni1cdFx0XHRcdG9iamVjdHMpKVxuLS1cbm1tL2thc2FuL2thc2FuX3Rlc3RfYy5jPTEyMjM9c3RhdGljIHZvaWQga21lbV9jYWNoZV9idWxrKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9rYXNhbi9rYXNhbl90ZXN0X2MuYy0xMjMyLVxubW0va2FzYW4va2FzYW5fdGVzdF9jLmM6MTIzMzpcdGlmICgha21lbV9jYWNoZV9hbGxvY19idWxrKGNhY2hlLCBHRlBfS0VSTkVMLCBBUlJBWV9TSVpFKHApLFxubW0va2FzYW4va2FzYW5fdGVzdF9jLmMtMTIzNC1cdFx0XHQodm9pZCAqKilcdTAwMjZwKSkge1xuLS1cbm1tL2tmZW5jZS9rZmVuY2VfdGVzdC5jPTc0OT1zdGF0aWMgdm9pZCB0ZXN0X21lbWNhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2tmZW5jZS9rZmVuY2VfdGVzdC5jLTc2NS1cbm1tL2tmZW5jZS9rZmVuY2VfdGVzdC5jOjc2NjpcdFx0aWYgKCFrbWVtX2NhY2hlX2FsbG9jX2J1bGsodGVzdF9jYWNoZSwgR0ZQX0FUT01JQyxcbm1tL2tmZW5jZS9rZmVuY2VfdGVzdC5jLTc2Ny1cdFx0XHRcdEFSUkFZX1NJWkUob2JqZWN0cyksIG9iamVjdHMpKVxuLS1cbm1tL2tmZW5jZS9rZmVuY2VfdGVzdC5jLTc3Ni1cdFx0Lypcbm1tL2tmZW5jZS9rZmVuY2VfdGVzdC5jOjc3NzpcdFx0ICoga21lbV9jYWNoZV9hbGxvY19idWxrKCkgZGlzYWJsZXMgaW50ZXJydXB0cywgYW5kIGNhbGxpbmcgaXRcbm1tL2tmZW5jZS9rZmVuY2VfdGVzdC5jLTc3OC1cdFx0ICogaW4gYSB0aWdodCBsb29wIG1heSBub3QgZ2l2ZSBLRkVOQ0UgYSBjaGFuY2UgdG8gc3dpdGNoIHRoZVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zNTk4PWJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4tLVxubW0vbWVtY29udHJvbC5jLTM2MTctXHQgKiBzbGFiX2FsbG9jX25vZGUoKSBhdm9pZHMgdGhlIE5VTEwgY2hlY2ssIHNvIHdlIG1pZ2h0IGJlIGNhbGxlZCB3aXRoIGFcbm1tL21lbWNvbnRyb2wuYzozNjE4Olx0ICogc2luZ2xlIE5VTEwgb2JqZWN0LiBrbWVtX2NhY2hlX2FsbG9jX2J1bGsoKSBhYm9ydHMgaWYgaXQgY2FuJiMzOTt0IGZpbGxcbm1tL21lbWNvbnRyb2wuYy0zNjE5LVx0ICogdGhlIHdob2xlIHJlcXVlc3RlZCBzaXplLlxuLS1cbm1tL3NsdWIuYz01MDc2PXN0YXRpYyBpbnQgX19wcmVmaWxsX3NoZWFmX3BmbWVtYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTUxMDAtXG5tbS9zbHViLmM6NTEwMTpzdGF0aWMgYm9vbCBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG5tbS9zbHViLmMtNTEwMi1cdFx0c2l6ZV90IHNpemUsIHZvaWQgKipwKTtcbi0tXG5tbS9zbHViLmM9NTExMT1rbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxubW0vc2x1Yi5jLTUxMzItXHRcdCAqL1xubW0vc2x1Yi5jOjUxMzM6XHRcdGlmICghX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsocywgZ2ZwLCBzaXplLFxubW0vc2x1Yi5jLTUxMzQtXHRcdFx0XHRcdCAgICAgXHUwMDI2c2hlYWYtXHUwMDNlb2JqZWN0c1swXSkpIHtcbi0tXG5tbS9zbHViLmM9NTI1Mj1pbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbi0tXG5tbS9zbHViLmMtNTI3MS1cbm1tL3NsdWIuYzo1MjcyOlx0XHRpZiAoIV9fa21lbV9jYWNoZV9hbGxvY19idWxrKHMsIGdmcCwgc2hlYWYtXHUwMDNlY2FwYWNpdHkgLSBzaGVhZi1cdTAwM2VzaXplLFxubW0vc2x1Yi5jLTUyNzMtXHRcdFx0XHRcdCAgICAgXHUwMDI2c2hlYWYtXHUwMDNlb2JqZWN0c1tzaGVhZi1cdTAwM2VzaXplXSkpXG4tLVxubW0vc2x1Yi5jPTczOTc9cmVmaWxsX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXG4tLVxubW0vc2x1Yi5jLTc0MzItXG5tbS9zbHViLmM6NzQzMzpzdGF0aWMgYm9vbCBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG5tbS9zbHViLmMtNzQzNC1cdFx0c2l6ZV90IHNpemUsIHZvaWQgKipwKVxuLS1cbm1tL3NsdWIuYy03NDY2LS8qKlxubW0vc2x1Yi5jOjc0Njc6ICoga21lbV9jYWNoZV9hbGxvY19idWxrIC0gQWxsb2NhdGUgbXVsdGlwbGUgb2JqZWN0c1xubW0vc2x1Yi5jLTc0NjgtICogQHM6XHRcdFRoZSBjYWNoZSB0byBhbGxvY2F0ZSBmcm9tXG4tLVxubW0vc2x1Yi5jLTc0ODItICovXG5tbS9zbHViLmM6NzQ4Mzpib29sIGttZW1fY2FjaGVfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxubW0vc2x1Yi5jLTc0ODQtXHRcdHNpemVfdCBzaXplLCB2b2lkICoqcClcbi0tXG5tbS9zbHViLmMtNzUxOS1cdFx0ICovXG5tbS9zbHViLmM6NzUyMDpcdFx0aWYgKHVubGlrZWx5KCFfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzLCBmbGFncywgc2l6ZSAtIGksXG5tbS9zbHViLmMtNzUyMS1cdFx0XHRcdHAgJiM0MzsgaSkpKSB7XG4tLVxubW0vc2x1Yi5jLTc1NDMtfVxubW0vc2x1Yi5jOjc1NDQ6RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX2J1bGtfbm9wcm9mKTtcbm1tL3NsdWIuYy03NTQ1LVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0yNDE9c3RhdGljIGludCB4ZHBfcmVjdl9mcmFtZXMoc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcywgaW50IG5mcmFtZXMsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTI0OC1cbm5ldC9icGYvdGVzdF9ydW4uYzoyNDk6XHRpZiAodW5saWtlbHkoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhuZXRfaG90ZGF0YS5za2J1ZmZfY2FjaGUsIGdmcCxcbm5ldC9icGYvdGVzdF9ydW4uYy0yNTAtXHRcdFx0XHRcdCAgICBuZnJhbWVzLCAodm9pZCAqKilza2JzKSkpIHtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yODQ9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9za2JfY2FjaGVfZ2V0KGJvb2wgYWxsb2MpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjkwLVx0aWYgKHVubGlrZWx5KCFuYy1cdTAwM2Vza2JfY291bnQpKSB7XG5uZXQvY29yZS9za2J1ZmYuYzoyOTE6XHRcdGlmIChhbGxvYyBcdTAwMjZcdTAwMjYga21lbV9jYWNoZV9hbGxvY19idWxrKG5ldF9ob3RkYXRhLnNrYnVmZl9jYWNoZSxcbm5ldC9jb3JlL3NrYnVmZi5jLTI5Mi1cdFx0XHRcdFx0XHQgICBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTMxNj1zdGF0aWMgaW5saW5lIHZvaWQgc2tidWZmX2NsZWFyKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzQxLSAqIFJldHVybjogbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgc2ticyAoQG4gaWYgbm8gYWN0dWFsIGFsbG9jYXRpb25cbm5ldC9jb3JlL3NrYnVmZi5jOjM0MjogKlx0ICAgbmVlZGVkIG9yIGttZW1fY2FjaGVfYWxsb2NfYnVsaygpIGRpZG4mIzM5O3QgZmFpbCkuXG5uZXQvY29yZS9za2J1ZmYuYy0zNDMtICovXG5uZXQvY29yZS9za2J1ZmYuYz0zNDQ9dTMyIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKHZvaWQgKipza2JzLCB1MzIgbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zNTUtXHRidWxrID0gbWluKE5BUElfU0tCX0NBQ0hFX1NJWkUgLSBuYy1cdTAwM2Vza2JfY291bnQsIE5BUElfU0tCX0NBQ0hFX0JVTEspO1xubmV0L2NvcmUvc2tidWZmLmM6MzU2Olx0aWYgKGttZW1fY2FjaGVfYWxsb2NfYnVsayhuZXRfaG90ZGF0YS5za2J1ZmZfY2FjaGUsXG5uZXQvY29yZS9za2J1ZmYuYy0zNTctXHRcdFx0XHQgIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4sIGJ1bGssXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzYzLVx0LyogU3RpbGwgbm90IGVub3VnaC4gQnVsay1hbGxvY2F0ZSB0aGUgbWlzc2luZyBwYXJ0IGRpcmVjdGx5LCB6ZXJvZWQgKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjM2NDpcdGlmIChrbWVtX2NhY2hlX2FsbG9jX2J1bGsobmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlLFxubmV0L2NvcmUvc2tidWZmLmMtMzY1LVx0XHRcdFx0ICBHRlBfQVRPTUlDIHwgX19HRlBfWkVSTyB8IF9fR0ZQX05PV0FSTixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz01MTk3PXN0YXRpYyB2b2lkIHNrYl9leHRlbnNpb25zX2luaXQodm9pZCkge31cbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01MjA1LSNkZWZpbmUgRkxBR19TS0JfTk9fTUVSR0VcdFNMQUJfTk9fTUVSR0Vcbm5ldC9jb3JlL3NrYnVmZi5jOjUyMDY6I2Vsc2UgLyogQ09ORklHX1NMVUJfVElOWSAtIHNpbXBsZSBsb29wIGluIGttZW1fY2FjaGVfYWxsb2NfYnVsayAqL1xubmV0L2NvcmUvc2tidWZmLmMtNTIwNy0jZGVmaW5lIEZMQUdfU0tCX05PX01FUkdFXHQwXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg9MTg1PXZvaWQga21lbV9jYWNoZV9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgc2l6ZV90IHNpemUsIHZvaWQgKipsaXN0KTtcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjE4Njpib29sIGttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplLFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmgtMTg3LVx0XHRcdCAgdm9pZCAqKmxpc3QpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM9MTUzPXZvaWQga21lbV9jYWNoZV9zaHJpbmsoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcClcbi0tXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTE1Ni1cbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM6MTU3OmJvb2wga21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGdmcCwgc2l6ZV90IHNpemUsXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTE1OC1cdFx0XHQgIHZvaWQgKipwKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM9MjU1PWttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbi0tXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTI3NC1cdHNoZWFmLVx1MDAzZXNpemUgPSBzaXplO1xudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYzoyNzU6XHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhzLCBnZnAsIHNpemUsIHNoZWFmLVx1MDAzZW9iamVjdHMpKSB7XG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTI3Ni1cdFx0ZnJlZShzaGVhZik7XG4tLVxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYz0yODM9aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXG4tLVxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0zMDAtXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjMwMTpcdGlmICgha21lbV9jYWNoZV9hbGxvY19idWxrKHMsIGdmcCwgc2l6ZSAtIHNoZWFmLVx1MDAzZXNpemUsXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTMwMi1cdFx0XHRcdTAwMjZzaGVhZi1cdTAwM2VvYmplY3RzW3NoZWFmLVx1MDAzZXNpemVdKSlcbi0tXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jPTMzNz12b2lkIHRlc3Rfa21lbV9jYWNoZV9idWxrKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0zNTUtXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjM1NjpcdGttZW1fY2FjaGVfYWxsb2NfYnVsayh0ZXN0X2NhY2hlLCBfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgNSwgbGlzdCk7XG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTM1Ny1cdGttZW1fY2FjaGVfZnJlZV9idWxrKHRlc3RfY2FjaGUsIDUsIGxpc3QpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMzcwLVxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYzozNzE6XHRrbWVtX2NhY2hlX2FsbG9jX2J1bGsodGVzdF9jYWNoZTIsIF9fR0ZQX0RJUkVDVF9SRUNMQUlNLCAxMCwgbGlzdCk7XG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTM3Mi1cdGttZW1fY2FjaGVfZnJlZV9idWxrKHRlc3RfY2FjaGUyLCAxMCwgbGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjE2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFJlYWNoIG9mIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBhcmVhLi4uIGBrbWVtX2NhY2hlX2FsbG9jX2J1bGtgIGlzIHVzZWQgaW4gYSBmZXcga2V5IHBsYWNlcyBJIGtub3cgd2VsbCDigJMgbmV0d29ya2luZyB3aXRoIE5BUEkmIzM5O3Mgc2tidWZmIGNhY2hlLCBpb191cmluZywgYW5kIGV2ZW4gdGhvc2UgbWFwbGVfdHJlZSBzaGVhdmVzLiBNeSBjb25jZXJuIGlzLCBJ4oCZdmUgc2VlbiB0aGlzIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgZnVuY3Rpb24gYXBwZWFyIGFzIG1vZGlmaWVkLiBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgaW1wbGljYXRpb25zIG9mIHRob3NlIG1vZGlmaWNhdGlvbnMuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBiZXlvbmQgdGhlIG9idmlvdXMuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkmIzM5O2xsIGluaXRpYXRlIGEgYGdyZXBgIHNlYXJjaCBmb3IgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCB0byBzdGFydCBidWlsZGluZyBvdXQgYSBsaXN0IG9mIGFsbCBjYWxsZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9NTYxMT1zdGF0aWMgbm9pbmxpbmUgdm9pZCBmcmVlX3RvX3BhcnRpYWxfbGlzdChcbi0tXG5tbS9zbHViLmMtNTY4Mi0gKi9cbm1tL3NsdWIuYzo1NjgzOnN0YXRpYyBib29sIF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbm1tL3NsdWIuYy01Njg0LVx0XHRcdFx0ICAgICAgIHZvaWQgKmhlYWQsIGludCBjbnQpXG4tLVxubW0vc2x1Yi5jLTU3MDItXG5tbS9zbHViLmM6NTcwMzpcdGlmICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXHUwMDI2b2xkLCBcdTAwMjZuZXcsIFwmIzM0O19fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0XCYjMzQ7KSkge1xubW0vc2x1Yi5jLTU3MDQtXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbi0tXG5tbS9zbHViLmM9NzI2ND1fX3JlZmlsbF9vYmplY3RzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXG4tLVxubW0vc2x1Yi5jLTczMDctXG5tbS9zbHViLmM6NzMwODpcdFx0XHRpZiAoX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qocywgc2xhYiwgaGVhZCwgY291bnQpKVxubW0vc2x1Yi5jLTczMDktXHRcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBDYWxsIENoYWluKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBmdW5jdGlvbi4gSSBzZWUgaXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSBgX19yZWZpbGxfb2JqZWN0c19ub2RlYCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHdoZXJlIGlzICp0aGF0KiBjYWxsZWQ/IExldCBtZSBzZWXigKYgaXQmIzM5O3MgYF9fcmVmaWxsX29iamVjdHNfYW55YCBhbmQgYHJlZmlsbF9vYmplY3RzYC4gQWxyaWdodCwgdGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duIGEgYml0LiBBbmQgd2hvIGNhbGxzICp0aG9zZSo/IExvb2tzIGxpa2UgYHJlZmlsbF9zaGVhZmAgYW5kIGBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsa2AuIE9rYXksIHdlJiMzOTtyZSBidWlsZGluZyBhIG5pY2UgbGl0dGxlIGNhbGwgZ3JhcGggaGVyZS4KClNvLCBgcmVmaWxsX3NoZWFmYCBpcyBjYWxsZWQgYnkgYF9fcGNzX3JlcGxhY2VfZW1wdHlfbWFpbmAsIGBfX3ByZWZpbGxfc2hlYWZfcGZtZW1hbGxvY2AsIGFuZCBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgLiBBbmQgZmluYWxseSwgd2hhdCYjMzk7cyBjYWxsaW5nIGBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsa2A/IFJpZ2h0LCBga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmYCwgYGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmYCwgYW5kIGBrbWVtX2NhY2hlX2FsbG9jX2J1bGtfbm9wcm9mYC4KCk5vdywgSSYjMzk7bSBnZXR0aW5nIGEgZmVlbGluZyB0aGF0IHRoaXMgbWlnaHQgYmUgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIFNMVUIgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYENPTkZJR19TTFVCYCBvciBgQ09ORklHX1NMVUJfVElOWWAgb3IgcGVyaGFwcyBzb21ldGhpbmcgZWxzZSBsaWtlIHRoYXQgaXMgaW4gcGxheSBoZXJlLiBMZXQgbWUgaGF2ZSBhIGxvb2sgaW4gYG1tL3NsdWIuY2AgYXJvdW5kIHRoZSBgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGtgIGZ1bmN0aW9uLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBhcyB3ZWxsLiBUaGlzIG1pZ2h0IGdpdmUgbWUgdGhlIGtleSB0byB3aHkgdGhpcyBjaGFpbiBpcyBiZWluZyB1c2VkIGFuZCB3aGVyZSB0aGUgcmVhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBtaWdodCBsaWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTFVCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTYyPW1lbnUgXCYjMzQ7U2xhYiBhbGxvY2F0b3Igb3B0aW9uc1wmIzM0O1xubW0vS2NvbmZpZy0xNjMtXG5tbS9LY29uZmlnOjE2NDpjb25maWcgU0xVQlxubW0vS2NvbmZpZy0xNjUtXHRkZWZfYm9vbCB5XG4tLVxubW0vS2NvbmZpZz0xNjg9Y29uZmlnIEtWRlJFRV9SQ1VfQkFUQ0hFRFxuLS1cbm1tL0tjb25maWctMTcyLVxubW0vS2NvbmZpZzoxNzM6Y29uZmlnIFNMVUJfVElOWVxubW0vS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0NvbmZpZ3VyZSBmb3IgbWluaW1hbCBtZW1vcnkgZm9vdHByaW50XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz0yMTc9Y29uZmlnIFNMQUJfQlVDS0VUU1xuLS1cbm1tL0tjb25maWctMjMzLVxubW0vS2NvbmZpZzoyMzQ6Y29uZmlnIFNMVUJfU1RBVFNcbm1tL0tjb25maWctMjM1LVx0ZGVmYXVsdCBuXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz00MT1jb25maWcgREVCVUdfUEFHRUFMTE9DX0VOQUJMRV9ERUZBVUxUXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy00Ny1cbm1tL0tjb25maWcuZGVidWc6NDg6Y29uZmlnIFNMVUJfREVCVUdcbm1tL0tjb25maWcuZGVidWctNDktXHRkZWZhdWx0IHlcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTU4LVxubW0vS2NvbmZpZy5kZWJ1Zzo1OTpjb25maWcgU0xVQl9ERUJVR19PTlxubW0vS2NvbmZpZy5kZWJ1Zy02MC1cdGJvb2wgXCYjMzQ7U0xVQiBkZWJ1Z2dpbmcgb24gYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWcuZGVidWctNzItXG5tbS9LY29uZmlnLmRlYnVnOjczOmNvbmZpZyBTTFVCX1JDVV9ERUJVR1xubW0vS2NvbmZpZy5kZWJ1Zy03NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIFVBRiBkZXRlY3Rpb24gaW4gVFlQRVNBRkVfQllfUkNVIGNhY2hlcyAoZm9yIEtBU0FOKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg2NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipTTFVCIENvbmZpZ3VyYXRpb24gQW5hbHlzaXMqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZGVmYXVsdCBmb3IgYFNMVUJgLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQmIzM5O3Mgc2V0IHRvICYjMzk7eSYjMzk7IGluIGBtbS9LY29uZmlnYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIE5vdywgSSB3YW50IHRvIHNlZSBob3cgYENPTkZJR19TTFVCX1RJTllgIGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIGBTTFVCYCBjb25maWd1cmF0aW9uLiBNeSBtZW50YWwgbW9kZWwgaXMganVtcGluZyB0byBgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGtgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYC4gQXJlIGVpdGhlciBvZiB0aG9zZSBmdW5jdGlvbnMgY29uZGl0aW9uYWwgb24gYCFDT05GSUdfU0xVQl9USU5ZYD8gVG8gY29uZmlybSwgSSYjMzk7bGwgbmVlZCB0byBkaXZlIGludG8gYG1tL3NsdWIuY2AgYW5kIHNlYXJjaCBmb3IgdGhlIGBTTFVCX1RJTllgIHN5bWJvbC4gVGhhdCYjMzk7bGwgZXhwb3NlIHRoZSBrZXkgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTTFVCX1RJTlkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNjg9Y29uZmlnIEtWRlJFRV9SQ1VfQkFUQ0hFRFxubW0vS2NvbmZpZy0xNjktXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjE3MDpcdGRlcGVuZHMgb24gIVNMVUJfVElOWSBcdTAwMjZcdTAwMjYgIVRJTllfUkNVXG5tbS9LY29uZmlnLTE3MS1cdGRlcGVuZHMgb24gIVJDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG5tbS9LY29uZmlnLTE3Mi1cbm1tL0tjb25maWc6MTczOmNvbmZpZyBTTFVCX1RJTllcbm1tL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtDb25maWd1cmUgZm9yIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MjAwPWNvbmZpZyBTTEFCX0ZSRUVMSVNUX1JBTkRPTVxubW0vS2NvbmZpZy0yMDEtXHRib29sIFwmIzM0O1JhbmRvbWl6ZSBzbGFiIGZyZWVsaXN0XCYjMzQ7XG5tbS9LY29uZmlnOjIwMjpcdGRlcGVuZHMgb24gIVNMVUJfVElOWVxubW0vS2NvbmZpZy0yMDMtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0yMDg9Y29uZmlnIFNMQUJfRlJFRUxJU1RfSEFSREVORURcbm1tL0tjb25maWctMjA5LVx0Ym9vbCBcJiMzNDtIYXJkZW4gc2xhYiBmcmVlbGlzdCBtZXRhZGF0YVwmIzM0O1xubW0vS2NvbmZpZzoyMTA6XHRkZXBlbmRzIG9uICFTTFVCX1RJTllcbm1tL0tjb25maWctMjExLVx0aGVscFxuLS1cbm1tL0tjb25maWc9MjE3PWNvbmZpZyBTTEFCX0JVQ0tFVFNcbm1tL0tjb25maWctMjE4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGFsbG9jYXRpb24gZnJvbSBzZXBhcmF0ZSBrbWFsbG9jIGJ1Y2tldHNcJiMzNDtcbm1tL0tjb25maWc6MjE5Olx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXG5tbS9LY29uZmlnLTIyMC1cdGRlZmF1bHQgU0xBQl9GUkVFTElTVF9IQVJERU5FRFxuLS1cbm1tL0tjb25maWc9MjM0PWNvbmZpZyBTTFVCX1NUQVRTXG4tLVxubW0vS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O0VuYWJsZSBwZXJmb3JtYW5jZSBzdGF0aXN0aWNzXCYjMzQ7XG5tbS9LY29uZmlnOjIzNzpcdGRlcGVuZHMgb24gU1lTRlMgXHUwMDI2XHUwMDI2ICFTTFVCX1RJTllcbm1tL0tjb25maWctMjM4LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MjQ3PWNvbmZpZyBLTUFMTE9DX1BBUlRJVElPTl9DQUNIRVNcbm1tL0tjb25maWc6MjQ4Olx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXG5tbS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7UGFydGl0aW9uZWQgc2xhYiBjYWNoZXMgZm9yIG5vcm1hbCBrbWFsbG9jXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz00OD1jb25maWcgU0xVQl9ERUJVR1xuLS1cbm1tL0tjb25maWcuZGVidWctNTAtXHRib29sIFwmIzM0O0VuYWJsZSBTTFVCIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxubW0vS2NvbmZpZy5kZWJ1Zzo1MTpcdGRlcGVuZHMgb24gU1lTRlMgXHUwMDI2XHUwMDI2ICFTTFVCX1RJTllcbm1tL0tjb25maWcuZGVidWctNTItXHRzZWxlY3QgU1RBQ0tERVBPVCBpZiBTVEFDS1RSQUNFX1NVUFBPUlRcbi0tXG5tbS9zbGFiLmg9MjQwPXN0cnVjdCBrbWVtX2NhY2hlIHtcbi0tXG5tbS9zbGFiLmgtMjk4LSAqIGJvb3RzdHJhcF9zaGVhZiB0ZW1wb3JhcmlseSBkdXJpbmcgaW5pdCwgb3IgcGVybWFuZW50bHkgZm9yIHRoZSBib290IGNhY2hlc1xubW0vc2xhYi5oOjI5OTogKiBhbmQgY2FjaGVzIHdpdGggZGVidWdnaW5nIGVuYWJsZWQsIG9yIGFsbCBjYWNoZXMgd2l0aCBDT05GSUdfU0xVQl9USU5ZLiBUaGlzXG5tbS9zbGFiLmgtMzAwLSAqIGhlbHBlciBkaXN0aW5ndWlzaGVzIHdoZXRoZXIgY2FjaGUgaGFzIHJlYWwgbm9uLWJvb3RzdHJhcCBzaGVhdmVzLlxuLS1cbm1tL3NsYWIuaD0zMDI9c3RhdGljIGlubGluZSBib29sIGNhY2hlX2hhc19zaGVhdmVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2xhYi5oLTMwMy17XG5tbS9zbGFiLmg6MzA0Olx0LyogVGVzdCBDT05GSUdfU0xVQl9USU5ZIGZvciBjb2RlIGVsaW1pbmF0aW9uIHB1cnBvc2VzICovXG5tbS9zbGFiLmg6MzA1Olx0cmV0dXJuICFJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIFx1MDAyNlx1MDAyNiBzLVx1MDAzZXNoZWFmX2NhcGFjaXR5O1xubW0vc2xhYi5oLTMwNi19XG5tbS9zbGFiLmgtMzA3LVxubW0vc2xhYi5oOjMwODojaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFx1MDAyNlx1MDAyNiAhZGVmaW5lZChDT05GSUdfU0xVQl9USU5ZKVxubW0vc2xhYi5oLTMwOS0jZGVmaW5lIFNMQUJfU1VQUE9SVFNfU1lTRlMgMVxuLS1cbm1tL3NsYWJfY29tbW9uLmM9ODE1PUVYUE9SVF9TWU1CT0woa21hbGxvY19zaXplX3JvdW5kdXApO1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtODI4LVxubW0vc2xhYl9jb21tb24uYzo4Mjk6I2lmbmRlZiBDT05GSUdfU0xVQl9USU5ZXG5tbS9zbGFiX2NvbW1vbi5jLTgzMC0jZGVmaW5lIEtNQUxMT0NfUkNMX05BTUUoc3opXHQubmFtZVtLTUFMTE9DX1JFQ0xBSU1dID0gXCYjMzQ7a21hbGxvYy1yY2wtXCYjMzQ7ICNzeixcbi0tXG5tbS9zbHViLmM9MTkzPWVudW0gc2xhYl9mbGFncyB7XG4tLVxubW0vc2x1Yi5jLTE5OC1cbm1tL3NsdWIuYzoxOTk6I2lmbmRlZiBDT05GSUdfU0xVQl9USU5ZXG5tbS9zbHViLmMtMjAwLSNkZWZpbmUgX19mYXN0cGF0aF9pbmxpbmUgX19hbHdheXNfaW5saW5lXG4tLVxubW0vc2x1Yi5jPTI1ND12b2lkICpmaXh1cF9yZWRfbGVmdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqcClcbi0tXG5tbS9zbHViLmMtMjcyLVxubW0vc2x1Yi5jOjI3MzojaWZuZGVmIENPTkZJR19TTFVCX1RJTllcbm1tL3NsdWIuYy0yNzQtLypcbi0tXG5tbS9zbHViLmM9Mzg4NT1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fcGFydGlhbF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0zOTEzLVxubW0vc2x1Yi5jOjM5MTQ6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcbm1tL3NsdWIuYy0zOTE1LVx0XHRcdG9iamVjdCA9IGFsbG9jX3NpbmdsZV9mcm9tX3BhcnRpYWwocywgbiwgc2xhYixcbi0tXG5tbS9zbHViLmM9NDQ3OD1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG9jX2Zyb21fbmV3X3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy00NTI3LSAqIFNsb3cgcGF0aC4gV2UgZmFpbGVkIHRvIGFsbG9jYXRlIHZpYSBwZXJjcHUgc2hlYXZlcyBvciB0aGV5IGFyZSBub3QgYXZhaWxhYmxlXG5tbS9zbHViLmM6NDUyODogKiBkdWUgdG8gYm9vdHN0cmFwIG9yIGRlYnVnZ2luZyBlbmFibGVkIG9yIFNMVUJfVElOWS5cbm1tL3NsdWIuYy00NTI5LSAqXG4tLVxubW0vc2x1Yi5jPTQ1MzM9c3RhdGljIHZvaWQgKl9fX3NsYWJfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSxcbi0tXG5tbS9zbHViLmMtNDU4MS1cbm1tL3NsdWIuYzo0NTgyOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwga21lbV9jYWNoZV9kZWJ1ZyhzKSkge1xubW0vc2x1Yi5jLTQ1ODMtXHRcdG9iamVjdCA9IGFsbG9jX3NpbmdsZV9mcm9tX25ld19zbGFiKHMsIHNsYWIsIGFjKTtcbi0tXG5tbS9zbHViLmM9NTcyMT1zdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2x1Yi5jLTU3MzEtXG5tbS9zbHViLmM6NTczMjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcbm1tL3NsdWIuYy01NzMzLVx0XHRmcmVlX3RvX3BhcnRpYWxfbGlzdChzLCBzbGFiLCBoZWFkLCB0YWlsLCBjbnQsIGFkZHIpO1xuLS1cbm1tL3NsdWIuYz03NDMzPXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNzQzNy1cbm1tL3NsdWIuYzo3NDM4Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwga21lbV9jYWNoZV9kZWJ1ZyhzKSkge1xubW0vc2x1Yi5jLTc0MzktXHRcdGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgYWMgPSB7XG4tLVxubW0vc2x1Yi5jPTc1NjY9c3RhdGljIHVuc2lnbmVkIGludCBzbHViX21heF9vcmRlciA9XG5tbS9zbHViLmM6NzU2NzpcdElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgPyAxIDogUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7XG5tbS9zbHViLmMtNzU2OC1zdGF0aWMgdW5zaWduZWQgaW50IHNsdWJfbWluX29iamVjdHM7XG4tLVxubW0vc2x1Yi5jPTc3MDc9c3RhdGljIGludCBpbml0X3BlcmNwdV9zaGVhdmVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy03NzMyLVx0XHQgKiBXZSBrZWVwIGJvb3RzdHJhcF9zaGVhZiBmb3Iga21lbV9jYWNoZSBhbmQga21lbV9jYWNoZV9ub2RlLFxubW0vc2x1Yi5jOjc3MzM6XHRcdCAqIGNhY2hlcyB3aXRoIGRlYnVnIGVuYWJsZWQsIGFuZCBhbGwgY2FjaGVzIHdpdGggU0xVQl9USU5ZLlxubW0vc2x1Yi5jLTc3MzQtXHRcdCAqIEZvciBrbWFsbG9jIGNhY2hlcyBpdCYjMzk7cyB1c2VkIHRlbXBvcmFyaWx5IGR1cmluZyB0aGUgaW5pdGlhbFxuLS1cbm1tL3NsdWIuYz03ODcxPXN0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY3VsYXRlX3NoZWFmX2NhcGFjaXR5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy03ODc4LVxubW0vc2x1Yi5jOjc4Nzk6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX0RFQlVHX0ZMQUdTKVxubW0vc2x1Yi5jLTc4ODAtXHRcdHJldHVybiAwO1xuLS1cbm1tL3NsdWIuYz04NTc0PXN0YXRpYyB2b2lkIF9faW5pdCBib290c3RyYXBfY2FjaGVfc2hlYXZlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtODU4NC1cbm1tL3NsdWIuYzo4NTg1Olx0LyogY2FwYWNpdHkgY2FuIGJlIDAgZHVlIHRvIGRlYnVnZ2luZyBvciBTTFVCX1RJTlkgKi9cbm1tL3NsdWIuYy04NTg2LVx0aWYgKCFjYXBhY2l0eSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzMDIKCQkJCQkJCW91dHB1dDogMTkyCgkJCQkJCQl0aG91Z2h0czogMTMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipTTFVCIEFsbG9jYXRvciBPcHRpbWl6YXRpb24gLSBXb3J0aHkgb2YgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBub3RlIHRoYXQgYENPTkZJR19TTFVCYCBpcyB0aGUgZGVmYXVsdCBhbmQgc3RhbmRhcmQgc2xhYiBhbGxvY2F0b3IsIGFuZCBgQ09ORklHX1NMVUJfVElOWWAgZGlzYWJsZXMgc2hlYXZlcy4gTm8gb3RoZXIgc3BlY2lhbCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkIGFzIGZhciBhcyBJIGNhbiBzZWUuIFNvLCBgU0xVQmAgaXMgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciwgZW5hYmxlZCBieSBkZWZhdWx0LCBub3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgaGVyZS4KCk5vdywgdGhlIGNvcmUgb2YgdGhpcyBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGFmZmVjdGVkLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBtb2RpZmljYXRpb25zLCBzcGVjaWZpY2FsbHksIHRob3NlIHJlbGF0ZWQgdG8gZnJlZWxpc3QgaGFuZGxpbmcgYW5kIGJ1bGsgb3BlcmF0aW9ucy4gVGhlIGZ1bmN0aW9ucyB0aGF0IHN0YW5kIG91dCBhcmUgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBhbmQgYF9fcmVmaWxsX29iamVjdHNfbm9kZWAuIEkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHJlbGF0ZWQgZW50cnkgcG9pbnRzLiBUaGUgY2FsbGVycyBvciByZWxhdGVkIGZ1bmN0aW9ucyBpbmNsdWRlIGBfX3JlZmlsbF9vYmplY3RzX2FueWAsIGByZWZpbGxfb2JqZWN0c2AsIGByZWZpbGxfc2hlYWZgLCBga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmYCwgYGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmYCwgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCwgYW5kIHRoZSBga21lbV9jYWNoZV9hbGxvY19idWxrYCBmYW1pbHkuCgpga21lbV9jYWNoZV9hbGxvY19idWxrYCBpcyB1c2VkIGJ5IG5ldHdvcmtpbmcgYW5kIHNvbWUgYnVsayBhbGxvY2F0b3JzLCBidXQgaXQgaXNuJiMzOTt0IGFzIHViaXF1aXRvdXMgYXMgYGttYWxsb2NgIGFuZCBga2ZyZWVgLCB3aGljaCBJIG5vdGUgZm9yIGNvbnRleHQuIFRoZSBvdGhlcnMsIGBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWZgLCBga21lbV9jYWNoZV9yZWZpbGxfc2hlYWZgLCBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgLCBgcmVmaWxsX3NoZWFmYCwgYHJlZmlsbF9vYmplY3RzYCwgYF9fcmVmaWxsX29iamVjdHNfbm9kZWAsIGFuZCBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgLCBhcmUgdGhlIG1vcmUgc3BlY2lmaWMgdGFyZ2V0cyBoZXJlLgoKTGV0JiMzOTtzIHZlcmlmeSB0aGVzZSBzeW1ib2xzLiBJJiMzOTttIGNvbmZpZGVudCB0aGV5IGFyZSBhbGwgaW4gYG1tL3NsdWIuY2AuCgpPa2F5LCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGVzZSBzeW1ib2xzIGV4aXN0IGluIGBtbS9zbHViLmNgOgoqICAgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YDogc3RhdGljCiogICBgX19yZWZpbGxfb2JqZWN0c19ub2RlYDogc3RhdGljCiogICBgcmVmaWxsX29iamVjdHNgOiBzdGF0aWMKKiAgIGByZWZpbGxfc2hlYWZgOiBzdGF0aWMKKiAgIGBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWZgOiBleHBvcnRlZAoqICAgYGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmYDogZXhwb3J0ZWQKKiAgIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmA6IGV4cG9ydGVkCgpMaW5lIG51bWJlciB2ZXJpZmljYXRpb24gaXMgYWxzbyBkb25lOgoqICAgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBhdCBsaW5lIDU2ODMKKiAgIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgIGF0IGxpbmUgNzI2NAoqICAgYHJlZmlsbF9vYmplY3RzYCBhdCBsaW5lIDczOTcKKiAgIGByZWZpbGxfc2hlYWZgIGF0IGxpbmUgMjg3NgoqICAgYGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZmAgYXQgbGluZSA1MTExCiogICBga21lbV9jYWNoZV9yZWZpbGxfc2hlYWZgIGF0IGxpbmUgNTI1MgoqICAgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCBhdCBsaW5lIDUxOTQKCkdvb2QsIGFuZCBpdCBsb29rcyBsaWtlIGBtbS9zbHViLmNgIGlzIHRoZSBvbmx5IGZpbGUgYWZmZWN0ZWQuCgpOb3csIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QuIFRoZSBrZXkgaXMgaG93IGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgYW5kIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgIGhhdmUgYmVlbiBtb2RpZmllZCwgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgbG9ja2luZyBhbmQgZnJlZWxpc3QgbWFuYWdlbWVudCBkdXJpbmcgYnVsayByZWZpbGxzIGFuZCBzaGVhdmVzLiBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIG5vdyB0YWtlcyBgbi0mZ3Q7bGlzdF9sb2NrYCBhcm91bmQgYHNsYWJfdXBkYXRlX2ZyZWVsaXN0YCBhbmQgdGhlbiBpbW1lZGlhdGVseSBjYWxscyBgYWRkX3BhcnRpYWwobiwgc2xhYiwgQUREX1RPX1RBSUwpYCB1bmRlciB0aGUgc2FtZSBsb2NrLiBUaGlzIGNoYW5nZXMgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgdGhlIGhhbmRsaW5nIG9mIHBhcnRpYWwgc2xhYiBsaXN0cywgbW92aW5nIGZyb20gYSBkZWZlcnJlZCBgcGMuc2xhYnNgIHVwZGF0ZSB0byBhbiBpbW1lZGlhdGUgY2FsbC4KClRoaXMgaXMgYSBjb3JlIG1lbW9yeSBhbGxvY2F0b3IgY2hhbmdlIHJlYWNoYWJsZSB2aWEgY29tbW9uIHN5c2NhbGxzIGFuZCBhbGxvY2F0aW9ucywgZXNwZWNpYWxseSBpbiBRRU1VL3g4Nl82NCBlbnZpcm9ubWVudHMuIEdpdmVuIHRoZXNlIG1vZGlmaWNhdGlvbnMsIHRoaXMgaXMgcHJpbWUgdGVycml0b3J5IGZvciBjb25jdXJyZW5jeSBidWdzLCBsaXN0IGNvcnJ1cHRpb24sIGxvY2tpbmcgaXNzdWVzLCBhbmQgaW5jb25zaXN0ZW5jaWVzIGluIHNsYWIgc3RhdGVzLiBGdXp6aW5nIGlzICphYnNvbHV0ZWx5KiB3YXJyYW50ZWQgaGVyZS4KClNvLCB0aGUgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYDoKKiAgIGBXb3J0aEZ1enppbmdgOiAqKnRydWUqKgoqICAgYFJlYXNvbmluZ2A6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGZyZWVsaXN0IHJldHVybiBsb2dpYyBhbmQgcGFydGlhbCBzbGFiIGxpc3QgaGFuZGxpbmcgdW5kZXIgYG4tJmd0O2xpc3RfbG9ja2AgaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KClgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlKClgIGluIHRoZSBTTFVCIGFsbG9jYXRvciAobW0vc2x1Yi5jKS4gVGhpcyBhZmZlY3RzIFNMVUIgYnVsayBhbGxvY2F0aW9uIGFuZCBzaGVhZiByZWZpbGxpbmcgbG9naWMuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHdhcnJhbnQgZnV6emluZyB0byBkZXRlY3QgcmFjZSBjb25kaXRpb25zIG9yIGxpc3QvbG9jayBjb3JydXB0aW9uLiYjMzQ7CiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O19fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0JiMzNDssICYjMzQ7X19yZWZpbGxfb2JqZWN0c19ub2RlJiMzNDssICYjMzQ7cmVmaWxsX29iamVjdHMmIzM0OywKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0xVQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0JiMzNDssCiAgICAmIzM0O19fcmVmaWxsX29iamVjdHNfbm9kZSYjMzQ7LAogICAgJiMzNDtyZWZpbGxfb2JqZWN0cyYjMzQ7LAogICAgJiMzNDtyZWZpbGxfc2hlYWYmIzM0OywKICAgICYjMzQ7a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfcmVmaWxsX3NoZWFmJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfcmV0dXJuX3NoZWFmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmcmVlbGlzdCByZXR1cm4gYW5kIHBhcnRpYWwgc2xhYiBsaXN0IG1hbmFnZW1lbnQgbG9naWMgdW5kZXIgbi1cdTAwM2VsaXN0X2xvY2sgaW4gX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3QoKSBhbmQgX19yZWZpbGxfb2JqZWN0c19ub2RlKCkgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIChtbS9zbHViLmMpLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgU0xVQiBidWxrIGFsbG9jYXRpb24gYW5kIHNoZWFmIHJlZmlsbGluZyBwYXRocywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGNyaXRpY2FsIGZvciBtZW1vcnkgc2FmZXR5IGFuZCBsb2NrIGNvcnJlY3RuZXNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTFVCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3QmIzM0OywKICAgICYjMzQ7X19yZWZpbGxfb2JqZWN0c19ub2RlJiMzNDssCiAgICAmIzM0O3JlZmlsbF9vYmplY3RzJiMzNDssCiAgICAmIzM0O3JlZmlsbF9zaGVhZiYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYmIzM0OywKICAgICYjMzQ7a21lbV9jYWNoZV9yZWZpbGxfc2hlYWYmIzM0OywKICAgICYjMzQ7a21lbV9jYWNoZV9yZXR1cm5fc2hlYWYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZyZWVsaXN0IHJldHVybiBhbmQgcGFydGlhbCBzbGFiIGxpc3QgbWFuYWdlbWVudCBsb2dpYyB1bmRlciBuLVx1MDAzZWxpc3RfbG9jayBpbiBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdCgpIGFuZCBfX3JlZmlsbF9vYmplY3RzX25vZGUoKSBpbiB0aGUgU0xVQiBhbGxvY2F0b3IgKG1tL3NsdWIuYykuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBTTFVCIGJ1bGsgYWxsb2NhdGlvbiBhbmQgc2hlYWYgcmVmaWxsaW5nIHBhdGhzLCB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgY3JpdGljYWwgZm9yIG1lbW9yeSBzYWZldHkgYW5kIGxvY2sgY29ycmVjdG5lc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBTTFVCIGFsbG9jYXRvciBpbnRlcm5hbCBsb2NraW5nIGFuZCBwYXJ0aWFsIGxpc3QgbWFuYWdlbWVudCBpbiBgbW0vc2x1Yi5jYCAoYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBhbmQgYF9fcmVmaWxsX29iamVjdHNfbm9kZWApLiBTcGVjaWZpY2FsbHksIGl0IGFjcXVpcmVzIHRoZSBub2RlIGxpc3RfbG9jayBhbmQgYWRkcyB0aGUgc2xhYiB0byB0aGUgcGFydGlhbCBsaXN0IGRpcmVjdGx5IGluIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgaW5zdGVhZCBvZiByZS1hZGRpbmcgaXQgdG8gdGhlIGxvY2FsIGBwYy5zbGFic2AgbGlzdCBpbiBgX19yZWZpbGxfb2JqZWN0c19ub2RlYC5cblxuVGhlc2UgY2hhbmdlcyBleGNsdXNpdmVseSBhZmZlY3QgU0xVQiBpbnRlcm5hbCBzdGF0ZSwgbG9ja2luZywgYW5kIGZyZWVsaXN0L3BhcnRpYWwgbGlzdCB0cmFja2luZy4gQW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIGxvY2sgb3JkZXIgaW52ZXJzaW9ucywgbGlzdCBjb3JydXB0aW9uLCBkb3VibGUtZnJlZSwgb3Igc2xhYiBtZXRhZGF0YSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgY2hlY2tzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkIGFjY2Vzc2VzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0MThjY2JhZmQ1OWJiYzY3NTc1ZWYwNDdkMjRmNDZkZDdkZjBlOTQzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAxMzoyNjozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCBmOWI1NmNiNDM5ZTcwLi41Y2JiYWNiOGVlMzJmIDEwMDY0NAotLS0gYS9tbS9zbHViLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2x1Yi5jCkBAIC01Njg0LDYgJiM0Mzs1Njg0LDggQEAgc3RhdGljIGJvb2wgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLAogCQkJCSAgICAgICB2b2lkICpoZWFkLCBpbnQgY250KQogewogCXN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBvbGQsIG5ldzsKJiM0MzsJc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbjsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW9sZC5mcmVlbGlzdCA9IHNsYWItJmd0O2ZyZWVsaXN0OwogCW9sZC5jb3VudGVycyA9IHNsYWItJmd0O2NvdW50ZXJzOwpAQCAtNTY5NSw5ICYjNDM7NTY5NywxNiBAQCBzdGF0aWMgYm9vbCBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsCiAJbmV3LmNvdW50ZXJzID0gb2xkLmNvdW50ZXJzOwogCW5ldy5pbnVzZSAtPSBjbnQ7CiAKLQlpZiAoIXNsYWJfdXBkYXRlX2ZyZWVsaXN0KHMsIHNsYWIsICZhbXA7b2xkLCAmYW1wO25ldywgJiMzNDtfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdCYjMzQ7KSkKJiM0MzsJbiA9IGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJaWYgKCFzbGFiX3VwZGF0ZV9mcmVlbGlzdChzLCBzbGFiLCAmYW1wO29sZCwgJmFtcDtuZXcsICYjMzQ7X19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3QmIzM0OykpIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiAKJiM0MzsJYWRkX3BhcnRpYWwobiwgc2xhYiwgQUREX1RPX1RBSUwpOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTcyOTYsMTAgJiM0Mzs3MzA1LDggQEAgX19yZWZpbGxfb2JqZWN0c19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWkKIAkJCXZvaWQgKmhlYWQgPSBvYmplY3Q7CiAJCQl2b2lkICp0YWlsOwogCi0JCQlpZiAoX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qocywgc2xhYiwgaGVhZCwgY291bnQpKSB7Ci0JCQkJbGlzdF9hZGQoJmFtcDtzbGFiLSZndDtzbGFiX2xpc3QsICZhbXA7cGMuc2xhYnMpOwomIzQzOwkJCWlmIChfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzLCBzbGFiLCBoZWFkLCBjb3VudCkpCiAJCQkJYnJlYWs7Ci0JCQl9CiAKIAkJCWRvIHsKIAkJCQl0YWlsID0gb2JqZWN0OwpAQCAtNzMxMiw3ICYjNDM7NzMxOSw3IEBAIF9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pCiAJCQlicmVhazsKIAl9CiAKLQlpZiAoIWxpc3RfZW1wdHkoJmFtcDtwYy5zbGFicykpIHsKJiM0MzsJaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZhbXA7cGMuc2xhYnMpKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoc2xhYiwgJmFtcDtwYy5zbGFicywgc2xhYl9saXN0KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCwgYXMgSSB1bmRlcnN0YW5kIGl0LgoKKipFdmFsdWF0aW5nIHRoZSBTTFVCIFBhdGNoIGZvciBGdXp6aW5nIE5lZWRzKioKClJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIFNMVUIgcGF0Y2ggcmVxdWlyZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGRldGVjdG9ycyBhcmUgZ29pbmcgdG8gYmUgZ29vZCBlbm91Z2guIFRoYXTigJlzIGEgZ29vZCBxdWVzdGlvbiwgYW5kIHRoZSBhbnN3ZXIsIGFzIHVzdWFsLCBjb21lcyBkb3duIHRvIHRoZSBjb2RlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW4uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7cmUgYWN0dWFsbHkgbG9va2luZyBhdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSBhbmQgcGF0Y2ggZGV0YWlscywgb2J2aW91c2x5LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHB1bGwgdXAgYG1tL3NsdWIuY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCB0aGUgcmVnaW9ucyBtZW50aW9uZWQsIHNwZWNpZmljYWxseSBsaW5lcyA1Njg0IGFuZCA3Mjk2LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIG9mIHRob3NlIHNlY3Rpb25zIG9mIGNvZGUgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZlZWwgZm9yIHRoZSB0eXBlIG9mIG1lbW9yeSBtYW5pcHVsYXRpb24gYmVpbmcgZG9uZSBhbmQgd2hldGhlciBpdCYjMzk7cyB0aGUgc29ydCBvZiB0aGluZyB0aGF0IEtBU0FOIG1pZ2h0IG1pc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdG9vbHMgSSBoYXZlIGF2YWlsYWJsZSB0byBjb25kdWN0IG15IGludmVzdGlnYXRpb24uIFRoaXMgd2lsbCBpbmZsdWVuY2UgbXkgY29uY2x1c2lvbnMgYW5kIHRoZSB0aG9yb3VnaG5lc3Mgb2YgbXkgYW5hbHlzaXMuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpZiBhIHNwZWNpYWxpemVkIEtNU0FOIHNlc3Npb24gaXMgd2FycmFudGVkLCBvciBpZiBLQVNBTiBwcm92aWRlcyBhZGVxdWF0ZSBjb3ZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU2ODA6XHQgKlxuNTY4MTpcdCAqIEZhaWwgaWYgdGhlIHNsYWIgaXNuJiMzOTt0IGZ1bGwgYW55bW9yZSBkdWUgdG8gYSBjb25jdXJyZW50IGZyZWUuXG41NjgyOlx0ICovXG41NjgzOlx0c3RhdGljIGJvb2wgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuNTY4NDpcdFx0XHRcdFx0ICAgICAgIHZvaWQgKmhlYWQsIGludCBjbnQpXG41Njg1Olx0e1xuNTY4NjpcdFx0c3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIG9sZCwgbmV3O1xuNTY4NzpcdFx0c3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbjtcbjU2ODg6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG41Njg5Olx0XG41NjkwOlx0XHRvbGQuZnJlZWxpc3QgPSBzbGFiLVx1MDAzZWZyZWVsaXN0O1xuNTY5MTpcdFx0b2xkLmNvdW50ZXJzID0gc2xhYi1cdTAwM2Vjb3VudGVycztcbjU2OTI6XHRcbjU2OTM6XHRcdGlmIChvbGQuZnJlZWxpc3QpXG41Njk0Olx0XHRcdHJldHVybiBmYWxzZTtcbjU2OTU6XHRcbjU2OTY6XHRcdG5ldy5mcmVlbGlzdCA9IGhlYWQ7XG41Njk3Olx0XHRuZXcuY291bnRlcnMgPSBvbGQuY291bnRlcnM7XG41Njk4Olx0XHRuZXcuaW51c2UgLT0gY250O1xuNTY5OTpcdFxuNTcwMDpcdFx0biA9IGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKTtcbjU3MDE6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG41NzAyOlx0XG41NzAzOlx0XHRpZiAoIXNsYWJfdXBkYXRlX2ZyZWVsaXN0KHMsIHNsYWIsIFx1MDAyNm9sZCwgXHUwMDI2bmV3LCBcJiMzNDtfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFwmIzM0OykpIHtcbjU3MDQ6XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuNTcwNTpcdFx0XHRyZXR1cm4gZmFsc2U7XG41NzA2Olx0XHR9XG41NzA3Olx0XG41NzA4Olx0XHRhZGRfcGFydGlhbChuLCBzbGFiLCBBRERfVE9fVEFJTCk7XG41NzA5Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG41NzEwOlx0XHRyZXR1cm4gdHJ1ZTtcbjU3MTE6XHR9XG41NzEyOlx0XG41NzEzOlx0LypcbjU3MTQ6XHQgKiBTbG93IHBhdGggaGFuZGxpbmcuIFRoaXMgbWF5IHN0aWxsIGJlIGNhbGxlZCBmcmVxdWVudGx5IHNpbmNlIG9iamVjdHNcbjU3MTU6XHQgKiBoYXZlIGEgbG9uZ2VyIGxpZmV0aW1lIHRoYW4gdGhlIGNwdSBzbGFicyBpbiBtb3N0IHByb2Nlc3NpbmcgbG9hZHMuXG41NzE2Olx0ICpcbjU3MTc6XHQgKiBTbyB3ZSBzdGlsbCBhdHRlbXB0IHRvIHJlZHVjZSBjYWNoZSBsaW5lIHVzYWdlLiBKdXN0IHRha2UgdGhlIHNsYWJcbjU3MTg6XHQgKiBsb2NrIGFuZCBmcmVlIHRoZSBpdGVtLiBJZiB0aGVyZSBpcyBubyBhZGRpdGlvbmFsIHBhcnRpYWwgc2xhYlxuNTcxOTpcdCAqIGhhbmRsaW5nIHJlcXVpcmVkIHRoZW4gd2UgY2FuIHJldHVybiBpbW1lZGlhdGVseS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBgbW0vc2x1Yi5jYCDigJMgTGluZSBieSBMaW5lKioKCk9rYXksIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYG1tL3NsdWIuY2AgY29kZSBtb3JlIGRlZXBseSwgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0JiMzNDsuICBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgbWlkZGxlIG9mIHRoZSBmaWxlIHRvIHNlZSB3aGF0IGlzIGhhcHBlbmluZywgc28gbGV0JiMzOTtzIGNoZWNrIGxpbmVzIDcyODAgdGhyb3VnaCA3MzQwLiBJIGV4cGVjdCB0byBnZXQgc29tZSB1c2VmdWwgaW5mb3JtYXRpb24gb24gdGhlIHRvcGljIGF0IGhhbmQgYnkgem9vbWluZyBpbiBvbiB0aGlzIHNlY3Rpb24uIEkgYW0gaW50ZXJlc3RlZCB0byBzZWUgd2hhdCB0aGF0IHBhcnRpY3VsYXIgY29kZSBpcyBkb2luZyB3aXRoaW4gdGhlIGdyZWF0ZXIgY29udGV4dC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJIHdhbnQgdG8gYnVpbGQgYSBiZXR0ZXIgcGljdHVyZSBvZiB3aGF0IGlzIGdvaW5nIG9uIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzI4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3MjgwOlx0XG43MjgxOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFx1MDAyNnBjLnNsYWJzLCBzbGFiX2xpc3QpIHtcbjcyODI6XHRcbjcyODM6XHRcdFx0dW5zaWduZWQgaW50IGNvdW50O1xuNzI4NDpcdFxuNzI4NTpcdFx0XHRsaXN0X2RlbChcdTAwMjZzbGFiLVx1MDAzZXNsYWJfbGlzdCk7XG43Mjg2Olx0XG43Mjg3Olx0XHRcdG9iamVjdCA9IGdldF9mcmVlbGlzdF9ub2ZyZWV6ZShzLCBzbGFiLCBcdTAwMjZjb3VudCk7XG43Mjg4Olx0XG43Mjg5Olx0XHRcdHdoaWxlIChjb3VudCBcdTAwMjZcdTAwMjYgcmVmaWxsZWQgXHUwMDNjIG1heCkge1xuNzI5MDpcdFx0XHRcdHBbcmVmaWxsZWRdID0gb2JqZWN0O1xuNzI5MTpcdFx0XHRcdG9iamVjdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpO1xuNzI5MjpcdFx0XHRcdG1heWJlX3dpcGVfb2JqX2ZyZWVwdHIocywgcFtyZWZpbGxlZF0pO1xuNzI5MzpcdFxuNzI5NDpcdFx0XHRcdHJlZmlsbGVkJiM0MzsmIzQzOztcbjcyOTU6XHRcdFx0XHRjb3VudC0tO1xuNzI5NjpcdFx0XHR9XG43Mjk3Olx0XG43Mjk4Olx0XHRcdC8qXG43Mjk5Olx0XHRcdCAqIEZyZWVsaXN0IGhhZCBtb3JlIG9iamVjdHMgdGhhbiB3ZSBjYW4gYWNjb21tb2RhdGUsIHdlIG5lZWQgdG9cbjczMDA6XHRcdFx0ICogZnJlZSB0aGVtIGJhY2suIEZpcnN0IHdlIHRyeSB0byBiZSBvcHRpbWlzdGljIGFuZCBhc3N1bWUgdGhlXG43MzAxOlx0XHRcdCAqIHNsYWIgaXMgc3RpbGwgZnVsbCBzaW5jZSB3ZSBqdXN0IGRldGFjaGVkIGl0cyBmcmVlbGlzdC5cbjczMDI6XHRcdFx0ICogT3RoZXJ3aXNlIHdlIG11c3QgZmluZCB0aGUgdGFpbCBvYmplY3QuXG43MzAzOlx0XHRcdCAqL1xuNzMwNDpcdFx0XHRpZiAodW5saWtlbHkoY291bnQpKSB7XG43MzA1Olx0XHRcdFx0dm9pZCAqaGVhZCA9IG9iamVjdDtcbjczMDY6XHRcdFx0XHR2b2lkICp0YWlsO1xuNzMwNzpcdFxuNzMwODpcdFx0XHRcdGlmIChfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzLCBzbGFiLCBoZWFkLCBjb3VudCkpXG43MzA5Olx0XHRcdFx0XHRicmVhaztcbjczMTA6XHRcbjczMTE6XHRcdFx0XHRkbyB7XG43MzEyOlx0XHRcdFx0XHR0YWlsID0gb2JqZWN0O1xuNzMxMzpcdFx0XHRcdFx0b2JqZWN0ID0gZ2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCk7XG43MzE0Olx0XHRcdFx0fSB3aGlsZSAob2JqZWN0KTtcbjczMTU6XHRcdFx0XHRfX3NsYWJfZnJlZShzLCBzbGFiLCBoZWFkLCB0YWlsLCBjb3VudCwgX1JFVF9JUF8pO1xuNzMxNjpcdFx0XHR9XG43MzE3Olx0XG43MzE4Olx0XHRcdGlmIChyZWZpbGxlZCBcdTAwM2U9IG1heClcbjczMTk6XHRcdFx0XHRicmVhaztcbjczMjA6XHRcdH1cbjczMjE6XHRcbjczMjI6XHRcdGlmICh1bmxpa2VseSghbGlzdF9lbXB0eShcdTAwMjZwYy5zbGFicykpKSB7XG43MzIzOlx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG43MzI0Olx0XG43MzI1Olx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2xhYiwgXHUwMDI2cGMuc2xhYnMsIHNsYWJfbGlzdClcbjczMjY6XHRcdFx0XHRzZXRfbm9kZV9wYXJ0aWFsX3N0YXRlKG4sIHNsYWIpO1xuNzMyNzpcdFxuNzMyODpcdFx0XHRsaXN0X3NwbGljZV90YWlsKFx1MDAyNnBjLnNsYWJzLCBcdTAwMjZuLVx1MDAzZXBhcnRpYWwpO1xuNzMyOTpcdFxuNzMzMDpcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG43MzMxOlx0XHR9XG43MzMyOlx0XG43MzMzOlx0XHRyZXR1cm4gcmVmaWxsZWQ7XG43MzM0Olx0fVxuNzMzNTpcdFxuNzMzNjpcdCNpZmRlZiBDT05GSUdfTlVNQVxuNzMzNzpcdHN0YXRpYyB1bnNpZ25lZCBpbnRcbjczMzg6XHRfX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbjczMzk6XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbWF4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjM4CgkJCQkJCQlvdXRwdXQ6IDIyMwoJCQkJCQkJdGhvdWdodHM6IDEyMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqU0xVQiBGcmVlbGlzdCBSZXR1cm4gT3B0aW1pemF0aW9uIEFuYWx5c2lzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIG9wdGltaXppbmcgdGhlIGZyZWVsaXN0IHJldHVybiBwYXRoIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIFNwZWNpZmljYWxseSwgaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KClgLCB3ZSYjMzk7dmUgaW50cm9kdWNlZCBhIGxvY2sgKGBuLSZndDtsaXN0X2xvY2tgKSBhcm91bmQgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaW52b2x2aW5nIGBzbGFiX3VwZGF0ZV9mcmVlbGlzdCgpYCBhbmQgdGhlIHN1YnNlcXVlbnQgYGFkZF9wYXJ0aWFsKClgIGNhbGwuIFByZXZpb3VzbHksIHRoaXMgd2FzIGhhbmRsZWQgYXQgdGhlIGNhbGxlciBpbiBgX19yZWZpbGxfb2JqZWN0c19ub2RlKClgLiBUaGUgdXBkYXRlIGFsc28gcmVtb3ZlcyB0aGUgYGxpc3RfYWRkYCB3aXRoaW4gYF9fcmVmaWxsX29iamVjdHNfbm9kZWAuCgpFc3NlbnRpYWxseSwgdGhpcyBjb25zb2xpZGF0ZXMgdGhlIGxvY2sgYWNxdWlzaXRpb24gYW5kIHBhcnRpYWwgc2xhYiBhZGRpdGlvbiBsb2dpYy4gSW5zdGVhZCBvZiByZXR1cm5pbmcgdG8gdGhlIGNhbGxlciB0byBhZGQgaXQgdG8gdGhlIGBwYy5zbGFic2AgbGlzdCwgdGhlIHBhcnRpYWwgc2xhYiBhZGRpdGlvbiBpcyBoYW5kbGVkIGRpcmVjdGx5LiBUaGUgbG9jayBpcyBoZWxkIGR1cmluZyB0aGUgY3J1Y2lhbCB1cGRhdGUgYW5kIGFkZGl0aW9uLCBlbnN1cmluZyBhdG9taWNpdHkuCgpGcm9tIG15IHBlcnNwZWN0aXZlLCBhcyBhIFNMVUIgZXhwZXJ0LCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgYWxsb2NhdG9yIGludGVybmFsczogbG9jayBhY3F1aXNpdGlvbiwgZnJlZWxpc3QgaGFuZGxpbmcsIGFuZCB0aGUgbWFuYWdlbWVudCBvZiBwYXJ0aWFsIHNsYWJzLiBUaGUgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgbWFpbnRhaW5pbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIGF2b2lkaW5nIGNvbmN1cnJlbmN5IGlzc3VlcyB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLgoKTXkgYW5hbHlzaXMgZm9jdXNlcyBvbiBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBkb3VibGUgYWRkaXRpb25zIHRvIGxpc3RzLCBhbmQgZ2VuZXJhbCBsaXN0IGNvcnJ1cHRpb24uIFRoZSBhZGRpdGlvbiBvZiB0aGUgbG9jayBpcyBjbGVhcmx5IGEgbW92ZSB0b3dhcmQgaW5jcmVhc2VkIGNvbmN1cnJlbmN5IHNhZmV0eSwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGZyZWVsaXN0IG1hbmlwdWxhdGlvbi4gQnkgbW92aW5nIHRoZSBgYWRkX3BhcnRpYWxgIGNhbGwgaW50byB0aGUgY3JpdGljYWwgc2VjdGlvbiwgd2UgYXJlIGVuc3VyaW5nIHRoYXQgdXBkYXRlcyB0byB0aGUgcGFydGlhbCBzbGFiIGxpc3RzIGFyZSBhdG9taWMuCgpHaXZlbiBteSBleHBlcmllbmNlLCBJIGRvIG5vdCBleHBlY3QgdGhpcyBwYXRjaCB0byBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29uZGl0aW9uYWwgbG9naWMsIGNyZWF0ZSB1bmluaXRpYWxpemVkIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBvciBoYXZlIGFueSByZWxhdGVkIGlzc3Vlcy4gVGhlIGBzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnNgIHZhcmlhYmxlcyBhcmUgYXNzaWduZWQgcHJvcGVybHkuIFRoZSBgZmxhZ3NgIHZhcmlhYmxlIGlzIGJlaW5nIGluaXRpYWxpemVkIGFzIHdlbGwuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYnV0IEtBU0FOIGFuZCBMT0NLREVQIGFyZS4gS0FTQU4gaXMgc3VpdGFibGUgZm9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gTE9DS0RFUCwgb24gdGhlIG90aGVyIGhhbmQsIGNhbiBoZWxwIHRvIGNhdGNoIGxvY2sgb3JkZXJpbmcgdmlvbGF0aW9ucyBvciBkZWFkbG9ja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFNMVUIgYWxsb2NhdG9yIGludGVybmFsIGxvY2tpbmcgYW5kIHBhcnRpYWwgbGlzdCBtYW5hZ2VtZW50IGluIGBtbS9zbHViLmNgIChgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYCkuIFNwZWNpZmljYWxseSwgaXQgYWNxdWlyZXMgdGhlIG5vZGUgbGlzdF9sb2NrIGFuZCBhZGRzIHRoZSBzbGFiIHRvIHRoZSBwYXJ0aWFsIGxpc3QgZGlyZWN0bHkgaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBpbnN0ZWFkIG9mIHJlLWFkZGluZyBpdCB0byB0aGUgbG9jYWwgYHBjLnNsYWJzYCBsaXN0IGluIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgLlxuXG5UaGVzZSBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IGFmZmVjdCBTTFVCIGludGVybmFsIHN0YXRlLCBsb2NraW5nLCBhbmQgZnJlZWxpc3QvcGFydGlhbCBsaXN0IHRyYWNraW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKHN1Y2ggYXMgbG9jayBvcmRlciBpbnZlcnNpb25zLCBsaXN0IGNvcnJ1cHRpb24sIGRvdWJsZS1mcmVlLCBvciBzbGFiIG1ldGFkYXRhIGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBjaGVja3MuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGQgYWNjZXNzZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFNMVUIgYWxsb2NhdG9yIGludGVybmFsIGxvY2tpbmcgYW5kIHBhcnRpYWwgbGlzdCBtYW5hZ2VtZW50IGluIGBtbS9zbHViLmNgIChgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYCkuIFNwZWNpZmljYWxseSwgaXQgYWNxdWlyZXMgdGhlIG5vZGUgbGlzdF9sb2NrIGFuZCBhZGRzIHRoZSBzbGFiIHRvIHRoZSBwYXJ0aWFsIGxpc3QgZGlyZWN0bHkgaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBpbnN0ZWFkIG9mIHJlLWFkZGluZyBpdCB0byB0aGUgbG9jYWwgYHBjLnNsYWJzYCBsaXN0IGluIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgLlxuXG5UaGVzZSBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IGFmZmVjdCBTTFVCIGludGVybmFsIHN0YXRlLCBsb2NraW5nLCBhbmQgZnJlZWxpc3QvcGFydGlhbCBsaXN0IHRyYWNraW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKHN1Y2ggYXMgbG9jayBvcmRlciBpbnZlcnNpb25zLCBsaXN0IGNvcnJ1cHRpb24sIGRvdWJsZS1mcmVlLCBvciBzbGFiIG1ldGFkYXRhIGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBjaGVja3MuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGQgYWNjZXNzZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6MjY6MzkuODY1MzY1OTExWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwODE4MjU1MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMVUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFwiLFxuICAgIFwiX19yZWZpbGxfb2JqZWN0c19ub2RlXCIsXG4gICAgXCJyZWZpbGxfb2JqZWN0c1wiLFxuICAgIFwicmVmaWxsX3NoZWFmXCIsXG4gICAgXCJrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWZcIixcbiAgICBcImttZW1fY2FjaGVfcmVmaWxsX3NoZWFmXCIsXG4gICAgXCJrbWVtX2NhY2hlX3JldHVybl9zaGVhZlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgU0xVQiBhbGxvY2F0b3IgaW50ZXJuYWwgbG9ja2luZyBhbmQgcGFydGlhbCBsaXN0IG1hbmFnZW1lbnQgaW4gYG1tL3NsdWIuY2AgKGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgYW5kIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgKS4gU3BlY2lmaWNhbGx5LCBpdCBhY3F1aXJlcyB0aGUgbm9kZSBsaXN0X2xvY2sgYW5kIGFkZHMgdGhlIHNsYWIgdG8gdGhlIHBhcnRpYWwgbGlzdCBkaXJlY3RseSBpbiBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGluc3RlYWQgb2YgcmUtYWRkaW5nIGl0IHRvIHRoZSBsb2NhbCBgcGMuc2xhYnNgIGxpc3QgaW4gYF9fcmVmaWxsX29iamVjdHNfbm9kZWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBleGNsdXNpdmVseSBhZmZlY3QgU0xVQiBpbnRlcm5hbCBzdGF0ZSwgbG9ja2luZywgYW5kIGZyZWVsaXN0L3BhcnRpYWwgbGlzdCB0cmFja2luZy4gQW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIGxvY2sgb3JkZXIgaW52ZXJzaW9ucywgbGlzdCBjb3JydXB0aW9uLCBkb3VibGUtZnJlZSwgb3Igc2xhYiBtZXRhZGF0YSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgY2hlY2tzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkIGFjY2Vzc2VzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZyZWVsaXN0IHJldHVybiBhbmQgcGFydGlhbCBzbGFiIGxpc3QgbWFuYWdlbWVudCBsb2dpYyB1bmRlciBuLVxcdTAwM2VsaXN0X2xvY2sgaW4gX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3QoKSBhbmQgX19yZWZpbGxfb2JqZWN0c19ub2RlKCkgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIChtbS9zbHViLmMpLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgU0xVQiBidWxrIGFsbG9jYXRpb24gYW5kIHNoZWFmIHJlZmlsbGluZyBwYXRocywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGNyaXRpY2FsIGZvciBtZW1vcnkgc2FmZXR5IGFuZCBsb2NrIGNvcnJlY3RuZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyNjozOS44NjUzNzA5OTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjMyMzQyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MThjY2JhZmQ1OWJiYzY3NTc1ZWYwNDdkMjRmNDZkZDdkZjBlOTQzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMTM6MjY6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXFxuaW5kZXggZjliNTZjYjQzOWU3MC4uNWNiYmFjYjhlZTMyZiAxMDA2NDRcXG4tLS0gYS9tbS9zbHViLmNcXG4rKysgYi9tbS9zbHViLmNcXG5AQCAtNTY4NCw2ICs1Njg0LDggQEAgc3RhdGljIGJvb2wgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdm9pZCAqaGVhZCwgaW50IGNudClcXG4ge1xcbiBcXHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7XFxuK1xcdHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm47XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbiBcXHRvbGQuZnJlZWxpc3QgPSBzbGFiLVxcdTAwM2VmcmVlbGlzdDtcXG4gXFx0b2xkLmNvdW50ZXJzID0gc2xhYi1cXHUwMDNlY291bnRlcnM7XFxuQEAgLTU2OTUsOSArNTY5NywxNiBAQCBzdGF0aWMgYm9vbCBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuIFxcdG5ldy5jb3VudGVycyA9IG9sZC5jb3VudGVycztcXG4gXFx0bmV3LmludXNlIC09IGNudDtcXG4gXFxuLVxcdGlmICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXFx1MDAyNm9sZCwgXFx1MDAyNm5ldywgXFxcIl9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0XFxcIikpXFxuK1xcdG4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7XFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdGlmICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXFx1MDAyNm9sZCwgXFx1MDAyNm5ldywgXFxcIl9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0XFxcIikpIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbiBcXG4rXFx0YWRkX3BhcnRpYWwobiwgc2xhYiwgQUREX1RPX1RBSUwpO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuQEAgLTcyOTYsMTAgKzczMDUsOCBAQCBfX3JlZmlsbF9vYmplY3RzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaVxcbiBcXHRcXHRcXHR2b2lkICpoZWFkID0gb2JqZWN0O1xcbiBcXHRcXHRcXHR2b2lkICp0YWlsO1xcbiBcXG4tXFx0XFx0XFx0aWYgKF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHMsIHNsYWIsIGhlYWQsIGNvdW50KSkge1xcbi1cXHRcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2c2xhYi1cXHUwMDNlc2xhYl9saXN0LCBcXHUwMDI2cGMuc2xhYnMpO1xcbitcXHRcXHRcXHRpZiAoX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qocywgc2xhYiwgaGVhZCwgY291bnQpKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0ZG8ge1xcbiBcXHRcXHRcXHRcXHR0YWlsID0gb2JqZWN0O1xcbkBAIC03MzEyLDcgKzczMTksNyBAQCBfX3JlZmlsbF9vYmplY3RzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZwYy5zbGFicykpIHtcXG4rXFx0aWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFxcdTAwMjZwYy5zbGFicykpKSB7XFxuIFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2xhYiwgXFx1MDAyNnBjLnNsYWJzLCBzbGFiX2xpc3QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI2OjQxLjU4OTYwMjE5NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzAwNjI5MDM4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0xVQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0XCIsXG4gICAgXCJfX3JlZmlsbF9vYmplY3RzX25vZGVcIixcbiAgICBcInJlZmlsbF9vYmplY3RzXCIsXG4gICAgXCJyZWZpbGxfc2hlYWZcIixcbiAgICBcImttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZlwiLFxuICAgIFwia21lbV9jYWNoZV9yZWZpbGxfc2hlYWZcIixcbiAgICBcImttZW1fY2FjaGVfcmV0dXJuX3NoZWFmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZyZWVsaXN0IHJldHVybiBhbmQgcGFydGlhbCBzbGFiIGxpc3QgbWFuYWdlbWVudCBsb2dpYyB1bmRlciBuLVxcdTAwM2VsaXN0X2xvY2sgaW4gX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3QoKSBhbmQgX19yZWZpbGxfb2JqZWN0c19ub2RlKCkgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIChtbS9zbHViLmMpLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgU0xVQiBidWxrIGFsbG9jYXRpb24gYW5kIHNoZWFmIHJlZmlsbGluZyBwYXRocywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGNyaXRpY2FsIGZvciBtZW1vcnkgc2FmZXR5IGFuZCBsb2NrIGNvcnJlY3RuZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQxOGNjYmFmZDU5YmJjNjc1NzVlZjA0N2QyNGY0NmRkN2RmMGU5NDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDEzOjI2OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCBmOWI1NmNiNDM5ZTcwLi41Y2JiYWNiOGVlMzJmIDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4rKysgYi9tbS9zbHViLmNcbkBAIC01Njg0LDYgKzU2ODQsOCBAQCBzdGF0aWMgYm9vbCBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHRcdFx0XHQgICAgICAgdm9pZCAqaGVhZCwgaW50IGNudClcbiB7XG4gXHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7XG4rXHRzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdG9sZC5mcmVlbGlzdCA9IHNsYWItXHUwMDNlZnJlZWxpc3Q7XG4gXHRvbGQuY291bnRlcnMgPSBzbGFiLVx1MDAzZWNvdW50ZXJzO1xuQEAgLTU2OTUsOSArNTY5NywxNiBAQCBzdGF0aWMgYm9vbCBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHRuZXcuY291bnRlcnMgPSBvbGQuY291bnRlcnM7XG4gXHRuZXcuaW51c2UgLT0gY250O1xuIFxuLVx0aWYgKCFzbGFiX3VwZGF0ZV9mcmVlbGlzdChzLCBzbGFiLCBcdTAwMjZvbGQsIFx1MDAyNm5ldywgXCJfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFwiKSlcbitcdG4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuK1xuK1x0aWYgKCFzbGFiX3VwZGF0ZV9mcmVlbGlzdChzLCBzbGFiLCBcdTAwMjZvbGQsIFx1MDAyNm5ldywgXCJfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFwiKSkge1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4gXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbiBcbitcdGFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbkBAIC03Mjk2LDEwICs3MzA1LDggQEAgX19yZWZpbGxfb2JqZWN0c19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWlcbiBcdFx0XHR2b2lkICpoZWFkID0gb2JqZWN0O1xuIFx0XHRcdHZvaWQgKnRhaWw7XG4gXG4tXHRcdFx0aWYgKF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHMsIHNsYWIsIGhlYWQsIGNvdW50KSkge1xuLVx0XHRcdFx0bGlzdF9hZGQoXHUwMDI2c2xhYi1cdTAwM2VzbGFiX2xpc3QsIFx1MDAyNnBjLnNsYWJzKTtcbitcdFx0XHRpZiAoX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qocywgc2xhYiwgaGVhZCwgY291bnQpKVxuIFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuIFxuIFx0XHRcdGRvIHtcbiBcdFx0XHRcdHRhaWwgPSBvYmplY3Q7XG5AQCAtNzMxMiw3ICs3MzE5LDcgQEAgX19yZWZpbGxfb2JqZWN0c19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWlcbiBcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmICghbGlzdF9lbXB0eShcdTAwMjZwYy5zbGFicykpIHtcbitcdGlmICh1bmxpa2VseSghbGlzdF9lbXB0eShcdTAwMjZwYy5zbGFicykpKSB7XG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4gXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2xhYiwgXHUwMDI2cGMuc2xhYnMsIHNsYWJfbGlzdClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI2OjQxLjU4OTYwNDUzNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTY3MTk1NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgc2x1Yi5jIFBhdGNoKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGBtbS9zbHViLmNgIHBhdGNoLiBNeSBpbml0aWFsIG1vdmUgaXMgYWx3YXlzIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiB3aGF0J3MgYmVpbmcgbW9kaWZpZWQuIEknbGwgcmVhY2ggZm9yIGVpdGhlciBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiB0aGUgZGlmZiBpdHNlbGYsIG9yIG1heWJlIGZpcmUgdXAgYGdyZXBwZXJgIGlmIEkganVzdCB3YW50IHRvIHF1aWNrbHkgc3BvdCB0aGUga2V5d29yZHMuIFRoYXQnbGwgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBjb250ZXh0LlxuXG5PbmNlIEkgaGF2ZSBhIGdyYXNwIG9mIHRoZSBvdmVyYWxsIGNoYW5nZXMsIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscy4gSSdsbCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gdGhlIGFyZWEgYXJvdW5kIGxpbmVzIDU2ODQgYW5kIDcyOTYgd2l0aGluIGBtbS9zbHViLmNgLiBUaG9zZSBsaW5lIG51bWJlcnMgYXJlIG9mdGVuIGdvb2QgaW5kaWNhdG9ycyBvZiBzaWduaWZpY2FudCBzdHJ1Y3R1cmFsIGNoYW5nZXMsIG9yIGNvcmUgZnVuY3Rpb24gY2FsbHMuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzc3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyNjo1Mi41NTY4MDE5NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zbHViLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTY3NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTY3NTpcXHRcXG41Njc2OlxcdC8qXFxuNTY3NzpcXHQgKiBUcnkgcmV0dXJuaW5nIChyZW1haW5kZXIgb2YpIHRoZSBmcmVlbGlzdCB0aGF0IHdlIGp1c3QgZGV0YWNoZWQgZnJvbSB0aGVcXG41Njc4OlxcdCAqIHNsYWIuICBPcHRpbWlzdGljYWxseSBhc3N1bWUgdGhlIHNsYWIgaXMgc3RpbGwgZnVsbCwgc28gd2UgZG9uJ3QgbmVlZCB0byBmaW5kXFxuNTY3OTpcXHQgKiB0aGUgdGFpbCBvZiB0aGUgZGV0YWNoZWQgZnJlZWxpc3QuXFxuNTY4MDpcXHQgKlxcbjU2ODE6XFx0ICogRmFpbCBpZiB0aGUgc2xhYiBpc24ndCBmdWxsIGFueW1vcmUgZHVlIHRvIGEgY29uY3VycmVudCBmcmVlLlxcbjU2ODI6XFx0ICovXFxuNTY4MzpcXHRzdGF0aWMgYm9vbCBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuNTY4NDpcXHRcXHRcXHRcXHRcXHQgICAgICAgdm9pZCAqaGVhZCwgaW50IGNudClcXG41Njg1OlxcdHtcXG41Njg2OlxcdFxcdHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBvbGQsIG5ldztcXG41Njg3OlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm47XFxuNTY4ODpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjU2ODk6XFx0XFxuNTY5MDpcXHRcXHRvbGQuZnJlZWxpc3QgPSBzbGFiLVxcdTAwM2VmcmVlbGlzdDtcXG41NjkxOlxcdFxcdG9sZC5jb3VudGVycyA9IHNsYWItXFx1MDAzZWNvdW50ZXJzO1xcbjU2OTI6XFx0XFxuNTY5MzpcXHRcXHRpZiAob2xkLmZyZWVsaXN0KVxcbjU2OTQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjU2OTU6XFx0XFxuNTY5NjpcXHRcXHRuZXcuZnJlZWxpc3QgPSBoZWFkO1xcbjU2OTc6XFx0XFx0bmV3LmNvdW50ZXJzID0gb2xkLmNvdW50ZXJzO1xcbjU2OTg6XFx0XFx0bmV3LmludXNlIC09IGNudDtcXG41Njk5OlxcdFxcbjU3MDA6XFx0XFx0biA9IGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKTtcXG41NzAxOlxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG41NzAyOlxcdFxcbjU3MDM6XFx0XFx0aWYgKCFzbGFiX3VwZGF0ZV9mcmVlbGlzdChzLCBzbGFiLCBcXHUwMDI2b2xkLCBcXHUwMDI2bmV3LCBcXFwiX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RcXFwiKSkge1xcbjU3MDQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XFxuNTcwNTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNTcwNjpcXHRcXHR9XFxuNTcwNzpcXHRcXG41NzA4OlxcdFxcdGFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKTtcXG41NzA5OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xcbjU3MTA6XFx0XFx0cmV0dXJuIHRydWU7XFxuNTcxMTpcXHR9XFxuNTcxMjpcXHRcXG41NzEzOlxcdC8qXFxuNTcxNDpcXHQgKiBTbG93IHBhdGggaGFuZGxpbmcuIFRoaXMgbWF5IHN0aWxsIGJlIGNhbGxlZCBmcmVxdWVudGx5IHNpbmNlIG9iamVjdHNcXG41NzE1OlxcdCAqIGhhdmUgYSBsb25nZXIgbGlmZXRpbWUgdGhhbiB0aGUgY3B1IHNsYWJzIGluIG1vc3QgcHJvY2Vzc2luZyBsb2Fkcy5cXG41NzE2OlxcdCAqXFxuNTcxNzpcXHQgKiBTbyB3ZSBzdGlsbCBhdHRlbXB0IHRvIHJlZHVjZSBjYWNoZSBsaW5lIHVzYWdlLiBKdXN0IHRha2UgdGhlIHNsYWJcXG41NzE4OlxcdCAqIGxvY2sgYW5kIGZyZWUgdGhlIGl0ZW0uIElmIHRoZXJlIGlzIG5vIGFkZGl0aW9uYWwgcGFydGlhbCBzbGFiXFxuNTcxOTpcXHQgKiBoYW5kbGluZyByZXF1aXJlZCB0aGVuIHdlIGNhbiByZXR1cm4gaW1tZWRpYXRlbHkuXFxuNTcyMDpcXHQgKi9cXG41NzIxOlxcdHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG41NzIyOlxcdFxcdFxcdFxcdHZvaWQgKmhlYWQsIHZvaWQgKnRhaWwsIGludCBjbnQsXFxuNTcyMzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIpXFxuNTcyNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6MjY6NTIuNTU3MjQwNTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODI2OTQxMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgU2x1YiBBbGxvY2F0b3IqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbW0vc2x1Yi5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDcyOTAuIEkga25vdyB0aGlzIGNvZGUgcHJldHR5IHdlbGwsIHNvIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjb3JlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHJvdXRpbmVzIG9yIHBlcmhhcHMgc29tZSBjcml0aWNhbCBsb2NraW5nIG1lY2hhbmlzbSB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgbGluZSB0aWVzIGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIG9iamVjdCBtYW5hZ2VtZW50LiBXaGF0IHNwZWNpZmljIGFzcGVjdHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYXJlIGJlaW5nIGFkZHJlc3NlZCBoZXJlPyBJcyBpdCByZWxhdGVkIHRvIGNhY2hlIGxpbmUgYWxpZ25tZW50LCBOVU1BIG5vZGUgaGFuZGxpbmcsIG9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6MjY6NTQuMzg0MTg2MjkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgwMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NsdWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjcwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MjcwOlxcdFxcdHVuc2lnbmVkIGludCByZWZpbGxlZCA9IDA7XFxuNzI3MTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjcyNzI6XFx0XFx0dm9pZCAqb2JqZWN0O1xcbjcyNzM6XFx0XFxuNzI3NDpcXHRcXHRwYy5mbGFncyA9IGdmcDtcXG43Mjc1OlxcdFxcdHBjLm1pbl9vYmplY3RzID0gbWluO1xcbjcyNzY6XFx0XFx0cGMubWF4X29iamVjdHMgPSBtYXg7XFxuNzI3NzpcXHRcXG43Mjc4OlxcdFxcdGlmICghZ2V0X3BhcnRpYWxfbm9kZV9idWxrKHMsIG4sIFxcdTAwMjZwYywgYWxsb3dfc3BpbikpXFxuNzI3OTpcXHRcXHRcXHRyZXR1cm4gMDtcXG43MjgwOlxcdFxcbjcyODE6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCBcXHUwMDI2cGMuc2xhYnMsIHNsYWJfbGlzdCkge1xcbjcyODI6XFx0XFxuNzI4MzpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuNzI4NDpcXHRcXG43Mjg1OlxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZzbGFiLVxcdTAwM2VzbGFiX2xpc3QpO1xcbjcyODY6XFx0XFxuNzI4NzpcXHRcXHRcXHRvYmplY3QgPSBnZXRfZnJlZWxpc3Rfbm9mcmVlemUocywgc2xhYiwgXFx1MDAyNmNvdW50KTtcXG43Mjg4OlxcdFxcbjcyODk6XFx0XFx0XFx0d2hpbGUgKGNvdW50IFxcdTAwMjZcXHUwMDI2IHJlZmlsbGVkIFxcdTAwM2MgbWF4KSB7XFxuNzI5MDpcXHRcXHRcXHRcXHRwW3JlZmlsbGVkXSA9IG9iamVjdDtcXG43MjkxOlxcdFxcdFxcdFxcdG9iamVjdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpO1xcbjcyOTI6XFx0XFx0XFx0XFx0bWF5YmVfd2lwZV9vYmpfZnJlZXB0cihzLCBwW3JlZmlsbGVkXSk7XFxuNzI5MzpcXHRcXG43Mjk0OlxcdFxcdFxcdFxcdHJlZmlsbGVkKys7XFxuNzI5NTpcXHRcXHRcXHRcXHRjb3VudC0tO1xcbjcyOTY6XFx0XFx0XFx0fVxcbjcyOTc6XFx0XFxuNzI5ODpcXHRcXHRcXHQvKlxcbjcyOTk6XFx0XFx0XFx0ICogRnJlZWxpc3QgaGFkIG1vcmUgb2JqZWN0cyB0aGFuIHdlIGNhbiBhY2NvbW1vZGF0ZSwgd2UgbmVlZCB0b1xcbjczMDA6XFx0XFx0XFx0ICogZnJlZSB0aGVtIGJhY2suIEZpcnN0IHdlIHRyeSB0byBiZSBvcHRpbWlzdGljIGFuZCBhc3N1bWUgdGhlXFxuNzMwMTpcXHRcXHRcXHQgKiBzbGFiIGlzIHN0aWxsIGZ1bGwgc2luY2Ugd2UganVzdCBkZXRhY2hlZCBpdHMgZnJlZWxpc3QuXFxuNzMwMjpcXHRcXHRcXHQgKiBPdGhlcndpc2Ugd2UgbXVzdCBmaW5kIHRoZSB0YWlsIG9iamVjdC5cXG43MzAzOlxcdFxcdFxcdCAqL1xcbjczMDQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGNvdW50KSkge1xcbjczMDU6XFx0XFx0XFx0XFx0dm9pZCAqaGVhZCA9IG9iamVjdDtcXG43MzA2OlxcdFxcdFxcdFxcdHZvaWQgKnRhaWw7XFxuNzMwNzpcXHRcXG43MzA4OlxcdFxcdFxcdFxcdGlmIChfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzLCBzbGFiLCBoZWFkLCBjb3VudCkpXFxuNzMwOTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG43MzEwOlxcdFxcbjczMTE6XFx0XFx0XFx0XFx0ZG8ge1xcbjczMTI6XFx0XFx0XFx0XFx0XFx0dGFpbCA9IG9iamVjdDtcXG43MzEzOlxcdFxcdFxcdFxcdFxcdG9iamVjdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpO1xcbjczMTQ6XFx0XFx0XFx0XFx0fSB3aGlsZSAob2JqZWN0KTtcXG43MzE1OlxcdFxcdFxcdFxcdF9fc2xhYl9mcmVlKHMsIHNsYWIsIGhlYWQsIHRhaWwsIGNvdW50LCBfUkVUX0lQXyk7XFxuNzMxNjpcXHRcXHRcXHR9XFxuNzMxNzpcXHRcXG43MzE4OlxcdFxcdFxcdGlmIChyZWZpbGxlZCBcXHUwMDNlPSBtYXgpXFxuNzMxOTpcXHRcXHRcXHRcXHRicmVhaztcXG43MzIwOlxcdFxcdH1cXG43MzIxOlxcdFxcbjczMjI6XFx0XFx0aWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFxcdTAwMjZwYy5zbGFicykpKSB7XFxuNzMyMzpcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XFxuNzMyNDpcXHRcXG43MzI1OlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2xhYiwgXFx1MDAyNnBjLnNsYWJzLCBzbGFiX2xpc3QpXFxuNzMyNjpcXHRcXHRcXHRcXHRzZXRfbm9kZV9wYXJ0aWFsX3N0YXRlKG4sIHNsYWIpO1xcbjczMjc6XFx0XFxuNzMyODpcXHRcXHRcXHRsaXN0X3NwbGljZV90YWlsKFxcdTAwMjZwYy5zbGFicywgXFx1MDAyNm4tXFx1MDAzZXBhcnRpYWwpO1xcbjczMjk6XFx0XFxuNzMzMDpcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG43MzMxOlxcdFxcdH1cXG43MzMyOlxcdFxcbjczMzM6XFx0XFx0cmV0dXJuIHJlZmlsbGVkO1xcbjczMzQ6XFx0fVxcbjczMzU6XFx0XFxuNzMzNjpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG43MzM3OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnRcXG43MzM4OlxcdF9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxcbjczMzk6XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbWF4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyNjo1NC4zODQ5NzEwODFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTUyNjA1Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGF0YSBSZWZpbGwgTWVjaGFuaXNtKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyB0cmlnZ2VyaW5nIHRoZXNlIHJlZmlsbCBmdW5jdGlvbnMg4oCTIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19hbnlgLiBJdCdzIGEga2V5IHBhcnQgb2YgdGhlIGRhdGEgZmxvdywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIFRoZSBiZXN0IGFwcHJvYWNoIGhlcmUgaXMgZ29pbmcgdG8gYmUgdHJhY2luZyB0aGUgY2FsbHMuIEknbGwgZ2V0IGEgbGlzdCBvZiBhbGwgdGhlIHBsYWNlcyBpbiB0aGUgY29kZWJhc2UgdGhhdCB1c2UgdGhlc2UgZnVuY3Rpb25zLiBBIGBncmVwYCBzZWFyY2ggaXMgdGhlIG9idmlvdXMgc29sdXRpb24gdG8gZmluZCBhbGwgaW5zdGFuY2VzIG9mIHRob3NlIGZ1bmN0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIG1hcCBvZiB3aGVyZSB0aGVzZSBhcmUgdXNlZCBhbmQgd2hhdCdzIGxlYWRpbmcgdG8gdGhlaXIgZXhlY3V0aW9uLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgd2hvbGUgcGljdHVyZSBhbmQgYW55IHBvc3NpYmxlIHByb2JsZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTgzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyNjo1Ni4zMzc1NzkwNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA3MjE3MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcmVmaWxsX29iamVjdHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTcyNjM9c3RhdGljIHVuc2lnbmVkIGludFxcbm1tL3NsdWIuYzo3MjY0Ol9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG5tbS9zbHViLmMtNzI2NS1cXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbWF4LCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxcbi0tXFxubW0vc2x1Yi5jPTczMzc9c3RhdGljIHVuc2lnbmVkIGludFxcbm1tL3NsdWIuYzo3MzM4Ol9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxcbm1tL3NsdWIuYy03MzM5LVxcdFxcdCAgICAgdW5zaWduZWQgaW50IG1heClcXG4tLVxcbm1tL3NsdWIuYy03MzY1LVxcbm1tL3NsdWIuYzo3MzY2OlxcdFxcdFxcdHIgPSBfX3JlZmlsbF9vYmplY3RzX25vZGUocywgcCwgZ2ZwLCBtaW4sIG1heCwgbixcXG5tbS9zbHViLmMtNzM2Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIC8qIGFsbG93X3NwaW4gPSAqLyBmYWxzZSk7XFxuLS1cXG5tbS9zbHViLmM9NzM4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxcbm1tL3NsdWIuYzo3Mzg5Ol9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxcbm1tL3NsdWIuYy03MzkwLVxcdFxcdCAgICAgdW5zaWduZWQgaW50IG1heClcXG4tLVxcbm1tL3NsdWIuYz03Mzk3PXJlZmlsbF9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxcbi0tXFxubW0vc2x1Yi5jLTc0MDMtXFxubW0vc2x1Yi5jOjc0MDQ6XFx0cmVmaWxsZWQgPSBfX3JlZmlsbF9vYmplY3RzX25vZGUocywgcCwgZ2ZwLCBtaW4sIG1heCxcXG5tbS9zbHViLmMtNzQwNS1cXHRcXHRcXHRcXHRcXHQgZ2V0X25vZGUocywgbG9jYWxfbm9kZSksXFxuLS1cXG5tbS9zbHViLmMtNzQwOS1cXG5tbS9zbHViLmM6NzQxMDpcXHRyZWZpbGxlZCArPSBfX3JlZmlsbF9vYmplY3RzX2FueShzLCBwICsgcmVmaWxsZWQsIGdmcCwgbWluIC0gcmVmaWxsZWQsXFxubW0vc2x1Yi5jLTc0MTEtXFx0XFx0XFx0XFx0XFx0IG1heCAtIHJlZmlsbGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6MjY6NTguNTQ0ODAyMDM1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTUwNjE0MTc2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzLCB0aGlua2luZyBhcyB0aGUgY29kZSBpdHNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbGVycyBvZiBgcmVmaWxsX29iamVjdHNgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGByZWZpbGxfb2JqZWN0c2AgaXMgYmVpbmcgdXNlZCwgb3IgbW9yZSBzcGVjaWZpY2FsbHksICp3aG8qIGlzIGNhbGxpbmcgaXQuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUsIGFuZCBkaWFnbm9zaW5nIG9yIG1vZGlmeWluZyBpdC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uIHRvIGlkZW50aWZ5IGl0cyBkZXBlbmRlbmNpZXMgYW5kIHRoZSBhcmVhcyBvZiB0aGUgc3lzdGVtIGl0IGltcGFjdHMuIEtub3dpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBjcml0aWNhbCBjb250ZXh0IG9uIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBvZiBgcmVmaWxsX29iamVjdHNgLCBhbmQgbGlrZWx5IGV4cGxhaW4gdGhlIGRhdGEgaXQgcmVxdWlyZXMgb3IgcHJvZHVjZXMuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZW50cnkgcG9pbnRzIHRvIGZ1bGx5IGNvbXByZWhlbmQgaXRzIGZ1bmN0aW9uLiBXaGF0IGNvZGUgcGF0aCBpcyB0aGlzIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aD9cblxuXG4iLCJJbnB1dFRva2VucyI6NjMyNywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjA4LjA1MDk0NjM2NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyODMxNzQyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWZpbGxfb2JqZWN0c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9Mjg3Mj1zdGF0aWMgdW5zaWduZWQgaW50XFxubW0vc2x1Yi5jOjI4NzM6cmVmaWxsX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxubW0vc2x1Yi5jLTI4NzQtXFx0ICAgICAgIHVuc2lnbmVkIGludCBtYXgpO1xcbi0tXFxubW0vc2x1Yi5jPTI4NzY9c3RhdGljIGludCByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZixcXG4tLVxcbm1tL3NsdWIuYy0yODg0LVxcbm1tL3NsdWIuYzoyODg1OlxcdGZpbGxlZCA9IHJlZmlsbF9vYmplY3RzKHMsIFxcdTAwMjZzaGVhZi1cXHUwMDNlb2JqZWN0c1tzaGVhZi1cXHUwMDNlc2l6ZV0sIGdmcCwgdG9fZmlsbCxcXG5tbS9zbHViLmMtMjg4Ni1cXHRcXHRcXHRcXHR0b19maWxsKTtcXG4tLVxcbm1tL3NsdWIuYz03MjYzPXN0YXRpYyB1bnNpZ25lZCBpbnRcXG5tbS9zbHViLmM6NzI2NDpfX3JlZmlsbF9vYmplY3RzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxubW0vc2x1Yi5jLTcyNjUtXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG1heCwgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcXG4tLVxcbm1tL3NsdWIuYz03MzM3PXN0YXRpYyB1bnNpZ25lZCBpbnRcXG5tbS9zbHViLmM6NzMzODpfX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG5tbS9zbHViLmMtNzMzOS1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBtYXgpXFxuLS1cXG5tbS9zbHViLmMtNzM2NS1cXG5tbS9zbHViLmM6NzM2NjpcXHRcXHRcXHRyID0gX19yZWZpbGxfb2JqZWN0c19ub2RlKHMsIHAsIGdmcCwgbWluLCBtYXgsIG4sXFxubW0vc2x1Yi5jLTczNjctXFx0XFx0XFx0XFx0XFx0XFx0ICAvKiBhbGxvd19zcGluID0gKi8gZmFsc2UpO1xcbi0tXFxubW0vc2x1Yi5jPTczODg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnRcXG5tbS9zbHViLmM6NzM4OTpfX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG5tbS9zbHViLmMtNzM5MC1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBtYXgpXFxuLS1cXG5tbS9zbHViLmM9NzM5Nj1zdGF0aWMgdW5zaWduZWQgaW50XFxubW0vc2x1Yi5jOjczOTc6cmVmaWxsX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxubW0vc2x1Yi5jLTczOTgtXFx0ICAgICAgIHVuc2lnbmVkIGludCBtYXgpXFxuLS1cXG5tbS9zbHViLmMtNzQwMy1cXG5tbS9zbHViLmM6NzQwNDpcXHRyZWZpbGxlZCA9IF9fcmVmaWxsX29iamVjdHNfbm9kZShzLCBwLCBnZnAsIG1pbiwgbWF4LFxcbm1tL3NsdWIuYy03NDA1LVxcdFxcdFxcdFxcdFxcdCBnZXRfbm9kZShzLCBsb2NhbF9ub2RlKSxcXG4tLVxcbm1tL3NsdWIuYy03NDA5LVxcbm1tL3NsdWIuYzo3NDEwOlxcdHJlZmlsbGVkICs9IF9fcmVmaWxsX29iamVjdHNfYW55KHMsIHAgKyByZWZpbGxlZCwgZ2ZwLCBtaW4gLSByZWZpbGxlZCxcXG5tbS9zbHViLmMtNzQxMS1cXHRcXHRcXHRcXHRcXHQgbWF4IC0gcmVmaWxsZWQpO1xcbi0tXFxubW0vc2x1Yi5jPTc0MzM9c3RhdGljIGJvb2wgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTc0NTItXFx0fSBlbHNlIHtcXG5tbS9zbHViLmM6NzQ1MzpcXHRcXHRpID0gcmVmaWxsX29iamVjdHMocywgcCwgZmxhZ3MsIHNpemUsIHNpemUpO1xcbm1tL3NsdWIuYy03NDU0LVxcdFxcdGlmIChpIFxcdTAwM2Mgc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6Mjc6MTAuMzc5Mjg3NjA4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjAwNzcwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGFuIGV4cGVydCBpbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgU0xVQiBzcGVjaWZpY2FsbHk6XG5cbioqQW5hbHl6aW5nIFNMVUIgU2hlYWYgQWxsb2NhdGlvbiBhbmQgRnJlZWxpc3QgUmV0dXJuIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG1tL3NsdWIuY2Ag4oCTIHRoYXQgdGVsbHMgbWUgcmlnaHQgYXdheSB3ZSdyZSBkZWFsaW5nIHdpdGggU0xVQidzIGludGVybmFsIHdvcmtpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2hlYWYgYWxsb2NhdGlvbiwgYnVsayBhbGxvY2F0aW9uLCBhbmQgZnJlZWxpc3QgcmV0dXJuIGxvZ2ljIGhlcmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byBob3cgYF9fa21lbV9jYWNoZV9hbGxvY19idWxrYCB3b3JrcywgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIHNoZWFmIGNhY2hpbmcgaXMgbGlrZWx5IGhhbmRsZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBCdXQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoYXQgZnVuY3Rpb24sIEkgbmVlZCBhIGJpZ2dlciBwaWN0dXJlIHZpZXcuIEkgc2hvdWxkIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dCwgaG93IGBrbWVtX2NhY2hlX2FsbG9jX2J1bGtgIGFuZCB0aGUgc2hlYWYgY2FjaGluZyBpcyB1c2VkIG1vcmUgYnJvYWRseS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxlcnMgb2YgYHJlZmlsbF9zaGVhZmAgb3IgYGttZW1fY2FjaGVfYWxsb2NfYnVsa2AgaW5zdGVhZCwgaW4gb3JkZXIgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzkzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6Mjc6MTIuNjk5MzY4MzExWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE5OTc1ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZmlsbF9zaGVhZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD05MjA9c3RydWN0IHNsYWJfc2hlYWYgKlxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjkyMTprbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IHNpemUpO1xcbmluY2x1ZGUvbGludXgvc2xhYi5oLTkyMi1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo5MjM6aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtOTI0LVxcdFxcdHN0cnVjdCBzbGFiX3NoZWFmICoqc2hlYWZwLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTE1Mj1zdGF0aWMgc3RydWN0IHNsYWJfc2hlYWYgKm10X2dldF9zaGVhZihnZnBfdCBnZnAsIGludCBjb3VudClcXG5saWIvbWFwbGVfdHJlZS5jLTE1My17XFxubGliL21hcGxlX3RyZWUuYzoxNTQ6XFx0cmV0dXJuIGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihtYXBsZV9ub2RlX2NhY2hlLCBnZnAsIGNvdW50KTtcXG5saWIvbWFwbGVfdHJlZS5jLTE1NS19XFxubGliL21hcGxlX3RyZWUuYy0xNTYtXFxubGliL21hcGxlX3RyZWUuYzoxNTc6c3RhdGljIGludCBtdF9yZWZpbGxfc2hlYWYoZ2ZwX3QgZ2ZwLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqKnNoZWFmLFxcbmxpYi9tYXBsZV90cmVlLmMtMTU4LVxcdFxcdHVuc2lnbmVkIGludCBzaXplKVxcbmxpYi9tYXBsZV90cmVlLmMtMTU5LXtcXG5saWIvbWFwbGVfdHJlZS5jOjE2MDpcXHRyZXR1cm4ga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYobWFwbGVfbm9kZV9jYWNoZSwgZ2ZwLCBzaGVhZiwgc2l6ZSk7XFxubGliL21hcGxlX3RyZWUuYy0xNjEtfVxcbi0tXFxubGliL21hcGxlX3RyZWUuYz0xMDc0PXN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfYWxsb2Nfbm9kZXMoc3RydWN0IG1hX3N0YXRlICptYXMsIGdmcF90IGdmcClcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmMtMTEwOC1cXG5saWIvbWFwbGVfdHJlZS5jOjExMDk6XFx0XFx0aWYgKG10X3JlZmlsbF9zaGVhZihnZnAsIFxcdTAwMjZtYXMtXFx1MDAzZXNoZWFmLCByZWZpbGwpKVxcbmxpYi9tYXBsZV90cmVlLmMtMTExMC1cXHRcXHRcXHRnb3RvIGVycm9yO1xcbi0tXFxubW0vc2x1Yi5jPTI4NzM9cmVmaWxsX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxuLS1cXG5tbS9zbHViLmMtMjg3NS1cXG5tbS9zbHViLmM6Mjg3NjpzdGF0aWMgaW50IHJlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLFxcbm1tL3NsdWIuYy0yODc3LVxcdFxcdFxcdCBnZnBfdCBnZnApXFxuLS1cXG5tbS9zbHViLmM9NDcxND1fX3Bjc19yZXBsYWNlX2VtcHR5X21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3MsXFxuLS1cXG5tbS9zbHViLmMtNDc3My1cXG5tbS9zbHViLmM6NDc3NDpcXHRpZiAocmVmaWxsX3NoZWFmKHMsIGVtcHR5LCBnZnAgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOKSkge1xcbm1tL3NsdWIuYy00Nzc1LVxcdFxcdC8qXFxuLS1cXG5tbS9zbHViLmM9NTA3ND1FWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3Byb2YpO1xcbm1tL3NsdWIuYy01MDc1LVxcbm1tL3NsdWIuYzo1MDc2OnN0YXRpYyBpbnQgX19wcmVmaWxsX3NoZWFmX3BmbWVtYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTUwNzctXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9zbHViLmMtNTA4NS1cXG5tbS9zbHViLmM6NTA4NjpcXHRyZXQgPSByZWZpbGxfc2hlYWYocywgc2hlYWYsIGdmcF9ub21lbWFsbG9jKTtcXG5tbS9zbHViLmMtNTA4Ny1cXG4tLVxcbm1tL3NsdWIuYy01MDk0LVxcdCAqL1xcbm1tL3NsdWIuYzo1MDk1OlxcdHJldCA9IHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwKTtcXG5tbS9zbHViLmMtNTA5Ni1cXHRzaGVhZi1cXHUwMDNlcGZtZW1hbGxvYyA9IHRydWU7XFxuLS1cXG5tbS9zbHViLmM9NTExMD1zdHJ1Y3Qgc2xhYl9zaGVhZiAqXFxubW0vc2x1Yi5jOjUxMTE6a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKVxcbm1tL3NsdWIuYy01MTEyLXtcXG4tLVxcbm1tL3NsdWIuYy01MTczLVxcdFxcdGlmIChzaGVhZi1cXHUwMDNlc2l6ZSBcXHUwMDNjIHNpemUgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmM6NTE3NDpcXHRcXHQgICAgX19wcmVmaWxsX3NoZWFmX3BmbWVtYWxsb2Mocywgc2hlYWYsIGdmcCkpIHtcXG5tbS9zbHViLmMtNTE3NS1cXHRcXHRcXHRzaGVhZl9mbHVzaF91bnVzZWQocywgc2hlYWYpO1xcbi0tXFxubW0vc2x1Yi5jLTUxODQtLypcXG5tbS9zbHViLmM6NTE4NTogKiBVc2UgdGhpcyB0byByZXR1cm4gYSBzaGVhZiBvYnRhaW5lZCBieSBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoKVxcbm1tL3NsdWIuYy01MTg2LSAqXFxuLS1cXG5tbS9zbHViLmM9NTE5ND12b2lkIGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zbHViLmMtNTIyOC1cXHRpZiAoIWJhcm4gfHwgZGF0YV9yYWNlKGJhcm4tXFx1MDAzZW5yX2Z1bGwpIFxcdTAwM2U9IE1BWF9GVUxMX1NIRUFWRVMgfHxcXG5tbS9zbHViLmM6NTIyOTpcXHQgICAgcmVmaWxsX3NoZWFmKHMsIHNoZWFmLCBnZnAgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOKSkge1xcbm1tL3NsdWIuYy01MjMwLVxcdFxcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzaGVhZik7XFxuLS1cXG5tbS9zbHViLmMtNTIzOS0vKlxcbm1tL3NsdWIuYzo1MjQwOiAqIFJlZmlsbCBhIHNoZWFmIHByZXZpb3VzbHkgcmV0dXJuZWQgYnkga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmIHRvIGF0IGxlYXN0XFxubW0vc2x1Yi5jLTUyNDEtICogdGhlIGdpdmVuIHNpemUuXFxuLS1cXG5tbS9zbHViLmMtNTI1MS0gKi9cXG5tbS9zbHViLmM6NTI1MjppbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG5tbS9zbHViLmMtNTI1My1cXHRcXHRcXHQgICAgc3RydWN0IHNsYWJfc2hlYWYgKipzaGVhZnAsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxubW0vc2x1Yi5jLTUyNTgtXFx0ICogVE9ETzogZG8gd2Ugd2FudCB0byBzdXBwb3J0ICpzaGVhZiA9PSBOVUxMIHRvIGJlIGVxdWl2YWxlbnQgb2ZcXG5tbS9zbHViLmM6NTI1OTpcXHQgKiBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoKSA/XFxubW0vc2x1Yi5jLTUyNjAtXFx0ICovXFxuLS1cXG5tbS9zbHViLmMtNTI2OS1cXHRcXHRpZiAobGlrZWx5KHNoZWFmLVxcdTAwM2VjYXBhY2l0eSA9PSBzLVxcdTAwM2VzaGVhZl9jYXBhY2l0eSkpXFxubW0vc2x1Yi5jOjUyNzA6XFx0XFx0XFx0cmV0dXJuIF9fcHJlZmlsbF9zaGVhZl9wZm1lbWFsbG9jKHMsIHNoZWFmLCBnZnApO1xcbm1tL3NsdWIuYy01MjcxLVxcbi0tXFxubW0vc2x1Yi5jLTUyODQtXFx0ICovXFxubW0vc2x1Yi5jOjUyODU6XFx0c2hlYWYgPSBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYocywgZ2ZwLCBzaXplKTtcXG5tbS9zbHViLmMtNTI4Ni1cXHRpZiAoIXNoZWFmKVxcbi0tXFxubW0vc2x1Yi5jLTUyOTQtLypcXG5tbS9zbHViLmM6NTI5NTogKiBBbGxvY2F0ZSBmcm9tIGEgc2hlYWYgb2J0YWluZWQgYnkga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKClcXG5tbS9zbHViLmMtNTI5Ni0gKlxcbi0tXFxubW0vc2x1Yi5jPTc4NzE9c3RhdGljIHVuc2lnbmVkIGludCBjYWxjdWxhdGVfc2hlYWZfY2FwYWNpdHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtNzkxMS1cXHQgKiBSZXNwZWN0IGFuIGV4cGxpY2l0IHJlcXVlc3QgZm9yIGNhcGFjaXR5IHRoYXQncyB0eXBpY2FsbHkgbW90aXZhdGVkIGJ5XFxubW0vc2x1Yi5jOjc5MTI6XFx0ICogZXhwZWN0ZWQgbWF4aW11bSBzaXplIG9mIGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZigpIHRvIG5vdCBlbmQgdXBcXG5tbS9zbHViLmMtNzkxMy1cXHQgKiB1c2luZyBsb3ctcGVyZm9ybWFuY2Ugb3ZlcnNpemUgc2hlYXZlc1xcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg9MTg4PXN0cnVjdCBzbGFiX3NoZWFmICpcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoxODk6a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKTtcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0xOTAtXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0xOTU9dm9pZCBrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTE5Ni1cXHRcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpO1xcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjE5NzppbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0xOTgtXFx0XFx0c3RydWN0IHNsYWJfc2hlYWYgKipzaGVhZnAsIHVuc2lnbmVkIGludCBzaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM9MjU0PXN0cnVjdCBzbGFiX3NoZWFmICpcXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjI1NTprbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IHNpemUpXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0yNTYte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0yODItXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYzoyODM6aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0yODQtXFx0XFx0IHN0cnVjdCBzbGFiX3NoZWFmICoqc2hlYWZwLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMjkxLVxcdGlmIChzaXplIFxcdTAwM2Ugc2hlYWYtXFx1MDAzZWNhcGFjaXR5KSB7XFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYzoyOTI6XFx0XFx0c2hlYWYgPSBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYocywgZ2ZwLCBzaXplKTtcXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTI5My1cXHRcXHRpZiAoIXNoZWFmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyNzoxNC45MTkzNDk5ODZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODM3MTI3MTU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNMVUIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgY2hhbmdlcyBpbiBgbW0vc2x1Yi5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYC4gVGhlIGdvYWwsIGl0IHNlZW1zLCBpcyB0byBpbXByb3ZlIGhvdyBwYXJ0aWFsbHkgZnVsbCBzbGFicyBhcmUgaGFuZGxlZCwgZXNwZWNpYWxseSB3aGVuIHJlZmlsbGluZy5cblxuSW5pdGlhbGx5LCBJJ20gb2JzZXJ2aW5nIHRoZSBhZGRpdGlvbiBvZiBhIGBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuYCBhbmQgYHVuc2lnbmVkIGxvbmcgZmxhZ3NgIHdpdGhpbiBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgLiBUaGlzIGltbWVkaWF0ZWx5IHNpZ25hbHMgdGhhdCB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgbG9ja2luZyBhcm91bmQgdGhlIG5vZGUncyBsaXN0LCBzcGVjaWZpY2FsbHkgdXNpbmcgYHNwaW5fbG9ja19pcnFzYXZlYCBhbmQgYHNwaW5fdW5sb2NrX2lycXJlc3RvcmVgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhlIGNvbW1lbnQgc3VnZ2VzdHMgc29tZSBtb2RpZmljYXRpb24gb2YgdGhlIGZyZWVsaXN0LiBXZSdyZSBub3cgYWNxdWlyaW5nIGBuYCB2aWEgYGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKWAgYW5kIHRoZW4gbG9ja2luZyBgbi1cdTAwM2VsaXN0X2xvY2tgIHRvIHByb3RlY3QgYWNjZXNzIHRvIHRoZSBmcmVlbGlzdCBjb3VudGVyIHVwZGF0ZXMgd2l0aCBgc2xhYl91cGRhdGVfZnJlZWxpc3RgLiBUaGlzIGlzIGNydWNpYWwgdG8gZW5zdXJlIGF0b21pY2l0eS4gVGhlIGltcG9ydGFudCBhZGRpdGlvbiBpcyBgYWRkX3BhcnRpYWwobiwgc2xhYiwgQUREX1RPX1RBSUwpYCAqYWZ0ZXIqIHRoZSBzdWNjZXNzZnVsIHVwZGF0ZSBvZiB0aGUgZnJlZWxpc3QsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHNsYWIgaXMgbm93IGFkZGVkIGJhY2sgdG8gdGhlIHBhcnRpYWwgbGlzdCBmb3IgdGhlIG5vZGUsIGxpa2VseSB3aXRoIHRoZSB1cGRhdGVkIGBmcmVlbGlzdGAgYW5kIGBpbnVzZWAgY291bnRlcnMuXG5cbkxvb2tpbmcgYXQgYF9fcmVmaWxsX29iamVjdHNfbm9kZWAsIEkgbm90aWNlIGEgY3JpdGljYWwgY2hhbmdlIHdpdGhpbiB0aGUgbG9vcCB3aGVyZSBvYmplY3RzIGFyZSBiZWluZyByZWZpbGxlZC4gIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGNoZWNrIGFuZCB0aGVuIGBsaXN0X2FkZGAgaW4gYSBjb25kaXRpb25hbCwgYnV0IG5vdyB0aGUgYGxpc3RfYWRkYCBpcyBnb25lLiBJbnN0ZWFkLCBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGlzIGNhbGxlZCBkaXJlY3RseSwgYW5kIGlmIGl0IHN1Y2NlZWRzLCB0aGUgY29kZSBicmVha3Mgb3V0IG9mIHRoZSBsb29wLiAgVGhlIGBsaXN0X2FkZGAgY2FsbCBpcyBub3cgaW5zaWRlIHRoZSBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGZ1bmN0aW9uLiBNb3JlIHNwZWNpZmljYWxseSwgIHRoZSBgYWRkX3BhcnRpYWxgIGlzIG5vdyBoYW5kbGVkIHdpdGhpbiB0aGUgIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAuIFRoaXMgc2VlbXMgbGlrZSBhIGJldHRlciBhcHByb2FjaCBpbiB0ZXJtcyBvZiBhdG9taWNpdHkgYXMgYWxsIG1vZGlmaWNhdGlvbiB0byB0aGUgcGFydGlhbCBsaXN0IGlzIGhhcHBlbmluZyBiZWhpbmQgdGhlIGxvY2suXG5cbkZpbmFsbHksIHRoZSBgbGlzdF9lbXB0eWAgY2hlY2sgaGFzIGJlZW4gY2hhbmdlZCB0byBgdW5saWtlbHkoIWxpc3RfZW1wdHkoXHUwMDI2cGMuc2xhYnMpKWAuIFRoYXQncyBhIG1pY3JvLW9wdGltaXphdGlvbiDigJMgbWFya2luZyB0aGF0IGJyYW5jaCBhcyBsZXNzIGxpa2VseSB0byBiZSB0YWtlbi4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIHNsYWJzIGluIGBwYy5zbGFic2AgYXJlICp1c3VhbGx5KiBlbXB0eS4gVGhpcyBtYWtlcyBzZW5zZS5cblxuU28sIGluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBub2RlLWxldmVsIGxvY2tpbmcgYXJvdW5kIHBhcnRpYWwgc2xhYiBsaXN0IG1hbmlwdWxhdGlvbnMgaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCB0byBlbnN1cmUgdGhyZWFkIHNhZmV0eS4gSXQgYWxzbyBzdHJlYW1saW5lcyB0aGUgcmVmaWxsIHByb2Nlc3MgYnkgaW50ZWdyYXRpbmcgdGhlIHBhcnRpYWwgc2xhYiByZXR1cm4gYW5kIGFkZGl0aW9uIGludG8gdGhlIHNhbWUgbG9ja2VkIG9wZXJhdGlvbiwgaG9wZWZ1bGx5IGltcHJvdmluZyBwZXJmb3JtYW5jZSBhbmQgcmVkdWNpbmcgY29udGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6Mjc6MjMuMjkwNjI0NDczWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0OTAzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc2x1Yi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyMjUsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjcyMjU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNzIyNjpcXHRcXG43MjI3OlxcdFxcdFxcdGlmIChrZmVuY2VfZnJlZShkZi5mcmVlbGlzdCkpXFxuNzIyODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43MjI5OlxcdFxcbjcyMzA6XFx0XFx0XFx0X19zbGFiX2ZyZWUoZGYucywgZGYuc2xhYiwgZGYuZnJlZWxpc3QsIGRmLnRhaWwsIGRmLmNudCxcXG43MjMxOlxcdFxcdFxcdFxcdCAgICAgX1JFVF9JUF8pO1xcbjcyMzI6XFx0XFx0fSB3aGlsZSAobGlrZWx5KHNpemUpKTtcXG43MjMzOlxcdH1cXG43MjM0OlxcdFxcbjcyMzU6XFx0LyogTm90ZSB0aGF0IGludGVycnVwdHMgbXVzdCBiZSBlbmFibGVkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiAqL1xcbjcyMzY6XFx0dm9pZCBrbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbjcyMzc6XFx0e1xcbjcyMzg6XFx0XFx0aWYgKCFzaXplKVxcbjcyMzk6XFx0XFx0XFx0cmV0dXJuO1xcbjcyNDA6XFx0XFxuNzI0MTpcXHRcXHQvKlxcbjcyNDI6XFx0XFx0ICogZnJlZWluZyB0byBzaGVhdmVzIGlzIHNvIGluY29tcGF0aWJsZSB3aXRoIHRoZSBkZXRhY2hlZCBmcmVlbGlzdCBzb1xcbjcyNDM6XFx0XFx0ICogb25jZSB3ZSBnbyB0aGF0IHdheSwgd2UgaGF2ZSB0byBkbyBldmVyeXRoaW5nIGRpZmZlcmVudGx5XFxuNzI0NDpcXHRcXHQgKi9cXG43MjQ1OlxcdFxcdGlmIChzIFxcdTAwMjZcXHUwMDI2IGNhY2hlX2hhc19zaGVhdmVzKHMpKSB7XFxuNzI0NjpcXHRcXHRcXHRmcmVlX3RvX3Bjc19idWxrKHMsIHNpemUsIHApO1xcbjcyNDc6XFx0XFx0XFx0cmV0dXJuO1xcbjcyNDg6XFx0XFx0fVxcbjcyNDk6XFx0XFxuNzI1MDpcXHRcXHRkbyB7XFxuNzI1MTpcXHRcXHRcXHRzdHJ1Y3QgZGV0YWNoZWRfZnJlZWxpc3QgZGY7XFxuNzI1MjpcXHRcXG43MjUzOlxcdFxcdFxcdHNpemUgPSBidWlsZF9kZXRhY2hlZF9mcmVlbGlzdChzLCBzaXplLCBwLCBcXHUwMDI2ZGYpO1xcbjcyNTQ6XFx0XFx0XFx0aWYgKCFkZi5zbGFiKVxcbjcyNTU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNzI1NjpcXHRcXG43MjU3OlxcdFxcdFxcdHNsYWJfZnJlZV9idWxrKGRmLnMsIGRmLnNsYWIsIGRmLmZyZWVsaXN0LCBkZi50YWlsLCBcXHUwMDI2cFtzaXplXSxcXG43MjU4OlxcdFxcdFxcdFxcdCAgICAgICBkZi5jbnQsIF9SRVRfSVBfKTtcXG43MjU5OlxcdFxcdH0gd2hpbGUgKGxpa2VseShzaXplKSk7XFxuNzI2MDpcXHR9XFxuNzI2MTpcXHRFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfZnJlZV9idWxrKTtcXG43MjYyOlxcdFxcbjcyNjM6XFx0c3RhdGljIHVuc2lnbmVkIGludFxcbjcyNjQ6XFx0X19yZWZpbGxfb2JqZWN0c19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxcbjcyNjU6XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG1heCwgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcXG43MjY2OlxcdFxcdFxcdCAgICAgIGJvb2wgYWxsb3dfc3BpbilcXG43MjY3OlxcdHtcXG43MjY4OlxcdFxcdHN0cnVjdCBwYXJ0aWFsX2J1bGtfY29udGV4dCBwYztcXG43MjY5OlxcdFxcdHN0cnVjdCBzbGFiICpzbGFiLCAqc2xhYjI7XFxuNzI3MDpcXHRcXHR1bnNpZ25lZCBpbnQgcmVmaWxsZWQgPSAwO1xcbjcyNzE6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG43MjcyOlxcdFxcdHZvaWQgKm9iamVjdDtcXG43MjczOlxcdFxcbjcyNzQ6XFx0XFx0cGMuZmxhZ3MgPSBnZnA7XFxuNzI3NTpcXHRcXHRwYy5taW5fb2JqZWN0cyA9IG1pbjtcXG43Mjc2OlxcdFxcdHBjLm1heF9vYmplY3RzID0gbWF4O1xcbjcyNzc6XFx0XFxuNzI3ODpcXHRcXHRpZiAoIWdldF9wYXJ0aWFsX25vZGVfYnVsayhzLCBuLCBcXHUwMDI2cGMsIGFsbG93X3NwaW4pKVxcbjcyNzk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjIzLjI5NDExOTE5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDk3MzYwMjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlNMVUIgTWVtb3J5IEFsbG9jYXRvciBQYXRjaCBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgbW0vc2x1Yi5jYCwgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBhc3Nlc3MgaWYgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggZnV6emluZywgYW5kIGdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGtub3cgdGhhdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgbGlrZSB0aGlzIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGFuZCBmdW5kYW1lbnRhbCB0byB0aGUgc3lzdGVtLiBTbywgdGhhdCdzIGEgY2hlY2sgb24gbXkgXCJ3b3J0aCBmdXp6aW5nXCIgcmFkYXIuXG5cblRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhciBvbiB0aGlzOiBhbnkgbW9kaWZpY2F0aW9ucyBpbiBjb3JlIHN1YnN5c3RlbXMgbGlrZSBtZW1vcnkgbWFuYWdlbWVudD8gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggaGl0cyB0aGF0IGNyaXRlcmlvbi4gU28sIGBXb3J0aEZ1enppbmdgIGlzIHVuZXF1aXZvY2FsbHkgYHRydWVgLlxuXG5Ob3csIHRoZSB0cmlja2llciBwYXJ0OiBkZXRlcm1pbmluZyB0aGUgXCJGb2N1c1N5bWJvbHNcIiB0byBhdm9pZCBkaWx1dGlvbiBvZiB0aGUgZnV6emluZyBlZmZvcnQuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHRlbGxpbmcgbWUgdG8gYXZvaWQgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoaW5ncyBjYWxsZWQgYnkgKmV2ZXJ5dGhpbmcqLiBUaGUgZ29hbCBpcyB0byBpc29sYXRlIHRoZSBzcGVjaWZpYyBsb2dpYyBiZWluZyBhbHRlcmVkLiBUaGlzIGlzbid0IGp1c3QgYSBibGFua2V0IGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uLlxuXG5JIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSB0aWVkIHRvIHRoaXMgbW9kaWZpY2F0aW9uLiBSaWdodC4gSSBoYXZlOlxuXG4xLiAgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCAtIGEgc3RhdGljIGhlbHBlciwgbW9kaWZpZWQgZGlyZWN0bHkuXG4yLiAgYF9fcmVmaWxsX29iamVjdHNfbm9kZWAgLSBhbm90aGVyIHN0YXRpYyBoZWxwZXIuXG4zLiAgYHJlZmlsbF9vYmplY3RzYCAtIHN0YXRpYy5cbjQuICBgcmVmaWxsX3NoZWFmYCAtIHN0YXRpYy5cbjUuICBga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmYCAtIHN0YXRpYy5cbjYuICBga21lbV9jYWNoZV9yZWZpbGxfc2hlYWZgIC0gYWxzbyBzdGF0aWMuXG43LiAgYGttZW1fY2FjaGVfYWxsb2NfYnVsa2AgLSBXYWl0LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgd2hhdCBjYWxscyB0aGlzLiBJcyB0aGlzIGV4cG9ydGVkL25vbi1zdGF0aWM/IE5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBzb21ldGhpbmcuIEknbGwgY2hlY2sgaXRzIGRlZmluaXRpb24gaW4gYG1tL3NsdWIuY2AuXG5cbkknbSBjb25maWRlbnQgdGhlc2UgYXJlIHRoZSByZWxldmFudCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBUaGV5IHJlcHJlc2VudCB0aGUgY29yZSBsb2dpYyBvZiB0aGUgY2hhbmdlIGFuZCBzaG91bGQgZ2l2ZSBtZSBnb29kIGZ1enppbmcgY292ZXJhZ2UuIEknbSBnb2luZyB0byBub3RlIHRoZXNlIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI2MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjI4Ljc5MTQ4MzM0NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0MDc0NTc2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbWVtX2NhY2hlX2FsbG9jX2J1bGtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL21zbS9tc21faW9tbXUuYz0zMzk9bXNtX2lvbW11X3BhZ2V0YWJsZV9wcmVhbGxvY19hbGxvY2F0ZShzdHJ1Y3QgbXNtX21tdSAqbW11LCBzdHJ1Y3QgbXNtX21tdV9wcmVhbGxvYyAqcClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2lvbW11LmMtMzUxLVxcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2lvbW11LmM6MzUyOlxcdGlmICgha21lbV9jYWNoZV9hbGxvY19idWxrKHB0X2NhY2hlLCBHRlBfS0VSTkVMLCBwLVxcdTAwM2Vjb3VudCwgcC1cXHUwMDNlcGFnZXMpKSB7XFxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21faW9tbXUuYy0zNTMtXFx0XFx0a3ZmcmVlKHAtXFx1MDAzZXBhZ2VzKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM9MTI4Nj1zdGF0aWMgaW50IHBhbnRob3Jfdm1fb3BfY3R4X3ByZWFsbG9jX3B0cyhzdHJ1Y3QgcGFudGhvcl92bV9vcF9jdHggKm9wX2N0eClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMTMwNC1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjEzMDU6XFx0aWYgKCFrbWVtX2NhY2hlX2FsbG9jX2J1bGsocHRfY2FjaGUsIEdGUF9LRVJORUwsIHB0X2NvdW50LFxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMTMwNi1cXHRcXHRcXHRcXHQgICBvcF9jdHgtXFx1MDAzZXJzdmRfcGFnZV90YWJsZXMucGFnZXMpKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jPTE0MTc9c3RhdGljIGludCBwYW50aG9yX3ZtX3ByZXBhcmVfdW5tYXBfb3BfY3R4KHN0cnVjdCBwYW50aG9yX3ZtX29wX2N0eCAqb3BfY3R4LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy0xNDUwLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM6MTQ1MTpcXHRcXHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhwdF9jYWNoZSwgR0ZQX0tFUk5FTCwgcHRfY291bnQsXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy0xNDUyLVxcdFxcdFxcdFxcdG9wX2N0eC1cXHUwMDNlcnN2ZF9wYWdlX3RhYmxlcy5wYWdlcykpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oPTkwND12b2lkIGttZW1fY2FjaGVfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApO1xcbmluY2x1ZGUvbGludXgvc2xhYi5oLTkwNS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo5MDY6Ym9vbCBrbWVtX2NhY2hlX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC05MDctXFx0XFx0c2l6ZV90IHNpemUsIHZvaWQgKipwKTtcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo5MDg6I2RlZmluZSBrbWVtX2NhY2hlX2FsbG9jX2J1bGsoLi4uKSBcXFxcXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6OTA5OlxcdGFsbG9jX2hvb2tzKGttZW1fY2FjaGVfYWxsb2NfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTkxMC1cXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9OTY4PV9fY29sZCBib29sIF9faW9fYWxsb2NfcmVxX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTc4LVxcdCAqL1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6OTc5OlxcdGlmICgha21lbV9jYWNoZV9hbGxvY19idWxrKHJlcV9jYWNoZXAsIGdmcCwgbnJfcmVxcywgcmVxcykpIHtcXG5pb191cmluZy9pb191cmluZy5jLTk4MC1cXHRcXHRyZXFzWzBdID0ga21lbV9jYWNoZV9hbGxvYyhyZXFfY2FjaGVwLCBnZnApO1xcbi0tXFxubGliL3Rlc3RfbWVtaW5pdC5jPTIxNj1zdGF0aWMgaW50IF9faW5pdCBkb19rbWVtX2NhY2hlX3NpemUoc2l6ZV90IHNpemUsIGJvb2wgd2FudF9jdG9yLFxcbi0tXFxubGliL3Rlc3RfbWVtaW5pdC5jLTIzMS1cXHRcXHRpZiAoIXdhbnRfcmN1IFxcdTAwMjZcXHUwMDI2ICF3YW50X2N0b3IpIHtcXG5saWIvdGVzdF9tZW1pbml0LmM6MjMyOlxcdFxcdFxcdGlmICgha21lbV9jYWNoZV9hbGxvY19idWxrKGMsIGFsbG9jX21hc2ssIEJVTEtfU0laRSxcXG5saWIvdGVzdF9tZW1pbml0LmMtMjMzLVxcdFxcdFxcdFxcdFxcdGJ1bGtfYXJyYXkpKSB7XFxuLS1cXG5saWIvdGVzdF9tZW1pbml0LmM9MzQ1PXN0YXRpYyBpbnQgX19pbml0IGRvX2ttZW1fY2FjaGVfc2l6ZV9idWxrKGludCBzaXplLCBpbnQgKnRvdGFsX2ZhaWx1cmVzKVxcbi0tXFxubGliL3Rlc3RfbWVtaW5pdC5jLTM1NC1cXHRmb3IgKGl0ZXIgPSAwOyAoaXRlciBcXHUwMDNjIG1heGl0ZXIpIFxcdTAwMjZcXHUwMDI2ICFmYWlsOyBpdGVyKyspIHtcXG5saWIvdGVzdF9tZW1pbml0LmM6MzU1OlxcdFxcdGlmICgha21lbV9jYWNoZV9hbGxvY19idWxrKGMsIEdGUF9LRVJORUwsIEFSUkFZX1NJWkUob2JqZWN0cyksXFxubGliL3Rlc3RfbWVtaW5pdC5jLTM1Ni1cXHRcXHRcXHRcXHRvYmplY3RzKSlcXG4tLVxcbm1tL2thc2FuL2thc2FuX3Rlc3RfYy5jPTEyMjM9c3RhdGljIHZvaWQga21lbV9jYWNoZV9idWxrKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2thc2FuL2thc2FuX3Rlc3RfYy5jLTEyMzItXFxubW0va2FzYW4va2FzYW5fdGVzdF9jLmM6MTIzMzpcXHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhjYWNoZSwgR0ZQX0tFUk5FTCwgQVJSQVlfU0laRShwKSxcXG5tbS9rYXNhbi9rYXNhbl90ZXN0X2MuYy0xMjM0LVxcdFxcdFxcdCh2b2lkICoqKVxcdTAwMjZwKSkge1xcbi0tXFxubW0va2ZlbmNlL2tmZW5jZV90ZXN0LmM9NzQ5PXN0YXRpYyB2b2lkIHRlc3RfbWVtY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuYy03NjUtXFxubW0va2ZlbmNlL2tmZW5jZV90ZXN0LmM6NzY2OlxcdFxcdGlmICgha21lbV9jYWNoZV9hbGxvY19idWxrKHRlc3RfY2FjaGUsIEdGUF9BVE9NSUMsXFxubW0va2ZlbmNlL2tmZW5jZV90ZXN0LmMtNzY3LVxcdFxcdFxcdFxcdEFSUkFZX1NJWkUob2JqZWN0cyksIG9iamVjdHMpKVxcbi0tXFxubW0va2ZlbmNlL2tmZW5jZV90ZXN0LmMtNzc2LVxcdFxcdC8qXFxubW0va2ZlbmNlL2tmZW5jZV90ZXN0LmM6Nzc3OlxcdFxcdCAqIGttZW1fY2FjaGVfYWxsb2NfYnVsaygpIGRpc2FibGVzIGludGVycnVwdHMsIGFuZCBjYWxsaW5nIGl0XFxubW0va2ZlbmNlL2tmZW5jZV90ZXN0LmMtNzc4LVxcdFxcdCAqIGluIGEgdGlnaHQgbG9vcCBtYXkgbm90IGdpdmUgS0ZFTkNFIGEgY2hhbmNlIHRvIHN3aXRjaCB0aGVcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zNTk4PWJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzYxNy1cXHQgKiBzbGFiX2FsbG9jX25vZGUoKSBhdm9pZHMgdGhlIE5VTEwgY2hlY2ssIHNvIHdlIG1pZ2h0IGJlIGNhbGxlZCB3aXRoIGFcXG5tbS9tZW1jb250cm9sLmM6MzYxODpcXHQgKiBzaW5nbGUgTlVMTCBvYmplY3QuIGttZW1fY2FjaGVfYWxsb2NfYnVsaygpIGFib3J0cyBpZiBpdCBjYW4ndCBmaWxsXFxubW0vbWVtY29udHJvbC5jLTM2MTktXFx0ICogdGhlIHdob2xlIHJlcXVlc3RlZCBzaXplLlxcbi0tXFxubW0vc2x1Yi5jPTUwNzY9c3RhdGljIGludCBfX3ByZWZpbGxfc2hlYWZfcGZtZW1hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy01MTAwLVxcbm1tL3NsdWIuYzo1MTAxOnN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG5tbS9zbHViLmMtNTEwMi1cXHRcXHRzaXplX3Qgc2l6ZSwgdm9pZCAqKnApO1xcbi0tXFxubW0vc2x1Yi5jPTUxMTE9a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxubW0vc2x1Yi5jLTUxMzItXFx0XFx0ICovXFxubW0vc2x1Yi5jOjUxMzM6XFx0XFx0aWYgKCFfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzLCBnZnAsIHNpemUsXFxubW0vc2x1Yi5jLTUxMzQtXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c2hlYWYtXFx1MDAzZW9iamVjdHNbMF0pKSB7XFxuLS1cXG5tbS9zbHViLmM9NTI1Mj1pbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG4tLVxcbm1tL3NsdWIuYy01MjcxLVxcbm1tL3NsdWIuYzo1MjcyOlxcdFxcdGlmICghX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsocywgZ2ZwLCBzaGVhZi1cXHUwMDNlY2FwYWNpdHkgLSBzaGVhZi1cXHUwMDNlc2l6ZSxcXG5tbS9zbHViLmMtNTI3My1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZzaGVhZi1cXHUwMDNlb2JqZWN0c1tzaGVhZi1cXHUwMDNlc2l6ZV0pKVxcbi0tXFxubW0vc2x1Yi5jPTczOTc9cmVmaWxsX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxuLS1cXG5tbS9zbHViLmMtNzQzMi1cXG5tbS9zbHViLmM6NzQzMzpzdGF0aWMgYm9vbCBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxubW0vc2x1Yi5jLTc0MzQtXFx0XFx0c2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbi0tXFxubW0vc2x1Yi5jLTc0NjYtLyoqXFxubW0vc2x1Yi5jOjc0Njc6ICoga21lbV9jYWNoZV9hbGxvY19idWxrIC0gQWxsb2NhdGUgbXVsdGlwbGUgb2JqZWN0c1xcbm1tL3NsdWIuYy03NDY4LSAqIEBzOlxcdFxcdFRoZSBjYWNoZSB0byBhbGxvY2F0ZSBmcm9tXFxuLS1cXG5tbS9zbHViLmMtNzQ4Mi0gKi9cXG5tbS9zbHViLmM6NzQ4Mzpib29sIGttZW1fY2FjaGVfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxcbm1tL3NsdWIuYy03NDg0LVxcdFxcdHNpemVfdCBzaXplLCB2b2lkICoqcClcXG4tLVxcbm1tL3NsdWIuYy03NTE5LVxcdFxcdCAqL1xcbm1tL3NsdWIuYzo3NTIwOlxcdFxcdGlmICh1bmxpa2VseSghX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsocywgZmxhZ3MsIHNpemUgLSBpLFxcbm1tL3NsdWIuYy03NTIxLVxcdFxcdFxcdFxcdHAgKyBpKSkpIHtcXG4tLVxcbm1tL3NsdWIuYy03NTQzLX1cXG5tbS9zbHViLmM6NzU0NDpFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2NfYnVsa19ub3Byb2YpO1xcbm1tL3NsdWIuYy03NTQ1LVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTI0MT1zdGF0aWMgaW50IHhkcF9yZWN2X2ZyYW1lcyhzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzLCBpbnQgbmZyYW1lcyxcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0yNDgtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjI0OTpcXHRpZiAodW5saWtlbHkoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhuZXRfaG90ZGF0YS5za2J1ZmZfY2FjaGUsIGdmcCxcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMjUwLVxcdFxcdFxcdFxcdFxcdCAgICBuZnJhbWVzLCAodm9pZCAqKilza2JzKSkpIHtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI4ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpuYXBpX3NrYl9jYWNoZV9nZXQoYm9vbCBhbGxvYylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI5MC1cXHRpZiAodW5saWtlbHkoIW5jLVxcdTAwM2Vza2JfY291bnQpKSB7XFxubmV0L2NvcmUvc2tidWZmLmM6MjkxOlxcdFxcdGlmIChhbGxvYyBcXHUwMDI2XFx1MDAyNiBrbWVtX2NhY2hlX2FsbG9jX2J1bGsobmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTI5Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MzE2PXN0YXRpYyBpbmxpbmUgdm9pZCBza2J1ZmZfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM0MS0gKiBSZXR1cm46IG51bWJlciBvZiBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIHNrYnMgKEBuIGlmIG5vIGFjdHVhbCBhbGxvY2F0aW9uXFxubmV0L2NvcmUvc2tidWZmLmM6MzQyOiAqXFx0ICAgbmVlZGVkIG9yIGttZW1fY2FjaGVfYWxsb2NfYnVsaygpIGRpZG4ndCBmYWlsKS5cXG5uZXQvY29yZS9za2J1ZmYuYy0zNDMtICovXFxubmV0L2NvcmUvc2tidWZmLmM9MzQ0PXUzMiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayh2b2lkICoqc2ticywgdTMyIG4pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zNTUtXFx0YnVsayA9IG1pbihOQVBJX1NLQl9DQUNIRV9TSVpFIC0gbmMtXFx1MDAzZXNrYl9jb3VudCwgTkFQSV9TS0JfQ0FDSEVfQlVMSyk7XFxubmV0L2NvcmUvc2tidWZmLmM6MzU2OlxcdGlmIChrbWVtX2NhY2hlX2FsbG9jX2J1bGsobmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTM1Ny1cXHRcXHRcXHRcXHQgIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4sIGJ1bGssXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zNjMtXFx0LyogU3RpbGwgbm90IGVub3VnaC4gQnVsay1hbGxvY2F0ZSB0aGUgbWlzc2luZyBwYXJ0IGRpcmVjdGx5LCB6ZXJvZWQgKi9cXG5uZXQvY29yZS9za2J1ZmYuYzozNjQ6XFx0aWYgKGttZW1fY2FjaGVfYWxsb2NfYnVsayhuZXRfaG90ZGF0YS5za2J1ZmZfY2FjaGUsXFxubmV0L2NvcmUvc2tidWZmLmMtMzY1LVxcdFxcdFxcdFxcdCAgR0ZQX0FUT01JQyB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9OT1dBUk4sXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz01MTk3PXN0YXRpYyB2b2lkIHNrYl9leHRlbnNpb25zX2luaXQodm9pZCkge31cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUyMDUtI2RlZmluZSBGTEFHX1NLQl9OT19NRVJHRVxcdFNMQUJfTk9fTUVSR0VcXG5uZXQvY29yZS9za2J1ZmYuYzo1MjA2OiNlbHNlIC8qIENPTkZJR19TTFVCX1RJTlkgLSBzaW1wbGUgbG9vcCBpbiBrbWVtX2NhY2hlX2FsbG9jX2J1bGsgKi9cXG5uZXQvY29yZS9za2J1ZmYuYy01MjA3LSNkZWZpbmUgRkxBR19TS0JfTk9fTUVSR0VcXHQwXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0xODU9dm9pZCBrbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKmxpc3QpO1xcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjE4Njpib29sIGttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplLFxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTE4Ny1cXHRcXHRcXHQgIHZvaWQgKipsaXN0KTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM9MTUzPXZvaWQga21lbV9jYWNoZV9zaHJpbmsoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMTU2LVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM6MTU3OmJvb2wga21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGdmcCwgc2l6ZV90IHNpemUsXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0xNTgtXFx0XFx0XFx0ICB2b2lkICoqcClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM9MjU1PWttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMjc0LVxcdHNoZWFmLVxcdTAwM2VzaXplID0gc2l6ZTtcXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjI3NTpcXHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhzLCBnZnAsIHNpemUsIHNoZWFmLVxcdTAwM2VvYmplY3RzKSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMjc2LVxcdFxcdGZyZWUoc2hlYWYpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYz0yODM9aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuLS1cXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTMwMC1cXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjMwMTpcXHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhzLCBnZnAsIHNpemUgLSBzaGVhZi1cXHUwMDNlc2l6ZSxcXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTMwMi1cXHRcXHRcXHRcXHUwMDI2c2hlYWYtXFx1MDAzZW9iamVjdHNbc2hlYWYtXFx1MDAzZXNpemVdKSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM9MzM3PXZvaWQgdGVzdF9rbWVtX2NhY2hlX2J1bGsodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMzU1LVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM6MzU2OlxcdGttZW1fY2FjaGVfYWxsb2NfYnVsayh0ZXN0X2NhY2hlLCBfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgNSwgbGlzdCk7XFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0zNTctXFx0a21lbV9jYWNoZV9mcmVlX2J1bGsodGVzdF9jYWNoZSwgNSwgbGlzdCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTM3MC1cXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjM3MTpcXHRrbWVtX2NhY2hlX2FsbG9jX2J1bGsodGVzdF9jYWNoZTIsIF9fR0ZQX0RJUkVDVF9SRUNMQUlNLCAxMCwgbGlzdCk7XFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0zNzItXFx0a21lbV9jYWNoZV9mcmVlX2J1bGsodGVzdF9jYWNoZTIsIDEwLCBsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6Mjc6MzEuODMyMjM4MDg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NzgzNjU1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUmVhY2ggb2YgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBhcmVhLi4uIGBrbWVtX2NhY2hlX2FsbG9jX2J1bGtgIGlzIHVzZWQgaW4gYSBmZXcga2V5IHBsYWNlcyBJIGtub3cgd2VsbCDigJMgbmV0d29ya2luZyB3aXRoIE5BUEkncyBza2J1ZmYgY2FjaGUsIGlvX3VyaW5nLCBhbmQgZXZlbiB0aG9zZSBtYXBsZV90cmVlIHNoZWF2ZXMuIE15IGNvbmNlcm4gaXMsIEnigJl2ZSBzZWVuIHRoaXMgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBmdW5jdGlvbiBhcHBlYXIgYXMgbW9kaWZpZWQuIEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9uIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgbW9kaWZpY2F0aW9ucy5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYmV5b25kIHRoZSBvYnZpb3VzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIHRvIGVuc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEknbGwgaW5pdGlhdGUgYSBgZ3JlcGAgc2VhcmNoIGZvciBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIHRvIHN0YXJ0IGJ1aWxkaW5nIG91dCBhIGxpc3Qgb2YgYWxsIGNhbGxlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjE2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjM0LjgxMDYwNzUxMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNTExNzQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9NTYxMT1zdGF0aWMgbm9pbmxpbmUgdm9pZCBmcmVlX3RvX3BhcnRpYWxfbGlzdChcXG4tLVxcbm1tL3NsdWIuYy01NjgyLSAqL1xcbm1tL3NsdWIuYzo1NjgzOnN0YXRpYyBib29sIF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG5tbS9zbHViLmMtNTY4NC1cXHRcXHRcXHRcXHQgICAgICAgdm9pZCAqaGVhZCwgaW50IGNudClcXG4tLVxcbm1tL3NsdWIuYy01NzAyLVxcbm1tL3NsdWIuYzo1NzAzOlxcdGlmICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXFx1MDAyNm9sZCwgXFx1MDAyNm5ldywgXFxcIl9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0XFxcIikpIHtcXG5tbS9zbHViLmMtNTcwNC1cXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4tLVxcbm1tL3NsdWIuYz03MjY0PV9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG4tLVxcbm1tL3NsdWIuYy03MzA3LVxcbm1tL3NsdWIuYzo3MzA4OlxcdFxcdFxcdGlmIChfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzLCBzbGFiLCBoZWFkLCBjb3VudCkpXFxubW0vc2x1Yi5jLTczMDktXFx0XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjM2LjgyNTczMzU3OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTI1NjY1OTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgQ2FsbCBDaGFpbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIG9ubHkgY2FsbGVkIGZyb20gYF9fcmVmaWxsX29iamVjdHNfbm9kZWAsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB3aGVyZSBpcyAqdGhhdCogY2FsbGVkPyBMZXQgbWUgc2Vl4oCmIGl0J3MgYF9fcmVmaWxsX29iamVjdHNfYW55YCBhbmQgYHJlZmlsbF9vYmplY3RzYC4gQWxyaWdodCwgdGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duIGEgYml0LiBBbmQgd2hvIGNhbGxzICp0aG9zZSo/IExvb2tzIGxpa2UgYHJlZmlsbF9zaGVhZmAgYW5kIGBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsa2AuIE9rYXksIHdlJ3JlIGJ1aWxkaW5nIGEgbmljZSBsaXR0bGUgY2FsbCBncmFwaCBoZXJlLlxuXG5TbywgYHJlZmlsbF9zaGVhZmAgaXMgY2FsbGVkIGJ5IGBfX3Bjc19yZXBsYWNlX2VtcHR5X21haW5gLCBgX19wcmVmaWxsX3NoZWFmX3BmbWVtYWxsb2NgLCBhbmQgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYC4gQW5kIGZpbmFsbHksIHdoYXQncyBjYWxsaW5nIGBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsa2A/IFJpZ2h0LCBga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmYCwgYGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmYCwgYW5kIGBrbWVtX2NhY2hlX2FsbG9jX2J1bGtfbm9wcm9mYC5cblxuTm93LCBJJ20gZ2V0dGluZyBhIGZlZWxpbmcgdGhhdCB0aGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gc29tZSBzcGVjaWZpYyBTTFVCIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBDT05GSUdfU0xVQmAgb3IgYENPTkZJR19TTFVCX1RJTllgIG9yIHBlcmhhcHMgc29tZXRoaW5nIGVsc2UgbGlrZSB0aGF0IGlzIGluIHBsYXkgaGVyZS4gTGV0IG1lIGhhdmUgYSBsb29rIGluIGBtbS9zbHViLmNgIGFyb3VuZCB0aGUgYF9fa21lbV9jYWNoZV9hbGxvY19idWxrYCBmdW5jdGlvbiwgYW5kIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBhcyB3ZWxsLiBUaGlzIG1pZ2h0IGdpdmUgbWUgdGhlIGtleSB0byB3aHkgdGhpcyBjaGFpbiBpcyBiZWluZyB1c2VkIGFuZCB3aGVyZSB0aGUgcmVhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBtaWdodCBsaWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODUyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjM5Ljk1MTQwMTc5OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0OTU0MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTFVCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTE2Mj1tZW51IFxcXCJTbGFiIGFsbG9jYXRvciBvcHRpb25zXFxcIlxcbm1tL0tjb25maWctMTYzLVxcbm1tL0tjb25maWc6MTY0OmNvbmZpZyBTTFVCXFxubW0vS2NvbmZpZy0xNjUtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubW0vS2NvbmZpZz0xNjg9Y29uZmlnIEtWRlJFRV9SQ1VfQkFUQ0hFRFxcbi0tXFxubW0vS2NvbmZpZy0xNzItXFxubW0vS2NvbmZpZzoxNzM6Y29uZmlnIFNMVUJfVElOWVxcbm1tL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkNvbmZpZ3VyZSBmb3IgbWluaW1hbCBtZW1vcnkgZm9vdHByaW50XFxcIlxcbi0tXFxubW0vS2NvbmZpZz0yMTc9Y29uZmlnIFNMQUJfQlVDS0VUU1xcbi0tXFxubW0vS2NvbmZpZy0yMzMtXFxubW0vS2NvbmZpZzoyMzQ6Y29uZmlnIFNMVUJfU1RBVFNcXG5tbS9LY29uZmlnLTIzNS1cXHRkZWZhdWx0IG5cXG4tLVxcbm1tL0tjb25maWcuZGVidWc9NDE9Y29uZmlnIERFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy00Ny1cXG5tbS9LY29uZmlnLmRlYnVnOjQ4OmNvbmZpZyBTTFVCX0RFQlVHXFxubW0vS2NvbmZpZy5kZWJ1Zy00OS1cXHRkZWZhdWx0IHlcXG4tLVxcbm1tL0tjb25maWcuZGVidWctNTgtXFxubW0vS2NvbmZpZy5kZWJ1Zzo1OTpjb25maWcgU0xVQl9ERUJVR19PTlxcbm1tL0tjb25maWcuZGVidWctNjAtXFx0Ym9vbCBcXFwiU0xVQiBkZWJ1Z2dpbmcgb24gYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctNzItXFxubW0vS2NvbmZpZy5kZWJ1Zzo3Mzpjb25maWcgU0xVQl9SQ1VfREVCVUdcXG5tbS9LY29uZmlnLmRlYnVnLTc0LVxcdGJvb2wgXFxcIkVuYWJsZSBVQUYgZGV0ZWN0aW9uIGluIFRZUEVTQUZFX0JZX1JDVSBjYWNoZXMgKGZvciBLQVNBTilcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjQwLjA1NjM1OTQwN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjcxMTI0NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlNMVUIgQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgY29uZmlybSB0aGUgZGVmYXVsdCBmb3IgYFNMVUJgLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQncyBzZXQgdG8gJ3knIGluIGBtbS9LY29uZmlnYC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTm93LCBJIHdhbnQgdG8gc2VlIGhvdyBgQ09ORklHX1NMVUJfVElOWWAgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgYFNMVUJgIGNvbmZpZ3VyYXRpb24uIE15IG1lbnRhbCBtb2RlbCBpcyBqdW1waW5nIHRvIGBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsa2AgYW5kIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgLiBBcmUgZWl0aGVyIG9mIHRob3NlIGZ1bmN0aW9ucyBjb25kaXRpb25hbCBvbiBgIUNPTkZJR19TTFVCX1RJTllgPyBUbyBjb25maXJtLCBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIGBtbS9zbHViLmNgIGFuZCBzZWFyY2ggZm9yIHRoZSBgU0xVQl9USU5ZYCBzeW1ib2wuIFRoYXQnbGwgZXhwb3NlIHRoZSBrZXkgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg2NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyNzo0Mi4zMjc0ODY5MDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDI0NzYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTTFVCX1RJTllcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTY4PWNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcXG5tbS9LY29uZmlnLTE2OS1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzoxNzA6XFx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZIFxcdTAwMjZcXHUwMDI2ICFUSU5ZX1JDVVxcbm1tL0tjb25maWctMTcxLVxcdGRlcGVuZHMgb24gIVJDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXFxubW0vS2NvbmZpZy0xNzItXFxubW0vS2NvbmZpZzoxNzM6Y29uZmlnIFNMVUJfVElOWVxcbm1tL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkNvbmZpZ3VyZSBmb3IgbWluaW1hbCBtZW1vcnkgZm9vdHByaW50XFxcIlxcbi0tXFxubW0vS2NvbmZpZz0yMDA9Y29uZmlnIFNMQUJfRlJFRUxJU1RfUkFORE9NXFxubW0vS2NvbmZpZy0yMDEtXFx0Ym9vbCBcXFwiUmFuZG9taXplIHNsYWIgZnJlZWxpc3RcXFwiXFxubW0vS2NvbmZpZzoyMDI6XFx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXFxubW0vS2NvbmZpZy0yMDMtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0yMDg9Y29uZmlnIFNMQUJfRlJFRUxJU1RfSEFSREVORURcXG5tbS9LY29uZmlnLTIwOS1cXHRib29sIFxcXCJIYXJkZW4gc2xhYiBmcmVlbGlzdCBtZXRhZGF0YVxcXCJcXG5tbS9LY29uZmlnOjIxMDpcXHRkZXBlbmRzIG9uICFTTFVCX1RJTllcXG5tbS9LY29uZmlnLTIxMS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTIxNz1jb25maWcgU0xBQl9CVUNLRVRTXFxubW0vS2NvbmZpZy0yMTgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBhbGxvY2F0aW9uIGZyb20gc2VwYXJhdGUga21hbGxvYyBidWNrZXRzXFxcIlxcbm1tL0tjb25maWc6MjE5OlxcdGRlcGVuZHMgb24gIVNMVUJfVElOWVxcbm1tL0tjb25maWctMjIwLVxcdGRlZmF1bHQgU0xBQl9GUkVFTElTVF9IQVJERU5FRFxcbi0tXFxubW0vS2NvbmZpZz0yMzQ9Y29uZmlnIFNMVUJfU1RBVFNcXG4tLVxcbm1tL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIkVuYWJsZSBwZXJmb3JtYW5jZSBzdGF0aXN0aWNzXFxcIlxcbm1tL0tjb25maWc6MjM3OlxcdGRlcGVuZHMgb24gU1lTRlMgXFx1MDAyNlxcdTAwMjYgIVNMVUJfVElOWVxcbm1tL0tjb25maWctMjM4LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MjQ3PWNvbmZpZyBLTUFMTE9DX1BBUlRJVElPTl9DQUNIRVNcXG5tbS9LY29uZmlnOjI0ODpcXHRkZXBlbmRzIG9uICFTTFVCX1RJTllcXG5tbS9LY29uZmlnLTI0OS1cXHRib29sIFxcXCJQYXJ0aXRpb25lZCBzbGFiIGNhY2hlcyBmb3Igbm9ybWFsIGttYWxsb2NcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnPTQ4PWNvbmZpZyBTTFVCX0RFQlVHXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTUwLVxcdGJvb2wgXFxcIkVuYWJsZSBTTFVCIGRlYnVnZ2luZyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5tbS9LY29uZmlnLmRlYnVnOjUxOlxcdGRlcGVuZHMgb24gU1lTRlMgXFx1MDAyNlxcdTAwMjYgIVNMVUJfVElOWVxcbm1tL0tjb25maWcuZGVidWctNTItXFx0c2VsZWN0IFNUQUNLREVQT1QgaWYgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuLS1cXG5tbS9zbGFiLmg9MjQwPXN0cnVjdCBrbWVtX2NhY2hlIHtcXG4tLVxcbm1tL3NsYWIuaC0yOTgtICogYm9vdHN0cmFwX3NoZWFmIHRlbXBvcmFyaWx5IGR1cmluZyBpbml0LCBvciBwZXJtYW5lbnRseSBmb3IgdGhlIGJvb3QgY2FjaGVzXFxubW0vc2xhYi5oOjI5OTogKiBhbmQgY2FjaGVzIHdpdGggZGVidWdnaW5nIGVuYWJsZWQsIG9yIGFsbCBjYWNoZXMgd2l0aCBDT05GSUdfU0xVQl9USU5ZLiBUaGlzXFxubW0vc2xhYi5oLTMwMC0gKiBoZWxwZXIgZGlzdGluZ3Vpc2hlcyB3aGV0aGVyIGNhY2hlIGhhcyByZWFsIG5vbi1ib290c3RyYXAgc2hlYXZlcy5cXG4tLVxcbm1tL3NsYWIuaD0zMDI9c3RhdGljIGlubGluZSBib29sIGNhY2hlX2hhc19zaGVhdmVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsYWIuaC0zMDMte1xcbm1tL3NsYWIuaDozMDQ6XFx0LyogVGVzdCBDT05GSUdfU0xVQl9USU5ZIGZvciBjb2RlIGVsaW1pbmF0aW9uIHB1cnBvc2VzICovXFxubW0vc2xhYi5oOjMwNTpcXHRyZXR1cm4gIUlTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgXFx1MDAyNlxcdTAwMjYgcy1cXHUwMDNlc2hlYWZfY2FwYWNpdHk7XFxubW0vc2xhYi5oLTMwNi19XFxubW0vc2xhYi5oLTMwNy1cXG5tbS9zbGFiLmg6MzA4OiNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXFx1MDAyNlxcdTAwMjYgIWRlZmluZWQoQ09ORklHX1NMVUJfVElOWSlcXG5tbS9zbGFiLmgtMzA5LSNkZWZpbmUgU0xBQl9TVVBQT1JUU19TWVNGUyAxXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTgxNT1FWFBPUlRfU1lNQk9MKGttYWxsb2Nfc2l6ZV9yb3VuZHVwKTtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtODI4LVxcbm1tL3NsYWJfY29tbW9uLmM6ODI5OiNpZm5kZWYgQ09ORklHX1NMVUJfVElOWVxcbm1tL3NsYWJfY29tbW9uLmMtODMwLSNkZWZpbmUgS01BTExPQ19SQ0xfTkFNRShzeilcXHQubmFtZVtLTUFMTE9DX1JFQ0xBSU1dID0gXFxcImttYWxsb2MtcmNsLVxcXCIgI3N6LFxcbi0tXFxubW0vc2x1Yi5jPTE5Mz1lbnVtIHNsYWJfZmxhZ3Mge1xcbi0tXFxubW0vc2x1Yi5jLTE5OC1cXG5tbS9zbHViLmM6MTk5OiNpZm5kZWYgQ09ORklHX1NMVUJfVElOWVxcbm1tL3NsdWIuYy0yMDAtI2RlZmluZSBfX2Zhc3RwYXRoX2lubGluZSBfX2Fsd2F5c19pbmxpbmVcXG4tLVxcbm1tL3NsdWIuYz0yNTQ9dm9pZCAqZml4dXBfcmVkX2xlZnQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKnApXFxuLS1cXG5tbS9zbHViLmMtMjcyLVxcbm1tL3NsdWIuYzoyNzM6I2lmbmRlZiBDT05GSUdfU0xVQl9USU5ZXFxubW0vc2x1Yi5jLTI3NC0vKlxcbi0tXFxubW0vc2x1Yi5jPTM4ODU9c3RhdGljIHZvaWQgKmdldF9mcm9tX3BhcnRpYWxfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy0zOTEzLVxcbm1tL3NsdWIuYzozOTE0OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcXG5tbS9zbHViLmMtMzkxNS1cXHRcXHRcXHRvYmplY3QgPSBhbGxvY19zaW5nbGVfZnJvbV9wYXJ0aWFsKHMsIG4sIHNsYWIsXFxuLS1cXG5tbS9zbHViLmM9NDQ3OD1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG9jX2Zyb21fbmV3X3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTQ1MjctICogU2xvdyBwYXRoLiBXZSBmYWlsZWQgdG8gYWxsb2NhdGUgdmlhIHBlcmNwdSBzaGVhdmVzIG9yIHRoZXkgYXJlIG5vdCBhdmFpbGFibGVcXG5tbS9zbHViLmM6NDUyODogKiBkdWUgdG8gYm9vdHN0cmFwIG9yIGRlYnVnZ2luZyBlbmFibGVkIG9yIFNMVUJfVElOWS5cXG5tbS9zbHViLmMtNDUyOS0gKlxcbi0tXFxubW0vc2x1Yi5jPTQ1MzM9c3RhdGljIHZvaWQgKl9fX3NsYWJfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSxcXG4tLVxcbm1tL3NsdWIuYy00NTgxLVxcbm1tL3NsdWIuYzo0NTgyOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcXG5tbS9zbHViLmMtNDU4My1cXHRcXHRvYmplY3QgPSBhbGxvY19zaW5nbGVfZnJvbV9uZXdfc2xhYihzLCBzbGFiLCBhYyk7XFxuLS1cXG5tbS9zbHViLmM9NTcyMT1zdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtNTczMS1cXG5tbS9zbHViLmM6NTczMjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBrbWVtX2NhY2hlX2RlYnVnKHMpKSB7XFxubW0vc2x1Yi5jLTU3MzMtXFx0XFx0ZnJlZV90b19wYXJ0aWFsX2xpc3Qocywgc2xhYiwgaGVhZCwgdGFpbCwgY250LCBhZGRyKTtcXG4tLVxcbm1tL3NsdWIuYz03NDMzPXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy03NDM3LVxcbm1tL3NsdWIuYzo3NDM4OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcXG5tbS9zbHViLmMtNzQzOS1cXHRcXHRjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0IGFjID0ge1xcbi0tXFxubW0vc2x1Yi5jPTc1NjY9c3RhdGljIHVuc2lnbmVkIGludCBzbHViX21heF9vcmRlciA9XFxubW0vc2x1Yi5jOjc1Njc6XFx0SVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSA/IDEgOiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUjtcXG5tbS9zbHViLmMtNzU2OC1zdGF0aWMgdW5zaWduZWQgaW50IHNsdWJfbWluX29iamVjdHM7XFxuLS1cXG5tbS9zbHViLmM9NzcwNz1zdGF0aWMgaW50IGluaXRfcGVyY3B1X3NoZWF2ZXMoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtNzczMi1cXHRcXHQgKiBXZSBrZWVwIGJvb3RzdHJhcF9zaGVhZiBmb3Iga21lbV9jYWNoZSBhbmQga21lbV9jYWNoZV9ub2RlLFxcbm1tL3NsdWIuYzo3NzMzOlxcdFxcdCAqIGNhY2hlcyB3aXRoIGRlYnVnIGVuYWJsZWQsIGFuZCBhbGwgY2FjaGVzIHdpdGggU0xVQl9USU5ZLlxcbm1tL3NsdWIuYy03NzM0LVxcdFxcdCAqIEZvciBrbWFsbG9jIGNhY2hlcyBpdCdzIHVzZWQgdGVtcG9yYXJpbHkgZHVyaW5nIHRoZSBpbml0aWFsXFxuLS1cXG5tbS9zbHViLmM9Nzg3MT1zdGF0aWMgdW5zaWduZWQgaW50IGNhbGN1bGF0ZV9zaGVhZl9jYXBhY2l0eShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy03ODc4LVxcbm1tL3NsdWIuYzo3ODc5OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IHMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0xBQl9ERUJVR19GTEFHUylcXG5tbS9zbHViLmMtNzg4MC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3NsdWIuYz04NTc0PXN0YXRpYyB2b2lkIF9faW5pdCBib290c3RyYXBfY2FjaGVfc2hlYXZlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy04NTg0LVxcbm1tL3NsdWIuYzo4NTg1OlxcdC8qIGNhcGFjaXR5IGNhbiBiZSAwIGR1ZSB0byBkZWJ1Z2dpbmcgb3IgU0xVQl9USU5ZICovXFxubW0vc2x1Yi5jLTg1ODYtXFx0aWYgKCFjYXBhY2l0eSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6Mjc6NDIuNDM3NzM4ODhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTA5MTg4Njg1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipTTFVCIEFsbG9jYXRvciBPcHRpbWl6YXRpb24gLSBXb3J0aHkgb2YgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbm90ZSB0aGF0IGBDT05GSUdfU0xVQmAgaXMgdGhlIGRlZmF1bHQgYW5kIHN0YW5kYXJkIHNsYWIgYWxsb2NhdG9yLCBhbmQgYENPTkZJR19TTFVCX1RJTllgIGRpc2FibGVzIHNoZWF2ZXMuIE5vIG90aGVyIHNwZWNpYWwgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCBhcyBmYXIgYXMgSSBjYW4gc2VlLiBTbywgYFNMVUJgIGlzIHRoZSBzdGFuZGFyZCBhbGxvY2F0b3IsIGVuYWJsZWQgYnkgZGVmYXVsdCwgbm90aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5IGhlcmUuXG5cbk5vdywgdGhlIGNvcmUgb2YgdGhpcyBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGFmZmVjdGVkLiBJJ20gZm9jdXNpbmcgb24gdGhlIG1vZGlmaWNhdGlvbnMsIHNwZWNpZmljYWxseSwgdGhvc2UgcmVsYXRlZCB0byBmcmVlbGlzdCBoYW5kbGluZyBhbmQgYnVsayBvcGVyYXRpb25zLiBUaGUgZnVuY3Rpb25zIHRoYXQgc3RhbmQgb3V0IGFyZSBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYC4gSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgcmVsYXRlZCBlbnRyeSBwb2ludHMuIFRoZSBjYWxsZXJzIG9yIHJlbGF0ZWQgZnVuY3Rpb25zIGluY2x1ZGUgYF9fcmVmaWxsX29iamVjdHNfYW55YCwgYHJlZmlsbF9vYmplY3RzYCwgYHJlZmlsbF9zaGVhZmAsIGBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWZgLCBga21lbV9jYWNoZV9yZWZpbGxfc2hlYWZgLCBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgLCBhbmQgdGhlIGBrbWVtX2NhY2hlX2FsbG9jX2J1bGtgIGZhbWlseS5cblxuYGttZW1fY2FjaGVfYWxsb2NfYnVsa2AgaXMgdXNlZCBieSBuZXR3b3JraW5nIGFuZCBzb21lIGJ1bGsgYWxsb2NhdG9ycywgYnV0IGl0IGlzbid0IGFzIHViaXF1aXRvdXMgYXMgYGttYWxsb2NgIGFuZCBga2ZyZWVgLCB3aGljaCBJIG5vdGUgZm9yIGNvbnRleHQuIFRoZSBvdGhlcnMsIGBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWZgLCBga21lbV9jYWNoZV9yZWZpbGxfc2hlYWZgLCBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgLCBgcmVmaWxsX3NoZWFmYCwgYHJlZmlsbF9vYmplY3RzYCwgYF9fcmVmaWxsX29iamVjdHNfbm9kZWAsIGFuZCBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgLCBhcmUgdGhlIG1vcmUgc3BlY2lmaWMgdGFyZ2V0cyBoZXJlLlxuXG5MZXQncyB2ZXJpZnkgdGhlc2Ugc3ltYm9scy4gSSdtIGNvbmZpZGVudCB0aGV5IGFyZSBhbGwgaW4gYG1tL3NsdWIuY2AuXG5cbk9rYXksIEkndmUgY29uZmlybWVkIHRoYXQgdGhlc2Ugc3ltYm9scyBleGlzdCBpbiBgbW0vc2x1Yi5jYDpcbiogICBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgOiBzdGF0aWNcbiogICBgX19yZWZpbGxfb2JqZWN0c19ub2RlYDogc3RhdGljXG4qICAgYHJlZmlsbF9vYmplY3RzYDogc3RhdGljXG4qICAgYHJlZmlsbF9zaGVhZmA6IHN0YXRpY1xuKiAgIGBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWZgOiBleHBvcnRlZFxuKiAgIGBrbWVtX2NhY2hlX3JlZmlsbF9zaGVhZmA6IGV4cG9ydGVkXG4qICAgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYDogZXhwb3J0ZWRcblxuTGluZSBudW1iZXIgdmVyaWZpY2F0aW9uIGlzIGFsc28gZG9uZTpcbiogICBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGF0IGxpbmUgNTY4M1xuKiAgIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgIGF0IGxpbmUgNzI2NFxuKiAgIGByZWZpbGxfb2JqZWN0c2AgYXQgbGluZSA3Mzk3XG4qICAgYHJlZmlsbF9zaGVhZmAgYXQgbGluZSAyODc2XG4qICAgYGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZmAgYXQgbGluZSA1MTExXG4qICAgYGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmYCBhdCBsaW5lIDUyNTJcbiogICBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGF0IGxpbmUgNTE5NFxuXG5Hb29kLCBhbmQgaXQgbG9va3MgbGlrZSBgbW0vc2x1Yi5jYCBpcyB0aGUgb25seSBmaWxlIGFmZmVjdGVkLlxuXG5Ob3csIHRoZSBwYXRjaCdzIGltcGFjdC4gVGhlIGtleSBpcyBob3cgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBhbmQgYF9fcmVmaWxsX29iamVjdHNfbm9kZWAgaGF2ZSBiZWVuIG1vZGlmaWVkLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyBsb2NraW5nIGFuZCBmcmVlbGlzdCBtYW5hZ2VtZW50IGR1cmluZyBidWxrIHJlZmlsbHMgYW5kIHNoZWF2ZXMuIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgbm93IHRha2VzIGBuLVx1MDAzZWxpc3RfbG9ja2AgYXJvdW5kIGBzbGFiX3VwZGF0ZV9mcmVlbGlzdGAgYW5kIHRoZW4gaW1tZWRpYXRlbHkgY2FsbHMgYGFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKWAgdW5kZXIgdGhlIHNhbWUgbG9jay4gVGhpcyBjaGFuZ2VzIHRoZSBzeW5jaHJvbml6YXRpb24gYW5kIHRoZSBoYW5kbGluZyBvZiBwYXJ0aWFsIHNsYWIgbGlzdHMsIG1vdmluZyBmcm9tIGEgZGVmZXJyZWQgYHBjLnNsYWJzYCB1cGRhdGUgdG8gYW4gaW1tZWRpYXRlIGNhbGwuXG5cblRoaXMgaXMgYSBjb3JlIG1lbW9yeSBhbGxvY2F0b3IgY2hhbmdlIHJlYWNoYWJsZSB2aWEgY29tbW9uIHN5c2NhbGxzIGFuZCBhbGxvY2F0aW9ucywgZXNwZWNpYWxseSBpbiBRRU1VL3g4Nl82NCBlbnZpcm9ubWVudHMuIEdpdmVuIHRoZXNlIG1vZGlmaWNhdGlvbnMsIHRoaXMgaXMgcHJpbWUgdGVycml0b3J5IGZvciBjb25jdXJyZW5jeSBidWdzLCBsaXN0IGNvcnJ1cHRpb24sIGxvY2tpbmcgaXNzdWVzLCBhbmQgaW5jb25zaXN0ZW5jaWVzIGluIHNsYWIgc3RhdGVzLiBGdXp6aW5nIGlzICphYnNvbHV0ZWx5KiB3YXJyYW50ZWQgaGVyZS5cblxuU28sIHRoZSBwYXJhbWV0ZXJzIGZvciBgc2V0LXJlc3VsdHNgOlxuKiAgIGBXb3J0aEZ1enppbmdgOiAqKnRydWUqKlxuKiAgIGBSZWFzb25pbmdgOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBmcmVlbGlzdCByZXR1cm4gbG9naWMgYW5kIHBhcnRpYWwgc2xhYiBsaXN0IGhhbmRsaW5nIHVuZGVyIGBuLVx1MDAzZWxpc3RfbG9ja2AgaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KClgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlKClgIGluIHRoZSBTTFVCIGFsbG9jYXRvciAobW0vc2x1Yi5jKS4gVGhpcyBhZmZlY3RzIFNMVUIgYnVsayBhbGxvY2F0aW9uIGFuZCBzaGVhZiByZWZpbGxpbmcgbG9naWMuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHdhcnJhbnQgZnV6emluZyB0byBkZXRlY3QgcmFjZSBjb25kaXRpb25zIG9yIGxpc3QvbG9jayBjb3JydXB0aW9uLlwiXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFwiLCBcIl9fcmVmaWxsX29iamVjdHNfbm9kZVwiLCBcInJlZmlsbF9vYmplY3RzXCIsXG5cbiIsIklucHV0VG9rZW5zIjoyMTMwMiwiT3V0cHV0VG9rZW5zIjoxOTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjUxLjUyOTYyODY0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjg3MzYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0xVQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0XCIsXG4gICAgXCJfX3JlZmlsbF9vYmplY3RzX25vZGVcIixcbiAgICBcInJlZmlsbF9vYmplY3RzXCIsXG4gICAgXCJyZWZpbGxfc2hlYWZcIixcbiAgICBcImttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZlwiLFxuICAgIFwia21lbV9jYWNoZV9yZWZpbGxfc2hlYWZcIixcbiAgICBcImttZW1fY2FjaGVfcmV0dXJuX3NoZWFmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZyZWVsaXN0IHJldHVybiBhbmQgcGFydGlhbCBzbGFiIGxpc3QgbWFuYWdlbWVudCBsb2dpYyB1bmRlciBuLVxcdTAwM2VsaXN0X2xvY2sgaW4gX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3QoKSBhbmQgX19yZWZpbGxfb2JqZWN0c19ub2RlKCkgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIChtbS9zbHViLmMpLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgU0xVQiBidWxrIGFsbG9jYXRpb24gYW5kIHNoZWFmIHJlZmlsbGluZyBwYXRocywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGNyaXRpY2FsIGZvciBtZW1vcnkgc2FmZXR5IGFuZCBsb2NrIGNvcnJlY3RuZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMVUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFwiLFxuICAgIFwiX19yZWZpbGxfb2JqZWN0c19ub2RlXCIsXG4gICAgXCJyZWZpbGxfb2JqZWN0c1wiLFxuICAgIFwicmVmaWxsX3NoZWFmXCIsXG4gICAgXCJrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWZcIixcbiAgICBcImttZW1fY2FjaGVfcmVmaWxsX3NoZWFmXCIsXG4gICAgXCJrbWVtX2NhY2hlX3JldHVybl9zaGVhZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmcmVlbGlzdCByZXR1cm4gYW5kIHBhcnRpYWwgc2xhYiBsaXN0IG1hbmFnZW1lbnQgbG9naWMgdW5kZXIgbi1cXHUwMDNlbGlzdF9sb2NrIGluIF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KCkgYW5kIF9fcmVmaWxsX29iamVjdHNfbm9kZSgpIGluIHRoZSBTTFVCIGFsbG9jYXRvciAobW0vc2x1Yi5jKS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIFNMVUIgYnVsayBhbGxvY2F0aW9uIGFuZCBzaGVhZiByZWZpbGxpbmcgcGF0aHMsIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBjcml0aWNhbCBmb3IgbWVtb3J5IHNhZmV0eSBhbmQgbG9jayBjb3JyZWN0bmVzcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6Mjc6NTEuNjUyNTEwNDMzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAzMTA5NTg5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjUxLjY1MzEzMDg4M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ5MDMwNDcwMzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBTTFVCIGFsbG9jYXRvciBpbnRlcm5hbCBsb2NraW5nIGFuZCBwYXJ0aWFsIGxpc3QgbWFuYWdlbWVudCBpbiBgbW0vc2x1Yi5jYCAoYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBhbmQgYF9fcmVmaWxsX29iamVjdHNfbm9kZWApLiBTcGVjaWZpY2FsbHksIGl0IGFjcXVpcmVzIHRoZSBub2RlIGxpc3RfbG9jayBhbmQgYWRkcyB0aGUgc2xhYiB0byB0aGUgcGFydGlhbCBsaXN0IGRpcmVjdGx5IGluIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgaW5zdGVhZCBvZiByZS1hZGRpbmcgaXQgdG8gdGhlIGxvY2FsIGBwYy5zbGFic2AgbGlzdCBpbiBgX19yZWZpbGxfb2JqZWN0c19ub2RlYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IGFmZmVjdCBTTFVCIGludGVybmFsIHN0YXRlLCBsb2NraW5nLCBhbmQgZnJlZWxpc3QvcGFydGlhbCBsaXN0IHRyYWNraW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKHN1Y2ggYXMgbG9jayBvcmRlciBpbnZlcnNpb25zLCBsaXN0IGNvcnJ1cHRpb24sIGRvdWJsZS1mcmVlLCBvciBzbGFiIG1ldGFkYXRhIGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBjaGVja3MuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGQgYWNjZXNzZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MThjY2JhZmQ1OWJiYzY3NTc1ZWYwNDdkMjRmNDZkZDdkZjBlOTQzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMzoyNjozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggZjliNTZjYjQzOWU3MC4uNWNiYmFjYjhlZTMyZiAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuKysrIGIvbW0vc2x1Yi5jXG5AQCAtNTY4NCw2ICs1Njg0LDggQEAgc3RhdGljIGJvb2wgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuIFx0XHRcdFx0ICAgICAgIHZvaWQgKmhlYWQsIGludCBjbnQpXG4ge1xuIFx0c3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIG9sZCwgbmV3O1xuK1x0c3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbjtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRvbGQuZnJlZWxpc3QgPSBzbGFiLVx1MDAzZWZyZWVsaXN0O1xuIFx0b2xkLmNvdW50ZXJzID0gc2xhYi1cdTAwM2Vjb3VudGVycztcbkBAIC01Njk1LDkgKzU2OTcsMTYgQEAgc3RhdGljIGJvb2wgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuIFx0bmV3LmNvdW50ZXJzID0gb2xkLmNvdW50ZXJzO1xuIFx0bmV3LmludXNlIC09IGNudDtcbiBcbi1cdGlmICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXHUwMDI2b2xkLCBcdTAwMjZuZXcsIFwiX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RcIikpXG4rXHRuID0gZ2V0X25vZGUocywgc2xhYl9uaWQoc2xhYikpO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbitcbitcdGlmICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXHUwMDI2b2xkLCBcdTAwMjZuZXcsIFwiX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RcIikpIHtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4gXG4rXHRhZGRfcGFydGlhbChuLCBzbGFiLCBBRERfVE9fVEFJTCk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtNzI5NiwxMCArNzMwNSw4IEBAIF9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pXG4gXHRcdFx0dm9pZCAqaGVhZCA9IG9iamVjdDtcbiBcdFx0XHR2b2lkICp0YWlsO1xuIFxuLVx0XHRcdGlmIChfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzLCBzbGFiLCBoZWFkLCBjb3VudCkpIHtcbi1cdFx0XHRcdGxpc3RfYWRkKFx1MDAyNnNsYWItXHUwMDNlc2xhYl9saXN0LCBcdTAwMjZwYy5zbGFicyk7XG4rXHRcdFx0aWYgKF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHMsIHNsYWIsIGhlYWQsIGNvdW50KSlcbiBcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbiBcbiBcdFx0XHRkbyB7XG4gXHRcdFx0XHR0YWlsID0gb2JqZWN0O1xuQEAgLTczMTIsNyArNzMxOSw3IEBAIF9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2cGMuc2xhYnMpKSB7XG4rXHRpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoXHUwMDI2cGMuc2xhYnMpKSkge1xuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuIFxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsYWIsIFx1MDAyNnBjLnNsYWJzLCBzbGFiX2xpc3QpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyNzo1MS42NTMxMzE3NDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQxMDEzNTQ0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2gsIGFzIEkgdW5kZXJzdGFuZCBpdC5cblxuKipFdmFsdWF0aW5nIHRoZSBTTFVCIFBhdGNoIGZvciBGdXp6aW5nIE5lZWRzKipcblxuUmlnaHQsIHNvIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgU0xVQiBwYXRjaCByZXF1aXJlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgZGV0ZWN0b3JzIGFyZSBnb2luZyB0byBiZSBnb29kIGVub3VnaC4gVGhhdOKAmXMgYSBnb29kIHF1ZXN0aW9uLCBhbmQgdGhlIGFuc3dlciwgYXMgdXN1YWwsIGNvbWVzIGRvd24gdG8gdGhlIGNvZGUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluLiBMZXQncyBzZWUgd2hhdCB3ZSdyZSBhY3R1YWxseSBsb29raW5nIGF0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgYW5kIHBhdGNoIGRldGFpbHMsIG9idmlvdXNseS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBwdWxsIHVwIGBtbS9zbHViLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgdGhlIHJlZ2lvbnMgbWVudGlvbmVkLCBzcGVjaWZpY2FsbHkgbGluZXMgNTY4NCBhbmQgNzI5Ni4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIG9mIHRob3NlIHNlY3Rpb25zIG9mIGNvZGUgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZlZWwgZm9yIHRoZSB0eXBlIG9mIG1lbW9yeSBtYW5pcHVsYXRpb24gYmVpbmcgZG9uZSBhbmQgd2hldGhlciBpdCdzIHRoZSBzb3J0IG9mIHRoaW5nIHRoYXQgS0FTQU4gbWlnaHQgbWlzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0b29scyBJIGhhdmUgYXZhaWxhYmxlIHRvIGNvbmR1Y3QgbXkgaW52ZXN0aWdhdGlvbi4gVGhpcyB3aWxsIGluZmx1ZW5jZSBteSBjb25jbHVzaW9ucyBhbmQgdGhlIHRob3JvdWdobmVzcyBvZiBteSBhbmFseXNpcy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIGEgc3BlY2lhbGl6ZWQgS01TQU4gc2Vzc2lvbiBpcyB3YXJyYW50ZWQsIG9yIGlmIEtBU0FOIHByb3ZpZGVzIGFkZXF1YXRlIGNvdmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyODoyNS43NTQ0ODg1MTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NsdWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NjgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NjgwOlxcdCAqXFxuNTY4MTpcXHQgKiBGYWlsIGlmIHRoZSBzbGFiIGlzbid0IGZ1bGwgYW55bW9yZSBkdWUgdG8gYSBjb25jdXJyZW50IGZyZWUuXFxuNTY4MjpcXHQgKi9cXG41NjgzOlxcdHN0YXRpYyBib29sIF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG41Njg0OlxcdFxcdFxcdFxcdFxcdCAgICAgICB2b2lkICpoZWFkLCBpbnQgY250KVxcbjU2ODU6XFx0e1xcbjU2ODY6XFx0XFx0c3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIG9sZCwgbmV3O1xcbjU2ODc6XFx0XFx0c3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbjtcXG41Njg4OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuNTY4OTpcXHRcXG41NjkwOlxcdFxcdG9sZC5mcmVlbGlzdCA9IHNsYWItXFx1MDAzZWZyZWVsaXN0O1xcbjU2OTE6XFx0XFx0b2xkLmNvdW50ZXJzID0gc2xhYi1cXHUwMDNlY291bnRlcnM7XFxuNTY5MjpcXHRcXG41NjkzOlxcdFxcdGlmIChvbGQuZnJlZWxpc3QpXFxuNTY5NDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNTY5NTpcXHRcXG41Njk2OlxcdFxcdG5ldy5mcmVlbGlzdCA9IGhlYWQ7XFxuNTY5NzpcXHRcXHRuZXcuY291bnRlcnMgPSBvbGQuY291bnRlcnM7XFxuNTY5ODpcXHRcXHRuZXcuaW51c2UgLT0gY250O1xcbjU2OTk6XFx0XFxuNTcwMDpcXHRcXHRuID0gZ2V0X25vZGUocywgc2xhYl9uaWQoc2xhYikpO1xcbjU3MDE6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xcbjU3MDI6XFx0XFxuNTcwMzpcXHRcXHRpZiAoIXNsYWJfdXBkYXRlX2ZyZWVsaXN0KHMsIHNsYWIsIFxcdTAwMjZvbGQsIFxcdTAwMjZuZXcsIFxcXCJfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFxcXCIpKSB7XFxuNTcwNDpcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG41NzA1OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG41NzA2OlxcdFxcdH1cXG41NzA3OlxcdFxcbjU3MDg6XFx0XFx0YWRkX3BhcnRpYWwobiwgc2xhYiwgQUREX1RPX1RBSUwpO1xcbjU3MDk6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XFxuNTcxMDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG41NzExOlxcdH1cXG41NzEyOlxcdFxcbjU3MTM6XFx0LypcXG41NzE0OlxcdCAqIFNsb3cgcGF0aCBoYW5kbGluZy4gVGhpcyBtYXkgc3RpbGwgYmUgY2FsbGVkIGZyZXF1ZW50bHkgc2luY2Ugb2JqZWN0c1xcbjU3MTU6XFx0ICogaGF2ZSBhIGxvbmdlciBsaWZldGltZSB0aGFuIHRoZSBjcHUgc2xhYnMgaW4gbW9zdCBwcm9jZXNzaW5nIGxvYWRzLlxcbjU3MTY6XFx0ICpcXG41NzE3OlxcdCAqIFNvIHdlIHN0aWxsIGF0dGVtcHQgdG8gcmVkdWNlIGNhY2hlIGxpbmUgdXNhZ2UuIEp1c3QgdGFrZSB0aGUgc2xhYlxcbjU3MTg6XFx0ICogbG9jayBhbmQgZnJlZSB0aGUgaXRlbS4gSWYgdGhlcmUgaXMgbm8gYWRkaXRpb25hbCBwYXJ0aWFsIHNsYWJcXG41NzE5OlxcdCAqIGhhbmRsaW5nIHJlcXVpcmVkIHRoZW4gd2UgY2FuIHJldHVybiBpbW1lZGlhdGVseS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6Mjg6MjUuNzU0OTc3ODczWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMzQ0OTUyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgbW0vc2x1Yi5jYCDigJMgTGluZSBieSBMaW5lKipcblxuT2theSwgSSdtIHRoaW5raW5nLCBcIldlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBtbS9zbHViLmNgIGNvZGUgbW9yZSBkZWVwbHksIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dFwiLiAgSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgbWlkZGxlIG9mIHRoZSBmaWxlIHRvIHNlZSB3aGF0IGlzIGhhcHBlbmluZywgc28gbGV0J3MgY2hlY2sgbGluZXMgNzI4MCB0aHJvdWdoIDczNDAuIEkgZXhwZWN0IHRvIGdldCBzb21lIHVzZWZ1bCBpbmZvcm1hdGlvbiBvbiB0aGUgdG9waWMgYXQgaGFuZCBieSB6b29taW5nIGluIG9uIHRoaXMgc2VjdGlvbi4gSSBhbSBpbnRlcmVzdGVkIHRvIHNlZSB3aGF0IHRoYXQgcGFydGljdWxhciBjb2RlIGlzIGRvaW5nIHdpdGhpbiB0aGUgZ3JlYXRlciBjb250ZXh0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSB3YW50IHRvIGJ1aWxkIGEgYmV0dGVyIHBpY3R1cmUgb2Ygd2hhdCBpcyBnb2luZyBvbiBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTgxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyODoyOS44ODk0NzgwNjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NsdWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MjgwOlxcdFxcbjcyODE6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCBcXHUwMDI2cGMuc2xhYnMsIHNsYWJfbGlzdCkge1xcbjcyODI6XFx0XFxuNzI4MzpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuNzI4NDpcXHRcXG43Mjg1OlxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZzbGFiLVxcdTAwM2VzbGFiX2xpc3QpO1xcbjcyODY6XFx0XFxuNzI4NzpcXHRcXHRcXHRvYmplY3QgPSBnZXRfZnJlZWxpc3Rfbm9mcmVlemUocywgc2xhYiwgXFx1MDAyNmNvdW50KTtcXG43Mjg4OlxcdFxcbjcyODk6XFx0XFx0XFx0d2hpbGUgKGNvdW50IFxcdTAwMjZcXHUwMDI2IHJlZmlsbGVkIFxcdTAwM2MgbWF4KSB7XFxuNzI5MDpcXHRcXHRcXHRcXHRwW3JlZmlsbGVkXSA9IG9iamVjdDtcXG43MjkxOlxcdFxcdFxcdFxcdG9iamVjdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpO1xcbjcyOTI6XFx0XFx0XFx0XFx0bWF5YmVfd2lwZV9vYmpfZnJlZXB0cihzLCBwW3JlZmlsbGVkXSk7XFxuNzI5MzpcXHRcXG43Mjk0OlxcdFxcdFxcdFxcdHJlZmlsbGVkKys7XFxuNzI5NTpcXHRcXHRcXHRcXHRjb3VudC0tO1xcbjcyOTY6XFx0XFx0XFx0fVxcbjcyOTc6XFx0XFxuNzI5ODpcXHRcXHRcXHQvKlxcbjcyOTk6XFx0XFx0XFx0ICogRnJlZWxpc3QgaGFkIG1vcmUgb2JqZWN0cyB0aGFuIHdlIGNhbiBhY2NvbW1vZGF0ZSwgd2UgbmVlZCB0b1xcbjczMDA6XFx0XFx0XFx0ICogZnJlZSB0aGVtIGJhY2suIEZpcnN0IHdlIHRyeSB0byBiZSBvcHRpbWlzdGljIGFuZCBhc3N1bWUgdGhlXFxuNzMwMTpcXHRcXHRcXHQgKiBzbGFiIGlzIHN0aWxsIGZ1bGwgc2luY2Ugd2UganVzdCBkZXRhY2hlZCBpdHMgZnJlZWxpc3QuXFxuNzMwMjpcXHRcXHRcXHQgKiBPdGhlcndpc2Ugd2UgbXVzdCBmaW5kIHRoZSB0YWlsIG9iamVjdC5cXG43MzAzOlxcdFxcdFxcdCAqL1xcbjczMDQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGNvdW50KSkge1xcbjczMDU6XFx0XFx0XFx0XFx0dm9pZCAqaGVhZCA9IG9iamVjdDtcXG43MzA2OlxcdFxcdFxcdFxcdHZvaWQgKnRhaWw7XFxuNzMwNzpcXHRcXG43MzA4OlxcdFxcdFxcdFxcdGlmIChfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzLCBzbGFiLCBoZWFkLCBjb3VudCkpXFxuNzMwOTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG43MzEwOlxcdFxcbjczMTE6XFx0XFx0XFx0XFx0ZG8ge1xcbjczMTI6XFx0XFx0XFx0XFx0XFx0dGFpbCA9IG9iamVjdDtcXG43MzEzOlxcdFxcdFxcdFxcdFxcdG9iamVjdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpO1xcbjczMTQ6XFx0XFx0XFx0XFx0fSB3aGlsZSAob2JqZWN0KTtcXG43MzE1OlxcdFxcdFxcdFxcdF9fc2xhYl9mcmVlKHMsIHNsYWIsIGhlYWQsIHRhaWwsIGNvdW50LCBfUkVUX0lQXyk7XFxuNzMxNjpcXHRcXHRcXHR9XFxuNzMxNzpcXHRcXG43MzE4OlxcdFxcdFxcdGlmIChyZWZpbGxlZCBcXHUwMDNlPSBtYXgpXFxuNzMxOTpcXHRcXHRcXHRcXHRicmVhaztcXG43MzIwOlxcdFxcdH1cXG43MzIxOlxcdFxcbjczMjI6XFx0XFx0aWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFxcdTAwMjZwYy5zbGFicykpKSB7XFxuNzMyMzpcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XFxuNzMyNDpcXHRcXG43MzI1OlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2xhYiwgXFx1MDAyNnBjLnNsYWJzLCBzbGFiX2xpc3QpXFxuNzMyNjpcXHRcXHRcXHRcXHRzZXRfbm9kZV9wYXJ0aWFsX3N0YXRlKG4sIHNsYWIpO1xcbjczMjc6XFx0XFxuNzMyODpcXHRcXHRcXHRsaXN0X3NwbGljZV90YWlsKFxcdTAwMjZwYy5zbGFicywgXFx1MDAyNm4tXFx1MDAzZXBhcnRpYWwpO1xcbjczMjk6XFx0XFxuNzMzMDpcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG43MzMxOlxcdFxcdH1cXG43MzMyOlxcdFxcbjczMzM6XFx0XFx0cmV0dXJuIHJlZmlsbGVkO1xcbjczMzQ6XFx0fVxcbjczMzU6XFx0XFxuNzMzNjpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG43MzM3OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnRcXG43MzM4OlxcdF9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxcbjczMzk6XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbWF4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyODoyOS44OTAyMTQ3MjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA3OTMzNTQ3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU0xVQiBGcmVlbGlzdCBSZXR1cm4gT3B0aW1pemF0aW9uIEFuYWx5c2lzKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIG9wdGltaXppbmcgdGhlIGZyZWVsaXN0IHJldHVybiBwYXRoIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIFNwZWNpZmljYWxseSwgaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KClgLCB3ZSd2ZSBpbnRyb2R1Y2VkIGEgbG9jayAoYG4tXHUwMDNlbGlzdF9sb2NrYCkgYXJvdW5kIHRoZSBjcml0aWNhbCBzZWN0aW9uIGludm9sdmluZyBgc2xhYl91cGRhdGVfZnJlZWxpc3QoKWAgYW5kIHRoZSBzdWJzZXF1ZW50IGBhZGRfcGFydGlhbCgpYCBjYWxsLiBQcmV2aW91c2x5LCB0aGlzIHdhcyBoYW5kbGVkIGF0IHRoZSBjYWxsZXIgaW4gYF9fcmVmaWxsX29iamVjdHNfbm9kZSgpYC4gVGhlIHVwZGF0ZSBhbHNvIHJlbW92ZXMgdGhlIGBsaXN0X2FkZGAgd2l0aGluIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBjb25zb2xpZGF0ZXMgdGhlIGxvY2sgYWNxdWlzaXRpb24gYW5kIHBhcnRpYWwgc2xhYiBhZGRpdGlvbiBsb2dpYy4gSW5zdGVhZCBvZiByZXR1cm5pbmcgdG8gdGhlIGNhbGxlciB0byBhZGQgaXQgdG8gdGhlIGBwYy5zbGFic2AgbGlzdCwgdGhlIHBhcnRpYWwgc2xhYiBhZGRpdGlvbiBpcyBoYW5kbGVkIGRpcmVjdGx5LiBUaGUgbG9jayBpcyBoZWxkIGR1cmluZyB0aGUgY3J1Y2lhbCB1cGRhdGUgYW5kIGFkZGl0aW9uLCBlbnN1cmluZyBhdG9taWNpdHkuXG5cbkZyb20gbXkgcGVyc3BlY3RpdmUsIGFzIGEgU0xVQiBleHBlcnQsIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBhbGxvY2F0b3IgaW50ZXJuYWxzOiBsb2NrIGFjcXVpc2l0aW9uLCBmcmVlbGlzdCBoYW5kbGluZywgYW5kIHRoZSBtYW5hZ2VtZW50IG9mIHBhcnRpYWwgc2xhYnMuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyBtYWludGFpbmluZyBkYXRhIGludGVncml0eSBhbmQgYXZvaWRpbmcgY29uY3VycmVuY3kgaXNzdWVzIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuXG5cbk15IGFuYWx5c2lzIGZvY3VzZXMgb24gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZG91YmxlIGFkZGl0aW9ucyB0byBsaXN0cywgYW5kIGdlbmVyYWwgbGlzdCBjb3JydXB0aW9uLiBUaGUgYWRkaXRpb24gb2YgdGhlIGxvY2sgaXMgY2xlYXJseSBhIG1vdmUgdG93YXJkIGluY3JlYXNlZCBjb25jdXJyZW5jeSBzYWZldHksIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBmcmVlbGlzdCBtYW5pcHVsYXRpb24uIEJ5IG1vdmluZyB0aGUgYGFkZF9wYXJ0aWFsYCBjYWxsIGludG8gdGhlIGNyaXRpY2FsIHNlY3Rpb24sIHdlIGFyZSBlbnN1cmluZyB0aGF0IHVwZGF0ZXMgdG8gdGhlIHBhcnRpYWwgc2xhYiBsaXN0cyBhcmUgYXRvbWljLlxuXG5HaXZlbiBteSBleHBlcmllbmNlLCBJIGRvIG5vdCBleHBlY3QgdGhpcyBwYXRjaCB0byBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29uZGl0aW9uYWwgbG9naWMsIGNyZWF0ZSB1bmluaXRpYWxpemVkIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBvciBoYXZlIGFueSByZWxhdGVkIGlzc3Vlcy4gVGhlIGBzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnNgIHZhcmlhYmxlcyBhcmUgYXNzaWduZWQgcHJvcGVybHkuIFRoZSBgZmxhZ3NgIHZhcmlhYmxlIGlzIGJlaW5nIGluaXRpYWxpemVkIGFzIHdlbGwuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYnV0IEtBU0FOIGFuZCBMT0NLREVQIGFyZS4gS0FTQU4gaXMgc3VpdGFibGUgZm9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gTE9DS0RFUCwgb24gdGhlIG90aGVyIGhhbmQsIGNhbiBoZWxwIHRvIGNhdGNoIGxvY2sgb3JkZXJpbmcgdmlvbGF0aW9ucyBvciBkZWFkbG9ja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MzgsIk91dHB1dFRva2VucyI6MjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI4OjQwLjY4MzU3Mjc4NloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgU0xVQiBhbGxvY2F0b3IgaW50ZXJuYWwgbG9ja2luZyBhbmQgcGFydGlhbCBsaXN0IG1hbmFnZW1lbnQgaW4gYG1tL3NsdWIuY2AgKGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgYW5kIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgKS4gU3BlY2lmaWNhbGx5LCBpdCBhY3F1aXJlcyB0aGUgbm9kZSBsaXN0X2xvY2sgYW5kIGFkZHMgdGhlIHNsYWIgdG8gdGhlIHBhcnRpYWwgbGlzdCBkaXJlY3RseSBpbiBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGluc3RlYWQgb2YgcmUtYWRkaW5nIGl0IHRvIHRoZSBsb2NhbCBgcGMuc2xhYnNgIGxpc3QgaW4gYF9fcmVmaWxsX29iamVjdHNfbm9kZWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBleGNsdXNpdmVseSBhZmZlY3QgU0xVQiBpbnRlcm5hbCBzdGF0ZSwgbG9ja2luZywgYW5kIGZyZWVsaXN0L3BhcnRpYWwgbGlzdCB0cmFja2luZy4gQW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIGxvY2sgb3JkZXIgaW52ZXJzaW9ucywgbGlzdCBjb3JydXB0aW9uLCBkb3VibGUtZnJlZSwgb3Igc2xhYiBtZXRhZGF0YSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgY2hlY2tzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkIGFjY2Vzc2VzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgU0xVQiBhbGxvY2F0b3IgaW50ZXJuYWwgbG9ja2luZyBhbmQgcGFydGlhbCBsaXN0IG1hbmFnZW1lbnQgaW4gYG1tL3NsdWIuY2AgKGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgYW5kIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgKS4gU3BlY2lmaWNhbGx5LCBpdCBhY3F1aXJlcyB0aGUgbm9kZSBsaXN0X2xvY2sgYW5kIGFkZHMgdGhlIHNsYWIgdG8gdGhlIHBhcnRpYWwgbGlzdCBkaXJlY3RseSBpbiBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGluc3RlYWQgb2YgcmUtYWRkaW5nIGl0IHRvIHRoZSBsb2NhbCBgcGMuc2xhYnNgIGxpc3QgaW4gYF9fcmVmaWxsX29iamVjdHNfbm9kZWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBleGNsdXNpdmVseSBhZmZlY3QgU0xVQiBpbnRlcm5hbCBzdGF0ZSwgbG9ja2luZywgYW5kIGZyZWVsaXN0L3BhcnRpYWwgbGlzdCB0cmFja2luZy4gQW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIGxvY2sgb3JkZXIgaW52ZXJzaW9ucywgbGlzdCBjb3JydXB0aW9uLCBkb3VibGUtZnJlZSwgb3Igc2xhYiBtZXRhZGF0YSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgY2hlY2tzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkIGFjY2Vzc2VzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4242m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 13:22:54 +0000 UTC FinishedAt: 2026-09-03 13:28:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLUB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLUB" ], "series_id": "b9ad02f1-4214-4707-89db-e2112cee4e67" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__slab_try_return_freelist", "__refill_objects_node", "refill_objects", "refill_sheaf", "kmem_cache_prefill_sheaf", "kmem_cache_refill_sheaf", "kmem_cache_return_sheaf" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMVUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdCYjMzQ7LAogICAgJiMzNDtfX3JlZmlsbF9vYmplY3RzX25vZGUmIzM0OywKICAgICYjMzQ7cmVmaWxsX29iamVjdHMmIzM0OywKICAgICYjMzQ7cmVmaWxsX3NoZWFmJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZiYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX3JlZmlsbF9zaGVhZiYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX3JldHVybl9zaGVhZiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFNMVUIgYWxsb2NhdG9yIGludGVybmFsIGxvY2tpbmcgYW5kIHBhcnRpYWwgbGlzdCBtYW5hZ2VtZW50IGluIGBtbS9zbHViLmNgIChgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYCkuIFNwZWNpZmljYWxseSwgaXQgYWNxdWlyZXMgdGhlIG5vZGUgbGlzdF9sb2NrIGFuZCBhZGRzIHRoZSBzbGFiIHRvIHRoZSBwYXJ0aWFsIGxpc3QgZGlyZWN0bHkgaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBpbnN0ZWFkIG9mIHJlLWFkZGluZyBpdCB0byB0aGUgbG9jYWwgYHBjLnNsYWJzYCBsaXN0IGluIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgLlxuXG5UaGVzZSBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IGFmZmVjdCBTTFVCIGludGVybmFsIHN0YXRlLCBsb2NraW5nLCBhbmQgZnJlZWxpc3QvcGFydGlhbCBsaXN0IHRyYWNraW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKHN1Y2ggYXMgbG9jayBvcmRlciBpbnZlcnNpb25zLCBsaXN0IGNvcnJ1cHRpb24sIGRvdWJsZS1mcmVlLCBvciBzbGFiIG1ldGFkYXRhIGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBjaGVja3MuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGQgYWNjZXNzZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZyZWVsaXN0IHJldHVybiBhbmQgcGFydGlhbCBzbGFiIGxpc3QgbWFuYWdlbWVudCBsb2dpYyB1bmRlciBuLVx1MDAzZWxpc3RfbG9jayBpbiBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdCgpIGFuZCBfX3JlZmlsbF9vYmplY3RzX25vZGUoKSBpbiB0aGUgU0xVQiBhbGxvY2F0b3IgKG1tL3NsdWIuYykuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBTTFVCIGJ1bGsgYWxsb2NhdGlvbiBhbmQgc2hlYWYgcmVmaWxsaW5nIHBhdGhzLCB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgY3JpdGljYWwgZm9yIG1lbW9yeSBzYWZldHkgYW5kIGxvY2sgY29ycmVjdG5lc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MThjY2JhZmQ1OWJiYzY3NTc1ZWYwNDdkMjRmNDZkZDdkZjBlOTQzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMzoyNjozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcbmluZGV4IGY5YjU2Y2I0MzllNzAuLjVjYmJhY2I4ZWUzMmYgMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsdWIuY1xuQEAgLTU2ODQsNiAmIzQzOzU2ODQsOCBAQCBzdGF0aWMgYm9vbCBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHRcdFx0XHQgICAgICAgdm9pZCAqaGVhZCwgaW50IGNudClcbiB7XG4gXHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7XG4mIzQzO1x0c3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0b2xkLmZyZWVsaXN0ID0gc2xhYi1cdTAwM2VmcmVlbGlzdDtcbiBcdG9sZC5jb3VudGVycyA9IHNsYWItXHUwMDNlY291bnRlcnM7XG5AQCAtNTY5NSw5ICYjNDM7NTY5NywxNiBAQCBzdGF0aWMgYm9vbCBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHRuZXcuY291bnRlcnMgPSBvbGQuY291bnRlcnM7XG4gXHRuZXcuaW51c2UgLT0gY250O1xuIFxuLVx0aWYgKCFzbGFiX3VwZGF0ZV9mcmVlbGlzdChzLCBzbGFiLCBcdTAwMjZvbGQsIFx1MDAyNm5ldywgXCYjMzQ7X19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RcJiMzNDspKVxuJiM0MztcdG4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzbGFiX3VwZGF0ZV9mcmVlbGlzdChzLCBzbGFiLCBcdTAwMjZvbGQsIFx1MDAyNm5ldywgXCYjMzQ7X19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RcJiMzNDspKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4gXG4mIzQzO1x0YWRkX3BhcnRpYWwobiwgc2xhYiwgQUREX1RPX1RBSUwpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbkBAIC03Mjk2LDEwICYjNDM7NzMwNSw4IEBAIF9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pXG4gXHRcdFx0dm9pZCAqaGVhZCA9IG9iamVjdDtcbiBcdFx0XHR2b2lkICp0YWlsO1xuIFxuLVx0XHRcdGlmIChfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzLCBzbGFiLCBoZWFkLCBjb3VudCkpIHtcbi1cdFx0XHRcdGxpc3RfYWRkKFx1MDAyNnNsYWItXHUwMDNlc2xhYl9saXN0LCBcdTAwMjZwYy5zbGFicyk7XG4mIzQzO1x0XHRcdGlmIChfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzLCBzbGFiLCBoZWFkLCBjb3VudCkpXG4gXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4gXG4gXHRcdFx0ZG8ge1xuIFx0XHRcdFx0dGFpbCA9IG9iamVjdDtcbkBAIC03MzEyLDcgJiM0Mzs3MzE5LDcgQEAgX19yZWZpbGxfb2JqZWN0c19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWlcbiBcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmICghbGlzdF9lbXB0eShcdTAwMjZwYy5zbGFicykpIHtcbiYjNDM7XHRpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoXHUwMDI2cGMuc2xhYnMpKSkge1xuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuIFxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsYWIsIFx1MDAyNnBjLnNsYWJzLCBzbGFiX2xpc3QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0xVQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0JiMzNDssCiAgICAmIzM0O19fcmVmaWxsX29iamVjdHNfbm9kZSYjMzQ7LAogICAgJiMzNDtyZWZpbGxfb2JqZWN0cyYjMzQ7LAogICAgJiMzNDtyZWZpbGxfc2hlYWYmIzM0OywKICAgICYjMzQ7a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfcmVmaWxsX3NoZWFmJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfcmV0dXJuX3NoZWFmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmcmVlbGlzdCByZXR1cm4gYW5kIHBhcnRpYWwgc2xhYiBsaXN0IG1hbmFnZW1lbnQgbG9naWMgdW5kZXIgbi1cdTAwM2VsaXN0X2xvY2sgaW4gX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3QoKSBhbmQgX19yZWZpbGxfb2JqZWN0c19ub2RlKCkgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIChtbS9zbHViLmMpLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgU0xVQiBidWxrIGFsbG9jYXRpb24gYW5kIHNoZWFmIHJlZmlsbGluZyBwYXRocywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGNyaXRpY2FsIGZvciBtZW1vcnkgc2FmZXR5IGFuZCBsb2NrIGNvcnJlY3RuZXNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDE4Y2NiYWZkNTliYmM2NzU3NWVmMDQ3ZDI0ZjQ2ZGQ3ZGYwZTk0MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTM6MjY6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggZjliNTZjYjQzOWU3MC4uNWNiYmFjYjhlZTMyZiAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsdWIuYwpAQCAtNTY4NCw2ICYjNDM7NTY4NCw4IEBAIHN0YXRpYyBib29sIF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwKIAkJCQkgICAgICAgdm9pZCAqaGVhZCwgaW50IGNudCkKIHsKIAlzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7CiYjNDM7CXN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm47CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlvbGQuZnJlZWxpc3QgPSBzbGFiLSZndDtmcmVlbGlzdDsKIAlvbGQuY291bnRlcnMgPSBzbGFiLSZndDtjb3VudGVyczsKQEAgLTU2OTUsOSAmIzQzOzU2OTcsMTYgQEAgc3RhdGljIGJvb2wgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLAogCW5ldy5jb3VudGVycyA9IG9sZC5jb3VudGVyczsKIAluZXcuaW51c2UgLT0gY250OwogCi0JaWYgKCFzbGFiX3VwZGF0ZV9mcmVlbGlzdChzLCBzbGFiLCAmYW1wO29sZCwgJmFtcDtuZXcsICYjMzQ7X19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3QmIzM0OykpCiYjNDM7CW4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWlmICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgJmFtcDtvbGQsICZhbXA7bmV3LCAmIzM0O19fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0JiMzNDspKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiAJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCiYjNDM7CWFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwogCXJldHVybiB0cnVlOwogfQogCkBAIC03Mjk2LDEwICYjNDM7NzMwNSw4IEBAIF9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pCiAJCQl2b2lkICpoZWFkID0gb2JqZWN0OwogCQkJdm9pZCAqdGFpbDsKIAotCQkJaWYgKF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHMsIHNsYWIsIGhlYWQsIGNvdW50KSkgewotCQkJCWxpc3RfYWRkKCZhbXA7c2xhYi0mZ3Q7c2xhYl9saXN0LCAmYW1wO3BjLnNsYWJzKTsKJiM0MzsJCQlpZiAoX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qocywgc2xhYiwgaGVhZCwgY291bnQpKQogCQkJCWJyZWFrOwotCQkJfQogCiAJCQlkbyB7CiAJCQkJdGFpbCA9IG9iamVjdDsKQEAgLTczMTIsNyAmIzQzOzczMTksNyBAQCBfX3JlZmlsbF9vYmplY3RzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaQogCQkJYnJlYWs7CiAJfQogCi0JaWYgKCFsaXN0X2VtcHR5KCZhbXA7cGMuc2xhYnMpKSB7CiYjNDM7CWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmYW1wO3BjLnNsYWJzKSkpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsYWIsICZhbXA7cGMuc2xhYnMsIHNsYWJfbGlzdCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgc2x1Yi5jIFBhdGNoKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgbW0vc2x1Yi5jYCBwYXRjaC4gTXkgaW5pdGlhbCBtb3ZlIGlzIGFsd2F5cyB0byBnZXQgYSBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZC4gSSYjMzk7bGwgcmVhY2ggZm9yIGVpdGhlciBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiB0aGUgZGlmZiBpdHNlbGYsIG9yIG1heWJlIGZpcmUgdXAgYGdyZXBwZXJgIGlmIEkganVzdCB3YW50IHRvIHF1aWNrbHkgc3BvdCB0aGUga2V5d29yZHMuIFRoYXQmIzM5O2xsIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgY29udGV4dC4KCk9uY2UgSSBoYXZlIGEgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgY2hhbmdlcywgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzLiBJJiMzOTtsbCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gdGhlIGFyZWEgYXJvdW5kIGxpbmVzIDU2ODQgYW5kIDcyOTYgd2l0aGluIGBtbS9zbHViLmNgLiBUaG9zZSBsaW5lIG51bWJlcnMgYXJlIG9mdGVuIGdvb2QgaW5kaWNhdG9ycyBvZiBzaWduaWZpY2FudCBzdHJ1Y3R1cmFsIGNoYW5nZXMsIG9yIGNvcmUgZnVuY3Rpb24gY2FsbHMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1Njc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU2NzU6XHRcbjU2NzY6XHQvKlxuNTY3NzpcdCAqIFRyeSByZXR1cm5pbmcgKHJlbWFpbmRlciBvZikgdGhlIGZyZWVsaXN0IHRoYXQgd2UganVzdCBkZXRhY2hlZCBmcm9tIHRoZVxuNTY3ODpcdCAqIHNsYWIuICBPcHRpbWlzdGljYWxseSBhc3N1bWUgdGhlIHNsYWIgaXMgc3RpbGwgZnVsbCwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gZmluZFxuNTY3OTpcdCAqIHRoZSB0YWlsIG9mIHRoZSBkZXRhY2hlZCBmcmVlbGlzdC5cbjU2ODA6XHQgKlxuNTY4MTpcdCAqIEZhaWwgaWYgdGhlIHNsYWIgaXNuJiMzOTt0IGZ1bGwgYW55bW9yZSBkdWUgdG8gYSBjb25jdXJyZW50IGZyZWUuXG41NjgyOlx0ICovXG41NjgzOlx0c3RhdGljIGJvb2wgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuNTY4NDpcdFx0XHRcdFx0ICAgICAgIHZvaWQgKmhlYWQsIGludCBjbnQpXG41Njg1Olx0e1xuNTY4NjpcdFx0c3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIG9sZCwgbmV3O1xuNTY4NzpcdFx0c3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbjtcbjU2ODg6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG41Njg5Olx0XG41NjkwOlx0XHRvbGQuZnJlZWxpc3QgPSBzbGFiLVx1MDAzZWZyZWVsaXN0O1xuNTY5MTpcdFx0b2xkLmNvdW50ZXJzID0gc2xhYi1cdTAwM2Vjb3VudGVycztcbjU2OTI6XHRcbjU2OTM6XHRcdGlmIChvbGQuZnJlZWxpc3QpXG41Njk0Olx0XHRcdHJldHVybiBmYWxzZTtcbjU2OTU6XHRcbjU2OTY6XHRcdG5ldy5mcmVlbGlzdCA9IGhlYWQ7XG41Njk3Olx0XHRuZXcuY291bnRlcnMgPSBvbGQuY291bnRlcnM7XG41Njk4Olx0XHRuZXcuaW51c2UgLT0gY250O1xuNTY5OTpcdFxuNTcwMDpcdFx0biA9IGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKTtcbjU3MDE6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG41NzAyOlx0XG41NzAzOlx0XHRpZiAoIXNsYWJfdXBkYXRlX2ZyZWVsaXN0KHMsIHNsYWIsIFx1MDAyNm9sZCwgXHUwMDI2bmV3LCBcJiMzNDtfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFwmIzM0OykpIHtcbjU3MDQ6XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuNTcwNTpcdFx0XHRyZXR1cm4gZmFsc2U7XG41NzA2Olx0XHR9XG41NzA3Olx0XG41NzA4Olx0XHRhZGRfcGFydGlhbChuLCBzbGFiLCBBRERfVE9fVEFJTCk7XG41NzA5Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG41NzEwOlx0XHRyZXR1cm4gdHJ1ZTtcbjU3MTE6XHR9XG41NzEyOlx0XG41NzEzOlx0LypcbjU3MTQ6XHQgKiBTbG93IHBhdGggaGFuZGxpbmcuIFRoaXMgbWF5IHN0aWxsIGJlIGNhbGxlZCBmcmVxdWVudGx5IHNpbmNlIG9iamVjdHNcbjU3MTU6XHQgKiBoYXZlIGEgbG9uZ2VyIGxpZmV0aW1lIHRoYW4gdGhlIGNwdSBzbGFicyBpbiBtb3N0IHByb2Nlc3NpbmcgbG9hZHMuXG41NzE2Olx0ICpcbjU3MTc6XHQgKiBTbyB3ZSBzdGlsbCBhdHRlbXB0IHRvIHJlZHVjZSBjYWNoZSBsaW5lIHVzYWdlLiBKdXN0IHRha2UgdGhlIHNsYWJcbjU3MTg6XHQgKiBsb2NrIGFuZCBmcmVlIHRoZSBpdGVtLiBJZiB0aGVyZSBpcyBubyBhZGRpdGlvbmFsIHBhcnRpYWwgc2xhYlxuNTcxOTpcdCAqIGhhbmRsaW5nIHJlcXVpcmVkIHRoZW4gd2UgY2FuIHJldHVybiBpbW1lZGlhdGVseS5cbjU3MjA6XHQgKi9cbjU3MjE6XHRzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG41NzIyOlx0XHRcdFx0dm9pZCAqaGVhZCwgdm9pZCAqdGFpbCwgaW50IGNudCxcbjU3MjM6XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIpXG41NzI0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQwOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqUGVlcmluZyBpbnRvIHRoZSBTbHViIEFsbG9jYXRvcioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbW0vc2x1Yi5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWltaW5nIGZvciBhcm91bmQgbGluZSA3MjkwLiBJIGtub3cgdGhpcyBjb2RlIHByZXR0eSB3ZWxsLCBzbyBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcm91dGluZXMgb3IgcGVyaGFwcyBzb21lIGNyaXRpY2FsIGxvY2tpbmcgbWVjaGFuaXNtIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgbGluZSB0aWVzIGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIG9iamVjdCBtYW5hZ2VtZW50LiBXaGF0IHNwZWNpZmljIGFzcGVjdHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYXJlIGJlaW5nIGFkZHJlc3NlZCBoZXJlPyBJcyBpdCByZWxhdGVkIHRvIGNhY2hlIGxpbmUgYWxpZ25tZW50LCBOVU1BIG5vZGUgaGFuZGxpbmcsIG9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcyNzA6XHRcdHVuc2lnbmVkIGludCByZWZpbGxlZCA9IDA7XG43MjcxOlx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuNzI3MjpcdFx0dm9pZCAqb2JqZWN0O1xuNzI3MzpcdFxuNzI3NDpcdFx0cGMuZmxhZ3MgPSBnZnA7XG43Mjc1Olx0XHRwYy5taW5fb2JqZWN0cyA9IG1pbjtcbjcyNzY6XHRcdHBjLm1heF9vYmplY3RzID0gbWF4O1xuNzI3NzpcdFxuNzI3ODpcdFx0aWYgKCFnZXRfcGFydGlhbF9ub2RlX2J1bGsocywgbiwgXHUwMDI2cGMsIGFsbG93X3NwaW4pKVxuNzI3OTpcdFx0XHRyZXR1cm4gMDtcbjcyODA6XHRcbjcyODE6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCBzbGFiMiwgXHUwMDI2cGMuc2xhYnMsIHNsYWJfbGlzdCkge1xuNzI4MjpcdFxuNzI4MzpcdFx0XHR1bnNpZ25lZCBpbnQgY291bnQ7XG43Mjg0Olx0XG43Mjg1Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnNsYWItXHUwMDNlc2xhYl9saXN0KTtcbjcyODY6XHRcbjcyODc6XHRcdFx0b2JqZWN0ID0gZ2V0X2ZyZWVsaXN0X25vZnJlZXplKHMsIHNsYWIsIFx1MDAyNmNvdW50KTtcbjcyODg6XHRcbjcyODk6XHRcdFx0d2hpbGUgKGNvdW50IFx1MDAyNlx1MDAyNiByZWZpbGxlZCBcdTAwM2MgbWF4KSB7XG43MjkwOlx0XHRcdFx0cFtyZWZpbGxlZF0gPSBvYmplY3Q7XG43MjkxOlx0XHRcdFx0b2JqZWN0ID0gZ2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCk7XG43MjkyOlx0XHRcdFx0bWF5YmVfd2lwZV9vYmpfZnJlZXB0cihzLCBwW3JlZmlsbGVkXSk7XG43MjkzOlx0XG43Mjk0Olx0XHRcdFx0cmVmaWxsZWQmIzQzOyYjNDM7O1xuNzI5NTpcdFx0XHRcdGNvdW50LS07XG43Mjk2Olx0XHRcdH1cbjcyOTc6XHRcbjcyOTg6XHRcdFx0LypcbjcyOTk6XHRcdFx0ICogRnJlZWxpc3QgaGFkIG1vcmUgb2JqZWN0cyB0aGFuIHdlIGNhbiBhY2NvbW1vZGF0ZSwgd2UgbmVlZCB0b1xuNzMwMDpcdFx0XHQgKiBmcmVlIHRoZW0gYmFjay4gRmlyc3Qgd2UgdHJ5IHRvIGJlIG9wdGltaXN0aWMgYW5kIGFzc3VtZSB0aGVcbjczMDE6XHRcdFx0ICogc2xhYiBpcyBzdGlsbCBmdWxsIHNpbmNlIHdlIGp1c3QgZGV0YWNoZWQgaXRzIGZyZWVsaXN0LlxuNzMwMjpcdFx0XHQgKiBPdGhlcndpc2Ugd2UgbXVzdCBmaW5kIHRoZSB0YWlsIG9iamVjdC5cbjczMDM6XHRcdFx0ICovXG43MzA0Olx0XHRcdGlmICh1bmxpa2VseShjb3VudCkpIHtcbjczMDU6XHRcdFx0XHR2b2lkICpoZWFkID0gb2JqZWN0O1xuNzMwNjpcdFx0XHRcdHZvaWQgKnRhaWw7XG43MzA3Olx0XG43MzA4Olx0XHRcdFx0aWYgKF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHMsIHNsYWIsIGhlYWQsIGNvdW50KSlcbjczMDk6XHRcdFx0XHRcdGJyZWFrO1xuNzMxMDpcdFxuNzMxMTpcdFx0XHRcdGRvIHtcbjczMTI6XHRcdFx0XHRcdHRhaWwgPSBvYmplY3Q7XG43MzEzOlx0XHRcdFx0XHRvYmplY3QgPSBnZXRfZnJlZXBvaW50ZXIocywgb2JqZWN0KTtcbjczMTQ6XHRcdFx0XHR9IHdoaWxlIChvYmplY3QpO1xuNzMxNTpcdFx0XHRcdF9fc2xhYl9mcmVlKHMsIHNsYWIsIGhlYWQsIHRhaWwsIGNvdW50LCBfUkVUX0lQXyk7XG43MzE2Olx0XHRcdH1cbjczMTc6XHRcbjczMTg6XHRcdFx0aWYgKHJlZmlsbGVkIFx1MDAzZT0gbWF4KVxuNzMxOTpcdFx0XHRcdGJyZWFrO1xuNzMyMDpcdFx0fVxuNzMyMTpcdFxuNzMyMjpcdFx0aWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFx1MDAyNnBjLnNsYWJzKSkpIHtcbjczMjM6XHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbjczMjQ6XHRcbjczMjU6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzbGFiLCBcdTAwMjZwYy5zbGFicywgc2xhYl9saXN0KVxuNzMyNjpcdFx0XHRcdHNldF9ub2RlX3BhcnRpYWxfc3RhdGUobiwgc2xhYik7XG43MzI3Olx0XG43MzI4Olx0XHRcdGxpc3Rfc3BsaWNlX3RhaWwoXHUwMDI2cGMuc2xhYnMsIFx1MDAyNm4tXHUwMDNlcGFydGlhbCk7XG43MzI5Olx0XG43MzMwOlx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbjczMzE6XHRcdH1cbjczMzI6XHRcbjczMzM6XHRcdHJldHVybiByZWZpbGxlZDtcbjczMzQ6XHR9XG43MzM1Olx0XG43MzM2Olx0I2lmZGVmIENPTkZJR19OVU1BXG43MzM3Olx0c3RhdGljIHVuc2lnbmVkIGludFxuNzMzODpcdF9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxuNzMzOTpcdFx0XHQgICAgIHVuc2lnbmVkIGludCBtYXgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU4MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIFJlZmlsbCBNZWNoYW5pc20qKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGVzZSByZWZpbGwgZnVuY3Rpb25zIOKAkyBgX19yZWZpbGxfb2JqZWN0c19ub2RlYCBhbmQgYF9fcmVmaWxsX29iamVjdHNfYW55YC4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUgZGF0YSBmbG93LCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcy4gVGhlIGJlc3QgYXBwcm9hY2ggaGVyZSBpcyBnb2luZyB0byBiZSB0cmFjaW5nIHRoZSBjYWxscy4gSSYjMzk7bGwgZ2V0IGEgbGlzdCBvZiBhbGwgdGhlIHBsYWNlcyBpbiB0aGUgY29kZWJhc2UgdGhhdCB1c2UgdGhlc2UgZnVuY3Rpb25zLiBBIGBncmVwYCBzZWFyY2ggaXMgdGhlIG9idmlvdXMgc29sdXRpb24gdG8gZmluZCBhbGwgaW5zdGFuY2VzIG9mIHRob3NlIGZ1bmN0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIG1hcCBvZiB3aGVyZSB0aGVzZSBhcmUgdXNlZCBhbmQgd2hhdCYjMzk7cyBsZWFkaW5nIHRvIHRoZWlyIGV4ZWN1dGlvbi4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHdob2xlIHBpY3R1cmUgYW5kIGFueSBwb3NzaWJsZSBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3JlZmlsbF9vYmplY3RzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz03MjYzPXN0YXRpYyB1bnNpZ25lZCBpbnRcbm1tL3NsdWIuYzo3MjY0Ol9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbm1tL3NsdWIuYy03MjY1LVx0XHQgICAgICB1bnNpZ25lZCBpbnQgbWF4LCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxuLS1cbm1tL3NsdWIuYz03MzM3PXN0YXRpYyB1bnNpZ25lZCBpbnRcbm1tL3NsdWIuYzo3MzM4Ol9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxubW0vc2x1Yi5jLTczMzktXHRcdCAgICAgdW5zaWduZWQgaW50IG1heClcbi0tXG5tbS9zbHViLmMtNzM2NS1cbm1tL3NsdWIuYzo3MzY2Olx0XHRcdHIgPSBfX3JlZmlsbF9vYmplY3RzX25vZGUocywgcCwgZ2ZwLCBtaW4sIG1heCwgbixcbm1tL3NsdWIuYy03MzY3LVx0XHRcdFx0XHRcdCAgLyogYWxsb3dfc3BpbiA9ICovIGZhbHNlKTtcbi0tXG5tbS9zbHViLmM9NzM4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxubW0vc2x1Yi5jOjczODk6X19yZWZpbGxfb2JqZWN0c19hbnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXG5tbS9zbHViLmMtNzM5MC1cdFx0ICAgICB1bnNpZ25lZCBpbnQgbWF4KVxuLS1cbm1tL3NsdWIuYz03Mzk3PXJlZmlsbF9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxuLS1cbm1tL3NsdWIuYy03NDAzLVxubW0vc2x1Yi5jOjc0MDQ6XHRyZWZpbGxlZCA9IF9fcmVmaWxsX29iamVjdHNfbm9kZShzLCBwLCBnZnAsIG1pbiwgbWF4LFxubW0vc2x1Yi5jLTc0MDUtXHRcdFx0XHRcdCBnZXRfbm9kZShzLCBsb2NhbF9ub2RlKSxcbi0tXG5tbS9zbHViLmMtNzQwOS1cbm1tL3NsdWIuYzo3NDEwOlx0cmVmaWxsZWQgJiM0Mzs9IF9fcmVmaWxsX29iamVjdHNfYW55KHMsIHAgJiM0MzsgcmVmaWxsZWQsIGdmcCwgbWluIC0gcmVmaWxsZWQsXG5tbS9zbHViLmMtNzQxMS1cdFx0XHRcdFx0IG1heCAtIHJlZmlsbGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzI3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcywgdGhpbmtpbmcgYXMgdGhlIGNvZGUgaXRzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXJzIG9mIGByZWZpbGxfb2JqZWN0c2AqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGByZWZpbGxfb2JqZWN0c2AgaXMgYmVpbmcgdXNlZCwgb3IgbW9yZSBzcGVjaWZpY2FsbHksICp3aG8qIGlzIGNhbGxpbmcgaXQuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUsIGFuZCBkaWFnbm9zaW5nIG9yIG1vZGlmeWluZyBpdC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uIHRvIGlkZW50aWZ5IGl0cyBkZXBlbmRlbmNpZXMgYW5kIHRoZSBhcmVhcyBvZiB0aGUgc3lzdGVtIGl0IGltcGFjdHMuIEtub3dpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBjcml0aWNhbCBjb250ZXh0IG9uIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBvZiBgcmVmaWxsX29iamVjdHNgLCBhbmQgbGlrZWx5IGV4cGxhaW4gdGhlIGRhdGEgaXQgcmVxdWlyZXMgb3IgcHJvZHVjZXMuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZW50cnkgcG9pbnRzIHRvIGZ1bGx5IGNvbXByZWhlbmQgaXRzIGZ1bmN0aW9uLiBXaGF0IGNvZGUgcGF0aCBpcyB0aGlzIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVmaWxsX29iamVjdHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTI4NzI9c3RhdGljIHVuc2lnbmVkIGludFxubW0vc2x1Yi5jOjI4NzM6cmVmaWxsX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXG5tbS9zbHViLmMtMjg3NC1cdCAgICAgICB1bnNpZ25lZCBpbnQgbWF4KTtcbi0tXG5tbS9zbHViLmM9Mjg3Nj1zdGF0aWMgaW50IHJlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLFxuLS1cbm1tL3NsdWIuYy0yODg0LVxubW0vc2x1Yi5jOjI4ODU6XHRmaWxsZWQgPSByZWZpbGxfb2JqZWN0cyhzLCBcdTAwMjZzaGVhZi1cdTAwM2VvYmplY3RzW3NoZWFmLVx1MDAzZXNpemVdLCBnZnAsIHRvX2ZpbGwsXG5tbS9zbHViLmMtMjg4Ni1cdFx0XHRcdHRvX2ZpbGwpO1xuLS1cbm1tL3NsdWIuYz03MjYzPXN0YXRpYyB1bnNpZ25lZCBpbnRcbm1tL3NsdWIuYzo3MjY0Ol9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbm1tL3NsdWIuYy03MjY1LVx0XHQgICAgICB1bnNpZ25lZCBpbnQgbWF4LCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxuLS1cbm1tL3NsdWIuYz03MzM3PXN0YXRpYyB1bnNpZ25lZCBpbnRcbm1tL3NsdWIuYzo3MzM4Ol9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxubW0vc2x1Yi5jLTczMzktXHRcdCAgICAgdW5zaWduZWQgaW50IG1heClcbi0tXG5tbS9zbHViLmMtNzM2NS1cbm1tL3NsdWIuYzo3MzY2Olx0XHRcdHIgPSBfX3JlZmlsbF9vYmplY3RzX25vZGUocywgcCwgZ2ZwLCBtaW4sIG1heCwgbixcbm1tL3NsdWIuYy03MzY3LVx0XHRcdFx0XHRcdCAgLyogYWxsb3dfc3BpbiA9ICovIGZhbHNlKTtcbi0tXG5tbS9zbHViLmM9NzM4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxubW0vc2x1Yi5jOjczODk6X19yZWZpbGxfb2JqZWN0c19hbnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXG5tbS9zbHViLmMtNzM5MC1cdFx0ICAgICB1bnNpZ25lZCBpbnQgbWF4KVxuLS1cbm1tL3NsdWIuYz03Mzk2PXN0YXRpYyB1bnNpZ25lZCBpbnRcbm1tL3NsdWIuYzo3Mzk3OnJlZmlsbF9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxubW0vc2x1Yi5jLTczOTgtXHQgICAgICAgdW5zaWduZWQgaW50IG1heClcbi0tXG5tbS9zbHViLmMtNzQwMy1cbm1tL3NsdWIuYzo3NDA0Olx0cmVmaWxsZWQgPSBfX3JlZmlsbF9vYmplY3RzX25vZGUocywgcCwgZ2ZwLCBtaW4sIG1heCxcbm1tL3NsdWIuYy03NDA1LVx0XHRcdFx0XHQgZ2V0X25vZGUocywgbG9jYWxfbm9kZSksXG4tLVxubW0vc2x1Yi5jLTc0MDktXG5tbS9zbHViLmM6NzQxMDpcdHJlZmlsbGVkICYjNDM7PSBfX3JlZmlsbF9vYmplY3RzX2FueShzLCBwICYjNDM7IHJlZmlsbGVkLCBnZnAsIG1pbiAtIHJlZmlsbGVkLFxubW0vc2x1Yi5jLTc0MTEtXHRcdFx0XHRcdCBtYXggLSByZWZpbGxlZCk7XG4tLVxubW0vc2x1Yi5jPTc0MzM9c3RhdGljIGJvb2wgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy03NDUyLVx0fSBlbHNlIHtcbm1tL3NsdWIuYzo3NDUzOlx0XHRpID0gcmVmaWxsX29iamVjdHMocywgcCwgZmxhZ3MsIHNpemUsIHNpemUpO1xubW0vc2x1Yi5jLTc0NTQtXHRcdGlmIChpIFx1MDAzYyBzaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzkzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFNMVUIgc3BlY2lmaWNhbGx5OgoKKipBbmFseXppbmcgU0xVQiBTaGVhZiBBbGxvY2F0aW9uIGFuZCBGcmVlbGlzdCBSZXR1cm4gTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtbS9zbHViLmNgIOKAkyB0aGF0IHRlbGxzIG1lIHJpZ2h0IGF3YXkgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBTTFVCJiMzOTtzIGludGVybmFsIHdvcmtpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2hlYWYgYWxsb2NhdGlvbiwgYnVsayBhbGxvY2F0aW9uLCBhbmQgZnJlZWxpc3QgcmV0dXJuIGxvZ2ljIGhlcmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byBob3cgYF9fa21lbV9jYWNoZV9hbGxvY19idWxrYCB3b3JrcywgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBzaGVhZiBjYWNoaW5nIGlzIGxpa2VseSBoYW5kbGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGF0IGZ1bmN0aW9uLCBJIG5lZWQgYSBiaWdnZXIgcGljdHVyZSB2aWV3LiBJIHNob3VsZCB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHQsIGhvdyBga21lbV9jYWNoZV9hbGxvY19idWxrYCBhbmQgdGhlIHNoZWFmIGNhY2hpbmcgaXMgdXNlZCBtb3JlIGJyb2FkbHkuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsZXJzIG9mIGByZWZpbGxfc2hlYWZgIG9yIGBrbWVtX2NhY2hlX2FsbG9jX2J1bGtgIGluc3RlYWQsIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVmaWxsX3NoZWFmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2xhYi5oPTkyMD1zdHJ1Y3Qgc2xhYl9zaGVhZiAqXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo5MjE6a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKTtcbmluY2x1ZGUvbGludXgvc2xhYi5oLTkyMi1cbmluY2x1ZGUvbGludXgvc2xhYi5oOjkyMzppbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTkyNC1cdFx0c3RydWN0IHNsYWJfc2hlYWYgKipzaGVhZnAsIHVuc2lnbmVkIGludCBzaXplKTtcbi0tXG5saWIvbWFwbGVfdHJlZS5jPTE1Mj1zdGF0aWMgc3RydWN0IHNsYWJfc2hlYWYgKm10X2dldF9zaGVhZihnZnBfdCBnZnAsIGludCBjb3VudClcbmxpYi9tYXBsZV90cmVlLmMtMTUzLXtcbmxpYi9tYXBsZV90cmVlLmM6MTU0Olx0cmV0dXJuIGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihtYXBsZV9ub2RlX2NhY2hlLCBnZnAsIGNvdW50KTtcbmxpYi9tYXBsZV90cmVlLmMtMTU1LX1cbmxpYi9tYXBsZV90cmVlLmMtMTU2LVxubGliL21hcGxlX3RyZWUuYzoxNTc6c3RhdGljIGludCBtdF9yZWZpbGxfc2hlYWYoZ2ZwX3QgZ2ZwLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqKnNoZWFmLFxubGliL21hcGxlX3RyZWUuYy0xNTgtXHRcdHVuc2lnbmVkIGludCBzaXplKVxubGliL21hcGxlX3RyZWUuYy0xNTkte1xubGliL21hcGxlX3RyZWUuYzoxNjA6XHRyZXR1cm4ga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYobWFwbGVfbm9kZV9jYWNoZSwgZ2ZwLCBzaGVhZiwgc2l6ZSk7XG5saWIvbWFwbGVfdHJlZS5jLTE2MS19XG4tLVxubGliL21hcGxlX3RyZWUuYz0xMDc0PXN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfYWxsb2Nfbm9kZXMoc3RydWN0IG1hX3N0YXRlICptYXMsIGdmcF90IGdmcClcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTExMDgtXG5saWIvbWFwbGVfdHJlZS5jOjExMDk6XHRcdGlmIChtdF9yZWZpbGxfc2hlYWYoZ2ZwLCBcdTAwMjZtYXMtXHUwMDNlc2hlYWYsIHJlZmlsbCkpXG5saWIvbWFwbGVfdHJlZS5jLTExMTAtXHRcdFx0Z290byBlcnJvcjtcbi0tXG5tbS9zbHViLmM9Mjg3Mz1yZWZpbGxfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbi0tXG5tbS9zbHViLmMtMjg3NS1cbm1tL3NsdWIuYzoyODc2OnN0YXRpYyBpbnQgcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsXG5tbS9zbHViLmMtMjg3Ny1cdFx0XHQgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL3NsdWIuYz00NzE0PV9fcGNzX3JlcGxhY2VfZW1wdHlfbWFpbihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcyxcbi0tXG5tbS9zbHViLmMtNDc3My1cbm1tL3NsdWIuYzo0Nzc0Olx0aWYgKHJlZmlsbF9zaGVhZihzLCBlbXB0eSwgZ2ZwIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTikpIHtcbm1tL3NsdWIuYy00Nzc1LVx0XHQvKlxuLS1cbm1tL3NsdWIuYz01MDc0PUVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZik7XG5tbS9zbHViLmMtNTA3NS1cbm1tL3NsdWIuYzo1MDc2OnN0YXRpYyBpbnQgX19wcmVmaWxsX3NoZWFmX3BmbWVtYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtNTA3Ny1cdFx0XHRcdCAgICAgIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZiwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL3NsdWIuYy01MDg1LVxubW0vc2x1Yi5jOjUwODY6XHRyZXQgPSByZWZpbGxfc2hlYWYocywgc2hlYWYsIGdmcF9ub21lbWFsbG9jKTtcbm1tL3NsdWIuYy01MDg3LVxuLS1cbm1tL3NsdWIuYy01MDk0LVx0ICovXG5tbS9zbHViLmM6NTA5NTpcdHJldCA9IHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwKTtcbm1tL3NsdWIuYy01MDk2LVx0c2hlYWYtXHUwMDNlcGZtZW1hbGxvYyA9IHRydWU7XG4tLVxubW0vc2x1Yi5jPTUxMTA9c3RydWN0IHNsYWJfc2hlYWYgKlxubW0vc2x1Yi5jOjUxMTE6a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKVxubW0vc2x1Yi5jLTUxMTIte1xuLS1cbm1tL3NsdWIuYy01MTczLVx0XHRpZiAoc2hlYWYtXHUwMDNlc2l6ZSBcdTAwM2Mgc2l6ZSBcdTAwMjZcdTAwMjZcbm1tL3NsdWIuYzo1MTc0Olx0XHQgICAgX19wcmVmaWxsX3NoZWFmX3BmbWVtYWxsb2Mocywgc2hlYWYsIGdmcCkpIHtcbm1tL3NsdWIuYy01MTc1LVx0XHRcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzaGVhZik7XG4tLVxubW0vc2x1Yi5jLTUxODQtLypcbm1tL3NsdWIuYzo1MTg1OiAqIFVzZSB0aGlzIHRvIHJldHVybiBhIHNoZWFmIG9idGFpbmVkIGJ5IGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZigpXG5tbS9zbHViLmMtNTE4Ni0gKlxuLS1cbm1tL3NsdWIuYz01MTk0PXZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbi0tXG5tbS9zbHViLmMtNTIyOC1cdGlmICghYmFybiB8fCBkYXRhX3JhY2UoYmFybi1cdTAwM2Vucl9mdWxsKSBcdTAwM2U9IE1BWF9GVUxMX1NIRUFWRVMgfHxcbm1tL3NsdWIuYzo1MjI5Olx0ICAgIHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTikpIHtcbm1tL3NsdWIuYy01MjMwLVx0XHRzaGVhZl9mbHVzaF91bnVzZWQocywgc2hlYWYpO1xuLS1cbm1tL3NsdWIuYy01MjM5LS8qXG5tbS9zbHViLmM6NTI0MDogKiBSZWZpbGwgYSBzaGVhZiBwcmV2aW91c2x5IHJldHVybmVkIGJ5IGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZiB0byBhdCBsZWFzdFxubW0vc2x1Yi5jLTUyNDEtICogdGhlIGdpdmVuIHNpemUuXG4tLVxubW0vc2x1Yi5jLTUyNTEtICovXG5tbS9zbHViLmM6NTI1MjppbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbm1tL3NsdWIuYy01MjUzLVx0XHRcdCAgICBzdHJ1Y3Qgc2xhYl9zaGVhZiAqKnNoZWFmcCwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxubW0vc2x1Yi5jLTUyNTgtXHQgKiBUT0RPOiBkbyB3ZSB3YW50IHRvIHN1cHBvcnQgKnNoZWFmID09IE5VTEwgdG8gYmUgZXF1aXZhbGVudCBvZlxubW0vc2x1Yi5jOjUyNTk6XHQgKiBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoKSA/XG5tbS9zbHViLmMtNTI2MC1cdCAqL1xuLS1cbm1tL3NsdWIuYy01MjY5LVx0XHRpZiAobGlrZWx5KHNoZWFmLVx1MDAzZWNhcGFjaXR5ID09IHMtXHUwMDNlc2hlYWZfY2FwYWNpdHkpKVxubW0vc2x1Yi5jOjUyNzA6XHRcdFx0cmV0dXJuIF9fcHJlZmlsbF9zaGVhZl9wZm1lbWFsbG9jKHMsIHNoZWFmLCBnZnApO1xubW0vc2x1Yi5jLTUyNzEtXG4tLVxubW0vc2x1Yi5jLTUyODQtXHQgKi9cbm1tL3NsdWIuYzo1Mjg1Olx0c2hlYWYgPSBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYocywgZ2ZwLCBzaXplKTtcbm1tL3NsdWIuYy01Mjg2LVx0aWYgKCFzaGVhZilcbi0tXG5tbS9zbHViLmMtNTI5NC0vKlxubW0vc2x1Yi5jOjUyOTU6ICogQWxsb2NhdGUgZnJvbSBhIHNoZWFmIG9idGFpbmVkIGJ5IGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZigpXG5tbS9zbHViLmMtNTI5Ni0gKlxuLS1cbm1tL3NsdWIuYz03ODcxPXN0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY3VsYXRlX3NoZWFmX2NhcGFjaXR5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy03OTExLVx0ICogUmVzcGVjdCBhbiBleHBsaWNpdCByZXF1ZXN0IGZvciBjYXBhY2l0eSB0aGF0JiMzOTtzIHR5cGljYWxseSBtb3RpdmF0ZWQgYnlcbm1tL3NsdWIuYzo3OTEyOlx0ICogZXhwZWN0ZWQgbWF4aW11bSBzaXplIG9mIGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZigpIHRvIG5vdCBlbmQgdXBcbm1tL3NsdWIuYy03OTEzLVx0ICogdXNpbmcgbG93LXBlcmZvcm1hbmNlIG92ZXJzaXplIHNoZWF2ZXNcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0xODg9c3RydWN0IHNsYWJfc2hlYWYgKlxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg6MTg5OmttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0xOTAtXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg9MTk1PXZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTE5Ni1cdFx0c3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKTtcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjE5NzppbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTE5OC1cdFx0c3RydWN0IHNsYWJfc2hlYWYgKipzaGVhZnAsIHVuc2lnbmVkIGludCBzaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jPTI1ND1zdHJ1Y3Qgc2xhYl9zaGVhZiAqXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjI1NTprbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IHNpemUpXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTI1Ni17XG4tLVxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0yODItXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjI4MzppbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMjg0LVx0XHQgc3RydWN0IHNsYWJfc2hlYWYgKipzaGVhZnAsIHVuc2lnbmVkIGludCBzaXplKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMjkxLVx0aWYgKHNpemUgXHUwMDNlIHNoZWFmLVx1MDAzZWNhcGFjaXR5KSB7XG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjI5MjpcdFx0c2hlYWYgPSBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYocywgZ2ZwLCBzaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMjkzLVx0XHRpZiAoIXNoZWFmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEwMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNMVUIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBjaGFuZ2VzIGluIGBtbS9zbHViLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgYW5kIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgLiBUaGUgZ29hbCwgaXQgc2VlbXMsIGlzIHRvIGltcHJvdmUgaG93IHBhcnRpYWxseSBmdWxsIHNsYWJzIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IHdoZW4gcmVmaWxsaW5nLgoKSW5pdGlhbGx5LCBJJiMzOTttIG9ic2VydmluZyB0aGUgYWRkaXRpb24gb2YgYSBgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbmAgYW5kIGB1bnNpZ25lZCBsb25nIGZsYWdzYCB3aXRoaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YC4gVGhpcyBpbW1lZGlhdGVseSBzaWduYWxzIHRoYXQgdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIGxvY2tpbmcgYXJvdW5kIHRoZSBub2RlJiMzOTtzIGxpc3QsIHNwZWNpZmljYWxseSB1c2luZyBgc3Bpbl9sb2NrX2lycXNhdmVgIGFuZCBgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZWAuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgY29tbWVudCBzdWdnZXN0cyBzb21lIG1vZGlmaWNhdGlvbiBvZiB0aGUgZnJlZWxpc3QuIFdlJiMzOTtyZSBub3cgYWNxdWlyaW5nIGBuYCB2aWEgYGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKWAgYW5kIHRoZW4gbG9ja2luZyBgbi0mZ3Q7bGlzdF9sb2NrYCB0byBwcm90ZWN0IGFjY2VzcyB0byB0aGUgZnJlZWxpc3QgY291bnRlciB1cGRhdGVzIHdpdGggYHNsYWJfdXBkYXRlX2ZyZWVsaXN0YC4gVGhpcyBpcyBjcnVjaWFsIHRvIGVuc3VyZSBhdG9taWNpdHkuIFRoZSBpbXBvcnRhbnQgYWRkaXRpb24gaXMgYGFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKWAgKmFmdGVyKiB0aGUgc3VjY2Vzc2Z1bCB1cGRhdGUgb2YgdGhlIGZyZWVsaXN0LCB3aGljaCBtZWFucyB0aGF0IHRoZSBzbGFiIGlzIG5vdyBhZGRlZCBiYWNrIHRvIHRoZSBwYXJ0aWFsIGxpc3QgZm9yIHRoZSBub2RlLCBsaWtlbHkgd2l0aCB0aGUgdXBkYXRlZCBgZnJlZWxpc3RgIGFuZCBgaW51c2VgIGNvdW50ZXJzLgoKTG9va2luZyBhdCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYCwgSSBub3RpY2UgYSBjcml0aWNhbCBjaGFuZ2Ugd2l0aGluIHRoZSBsb29wIHdoZXJlIG9iamVjdHMgYXJlIGJlaW5nIHJlZmlsbGVkLiAgVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgY2hlY2sgYW5kIHRoZW4gYGxpc3RfYWRkYCBpbiBhIGNvbmRpdGlvbmFsLCBidXQgbm93IHRoZSBgbGlzdF9hZGRgIGlzIGdvbmUuIEluc3RlYWQsIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgaXMgY2FsbGVkIGRpcmVjdGx5LCBhbmQgaWYgaXQgc3VjY2VlZHMsIHRoZSBjb2RlIGJyZWFrcyBvdXQgb2YgdGhlIGxvb3AuICBUaGUgYGxpc3RfYWRkYCBjYWxsIGlzIG5vdyBpbnNpZGUgdGhlIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgZnVuY3Rpb24uIE1vcmUgc3BlY2lmaWNhbGx5LCAgdGhlIGBhZGRfcGFydGlhbGAgaXMgbm93IGhhbmRsZWQgd2l0aGluIHRoZSAgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YC4gVGhpcyBzZWVtcyBsaWtlIGEgYmV0dGVyIGFwcHJvYWNoIGluIHRlcm1zIG9mIGF0b21pY2l0eSBhcyBhbGwgbW9kaWZpY2F0aW9uIHRvIHRoZSBwYXJ0aWFsIGxpc3QgaXMgaGFwcGVuaW5nIGJlaGluZCB0aGUgbG9jay4KCkZpbmFsbHksIHRoZSBgbGlzdF9lbXB0eWAgY2hlY2sgaGFzIGJlZW4gY2hhbmdlZCB0byBgdW5saWtlbHkoIWxpc3RfZW1wdHkoJmFtcDtwYy5zbGFicykpYC4gVGhhdCYjMzk7cyBhIG1pY3JvLW9wdGltaXphdGlvbiDigJMgbWFya2luZyB0aGF0IGJyYW5jaCBhcyBsZXNzIGxpa2VseSB0byBiZSB0YWtlbi4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIHNsYWJzIGluIGBwYy5zbGFic2AgYXJlICp1c3VhbGx5KiBlbXB0eS4gVGhpcyBtYWtlcyBzZW5zZS4KClNvLCBpbiBlc3NlbmNlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm9kZS1sZXZlbCBsb2NraW5nIGFyb3VuZCBwYXJ0aWFsIHNsYWIgbGlzdCBtYW5pcHVsYXRpb25zIGluIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgdG8gZW5zdXJlIHRocmVhZCBzYWZldHkuIEl0IGFsc28gc3RyZWFtbGluZXMgdGhlIHJlZmlsbCBwcm9jZXNzIGJ5IGludGVncmF0aW5nIHRoZSBwYXJ0aWFsIHNsYWIgcmV0dXJuIGFuZCBhZGRpdGlvbiBpbnRvIHRoZSBzYW1lIGxvY2tlZCBvcGVyYXRpb24sIGhvcGVmdWxseSBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgYW5kIHJlZHVjaW5nIGNvbnRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzIyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3MjI1Olx0XHRcdFx0Y29udGludWU7XG43MjI2Olx0XG43MjI3Olx0XHRcdGlmIChrZmVuY2VfZnJlZShkZi5mcmVlbGlzdCkpXG43MjI4Olx0XHRcdFx0Y29udGludWU7XG43MjI5Olx0XG43MjMwOlx0XHRcdF9fc2xhYl9mcmVlKGRmLnMsIGRmLnNsYWIsIGRmLmZyZWVsaXN0LCBkZi50YWlsLCBkZi5jbnQsXG43MjMxOlx0XHRcdFx0ICAgICBfUkVUX0lQXyk7XG43MjMyOlx0XHR9IHdoaWxlIChsaWtlbHkoc2l6ZSkpO1xuNzIzMzpcdH1cbjcyMzQ6XHRcbjcyMzU6XHQvKiBOb3RlIHRoYXQgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uICovXG43MjM2Olx0dm9pZCBrbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxuNzIzNzpcdHtcbjcyMzg6XHRcdGlmICghc2l6ZSlcbjcyMzk6XHRcdFx0cmV0dXJuO1xuNzI0MDpcdFxuNzI0MTpcdFx0LypcbjcyNDI6XHRcdCAqIGZyZWVpbmcgdG8gc2hlYXZlcyBpcyBzbyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZGV0YWNoZWQgZnJlZWxpc3Qgc29cbjcyNDM6XHRcdCAqIG9uY2Ugd2UgZ28gdGhhdCB3YXksIHdlIGhhdmUgdG8gZG8gZXZlcnl0aGluZyBkaWZmZXJlbnRseVxuNzI0NDpcdFx0ICovXG43MjQ1Olx0XHRpZiAocyBcdTAwMjZcdTAwMjYgY2FjaGVfaGFzX3NoZWF2ZXMocykpIHtcbjcyNDY6XHRcdFx0ZnJlZV90b19wY3NfYnVsayhzLCBzaXplLCBwKTtcbjcyNDc6XHRcdFx0cmV0dXJuO1xuNzI0ODpcdFx0fVxuNzI0OTpcdFxuNzI1MDpcdFx0ZG8ge1xuNzI1MTpcdFx0XHRzdHJ1Y3QgZGV0YWNoZWRfZnJlZWxpc3QgZGY7XG43MjUyOlx0XG43MjUzOlx0XHRcdHNpemUgPSBidWlsZF9kZXRhY2hlZF9mcmVlbGlzdChzLCBzaXplLCBwLCBcdTAwMjZkZik7XG43MjU0Olx0XHRcdGlmICghZGYuc2xhYilcbjcyNTU6XHRcdFx0XHRjb250aW51ZTtcbjcyNTY6XHRcbjcyNTc6XHRcdFx0c2xhYl9mcmVlX2J1bGsoZGYucywgZGYuc2xhYiwgZGYuZnJlZWxpc3QsIGRmLnRhaWwsIFx1MDAyNnBbc2l6ZV0sXG43MjU4Olx0XHRcdFx0ICAgICAgIGRmLmNudCwgX1JFVF9JUF8pO1xuNzI1OTpcdFx0fSB3aGlsZSAobGlrZWx5KHNpemUpKTtcbjcyNjA6XHR9XG43MjYxOlx0RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWVfYnVsayk7XG43MjYyOlx0XG43MjYzOlx0c3RhdGljIHVuc2lnbmVkIGludFxuNzI2NDpcdF9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbjcyNjU6XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG1heCwgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcbjcyNjY6XHRcdFx0ICAgICAgYm9vbCBhbGxvd19zcGluKVxuNzI2NzpcdHtcbjcyNjg6XHRcdHN0cnVjdCBwYXJ0aWFsX2J1bGtfY29udGV4dCBwYztcbjcyNjk6XHRcdHN0cnVjdCBzbGFiICpzbGFiLCAqc2xhYjI7XG43MjcwOlx0XHR1bnNpZ25lZCBpbnQgcmVmaWxsZWQgPSAwO1xuNzI3MTpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjcyNzI6XHRcdHZvaWQgKm9iamVjdDtcbjcyNzM6XHRcbjcyNzQ6XHRcdHBjLmZsYWdzID0gZ2ZwO1xuNzI3NTpcdFx0cGMubWluX29iamVjdHMgPSBtaW47XG43Mjc2Olx0XHRwYy5tYXhfb2JqZWN0cyA9IG1heDtcbjcyNzc6XHRcbjcyNzg6XHRcdGlmICghZ2V0X3BhcnRpYWxfbm9kZV9idWxrKHMsIG4sIFx1MDAyNnBjLCBhbGxvd19zcGluKSlcbjcyNzk6XHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjYyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlNMVUIgTWVtb3J5IEFsbG9jYXRvciBQYXRjaCBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgbW0vc2x1Yi5jYCwgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBhc3Nlc3MgaWYgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggZnV6emluZywgYW5kIGdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGtub3cgdGhhdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgbGlrZSB0aGlzIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGFuZCBmdW5kYW1lbnRhbCB0byB0aGUgc3lzdGVtLiBTbywgdGhhdCYjMzk7cyBhIGNoZWNrIG9uIG15ICYjMzQ7d29ydGggZnV6emluZyYjMzQ7IHJhZGFyLgoKVGhlIGluc3RydWN0aW9ucyBhcmUgcHJldHR5IGNsZWFyIG9uIHRoaXM6IGFueSBtb2RpZmljYXRpb25zIGluIGNvcmUgc3Vic3lzdGVtcyBsaWtlIG1lbW9yeSBtYW5hZ2VtZW50PyBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBoaXRzIHRoYXQgY3JpdGVyaW9uLiBTbywgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgdHJ1ZWAuCgpOb3csIHRoZSB0cmlja2llciBwYXJ0OiBkZXRlcm1pbmluZyB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyB0byBhdm9pZCBkaWx1dGlvbiBvZiB0aGUgZnV6emluZyBlZmZvcnQuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHRlbGxpbmcgbWUgdG8gYXZvaWQgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoaW5ncyBjYWxsZWQgYnkgKmV2ZXJ5dGhpbmcqLiBUaGUgZ29hbCBpcyB0byBpc29sYXRlIHRoZSBzcGVjaWZpYyBsb2dpYyBiZWluZyBhbHRlcmVkLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgYmxhbmtldCBhbGxvY2F0aW9uIG9yIGRlYWxsb2NhdGlvbi4KCkkgbmVlZCB0byBpZGVudGlmeSB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IHRpZWQgdG8gdGhpcyBtb2RpZmljYXRpb24uIFJpZ2h0LiBJIGhhdmU6CgoxLiAgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCAtIGEgc3RhdGljIGhlbHBlciwgbW9kaWZpZWQgZGlyZWN0bHkuCjIuICBgX19yZWZpbGxfb2JqZWN0c19ub2RlYCAtIGFub3RoZXIgc3RhdGljIGhlbHBlci4KMy4gIGByZWZpbGxfb2JqZWN0c2AgLSBzdGF0aWMuCjQuICBgcmVmaWxsX3NoZWFmYCAtIHN0YXRpYy4KNS4gIGBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWZgIC0gc3RhdGljLgo2LiAgYGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmYCAtIGFsc28gc3RhdGljLgo3LiAgYGttZW1fY2FjaGVfYWxsb2NfYnVsa2AgLSBXYWl0LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgd2hhdCBjYWxscyB0aGlzLiBJcyB0aGlzIGV4cG9ydGVkL25vbi1zdGF0aWM/IE5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3Mgc29tZXRoaW5nLiBJJiMzOTtsbCBjaGVjayBpdHMgZGVmaW5pdGlvbiBpbiBgbW0vc2x1Yi5jYC4KCkkmIzM5O20gY29uZmlkZW50IHRoZXNlIGFyZSB0aGUgcmVsZXZhbnQgc3ltYm9scyB0byBmb2N1cyBvbi4gVGhleSByZXByZXNlbnQgdGhlIGNvcmUgbG9naWMgb2YgdGhlIGNoYW5nZSBhbmQgc2hvdWxkIGdpdmUgbWUgZ29vZCBmdXp6aW5nIGNvdmVyYWdlLiBJJiMzOTttIGdvaW5nIHRvIG5vdGUgdGhlc2UgYW5kIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttZW1fY2FjaGVfYWxsb2NfYnVsayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9pb21tdS5jPTMzOT1tc21faW9tbXVfcGFnZXRhYmxlX3ByZWFsbG9jX2FsbG9jYXRlKHN0cnVjdCBtc21fbW11ICptbXUsIHN0cnVjdCBtc21fbW11X3ByZWFsbG9jICpwKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2lvbW11LmMtMzUxLVxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21faW9tbXUuYzozNTI6XHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhwdF9jYWNoZSwgR0ZQX0tFUk5FTCwgcC1cdTAwM2Vjb3VudCwgcC1cdTAwM2VwYWdlcykpIHtcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2lvbW11LmMtMzUzLVx0XHRrdmZyZWUocC1cdTAwM2VwYWdlcyk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYz0xMjg2PXN0YXRpYyBpbnQgcGFudGhvcl92bV9vcF9jdHhfcHJlYWxsb2NfcHRzKHN0cnVjdCBwYW50aG9yX3ZtX29wX2N0eCAqb3BfY3R4KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMTMwNC1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM6MTMwNTpcdGlmICgha21lbV9jYWNoZV9hbGxvY19idWxrKHB0X2NhY2hlLCBHRlBfS0VSTkVMLCBwdF9jb3VudCxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMTMwNi1cdFx0XHRcdCAgIG9wX2N0eC1cdTAwM2Vyc3ZkX3BhZ2VfdGFibGVzLnBhZ2VzKSkge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM9MTQxNz1zdGF0aWMgaW50IHBhbnRob3Jfdm1fcHJlcGFyZV91bm1hcF9vcF9jdHgoc3RydWN0IHBhbnRob3Jfdm1fb3BfY3R4ICpvcF9jdHgsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy0xNDUwLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYzoxNDUxOlx0XHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhwdF9jYWNoZSwgR0ZQX0tFUk5FTCwgcHRfY291bnQsXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTE0NTItXHRcdFx0XHRvcF9jdHgtXHUwMDNlcnN2ZF9wYWdlX3RhYmxlcy5wYWdlcykpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaD05MDQ9dm9pZCBrbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKTtcbmluY2x1ZGUvbGludXgvc2xhYi5oLTkwNS1cbmluY2x1ZGUvbGludXgvc2xhYi5oOjkwNjpib29sIGttZW1fY2FjaGVfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuaW5jbHVkZS9saW51eC9zbGFiLmgtOTA3LVx0XHRzaXplX3Qgc2l6ZSwgdm9pZCAqKnApO1xuaW5jbHVkZS9saW51eC9zbGFiLmg6OTA4OiNkZWZpbmUga21lbV9jYWNoZV9hbGxvY19idWxrKC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjkwOTpcdGFsbG9jX2hvb2tzKGttZW1fY2FjaGVfYWxsb2NfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9zbGFiLmgtOTEwLVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9OTY4PV9fY29sZCBib29sIF9faW9fYWxsb2NfcmVxX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbi0tXG5pb191cmluZy9pb191cmluZy5jLTk3OC1cdCAqL1xuaW9fdXJpbmcvaW9fdXJpbmcuYzo5Nzk6XHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhyZXFfY2FjaGVwLCBnZnAsIG5yX3JlcXMsIHJlcXMpKSB7XG5pb191cmluZy9pb191cmluZy5jLTk4MC1cdFx0cmVxc1swXSA9IGttZW1fY2FjaGVfYWxsb2MocmVxX2NhY2hlcCwgZ2ZwKTtcbi0tXG5saWIvdGVzdF9tZW1pbml0LmM9MjE2PXN0YXRpYyBpbnQgX19pbml0IGRvX2ttZW1fY2FjaGVfc2l6ZShzaXplX3Qgc2l6ZSwgYm9vbCB3YW50X2N0b3IsXG4tLVxubGliL3Rlc3RfbWVtaW5pdC5jLTIzMS1cdFx0aWYgKCF3YW50X3JjdSBcdTAwMjZcdTAwMjYgIXdhbnRfY3Rvcikge1xubGliL3Rlc3RfbWVtaW5pdC5jOjIzMjpcdFx0XHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhjLCBhbGxvY19tYXNrLCBCVUxLX1NJWkUsXG5saWIvdGVzdF9tZW1pbml0LmMtMjMzLVx0XHRcdFx0XHRidWxrX2FycmF5KSkge1xuLS1cbmxpYi90ZXN0X21lbWluaXQuYz0zNDU9c3RhdGljIGludCBfX2luaXQgZG9fa21lbV9jYWNoZV9zaXplX2J1bGsoaW50IHNpemUsIGludCAqdG90YWxfZmFpbHVyZXMpXG4tLVxubGliL3Rlc3RfbWVtaW5pdC5jLTM1NC1cdGZvciAoaXRlciA9IDA7IChpdGVyIFx1MDAzYyBtYXhpdGVyKSBcdTAwMjZcdTAwMjYgIWZhaWw7IGl0ZXImIzQzOyYjNDM7KSB7XG5saWIvdGVzdF9tZW1pbml0LmM6MzU1Olx0XHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhjLCBHRlBfS0VSTkVMLCBBUlJBWV9TSVpFKG9iamVjdHMpLFxubGliL3Rlc3RfbWVtaW5pdC5jLTM1Ni1cdFx0XHRcdG9iamVjdHMpKVxuLS1cbm1tL2thc2FuL2thc2FuX3Rlc3RfYy5jPTEyMjM9c3RhdGljIHZvaWQga21lbV9jYWNoZV9idWxrKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9rYXNhbi9rYXNhbl90ZXN0X2MuYy0xMjMyLVxubW0va2FzYW4va2FzYW5fdGVzdF9jLmM6MTIzMzpcdGlmICgha21lbV9jYWNoZV9hbGxvY19idWxrKGNhY2hlLCBHRlBfS0VSTkVMLCBBUlJBWV9TSVpFKHApLFxubW0va2FzYW4va2FzYW5fdGVzdF9jLmMtMTIzNC1cdFx0XHQodm9pZCAqKilcdTAwMjZwKSkge1xuLS1cbm1tL2tmZW5jZS9rZmVuY2VfdGVzdC5jPTc0OT1zdGF0aWMgdm9pZCB0ZXN0X21lbWNhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2tmZW5jZS9rZmVuY2VfdGVzdC5jLTc2NS1cbm1tL2tmZW5jZS9rZmVuY2VfdGVzdC5jOjc2NjpcdFx0aWYgKCFrbWVtX2NhY2hlX2FsbG9jX2J1bGsodGVzdF9jYWNoZSwgR0ZQX0FUT01JQyxcbm1tL2tmZW5jZS9rZmVuY2VfdGVzdC5jLTc2Ny1cdFx0XHRcdEFSUkFZX1NJWkUob2JqZWN0cyksIG9iamVjdHMpKVxuLS1cbm1tL2tmZW5jZS9rZmVuY2VfdGVzdC5jLTc3Ni1cdFx0Lypcbm1tL2tmZW5jZS9rZmVuY2VfdGVzdC5jOjc3NzpcdFx0ICoga21lbV9jYWNoZV9hbGxvY19idWxrKCkgZGlzYWJsZXMgaW50ZXJydXB0cywgYW5kIGNhbGxpbmcgaXRcbm1tL2tmZW5jZS9rZmVuY2VfdGVzdC5jLTc3OC1cdFx0ICogaW4gYSB0aWdodCBsb29wIG1heSBub3QgZ2l2ZSBLRkVOQ0UgYSBjaGFuY2UgdG8gc3dpdGNoIHRoZVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zNTk4PWJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4tLVxubW0vbWVtY29udHJvbC5jLTM2MTctXHQgKiBzbGFiX2FsbG9jX25vZGUoKSBhdm9pZHMgdGhlIE5VTEwgY2hlY2ssIHNvIHdlIG1pZ2h0IGJlIGNhbGxlZCB3aXRoIGFcbm1tL21lbWNvbnRyb2wuYzozNjE4Olx0ICogc2luZ2xlIE5VTEwgb2JqZWN0LiBrbWVtX2NhY2hlX2FsbG9jX2J1bGsoKSBhYm9ydHMgaWYgaXQgY2FuJiMzOTt0IGZpbGxcbm1tL21lbWNvbnRyb2wuYy0zNjE5LVx0ICogdGhlIHdob2xlIHJlcXVlc3RlZCBzaXplLlxuLS1cbm1tL3NsdWIuYz01MDc2PXN0YXRpYyBpbnQgX19wcmVmaWxsX3NoZWFmX3BmbWVtYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTUxMDAtXG5tbS9zbHViLmM6NTEwMTpzdGF0aWMgYm9vbCBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG5tbS9zbHViLmMtNTEwMi1cdFx0c2l6ZV90IHNpemUsIHZvaWQgKipwKTtcbi0tXG5tbS9zbHViLmM9NTExMT1rbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxubW0vc2x1Yi5jLTUxMzItXHRcdCAqL1xubW0vc2x1Yi5jOjUxMzM6XHRcdGlmICghX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsocywgZ2ZwLCBzaXplLFxubW0vc2x1Yi5jLTUxMzQtXHRcdFx0XHRcdCAgICAgXHUwMDI2c2hlYWYtXHUwMDNlb2JqZWN0c1swXSkpIHtcbi0tXG5tbS9zbHViLmM9NTI1Mj1pbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbi0tXG5tbS9zbHViLmMtNTI3MS1cbm1tL3NsdWIuYzo1MjcyOlx0XHRpZiAoIV9fa21lbV9jYWNoZV9hbGxvY19idWxrKHMsIGdmcCwgc2hlYWYtXHUwMDNlY2FwYWNpdHkgLSBzaGVhZi1cdTAwM2VzaXplLFxubW0vc2x1Yi5jLTUyNzMtXHRcdFx0XHRcdCAgICAgXHUwMDI2c2hlYWYtXHUwMDNlb2JqZWN0c1tzaGVhZi1cdTAwM2VzaXplXSkpXG4tLVxubW0vc2x1Yi5jPTczOTc9cmVmaWxsX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXG4tLVxubW0vc2x1Yi5jLTc0MzItXG5tbS9zbHViLmM6NzQzMzpzdGF0aWMgYm9vbCBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG5tbS9zbHViLmMtNzQzNC1cdFx0c2l6ZV90IHNpemUsIHZvaWQgKipwKVxuLS1cbm1tL3NsdWIuYy03NDY2LS8qKlxubW0vc2x1Yi5jOjc0Njc6ICoga21lbV9jYWNoZV9hbGxvY19idWxrIC0gQWxsb2NhdGUgbXVsdGlwbGUgb2JqZWN0c1xubW0vc2x1Yi5jLTc0NjgtICogQHM6XHRcdFRoZSBjYWNoZSB0byBhbGxvY2F0ZSBmcm9tXG4tLVxubW0vc2x1Yi5jLTc0ODItICovXG5tbS9zbHViLmM6NzQ4Mzpib29sIGttZW1fY2FjaGVfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxubW0vc2x1Yi5jLTc0ODQtXHRcdHNpemVfdCBzaXplLCB2b2lkICoqcClcbi0tXG5tbS9zbHViLmMtNzUxOS1cdFx0ICovXG5tbS9zbHViLmM6NzUyMDpcdFx0aWYgKHVubGlrZWx5KCFfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzLCBmbGFncywgc2l6ZSAtIGksXG5tbS9zbHViLmMtNzUyMS1cdFx0XHRcdHAgJiM0MzsgaSkpKSB7XG4tLVxubW0vc2x1Yi5jLTc1NDMtfVxubW0vc2x1Yi5jOjc1NDQ6RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX2J1bGtfbm9wcm9mKTtcbm1tL3NsdWIuYy03NTQ1LVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0yNDE9c3RhdGljIGludCB4ZHBfcmVjdl9mcmFtZXMoc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcywgaW50IG5mcmFtZXMsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTI0OC1cbm5ldC9icGYvdGVzdF9ydW4uYzoyNDk6XHRpZiAodW5saWtlbHkoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhuZXRfaG90ZGF0YS5za2J1ZmZfY2FjaGUsIGdmcCxcbm5ldC9icGYvdGVzdF9ydW4uYy0yNTAtXHRcdFx0XHRcdCAgICBuZnJhbWVzLCAodm9pZCAqKilza2JzKSkpIHtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yODQ9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9za2JfY2FjaGVfZ2V0KGJvb2wgYWxsb2MpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjkwLVx0aWYgKHVubGlrZWx5KCFuYy1cdTAwM2Vza2JfY291bnQpKSB7XG5uZXQvY29yZS9za2J1ZmYuYzoyOTE6XHRcdGlmIChhbGxvYyBcdTAwMjZcdTAwMjYga21lbV9jYWNoZV9hbGxvY19idWxrKG5ldF9ob3RkYXRhLnNrYnVmZl9jYWNoZSxcbm5ldC9jb3JlL3NrYnVmZi5jLTI5Mi1cdFx0XHRcdFx0XHQgICBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTMxNj1zdGF0aWMgaW5saW5lIHZvaWQgc2tidWZmX2NsZWFyKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzQxLSAqIFJldHVybjogbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgc2ticyAoQG4gaWYgbm8gYWN0dWFsIGFsbG9jYXRpb25cbm5ldC9jb3JlL3NrYnVmZi5jOjM0MjogKlx0ICAgbmVlZGVkIG9yIGttZW1fY2FjaGVfYWxsb2NfYnVsaygpIGRpZG4mIzM5O3QgZmFpbCkuXG5uZXQvY29yZS9za2J1ZmYuYy0zNDMtICovXG5uZXQvY29yZS9za2J1ZmYuYz0zNDQ9dTMyIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKHZvaWQgKipza2JzLCB1MzIgbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zNTUtXHRidWxrID0gbWluKE5BUElfU0tCX0NBQ0hFX1NJWkUgLSBuYy1cdTAwM2Vza2JfY291bnQsIE5BUElfU0tCX0NBQ0hFX0JVTEspO1xubmV0L2NvcmUvc2tidWZmLmM6MzU2Olx0aWYgKGttZW1fY2FjaGVfYWxsb2NfYnVsayhuZXRfaG90ZGF0YS5za2J1ZmZfY2FjaGUsXG5uZXQvY29yZS9za2J1ZmYuYy0zNTctXHRcdFx0XHQgIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4sIGJ1bGssXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzYzLVx0LyogU3RpbGwgbm90IGVub3VnaC4gQnVsay1hbGxvY2F0ZSB0aGUgbWlzc2luZyBwYXJ0IGRpcmVjdGx5LCB6ZXJvZWQgKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjM2NDpcdGlmIChrbWVtX2NhY2hlX2FsbG9jX2J1bGsobmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlLFxubmV0L2NvcmUvc2tidWZmLmMtMzY1LVx0XHRcdFx0ICBHRlBfQVRPTUlDIHwgX19HRlBfWkVSTyB8IF9fR0ZQX05PV0FSTixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz01MTk3PXN0YXRpYyB2b2lkIHNrYl9leHRlbnNpb25zX2luaXQodm9pZCkge31cbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01MjA1LSNkZWZpbmUgRkxBR19TS0JfTk9fTUVSR0VcdFNMQUJfTk9fTUVSR0Vcbm5ldC9jb3JlL3NrYnVmZi5jOjUyMDY6I2Vsc2UgLyogQ09ORklHX1NMVUJfVElOWSAtIHNpbXBsZSBsb29wIGluIGttZW1fY2FjaGVfYWxsb2NfYnVsayAqL1xubmV0L2NvcmUvc2tidWZmLmMtNTIwNy0jZGVmaW5lIEZMQUdfU0tCX05PX01FUkdFXHQwXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg9MTg1PXZvaWQga21lbV9jYWNoZV9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgc2l6ZV90IHNpemUsIHZvaWQgKipsaXN0KTtcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjE4Njpib29sIGttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplLFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmgtMTg3LVx0XHRcdCAgdm9pZCAqKmxpc3QpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM9MTUzPXZvaWQga21lbV9jYWNoZV9zaHJpbmsoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcClcbi0tXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTE1Ni1cbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM6MTU3OmJvb2wga21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGdmcCwgc2l6ZV90IHNpemUsXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTE1OC1cdFx0XHQgIHZvaWQgKipwKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM9MjU1PWttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbi0tXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTI3NC1cdHNoZWFmLVx1MDAzZXNpemUgPSBzaXplO1xudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYzoyNzU6XHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhzLCBnZnAsIHNpemUsIHNoZWFmLVx1MDAzZW9iamVjdHMpKSB7XG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTI3Ni1cdFx0ZnJlZShzaGVhZik7XG4tLVxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYz0yODM9aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXG4tLVxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0zMDAtXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjMwMTpcdGlmICgha21lbV9jYWNoZV9hbGxvY19idWxrKHMsIGdmcCwgc2l6ZSAtIHNoZWFmLVx1MDAzZXNpemUsXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTMwMi1cdFx0XHRcdTAwMjZzaGVhZi1cdTAwM2VvYmplY3RzW3NoZWFmLVx1MDAzZXNpemVdKSlcbi0tXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jPTMzNz12b2lkIHRlc3Rfa21lbV9jYWNoZV9idWxrKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0zNTUtXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjM1NjpcdGttZW1fY2FjaGVfYWxsb2NfYnVsayh0ZXN0X2NhY2hlLCBfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgNSwgbGlzdCk7XG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTM1Ny1cdGttZW1fY2FjaGVfZnJlZV9idWxrKHRlc3RfY2FjaGUsIDUsIGxpc3QpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMzcwLVxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYzozNzE6XHRrbWVtX2NhY2hlX2FsbG9jX2J1bGsodGVzdF9jYWNoZTIsIF9fR0ZQX0RJUkVDVF9SRUNMQUlNLCAxMCwgbGlzdCk7XG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTM3Mi1cdGttZW1fY2FjaGVfZnJlZV9idWxrKHRlc3RfY2FjaGUyLCAxMCwgbGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjE2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFJlYWNoIG9mIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBhcmVhLi4uIGBrbWVtX2NhY2hlX2FsbG9jX2J1bGtgIGlzIHVzZWQgaW4gYSBmZXcga2V5IHBsYWNlcyBJIGtub3cgd2VsbCDigJMgbmV0d29ya2luZyB3aXRoIE5BUEkmIzM5O3Mgc2tidWZmIGNhY2hlLCBpb191cmluZywgYW5kIGV2ZW4gdGhvc2UgbWFwbGVfdHJlZSBzaGVhdmVzLiBNeSBjb25jZXJuIGlzLCBJ4oCZdmUgc2VlbiB0aGlzIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgZnVuY3Rpb24gYXBwZWFyIGFzIG1vZGlmaWVkLiBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgaW1wbGljYXRpb25zIG9mIHRob3NlIG1vZGlmaWNhdGlvbnMuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBiZXlvbmQgdGhlIG9idmlvdXMuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkmIzM5O2xsIGluaXRpYXRlIGEgYGdyZXBgIHNlYXJjaCBmb3IgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCB0byBzdGFydCBidWlsZGluZyBvdXQgYSBsaXN0IG9mIGFsbCBjYWxsZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9NTYxMT1zdGF0aWMgbm9pbmxpbmUgdm9pZCBmcmVlX3RvX3BhcnRpYWxfbGlzdChcbi0tXG5tbS9zbHViLmMtNTY4Mi0gKi9cbm1tL3NsdWIuYzo1NjgzOnN0YXRpYyBib29sIF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbm1tL3NsdWIuYy01Njg0LVx0XHRcdFx0ICAgICAgIHZvaWQgKmhlYWQsIGludCBjbnQpXG4tLVxubW0vc2x1Yi5jLTU3MDItXG5tbS9zbHViLmM6NTcwMzpcdGlmICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXHUwMDI2b2xkLCBcdTAwMjZuZXcsIFwmIzM0O19fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0XCYjMzQ7KSkge1xubW0vc2x1Yi5jLTU3MDQtXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbi0tXG5tbS9zbHViLmM9NzI2ND1fX3JlZmlsbF9vYmplY3RzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXG4tLVxubW0vc2x1Yi5jLTczMDctXG5tbS9zbHViLmM6NzMwODpcdFx0XHRpZiAoX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qocywgc2xhYiwgaGVhZCwgY291bnQpKVxubW0vc2x1Yi5jLTczMDktXHRcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBDYWxsIENoYWluKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBmdW5jdGlvbi4gSSBzZWUgaXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSBgX19yZWZpbGxfb2JqZWN0c19ub2RlYCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHdoZXJlIGlzICp0aGF0KiBjYWxsZWQ/IExldCBtZSBzZWXigKYgaXQmIzM5O3MgYF9fcmVmaWxsX29iamVjdHNfYW55YCBhbmQgYHJlZmlsbF9vYmplY3RzYC4gQWxyaWdodCwgdGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duIGEgYml0LiBBbmQgd2hvIGNhbGxzICp0aG9zZSo/IExvb2tzIGxpa2UgYHJlZmlsbF9zaGVhZmAgYW5kIGBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsa2AuIE9rYXksIHdlJiMzOTtyZSBidWlsZGluZyBhIG5pY2UgbGl0dGxlIGNhbGwgZ3JhcGggaGVyZS4KClNvLCBgcmVmaWxsX3NoZWFmYCBpcyBjYWxsZWQgYnkgYF9fcGNzX3JlcGxhY2VfZW1wdHlfbWFpbmAsIGBfX3ByZWZpbGxfc2hlYWZfcGZtZW1hbGxvY2AsIGFuZCBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgLiBBbmQgZmluYWxseSwgd2hhdCYjMzk7cyBjYWxsaW5nIGBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsa2A/IFJpZ2h0LCBga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmYCwgYGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmYCwgYW5kIGBrbWVtX2NhY2hlX2FsbG9jX2J1bGtfbm9wcm9mYC4KCk5vdywgSSYjMzk7bSBnZXR0aW5nIGEgZmVlbGluZyB0aGF0IHRoaXMgbWlnaHQgYmUgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIFNMVUIgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYENPTkZJR19TTFVCYCBvciBgQ09ORklHX1NMVUJfVElOWWAgb3IgcGVyaGFwcyBzb21ldGhpbmcgZWxzZSBsaWtlIHRoYXQgaXMgaW4gcGxheSBoZXJlLiBMZXQgbWUgaGF2ZSBhIGxvb2sgaW4gYG1tL3NsdWIuY2AgYXJvdW5kIHRoZSBgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGtgIGZ1bmN0aW9uLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBhcyB3ZWxsLiBUaGlzIG1pZ2h0IGdpdmUgbWUgdGhlIGtleSB0byB3aHkgdGhpcyBjaGFpbiBpcyBiZWluZyB1c2VkIGFuZCB3aGVyZSB0aGUgcmVhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBtaWdodCBsaWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTFVCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTYyPW1lbnUgXCYjMzQ7U2xhYiBhbGxvY2F0b3Igb3B0aW9uc1wmIzM0O1xubW0vS2NvbmZpZy0xNjMtXG5tbS9LY29uZmlnOjE2NDpjb25maWcgU0xVQlxubW0vS2NvbmZpZy0xNjUtXHRkZWZfYm9vbCB5XG4tLVxubW0vS2NvbmZpZz0xNjg9Y29uZmlnIEtWRlJFRV9SQ1VfQkFUQ0hFRFxuLS1cbm1tL0tjb25maWctMTcyLVxubW0vS2NvbmZpZzoxNzM6Y29uZmlnIFNMVUJfVElOWVxubW0vS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0NvbmZpZ3VyZSBmb3IgbWluaW1hbCBtZW1vcnkgZm9vdHByaW50XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz0yMTc9Y29uZmlnIFNMQUJfQlVDS0VUU1xuLS1cbm1tL0tjb25maWctMjMzLVxubW0vS2NvbmZpZzoyMzQ6Y29uZmlnIFNMVUJfU1RBVFNcbm1tL0tjb25maWctMjM1LVx0ZGVmYXVsdCBuXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz00MT1jb25maWcgREVCVUdfUEFHRUFMTE9DX0VOQUJMRV9ERUZBVUxUXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy00Ny1cbm1tL0tjb25maWcuZGVidWc6NDg6Y29uZmlnIFNMVUJfREVCVUdcbm1tL0tjb25maWcuZGVidWctNDktXHRkZWZhdWx0IHlcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTU4LVxubW0vS2NvbmZpZy5kZWJ1Zzo1OTpjb25maWcgU0xVQl9ERUJVR19PTlxubW0vS2NvbmZpZy5kZWJ1Zy02MC1cdGJvb2wgXCYjMzQ7U0xVQiBkZWJ1Z2dpbmcgb24gYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWcuZGVidWctNzItXG5tbS9LY29uZmlnLmRlYnVnOjczOmNvbmZpZyBTTFVCX1JDVV9ERUJVR1xubW0vS2NvbmZpZy5kZWJ1Zy03NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIFVBRiBkZXRlY3Rpb24gaW4gVFlQRVNBRkVfQllfUkNVIGNhY2hlcyAoZm9yIEtBU0FOKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg2NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipTTFVCIENvbmZpZ3VyYXRpb24gQW5hbHlzaXMqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZGVmYXVsdCBmb3IgYFNMVUJgLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQmIzM5O3Mgc2V0IHRvICYjMzk7eSYjMzk7IGluIGBtbS9LY29uZmlnYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIE5vdywgSSB3YW50IHRvIHNlZSBob3cgYENPTkZJR19TTFVCX1RJTllgIGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIGBTTFVCYCBjb25maWd1cmF0aW9uLiBNeSBtZW50YWwgbW9kZWwgaXMganVtcGluZyB0byBgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGtgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYC4gQXJlIGVpdGhlciBvZiB0aG9zZSBmdW5jdGlvbnMgY29uZGl0aW9uYWwgb24gYCFDT05GSUdfU0xVQl9USU5ZYD8gVG8gY29uZmlybSwgSSYjMzk7bGwgbmVlZCB0byBkaXZlIGludG8gYG1tL3NsdWIuY2AgYW5kIHNlYXJjaCBmb3IgdGhlIGBTTFVCX1RJTllgIHN5bWJvbC4gVGhhdCYjMzk7bGwgZXhwb3NlIHRoZSBrZXkgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTTFVCX1RJTlkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNjg9Y29uZmlnIEtWRlJFRV9SQ1VfQkFUQ0hFRFxubW0vS2NvbmZpZy0xNjktXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjE3MDpcdGRlcGVuZHMgb24gIVNMVUJfVElOWSBcdTAwMjZcdTAwMjYgIVRJTllfUkNVXG5tbS9LY29uZmlnLTE3MS1cdGRlcGVuZHMgb24gIVJDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG5tbS9LY29uZmlnLTE3Mi1cbm1tL0tjb25maWc6MTczOmNvbmZpZyBTTFVCX1RJTllcbm1tL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtDb25maWd1cmUgZm9yIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MjAwPWNvbmZpZyBTTEFCX0ZSRUVMSVNUX1JBTkRPTVxubW0vS2NvbmZpZy0yMDEtXHRib29sIFwmIzM0O1JhbmRvbWl6ZSBzbGFiIGZyZWVsaXN0XCYjMzQ7XG5tbS9LY29uZmlnOjIwMjpcdGRlcGVuZHMgb24gIVNMVUJfVElOWVxubW0vS2NvbmZpZy0yMDMtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0yMDg9Y29uZmlnIFNMQUJfRlJFRUxJU1RfSEFSREVORURcbm1tL0tjb25maWctMjA5LVx0Ym9vbCBcJiMzNDtIYXJkZW4gc2xhYiBmcmVlbGlzdCBtZXRhZGF0YVwmIzM0O1xubW0vS2NvbmZpZzoyMTA6XHRkZXBlbmRzIG9uICFTTFVCX1RJTllcbm1tL0tjb25maWctMjExLVx0aGVscFxuLS1cbm1tL0tjb25maWc9MjE3PWNvbmZpZyBTTEFCX0JVQ0tFVFNcbm1tL0tjb25maWctMjE4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGFsbG9jYXRpb24gZnJvbSBzZXBhcmF0ZSBrbWFsbG9jIGJ1Y2tldHNcJiMzNDtcbm1tL0tjb25maWc6MjE5Olx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXG5tbS9LY29uZmlnLTIyMC1cdGRlZmF1bHQgU0xBQl9GUkVFTElTVF9IQVJERU5FRFxuLS1cbm1tL0tjb25maWc9MjM0PWNvbmZpZyBTTFVCX1NUQVRTXG4tLVxubW0vS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O0VuYWJsZSBwZXJmb3JtYW5jZSBzdGF0aXN0aWNzXCYjMzQ7XG5tbS9LY29uZmlnOjIzNzpcdGRlcGVuZHMgb24gU1lTRlMgXHUwMDI2XHUwMDI2ICFTTFVCX1RJTllcbm1tL0tjb25maWctMjM4LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MjQ3PWNvbmZpZyBLTUFMTE9DX1BBUlRJVElPTl9DQUNIRVNcbm1tL0tjb25maWc6MjQ4Olx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXG5tbS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7UGFydGl0aW9uZWQgc2xhYiBjYWNoZXMgZm9yIG5vcm1hbCBrbWFsbG9jXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz00OD1jb25maWcgU0xVQl9ERUJVR1xuLS1cbm1tL0tjb25maWcuZGVidWctNTAtXHRib29sIFwmIzM0O0VuYWJsZSBTTFVCIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxubW0vS2NvbmZpZy5kZWJ1Zzo1MTpcdGRlcGVuZHMgb24gU1lTRlMgXHUwMDI2XHUwMDI2ICFTTFVCX1RJTllcbm1tL0tjb25maWcuZGVidWctNTItXHRzZWxlY3QgU1RBQ0tERVBPVCBpZiBTVEFDS1RSQUNFX1NVUFBPUlRcbi0tXG5tbS9zbGFiLmg9MjQwPXN0cnVjdCBrbWVtX2NhY2hlIHtcbi0tXG5tbS9zbGFiLmgtMjk4LSAqIGJvb3RzdHJhcF9zaGVhZiB0ZW1wb3JhcmlseSBkdXJpbmcgaW5pdCwgb3IgcGVybWFuZW50bHkgZm9yIHRoZSBib290IGNhY2hlc1xubW0vc2xhYi5oOjI5OTogKiBhbmQgY2FjaGVzIHdpdGggZGVidWdnaW5nIGVuYWJsZWQsIG9yIGFsbCBjYWNoZXMgd2l0aCBDT05GSUdfU0xVQl9USU5ZLiBUaGlzXG5tbS9zbGFiLmgtMzAwLSAqIGhlbHBlciBkaXN0aW5ndWlzaGVzIHdoZXRoZXIgY2FjaGUgaGFzIHJlYWwgbm9uLWJvb3RzdHJhcCBzaGVhdmVzLlxuLS1cbm1tL3NsYWIuaD0zMDI9c3RhdGljIGlubGluZSBib29sIGNhY2hlX2hhc19zaGVhdmVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2xhYi5oLTMwMy17XG5tbS9zbGFiLmg6MzA0Olx0LyogVGVzdCBDT05GSUdfU0xVQl9USU5ZIGZvciBjb2RlIGVsaW1pbmF0aW9uIHB1cnBvc2VzICovXG5tbS9zbGFiLmg6MzA1Olx0cmV0dXJuICFJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIFx1MDAyNlx1MDAyNiBzLVx1MDAzZXNoZWFmX2NhcGFjaXR5O1xubW0vc2xhYi5oLTMwNi19XG5tbS9zbGFiLmgtMzA3LVxubW0vc2xhYi5oOjMwODojaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFx1MDAyNlx1MDAyNiAhZGVmaW5lZChDT05GSUdfU0xVQl9USU5ZKVxubW0vc2xhYi5oLTMwOS0jZGVmaW5lIFNMQUJfU1VQUE9SVFNfU1lTRlMgMVxuLS1cbm1tL3NsYWJfY29tbW9uLmM9ODE1PUVYUE9SVF9TWU1CT0woa21hbGxvY19zaXplX3JvdW5kdXApO1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtODI4LVxubW0vc2xhYl9jb21tb24uYzo4Mjk6I2lmbmRlZiBDT05GSUdfU0xVQl9USU5ZXG5tbS9zbGFiX2NvbW1vbi5jLTgzMC0jZGVmaW5lIEtNQUxMT0NfUkNMX05BTUUoc3opXHQubmFtZVtLTUFMTE9DX1JFQ0xBSU1dID0gXCYjMzQ7a21hbGxvYy1yY2wtXCYjMzQ7ICNzeixcbi0tXG5tbS9zbHViLmM9MTkzPWVudW0gc2xhYl9mbGFncyB7XG4tLVxubW0vc2x1Yi5jLTE5OC1cbm1tL3NsdWIuYzoxOTk6I2lmbmRlZiBDT05GSUdfU0xVQl9USU5ZXG5tbS9zbHViLmMtMjAwLSNkZWZpbmUgX19mYXN0cGF0aF9pbmxpbmUgX19hbHdheXNfaW5saW5lXG4tLVxubW0vc2x1Yi5jPTI1ND12b2lkICpmaXh1cF9yZWRfbGVmdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqcClcbi0tXG5tbS9zbHViLmMtMjcyLVxubW0vc2x1Yi5jOjI3MzojaWZuZGVmIENPTkZJR19TTFVCX1RJTllcbm1tL3NsdWIuYy0yNzQtLypcbi0tXG5tbS9zbHViLmM9Mzg4NT1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fcGFydGlhbF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0zOTEzLVxubW0vc2x1Yi5jOjM5MTQ6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcbm1tL3NsdWIuYy0zOTE1LVx0XHRcdG9iamVjdCA9IGFsbG9jX3NpbmdsZV9mcm9tX3BhcnRpYWwocywgbiwgc2xhYixcbi0tXG5tbS9zbHViLmM9NDQ3OD1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG9jX2Zyb21fbmV3X3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy00NTI3LSAqIFNsb3cgcGF0aC4gV2UgZmFpbGVkIHRvIGFsbG9jYXRlIHZpYSBwZXJjcHUgc2hlYXZlcyBvciB0aGV5IGFyZSBub3QgYXZhaWxhYmxlXG5tbS9zbHViLmM6NDUyODogKiBkdWUgdG8gYm9vdHN0cmFwIG9yIGRlYnVnZ2luZyBlbmFibGVkIG9yIFNMVUJfVElOWS5cbm1tL3NsdWIuYy00NTI5LSAqXG4tLVxubW0vc2x1Yi5jPTQ1MzM9c3RhdGljIHZvaWQgKl9fX3NsYWJfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSxcbi0tXG5tbS9zbHViLmMtNDU4MS1cbm1tL3NsdWIuYzo0NTgyOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwga21lbV9jYWNoZV9kZWJ1ZyhzKSkge1xubW0vc2x1Yi5jLTQ1ODMtXHRcdG9iamVjdCA9IGFsbG9jX3NpbmdsZV9mcm9tX25ld19zbGFiKHMsIHNsYWIsIGFjKTtcbi0tXG5tbS9zbHViLmM9NTcyMT1zdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2x1Yi5jLTU3MzEtXG5tbS9zbHViLmM6NTczMjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcbm1tL3NsdWIuYy01NzMzLVx0XHRmcmVlX3RvX3BhcnRpYWxfbGlzdChzLCBzbGFiLCBoZWFkLCB0YWlsLCBjbnQsIGFkZHIpO1xuLS1cbm1tL3NsdWIuYz03NDMzPXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNzQzNy1cbm1tL3NsdWIuYzo3NDM4Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwga21lbV9jYWNoZV9kZWJ1ZyhzKSkge1xubW0vc2x1Yi5jLTc0MzktXHRcdGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgYWMgPSB7XG4tLVxubW0vc2x1Yi5jPTc1NjY9c3RhdGljIHVuc2lnbmVkIGludCBzbHViX21heF9vcmRlciA9XG5tbS9zbHViLmM6NzU2NzpcdElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgPyAxIDogUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7XG5tbS9zbHViLmMtNzU2OC1zdGF0aWMgdW5zaWduZWQgaW50IHNsdWJfbWluX29iamVjdHM7XG4tLVxubW0vc2x1Yi5jPTc3MDc9c3RhdGljIGludCBpbml0X3BlcmNwdV9zaGVhdmVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy03NzMyLVx0XHQgKiBXZSBrZWVwIGJvb3RzdHJhcF9zaGVhZiBmb3Iga21lbV9jYWNoZSBhbmQga21lbV9jYWNoZV9ub2RlLFxubW0vc2x1Yi5jOjc3MzM6XHRcdCAqIGNhY2hlcyB3aXRoIGRlYnVnIGVuYWJsZWQsIGFuZCBhbGwgY2FjaGVzIHdpdGggU0xVQl9USU5ZLlxubW0vc2x1Yi5jLTc3MzQtXHRcdCAqIEZvciBrbWFsbG9jIGNhY2hlcyBpdCYjMzk7cyB1c2VkIHRlbXBvcmFyaWx5IGR1cmluZyB0aGUgaW5pdGlhbFxuLS1cbm1tL3NsdWIuYz03ODcxPXN0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY3VsYXRlX3NoZWFmX2NhcGFjaXR5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy03ODc4LVxubW0vc2x1Yi5jOjc4Nzk6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX0RFQlVHX0ZMQUdTKVxubW0vc2x1Yi5jLTc4ODAtXHRcdHJldHVybiAwO1xuLS1cbm1tL3NsdWIuYz04NTc0PXN0YXRpYyB2b2lkIF9faW5pdCBib290c3RyYXBfY2FjaGVfc2hlYXZlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtODU4NC1cbm1tL3NsdWIuYzo4NTg1Olx0LyogY2FwYWNpdHkgY2FuIGJlIDAgZHVlIHRvIGRlYnVnZ2luZyBvciBTTFVCX1RJTlkgKi9cbm1tL3NsdWIuYy04NTg2LVx0aWYgKCFjYXBhY2l0eSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzMDIKCQkJCQkJCW91dHB1dDogMTkyCgkJCQkJCQl0aG91Z2h0czogMTMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipTTFVCIEFsbG9jYXRvciBPcHRpbWl6YXRpb24gLSBXb3J0aHkgb2YgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBub3RlIHRoYXQgYENPTkZJR19TTFVCYCBpcyB0aGUgZGVmYXVsdCBhbmQgc3RhbmRhcmQgc2xhYiBhbGxvY2F0b3IsIGFuZCBgQ09ORklHX1NMVUJfVElOWWAgZGlzYWJsZXMgc2hlYXZlcy4gTm8gb3RoZXIgc3BlY2lhbCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkIGFzIGZhciBhcyBJIGNhbiBzZWUuIFNvLCBgU0xVQmAgaXMgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciwgZW5hYmxlZCBieSBkZWZhdWx0LCBub3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgaGVyZS4KCk5vdywgdGhlIGNvcmUgb2YgdGhpcyBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGFmZmVjdGVkLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBtb2RpZmljYXRpb25zLCBzcGVjaWZpY2FsbHksIHRob3NlIHJlbGF0ZWQgdG8gZnJlZWxpc3QgaGFuZGxpbmcgYW5kIGJ1bGsgb3BlcmF0aW9ucy4gVGhlIGZ1bmN0aW9ucyB0aGF0IHN0YW5kIG91dCBhcmUgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBhbmQgYF9fcmVmaWxsX29iamVjdHNfbm9kZWAuIEkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHJlbGF0ZWQgZW50cnkgcG9pbnRzLiBUaGUgY2FsbGVycyBvciByZWxhdGVkIGZ1bmN0aW9ucyBpbmNsdWRlIGBfX3JlZmlsbF9vYmplY3RzX2FueWAsIGByZWZpbGxfb2JqZWN0c2AsIGByZWZpbGxfc2hlYWZgLCBga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmYCwgYGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmYCwgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCwgYW5kIHRoZSBga21lbV9jYWNoZV9hbGxvY19idWxrYCBmYW1pbHkuCgpga21lbV9jYWNoZV9hbGxvY19idWxrYCBpcyB1c2VkIGJ5IG5ldHdvcmtpbmcgYW5kIHNvbWUgYnVsayBhbGxvY2F0b3JzLCBidXQgaXQgaXNuJiMzOTt0IGFzIHViaXF1aXRvdXMgYXMgYGttYWxsb2NgIGFuZCBga2ZyZWVgLCB3aGljaCBJIG5vdGUgZm9yIGNvbnRleHQuIFRoZSBvdGhlcnMsIGBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWZgLCBga21lbV9jYWNoZV9yZWZpbGxfc2hlYWZgLCBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgLCBgcmVmaWxsX3NoZWFmYCwgYHJlZmlsbF9vYmplY3RzYCwgYF9fcmVmaWxsX29iamVjdHNfbm9kZWAsIGFuZCBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgLCBhcmUgdGhlIG1vcmUgc3BlY2lmaWMgdGFyZ2V0cyBoZXJlLgoKTGV0JiMzOTtzIHZlcmlmeSB0aGVzZSBzeW1ib2xzLiBJJiMzOTttIGNvbmZpZGVudCB0aGV5IGFyZSBhbGwgaW4gYG1tL3NsdWIuY2AuCgpPa2F5LCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGVzZSBzeW1ib2xzIGV4aXN0IGluIGBtbS9zbHViLmNgOgoqICAgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YDogc3RhdGljCiogICBgX19yZWZpbGxfb2JqZWN0c19ub2RlYDogc3RhdGljCiogICBgcmVmaWxsX29iamVjdHNgOiBzdGF0aWMKKiAgIGByZWZpbGxfc2hlYWZgOiBzdGF0aWMKKiAgIGBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWZgOiBleHBvcnRlZAoqICAgYGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmYDogZXhwb3J0ZWQKKiAgIGBrbWVtX2NhY2hlX3JldHVybl9zaGVhZmA6IGV4cG9ydGVkCgpMaW5lIG51bWJlciB2ZXJpZmljYXRpb24gaXMgYWxzbyBkb25lOgoqICAgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBhdCBsaW5lIDU2ODMKKiAgIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgIGF0IGxpbmUgNzI2NAoqICAgYHJlZmlsbF9vYmplY3RzYCBhdCBsaW5lIDczOTcKKiAgIGByZWZpbGxfc2hlYWZgIGF0IGxpbmUgMjg3NgoqICAgYGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZmAgYXQgbGluZSA1MTExCiogICBga21lbV9jYWNoZV9yZWZpbGxfc2hlYWZgIGF0IGxpbmUgNTI1MgoqICAgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYCBhdCBsaW5lIDUxOTQKCkdvb2QsIGFuZCBpdCBsb29rcyBsaWtlIGBtbS9zbHViLmNgIGlzIHRoZSBvbmx5IGZpbGUgYWZmZWN0ZWQuCgpOb3csIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QuIFRoZSBrZXkgaXMgaG93IGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgYW5kIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgIGhhdmUgYmVlbiBtb2RpZmllZCwgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgbG9ja2luZyBhbmQgZnJlZWxpc3QgbWFuYWdlbWVudCBkdXJpbmcgYnVsayByZWZpbGxzIGFuZCBzaGVhdmVzLiBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIG5vdyB0YWtlcyBgbi0mZ3Q7bGlzdF9sb2NrYCBhcm91bmQgYHNsYWJfdXBkYXRlX2ZyZWVsaXN0YCBhbmQgdGhlbiBpbW1lZGlhdGVseSBjYWxscyBgYWRkX3BhcnRpYWwobiwgc2xhYiwgQUREX1RPX1RBSUwpYCB1bmRlciB0aGUgc2FtZSBsb2NrLiBUaGlzIGNoYW5nZXMgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgdGhlIGhhbmRsaW5nIG9mIHBhcnRpYWwgc2xhYiBsaXN0cywgbW92aW5nIGZyb20gYSBkZWZlcnJlZCBgcGMuc2xhYnNgIHVwZGF0ZSB0byBhbiBpbW1lZGlhdGUgY2FsbC4KClRoaXMgaXMgYSBjb3JlIG1lbW9yeSBhbGxvY2F0b3IgY2hhbmdlIHJlYWNoYWJsZSB2aWEgY29tbW9uIHN5c2NhbGxzIGFuZCBhbGxvY2F0aW9ucywgZXNwZWNpYWxseSBpbiBRRU1VL3g4Nl82NCBlbnZpcm9ubWVudHMuIEdpdmVuIHRoZXNlIG1vZGlmaWNhdGlvbnMsIHRoaXMgaXMgcHJpbWUgdGVycml0b3J5IGZvciBjb25jdXJyZW5jeSBidWdzLCBsaXN0IGNvcnJ1cHRpb24sIGxvY2tpbmcgaXNzdWVzLCBhbmQgaW5jb25zaXN0ZW5jaWVzIGluIHNsYWIgc3RhdGVzLiBGdXp6aW5nIGlzICphYnNvbHV0ZWx5KiB3YXJyYW50ZWQgaGVyZS4KClNvLCB0aGUgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYDoKKiAgIGBXb3J0aEZ1enppbmdgOiAqKnRydWUqKgoqICAgYFJlYXNvbmluZ2A6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGZyZWVsaXN0IHJldHVybiBsb2dpYyBhbmQgcGFydGlhbCBzbGFiIGxpc3QgaGFuZGxpbmcgdW5kZXIgYG4tJmd0O2xpc3RfbG9ja2AgaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KClgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlKClgIGluIHRoZSBTTFVCIGFsbG9jYXRvciAobW0vc2x1Yi5jKS4gVGhpcyBhZmZlY3RzIFNMVUIgYnVsayBhbGxvY2F0aW9uIGFuZCBzaGVhZiByZWZpbGxpbmcgbG9naWMuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHdhcnJhbnQgZnV6emluZyB0byBkZXRlY3QgcmFjZSBjb25kaXRpb25zIG9yIGxpc3QvbG9jayBjb3JydXB0aW9uLiYjMzQ7CiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O19fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0JiMzNDssICYjMzQ7X19yZWZpbGxfb2JqZWN0c19ub2RlJiMzNDssICYjMzQ7cmVmaWxsX29iamVjdHMmIzM0OywKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0xVQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0JiMzNDssCiAgICAmIzM0O19fcmVmaWxsX29iamVjdHNfbm9kZSYjMzQ7LAogICAgJiMzNDtyZWZpbGxfb2JqZWN0cyYjMzQ7LAogICAgJiMzNDtyZWZpbGxfc2hlYWYmIzM0OywKICAgICYjMzQ7a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfcmVmaWxsX3NoZWFmJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfcmV0dXJuX3NoZWFmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmcmVlbGlzdCByZXR1cm4gYW5kIHBhcnRpYWwgc2xhYiBsaXN0IG1hbmFnZW1lbnQgbG9naWMgdW5kZXIgbi1cdTAwM2VsaXN0X2xvY2sgaW4gX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3QoKSBhbmQgX19yZWZpbGxfb2JqZWN0c19ub2RlKCkgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIChtbS9zbHViLmMpLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgU0xVQiBidWxrIGFsbG9jYXRpb24gYW5kIHNoZWFmIHJlZmlsbGluZyBwYXRocywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGNyaXRpY2FsIGZvciBtZW1vcnkgc2FmZXR5IGFuZCBsb2NrIGNvcnJlY3RuZXNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTFVCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3QmIzM0OywKICAgICYjMzQ7X19yZWZpbGxfb2JqZWN0c19ub2RlJiMzNDssCiAgICAmIzM0O3JlZmlsbF9vYmplY3RzJiMzNDssCiAgICAmIzM0O3JlZmlsbF9zaGVhZiYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYmIzM0OywKICAgICYjMzQ7a21lbV9jYWNoZV9yZWZpbGxfc2hlYWYmIzM0OywKICAgICYjMzQ7a21lbV9jYWNoZV9yZXR1cm5fc2hlYWYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZyZWVsaXN0IHJldHVybiBhbmQgcGFydGlhbCBzbGFiIGxpc3QgbWFuYWdlbWVudCBsb2dpYyB1bmRlciBuLVx1MDAzZWxpc3RfbG9jayBpbiBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdCgpIGFuZCBfX3JlZmlsbF9vYmplY3RzX25vZGUoKSBpbiB0aGUgU0xVQiBhbGxvY2F0b3IgKG1tL3NsdWIuYykuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBTTFVCIGJ1bGsgYWxsb2NhdGlvbiBhbmQgc2hlYWYgcmVmaWxsaW5nIHBhdGhzLCB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgY3JpdGljYWwgZm9yIG1lbW9yeSBzYWZldHkgYW5kIGxvY2sgY29ycmVjdG5lc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBTTFVCIGFsbG9jYXRvciBpbnRlcm5hbCBsb2NraW5nIGFuZCBwYXJ0aWFsIGxpc3QgbWFuYWdlbWVudCBpbiBgbW0vc2x1Yi5jYCAoYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBhbmQgYF9fcmVmaWxsX29iamVjdHNfbm9kZWApLiBTcGVjaWZpY2FsbHksIGl0IGFjcXVpcmVzIHRoZSBub2RlIGxpc3RfbG9jayBhbmQgYWRkcyB0aGUgc2xhYiB0byB0aGUgcGFydGlhbCBsaXN0IGRpcmVjdGx5IGluIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgaW5zdGVhZCBvZiByZS1hZGRpbmcgaXQgdG8gdGhlIGxvY2FsIGBwYy5zbGFic2AgbGlzdCBpbiBgX19yZWZpbGxfb2JqZWN0c19ub2RlYC5cblxuVGhlc2UgY2hhbmdlcyBleGNsdXNpdmVseSBhZmZlY3QgU0xVQiBpbnRlcm5hbCBzdGF0ZSwgbG9ja2luZywgYW5kIGZyZWVsaXN0L3BhcnRpYWwgbGlzdCB0cmFja2luZy4gQW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIGxvY2sgb3JkZXIgaW52ZXJzaW9ucywgbGlzdCBjb3JydXB0aW9uLCBkb3VibGUtZnJlZSwgb3Igc2xhYiBtZXRhZGF0YSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgY2hlY2tzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkIGFjY2Vzc2VzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0MThjY2JhZmQ1OWJiYzY3NTc1ZWYwNDdkMjRmNDZkZDdkZjBlOTQzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAxMzoyNjozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCBmOWI1NmNiNDM5ZTcwLi41Y2JiYWNiOGVlMzJmIDEwMDY0NAotLS0gYS9tbS9zbHViLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2x1Yi5jCkBAIC01Njg0LDYgJiM0Mzs1Njg0LDggQEAgc3RhdGljIGJvb2wgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLAogCQkJCSAgICAgICB2b2lkICpoZWFkLCBpbnQgY250KQogewogCXN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBvbGQsIG5ldzsKJiM0MzsJc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbjsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW9sZC5mcmVlbGlzdCA9IHNsYWItJmd0O2ZyZWVsaXN0OwogCW9sZC5jb3VudGVycyA9IHNsYWItJmd0O2NvdW50ZXJzOwpAQCAtNTY5NSw5ICYjNDM7NTY5NywxNiBAQCBzdGF0aWMgYm9vbCBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsCiAJbmV3LmNvdW50ZXJzID0gb2xkLmNvdW50ZXJzOwogCW5ldy5pbnVzZSAtPSBjbnQ7CiAKLQlpZiAoIXNsYWJfdXBkYXRlX2ZyZWVsaXN0KHMsIHNsYWIsICZhbXA7b2xkLCAmYW1wO25ldywgJiMzNDtfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdCYjMzQ7KSkKJiM0MzsJbiA9IGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJaWYgKCFzbGFiX3VwZGF0ZV9mcmVlbGlzdChzLCBzbGFiLCAmYW1wO29sZCwgJmFtcDtuZXcsICYjMzQ7X19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3QmIzM0OykpIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiAKJiM0MzsJYWRkX3BhcnRpYWwobiwgc2xhYiwgQUREX1RPX1RBSUwpOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTcyOTYsMTAgJiM0Mzs3MzA1LDggQEAgX19yZWZpbGxfb2JqZWN0c19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWkKIAkJCXZvaWQgKmhlYWQgPSBvYmplY3Q7CiAJCQl2b2lkICp0YWlsOwogCi0JCQlpZiAoX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qocywgc2xhYiwgaGVhZCwgY291bnQpKSB7Ci0JCQkJbGlzdF9hZGQoJmFtcDtzbGFiLSZndDtzbGFiX2xpc3QsICZhbXA7cGMuc2xhYnMpOwomIzQzOwkJCWlmIChfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzLCBzbGFiLCBoZWFkLCBjb3VudCkpCiAJCQkJYnJlYWs7Ci0JCQl9CiAKIAkJCWRvIHsKIAkJCQl0YWlsID0gb2JqZWN0OwpAQCAtNzMxMiw3ICYjNDM7NzMxOSw3IEBAIF9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pCiAJCQlicmVhazsKIAl9CiAKLQlpZiAoIWxpc3RfZW1wdHkoJmFtcDtwYy5zbGFicykpIHsKJiM0MzsJaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZhbXA7cGMuc2xhYnMpKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoc2xhYiwgJmFtcDtwYy5zbGFicywgc2xhYl9saXN0KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCwgYXMgSSB1bmRlcnN0YW5kIGl0LgoKKipFdmFsdWF0aW5nIHRoZSBTTFVCIFBhdGNoIGZvciBGdXp6aW5nIE5lZWRzKioKClJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIFNMVUIgcGF0Y2ggcmVxdWlyZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGRldGVjdG9ycyBhcmUgZ29pbmcgdG8gYmUgZ29vZCBlbm91Z2guIFRoYXTigJlzIGEgZ29vZCBxdWVzdGlvbiwgYW5kIHRoZSBhbnN3ZXIsIGFzIHVzdWFsLCBjb21lcyBkb3duIHRvIHRoZSBjb2RlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW4uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7cmUgYWN0dWFsbHkgbG9va2luZyBhdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSBhbmQgcGF0Y2ggZGV0YWlscywgb2J2aW91c2x5LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHB1bGwgdXAgYG1tL3NsdWIuY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCB0aGUgcmVnaW9ucyBtZW50aW9uZWQsIHNwZWNpZmljYWxseSBsaW5lcyA1Njg0IGFuZCA3Mjk2LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIG9mIHRob3NlIHNlY3Rpb25zIG9mIGNvZGUgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZlZWwgZm9yIHRoZSB0eXBlIG9mIG1lbW9yeSBtYW5pcHVsYXRpb24gYmVpbmcgZG9uZSBhbmQgd2hldGhlciBpdCYjMzk7cyB0aGUgc29ydCBvZiB0aGluZyB0aGF0IEtBU0FOIG1pZ2h0IG1pc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdG9vbHMgSSBoYXZlIGF2YWlsYWJsZSB0byBjb25kdWN0IG15IGludmVzdGlnYXRpb24uIFRoaXMgd2lsbCBpbmZsdWVuY2UgbXkgY29uY2x1c2lvbnMgYW5kIHRoZSB0aG9yb3VnaG5lc3Mgb2YgbXkgYW5hbHlzaXMuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpZiBhIHNwZWNpYWxpemVkIEtNU0FOIHNlc3Npb24gaXMgd2FycmFudGVkLCBvciBpZiBLQVNBTiBwcm92aWRlcyBhZGVxdWF0ZSBjb3ZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU2ODA6XHQgKlxuNTY4MTpcdCAqIEZhaWwgaWYgdGhlIHNsYWIgaXNuJiMzOTt0IGZ1bGwgYW55bW9yZSBkdWUgdG8gYSBjb25jdXJyZW50IGZyZWUuXG41NjgyOlx0ICovXG41NjgzOlx0c3RhdGljIGJvb2wgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuNTY4NDpcdFx0XHRcdFx0ICAgICAgIHZvaWQgKmhlYWQsIGludCBjbnQpXG41Njg1Olx0e1xuNTY4NjpcdFx0c3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIG9sZCwgbmV3O1xuNTY4NzpcdFx0c3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbjtcbjU2ODg6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG41Njg5Olx0XG41NjkwOlx0XHRvbGQuZnJlZWxpc3QgPSBzbGFiLVx1MDAzZWZyZWVsaXN0O1xuNTY5MTpcdFx0b2xkLmNvdW50ZXJzID0gc2xhYi1cdTAwM2Vjb3VudGVycztcbjU2OTI6XHRcbjU2OTM6XHRcdGlmIChvbGQuZnJlZWxpc3QpXG41Njk0Olx0XHRcdHJldHVybiBmYWxzZTtcbjU2OTU6XHRcbjU2OTY6XHRcdG5ldy5mcmVlbGlzdCA9IGhlYWQ7XG41Njk3Olx0XHRuZXcuY291bnRlcnMgPSBvbGQuY291bnRlcnM7XG41Njk4Olx0XHRuZXcuaW51c2UgLT0gY250O1xuNTY5OTpcdFxuNTcwMDpcdFx0biA9IGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKTtcbjU3MDE6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG41NzAyOlx0XG41NzAzOlx0XHRpZiAoIXNsYWJfdXBkYXRlX2ZyZWVsaXN0KHMsIHNsYWIsIFx1MDAyNm9sZCwgXHUwMDI2bmV3LCBcJiMzNDtfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFwmIzM0OykpIHtcbjU3MDQ6XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuNTcwNTpcdFx0XHRyZXR1cm4gZmFsc2U7XG41NzA2Olx0XHR9XG41NzA3Olx0XG41NzA4Olx0XHRhZGRfcGFydGlhbChuLCBzbGFiLCBBRERfVE9fVEFJTCk7XG41NzA5Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG41NzEwOlx0XHRyZXR1cm4gdHJ1ZTtcbjU3MTE6XHR9XG41NzEyOlx0XG41NzEzOlx0LypcbjU3MTQ6XHQgKiBTbG93IHBhdGggaGFuZGxpbmcuIFRoaXMgbWF5IHN0aWxsIGJlIGNhbGxlZCBmcmVxdWVudGx5IHNpbmNlIG9iamVjdHNcbjU3MTU6XHQgKiBoYXZlIGEgbG9uZ2VyIGxpZmV0aW1lIHRoYW4gdGhlIGNwdSBzbGFicyBpbiBtb3N0IHByb2Nlc3NpbmcgbG9hZHMuXG41NzE2Olx0ICpcbjU3MTc6XHQgKiBTbyB3ZSBzdGlsbCBhdHRlbXB0IHRvIHJlZHVjZSBjYWNoZSBsaW5lIHVzYWdlLiBKdXN0IHRha2UgdGhlIHNsYWJcbjU3MTg6XHQgKiBsb2NrIGFuZCBmcmVlIHRoZSBpdGVtLiBJZiB0aGVyZSBpcyBubyBhZGRpdGlvbmFsIHBhcnRpYWwgc2xhYlxuNTcxOTpcdCAqIGhhbmRsaW5nIHJlcXVpcmVkIHRoZW4gd2UgY2FuIHJldHVybiBpbW1lZGlhdGVseS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBgbW0vc2x1Yi5jYCDigJMgTGluZSBieSBMaW5lKioKCk9rYXksIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYG1tL3NsdWIuY2AgY29kZSBtb3JlIGRlZXBseSwgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0JiMzNDsuICBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgbWlkZGxlIG9mIHRoZSBmaWxlIHRvIHNlZSB3aGF0IGlzIGhhcHBlbmluZywgc28gbGV0JiMzOTtzIGNoZWNrIGxpbmVzIDcyODAgdGhyb3VnaCA3MzQwLiBJIGV4cGVjdCB0byBnZXQgc29tZSB1c2VmdWwgaW5mb3JtYXRpb24gb24gdGhlIHRvcGljIGF0IGhhbmQgYnkgem9vbWluZyBpbiBvbiB0aGlzIHNlY3Rpb24uIEkgYW0gaW50ZXJlc3RlZCB0byBzZWUgd2hhdCB0aGF0IHBhcnRpY3VsYXIgY29kZSBpcyBkb2luZyB3aXRoaW4gdGhlIGdyZWF0ZXIgY29udGV4dC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJIHdhbnQgdG8gYnVpbGQgYSBiZXR0ZXIgcGljdHVyZSBvZiB3aGF0IGlzIGdvaW5nIG9uIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzI4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3MjgwOlx0XG43MjgxOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFx1MDAyNnBjLnNsYWJzLCBzbGFiX2xpc3QpIHtcbjcyODI6XHRcbjcyODM6XHRcdFx0dW5zaWduZWQgaW50IGNvdW50O1xuNzI4NDpcdFxuNzI4NTpcdFx0XHRsaXN0X2RlbChcdTAwMjZzbGFiLVx1MDAzZXNsYWJfbGlzdCk7XG43Mjg2Olx0XG43Mjg3Olx0XHRcdG9iamVjdCA9IGdldF9mcmVlbGlzdF9ub2ZyZWV6ZShzLCBzbGFiLCBcdTAwMjZjb3VudCk7XG43Mjg4Olx0XG43Mjg5Olx0XHRcdHdoaWxlIChjb3VudCBcdTAwMjZcdTAwMjYgcmVmaWxsZWQgXHUwMDNjIG1heCkge1xuNzI5MDpcdFx0XHRcdHBbcmVmaWxsZWRdID0gb2JqZWN0O1xuNzI5MTpcdFx0XHRcdG9iamVjdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpO1xuNzI5MjpcdFx0XHRcdG1heWJlX3dpcGVfb2JqX2ZyZWVwdHIocywgcFtyZWZpbGxlZF0pO1xuNzI5MzpcdFxuNzI5NDpcdFx0XHRcdHJlZmlsbGVkJiM0MzsmIzQzOztcbjcyOTU6XHRcdFx0XHRjb3VudC0tO1xuNzI5NjpcdFx0XHR9XG43Mjk3Olx0XG43Mjk4Olx0XHRcdC8qXG43Mjk5Olx0XHRcdCAqIEZyZWVsaXN0IGhhZCBtb3JlIG9iamVjdHMgdGhhbiB3ZSBjYW4gYWNjb21tb2RhdGUsIHdlIG5lZWQgdG9cbjczMDA6XHRcdFx0ICogZnJlZSB0aGVtIGJhY2suIEZpcnN0IHdlIHRyeSB0byBiZSBvcHRpbWlzdGljIGFuZCBhc3N1bWUgdGhlXG43MzAxOlx0XHRcdCAqIHNsYWIgaXMgc3RpbGwgZnVsbCBzaW5jZSB3ZSBqdXN0IGRldGFjaGVkIGl0cyBmcmVlbGlzdC5cbjczMDI6XHRcdFx0ICogT3RoZXJ3aXNlIHdlIG11c3QgZmluZCB0aGUgdGFpbCBvYmplY3QuXG43MzAzOlx0XHRcdCAqL1xuNzMwNDpcdFx0XHRpZiAodW5saWtlbHkoY291bnQpKSB7XG43MzA1Olx0XHRcdFx0dm9pZCAqaGVhZCA9IG9iamVjdDtcbjczMDY6XHRcdFx0XHR2b2lkICp0YWlsO1xuNzMwNzpcdFxuNzMwODpcdFx0XHRcdGlmIChfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzLCBzbGFiLCBoZWFkLCBjb3VudCkpXG43MzA5Olx0XHRcdFx0XHRicmVhaztcbjczMTA6XHRcbjczMTE6XHRcdFx0XHRkbyB7XG43MzEyOlx0XHRcdFx0XHR0YWlsID0gb2JqZWN0O1xuNzMxMzpcdFx0XHRcdFx0b2JqZWN0ID0gZ2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCk7XG43MzE0Olx0XHRcdFx0fSB3aGlsZSAob2JqZWN0KTtcbjczMTU6XHRcdFx0XHRfX3NsYWJfZnJlZShzLCBzbGFiLCBoZWFkLCB0YWlsLCBjb3VudCwgX1JFVF9JUF8pO1xuNzMxNjpcdFx0XHR9XG43MzE3Olx0XG43MzE4Olx0XHRcdGlmIChyZWZpbGxlZCBcdTAwM2U9IG1heClcbjczMTk6XHRcdFx0XHRicmVhaztcbjczMjA6XHRcdH1cbjczMjE6XHRcbjczMjI6XHRcdGlmICh1bmxpa2VseSghbGlzdF9lbXB0eShcdTAwMjZwYy5zbGFicykpKSB7XG43MzIzOlx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG43MzI0Olx0XG43MzI1Olx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2xhYiwgXHUwMDI2cGMuc2xhYnMsIHNsYWJfbGlzdClcbjczMjY6XHRcdFx0XHRzZXRfbm9kZV9wYXJ0aWFsX3N0YXRlKG4sIHNsYWIpO1xuNzMyNzpcdFxuNzMyODpcdFx0XHRsaXN0X3NwbGljZV90YWlsKFx1MDAyNnBjLnNsYWJzLCBcdTAwMjZuLVx1MDAzZXBhcnRpYWwpO1xuNzMyOTpcdFxuNzMzMDpcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG43MzMxOlx0XHR9XG43MzMyOlx0XG43MzMzOlx0XHRyZXR1cm4gcmVmaWxsZWQ7XG43MzM0Olx0fVxuNzMzNTpcdFxuNzMzNjpcdCNpZmRlZiBDT05GSUdfTlVNQVxuNzMzNzpcdHN0YXRpYyB1bnNpZ25lZCBpbnRcbjczMzg6XHRfX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbjczMzk6XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbWF4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjM4CgkJCQkJCQlvdXRwdXQ6IDIyMwoJCQkJCQkJdGhvdWdodHM6IDEyMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqU0xVQiBGcmVlbGlzdCBSZXR1cm4gT3B0aW1pemF0aW9uIEFuYWx5c2lzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIG9wdGltaXppbmcgdGhlIGZyZWVsaXN0IHJldHVybiBwYXRoIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIFNwZWNpZmljYWxseSwgaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KClgLCB3ZSYjMzk7dmUgaW50cm9kdWNlZCBhIGxvY2sgKGBuLSZndDtsaXN0X2xvY2tgKSBhcm91bmQgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaW52b2x2aW5nIGBzbGFiX3VwZGF0ZV9mcmVlbGlzdCgpYCBhbmQgdGhlIHN1YnNlcXVlbnQgYGFkZF9wYXJ0aWFsKClgIGNhbGwuIFByZXZpb3VzbHksIHRoaXMgd2FzIGhhbmRsZWQgYXQgdGhlIGNhbGxlciBpbiBgX19yZWZpbGxfb2JqZWN0c19ub2RlKClgLiBUaGUgdXBkYXRlIGFsc28gcmVtb3ZlcyB0aGUgYGxpc3RfYWRkYCB3aXRoaW4gYF9fcmVmaWxsX29iamVjdHNfbm9kZWAuCgpFc3NlbnRpYWxseSwgdGhpcyBjb25zb2xpZGF0ZXMgdGhlIGxvY2sgYWNxdWlzaXRpb24gYW5kIHBhcnRpYWwgc2xhYiBhZGRpdGlvbiBsb2dpYy4gSW5zdGVhZCBvZiByZXR1cm5pbmcgdG8gdGhlIGNhbGxlciB0byBhZGQgaXQgdG8gdGhlIGBwYy5zbGFic2AgbGlzdCwgdGhlIHBhcnRpYWwgc2xhYiBhZGRpdGlvbiBpcyBoYW5kbGVkIGRpcmVjdGx5LiBUaGUgbG9jayBpcyBoZWxkIGR1cmluZyB0aGUgY3J1Y2lhbCB1cGRhdGUgYW5kIGFkZGl0aW9uLCBlbnN1cmluZyBhdG9taWNpdHkuCgpGcm9tIG15IHBlcnNwZWN0aXZlLCBhcyBhIFNMVUIgZXhwZXJ0LCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgYWxsb2NhdG9yIGludGVybmFsczogbG9jayBhY3F1aXNpdGlvbiwgZnJlZWxpc3QgaGFuZGxpbmcsIGFuZCB0aGUgbWFuYWdlbWVudCBvZiBwYXJ0aWFsIHNsYWJzLiBUaGUgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgbWFpbnRhaW5pbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIGF2b2lkaW5nIGNvbmN1cnJlbmN5IGlzc3VlcyB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLgoKTXkgYW5hbHlzaXMgZm9jdXNlcyBvbiBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBkb3VibGUgYWRkaXRpb25zIHRvIGxpc3RzLCBhbmQgZ2VuZXJhbCBsaXN0IGNvcnJ1cHRpb24uIFRoZSBhZGRpdGlvbiBvZiB0aGUgbG9jayBpcyBjbGVhcmx5IGEgbW92ZSB0b3dhcmQgaW5jcmVhc2VkIGNvbmN1cnJlbmN5IHNhZmV0eSwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGZyZWVsaXN0IG1hbmlwdWxhdGlvbi4gQnkgbW92aW5nIHRoZSBgYWRkX3BhcnRpYWxgIGNhbGwgaW50byB0aGUgY3JpdGljYWwgc2VjdGlvbiwgd2UgYXJlIGVuc3VyaW5nIHRoYXQgdXBkYXRlcyB0byB0aGUgcGFydGlhbCBzbGFiIGxpc3RzIGFyZSBhdG9taWMuCgpHaXZlbiBteSBleHBlcmllbmNlLCBJIGRvIG5vdCBleHBlY3QgdGhpcyBwYXRjaCB0byBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29uZGl0aW9uYWwgbG9naWMsIGNyZWF0ZSB1bmluaXRpYWxpemVkIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBvciBoYXZlIGFueSByZWxhdGVkIGlzc3Vlcy4gVGhlIGBzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnNgIHZhcmlhYmxlcyBhcmUgYXNzaWduZWQgcHJvcGVybHkuIFRoZSBgZmxhZ3NgIHZhcmlhYmxlIGlzIGJlaW5nIGluaXRpYWxpemVkIGFzIHdlbGwuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYnV0IEtBU0FOIGFuZCBMT0NLREVQIGFyZS4gS0FTQU4gaXMgc3VpdGFibGUgZm9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gTE9DS0RFUCwgb24gdGhlIG90aGVyIGhhbmQsIGNhbiBoZWxwIHRvIGNhdGNoIGxvY2sgb3JkZXJpbmcgdmlvbGF0aW9ucyBvciBkZWFkbG9ja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFNMVUIgYWxsb2NhdG9yIGludGVybmFsIGxvY2tpbmcgYW5kIHBhcnRpYWwgbGlzdCBtYW5hZ2VtZW50IGluIGBtbS9zbHViLmNgIChgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYCkuIFNwZWNpZmljYWxseSwgaXQgYWNxdWlyZXMgdGhlIG5vZGUgbGlzdF9sb2NrIGFuZCBhZGRzIHRoZSBzbGFiIHRvIHRoZSBwYXJ0aWFsIGxpc3QgZGlyZWN0bHkgaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBpbnN0ZWFkIG9mIHJlLWFkZGluZyBpdCB0byB0aGUgbG9jYWwgYHBjLnNsYWJzYCBsaXN0IGluIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgLlxuXG5UaGVzZSBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IGFmZmVjdCBTTFVCIGludGVybmFsIHN0YXRlLCBsb2NraW5nLCBhbmQgZnJlZWxpc3QvcGFydGlhbCBsaXN0IHRyYWNraW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKHN1Y2ggYXMgbG9jayBvcmRlciBpbnZlcnNpb25zLCBsaXN0IGNvcnJ1cHRpb24sIGRvdWJsZS1mcmVlLCBvciBzbGFiIG1ldGFkYXRhIGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBjaGVja3MuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGQgYWNjZXNzZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFNMVUIgYWxsb2NhdG9yIGludGVybmFsIGxvY2tpbmcgYW5kIHBhcnRpYWwgbGlzdCBtYW5hZ2VtZW50IGluIGBtbS9zbHViLmNgIChgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYCkuIFNwZWNpZmljYWxseSwgaXQgYWNxdWlyZXMgdGhlIG5vZGUgbGlzdF9sb2NrIGFuZCBhZGRzIHRoZSBzbGFiIHRvIHRoZSBwYXJ0aWFsIGxpc3QgZGlyZWN0bHkgaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBpbnN0ZWFkIG9mIHJlLWFkZGluZyBpdCB0byB0aGUgbG9jYWwgYHBjLnNsYWJzYCBsaXN0IGluIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgLlxuXG5UaGVzZSBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IGFmZmVjdCBTTFVCIGludGVybmFsIHN0YXRlLCBsb2NraW5nLCBhbmQgZnJlZWxpc3QvcGFydGlhbCBsaXN0IHRyYWNraW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKHN1Y2ggYXMgbG9jayBvcmRlciBpbnZlcnNpb25zLCBsaXN0IGNvcnJ1cHRpb24sIGRvdWJsZS1mcmVlLCBvciBzbGFiIG1ldGFkYXRhIGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBjaGVja3MuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGQgYWNjZXNzZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6MjY6MzkuODY1MzY1OTExWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwODE4MjU1MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMVUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFwiLFxuICAgIFwiX19yZWZpbGxfb2JqZWN0c19ub2RlXCIsXG4gICAgXCJyZWZpbGxfb2JqZWN0c1wiLFxuICAgIFwicmVmaWxsX3NoZWFmXCIsXG4gICAgXCJrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWZcIixcbiAgICBcImttZW1fY2FjaGVfcmVmaWxsX3NoZWFmXCIsXG4gICAgXCJrbWVtX2NhY2hlX3JldHVybl9zaGVhZlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgU0xVQiBhbGxvY2F0b3IgaW50ZXJuYWwgbG9ja2luZyBhbmQgcGFydGlhbCBsaXN0IG1hbmFnZW1lbnQgaW4gYG1tL3NsdWIuY2AgKGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgYW5kIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgKS4gU3BlY2lmaWNhbGx5LCBpdCBhY3F1aXJlcyB0aGUgbm9kZSBsaXN0X2xvY2sgYW5kIGFkZHMgdGhlIHNsYWIgdG8gdGhlIHBhcnRpYWwgbGlzdCBkaXJlY3RseSBpbiBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGluc3RlYWQgb2YgcmUtYWRkaW5nIGl0IHRvIHRoZSBsb2NhbCBgcGMuc2xhYnNgIGxpc3QgaW4gYF9fcmVmaWxsX29iamVjdHNfbm9kZWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBleGNsdXNpdmVseSBhZmZlY3QgU0xVQiBpbnRlcm5hbCBzdGF0ZSwgbG9ja2luZywgYW5kIGZyZWVsaXN0L3BhcnRpYWwgbGlzdCB0cmFja2luZy4gQW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIGxvY2sgb3JkZXIgaW52ZXJzaW9ucywgbGlzdCBjb3JydXB0aW9uLCBkb3VibGUtZnJlZSwgb3Igc2xhYiBtZXRhZGF0YSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgY2hlY2tzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkIGFjY2Vzc2VzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZyZWVsaXN0IHJldHVybiBhbmQgcGFydGlhbCBzbGFiIGxpc3QgbWFuYWdlbWVudCBsb2dpYyB1bmRlciBuLVxcdTAwM2VsaXN0X2xvY2sgaW4gX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3QoKSBhbmQgX19yZWZpbGxfb2JqZWN0c19ub2RlKCkgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIChtbS9zbHViLmMpLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgU0xVQiBidWxrIGFsbG9jYXRpb24gYW5kIHNoZWFmIHJlZmlsbGluZyBwYXRocywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGNyaXRpY2FsIGZvciBtZW1vcnkgc2FmZXR5IGFuZCBsb2NrIGNvcnJlY3RuZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyNjozOS44NjUzNzA5OTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjMyMzQyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MThjY2JhZmQ1OWJiYzY3NTc1ZWYwNDdkMjRmNDZkZDdkZjBlOTQzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMTM6MjY6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXFxuaW5kZXggZjliNTZjYjQzOWU3MC4uNWNiYmFjYjhlZTMyZiAxMDA2NDRcXG4tLS0gYS9tbS9zbHViLmNcXG4rKysgYi9tbS9zbHViLmNcXG5AQCAtNTY4NCw2ICs1Njg0LDggQEAgc3RhdGljIGJvb2wgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdm9pZCAqaGVhZCwgaW50IGNudClcXG4ge1xcbiBcXHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7XFxuK1xcdHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm47XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbiBcXHRvbGQuZnJlZWxpc3QgPSBzbGFiLVxcdTAwM2VmcmVlbGlzdDtcXG4gXFx0b2xkLmNvdW50ZXJzID0gc2xhYi1cXHUwMDNlY291bnRlcnM7XFxuQEAgLTU2OTUsOSArNTY5NywxNiBAQCBzdGF0aWMgYm9vbCBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuIFxcdG5ldy5jb3VudGVycyA9IG9sZC5jb3VudGVycztcXG4gXFx0bmV3LmludXNlIC09IGNudDtcXG4gXFxuLVxcdGlmICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXFx1MDAyNm9sZCwgXFx1MDAyNm5ldywgXFxcIl9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0XFxcIikpXFxuK1xcdG4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7XFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdGlmICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXFx1MDAyNm9sZCwgXFx1MDAyNm5ldywgXFxcIl9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0XFxcIikpIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbiBcXG4rXFx0YWRkX3BhcnRpYWwobiwgc2xhYiwgQUREX1RPX1RBSUwpO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuQEAgLTcyOTYsMTAgKzczMDUsOCBAQCBfX3JlZmlsbF9vYmplY3RzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaVxcbiBcXHRcXHRcXHR2b2lkICpoZWFkID0gb2JqZWN0O1xcbiBcXHRcXHRcXHR2b2lkICp0YWlsO1xcbiBcXG4tXFx0XFx0XFx0aWYgKF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHMsIHNsYWIsIGhlYWQsIGNvdW50KSkge1xcbi1cXHRcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2c2xhYi1cXHUwMDNlc2xhYl9saXN0LCBcXHUwMDI2cGMuc2xhYnMpO1xcbitcXHRcXHRcXHRpZiAoX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qocywgc2xhYiwgaGVhZCwgY291bnQpKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0ZG8ge1xcbiBcXHRcXHRcXHRcXHR0YWlsID0gb2JqZWN0O1xcbkBAIC03MzEyLDcgKzczMTksNyBAQCBfX3JlZmlsbF9vYmplY3RzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZwYy5zbGFicykpIHtcXG4rXFx0aWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFxcdTAwMjZwYy5zbGFicykpKSB7XFxuIFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2xhYiwgXFx1MDAyNnBjLnNsYWJzLCBzbGFiX2xpc3QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI2OjQxLjU4OTYwMjE5NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzAwNjI5MDM4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0xVQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0XCIsXG4gICAgXCJfX3JlZmlsbF9vYmplY3RzX25vZGVcIixcbiAgICBcInJlZmlsbF9vYmplY3RzXCIsXG4gICAgXCJyZWZpbGxfc2hlYWZcIixcbiAgICBcImttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZlwiLFxuICAgIFwia21lbV9jYWNoZV9yZWZpbGxfc2hlYWZcIixcbiAgICBcImttZW1fY2FjaGVfcmV0dXJuX3NoZWFmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZyZWVsaXN0IHJldHVybiBhbmQgcGFydGlhbCBzbGFiIGxpc3QgbWFuYWdlbWVudCBsb2dpYyB1bmRlciBuLVxcdTAwM2VsaXN0X2xvY2sgaW4gX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3QoKSBhbmQgX19yZWZpbGxfb2JqZWN0c19ub2RlKCkgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIChtbS9zbHViLmMpLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgU0xVQiBidWxrIGFsbG9jYXRpb24gYW5kIHNoZWFmIHJlZmlsbGluZyBwYXRocywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGNyaXRpY2FsIGZvciBtZW1vcnkgc2FmZXR5IGFuZCBsb2NrIGNvcnJlY3RuZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQxOGNjYmFmZDU5YmJjNjc1NzVlZjA0N2QyNGY0NmRkN2RmMGU5NDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDEzOjI2OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCBmOWI1NmNiNDM5ZTcwLi41Y2JiYWNiOGVlMzJmIDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4rKysgYi9tbS9zbHViLmNcbkBAIC01Njg0LDYgKzU2ODQsOCBAQCBzdGF0aWMgYm9vbCBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHRcdFx0XHQgICAgICAgdm9pZCAqaGVhZCwgaW50IGNudClcbiB7XG4gXHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7XG4rXHRzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdG9sZC5mcmVlbGlzdCA9IHNsYWItXHUwMDNlZnJlZWxpc3Q7XG4gXHRvbGQuY291bnRlcnMgPSBzbGFiLVx1MDAzZWNvdW50ZXJzO1xuQEAgLTU2OTUsOSArNTY5NywxNiBAQCBzdGF0aWMgYm9vbCBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHRuZXcuY291bnRlcnMgPSBvbGQuY291bnRlcnM7XG4gXHRuZXcuaW51c2UgLT0gY250O1xuIFxuLVx0aWYgKCFzbGFiX3VwZGF0ZV9mcmVlbGlzdChzLCBzbGFiLCBcdTAwMjZvbGQsIFx1MDAyNm5ldywgXCJfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFwiKSlcbitcdG4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuK1xuK1x0aWYgKCFzbGFiX3VwZGF0ZV9mcmVlbGlzdChzLCBzbGFiLCBcdTAwMjZvbGQsIFx1MDAyNm5ldywgXCJfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFwiKSkge1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4gXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbiBcbitcdGFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbkBAIC03Mjk2LDEwICs3MzA1LDggQEAgX19yZWZpbGxfb2JqZWN0c19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWlcbiBcdFx0XHR2b2lkICpoZWFkID0gb2JqZWN0O1xuIFx0XHRcdHZvaWQgKnRhaWw7XG4gXG4tXHRcdFx0aWYgKF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHMsIHNsYWIsIGhlYWQsIGNvdW50KSkge1xuLVx0XHRcdFx0bGlzdF9hZGQoXHUwMDI2c2xhYi1cdTAwM2VzbGFiX2xpc3QsIFx1MDAyNnBjLnNsYWJzKTtcbitcdFx0XHRpZiAoX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qocywgc2xhYiwgaGVhZCwgY291bnQpKVxuIFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuIFxuIFx0XHRcdGRvIHtcbiBcdFx0XHRcdHRhaWwgPSBvYmplY3Q7XG5AQCAtNzMxMiw3ICs3MzE5LDcgQEAgX19yZWZpbGxfb2JqZWN0c19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWlcbiBcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmICghbGlzdF9lbXB0eShcdTAwMjZwYy5zbGFicykpIHtcbitcdGlmICh1bmxpa2VseSghbGlzdF9lbXB0eShcdTAwMjZwYy5zbGFicykpKSB7XG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4gXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2xhYiwgXHUwMDI2cGMuc2xhYnMsIHNsYWJfbGlzdClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI2OjQxLjU4OTYwNDUzNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTY3MTk1NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgc2x1Yi5jIFBhdGNoKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGBtbS9zbHViLmNgIHBhdGNoLiBNeSBpbml0aWFsIG1vdmUgaXMgYWx3YXlzIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiB3aGF0J3MgYmVpbmcgbW9kaWZpZWQuIEknbGwgcmVhY2ggZm9yIGVpdGhlciBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiB0aGUgZGlmZiBpdHNlbGYsIG9yIG1heWJlIGZpcmUgdXAgYGdyZXBwZXJgIGlmIEkganVzdCB3YW50IHRvIHF1aWNrbHkgc3BvdCB0aGUga2V5d29yZHMuIFRoYXQnbGwgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBjb250ZXh0LlxuXG5PbmNlIEkgaGF2ZSBhIGdyYXNwIG9mIHRoZSBvdmVyYWxsIGNoYW5nZXMsIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscy4gSSdsbCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gdGhlIGFyZWEgYXJvdW5kIGxpbmVzIDU2ODQgYW5kIDcyOTYgd2l0aGluIGBtbS9zbHViLmNgLiBUaG9zZSBsaW5lIG51bWJlcnMgYXJlIG9mdGVuIGdvb2QgaW5kaWNhdG9ycyBvZiBzaWduaWZpY2FudCBzdHJ1Y3R1cmFsIGNoYW5nZXMsIG9yIGNvcmUgZnVuY3Rpb24gY2FsbHMuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzc3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyNjo1Mi41NTY4MDE5NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zbHViLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTY3NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTY3NTpcXHRcXG41Njc2OlxcdC8qXFxuNTY3NzpcXHQgKiBUcnkgcmV0dXJuaW5nIChyZW1haW5kZXIgb2YpIHRoZSBmcmVlbGlzdCB0aGF0IHdlIGp1c3QgZGV0YWNoZWQgZnJvbSB0aGVcXG41Njc4OlxcdCAqIHNsYWIuICBPcHRpbWlzdGljYWxseSBhc3N1bWUgdGhlIHNsYWIgaXMgc3RpbGwgZnVsbCwgc28gd2UgZG9uJ3QgbmVlZCB0byBmaW5kXFxuNTY3OTpcXHQgKiB0aGUgdGFpbCBvZiB0aGUgZGV0YWNoZWQgZnJlZWxpc3QuXFxuNTY4MDpcXHQgKlxcbjU2ODE6XFx0ICogRmFpbCBpZiB0aGUgc2xhYiBpc24ndCBmdWxsIGFueW1vcmUgZHVlIHRvIGEgY29uY3VycmVudCBmcmVlLlxcbjU2ODI6XFx0ICovXFxuNTY4MzpcXHRzdGF0aWMgYm9vbCBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuNTY4NDpcXHRcXHRcXHRcXHRcXHQgICAgICAgdm9pZCAqaGVhZCwgaW50IGNudClcXG41Njg1OlxcdHtcXG41Njg2OlxcdFxcdHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBvbGQsIG5ldztcXG41Njg3OlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm47XFxuNTY4ODpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjU2ODk6XFx0XFxuNTY5MDpcXHRcXHRvbGQuZnJlZWxpc3QgPSBzbGFiLVxcdTAwM2VmcmVlbGlzdDtcXG41NjkxOlxcdFxcdG9sZC5jb3VudGVycyA9IHNsYWItXFx1MDAzZWNvdW50ZXJzO1xcbjU2OTI6XFx0XFxuNTY5MzpcXHRcXHRpZiAob2xkLmZyZWVsaXN0KVxcbjU2OTQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjU2OTU6XFx0XFxuNTY5NjpcXHRcXHRuZXcuZnJlZWxpc3QgPSBoZWFkO1xcbjU2OTc6XFx0XFx0bmV3LmNvdW50ZXJzID0gb2xkLmNvdW50ZXJzO1xcbjU2OTg6XFx0XFx0bmV3LmludXNlIC09IGNudDtcXG41Njk5OlxcdFxcbjU3MDA6XFx0XFx0biA9IGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKTtcXG41NzAxOlxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG41NzAyOlxcdFxcbjU3MDM6XFx0XFx0aWYgKCFzbGFiX3VwZGF0ZV9mcmVlbGlzdChzLCBzbGFiLCBcXHUwMDI2b2xkLCBcXHUwMDI2bmV3LCBcXFwiX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RcXFwiKSkge1xcbjU3MDQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XFxuNTcwNTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNTcwNjpcXHRcXHR9XFxuNTcwNzpcXHRcXG41NzA4OlxcdFxcdGFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKTtcXG41NzA5OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xcbjU3MTA6XFx0XFx0cmV0dXJuIHRydWU7XFxuNTcxMTpcXHR9XFxuNTcxMjpcXHRcXG41NzEzOlxcdC8qXFxuNTcxNDpcXHQgKiBTbG93IHBhdGggaGFuZGxpbmcuIFRoaXMgbWF5IHN0aWxsIGJlIGNhbGxlZCBmcmVxdWVudGx5IHNpbmNlIG9iamVjdHNcXG41NzE1OlxcdCAqIGhhdmUgYSBsb25nZXIgbGlmZXRpbWUgdGhhbiB0aGUgY3B1IHNsYWJzIGluIG1vc3QgcHJvY2Vzc2luZyBsb2Fkcy5cXG41NzE2OlxcdCAqXFxuNTcxNzpcXHQgKiBTbyB3ZSBzdGlsbCBhdHRlbXB0IHRvIHJlZHVjZSBjYWNoZSBsaW5lIHVzYWdlLiBKdXN0IHRha2UgdGhlIHNsYWJcXG41NzE4OlxcdCAqIGxvY2sgYW5kIGZyZWUgdGhlIGl0ZW0uIElmIHRoZXJlIGlzIG5vIGFkZGl0aW9uYWwgcGFydGlhbCBzbGFiXFxuNTcxOTpcXHQgKiBoYW5kbGluZyByZXF1aXJlZCB0aGVuIHdlIGNhbiByZXR1cm4gaW1tZWRpYXRlbHkuXFxuNTcyMDpcXHQgKi9cXG41NzIxOlxcdHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG41NzIyOlxcdFxcdFxcdFxcdHZvaWQgKmhlYWQsIHZvaWQgKnRhaWwsIGludCBjbnQsXFxuNTcyMzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIpXFxuNTcyNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6MjY6NTIuNTU3MjQwNTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODI2OTQxMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgU2x1YiBBbGxvY2F0b3IqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbW0vc2x1Yi5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDcyOTAuIEkga25vdyB0aGlzIGNvZGUgcHJldHR5IHdlbGwsIHNvIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjb3JlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHJvdXRpbmVzIG9yIHBlcmhhcHMgc29tZSBjcml0aWNhbCBsb2NraW5nIG1lY2hhbmlzbSB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgbGluZSB0aWVzIGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIG9iamVjdCBtYW5hZ2VtZW50LiBXaGF0IHNwZWNpZmljIGFzcGVjdHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYXJlIGJlaW5nIGFkZHJlc3NlZCBoZXJlPyBJcyBpdCByZWxhdGVkIHRvIGNhY2hlIGxpbmUgYWxpZ25tZW50LCBOVU1BIG5vZGUgaGFuZGxpbmcsIG9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6MjY6NTQuMzg0MTg2MjkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgwMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NsdWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjcwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MjcwOlxcdFxcdHVuc2lnbmVkIGludCByZWZpbGxlZCA9IDA7XFxuNzI3MTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjcyNzI6XFx0XFx0dm9pZCAqb2JqZWN0O1xcbjcyNzM6XFx0XFxuNzI3NDpcXHRcXHRwYy5mbGFncyA9IGdmcDtcXG43Mjc1OlxcdFxcdHBjLm1pbl9vYmplY3RzID0gbWluO1xcbjcyNzY6XFx0XFx0cGMubWF4X29iamVjdHMgPSBtYXg7XFxuNzI3NzpcXHRcXG43Mjc4OlxcdFxcdGlmICghZ2V0X3BhcnRpYWxfbm9kZV9idWxrKHMsIG4sIFxcdTAwMjZwYywgYWxsb3dfc3BpbikpXFxuNzI3OTpcXHRcXHRcXHRyZXR1cm4gMDtcXG43MjgwOlxcdFxcbjcyODE6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCBcXHUwMDI2cGMuc2xhYnMsIHNsYWJfbGlzdCkge1xcbjcyODI6XFx0XFxuNzI4MzpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuNzI4NDpcXHRcXG43Mjg1OlxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZzbGFiLVxcdTAwM2VzbGFiX2xpc3QpO1xcbjcyODY6XFx0XFxuNzI4NzpcXHRcXHRcXHRvYmplY3QgPSBnZXRfZnJlZWxpc3Rfbm9mcmVlemUocywgc2xhYiwgXFx1MDAyNmNvdW50KTtcXG43Mjg4OlxcdFxcbjcyODk6XFx0XFx0XFx0d2hpbGUgKGNvdW50IFxcdTAwMjZcXHUwMDI2IHJlZmlsbGVkIFxcdTAwM2MgbWF4KSB7XFxuNzI5MDpcXHRcXHRcXHRcXHRwW3JlZmlsbGVkXSA9IG9iamVjdDtcXG43MjkxOlxcdFxcdFxcdFxcdG9iamVjdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpO1xcbjcyOTI6XFx0XFx0XFx0XFx0bWF5YmVfd2lwZV9vYmpfZnJlZXB0cihzLCBwW3JlZmlsbGVkXSk7XFxuNzI5MzpcXHRcXG43Mjk0OlxcdFxcdFxcdFxcdHJlZmlsbGVkKys7XFxuNzI5NTpcXHRcXHRcXHRcXHRjb3VudC0tO1xcbjcyOTY6XFx0XFx0XFx0fVxcbjcyOTc6XFx0XFxuNzI5ODpcXHRcXHRcXHQvKlxcbjcyOTk6XFx0XFx0XFx0ICogRnJlZWxpc3QgaGFkIG1vcmUgb2JqZWN0cyB0aGFuIHdlIGNhbiBhY2NvbW1vZGF0ZSwgd2UgbmVlZCB0b1xcbjczMDA6XFx0XFx0XFx0ICogZnJlZSB0aGVtIGJhY2suIEZpcnN0IHdlIHRyeSB0byBiZSBvcHRpbWlzdGljIGFuZCBhc3N1bWUgdGhlXFxuNzMwMTpcXHRcXHRcXHQgKiBzbGFiIGlzIHN0aWxsIGZ1bGwgc2luY2Ugd2UganVzdCBkZXRhY2hlZCBpdHMgZnJlZWxpc3QuXFxuNzMwMjpcXHRcXHRcXHQgKiBPdGhlcndpc2Ugd2UgbXVzdCBmaW5kIHRoZSB0YWlsIG9iamVjdC5cXG43MzAzOlxcdFxcdFxcdCAqL1xcbjczMDQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGNvdW50KSkge1xcbjczMDU6XFx0XFx0XFx0XFx0dm9pZCAqaGVhZCA9IG9iamVjdDtcXG43MzA2OlxcdFxcdFxcdFxcdHZvaWQgKnRhaWw7XFxuNzMwNzpcXHRcXG43MzA4OlxcdFxcdFxcdFxcdGlmIChfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzLCBzbGFiLCBoZWFkLCBjb3VudCkpXFxuNzMwOTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG43MzEwOlxcdFxcbjczMTE6XFx0XFx0XFx0XFx0ZG8ge1xcbjczMTI6XFx0XFx0XFx0XFx0XFx0dGFpbCA9IG9iamVjdDtcXG43MzEzOlxcdFxcdFxcdFxcdFxcdG9iamVjdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpO1xcbjczMTQ6XFx0XFx0XFx0XFx0fSB3aGlsZSAob2JqZWN0KTtcXG43MzE1OlxcdFxcdFxcdFxcdF9fc2xhYl9mcmVlKHMsIHNsYWIsIGhlYWQsIHRhaWwsIGNvdW50LCBfUkVUX0lQXyk7XFxuNzMxNjpcXHRcXHRcXHR9XFxuNzMxNzpcXHRcXG43MzE4OlxcdFxcdFxcdGlmIChyZWZpbGxlZCBcXHUwMDNlPSBtYXgpXFxuNzMxOTpcXHRcXHRcXHRcXHRicmVhaztcXG43MzIwOlxcdFxcdH1cXG43MzIxOlxcdFxcbjczMjI6XFx0XFx0aWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFxcdTAwMjZwYy5zbGFicykpKSB7XFxuNzMyMzpcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XFxuNzMyNDpcXHRcXG43MzI1OlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2xhYiwgXFx1MDAyNnBjLnNsYWJzLCBzbGFiX2xpc3QpXFxuNzMyNjpcXHRcXHRcXHRcXHRzZXRfbm9kZV9wYXJ0aWFsX3N0YXRlKG4sIHNsYWIpO1xcbjczMjc6XFx0XFxuNzMyODpcXHRcXHRcXHRsaXN0X3NwbGljZV90YWlsKFxcdTAwMjZwYy5zbGFicywgXFx1MDAyNm4tXFx1MDAzZXBhcnRpYWwpO1xcbjczMjk6XFx0XFxuNzMzMDpcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG43MzMxOlxcdFxcdH1cXG43MzMyOlxcdFxcbjczMzM6XFx0XFx0cmV0dXJuIHJlZmlsbGVkO1xcbjczMzQ6XFx0fVxcbjczMzU6XFx0XFxuNzMzNjpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG43MzM3OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnRcXG43MzM4OlxcdF9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxcbjczMzk6XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbWF4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyNjo1NC4zODQ5NzEwODFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTUyNjA1Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGF0YSBSZWZpbGwgTWVjaGFuaXNtKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyB0cmlnZ2VyaW5nIHRoZXNlIHJlZmlsbCBmdW5jdGlvbnMg4oCTIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19hbnlgLiBJdCdzIGEga2V5IHBhcnQgb2YgdGhlIGRhdGEgZmxvdywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIFRoZSBiZXN0IGFwcHJvYWNoIGhlcmUgaXMgZ29pbmcgdG8gYmUgdHJhY2luZyB0aGUgY2FsbHMuIEknbGwgZ2V0IGEgbGlzdCBvZiBhbGwgdGhlIHBsYWNlcyBpbiB0aGUgY29kZWJhc2UgdGhhdCB1c2UgdGhlc2UgZnVuY3Rpb25zLiBBIGBncmVwYCBzZWFyY2ggaXMgdGhlIG9idmlvdXMgc29sdXRpb24gdG8gZmluZCBhbGwgaW5zdGFuY2VzIG9mIHRob3NlIGZ1bmN0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIG1hcCBvZiB3aGVyZSB0aGVzZSBhcmUgdXNlZCBhbmQgd2hhdCdzIGxlYWRpbmcgdG8gdGhlaXIgZXhlY3V0aW9uLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgd2hvbGUgcGljdHVyZSBhbmQgYW55IHBvc3NpYmxlIHByb2JsZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTgzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyNjo1Ni4zMzc1NzkwNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA3MjE3MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcmVmaWxsX29iamVjdHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTcyNjM9c3RhdGljIHVuc2lnbmVkIGludFxcbm1tL3NsdWIuYzo3MjY0Ol9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG5tbS9zbHViLmMtNzI2NS1cXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbWF4LCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxcbi0tXFxubW0vc2x1Yi5jPTczMzc9c3RhdGljIHVuc2lnbmVkIGludFxcbm1tL3NsdWIuYzo3MzM4Ol9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxcbm1tL3NsdWIuYy03MzM5LVxcdFxcdCAgICAgdW5zaWduZWQgaW50IG1heClcXG4tLVxcbm1tL3NsdWIuYy03MzY1LVxcbm1tL3NsdWIuYzo3MzY2OlxcdFxcdFxcdHIgPSBfX3JlZmlsbF9vYmplY3RzX25vZGUocywgcCwgZ2ZwLCBtaW4sIG1heCwgbixcXG5tbS9zbHViLmMtNzM2Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIC8qIGFsbG93X3NwaW4gPSAqLyBmYWxzZSk7XFxuLS1cXG5tbS9zbHViLmM9NzM4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxcbm1tL3NsdWIuYzo3Mzg5Ol9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxcbm1tL3NsdWIuYy03MzkwLVxcdFxcdCAgICAgdW5zaWduZWQgaW50IG1heClcXG4tLVxcbm1tL3NsdWIuYz03Mzk3PXJlZmlsbF9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxcbi0tXFxubW0vc2x1Yi5jLTc0MDMtXFxubW0vc2x1Yi5jOjc0MDQ6XFx0cmVmaWxsZWQgPSBfX3JlZmlsbF9vYmplY3RzX25vZGUocywgcCwgZ2ZwLCBtaW4sIG1heCxcXG5tbS9zbHViLmMtNzQwNS1cXHRcXHRcXHRcXHRcXHQgZ2V0X25vZGUocywgbG9jYWxfbm9kZSksXFxuLS1cXG5tbS9zbHViLmMtNzQwOS1cXG5tbS9zbHViLmM6NzQxMDpcXHRyZWZpbGxlZCArPSBfX3JlZmlsbF9vYmplY3RzX2FueShzLCBwICsgcmVmaWxsZWQsIGdmcCwgbWluIC0gcmVmaWxsZWQsXFxubW0vc2x1Yi5jLTc0MTEtXFx0XFx0XFx0XFx0XFx0IG1heCAtIHJlZmlsbGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6MjY6NTguNTQ0ODAyMDM1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTUwNjE0MTc2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzLCB0aGlua2luZyBhcyB0aGUgY29kZSBpdHNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbGVycyBvZiBgcmVmaWxsX29iamVjdHNgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGByZWZpbGxfb2JqZWN0c2AgaXMgYmVpbmcgdXNlZCwgb3IgbW9yZSBzcGVjaWZpY2FsbHksICp3aG8qIGlzIGNhbGxpbmcgaXQuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUsIGFuZCBkaWFnbm9zaW5nIG9yIG1vZGlmeWluZyBpdC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uIHRvIGlkZW50aWZ5IGl0cyBkZXBlbmRlbmNpZXMgYW5kIHRoZSBhcmVhcyBvZiB0aGUgc3lzdGVtIGl0IGltcGFjdHMuIEtub3dpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBjcml0aWNhbCBjb250ZXh0IG9uIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBvZiBgcmVmaWxsX29iamVjdHNgLCBhbmQgbGlrZWx5IGV4cGxhaW4gdGhlIGRhdGEgaXQgcmVxdWlyZXMgb3IgcHJvZHVjZXMuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZW50cnkgcG9pbnRzIHRvIGZ1bGx5IGNvbXByZWhlbmQgaXRzIGZ1bmN0aW9uLiBXaGF0IGNvZGUgcGF0aCBpcyB0aGlzIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aD9cblxuXG4iLCJJbnB1dFRva2VucyI6NjMyNywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjA4LjA1MDk0NjM2NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyODMxNzQyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWZpbGxfb2JqZWN0c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9Mjg3Mj1zdGF0aWMgdW5zaWduZWQgaW50XFxubW0vc2x1Yi5jOjI4NzM6cmVmaWxsX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxubW0vc2x1Yi5jLTI4NzQtXFx0ICAgICAgIHVuc2lnbmVkIGludCBtYXgpO1xcbi0tXFxubW0vc2x1Yi5jPTI4NzY9c3RhdGljIGludCByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZixcXG4tLVxcbm1tL3NsdWIuYy0yODg0LVxcbm1tL3NsdWIuYzoyODg1OlxcdGZpbGxlZCA9IHJlZmlsbF9vYmplY3RzKHMsIFxcdTAwMjZzaGVhZi1cXHUwMDNlb2JqZWN0c1tzaGVhZi1cXHUwMDNlc2l6ZV0sIGdmcCwgdG9fZmlsbCxcXG5tbS9zbHViLmMtMjg4Ni1cXHRcXHRcXHRcXHR0b19maWxsKTtcXG4tLVxcbm1tL3NsdWIuYz03MjYzPXN0YXRpYyB1bnNpZ25lZCBpbnRcXG5tbS9zbHViLmM6NzI2NDpfX3JlZmlsbF9vYmplY3RzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxubW0vc2x1Yi5jLTcyNjUtXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG1heCwgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcXG4tLVxcbm1tL3NsdWIuYz03MzM3PXN0YXRpYyB1bnNpZ25lZCBpbnRcXG5tbS9zbHViLmM6NzMzODpfX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG5tbS9zbHViLmMtNzMzOS1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBtYXgpXFxuLS1cXG5tbS9zbHViLmMtNzM2NS1cXG5tbS9zbHViLmM6NzM2NjpcXHRcXHRcXHRyID0gX19yZWZpbGxfb2JqZWN0c19ub2RlKHMsIHAsIGdmcCwgbWluLCBtYXgsIG4sXFxubW0vc2x1Yi5jLTczNjctXFx0XFx0XFx0XFx0XFx0XFx0ICAvKiBhbGxvd19zcGluID0gKi8gZmFsc2UpO1xcbi0tXFxubW0vc2x1Yi5jPTczODg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnRcXG5tbS9zbHViLmM6NzM4OTpfX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG5tbS9zbHViLmMtNzM5MC1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBtYXgpXFxuLS1cXG5tbS9zbHViLmM9NzM5Nj1zdGF0aWMgdW5zaWduZWQgaW50XFxubW0vc2x1Yi5jOjczOTc6cmVmaWxsX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxubW0vc2x1Yi5jLTczOTgtXFx0ICAgICAgIHVuc2lnbmVkIGludCBtYXgpXFxuLS1cXG5tbS9zbHViLmMtNzQwMy1cXG5tbS9zbHViLmM6NzQwNDpcXHRyZWZpbGxlZCA9IF9fcmVmaWxsX29iamVjdHNfbm9kZShzLCBwLCBnZnAsIG1pbiwgbWF4LFxcbm1tL3NsdWIuYy03NDA1LVxcdFxcdFxcdFxcdFxcdCBnZXRfbm9kZShzLCBsb2NhbF9ub2RlKSxcXG4tLVxcbm1tL3NsdWIuYy03NDA5LVxcbm1tL3NsdWIuYzo3NDEwOlxcdHJlZmlsbGVkICs9IF9fcmVmaWxsX29iamVjdHNfYW55KHMsIHAgKyByZWZpbGxlZCwgZ2ZwLCBtaW4gLSByZWZpbGxlZCxcXG5tbS9zbHViLmMtNzQxMS1cXHRcXHRcXHRcXHRcXHQgbWF4IC0gcmVmaWxsZWQpO1xcbi0tXFxubW0vc2x1Yi5jPTc0MzM9c3RhdGljIGJvb2wgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTc0NTItXFx0fSBlbHNlIHtcXG5tbS9zbHViLmM6NzQ1MzpcXHRcXHRpID0gcmVmaWxsX29iamVjdHMocywgcCwgZmxhZ3MsIHNpemUsIHNpemUpO1xcbm1tL3NsdWIuYy03NDU0LVxcdFxcdGlmIChpIFxcdTAwM2Mgc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6Mjc6MTAuMzc5Mjg3NjA4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjAwNzcwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGFuIGV4cGVydCBpbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgU0xVQiBzcGVjaWZpY2FsbHk6XG5cbioqQW5hbHl6aW5nIFNMVUIgU2hlYWYgQWxsb2NhdGlvbiBhbmQgRnJlZWxpc3QgUmV0dXJuIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG1tL3NsdWIuY2Ag4oCTIHRoYXQgdGVsbHMgbWUgcmlnaHQgYXdheSB3ZSdyZSBkZWFsaW5nIHdpdGggU0xVQidzIGludGVybmFsIHdvcmtpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2hlYWYgYWxsb2NhdGlvbiwgYnVsayBhbGxvY2F0aW9uLCBhbmQgZnJlZWxpc3QgcmV0dXJuIGxvZ2ljIGhlcmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byBob3cgYF9fa21lbV9jYWNoZV9hbGxvY19idWxrYCB3b3JrcywgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIHNoZWFmIGNhY2hpbmcgaXMgbGlrZWx5IGhhbmRsZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBCdXQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoYXQgZnVuY3Rpb24sIEkgbmVlZCBhIGJpZ2dlciBwaWN0dXJlIHZpZXcuIEkgc2hvdWxkIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dCwgaG93IGBrbWVtX2NhY2hlX2FsbG9jX2J1bGtgIGFuZCB0aGUgc2hlYWYgY2FjaGluZyBpcyB1c2VkIG1vcmUgYnJvYWRseS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxlcnMgb2YgYHJlZmlsbF9zaGVhZmAgb3IgYGttZW1fY2FjaGVfYWxsb2NfYnVsa2AgaW5zdGVhZCwgaW4gb3JkZXIgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzkzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6Mjc6MTIuNjk5MzY4MzExWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE5OTc1ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZmlsbF9zaGVhZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD05MjA9c3RydWN0IHNsYWJfc2hlYWYgKlxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjkyMTprbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IHNpemUpO1xcbmluY2x1ZGUvbGludXgvc2xhYi5oLTkyMi1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo5MjM6aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtOTI0LVxcdFxcdHN0cnVjdCBzbGFiX3NoZWFmICoqc2hlYWZwLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTE1Mj1zdGF0aWMgc3RydWN0IHNsYWJfc2hlYWYgKm10X2dldF9zaGVhZihnZnBfdCBnZnAsIGludCBjb3VudClcXG5saWIvbWFwbGVfdHJlZS5jLTE1My17XFxubGliL21hcGxlX3RyZWUuYzoxNTQ6XFx0cmV0dXJuIGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihtYXBsZV9ub2RlX2NhY2hlLCBnZnAsIGNvdW50KTtcXG5saWIvbWFwbGVfdHJlZS5jLTE1NS19XFxubGliL21hcGxlX3RyZWUuYy0xNTYtXFxubGliL21hcGxlX3RyZWUuYzoxNTc6c3RhdGljIGludCBtdF9yZWZpbGxfc2hlYWYoZ2ZwX3QgZ2ZwLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqKnNoZWFmLFxcbmxpYi9tYXBsZV90cmVlLmMtMTU4LVxcdFxcdHVuc2lnbmVkIGludCBzaXplKVxcbmxpYi9tYXBsZV90cmVlLmMtMTU5LXtcXG5saWIvbWFwbGVfdHJlZS5jOjE2MDpcXHRyZXR1cm4ga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYobWFwbGVfbm9kZV9jYWNoZSwgZ2ZwLCBzaGVhZiwgc2l6ZSk7XFxubGliL21hcGxlX3RyZWUuYy0xNjEtfVxcbi0tXFxubGliL21hcGxlX3RyZWUuYz0xMDc0PXN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfYWxsb2Nfbm9kZXMoc3RydWN0IG1hX3N0YXRlICptYXMsIGdmcF90IGdmcClcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmMtMTEwOC1cXG5saWIvbWFwbGVfdHJlZS5jOjExMDk6XFx0XFx0aWYgKG10X3JlZmlsbF9zaGVhZihnZnAsIFxcdTAwMjZtYXMtXFx1MDAzZXNoZWFmLCByZWZpbGwpKVxcbmxpYi9tYXBsZV90cmVlLmMtMTExMC1cXHRcXHRcXHRnb3RvIGVycm9yO1xcbi0tXFxubW0vc2x1Yi5jPTI4NzM9cmVmaWxsX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxuLS1cXG5tbS9zbHViLmMtMjg3NS1cXG5tbS9zbHViLmM6Mjg3NjpzdGF0aWMgaW50IHJlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLFxcbm1tL3NsdWIuYy0yODc3LVxcdFxcdFxcdCBnZnBfdCBnZnApXFxuLS1cXG5tbS9zbHViLmM9NDcxND1fX3Bjc19yZXBsYWNlX2VtcHR5X21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3MsXFxuLS1cXG5tbS9zbHViLmMtNDc3My1cXG5tbS9zbHViLmM6NDc3NDpcXHRpZiAocmVmaWxsX3NoZWFmKHMsIGVtcHR5LCBnZnAgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOKSkge1xcbm1tL3NsdWIuYy00Nzc1LVxcdFxcdC8qXFxuLS1cXG5tbS9zbHViLmM9NTA3ND1FWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3Byb2YpO1xcbm1tL3NsdWIuYy01MDc1LVxcbm1tL3NsdWIuYzo1MDc2OnN0YXRpYyBpbnQgX19wcmVmaWxsX3NoZWFmX3BmbWVtYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTUwNzctXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9zbHViLmMtNTA4NS1cXG5tbS9zbHViLmM6NTA4NjpcXHRyZXQgPSByZWZpbGxfc2hlYWYocywgc2hlYWYsIGdmcF9ub21lbWFsbG9jKTtcXG5tbS9zbHViLmMtNTA4Ny1cXG4tLVxcbm1tL3NsdWIuYy01MDk0LVxcdCAqL1xcbm1tL3NsdWIuYzo1MDk1OlxcdHJldCA9IHJlZmlsbF9zaGVhZihzLCBzaGVhZiwgZ2ZwKTtcXG5tbS9zbHViLmMtNTA5Ni1cXHRzaGVhZi1cXHUwMDNlcGZtZW1hbGxvYyA9IHRydWU7XFxuLS1cXG5tbS9zbHViLmM9NTExMD1zdHJ1Y3Qgc2xhYl9zaGVhZiAqXFxubW0vc2x1Yi5jOjUxMTE6a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKVxcbm1tL3NsdWIuYy01MTEyLXtcXG4tLVxcbm1tL3NsdWIuYy01MTczLVxcdFxcdGlmIChzaGVhZi1cXHUwMDNlc2l6ZSBcXHUwMDNjIHNpemUgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmM6NTE3NDpcXHRcXHQgICAgX19wcmVmaWxsX3NoZWFmX3BmbWVtYWxsb2Mocywgc2hlYWYsIGdmcCkpIHtcXG5tbS9zbHViLmMtNTE3NS1cXHRcXHRcXHRzaGVhZl9mbHVzaF91bnVzZWQocywgc2hlYWYpO1xcbi0tXFxubW0vc2x1Yi5jLTUxODQtLypcXG5tbS9zbHViLmM6NTE4NTogKiBVc2UgdGhpcyB0byByZXR1cm4gYSBzaGVhZiBvYnRhaW5lZCBieSBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoKVxcbm1tL3NsdWIuYy01MTg2LSAqXFxuLS1cXG5tbS9zbHViLmM9NTE5ND12b2lkIGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zbHViLmMtNTIyOC1cXHRpZiAoIWJhcm4gfHwgZGF0YV9yYWNlKGJhcm4tXFx1MDAzZW5yX2Z1bGwpIFxcdTAwM2U9IE1BWF9GVUxMX1NIRUFWRVMgfHxcXG5tbS9zbHViLmM6NTIyOTpcXHQgICAgcmVmaWxsX3NoZWFmKHMsIHNoZWFmLCBnZnAgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOKSkge1xcbm1tL3NsdWIuYy01MjMwLVxcdFxcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzaGVhZik7XFxuLS1cXG5tbS9zbHViLmMtNTIzOS0vKlxcbm1tL3NsdWIuYzo1MjQwOiAqIFJlZmlsbCBhIHNoZWFmIHByZXZpb3VzbHkgcmV0dXJuZWQgYnkga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmIHRvIGF0IGxlYXN0XFxubW0vc2x1Yi5jLTUyNDEtICogdGhlIGdpdmVuIHNpemUuXFxuLS1cXG5tbS9zbHViLmMtNTI1MS0gKi9cXG5tbS9zbHViLmM6NTI1MjppbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG5tbS9zbHViLmMtNTI1My1cXHRcXHRcXHQgICAgc3RydWN0IHNsYWJfc2hlYWYgKipzaGVhZnAsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxubW0vc2x1Yi5jLTUyNTgtXFx0ICogVE9ETzogZG8gd2Ugd2FudCB0byBzdXBwb3J0ICpzaGVhZiA9PSBOVUxMIHRvIGJlIGVxdWl2YWxlbnQgb2ZcXG5tbS9zbHViLmM6NTI1OTpcXHQgKiBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoKSA/XFxubW0vc2x1Yi5jLTUyNjAtXFx0ICovXFxuLS1cXG5tbS9zbHViLmMtNTI2OS1cXHRcXHRpZiAobGlrZWx5KHNoZWFmLVxcdTAwM2VjYXBhY2l0eSA9PSBzLVxcdTAwM2VzaGVhZl9jYXBhY2l0eSkpXFxubW0vc2x1Yi5jOjUyNzA6XFx0XFx0XFx0cmV0dXJuIF9fcHJlZmlsbF9zaGVhZl9wZm1lbWFsbG9jKHMsIHNoZWFmLCBnZnApO1xcbm1tL3NsdWIuYy01MjcxLVxcbi0tXFxubW0vc2x1Yi5jLTUyODQtXFx0ICovXFxubW0vc2x1Yi5jOjUyODU6XFx0c2hlYWYgPSBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYocywgZ2ZwLCBzaXplKTtcXG5tbS9zbHViLmMtNTI4Ni1cXHRpZiAoIXNoZWFmKVxcbi0tXFxubW0vc2x1Yi5jLTUyOTQtLypcXG5tbS9zbHViLmM6NTI5NTogKiBBbGxvY2F0ZSBmcm9tIGEgc2hlYWYgb2J0YWluZWQgYnkga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKClcXG5tbS9zbHViLmMtNTI5Ni0gKlxcbi0tXFxubW0vc2x1Yi5jPTc4NzE9c3RhdGljIHVuc2lnbmVkIGludCBjYWxjdWxhdGVfc2hlYWZfY2FwYWNpdHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtNzkxMS1cXHQgKiBSZXNwZWN0IGFuIGV4cGxpY2l0IHJlcXVlc3QgZm9yIGNhcGFjaXR5IHRoYXQncyB0eXBpY2FsbHkgbW90aXZhdGVkIGJ5XFxubW0vc2x1Yi5jOjc5MTI6XFx0ICogZXhwZWN0ZWQgbWF4aW11bSBzaXplIG9mIGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZigpIHRvIG5vdCBlbmQgdXBcXG5tbS9zbHViLmMtNzkxMy1cXHQgKiB1c2luZyBsb3ctcGVyZm9ybWFuY2Ugb3ZlcnNpemUgc2hlYXZlc1xcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg9MTg4PXN0cnVjdCBzbGFiX3NoZWFmICpcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoxODk6a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKTtcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0xOTAtXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0xOTU9dm9pZCBrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTE5Ni1cXHRcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpO1xcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjE5NzppbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0xOTgtXFx0XFx0c3RydWN0IHNsYWJfc2hlYWYgKipzaGVhZnAsIHVuc2lnbmVkIGludCBzaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM9MjU0PXN0cnVjdCBzbGFiX3NoZWFmICpcXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjI1NTprbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IHNpemUpXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0yNTYte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0yODItXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYzoyODM6aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0yODQtXFx0XFx0IHN0cnVjdCBzbGFiX3NoZWFmICoqc2hlYWZwLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMjkxLVxcdGlmIChzaXplIFxcdTAwM2Ugc2hlYWYtXFx1MDAzZWNhcGFjaXR5KSB7XFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYzoyOTI6XFx0XFx0c2hlYWYgPSBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYocywgZ2ZwLCBzaXplKTtcXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTI5My1cXHRcXHRpZiAoIXNoZWFmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyNzoxNC45MTkzNDk5ODZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODM3MTI3MTU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNMVUIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgY2hhbmdlcyBpbiBgbW0vc2x1Yi5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYC4gVGhlIGdvYWwsIGl0IHNlZW1zLCBpcyB0byBpbXByb3ZlIGhvdyBwYXJ0aWFsbHkgZnVsbCBzbGFicyBhcmUgaGFuZGxlZCwgZXNwZWNpYWxseSB3aGVuIHJlZmlsbGluZy5cblxuSW5pdGlhbGx5LCBJJ20gb2JzZXJ2aW5nIHRoZSBhZGRpdGlvbiBvZiBhIGBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuYCBhbmQgYHVuc2lnbmVkIGxvbmcgZmxhZ3NgIHdpdGhpbiBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgLiBUaGlzIGltbWVkaWF0ZWx5IHNpZ25hbHMgdGhhdCB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgbG9ja2luZyBhcm91bmQgdGhlIG5vZGUncyBsaXN0LCBzcGVjaWZpY2FsbHkgdXNpbmcgYHNwaW5fbG9ja19pcnFzYXZlYCBhbmQgYHNwaW5fdW5sb2NrX2lycXJlc3RvcmVgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhlIGNvbW1lbnQgc3VnZ2VzdHMgc29tZSBtb2RpZmljYXRpb24gb2YgdGhlIGZyZWVsaXN0LiBXZSdyZSBub3cgYWNxdWlyaW5nIGBuYCB2aWEgYGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKWAgYW5kIHRoZW4gbG9ja2luZyBgbi1cdTAwM2VsaXN0X2xvY2tgIHRvIHByb3RlY3QgYWNjZXNzIHRvIHRoZSBmcmVlbGlzdCBjb3VudGVyIHVwZGF0ZXMgd2l0aCBgc2xhYl91cGRhdGVfZnJlZWxpc3RgLiBUaGlzIGlzIGNydWNpYWwgdG8gZW5zdXJlIGF0b21pY2l0eS4gVGhlIGltcG9ydGFudCBhZGRpdGlvbiBpcyBgYWRkX3BhcnRpYWwobiwgc2xhYiwgQUREX1RPX1RBSUwpYCAqYWZ0ZXIqIHRoZSBzdWNjZXNzZnVsIHVwZGF0ZSBvZiB0aGUgZnJlZWxpc3QsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHNsYWIgaXMgbm93IGFkZGVkIGJhY2sgdG8gdGhlIHBhcnRpYWwgbGlzdCBmb3IgdGhlIG5vZGUsIGxpa2VseSB3aXRoIHRoZSB1cGRhdGVkIGBmcmVlbGlzdGAgYW5kIGBpbnVzZWAgY291bnRlcnMuXG5cbkxvb2tpbmcgYXQgYF9fcmVmaWxsX29iamVjdHNfbm9kZWAsIEkgbm90aWNlIGEgY3JpdGljYWwgY2hhbmdlIHdpdGhpbiB0aGUgbG9vcCB3aGVyZSBvYmplY3RzIGFyZSBiZWluZyByZWZpbGxlZC4gIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGNoZWNrIGFuZCB0aGVuIGBsaXN0X2FkZGAgaW4gYSBjb25kaXRpb25hbCwgYnV0IG5vdyB0aGUgYGxpc3RfYWRkYCBpcyBnb25lLiBJbnN0ZWFkLCBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGlzIGNhbGxlZCBkaXJlY3RseSwgYW5kIGlmIGl0IHN1Y2NlZWRzLCB0aGUgY29kZSBicmVha3Mgb3V0IG9mIHRoZSBsb29wLiAgVGhlIGBsaXN0X2FkZGAgY2FsbCBpcyBub3cgaW5zaWRlIHRoZSBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGZ1bmN0aW9uLiBNb3JlIHNwZWNpZmljYWxseSwgIHRoZSBgYWRkX3BhcnRpYWxgIGlzIG5vdyBoYW5kbGVkIHdpdGhpbiB0aGUgIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAuIFRoaXMgc2VlbXMgbGlrZSBhIGJldHRlciBhcHByb2FjaCBpbiB0ZXJtcyBvZiBhdG9taWNpdHkgYXMgYWxsIG1vZGlmaWNhdGlvbiB0byB0aGUgcGFydGlhbCBsaXN0IGlzIGhhcHBlbmluZyBiZWhpbmQgdGhlIGxvY2suXG5cbkZpbmFsbHksIHRoZSBgbGlzdF9lbXB0eWAgY2hlY2sgaGFzIGJlZW4gY2hhbmdlZCB0byBgdW5saWtlbHkoIWxpc3RfZW1wdHkoXHUwMDI2cGMuc2xhYnMpKWAuIFRoYXQncyBhIG1pY3JvLW9wdGltaXphdGlvbiDigJMgbWFya2luZyB0aGF0IGJyYW5jaCBhcyBsZXNzIGxpa2VseSB0byBiZSB0YWtlbi4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIHNsYWJzIGluIGBwYy5zbGFic2AgYXJlICp1c3VhbGx5KiBlbXB0eS4gVGhpcyBtYWtlcyBzZW5zZS5cblxuU28sIGluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBub2RlLWxldmVsIGxvY2tpbmcgYXJvdW5kIHBhcnRpYWwgc2xhYiBsaXN0IG1hbmlwdWxhdGlvbnMgaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCB0byBlbnN1cmUgdGhyZWFkIHNhZmV0eS4gSXQgYWxzbyBzdHJlYW1saW5lcyB0aGUgcmVmaWxsIHByb2Nlc3MgYnkgaW50ZWdyYXRpbmcgdGhlIHBhcnRpYWwgc2xhYiByZXR1cm4gYW5kIGFkZGl0aW9uIGludG8gdGhlIHNhbWUgbG9ja2VkIG9wZXJhdGlvbiwgaG9wZWZ1bGx5IGltcHJvdmluZyBwZXJmb3JtYW5jZSBhbmQgcmVkdWNpbmcgY29udGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6Mjc6MjMuMjkwNjI0NDczWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0OTAzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc2x1Yi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyMjUsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjcyMjU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNzIyNjpcXHRcXG43MjI3OlxcdFxcdFxcdGlmIChrZmVuY2VfZnJlZShkZi5mcmVlbGlzdCkpXFxuNzIyODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43MjI5OlxcdFxcbjcyMzA6XFx0XFx0XFx0X19zbGFiX2ZyZWUoZGYucywgZGYuc2xhYiwgZGYuZnJlZWxpc3QsIGRmLnRhaWwsIGRmLmNudCxcXG43MjMxOlxcdFxcdFxcdFxcdCAgICAgX1JFVF9JUF8pO1xcbjcyMzI6XFx0XFx0fSB3aGlsZSAobGlrZWx5KHNpemUpKTtcXG43MjMzOlxcdH1cXG43MjM0OlxcdFxcbjcyMzU6XFx0LyogTm90ZSB0aGF0IGludGVycnVwdHMgbXVzdCBiZSBlbmFibGVkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiAqL1xcbjcyMzY6XFx0dm9pZCBrbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbjcyMzc6XFx0e1xcbjcyMzg6XFx0XFx0aWYgKCFzaXplKVxcbjcyMzk6XFx0XFx0XFx0cmV0dXJuO1xcbjcyNDA6XFx0XFxuNzI0MTpcXHRcXHQvKlxcbjcyNDI6XFx0XFx0ICogZnJlZWluZyB0byBzaGVhdmVzIGlzIHNvIGluY29tcGF0aWJsZSB3aXRoIHRoZSBkZXRhY2hlZCBmcmVlbGlzdCBzb1xcbjcyNDM6XFx0XFx0ICogb25jZSB3ZSBnbyB0aGF0IHdheSwgd2UgaGF2ZSB0byBkbyBldmVyeXRoaW5nIGRpZmZlcmVudGx5XFxuNzI0NDpcXHRcXHQgKi9cXG43MjQ1OlxcdFxcdGlmIChzIFxcdTAwMjZcXHUwMDI2IGNhY2hlX2hhc19zaGVhdmVzKHMpKSB7XFxuNzI0NjpcXHRcXHRcXHRmcmVlX3RvX3Bjc19idWxrKHMsIHNpemUsIHApO1xcbjcyNDc6XFx0XFx0XFx0cmV0dXJuO1xcbjcyNDg6XFx0XFx0fVxcbjcyNDk6XFx0XFxuNzI1MDpcXHRcXHRkbyB7XFxuNzI1MTpcXHRcXHRcXHRzdHJ1Y3QgZGV0YWNoZWRfZnJlZWxpc3QgZGY7XFxuNzI1MjpcXHRcXG43MjUzOlxcdFxcdFxcdHNpemUgPSBidWlsZF9kZXRhY2hlZF9mcmVlbGlzdChzLCBzaXplLCBwLCBcXHUwMDI2ZGYpO1xcbjcyNTQ6XFx0XFx0XFx0aWYgKCFkZi5zbGFiKVxcbjcyNTU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNzI1NjpcXHRcXG43MjU3OlxcdFxcdFxcdHNsYWJfZnJlZV9idWxrKGRmLnMsIGRmLnNsYWIsIGRmLmZyZWVsaXN0LCBkZi50YWlsLCBcXHUwMDI2cFtzaXplXSxcXG43MjU4OlxcdFxcdFxcdFxcdCAgICAgICBkZi5jbnQsIF9SRVRfSVBfKTtcXG43MjU5OlxcdFxcdH0gd2hpbGUgKGxpa2VseShzaXplKSk7XFxuNzI2MDpcXHR9XFxuNzI2MTpcXHRFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfZnJlZV9idWxrKTtcXG43MjYyOlxcdFxcbjcyNjM6XFx0c3RhdGljIHVuc2lnbmVkIGludFxcbjcyNjQ6XFx0X19yZWZpbGxfb2JqZWN0c19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxcbjcyNjU6XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG1heCwgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcXG43MjY2OlxcdFxcdFxcdCAgICAgIGJvb2wgYWxsb3dfc3BpbilcXG43MjY3OlxcdHtcXG43MjY4OlxcdFxcdHN0cnVjdCBwYXJ0aWFsX2J1bGtfY29udGV4dCBwYztcXG43MjY5OlxcdFxcdHN0cnVjdCBzbGFiICpzbGFiLCAqc2xhYjI7XFxuNzI3MDpcXHRcXHR1bnNpZ25lZCBpbnQgcmVmaWxsZWQgPSAwO1xcbjcyNzE6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG43MjcyOlxcdFxcdHZvaWQgKm9iamVjdDtcXG43MjczOlxcdFxcbjcyNzQ6XFx0XFx0cGMuZmxhZ3MgPSBnZnA7XFxuNzI3NTpcXHRcXHRwYy5taW5fb2JqZWN0cyA9IG1pbjtcXG43Mjc2OlxcdFxcdHBjLm1heF9vYmplY3RzID0gbWF4O1xcbjcyNzc6XFx0XFxuNzI3ODpcXHRcXHRpZiAoIWdldF9wYXJ0aWFsX25vZGVfYnVsayhzLCBuLCBcXHUwMDI2cGMsIGFsbG93X3NwaW4pKVxcbjcyNzk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjIzLjI5NDExOTE5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDk3MzYwMjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlNMVUIgTWVtb3J5IEFsbG9jYXRvciBQYXRjaCBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgbW0vc2x1Yi5jYCwgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBhc3Nlc3MgaWYgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggZnV6emluZywgYW5kIGdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGtub3cgdGhhdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgbGlrZSB0aGlzIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGFuZCBmdW5kYW1lbnRhbCB0byB0aGUgc3lzdGVtLiBTbywgdGhhdCdzIGEgY2hlY2sgb24gbXkgXCJ3b3J0aCBmdXp6aW5nXCIgcmFkYXIuXG5cblRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhciBvbiB0aGlzOiBhbnkgbW9kaWZpY2F0aW9ucyBpbiBjb3JlIHN1YnN5c3RlbXMgbGlrZSBtZW1vcnkgbWFuYWdlbWVudD8gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggaGl0cyB0aGF0IGNyaXRlcmlvbi4gU28sIGBXb3J0aEZ1enppbmdgIGlzIHVuZXF1aXZvY2FsbHkgYHRydWVgLlxuXG5Ob3csIHRoZSB0cmlja2llciBwYXJ0OiBkZXRlcm1pbmluZyB0aGUgXCJGb2N1c1N5bWJvbHNcIiB0byBhdm9pZCBkaWx1dGlvbiBvZiB0aGUgZnV6emluZyBlZmZvcnQuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHRlbGxpbmcgbWUgdG8gYXZvaWQgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoaW5ncyBjYWxsZWQgYnkgKmV2ZXJ5dGhpbmcqLiBUaGUgZ29hbCBpcyB0byBpc29sYXRlIHRoZSBzcGVjaWZpYyBsb2dpYyBiZWluZyBhbHRlcmVkLiBUaGlzIGlzbid0IGp1c3QgYSBibGFua2V0IGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uLlxuXG5JIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSB0aWVkIHRvIHRoaXMgbW9kaWZpY2F0aW9uLiBSaWdodC4gSSBoYXZlOlxuXG4xLiAgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCAtIGEgc3RhdGljIGhlbHBlciwgbW9kaWZpZWQgZGlyZWN0bHkuXG4yLiAgYF9fcmVmaWxsX29iamVjdHNfbm9kZWAgLSBhbm90aGVyIHN0YXRpYyBoZWxwZXIuXG4zLiAgYHJlZmlsbF9vYmplY3RzYCAtIHN0YXRpYy5cbjQuICBgcmVmaWxsX3NoZWFmYCAtIHN0YXRpYy5cbjUuICBga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmYCAtIHN0YXRpYy5cbjYuICBga21lbV9jYWNoZV9yZWZpbGxfc2hlYWZgIC0gYWxzbyBzdGF0aWMuXG43LiAgYGttZW1fY2FjaGVfYWxsb2NfYnVsa2AgLSBXYWl0LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgd2hhdCBjYWxscyB0aGlzLiBJcyB0aGlzIGV4cG9ydGVkL25vbi1zdGF0aWM/IE5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBzb21ldGhpbmcuIEknbGwgY2hlY2sgaXRzIGRlZmluaXRpb24gaW4gYG1tL3NsdWIuY2AuXG5cbkknbSBjb25maWRlbnQgdGhlc2UgYXJlIHRoZSByZWxldmFudCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBUaGV5IHJlcHJlc2VudCB0aGUgY29yZSBsb2dpYyBvZiB0aGUgY2hhbmdlIGFuZCBzaG91bGQgZ2l2ZSBtZSBnb29kIGZ1enppbmcgY292ZXJhZ2UuIEknbSBnb2luZyB0byBub3RlIHRoZXNlIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI2MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjI4Ljc5MTQ4MzM0NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0MDc0NTc2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbWVtX2NhY2hlX2FsbG9jX2J1bGtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL21zbS9tc21faW9tbXUuYz0zMzk9bXNtX2lvbW11X3BhZ2V0YWJsZV9wcmVhbGxvY19hbGxvY2F0ZShzdHJ1Y3QgbXNtX21tdSAqbW11LCBzdHJ1Y3QgbXNtX21tdV9wcmVhbGxvYyAqcClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2lvbW11LmMtMzUxLVxcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2lvbW11LmM6MzUyOlxcdGlmICgha21lbV9jYWNoZV9hbGxvY19idWxrKHB0X2NhY2hlLCBHRlBfS0VSTkVMLCBwLVxcdTAwM2Vjb3VudCwgcC1cXHUwMDNlcGFnZXMpKSB7XFxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21faW9tbXUuYy0zNTMtXFx0XFx0a3ZmcmVlKHAtXFx1MDAzZXBhZ2VzKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM9MTI4Nj1zdGF0aWMgaW50IHBhbnRob3Jfdm1fb3BfY3R4X3ByZWFsbG9jX3B0cyhzdHJ1Y3QgcGFudGhvcl92bV9vcF9jdHggKm9wX2N0eClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMTMwNC1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjEzMDU6XFx0aWYgKCFrbWVtX2NhY2hlX2FsbG9jX2J1bGsocHRfY2FjaGUsIEdGUF9LRVJORUwsIHB0X2NvdW50LFxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMTMwNi1cXHRcXHRcXHRcXHQgICBvcF9jdHgtXFx1MDAzZXJzdmRfcGFnZV90YWJsZXMucGFnZXMpKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jPTE0MTc9c3RhdGljIGludCBwYW50aG9yX3ZtX3ByZXBhcmVfdW5tYXBfb3BfY3R4KHN0cnVjdCBwYW50aG9yX3ZtX29wX2N0eCAqb3BfY3R4LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy0xNDUwLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM6MTQ1MTpcXHRcXHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhwdF9jYWNoZSwgR0ZQX0tFUk5FTCwgcHRfY291bnQsXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy0xNDUyLVxcdFxcdFxcdFxcdG9wX2N0eC1cXHUwMDNlcnN2ZF9wYWdlX3RhYmxlcy5wYWdlcykpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oPTkwND12b2lkIGttZW1fY2FjaGVfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApO1xcbmluY2x1ZGUvbGludXgvc2xhYi5oLTkwNS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo5MDY6Ym9vbCBrbWVtX2NhY2hlX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC05MDctXFx0XFx0c2l6ZV90IHNpemUsIHZvaWQgKipwKTtcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo5MDg6I2RlZmluZSBrbWVtX2NhY2hlX2FsbG9jX2J1bGsoLi4uKSBcXFxcXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6OTA5OlxcdGFsbG9jX2hvb2tzKGttZW1fY2FjaGVfYWxsb2NfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTkxMC1cXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9OTY4PV9fY29sZCBib29sIF9faW9fYWxsb2NfcmVxX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTc4LVxcdCAqL1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6OTc5OlxcdGlmICgha21lbV9jYWNoZV9hbGxvY19idWxrKHJlcV9jYWNoZXAsIGdmcCwgbnJfcmVxcywgcmVxcykpIHtcXG5pb191cmluZy9pb191cmluZy5jLTk4MC1cXHRcXHRyZXFzWzBdID0ga21lbV9jYWNoZV9hbGxvYyhyZXFfY2FjaGVwLCBnZnApO1xcbi0tXFxubGliL3Rlc3RfbWVtaW5pdC5jPTIxNj1zdGF0aWMgaW50IF9faW5pdCBkb19rbWVtX2NhY2hlX3NpemUoc2l6ZV90IHNpemUsIGJvb2wgd2FudF9jdG9yLFxcbi0tXFxubGliL3Rlc3RfbWVtaW5pdC5jLTIzMS1cXHRcXHRpZiAoIXdhbnRfcmN1IFxcdTAwMjZcXHUwMDI2ICF3YW50X2N0b3IpIHtcXG5saWIvdGVzdF9tZW1pbml0LmM6MjMyOlxcdFxcdFxcdGlmICgha21lbV9jYWNoZV9hbGxvY19idWxrKGMsIGFsbG9jX21hc2ssIEJVTEtfU0laRSxcXG5saWIvdGVzdF9tZW1pbml0LmMtMjMzLVxcdFxcdFxcdFxcdFxcdGJ1bGtfYXJyYXkpKSB7XFxuLS1cXG5saWIvdGVzdF9tZW1pbml0LmM9MzQ1PXN0YXRpYyBpbnQgX19pbml0IGRvX2ttZW1fY2FjaGVfc2l6ZV9idWxrKGludCBzaXplLCBpbnQgKnRvdGFsX2ZhaWx1cmVzKVxcbi0tXFxubGliL3Rlc3RfbWVtaW5pdC5jLTM1NC1cXHRmb3IgKGl0ZXIgPSAwOyAoaXRlciBcXHUwMDNjIG1heGl0ZXIpIFxcdTAwMjZcXHUwMDI2ICFmYWlsOyBpdGVyKyspIHtcXG5saWIvdGVzdF9tZW1pbml0LmM6MzU1OlxcdFxcdGlmICgha21lbV9jYWNoZV9hbGxvY19idWxrKGMsIEdGUF9LRVJORUwsIEFSUkFZX1NJWkUob2JqZWN0cyksXFxubGliL3Rlc3RfbWVtaW5pdC5jLTM1Ni1cXHRcXHRcXHRcXHRvYmplY3RzKSlcXG4tLVxcbm1tL2thc2FuL2thc2FuX3Rlc3RfYy5jPTEyMjM9c3RhdGljIHZvaWQga21lbV9jYWNoZV9idWxrKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2thc2FuL2thc2FuX3Rlc3RfYy5jLTEyMzItXFxubW0va2FzYW4va2FzYW5fdGVzdF9jLmM6MTIzMzpcXHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhjYWNoZSwgR0ZQX0tFUk5FTCwgQVJSQVlfU0laRShwKSxcXG5tbS9rYXNhbi9rYXNhbl90ZXN0X2MuYy0xMjM0LVxcdFxcdFxcdCh2b2lkICoqKVxcdTAwMjZwKSkge1xcbi0tXFxubW0va2ZlbmNlL2tmZW5jZV90ZXN0LmM9NzQ5PXN0YXRpYyB2b2lkIHRlc3RfbWVtY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuYy03NjUtXFxubW0va2ZlbmNlL2tmZW5jZV90ZXN0LmM6NzY2OlxcdFxcdGlmICgha21lbV9jYWNoZV9hbGxvY19idWxrKHRlc3RfY2FjaGUsIEdGUF9BVE9NSUMsXFxubW0va2ZlbmNlL2tmZW5jZV90ZXN0LmMtNzY3LVxcdFxcdFxcdFxcdEFSUkFZX1NJWkUob2JqZWN0cyksIG9iamVjdHMpKVxcbi0tXFxubW0va2ZlbmNlL2tmZW5jZV90ZXN0LmMtNzc2LVxcdFxcdC8qXFxubW0va2ZlbmNlL2tmZW5jZV90ZXN0LmM6Nzc3OlxcdFxcdCAqIGttZW1fY2FjaGVfYWxsb2NfYnVsaygpIGRpc2FibGVzIGludGVycnVwdHMsIGFuZCBjYWxsaW5nIGl0XFxubW0va2ZlbmNlL2tmZW5jZV90ZXN0LmMtNzc4LVxcdFxcdCAqIGluIGEgdGlnaHQgbG9vcCBtYXkgbm90IGdpdmUgS0ZFTkNFIGEgY2hhbmNlIHRvIHN3aXRjaCB0aGVcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zNTk4PWJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzYxNy1cXHQgKiBzbGFiX2FsbG9jX25vZGUoKSBhdm9pZHMgdGhlIE5VTEwgY2hlY2ssIHNvIHdlIG1pZ2h0IGJlIGNhbGxlZCB3aXRoIGFcXG5tbS9tZW1jb250cm9sLmM6MzYxODpcXHQgKiBzaW5nbGUgTlVMTCBvYmplY3QuIGttZW1fY2FjaGVfYWxsb2NfYnVsaygpIGFib3J0cyBpZiBpdCBjYW4ndCBmaWxsXFxubW0vbWVtY29udHJvbC5jLTM2MTktXFx0ICogdGhlIHdob2xlIHJlcXVlc3RlZCBzaXplLlxcbi0tXFxubW0vc2x1Yi5jPTUwNzY9c3RhdGljIGludCBfX3ByZWZpbGxfc2hlYWZfcGZtZW1hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy01MTAwLVxcbm1tL3NsdWIuYzo1MTAxOnN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG5tbS9zbHViLmMtNTEwMi1cXHRcXHRzaXplX3Qgc2l6ZSwgdm9pZCAqKnApO1xcbi0tXFxubW0vc2x1Yi5jPTUxMTE9a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxubW0vc2x1Yi5jLTUxMzItXFx0XFx0ICovXFxubW0vc2x1Yi5jOjUxMzM6XFx0XFx0aWYgKCFfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzLCBnZnAsIHNpemUsXFxubW0vc2x1Yi5jLTUxMzQtXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c2hlYWYtXFx1MDAzZW9iamVjdHNbMF0pKSB7XFxuLS1cXG5tbS9zbHViLmM9NTI1Mj1pbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG4tLVxcbm1tL3NsdWIuYy01MjcxLVxcbm1tL3NsdWIuYzo1MjcyOlxcdFxcdGlmICghX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsocywgZ2ZwLCBzaGVhZi1cXHUwMDNlY2FwYWNpdHkgLSBzaGVhZi1cXHUwMDNlc2l6ZSxcXG5tbS9zbHViLmMtNTI3My1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZzaGVhZi1cXHUwMDNlb2JqZWN0c1tzaGVhZi1cXHUwMDNlc2l6ZV0pKVxcbi0tXFxubW0vc2x1Yi5jPTczOTc9cmVmaWxsX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxuLS1cXG5tbS9zbHViLmMtNzQzMi1cXG5tbS9zbHViLmM6NzQzMzpzdGF0aWMgYm9vbCBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxubW0vc2x1Yi5jLTc0MzQtXFx0XFx0c2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbi0tXFxubW0vc2x1Yi5jLTc0NjYtLyoqXFxubW0vc2x1Yi5jOjc0Njc6ICoga21lbV9jYWNoZV9hbGxvY19idWxrIC0gQWxsb2NhdGUgbXVsdGlwbGUgb2JqZWN0c1xcbm1tL3NsdWIuYy03NDY4LSAqIEBzOlxcdFxcdFRoZSBjYWNoZSB0byBhbGxvY2F0ZSBmcm9tXFxuLS1cXG5tbS9zbHViLmMtNzQ4Mi0gKi9cXG5tbS9zbHViLmM6NzQ4Mzpib29sIGttZW1fY2FjaGVfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxcbm1tL3NsdWIuYy03NDg0LVxcdFxcdHNpemVfdCBzaXplLCB2b2lkICoqcClcXG4tLVxcbm1tL3NsdWIuYy03NTE5LVxcdFxcdCAqL1xcbm1tL3NsdWIuYzo3NTIwOlxcdFxcdGlmICh1bmxpa2VseSghX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsocywgZmxhZ3MsIHNpemUgLSBpLFxcbm1tL3NsdWIuYy03NTIxLVxcdFxcdFxcdFxcdHAgKyBpKSkpIHtcXG4tLVxcbm1tL3NsdWIuYy03NTQzLX1cXG5tbS9zbHViLmM6NzU0NDpFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2NfYnVsa19ub3Byb2YpO1xcbm1tL3NsdWIuYy03NTQ1LVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTI0MT1zdGF0aWMgaW50IHhkcF9yZWN2X2ZyYW1lcyhzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzLCBpbnQgbmZyYW1lcyxcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0yNDgtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjI0OTpcXHRpZiAodW5saWtlbHkoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhuZXRfaG90ZGF0YS5za2J1ZmZfY2FjaGUsIGdmcCxcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMjUwLVxcdFxcdFxcdFxcdFxcdCAgICBuZnJhbWVzLCAodm9pZCAqKilza2JzKSkpIHtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI4ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpuYXBpX3NrYl9jYWNoZV9nZXQoYm9vbCBhbGxvYylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI5MC1cXHRpZiAodW5saWtlbHkoIW5jLVxcdTAwM2Vza2JfY291bnQpKSB7XFxubmV0L2NvcmUvc2tidWZmLmM6MjkxOlxcdFxcdGlmIChhbGxvYyBcXHUwMDI2XFx1MDAyNiBrbWVtX2NhY2hlX2FsbG9jX2J1bGsobmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTI5Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MzE2PXN0YXRpYyBpbmxpbmUgdm9pZCBza2J1ZmZfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM0MS0gKiBSZXR1cm46IG51bWJlciBvZiBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIHNrYnMgKEBuIGlmIG5vIGFjdHVhbCBhbGxvY2F0aW9uXFxubmV0L2NvcmUvc2tidWZmLmM6MzQyOiAqXFx0ICAgbmVlZGVkIG9yIGttZW1fY2FjaGVfYWxsb2NfYnVsaygpIGRpZG4ndCBmYWlsKS5cXG5uZXQvY29yZS9za2J1ZmYuYy0zNDMtICovXFxubmV0L2NvcmUvc2tidWZmLmM9MzQ0PXUzMiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayh2b2lkICoqc2ticywgdTMyIG4pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zNTUtXFx0YnVsayA9IG1pbihOQVBJX1NLQl9DQUNIRV9TSVpFIC0gbmMtXFx1MDAzZXNrYl9jb3VudCwgTkFQSV9TS0JfQ0FDSEVfQlVMSyk7XFxubmV0L2NvcmUvc2tidWZmLmM6MzU2OlxcdGlmIChrbWVtX2NhY2hlX2FsbG9jX2J1bGsobmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTM1Ny1cXHRcXHRcXHRcXHQgIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4sIGJ1bGssXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zNjMtXFx0LyogU3RpbGwgbm90IGVub3VnaC4gQnVsay1hbGxvY2F0ZSB0aGUgbWlzc2luZyBwYXJ0IGRpcmVjdGx5LCB6ZXJvZWQgKi9cXG5uZXQvY29yZS9za2J1ZmYuYzozNjQ6XFx0aWYgKGttZW1fY2FjaGVfYWxsb2NfYnVsayhuZXRfaG90ZGF0YS5za2J1ZmZfY2FjaGUsXFxubmV0L2NvcmUvc2tidWZmLmMtMzY1LVxcdFxcdFxcdFxcdCAgR0ZQX0FUT01JQyB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9OT1dBUk4sXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz01MTk3PXN0YXRpYyB2b2lkIHNrYl9leHRlbnNpb25zX2luaXQodm9pZCkge31cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUyMDUtI2RlZmluZSBGTEFHX1NLQl9OT19NRVJHRVxcdFNMQUJfTk9fTUVSR0VcXG5uZXQvY29yZS9za2J1ZmYuYzo1MjA2OiNlbHNlIC8qIENPTkZJR19TTFVCX1RJTlkgLSBzaW1wbGUgbG9vcCBpbiBrbWVtX2NhY2hlX2FsbG9jX2J1bGsgKi9cXG5uZXQvY29yZS9za2J1ZmYuYy01MjA3LSNkZWZpbmUgRkxBR19TS0JfTk9fTUVSR0VcXHQwXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0xODU9dm9pZCBrbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKmxpc3QpO1xcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjE4Njpib29sIGttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplLFxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTE4Ny1cXHRcXHRcXHQgIHZvaWQgKipsaXN0KTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM9MTUzPXZvaWQga21lbV9jYWNoZV9zaHJpbmsoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMTU2LVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM6MTU3OmJvb2wga21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGdmcCwgc2l6ZV90IHNpemUsXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0xNTgtXFx0XFx0XFx0ICB2b2lkICoqcClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM9MjU1PWttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMjc0LVxcdHNoZWFmLVxcdTAwM2VzaXplID0gc2l6ZTtcXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjI3NTpcXHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhzLCBnZnAsIHNpemUsIHNoZWFmLVxcdTAwM2VvYmplY3RzKSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMjc2LVxcdFxcdGZyZWUoc2hlYWYpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYz0yODM9aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuLS1cXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTMwMC1cXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjMwMTpcXHRpZiAoIWttZW1fY2FjaGVfYWxsb2NfYnVsayhzLCBnZnAsIHNpemUgLSBzaGVhZi1cXHUwMDNlc2l6ZSxcXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTMwMi1cXHRcXHRcXHRcXHUwMDI2c2hlYWYtXFx1MDAzZW9iamVjdHNbc2hlYWYtXFx1MDAzZXNpemVdKSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM9MzM3PXZvaWQgdGVzdF9rbWVtX2NhY2hlX2J1bGsodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmMtMzU1LVxcbnRvb2xzL3Rlc3Rpbmcvc2hhcmVkL2xpbnV4LmM6MzU2OlxcdGttZW1fY2FjaGVfYWxsb2NfYnVsayh0ZXN0X2NhY2hlLCBfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgNSwgbGlzdCk7XFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0zNTctXFx0a21lbV9jYWNoZV9mcmVlX2J1bGsodGVzdF9jYWNoZSwgNSwgbGlzdCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jLTM3MC1cXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC5jOjM3MTpcXHRrbWVtX2NhY2hlX2FsbG9jX2J1bGsodGVzdF9jYWNoZTIsIF9fR0ZQX0RJUkVDVF9SRUNMQUlNLCAxMCwgbGlzdCk7XFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXguYy0zNzItXFx0a21lbV9jYWNoZV9mcmVlX2J1bGsodGVzdF9jYWNoZTIsIDEwLCBsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6Mjc6MzEuODMyMjM4MDg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NzgzNjU1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUmVhY2ggb2YgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBhcmVhLi4uIGBrbWVtX2NhY2hlX2FsbG9jX2J1bGtgIGlzIHVzZWQgaW4gYSBmZXcga2V5IHBsYWNlcyBJIGtub3cgd2VsbCDigJMgbmV0d29ya2luZyB3aXRoIE5BUEkncyBza2J1ZmYgY2FjaGUsIGlvX3VyaW5nLCBhbmQgZXZlbiB0aG9zZSBtYXBsZV90cmVlIHNoZWF2ZXMuIE15IGNvbmNlcm4gaXMsIEnigJl2ZSBzZWVuIHRoaXMgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBmdW5jdGlvbiBhcHBlYXIgYXMgbW9kaWZpZWQuIEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9uIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgbW9kaWZpY2F0aW9ucy5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYmV5b25kIHRoZSBvYnZpb3VzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIHRvIGVuc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEknbGwgaW5pdGlhdGUgYSBgZ3JlcGAgc2VhcmNoIGZvciBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIHRvIHN0YXJ0IGJ1aWxkaW5nIG91dCBhIGxpc3Qgb2YgYWxsIGNhbGxlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjE2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjM0LjgxMDYwNzUxMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNTExNzQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9NTYxMT1zdGF0aWMgbm9pbmxpbmUgdm9pZCBmcmVlX3RvX3BhcnRpYWxfbGlzdChcXG4tLVxcbm1tL3NsdWIuYy01NjgyLSAqL1xcbm1tL3NsdWIuYzo1NjgzOnN0YXRpYyBib29sIF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG5tbS9zbHViLmMtNTY4NC1cXHRcXHRcXHRcXHQgICAgICAgdm9pZCAqaGVhZCwgaW50IGNudClcXG4tLVxcbm1tL3NsdWIuYy01NzAyLVxcbm1tL3NsdWIuYzo1NzAzOlxcdGlmICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXFx1MDAyNm9sZCwgXFx1MDAyNm5ldywgXFxcIl9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0XFxcIikpIHtcXG5tbS9zbHViLmMtNTcwNC1cXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4tLVxcbm1tL3NsdWIuYz03MjY0PV9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG4tLVxcbm1tL3NsdWIuYy03MzA3LVxcbm1tL3NsdWIuYzo3MzA4OlxcdFxcdFxcdGlmIChfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzLCBzbGFiLCBoZWFkLCBjb3VudCkpXFxubW0vc2x1Yi5jLTczMDktXFx0XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjM2LjgyNTczMzU3OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTI1NjY1OTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgQ2FsbCBDaGFpbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIG9ubHkgY2FsbGVkIGZyb20gYF9fcmVmaWxsX29iamVjdHNfbm9kZWAsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB3aGVyZSBpcyAqdGhhdCogY2FsbGVkPyBMZXQgbWUgc2Vl4oCmIGl0J3MgYF9fcmVmaWxsX29iamVjdHNfYW55YCBhbmQgYHJlZmlsbF9vYmplY3RzYC4gQWxyaWdodCwgdGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duIGEgYml0LiBBbmQgd2hvIGNhbGxzICp0aG9zZSo/IExvb2tzIGxpa2UgYHJlZmlsbF9zaGVhZmAgYW5kIGBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsa2AuIE9rYXksIHdlJ3JlIGJ1aWxkaW5nIGEgbmljZSBsaXR0bGUgY2FsbCBncmFwaCBoZXJlLlxuXG5TbywgYHJlZmlsbF9zaGVhZmAgaXMgY2FsbGVkIGJ5IGBfX3Bjc19yZXBsYWNlX2VtcHR5X21haW5gLCBgX19wcmVmaWxsX3NoZWFmX3BmbWVtYWxsb2NgLCBhbmQgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYC4gQW5kIGZpbmFsbHksIHdoYXQncyBjYWxsaW5nIGBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsa2A/IFJpZ2h0LCBga21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmYCwgYGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmYCwgYW5kIGBrbWVtX2NhY2hlX2FsbG9jX2J1bGtfbm9wcm9mYC5cblxuTm93LCBJJ20gZ2V0dGluZyBhIGZlZWxpbmcgdGhhdCB0aGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gc29tZSBzcGVjaWZpYyBTTFVCIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBDT05GSUdfU0xVQmAgb3IgYENPTkZJR19TTFVCX1RJTllgIG9yIHBlcmhhcHMgc29tZXRoaW5nIGVsc2UgbGlrZSB0aGF0IGlzIGluIHBsYXkgaGVyZS4gTGV0IG1lIGhhdmUgYSBsb29rIGluIGBtbS9zbHViLmNgIGFyb3VuZCB0aGUgYF9fa21lbV9jYWNoZV9hbGxvY19idWxrYCBmdW5jdGlvbiwgYW5kIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBhcyB3ZWxsLiBUaGlzIG1pZ2h0IGdpdmUgbWUgdGhlIGtleSB0byB3aHkgdGhpcyBjaGFpbiBpcyBiZWluZyB1c2VkIGFuZCB3aGVyZSB0aGUgcmVhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBtaWdodCBsaWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODUyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjM5Ljk1MTQwMTc5OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0OTU0MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTFVCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTE2Mj1tZW51IFxcXCJTbGFiIGFsbG9jYXRvciBvcHRpb25zXFxcIlxcbm1tL0tjb25maWctMTYzLVxcbm1tL0tjb25maWc6MTY0OmNvbmZpZyBTTFVCXFxubW0vS2NvbmZpZy0xNjUtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubW0vS2NvbmZpZz0xNjg9Y29uZmlnIEtWRlJFRV9SQ1VfQkFUQ0hFRFxcbi0tXFxubW0vS2NvbmZpZy0xNzItXFxubW0vS2NvbmZpZzoxNzM6Y29uZmlnIFNMVUJfVElOWVxcbm1tL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkNvbmZpZ3VyZSBmb3IgbWluaW1hbCBtZW1vcnkgZm9vdHByaW50XFxcIlxcbi0tXFxubW0vS2NvbmZpZz0yMTc9Y29uZmlnIFNMQUJfQlVDS0VUU1xcbi0tXFxubW0vS2NvbmZpZy0yMzMtXFxubW0vS2NvbmZpZzoyMzQ6Y29uZmlnIFNMVUJfU1RBVFNcXG5tbS9LY29uZmlnLTIzNS1cXHRkZWZhdWx0IG5cXG4tLVxcbm1tL0tjb25maWcuZGVidWc9NDE9Y29uZmlnIERFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy00Ny1cXG5tbS9LY29uZmlnLmRlYnVnOjQ4OmNvbmZpZyBTTFVCX0RFQlVHXFxubW0vS2NvbmZpZy5kZWJ1Zy00OS1cXHRkZWZhdWx0IHlcXG4tLVxcbm1tL0tjb25maWcuZGVidWctNTgtXFxubW0vS2NvbmZpZy5kZWJ1Zzo1OTpjb25maWcgU0xVQl9ERUJVR19PTlxcbm1tL0tjb25maWcuZGVidWctNjAtXFx0Ym9vbCBcXFwiU0xVQiBkZWJ1Z2dpbmcgb24gYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctNzItXFxubW0vS2NvbmZpZy5kZWJ1Zzo3Mzpjb25maWcgU0xVQl9SQ1VfREVCVUdcXG5tbS9LY29uZmlnLmRlYnVnLTc0LVxcdGJvb2wgXFxcIkVuYWJsZSBVQUYgZGV0ZWN0aW9uIGluIFRZUEVTQUZFX0JZX1JDVSBjYWNoZXMgKGZvciBLQVNBTilcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjQwLjA1NjM1OTQwN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjcxMTI0NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlNMVUIgQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgY29uZmlybSB0aGUgZGVmYXVsdCBmb3IgYFNMVUJgLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQncyBzZXQgdG8gJ3knIGluIGBtbS9LY29uZmlnYC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTm93LCBJIHdhbnQgdG8gc2VlIGhvdyBgQ09ORklHX1NMVUJfVElOWWAgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgYFNMVUJgIGNvbmZpZ3VyYXRpb24uIE15IG1lbnRhbCBtb2RlbCBpcyBqdW1waW5nIHRvIGBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsa2AgYW5kIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgLiBBcmUgZWl0aGVyIG9mIHRob3NlIGZ1bmN0aW9ucyBjb25kaXRpb25hbCBvbiBgIUNPTkZJR19TTFVCX1RJTllgPyBUbyBjb25maXJtLCBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIGBtbS9zbHViLmNgIGFuZCBzZWFyY2ggZm9yIHRoZSBgU0xVQl9USU5ZYCBzeW1ib2wuIFRoYXQnbGwgZXhwb3NlIHRoZSBrZXkgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg2NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyNzo0Mi4zMjc0ODY5MDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDI0NzYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTTFVCX1RJTllcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTY4PWNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcXG5tbS9LY29uZmlnLTE2OS1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzoxNzA6XFx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZIFxcdTAwMjZcXHUwMDI2ICFUSU5ZX1JDVVxcbm1tL0tjb25maWctMTcxLVxcdGRlcGVuZHMgb24gIVJDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXFxubW0vS2NvbmZpZy0xNzItXFxubW0vS2NvbmZpZzoxNzM6Y29uZmlnIFNMVUJfVElOWVxcbm1tL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkNvbmZpZ3VyZSBmb3IgbWluaW1hbCBtZW1vcnkgZm9vdHByaW50XFxcIlxcbi0tXFxubW0vS2NvbmZpZz0yMDA9Y29uZmlnIFNMQUJfRlJFRUxJU1RfUkFORE9NXFxubW0vS2NvbmZpZy0yMDEtXFx0Ym9vbCBcXFwiUmFuZG9taXplIHNsYWIgZnJlZWxpc3RcXFwiXFxubW0vS2NvbmZpZzoyMDI6XFx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXFxubW0vS2NvbmZpZy0yMDMtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0yMDg9Y29uZmlnIFNMQUJfRlJFRUxJU1RfSEFSREVORURcXG5tbS9LY29uZmlnLTIwOS1cXHRib29sIFxcXCJIYXJkZW4gc2xhYiBmcmVlbGlzdCBtZXRhZGF0YVxcXCJcXG5tbS9LY29uZmlnOjIxMDpcXHRkZXBlbmRzIG9uICFTTFVCX1RJTllcXG5tbS9LY29uZmlnLTIxMS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTIxNz1jb25maWcgU0xBQl9CVUNLRVRTXFxubW0vS2NvbmZpZy0yMTgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBhbGxvY2F0aW9uIGZyb20gc2VwYXJhdGUga21hbGxvYyBidWNrZXRzXFxcIlxcbm1tL0tjb25maWc6MjE5OlxcdGRlcGVuZHMgb24gIVNMVUJfVElOWVxcbm1tL0tjb25maWctMjIwLVxcdGRlZmF1bHQgU0xBQl9GUkVFTElTVF9IQVJERU5FRFxcbi0tXFxubW0vS2NvbmZpZz0yMzQ9Y29uZmlnIFNMVUJfU1RBVFNcXG4tLVxcbm1tL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIkVuYWJsZSBwZXJmb3JtYW5jZSBzdGF0aXN0aWNzXFxcIlxcbm1tL0tjb25maWc6MjM3OlxcdGRlcGVuZHMgb24gU1lTRlMgXFx1MDAyNlxcdTAwMjYgIVNMVUJfVElOWVxcbm1tL0tjb25maWctMjM4LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MjQ3PWNvbmZpZyBLTUFMTE9DX1BBUlRJVElPTl9DQUNIRVNcXG5tbS9LY29uZmlnOjI0ODpcXHRkZXBlbmRzIG9uICFTTFVCX1RJTllcXG5tbS9LY29uZmlnLTI0OS1cXHRib29sIFxcXCJQYXJ0aXRpb25lZCBzbGFiIGNhY2hlcyBmb3Igbm9ybWFsIGttYWxsb2NcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnPTQ4PWNvbmZpZyBTTFVCX0RFQlVHXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTUwLVxcdGJvb2wgXFxcIkVuYWJsZSBTTFVCIGRlYnVnZ2luZyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5tbS9LY29uZmlnLmRlYnVnOjUxOlxcdGRlcGVuZHMgb24gU1lTRlMgXFx1MDAyNlxcdTAwMjYgIVNMVUJfVElOWVxcbm1tL0tjb25maWcuZGVidWctNTItXFx0c2VsZWN0IFNUQUNLREVQT1QgaWYgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuLS1cXG5tbS9zbGFiLmg9MjQwPXN0cnVjdCBrbWVtX2NhY2hlIHtcXG4tLVxcbm1tL3NsYWIuaC0yOTgtICogYm9vdHN0cmFwX3NoZWFmIHRlbXBvcmFyaWx5IGR1cmluZyBpbml0LCBvciBwZXJtYW5lbnRseSBmb3IgdGhlIGJvb3QgY2FjaGVzXFxubW0vc2xhYi5oOjI5OTogKiBhbmQgY2FjaGVzIHdpdGggZGVidWdnaW5nIGVuYWJsZWQsIG9yIGFsbCBjYWNoZXMgd2l0aCBDT05GSUdfU0xVQl9USU5ZLiBUaGlzXFxubW0vc2xhYi5oLTMwMC0gKiBoZWxwZXIgZGlzdGluZ3Vpc2hlcyB3aGV0aGVyIGNhY2hlIGhhcyByZWFsIG5vbi1ib290c3RyYXAgc2hlYXZlcy5cXG4tLVxcbm1tL3NsYWIuaD0zMDI9c3RhdGljIGlubGluZSBib29sIGNhY2hlX2hhc19zaGVhdmVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsYWIuaC0zMDMte1xcbm1tL3NsYWIuaDozMDQ6XFx0LyogVGVzdCBDT05GSUdfU0xVQl9USU5ZIGZvciBjb2RlIGVsaW1pbmF0aW9uIHB1cnBvc2VzICovXFxubW0vc2xhYi5oOjMwNTpcXHRyZXR1cm4gIUlTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgXFx1MDAyNlxcdTAwMjYgcy1cXHUwMDNlc2hlYWZfY2FwYWNpdHk7XFxubW0vc2xhYi5oLTMwNi19XFxubW0vc2xhYi5oLTMwNy1cXG5tbS9zbGFiLmg6MzA4OiNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXFx1MDAyNlxcdTAwMjYgIWRlZmluZWQoQ09ORklHX1NMVUJfVElOWSlcXG5tbS9zbGFiLmgtMzA5LSNkZWZpbmUgU0xBQl9TVVBQT1JUU19TWVNGUyAxXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTgxNT1FWFBPUlRfU1lNQk9MKGttYWxsb2Nfc2l6ZV9yb3VuZHVwKTtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtODI4LVxcbm1tL3NsYWJfY29tbW9uLmM6ODI5OiNpZm5kZWYgQ09ORklHX1NMVUJfVElOWVxcbm1tL3NsYWJfY29tbW9uLmMtODMwLSNkZWZpbmUgS01BTExPQ19SQ0xfTkFNRShzeilcXHQubmFtZVtLTUFMTE9DX1JFQ0xBSU1dID0gXFxcImttYWxsb2MtcmNsLVxcXCIgI3N6LFxcbi0tXFxubW0vc2x1Yi5jPTE5Mz1lbnVtIHNsYWJfZmxhZ3Mge1xcbi0tXFxubW0vc2x1Yi5jLTE5OC1cXG5tbS9zbHViLmM6MTk5OiNpZm5kZWYgQ09ORklHX1NMVUJfVElOWVxcbm1tL3NsdWIuYy0yMDAtI2RlZmluZSBfX2Zhc3RwYXRoX2lubGluZSBfX2Fsd2F5c19pbmxpbmVcXG4tLVxcbm1tL3NsdWIuYz0yNTQ9dm9pZCAqZml4dXBfcmVkX2xlZnQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKnApXFxuLS1cXG5tbS9zbHViLmMtMjcyLVxcbm1tL3NsdWIuYzoyNzM6I2lmbmRlZiBDT05GSUdfU0xVQl9USU5ZXFxubW0vc2x1Yi5jLTI3NC0vKlxcbi0tXFxubW0vc2x1Yi5jPTM4ODU9c3RhdGljIHZvaWQgKmdldF9mcm9tX3BhcnRpYWxfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy0zOTEzLVxcbm1tL3NsdWIuYzozOTE0OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcXG5tbS9zbHViLmMtMzkxNS1cXHRcXHRcXHRvYmplY3QgPSBhbGxvY19zaW5nbGVfZnJvbV9wYXJ0aWFsKHMsIG4sIHNsYWIsXFxuLS1cXG5tbS9zbHViLmM9NDQ3OD1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG9jX2Zyb21fbmV3X3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTQ1MjctICogU2xvdyBwYXRoLiBXZSBmYWlsZWQgdG8gYWxsb2NhdGUgdmlhIHBlcmNwdSBzaGVhdmVzIG9yIHRoZXkgYXJlIG5vdCBhdmFpbGFibGVcXG5tbS9zbHViLmM6NDUyODogKiBkdWUgdG8gYm9vdHN0cmFwIG9yIGRlYnVnZ2luZyBlbmFibGVkIG9yIFNMVUJfVElOWS5cXG5tbS9zbHViLmMtNDUyOS0gKlxcbi0tXFxubW0vc2x1Yi5jPTQ1MzM9c3RhdGljIHZvaWQgKl9fX3NsYWJfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSxcXG4tLVxcbm1tL3NsdWIuYy00NTgxLVxcbm1tL3NsdWIuYzo0NTgyOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcXG5tbS9zbHViLmMtNDU4My1cXHRcXHRvYmplY3QgPSBhbGxvY19zaW5nbGVfZnJvbV9uZXdfc2xhYihzLCBzbGFiLCBhYyk7XFxuLS1cXG5tbS9zbHViLmM9NTcyMT1zdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtNTczMS1cXG5tbS9zbHViLmM6NTczMjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBrbWVtX2NhY2hlX2RlYnVnKHMpKSB7XFxubW0vc2x1Yi5jLTU3MzMtXFx0XFx0ZnJlZV90b19wYXJ0aWFsX2xpc3Qocywgc2xhYiwgaGVhZCwgdGFpbCwgY250LCBhZGRyKTtcXG4tLVxcbm1tL3NsdWIuYz03NDMzPXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy03NDM3LVxcbm1tL3NsdWIuYzo3NDM4OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcXG5tbS9zbHViLmMtNzQzOS1cXHRcXHRjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0IGFjID0ge1xcbi0tXFxubW0vc2x1Yi5jPTc1NjY9c3RhdGljIHVuc2lnbmVkIGludCBzbHViX21heF9vcmRlciA9XFxubW0vc2x1Yi5jOjc1Njc6XFx0SVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSA/IDEgOiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUjtcXG5tbS9zbHViLmMtNzU2OC1zdGF0aWMgdW5zaWduZWQgaW50IHNsdWJfbWluX29iamVjdHM7XFxuLS1cXG5tbS9zbHViLmM9NzcwNz1zdGF0aWMgaW50IGluaXRfcGVyY3B1X3NoZWF2ZXMoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtNzczMi1cXHRcXHQgKiBXZSBrZWVwIGJvb3RzdHJhcF9zaGVhZiBmb3Iga21lbV9jYWNoZSBhbmQga21lbV9jYWNoZV9ub2RlLFxcbm1tL3NsdWIuYzo3NzMzOlxcdFxcdCAqIGNhY2hlcyB3aXRoIGRlYnVnIGVuYWJsZWQsIGFuZCBhbGwgY2FjaGVzIHdpdGggU0xVQl9USU5ZLlxcbm1tL3NsdWIuYy03NzM0LVxcdFxcdCAqIEZvciBrbWFsbG9jIGNhY2hlcyBpdCdzIHVzZWQgdGVtcG9yYXJpbHkgZHVyaW5nIHRoZSBpbml0aWFsXFxuLS1cXG5tbS9zbHViLmM9Nzg3MT1zdGF0aWMgdW5zaWduZWQgaW50IGNhbGN1bGF0ZV9zaGVhZl9jYXBhY2l0eShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy03ODc4LVxcbm1tL3NsdWIuYzo3ODc5OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IHMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0xBQl9ERUJVR19GTEFHUylcXG5tbS9zbHViLmMtNzg4MC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3NsdWIuYz04NTc0PXN0YXRpYyB2b2lkIF9faW5pdCBib290c3RyYXBfY2FjaGVfc2hlYXZlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy04NTg0LVxcbm1tL3NsdWIuYzo4NTg1OlxcdC8qIGNhcGFjaXR5IGNhbiBiZSAwIGR1ZSB0byBkZWJ1Z2dpbmcgb3IgU0xVQl9USU5ZICovXFxubW0vc2x1Yi5jLTg1ODYtXFx0aWYgKCFjYXBhY2l0eSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6Mjc6NDIuNDM3NzM4ODhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTA5MTg4Njg1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipTTFVCIEFsbG9jYXRvciBPcHRpbWl6YXRpb24gLSBXb3J0aHkgb2YgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbm90ZSB0aGF0IGBDT05GSUdfU0xVQmAgaXMgdGhlIGRlZmF1bHQgYW5kIHN0YW5kYXJkIHNsYWIgYWxsb2NhdG9yLCBhbmQgYENPTkZJR19TTFVCX1RJTllgIGRpc2FibGVzIHNoZWF2ZXMuIE5vIG90aGVyIHNwZWNpYWwgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCBhcyBmYXIgYXMgSSBjYW4gc2VlLiBTbywgYFNMVUJgIGlzIHRoZSBzdGFuZGFyZCBhbGxvY2F0b3IsIGVuYWJsZWQgYnkgZGVmYXVsdCwgbm90aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5IGhlcmUuXG5cbk5vdywgdGhlIGNvcmUgb2YgdGhpcyBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGFmZmVjdGVkLiBJJ20gZm9jdXNpbmcgb24gdGhlIG1vZGlmaWNhdGlvbnMsIHNwZWNpZmljYWxseSwgdGhvc2UgcmVsYXRlZCB0byBmcmVlbGlzdCBoYW5kbGluZyBhbmQgYnVsayBvcGVyYXRpb25zLiBUaGUgZnVuY3Rpb25zIHRoYXQgc3RhbmQgb3V0IGFyZSBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlYC4gSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgcmVsYXRlZCBlbnRyeSBwb2ludHMuIFRoZSBjYWxsZXJzIG9yIHJlbGF0ZWQgZnVuY3Rpb25zIGluY2x1ZGUgYF9fcmVmaWxsX29iamVjdHNfYW55YCwgYHJlZmlsbF9vYmplY3RzYCwgYHJlZmlsbF9zaGVhZmAsIGBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWZgLCBga21lbV9jYWNoZV9yZWZpbGxfc2hlYWZgLCBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgLCBhbmQgdGhlIGBrbWVtX2NhY2hlX2FsbG9jX2J1bGtgIGZhbWlseS5cblxuYGttZW1fY2FjaGVfYWxsb2NfYnVsa2AgaXMgdXNlZCBieSBuZXR3b3JraW5nIGFuZCBzb21lIGJ1bGsgYWxsb2NhdG9ycywgYnV0IGl0IGlzbid0IGFzIHViaXF1aXRvdXMgYXMgYGttYWxsb2NgIGFuZCBga2ZyZWVgLCB3aGljaCBJIG5vdGUgZm9yIGNvbnRleHQuIFRoZSBvdGhlcnMsIGBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWZgLCBga21lbV9jYWNoZV9yZWZpbGxfc2hlYWZgLCBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgLCBgcmVmaWxsX3NoZWFmYCwgYHJlZmlsbF9vYmplY3RzYCwgYF9fcmVmaWxsX29iamVjdHNfbm9kZWAsIGFuZCBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgLCBhcmUgdGhlIG1vcmUgc3BlY2lmaWMgdGFyZ2V0cyBoZXJlLlxuXG5MZXQncyB2ZXJpZnkgdGhlc2Ugc3ltYm9scy4gSSdtIGNvbmZpZGVudCB0aGV5IGFyZSBhbGwgaW4gYG1tL3NsdWIuY2AuXG5cbk9rYXksIEkndmUgY29uZmlybWVkIHRoYXQgdGhlc2Ugc3ltYm9scyBleGlzdCBpbiBgbW0vc2x1Yi5jYDpcbiogICBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgOiBzdGF0aWNcbiogICBgX19yZWZpbGxfb2JqZWN0c19ub2RlYDogc3RhdGljXG4qICAgYHJlZmlsbF9vYmplY3RzYDogc3RhdGljXG4qICAgYHJlZmlsbF9zaGVhZmA6IHN0YXRpY1xuKiAgIGBrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWZgOiBleHBvcnRlZFxuKiAgIGBrbWVtX2NhY2hlX3JlZmlsbF9zaGVhZmA6IGV4cG9ydGVkXG4qICAgYGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmYDogZXhwb3J0ZWRcblxuTGluZSBudW1iZXIgdmVyaWZpY2F0aW9uIGlzIGFsc28gZG9uZTpcbiogICBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGF0IGxpbmUgNTY4M1xuKiAgIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgIGF0IGxpbmUgNzI2NFxuKiAgIGByZWZpbGxfb2JqZWN0c2AgYXQgbGluZSA3Mzk3XG4qICAgYHJlZmlsbF9zaGVhZmAgYXQgbGluZSAyODc2XG4qICAgYGttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZmAgYXQgbGluZSA1MTExXG4qICAgYGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmYCBhdCBsaW5lIDUyNTJcbiogICBga21lbV9jYWNoZV9yZXR1cm5fc2hlYWZgIGF0IGxpbmUgNTE5NFxuXG5Hb29kLCBhbmQgaXQgbG9va3MgbGlrZSBgbW0vc2x1Yi5jYCBpcyB0aGUgb25seSBmaWxlIGFmZmVjdGVkLlxuXG5Ob3csIHRoZSBwYXRjaCdzIGltcGFjdC4gVGhlIGtleSBpcyBob3cgYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBhbmQgYF9fcmVmaWxsX29iamVjdHNfbm9kZWAgaGF2ZSBiZWVuIG1vZGlmaWVkLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyBsb2NraW5nIGFuZCBmcmVlbGlzdCBtYW5hZ2VtZW50IGR1cmluZyBidWxrIHJlZmlsbHMgYW5kIHNoZWF2ZXMuIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgbm93IHRha2VzIGBuLVx1MDAzZWxpc3RfbG9ja2AgYXJvdW5kIGBzbGFiX3VwZGF0ZV9mcmVlbGlzdGAgYW5kIHRoZW4gaW1tZWRpYXRlbHkgY2FsbHMgYGFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKWAgdW5kZXIgdGhlIHNhbWUgbG9jay4gVGhpcyBjaGFuZ2VzIHRoZSBzeW5jaHJvbml6YXRpb24gYW5kIHRoZSBoYW5kbGluZyBvZiBwYXJ0aWFsIHNsYWIgbGlzdHMsIG1vdmluZyBmcm9tIGEgZGVmZXJyZWQgYHBjLnNsYWJzYCB1cGRhdGUgdG8gYW4gaW1tZWRpYXRlIGNhbGwuXG5cblRoaXMgaXMgYSBjb3JlIG1lbW9yeSBhbGxvY2F0b3IgY2hhbmdlIHJlYWNoYWJsZSB2aWEgY29tbW9uIHN5c2NhbGxzIGFuZCBhbGxvY2F0aW9ucywgZXNwZWNpYWxseSBpbiBRRU1VL3g4Nl82NCBlbnZpcm9ubWVudHMuIEdpdmVuIHRoZXNlIG1vZGlmaWNhdGlvbnMsIHRoaXMgaXMgcHJpbWUgdGVycml0b3J5IGZvciBjb25jdXJyZW5jeSBidWdzLCBsaXN0IGNvcnJ1cHRpb24sIGxvY2tpbmcgaXNzdWVzLCBhbmQgaW5jb25zaXN0ZW5jaWVzIGluIHNsYWIgc3RhdGVzLiBGdXp6aW5nIGlzICphYnNvbHV0ZWx5KiB3YXJyYW50ZWQgaGVyZS5cblxuU28sIHRoZSBwYXJhbWV0ZXJzIGZvciBgc2V0LXJlc3VsdHNgOlxuKiAgIGBXb3J0aEZ1enppbmdgOiAqKnRydWUqKlxuKiAgIGBSZWFzb25pbmdgOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBmcmVlbGlzdCByZXR1cm4gbG9naWMgYW5kIHBhcnRpYWwgc2xhYiBsaXN0IGhhbmRsaW5nIHVuZGVyIGBuLVx1MDAzZWxpc3RfbG9ja2AgaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KClgIGFuZCBgX19yZWZpbGxfb2JqZWN0c19ub2RlKClgIGluIHRoZSBTTFVCIGFsbG9jYXRvciAobW0vc2x1Yi5jKS4gVGhpcyBhZmZlY3RzIFNMVUIgYnVsayBhbGxvY2F0aW9uIGFuZCBzaGVhZiByZWZpbGxpbmcgbG9naWMuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHdhcnJhbnQgZnV6emluZyB0byBkZXRlY3QgcmFjZSBjb25kaXRpb25zIG9yIGxpc3QvbG9jayBjb3JydXB0aW9uLlwiXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFwiLCBcIl9fcmVmaWxsX29iamVjdHNfbm9kZVwiLCBcInJlZmlsbF9vYmplY3RzXCIsXG5cbiIsIklucHV0VG9rZW5zIjoyMTMwMiwiT3V0cHV0VG9rZW5zIjoxOTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjUxLjUyOTYyODY0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjg3MzYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0xVQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0XCIsXG4gICAgXCJfX3JlZmlsbF9vYmplY3RzX25vZGVcIixcbiAgICBcInJlZmlsbF9vYmplY3RzXCIsXG4gICAgXCJyZWZpbGxfc2hlYWZcIixcbiAgICBcImttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZlwiLFxuICAgIFwia21lbV9jYWNoZV9yZWZpbGxfc2hlYWZcIixcbiAgICBcImttZW1fY2FjaGVfcmV0dXJuX3NoZWFmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZyZWVsaXN0IHJldHVybiBhbmQgcGFydGlhbCBzbGFiIGxpc3QgbWFuYWdlbWVudCBsb2dpYyB1bmRlciBuLVxcdTAwM2VsaXN0X2xvY2sgaW4gX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3QoKSBhbmQgX19yZWZpbGxfb2JqZWN0c19ub2RlKCkgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIChtbS9zbHViLmMpLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgU0xVQiBidWxrIGFsbG9jYXRpb24gYW5kIHNoZWFmIHJlZmlsbGluZyBwYXRocywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGNyaXRpY2FsIGZvciBtZW1vcnkgc2FmZXR5IGFuZCBsb2NrIGNvcnJlY3RuZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMVUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFwiLFxuICAgIFwiX19yZWZpbGxfb2JqZWN0c19ub2RlXCIsXG4gICAgXCJyZWZpbGxfb2JqZWN0c1wiLFxuICAgIFwicmVmaWxsX3NoZWFmXCIsXG4gICAgXCJrbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWZcIixcbiAgICBcImttZW1fY2FjaGVfcmVmaWxsX3NoZWFmXCIsXG4gICAgXCJrbWVtX2NhY2hlX3JldHVybl9zaGVhZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmcmVlbGlzdCByZXR1cm4gYW5kIHBhcnRpYWwgc2xhYiBsaXN0IG1hbmFnZW1lbnQgbG9naWMgdW5kZXIgbi1cXHUwMDNlbGlzdF9sb2NrIGluIF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KCkgYW5kIF9fcmVmaWxsX29iamVjdHNfbm9kZSgpIGluIHRoZSBTTFVCIGFsbG9jYXRvciAobW0vc2x1Yi5jKS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIFNMVUIgYnVsayBhbGxvY2F0aW9uIGFuZCBzaGVhZiByZWZpbGxpbmcgcGF0aHMsIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBjcml0aWNhbCBmb3IgbWVtb3J5IHNhZmV0eSBhbmQgbG9jayBjb3JyZWN0bmVzcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6Mjc6NTEuNjUyNTEwNDMzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAzMTA5NTg5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI3OjUxLjY1MzEzMDg4M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ5MDMwNDcwMzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBTTFVCIGFsbG9jYXRvciBpbnRlcm5hbCBsb2NraW5nIGFuZCBwYXJ0aWFsIGxpc3QgbWFuYWdlbWVudCBpbiBgbW0vc2x1Yi5jYCAoYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0YCBhbmQgYF9fcmVmaWxsX29iamVjdHNfbm9kZWApLiBTcGVjaWZpY2FsbHksIGl0IGFjcXVpcmVzIHRoZSBub2RlIGxpc3RfbG9jayBhbmQgYWRkcyB0aGUgc2xhYiB0byB0aGUgcGFydGlhbCBsaXN0IGRpcmVjdGx5IGluIGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgaW5zdGVhZCBvZiByZS1hZGRpbmcgaXQgdG8gdGhlIGxvY2FsIGBwYy5zbGFic2AgbGlzdCBpbiBgX19yZWZpbGxfb2JqZWN0c19ub2RlYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IGFmZmVjdCBTTFVCIGludGVybmFsIHN0YXRlLCBsb2NraW5nLCBhbmQgZnJlZWxpc3QvcGFydGlhbCBsaXN0IHRyYWNraW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKHN1Y2ggYXMgbG9jayBvcmRlciBpbnZlcnNpb25zLCBsaXN0IGNvcnJ1cHRpb24sIGRvdWJsZS1mcmVlLCBvciBzbGFiIG1ldGFkYXRhIGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBjaGVja3MuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGQgYWNjZXNzZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MThjY2JhZmQ1OWJiYzY3NTc1ZWYwNDdkMjRmNDZkZDdkZjBlOTQzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMzoyNjozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggZjliNTZjYjQzOWU3MC4uNWNiYmFjYjhlZTMyZiAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuKysrIGIvbW0vc2x1Yi5jXG5AQCAtNTY4NCw2ICs1Njg0LDggQEAgc3RhdGljIGJvb2wgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuIFx0XHRcdFx0ICAgICAgIHZvaWQgKmhlYWQsIGludCBjbnQpXG4ge1xuIFx0c3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIG9sZCwgbmV3O1xuK1x0c3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbjtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRvbGQuZnJlZWxpc3QgPSBzbGFiLVx1MDAzZWZyZWVsaXN0O1xuIFx0b2xkLmNvdW50ZXJzID0gc2xhYi1cdTAwM2Vjb3VudGVycztcbkBAIC01Njk1LDkgKzU2OTcsMTYgQEAgc3RhdGljIGJvb2wgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuIFx0bmV3LmNvdW50ZXJzID0gb2xkLmNvdW50ZXJzO1xuIFx0bmV3LmludXNlIC09IGNudDtcbiBcbi1cdGlmICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXHUwMDI2b2xkLCBcdTAwMjZuZXcsIFwiX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RcIikpXG4rXHRuID0gZ2V0X25vZGUocywgc2xhYl9uaWQoc2xhYikpO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbitcbitcdGlmICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXHUwMDI2b2xkLCBcdTAwMjZuZXcsIFwiX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RcIikpIHtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4gXG4rXHRhZGRfcGFydGlhbChuLCBzbGFiLCBBRERfVE9fVEFJTCk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtNzI5NiwxMCArNzMwNSw4IEBAIF9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pXG4gXHRcdFx0dm9pZCAqaGVhZCA9IG9iamVjdDtcbiBcdFx0XHR2b2lkICp0YWlsO1xuIFxuLVx0XHRcdGlmIChfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzLCBzbGFiLCBoZWFkLCBjb3VudCkpIHtcbi1cdFx0XHRcdGxpc3RfYWRkKFx1MDAyNnNsYWItXHUwMDNlc2xhYl9saXN0LCBcdTAwMjZwYy5zbGFicyk7XG4rXHRcdFx0aWYgKF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHMsIHNsYWIsIGhlYWQsIGNvdW50KSlcbiBcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbiBcbiBcdFx0XHRkbyB7XG4gXHRcdFx0XHR0YWlsID0gb2JqZWN0O1xuQEAgLTczMTIsNyArNzMxOSw3IEBAIF9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2cGMuc2xhYnMpKSB7XG4rXHRpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoXHUwMDI2cGMuc2xhYnMpKSkge1xuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuIFxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsYWIsIFx1MDAyNnBjLnNsYWJzLCBzbGFiX2xpc3QpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyNzo1MS42NTMxMzE3NDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQxMDEzNTQ0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2gsIGFzIEkgdW5kZXJzdGFuZCBpdC5cblxuKipFdmFsdWF0aW5nIHRoZSBTTFVCIFBhdGNoIGZvciBGdXp6aW5nIE5lZWRzKipcblxuUmlnaHQsIHNvIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgU0xVQiBwYXRjaCByZXF1aXJlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgZGV0ZWN0b3JzIGFyZSBnb2luZyB0byBiZSBnb29kIGVub3VnaC4gVGhhdOKAmXMgYSBnb29kIHF1ZXN0aW9uLCBhbmQgdGhlIGFuc3dlciwgYXMgdXN1YWwsIGNvbWVzIGRvd24gdG8gdGhlIGNvZGUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluLiBMZXQncyBzZWUgd2hhdCB3ZSdyZSBhY3R1YWxseSBsb29raW5nIGF0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgYW5kIHBhdGNoIGRldGFpbHMsIG9idmlvdXNseS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBwdWxsIHVwIGBtbS9zbHViLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgdGhlIHJlZ2lvbnMgbWVudGlvbmVkLCBzcGVjaWZpY2FsbHkgbGluZXMgNTY4NCBhbmQgNzI5Ni4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIG9mIHRob3NlIHNlY3Rpb25zIG9mIGNvZGUgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZlZWwgZm9yIHRoZSB0eXBlIG9mIG1lbW9yeSBtYW5pcHVsYXRpb24gYmVpbmcgZG9uZSBhbmQgd2hldGhlciBpdCdzIHRoZSBzb3J0IG9mIHRoaW5nIHRoYXQgS0FTQU4gbWlnaHQgbWlzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0b29scyBJIGhhdmUgYXZhaWxhYmxlIHRvIGNvbmR1Y3QgbXkgaW52ZXN0aWdhdGlvbi4gVGhpcyB3aWxsIGluZmx1ZW5jZSBteSBjb25jbHVzaW9ucyBhbmQgdGhlIHRob3JvdWdobmVzcyBvZiBteSBhbmFseXNpcy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIGEgc3BlY2lhbGl6ZWQgS01TQU4gc2Vzc2lvbiBpcyB3YXJyYW50ZWQsIG9yIGlmIEtBU0FOIHByb3ZpZGVzIGFkZXF1YXRlIGNvdmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyODoyNS43NTQ0ODg1MTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NsdWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NjgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NjgwOlxcdCAqXFxuNTY4MTpcXHQgKiBGYWlsIGlmIHRoZSBzbGFiIGlzbid0IGZ1bGwgYW55bW9yZSBkdWUgdG8gYSBjb25jdXJyZW50IGZyZWUuXFxuNTY4MjpcXHQgKi9cXG41NjgzOlxcdHN0YXRpYyBib29sIF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG41Njg0OlxcdFxcdFxcdFxcdFxcdCAgICAgICB2b2lkICpoZWFkLCBpbnQgY250KVxcbjU2ODU6XFx0e1xcbjU2ODY6XFx0XFx0c3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIG9sZCwgbmV3O1xcbjU2ODc6XFx0XFx0c3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbjtcXG41Njg4OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuNTY4OTpcXHRcXG41NjkwOlxcdFxcdG9sZC5mcmVlbGlzdCA9IHNsYWItXFx1MDAzZWZyZWVsaXN0O1xcbjU2OTE6XFx0XFx0b2xkLmNvdW50ZXJzID0gc2xhYi1cXHUwMDNlY291bnRlcnM7XFxuNTY5MjpcXHRcXG41NjkzOlxcdFxcdGlmIChvbGQuZnJlZWxpc3QpXFxuNTY5NDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNTY5NTpcXHRcXG41Njk2OlxcdFxcdG5ldy5mcmVlbGlzdCA9IGhlYWQ7XFxuNTY5NzpcXHRcXHRuZXcuY291bnRlcnMgPSBvbGQuY291bnRlcnM7XFxuNTY5ODpcXHRcXHRuZXcuaW51c2UgLT0gY250O1xcbjU2OTk6XFx0XFxuNTcwMDpcXHRcXHRuID0gZ2V0X25vZGUocywgc2xhYl9uaWQoc2xhYikpO1xcbjU3MDE6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xcbjU3MDI6XFx0XFxuNTcwMzpcXHRcXHRpZiAoIXNsYWJfdXBkYXRlX2ZyZWVsaXN0KHMsIHNsYWIsIFxcdTAwMjZvbGQsIFxcdTAwMjZuZXcsIFxcXCJfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdFxcXCIpKSB7XFxuNTcwNDpcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG41NzA1OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG41NzA2OlxcdFxcdH1cXG41NzA3OlxcdFxcbjU3MDg6XFx0XFx0YWRkX3BhcnRpYWwobiwgc2xhYiwgQUREX1RPX1RBSUwpO1xcbjU3MDk6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XFxuNTcxMDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG41NzExOlxcdH1cXG41NzEyOlxcdFxcbjU3MTM6XFx0LypcXG41NzE0OlxcdCAqIFNsb3cgcGF0aCBoYW5kbGluZy4gVGhpcyBtYXkgc3RpbGwgYmUgY2FsbGVkIGZyZXF1ZW50bHkgc2luY2Ugb2JqZWN0c1xcbjU3MTU6XFx0ICogaGF2ZSBhIGxvbmdlciBsaWZldGltZSB0aGFuIHRoZSBjcHUgc2xhYnMgaW4gbW9zdCBwcm9jZXNzaW5nIGxvYWRzLlxcbjU3MTY6XFx0ICpcXG41NzE3OlxcdCAqIFNvIHdlIHN0aWxsIGF0dGVtcHQgdG8gcmVkdWNlIGNhY2hlIGxpbmUgdXNhZ2UuIEp1c3QgdGFrZSB0aGUgc2xhYlxcbjU3MTg6XFx0ICogbG9jayBhbmQgZnJlZSB0aGUgaXRlbS4gSWYgdGhlcmUgaXMgbm8gYWRkaXRpb25hbCBwYXJ0aWFsIHNsYWJcXG41NzE5OlxcdCAqIGhhbmRsaW5nIHJlcXVpcmVkIHRoZW4gd2UgY2FuIHJldHVybiBpbW1lZGlhdGVseS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6Mjg6MjUuNzU0OTc3ODczWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMzQ0OTUyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgbW0vc2x1Yi5jYCDigJMgTGluZSBieSBMaW5lKipcblxuT2theSwgSSdtIHRoaW5raW5nLCBcIldlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBtbS9zbHViLmNgIGNvZGUgbW9yZSBkZWVwbHksIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dFwiLiAgSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgbWlkZGxlIG9mIHRoZSBmaWxlIHRvIHNlZSB3aGF0IGlzIGhhcHBlbmluZywgc28gbGV0J3MgY2hlY2sgbGluZXMgNzI4MCB0aHJvdWdoIDczNDAuIEkgZXhwZWN0IHRvIGdldCBzb21lIHVzZWZ1bCBpbmZvcm1hdGlvbiBvbiB0aGUgdG9waWMgYXQgaGFuZCBieSB6b29taW5nIGluIG9uIHRoaXMgc2VjdGlvbi4gSSBhbSBpbnRlcmVzdGVkIHRvIHNlZSB3aGF0IHRoYXQgcGFydGljdWxhciBjb2RlIGlzIGRvaW5nIHdpdGhpbiB0aGUgZ3JlYXRlciBjb250ZXh0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSB3YW50IHRvIGJ1aWxkIGEgYmV0dGVyIHBpY3R1cmUgb2Ygd2hhdCBpcyBnb2luZyBvbiBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTgxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyODoyOS44ODk0NzgwNjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NsdWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MjgwOlxcdFxcbjcyODE6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCBcXHUwMDI2cGMuc2xhYnMsIHNsYWJfbGlzdCkge1xcbjcyODI6XFx0XFxuNzI4MzpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuNzI4NDpcXHRcXG43Mjg1OlxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZzbGFiLVxcdTAwM2VzbGFiX2xpc3QpO1xcbjcyODY6XFx0XFxuNzI4NzpcXHRcXHRcXHRvYmplY3QgPSBnZXRfZnJlZWxpc3Rfbm9mcmVlemUocywgc2xhYiwgXFx1MDAyNmNvdW50KTtcXG43Mjg4OlxcdFxcbjcyODk6XFx0XFx0XFx0d2hpbGUgKGNvdW50IFxcdTAwMjZcXHUwMDI2IHJlZmlsbGVkIFxcdTAwM2MgbWF4KSB7XFxuNzI5MDpcXHRcXHRcXHRcXHRwW3JlZmlsbGVkXSA9IG9iamVjdDtcXG43MjkxOlxcdFxcdFxcdFxcdG9iamVjdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpO1xcbjcyOTI6XFx0XFx0XFx0XFx0bWF5YmVfd2lwZV9vYmpfZnJlZXB0cihzLCBwW3JlZmlsbGVkXSk7XFxuNzI5MzpcXHRcXG43Mjk0OlxcdFxcdFxcdFxcdHJlZmlsbGVkKys7XFxuNzI5NTpcXHRcXHRcXHRcXHRjb3VudC0tO1xcbjcyOTY6XFx0XFx0XFx0fVxcbjcyOTc6XFx0XFxuNzI5ODpcXHRcXHRcXHQvKlxcbjcyOTk6XFx0XFx0XFx0ICogRnJlZWxpc3QgaGFkIG1vcmUgb2JqZWN0cyB0aGFuIHdlIGNhbiBhY2NvbW1vZGF0ZSwgd2UgbmVlZCB0b1xcbjczMDA6XFx0XFx0XFx0ICogZnJlZSB0aGVtIGJhY2suIEZpcnN0IHdlIHRyeSB0byBiZSBvcHRpbWlzdGljIGFuZCBhc3N1bWUgdGhlXFxuNzMwMTpcXHRcXHRcXHQgKiBzbGFiIGlzIHN0aWxsIGZ1bGwgc2luY2Ugd2UganVzdCBkZXRhY2hlZCBpdHMgZnJlZWxpc3QuXFxuNzMwMjpcXHRcXHRcXHQgKiBPdGhlcndpc2Ugd2UgbXVzdCBmaW5kIHRoZSB0YWlsIG9iamVjdC5cXG43MzAzOlxcdFxcdFxcdCAqL1xcbjczMDQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGNvdW50KSkge1xcbjczMDU6XFx0XFx0XFx0XFx0dm9pZCAqaGVhZCA9IG9iamVjdDtcXG43MzA2OlxcdFxcdFxcdFxcdHZvaWQgKnRhaWw7XFxuNzMwNzpcXHRcXG43MzA4OlxcdFxcdFxcdFxcdGlmIChfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdChzLCBzbGFiLCBoZWFkLCBjb3VudCkpXFxuNzMwOTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG43MzEwOlxcdFxcbjczMTE6XFx0XFx0XFx0XFx0ZG8ge1xcbjczMTI6XFx0XFx0XFx0XFx0XFx0dGFpbCA9IG9iamVjdDtcXG43MzEzOlxcdFxcdFxcdFxcdFxcdG9iamVjdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpO1xcbjczMTQ6XFx0XFx0XFx0XFx0fSB3aGlsZSAob2JqZWN0KTtcXG43MzE1OlxcdFxcdFxcdFxcdF9fc2xhYl9mcmVlKHMsIHNsYWIsIGhlYWQsIHRhaWwsIGNvdW50LCBfUkVUX0lQXyk7XFxuNzMxNjpcXHRcXHRcXHR9XFxuNzMxNzpcXHRcXG43MzE4OlxcdFxcdFxcdGlmIChyZWZpbGxlZCBcXHUwMDNlPSBtYXgpXFxuNzMxOTpcXHRcXHRcXHRcXHRicmVhaztcXG43MzIwOlxcdFxcdH1cXG43MzIxOlxcdFxcbjczMjI6XFx0XFx0aWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KFxcdTAwMjZwYy5zbGFicykpKSB7XFxuNzMyMzpcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XFxuNzMyNDpcXHRcXG43MzI1OlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2xhYiwgXFx1MDAyNnBjLnNsYWJzLCBzbGFiX2xpc3QpXFxuNzMyNjpcXHRcXHRcXHRcXHRzZXRfbm9kZV9wYXJ0aWFsX3N0YXRlKG4sIHNsYWIpO1xcbjczMjc6XFx0XFxuNzMyODpcXHRcXHRcXHRsaXN0X3NwbGljZV90YWlsKFxcdTAwMjZwYy5zbGFicywgXFx1MDAyNm4tXFx1MDAzZXBhcnRpYWwpO1xcbjczMjk6XFx0XFxuNzMzMDpcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG43MzMxOlxcdFxcdH1cXG43MzMyOlxcdFxcbjczMzM6XFx0XFx0cmV0dXJuIHJlZmlsbGVkO1xcbjczMzQ6XFx0fVxcbjczMzU6XFx0XFxuNzMzNjpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG43MzM3OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnRcXG43MzM4OlxcdF9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxcbjczMzk6XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbWF4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoyODoyOS44OTAyMTQ3MjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA3OTMzNTQ3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU0xVQiBGcmVlbGlzdCBSZXR1cm4gT3B0aW1pemF0aW9uIEFuYWx5c2lzKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIG9wdGltaXppbmcgdGhlIGZyZWVsaXN0IHJldHVybiBwYXRoIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIFNwZWNpZmljYWxseSwgaW4gYF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KClgLCB3ZSd2ZSBpbnRyb2R1Y2VkIGEgbG9jayAoYG4tXHUwMDNlbGlzdF9sb2NrYCkgYXJvdW5kIHRoZSBjcml0aWNhbCBzZWN0aW9uIGludm9sdmluZyBgc2xhYl91cGRhdGVfZnJlZWxpc3QoKWAgYW5kIHRoZSBzdWJzZXF1ZW50IGBhZGRfcGFydGlhbCgpYCBjYWxsLiBQcmV2aW91c2x5LCB0aGlzIHdhcyBoYW5kbGVkIGF0IHRoZSBjYWxsZXIgaW4gYF9fcmVmaWxsX29iamVjdHNfbm9kZSgpYC4gVGhlIHVwZGF0ZSBhbHNvIHJlbW92ZXMgdGhlIGBsaXN0X2FkZGAgd2l0aGluIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBjb25zb2xpZGF0ZXMgdGhlIGxvY2sgYWNxdWlzaXRpb24gYW5kIHBhcnRpYWwgc2xhYiBhZGRpdGlvbiBsb2dpYy4gSW5zdGVhZCBvZiByZXR1cm5pbmcgdG8gdGhlIGNhbGxlciB0byBhZGQgaXQgdG8gdGhlIGBwYy5zbGFic2AgbGlzdCwgdGhlIHBhcnRpYWwgc2xhYiBhZGRpdGlvbiBpcyBoYW5kbGVkIGRpcmVjdGx5LiBUaGUgbG9jayBpcyBoZWxkIGR1cmluZyB0aGUgY3J1Y2lhbCB1cGRhdGUgYW5kIGFkZGl0aW9uLCBlbnN1cmluZyBhdG9taWNpdHkuXG5cbkZyb20gbXkgcGVyc3BlY3RpdmUsIGFzIGEgU0xVQiBleHBlcnQsIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBhbGxvY2F0b3IgaW50ZXJuYWxzOiBsb2NrIGFjcXVpc2l0aW9uLCBmcmVlbGlzdCBoYW5kbGluZywgYW5kIHRoZSBtYW5hZ2VtZW50IG9mIHBhcnRpYWwgc2xhYnMuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyBtYWludGFpbmluZyBkYXRhIGludGVncml0eSBhbmQgYXZvaWRpbmcgY29uY3VycmVuY3kgaXNzdWVzIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuXG5cbk15IGFuYWx5c2lzIGZvY3VzZXMgb24gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZG91YmxlIGFkZGl0aW9ucyB0byBsaXN0cywgYW5kIGdlbmVyYWwgbGlzdCBjb3JydXB0aW9uLiBUaGUgYWRkaXRpb24gb2YgdGhlIGxvY2sgaXMgY2xlYXJseSBhIG1vdmUgdG93YXJkIGluY3JlYXNlZCBjb25jdXJyZW5jeSBzYWZldHksIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBmcmVlbGlzdCBtYW5pcHVsYXRpb24uIEJ5IG1vdmluZyB0aGUgYGFkZF9wYXJ0aWFsYCBjYWxsIGludG8gdGhlIGNyaXRpY2FsIHNlY3Rpb24sIHdlIGFyZSBlbnN1cmluZyB0aGF0IHVwZGF0ZXMgdG8gdGhlIHBhcnRpYWwgc2xhYiBsaXN0cyBhcmUgYXRvbWljLlxuXG5HaXZlbiBteSBleHBlcmllbmNlLCBJIGRvIG5vdCBleHBlY3QgdGhpcyBwYXRjaCB0byBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29uZGl0aW9uYWwgbG9naWMsIGNyZWF0ZSB1bmluaXRpYWxpemVkIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBvciBoYXZlIGFueSByZWxhdGVkIGlzc3Vlcy4gVGhlIGBzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnNgIHZhcmlhYmxlcyBhcmUgYXNzaWduZWQgcHJvcGVybHkuIFRoZSBgZmxhZ3NgIHZhcmlhYmxlIGlzIGJlaW5nIGluaXRpYWxpemVkIGFzIHdlbGwuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYnV0IEtBU0FOIGFuZCBMT0NLREVQIGFyZS4gS0FTQU4gaXMgc3VpdGFibGUgZm9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gTE9DS0RFUCwgb24gdGhlIG90aGVyIGhhbmQsIGNhbiBoZWxwIHRvIGNhdGNoIGxvY2sgb3JkZXJpbmcgdmlvbGF0aW9ucyBvciBkZWFkbG9ja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MzgsIk91dHB1dFRva2VucyI6MjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjI4OjQwLjY4MzU3Mjc4NloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgU0xVQiBhbGxvY2F0b3IgaW50ZXJuYWwgbG9ja2luZyBhbmQgcGFydGlhbCBsaXN0IG1hbmFnZW1lbnQgaW4gYG1tL3NsdWIuY2AgKGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgYW5kIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgKS4gU3BlY2lmaWNhbGx5LCBpdCBhY3F1aXJlcyB0aGUgbm9kZSBsaXN0X2xvY2sgYW5kIGFkZHMgdGhlIHNsYWIgdG8gdGhlIHBhcnRpYWwgbGlzdCBkaXJlY3RseSBpbiBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGluc3RlYWQgb2YgcmUtYWRkaW5nIGl0IHRvIHRoZSBsb2NhbCBgcGMuc2xhYnNgIGxpc3QgaW4gYF9fcmVmaWxsX29iamVjdHNfbm9kZWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBleGNsdXNpdmVseSBhZmZlY3QgU0xVQiBpbnRlcm5hbCBzdGF0ZSwgbG9ja2luZywgYW5kIGZyZWVsaXN0L3BhcnRpYWwgbGlzdCB0cmFja2luZy4gQW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIGxvY2sgb3JkZXIgaW52ZXJzaW9ucywgbGlzdCBjb3JydXB0aW9uLCBkb3VibGUtZnJlZSwgb3Igc2xhYiBtZXRhZGF0YSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgY2hlY2tzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkIGFjY2Vzc2VzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgU0xVQiBhbGxvY2F0b3IgaW50ZXJuYWwgbG9ja2luZyBhbmQgcGFydGlhbCBsaXN0IG1hbmFnZW1lbnQgaW4gYG1tL3NsdWIuY2AgKGBfX3NsYWJfdHJ5X3JldHVybl9mcmVlbGlzdGAgYW5kIGBfX3JlZmlsbF9vYmplY3RzX25vZGVgKS4gU3BlY2lmaWNhbGx5LCBpdCBhY3F1aXJlcyB0aGUgbm9kZSBsaXN0X2xvY2sgYW5kIGFkZHMgdGhlIHNsYWIgdG8gdGhlIHBhcnRpYWwgbGlzdCBkaXJlY3RseSBpbiBgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3RgIGluc3RlYWQgb2YgcmUtYWRkaW5nIGl0IHRvIHRoZSBsb2NhbCBgcGMuc2xhYnNgIGxpc3QgaW4gYF9fcmVmaWxsX29iamVjdHNfbm9kZWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBleGNsdXNpdmVseSBhZmZlY3QgU0xVQiBpbnRlcm5hbCBzdGF0ZSwgbG9ja2luZywgYW5kIGZyZWVsaXN0L3BhcnRpYWwgbGlzdCB0cmFja2luZy4gQW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIGxvY2sgb3JkZXIgaW52ZXJzaW9ucywgbGlzdCBjb3JydXB0aW9uLCBkb3VibGUtZnJlZSwgb3Igc2xhYiBtZXRhZGF0YSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgY2hlY2tzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkIGFjY2Vzc2VzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4242m[1] Phase: Succeeded StartedAt: 2026-09-03 13:28:52 +0000 UTC FinishedAt: 2026-09-03 13:28:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 13:28:52 +0000 UTC FinishedAt: 2026-09-03 13:28:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2] Phase: Succeeded StartedAt: 2026-09-03 13:28:52 +0000 UTC FinishedAt: 2026-09-03 17:11:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 13:28:52 +0000 UTC FinishedAt: 2026-09-03 17:11:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 13:28:52 +0000 UTC FinishedAt: 2026-09-03 13:29:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 13:28:52 +0000 UTC FinishedAt: 2026-09-03 13:28:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow4242m/series-workflow4242m-convert-artifact-2730735564/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 13:29:02 +0000 UTC FinishedAt: 2026-09-03 13:45:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 13:29:02 +0000 UTC FinishedAt: 2026-09-03 13:45:01 +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:*bc4dfb72-4db0-461c-905d-b03c73ed4706,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-workflow4242m/series-workflow4242m-convert-artifact-2730735564/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": "31014c7b-fffc-4304-b5f4-346310495086", "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-workflow4242m/series-workflow4242m-build-action-2559686138/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 13:29:02 +0000 UTC FinishedAt: 2026-09-03 13:44:51 +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:*bc4dfb72-4db0-461c-905d-b03c73ed4706,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-workflow4242m/series-workflow4242m-convert-artifact-2730735564/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": "31014c7b-fffc-4304-b5f4-346310495086", "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-workflow4242m/series-workflow4242m-build-action-2559686138/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 13:45:01 +0000 UTC FinishedAt: 2026-09-03 13:45:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 13:45:01 +0000 UTC FinishedAt: 2026-09-03 13:45:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 13:45:01 +0000 UTC FinishedAt: 2026-09-03 13:45:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 13:45:01 +0000 UTC FinishedAt: 2026-09-03 13:45:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow4242m/series-workflow4242m-convert-artifact-2999888395/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 13:45:23 +0000 UTC FinishedAt: 2026-09-03 13:47:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 13:45:23 +0000 UTC FinishedAt: 2026-09-03 13:47:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*31014c7b-fffc-4304-b5f4-346310495086,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-workflow4242m/series-workflow4242m-build-action-2559686138/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-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 13:47:24 +0000 UTC FinishedAt: 2026-09-03 13:47:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 13:47:24 +0000 UTC FinishedAt: 2026-09-03 13:47:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 13:47:24 +0000 UTC FinishedAt: 2026-09-03 14:06:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 13:47:24 +0000 UTC FinishedAt: 2026-09-03 14:06: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:*bc4dfb72-4db0-461c-905d-b03c73ed4706,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-workflow4242m/series-workflow4242m-convert-artifact-2999888395/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": "99596e01-560e-43d4-8a19-ab723c3fc9e8", "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-workflow4242m/series-workflow4242m-build-action-1374242991/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 13:47:24 +0000 UTC FinishedAt: 2026-09-03 14:06:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*bc4dfb72-4db0-461c-905d-b03c73ed4706,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-workflow4242m/series-workflow4242m-convert-artifact-2999888395/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": "99596e01-560e-43d4-8a19-ab723c3fc9e8", "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-workflow4242m/series-workflow4242m-build-action-1374242991/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 14:06:20 +0000 UTC FinishedAt: 2026-09-03 14:06:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 14:06:20 +0000 UTC FinishedAt: 2026-09-03 14:06:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 14:06:20 +0000 UTC FinishedAt: 2026-09-03 14:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 14:06:20 +0000 UTC FinishedAt: 2026-09-03 14:08:23 +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:*99596e01-560e-43d4-8a19-ab723c3fc9e8,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-workflow4242m/series-workflow4242m-build-action-1374242991/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-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 14:08:33 +0000 UTC FinishedAt: 2026-09-03 17:11:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 14:08:33 +0000 UTC FinishedAt: 2026-09-03 17:11:41 +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":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"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:*31014c7b-fffc-4304-b5f4-346310495086,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*99596e01-560e-43d4-8a19-ab723c3fc9e8,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-workflow4242m/series-workflow4242m-build-action-2559686138/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-workflow4242m/series-workflow4242m-build-action-1374242991/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 14:08:33 +0000 UTC FinishedAt: 2026-09-03 14:08:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 14:08:33 +0000 UTC FinishedAt: 2026-09-03 14:08:43 +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":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"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-workflow4242m/series-workflow4242m-convert-artifact-3880513188/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 14:08:33 +0000 UTC FinishedAt: 2026-09-03 14:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 14:08:33 +0000 UTC FinishedAt: 2026-09-03 14:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 14:08:33 +0000 UTC FinishedAt: 2026-09-03 14:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 14:08:53 +0000 UTC FinishedAt: 2026-09-03 17:11:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4242m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__slab_try_return_freelist","__refill_objects_node","refill_objects","refill_sheaf","kmem_cache_prefill_sheaf","kmem_cache_refill_sheaf","kmem_cache_return_sheaf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB"],"series_id":"b9ad02f1-4214-4707-89db-e2112cee4e67","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 14:08:53 +0000 UTC FinishedAt: 2026-09-03 17:11:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*31014c7b-fffc-4304-b5f4-346310495086,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*99596e01-560e-43d4-8a19-ab723c3fc9e8,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-workflow4242m/series-workflow4242m-build-action-2559686138/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-workflow4242m/series-workflow4242m-build-action-1374242991/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-workflow4242m/series-workflow4242m-convert-artifact-3880513188/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,}