Name: series-workflow4l92h Phase: Succeeded StartedAt: 2026-08-07 17:01:08 +0000 UTC FinishedAt: 2026-08-07 20:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[0] Phase: Succeeded StartedAt: 2026-08-07 17:01:08 +0000 UTC FinishedAt: 2026-08-07 17:05:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 17:01:08 +0000 UTC FinishedAt: 2026-08-07 17:05:17 +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": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "512afa2b-c6b0-4a5a-a82a-ee92b73f04dc" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "tipc_sk_rcv", "tipc_release", "tipc_shutdown" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX3NrX3JjdiYjMzQ7LAogICAgJiMzNDt0aXBjX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dGlwY19zaHV0ZG93biYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdGlwY19za19wdXNoX2JhY2tsb2dgIGZ1bmN0aW9uIHRvIGFjY2VwdCBhbiBhZGRpdGlvbmFsIGB4bWl0cWAgYXJndW1lbnQuIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgdHJhbnNtaXR0aW5nIHBhY2tldHMgdmlhIGB0aXBjX25vZGVfeG1pdGAsIGl0IHNwbGljZXMgdGhlIHNvY2tldCYjMzk7cyB3cml0ZSBxdWV1ZSBpbnRvIHRoZSBwcm92aWRlZCBgeG1pdHFgIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcXVldWUgbWFuYWdlbWVudCBjaGFuZ2UsIGxpa2VseSBpbnRlbmRlZCB0byBmaXggYSBsb2NraW5nIGlzc3VlLCBkZWFkbG9jaywgb3IgcmVjdXJzaW9uIHByb2JsZW0gZHVyaW5nIHBhY2tldCByZWNlcHRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkZWFkbG9ja3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGlwY19za19wdXNoX2JhY2tsb2dgIHRvIHNwbGljZSB0aGUgdHJhbnNtaXQgcXVldWUgdG8gdGhlIHJlY2VpdmUgb3V0cHV0IHF1ZXVlIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgb3duIG5vZGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUSVBDIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZmRmNDhhYjIwYzg0YTQzYTc3ZjZlMDM1NjYzZmNlZmExMjgwZTA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNzowMjoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jXG5pbmRleCBlNTY0MzQxZTAyMTZkLi4zM2Q3NDRkYzUxNGY1IDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvc29ja2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL3NvY2tldC5jXG5AQCAtMTU2LDcgJiM0MzsxNTYsOCBAQCBzdGF0aWMgaW50IHRpcGNfc2tfaW5zZXJ0KHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XG4gc3RhdGljIHZvaWQgdGlwY19za19yZW1vdmUoc3RydWN0IHRpcGNfc29jayAqdHNrKTtcbiBzdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xuIHN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayk7XG4mIzQzO3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcbiBzdGF0aWMgaW50IHRpcGNfd2FpdF9mb3JfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb25nICp0aW1lb19wKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzO1xuQEAgLTU2MCw3ICYjNDM7NTYxLDcgQEAgc3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcbiBcdFx0XHRcdFx0ICAgICF0c2tfY29ubl9jb25nKHRzaykpKTtcbiBcbiBcdC8qIFB1c2ggb3V0IGRlbGF5ZWQgbWVzc2FnZXMgaWYgaW4gTmFnbGUgbW9kZSAqL1xuLVx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7XG4mIzQzO1x0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgTlVMTCk7XG4gXHQvKiBSZW1vdmUgcGVuZGluZyBTWU4gKi9cbiBcdF9fc2tiX3F1ZXVlX3B1cmdlKFx1MDAyNnNrLVx1MDAzZXNrX3dyaXRlX3F1ZXVlKTtcbiBcbkBAIC0xMjY3LDggJiM0MzsxMjY4LDEwIEBAIHZvaWQgdGlwY19za19tY2FzdF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICphcnJ2cSxcbiBcbiAvKiB0aXBjX3NrX3B1c2hfYmFja2xvZygpOiBzZW5kIGFjY3VtdWxhdGVkIGJ1ZmZlcnMgaW4gc29ja2V0IHdyaXRlIHF1ZXVlXG4gICogICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBzb2NrZXQgaXMgaW4gTmFnbGUgbW9kZVxuJiM0MzsgKiBAeG1pdHE6IHJlY2VpdmUgb3V0cHV0IHF1ZXVlLCBvciBOVUxMIG91dHNpZGUgcmVjZWl2ZSBjb250ZXh0XG4gICovXG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaylcbiYjNDM7c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjayxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqdHhxID0gXHUwMDI2dHNrLVx1MDAzZXNrLnNrX3dyaXRlX3F1ZXVlO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVrX3RhaWwodHhxKTtcbkBAIC0xMzEwLDYgJiM0MzsxMzEzLDEyIEBAIHN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spXG4gXHRcdHRzay1cdTAwM2Vwa3RfY250ICYjNDM7PSBza2JfcXVldWVfbGVuKHR4cSk7XG4gXHR0c2stXHUwMDNlc250X3VuYWNrZWQgJiM0Mzs9IHRzay1cdTAwM2VzbmRfYmFja2xvZztcbiBcdHRzay1cdTAwM2VzbmRfYmFja2xvZyA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICh4bWl0cSBcdTAwMjZcdTAwMjYgaW5fb3duX25vZGUobmV0LCBkbm9kZSkpIHtcbiYjNDM7XHRcdHNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KHR4cSwgeG1pdHEpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgdHhxLCBkbm9kZSwgdHNrLVx1MDAzZXBvcnRpZCk7XG4gXHRpZiAocmMgPT0gLUVMSU5LQ09ORylcbiBcdFx0dHNrLVx1MDAzZWNvbmdfbGlua19jbnQgPSAxO1xuQEAgLTEzNjcsNyAmIzQzOzEzNzYsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRnb3RvIGV4aXQ7XG4gXG4gXHRcdHdhc19jb25nID0gdHNrX2Nvbm5fY29uZyh0c2spO1xuLVx0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSk7XG4mIzQzO1x0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSwgeG1pdHEpO1xuIFx0XHR0c2stXHUwMDNlc250X3VuYWNrZWQgLT0gbXNnX2Nvbm5fYWNrKGhkcik7XG4gXHRcdGlmICh0c2stXHUwMDNlcGVlcl9jYXBzIFx1MDAyNiBUSVBDX0JMT0NLX0ZMT1dDVEwpXG4gXHRcdFx0dHNrLVx1MDAzZXNuZF93aW4gPSBtc2dfYWR2X3dpbihoZHIpO1xuQEAgLTIxNjUsNyAmIzQzOzIxNzQsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdHNtcF93bWIoKTtcbiBcdFx0dHNrLVx1MDAzZWNvbmdfbGlua19jbnQtLTtcbiBcdFx0d2FrZXVwID0gdHJ1ZTtcbi1cdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7XG4mIzQzO1x0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBHUk9VUF9QUk9UT0NPTDpcbiBcdFx0dGlwY19ncm91cF9wcm90b19yY3YoZ3JwLCBcdTAwMjZ3YWtldXAsIGhkciwgaW5wdXRxLCB4bWl0cSk7XG5AQCAtMjI1Niw3ICYjNDM7MjI2NSw3IEBAIHN0YXRpYyBib29sIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3Qoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRjYXNlIFRJUENfRVNUQUJMSVNIRUQ6XG4gXHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3dyaXRlX3F1ZXVlKSlcbi1cdFx0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTtcbiYjNDM7XHRcdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpO1xuIFx0XHQvKiBBY2NlcHQgb25seSBjb25uZWN0aW9uLWJhc2VkIG1lc3NhZ2VzIHNlbnQgYnkgcGVlciAqL1xuIFx0XHRpZiAobGlrZWx5KGNvbl9tc2cgXHUwMDI2XHUwMDI2ICFlcnIgXHUwMDI2XHUwMDI2IHBwb3J0ID09IG9wb3J0IFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgIHBub2RlID09IG9ub2RlKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19za19yY3YmIzM0OywKICAgICYjMzQ7dGlwY19yZWxlYXNlJiMzNDssCiAgICAmIzM0O3RpcGNfc2h1dGRvd24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIHRvIHRoZSByZWNlaXZlIG91dHB1dCBxdWV1ZSBpZiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIG93biBub2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVElQQyBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmZkZjQ4YWIyMGM4NGE0M2E3N2Y2ZTAzNTY2M2ZjZWZhMTI4MGUwOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTc6MDI6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jCmluZGV4IGU1NjQzNDFlMDIxNmQuLjMzZDc0NGRjNTE0ZjUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3NvY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL3NvY2tldC5jCkBAIC0xNTYsNyAmIzQzOzE1Niw4IEBAIHN0YXRpYyBpbnQgdGlwY19za19pbnNlcnQoc3RydWN0IHRpcGNfc29jayAqdHNrKTsKIHN0YXRpYyB2b2lkIHRpcGNfc2tfcmVtb3ZlKHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7CiBzdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opOwogc3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTsKLXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spOwomIzQzO3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssCiYjNDM7CQkJCSBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7CiBzdGF0aWMgaW50IHRpcGNfd2FpdF9mb3JfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb25nICp0aW1lb19wKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wczsKQEAgLTU2MCw3ICYjNDM7NTYxLDcgQEAgc3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcikKIAkJCQkJICAgICF0c2tfY29ubl9jb25nKHRzaykpKTsKIAogCS8qIFB1c2ggb3V0IGRlbGF5ZWQgbWVzc2FnZXMgaWYgaW4gTmFnbGUgbW9kZSAqLwotCXRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpOwomIzQzOwl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCBOVUxMKTsKIAkvKiBSZW1vdmUgcGVuZGluZyBTWU4gKi8KIAlfX3NrYl9xdWV1ZV9wdXJnZSgmYW1wO3NrLSZndDtza193cml0ZV9xdWV1ZSk7CiAKQEAgLTEyNjcsOCAmIzQzOzEyNjgsMTAgQEAgdm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLAogCiAvKiB0aXBjX3NrX3B1c2hfYmFja2xvZygpOiBzZW5kIGFjY3VtdWxhdGVkIGJ1ZmZlcnMgaW4gc29ja2V0IHdyaXRlIHF1ZXVlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHNvY2tldCBpcyBpbiBOYWdsZSBtb2RlCiYjNDM7ICogQHhtaXRxOiByZWNlaXZlIG91dHB1dCBxdWV1ZSwgb3IgTlVMTCBvdXRzaWRlIHJlY2VpdmUgY29udGV4dAogICovCi1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKQomIzQzO3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssCiYjNDM7CQkJCSBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp0eHEgPSAmYW1wO3Rzay0mZ3Q7c2suc2tfd3JpdGVfcXVldWU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVrX3RhaWwodHhxKTsKQEAgLTEzMTAsNiAmIzQzOzEzMTMsMTIgQEAgc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaykKIAkJdHNrLSZndDtwa3RfY250ICYjNDM7PSBza2JfcXVldWVfbGVuKHR4cSk7CiAJdHNrLSZndDtzbnRfdW5hY2tlZCAmIzQzOz0gdHNrLSZndDtzbmRfYmFja2xvZzsKIAl0c2stJmd0O3NuZF9iYWNrbG9nID0gMDsKJiM0MzsKJiM0MzsJaWYgKHhtaXRxICZhbXA7JmFtcDsgaW5fb3duX25vZGUobmV0LCBkbm9kZSkpIHsKJiM0MzsJCXNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KHR4cSwgeG1pdHEpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJcmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIHR4cSwgZG5vZGUsIHRzay0mZ3Q7cG9ydGlkKTsKIAlpZiAocmMgPT0gLUVMSU5LQ09ORykKIAkJdHNrLSZndDtjb25nX2xpbmtfY250ID0gMTsKQEAgLTEzNjcsNyAmIzQzOzEzNzYsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCWdvdG8gZXhpdDsKIAogCQl3YXNfY29uZyA9IHRza19jb25uX2NvbmcodHNrKTsKLQkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBtc2dfbmFnbGVfYWNrKGhkcikpOwomIzQzOwkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBtc2dfbmFnbGVfYWNrKGhkciksIHhtaXRxKTsKIAkJdHNrLSZndDtzbnRfdW5hY2tlZCAtPSBtc2dfY29ubl9hY2soaGRyKTsKIAkJaWYgKHRzay0mZ3Q7cGVlcl9jYXBzICZhbXA7IFRJUENfQkxPQ0tfRkxPV0NUTCkKIAkJCXRzay0mZ3Q7c25kX3dpbiA9IG1zZ19hZHZfd2luKGhkcik7CkBAIC0yMTY1LDcgJiM0MzsyMTc0LDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLAogCQlzbXBfd21iKCk7CiAJCXRzay0mZ3Q7Y29uZ19saW5rX2NudC0tOwogCQl3YWtldXAgPSB0cnVlOwotCQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTsKJiM0MzsJCXRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTsKIAkJYnJlYWs7CiAJY2FzZSBHUk9VUF9QUk9UT0NPTDoKIAkJdGlwY19ncm91cF9wcm90b19yY3YoZ3JwLCAmYW1wO3dha2V1cCwgaGRyLCBpbnB1dHEsIHhtaXRxKTsKQEAgLTIyNTYsNyAmIzQzOzIyNjUsNyBAQCBzdGF0aWMgYm9vbCB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJcmV0dXJuIGZhbHNlOwogCWNhc2UgVElQQ19FU1RBQkxJU0hFRDoKIAkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFtcDtzay0mZ3Q7c2tfd3JpdGVfcXVldWUpKQotCQkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7CiYjNDM7CQkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpOwogCQkvKiBBY2NlcHQgb25seSBjb25uZWN0aW9uLWJhc2VkIG1lc3NhZ2VzIHNlbnQgYnkgcGVlciAqLwogCQlpZiAobGlrZWx5KGNvbl9tc2cgJmFtcDsmYW1wOyAhZXJyICZhbXA7JmFtcDsgcHBvcnQgPT0gb3BvcnQgJmFtcDsmYW1wOwogCQkJICAgcG5vZGUgPT0gb25vZGUpKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVElQQyBQcm90b2NvbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyBgbmV0L3RpcGMvc29ja2V0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYSBuZXcgYXJndW1lbnQsIGBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cWAsIHdoaWNoIGlzIGEgcHJldHR5IGNsZWFyIGluZGljYXRvciBvZiBhIGNoYW5nZSB0byB0aGUgd2F5IGRhdGEgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIFRJUEMgcHJvdG9jb2wuIFRoaXMgbmV3IGFyZ3VtZW50IG1lYW5zIHRoZSBmdW5jdGlvbiBjYW4gbm93IHNwbGljZSBgdHhxYCBpbnRvIGB4bWl0cWAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gYHhtaXRxYCBpcyBwcm92aWRlZCBhbmQgdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBsb2NhbCBub2RlLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gVElQQywgbm8gZG91YnQuCgpOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBpbXBsaWNhdGlvbnMuIEkgc2hvdWxkIGNoZWNrIHdoZXJlIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgaXMgY2FsbGVkIGZyb20uIExldCBtZSBzZWUuLi4gSXQmIzM5O3MgY2FsbGVkIGJ5IGBfX3RpcGNfc2h1dGRvd25gLCBgdGlwY19za19jb25uX3Byb3RvX3JjdmAsIGB0aXBjX3NrX3Byb3RvX3JjdmAsIGFuZCBgdGlwY19za19maWx0ZXJfY29ubmVjdGAuIFRoYXQgZ2l2ZXMgbWUgYSBkZWNlbnQgb3ZlcnZpZXcgb2YgdGhlIGFyZWFzIHRoaXMgY2hhbmdlIHRvdWNoZXMuCgpHaXZlbiB0aGF0IFRJUEMgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBhbmQgdGh1cyBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IGZ1enppbmcgaXQuIFRoaXMga2luZCBvZiBjaGFuZ2UgaXMgZXhhY3RseSB0aGUgdHlwZSBvZiB0aGluZyB0aGF0IGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgYnVncyBvciB2dWxuZXJhYmlsaXRpZXMsIHNvIGZ1enppbmcgaXMgcHJvYmFibHkgYSBnb29kIG1vdmUuCgpOZXh0IHN0ZXA6IGxldCBtZSB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgdHJhY2sgZG93biB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgZm9yIFRJUEMuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYGNvbmZpZyBUSVBDYCBhbmQgZ2V0IGEgbGlzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteY29uZmlnIFRJUEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL0tjb25maWc9Nj1tZW51Y29uZmlnIFRJUENcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTIzLVxubmV0L3RpcGMvS2NvbmZpZzoyNDpjb25maWcgVElQQ19NRURJQV9JQlxubmV0L3RpcGMvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBtZWRpYSB0eXBlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTI5LVx0ICBJUC1vdmVyLUluZmluaUJhbmQgZGV2aWNlcy5cbm5ldC90aXBjL0tjb25maWc6MzA6Y29uZmlnIFRJUENfTUVESUFfVURQXG5uZXQvdGlwYy9LY29uZmlnLTMxLVx0Ym9vbCBcJiMzNDtJUC9VRFAgbWVkaWEgdHlwZSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3RpcGMvS2NvbmZpZy0zNy1cbm5ldC90aXBjL0tjb25maWc6Mzg6Y29uZmlnIFRJUENfQ1JZUFRPXG5uZXQvdGlwYy9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtUSVBDIGVuY3J5cHRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctNTItXG5uZXQvdGlwYy9LY29uZmlnOjUzOmNvbmZpZyBUSVBDX0RJQUdcbm5ldC90aXBjL0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDtUSVBDOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTczCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgVElQQyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgVElQQ2AgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdGhlIG1haW4gY29uZmlndXJhdGlvbiBpdGVtIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBlbmFibGVzIGl0LiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IG1vZHVsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIGBuZXQvdGlwYy9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZGl0aW9uYWwgYnVpbGQgbG9naWMgd2lsbCByZXNpZGUuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBUSVBDIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBUSVBDXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtUaGUgVElQQyBQcm90b2NvbFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoZSBUcmFuc3BhcmVudCBJbnRlciBQcm9jZXNzIENvbW11bmljYXRpb24gKFRJUEMpIHByb3RvY29sIGlzXG4gIDExOlx0XHQgIHNwZWNpYWxseSBkZXNpZ25lZCBmb3IgaW50cmEgY2x1c3RlciBjb21tdW5pY2F0aW9uLiBUaGlzIHByb3RvY29sXG4gIDEyOlx0XHQgIG9yaWdpbmF0ZXMgZnJvbSBFcmljc3NvbiB3aGVyZSBpdCBoYXMgYmVlbiB1c2VkIGluIGNhcnJpZXIgZ3JhZGVcbiAgMTM6XHRcdCAgY2x1c3RlciBhcHBsaWNhdGlvbnMgZm9yIG1hbnkgeWVhcnMuXG4gIDE0Olx0XG4gIDE1Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFRJUEMsIHNlZSBodHRwOi8vdGlwYy5zb3VyY2Vmb3JnZS5uZXQuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIFRoaXMgcHJvdG9jb2wgc3VwcG9ydCBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSAoID0gY29kZSB3aGljaFxuICAxODpcdFx0ICBjYW4gYmUgaW5zZXJ0ZWQgaW4gYW5kIHJlbW92ZWQgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwgd2hlbmV2ZXIgeW91XG4gIDE5Olx0XHQgIHdhbnQpLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRpcGMuIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXRcbiAgMjA6XHRcdCAgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmUgYW5kIHJlYWQgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnJzdFx1MDAzZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDUxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGlwYyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGNoYW5nZSBoaW5nZXMgb24gdGhlIElORVQgaW1wbGVtZW50YXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCBuZXR3b3JrIGltcGxpY2F0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIG1vZGlmaWVkLgoKVGhlIGNlbnRyYWwgcG9pbnQgaGVyZSBpcyB0aGUgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBmdW5jdGlvbi4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGl0JiMzOTtzIHRpZ2h0bHkgc2NvcGVkIHdpdGhpbiB0aGUgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXItUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBtb2R1bGUuIE5vdywgd2hvJiMzOTtzIGNhbGxpbmcgKnRoYXQqPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCB0byBzZWUgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuCgpJdCYjMzk7cyBjYWxsZWQgYnkgYF9fdGlwY19zaHV0ZG93bmAsIGB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2YCwgYHRpcGNfc2tfcHJvdG9fcmN2YCwgYW5kIGB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0YC4gVGhlc2UgYXJlIGFsbCBhbHNvIHN0YXRpYywgYW5kIHRoYXQgcHJvdmlkZXMgc29tZSBsZXZlbCBvZiBlbmNhcHN1bGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IF9jYWxsc18gdGhvc2UgdG8gZnVsbHkgY29tcHJlaGVuZCB0aGUgZmxvdy4gVGhpcyB0ZWxscyBtZSB3aGVyZSB0byBjb25jZW50cmF0ZSBteSBlZmZvcnRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhvc2UgdXBzdHJlYW0gZnVuY3Rpb25zIGFyZSBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9MTI3Mz1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTEzMjctLyoqXG5uZXQvdGlwYy9zb2NrZXQuYzoxMzI4OiAqIHRpcGNfc2tfY29ubl9wcm90b19yY3YgLSByZWNlaXZlIGEgY29ubmVjdGlvbiBtbmcgcHJvdG9jb2wgbWVzc2FnZVxubmV0L3RpcGMvc29ja2V0LmMtMTMyOS0gKiBAdHNrOiByZWNlaXZpbmcgc29ja2V0XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTMzMy0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjEzMzQ6c3RhdGljIHZvaWQgdGlwY19za19jb25uX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzM1LVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTIxNTc9c3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTIxNjgtXHRjYXNlIENPTk5fTUFOQUdFUjpcbm5ldC90aXBjL3NvY2tldC5jOjIxNjk6XHRcdHRpcGNfc2tfY29ubl9wcm90b19yY3YodHNrLCBza2IsIGlucHV0cSwgeG1pdHEpO1xubmV0L3RpcGMvc29ja2V0LmMtMjE3MC1cdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipBbmFseXppbmcgdGhlIERhdGEgRmxvdzogYHRpcGNfc2tfY29ubl9wcm90b19yY3ZgKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSBoZXJlLCBgdGlwY19za19jb25uX3Byb3RvX3JjdmAgaXNuJiMzOTt0IHNvbWUgc3RhbmRhbG9uZSBmdW5jdGlvbiwgaXQmIzM5O3MgZXhwbGljaXRseSBjYWxsZWQgYnkgYHRpcGNfc2tfcHJvdG9fcmN2YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBzb21ldGhpbmcgYWJvdXQgdGhlIGNvbW11bmljYXRpb24gZmxvdyB3aXRoaW4gdGhlIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgc29ja2V0IGxheWVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd2h5IHRoZSBkZXNpZ24gaXMgdGhpcyB3YXkuCgpTbywgYHRpcGNfc2tfcHJvdG9fcmN2YCBpcyB0aGUgZ2VuZXJhbCByZWNlaXZlciwgdGhlIGVudHJ5IHBvaW50IGZvciBpbmNvbWluZyBkYXRhIG9uIGEgVElQQyBzb2NrZXQsIHdoaWxlIGB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2YCBpcyBtb3JlIHNwZWNpYWxpemVkLiBUaGlzIHN1Z2dlc3RzIHRoYXQgYHRpcGNfc2tfY29ubl9wcm90b19yY3ZgIGlzIGhhbmRsaW5nIHJlY2VpdmUgb3BlcmF0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIGNvbm5lY3Rpb24tb3JpZW50ZWQgc29ja2V0cyB3aXRoaW4gdGhlIFRJUEMgcHJvdG9jb2wuIEl0IG1pZ2h0IGJlIGhhbmRsaW5nIHN0YXRlIGNoYW5nZXMsIGFja25vd2xlZGdlbWVudCwgb3IgY29ubmVjdGlvbi1zcGVjaWZpYyBkYXRhLiBJIHdpbGwgYXNzdW1lIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBjb25uZWN0aW9uLXNwZWNpZmljIGFzcGVjdHMuCgpJJiMzOTtkIGV4cGVjdCB0byBzZWUgYSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIGZvciBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYXMgd2VsbCAtIEkgbmVlZCB0byBleHBsb3JlIHRoYXQgZm9yIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGVudGlyZSBwcm90b2NvbC4gSSBzaG91bGQgY2hlY2sgaG93IGNvbm5lY3Rpb24tcmVsYXRlZCBzdGF0ZSBpcyBzdG9yZWQgYW5kIHJldHJpZXZlZCB3aXRoaW4gdGhlIGRhdGEgc3RydWN0dXJlcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NrX3Byb3RvX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTQwMz1zdGF0aWMgaW50IHRpcGNfc2tfc29ja19lcnIoc3RydWN0IHNvY2tldCAqc29jaywgbG9uZyAqdGltZW91dClcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy00MzEtXHR3aGlsZSAoKHJjXyA9ICEoY29uZGl0aW9uXykpKSB7XHRcdFx0XHRcdCAgICAgICBcXFxubmV0L3RpcGMvc29ja2V0LmM6NDMyOlx0XHQvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIHRpcGNfc2tfcHJvdG9fcmN2KCkgKi8gICAgICAgICAgICBcXFxubmV0L3RpcGMvc29ja2V0LmMtNDMzLVx0XHRzbXBfcm1iKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTIxNTI9c3RhdGljIHZvaWQgdGlwY19zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yMTU2LVxubmV0L3RpcGMvc29ja2V0LmM6MjE1NzpzdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdGlwYy9zb2NrZXQuYy0yMTU4LVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yMzQ3PXN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjM2NC1cdGlmICh1bmxpa2VseSghbXNnX2lzZGF0YShoZHIpKSlcbm5ldC90aXBjL3NvY2tldC5jOjIzNjU6XHRcdHRpcGNfc2tfcHJvdG9fcmN2KHNrLCBcdTAwMjZpbnB1dHEsIHhtaXRxKTtcbm5ldC90aXBjL3NvY2tldC5jLTIzNjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipBbmFseXppbmcgdGhlIFJlY2VpdmVyIFBhdGggaW4gVElQQyBTb2NrZXRzKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIFRJUEMgc29ja2V0IGNvZGUsIHNwZWNpZmljYWxseSB0aGUgcmVjZWl2ZXIgcGF0aC4gSSBzZWUgdGhhdCBgdGlwY19za19wcm90b19yY3ZgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGFjdHVhbCBpbmNvbWluZyBwYWNrZXQgcHJvY2Vzc2luZyBmb3IgdGhlIHByb3RvY29sLiBJdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgcmVjZWl2ZSBmdW5jdGlvbmFsaXR5LCB0aGUgJiMzNDtndXRzJiMzNDsgb2YgdGhlIHJlY2VpdmluZyBwcm9jZXNzLgoKQW5kIEkgbm90aWNlIHRoYXQgYHRpcGNfc2tfZmlsdGVyX3JjdmAgY2FsbHMgaXQuIFNvLCBgZmlsdGVyX3JjdmAgbXVzdCBiZSBhY3RpbmcgYXMgYSBwcmUtcHJvY2Vzc2luZyBzdGVwLCBvciBhIGdhdGVrZWVwZXIgb2Ygc29ydHMuIEl0IHByb2JhYmx5IGRvZXMgc29tZSBwcmVsaW1pbmFyeSBjaGVja3MsIGxpa2UgZmlsdGVyaW5nIG9yIHBlcmhhcHMgcXVldWUgbWFuYWdlbWVudCwgKmJlZm9yZSogcGFzc2luZyB0aGUgcGFja2V0IG9uIHRvIGB0aXBjX3NrX3Byb3RvX3JjdmAgZm9yIHRoZSBzZXJpb3VzIHdvcmsgb2YgcHJvdG9jb2wgaGFuZGxpbmcgYW5kIHNvY2tldCBkZWxpdmVyeS4gSW50ZXJlc3RpbmcgaW50ZXJwbGF5OyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28gdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlIHJlY2VpdmluZyBtZWNoYW5pc20gaXMgc3RydWN0dXJlZC4gVGhpcyBpcyBwb3RlbnRpYWxseSB3aGVyZSB0aGUgbW9yZSBzb3BoaXN0aWNhdGVkIGZpbHRlcmluZyBhbmQgcG9saWN5IGFzcGVjdHMgYXJlIGJlaW5nIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgVElQQyBzdGFjay4gSXQgbWFrZXMgc2Vuc2UsIGtlZXAgdGhlIHByb3RvY29sJiMzOTtzIHByaW1hcnkgcmVjZWl2aW5nIGxvZ2ljIGNsZWFuIGFuZCBmb2N1c2VkIGFuZCBoYXZlIHRoZSBwcmUtcHJvY2Vzc2luZyBiZSBtb3JlIGR5bmFtaWMsIGRlcGVuZGVudCBvbiB0aGUgY29uZmlndXJlZCBwb2xpY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfc2tfZmlsdGVyX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTIzMTk9c3RhdGljIHVuc2lnbmVkIGludCByY3ZidWZfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTIzMzYtLyoqXG5uZXQvdGlwYy9zb2NrZXQuYzoyMzM3OiAqIHRpcGNfc2tfZmlsdGVyX3JjdiAtIHZhbGlkYXRlIGluY29taW5nIG1lc3NhZ2Vcbm5ldC90aXBjL3NvY2tldC5jLTIzMzgtICogQHNrOiBzb2NrZXRcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzQ2LSAqL1xubmV0L3RpcGMvc29ja2V0LmM6MjM0NzpzdGF0aWMgdm9pZCB0aXBjX3NrX2ZpbHRlcl9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3RpcGMvc29ja2V0LmMtMjM0OC1cdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjM1OC1cbm5ldC90aXBjL3NvY2tldC5jOjIzNTk6XHR0cmFjZV90aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgVElQQ19EVU1QX0FMTCwgXCYjMzQ7IFwmIzM0Oyk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yMzYwLVx0VElQQ19TS0JfQ0Ioc2tiKS1cdTAwM2VieXRlc19yZWFkID0gMDtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yNDEyPXN0YXRpYyBpbnQgdGlwY19za19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjQxOS1cbm5ldC90aXBjL3NvY2tldC5jOjI0MjA6XHR0aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgXHUwMDI2eG1pdHEpO1xubmV0L3RpcGMvc29ja2V0LmMtMjQyMS1cdGFkZGVkID0gc2tfcm1lbV9hbGxvY19nZXQoc2spIC0gYmVmb3JlO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI0Mzk9c3RhdGljIHZvaWQgdGlwY19za19lbnF1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI0NTctXHRcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xubmV0L3RpcGMvc29ja2V0LmM6MjQ1ODpcdFx0XHR0aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgeG1pdHEpO1xubmV0L3RpcGMvc29ja2V0LmMtMjQ1OS1cdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc0MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgZmxvdywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRlY29kaW5nIHRoZSBUSVBDIFNvY2tldCBEYXRhIEZsb3cqKgoKQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgVElQQyBzb2NrZXQgZGF0YSBmbG93IGhpbmdlcyBvbiB0aGVzZSB0aHJlZSBmdW5jdGlvbnMuIGB0aXBjX3NrX2ZpbHRlcl9yY3ZgIGlzIHRoZSBwaXZvdGFsIGZ1bmN0aW9uIGhlcmUuIEkgc2VlIGl0IGFzIHRoZSBjZW50cmFsIGdhdGVrZWVwZXIsIGFuZCBpdCYjMzk7cyBpbnZva2VkIGluIHR3byBkaXN0aW5jdCBzY2VuYXJpb3M6IGZpcnN0LCB0aHJvdWdoIGB0aXBjX3NrX2JhY2tsb2dfcmN2YCB3aGljaCwgb2YgY291cnNlLCBzZXJ2ZXMgYXMgdGhlIHN0YW5kYXJkIGBza19iYWNrbG9nX3JjdmAgY2FsbGJhY2sgZm9yIFRJUEMgc29ja2V0c+KAlGVuc3VyaW5nIGVmZmljaWVudCBoYW5kbGluZyBvZiBpbmNvbWluZyBkYXRhIHdoZW4gdGhlIHNvY2tldCBpc24mIzM5O3QgaW1tZWRpYXRlbHkgcmVhZHkgdG8gcHJvY2VzcyBpdC4gU2Vjb25kbHksIGB0aXBjX3NrX2ZpbHRlcl9yY3ZgIGFsc28gZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4gYHRpcGNfc2tfZW5xdWV1ZWAsIGltcGx5aW5nIHRoYXQgdGhlcmUmIzM5O3MgYSBmaWx0ZXJpbmcvcHJvY2Vzc2luZyBzdGVwIGhhcHBlbmluZyAqYmVmb3JlKiB0aGUgZGF0YSBpcyB1bHRpbWF0ZWx5IGVucXVldWVkIG9udG8gdGhlIHNvY2tldCYjMzk7cyByZWNlaXZlIHF1ZXVlLiBUaGUgZmFjdCB0aGF0IGB0aXBjX3NrX2VucXVldWVgIGlzIGl0c2VsZiBjYWxsZWQgYnkgYHRpcGNfc2tfcmN2YCBzdWdnZXN0cyB0aGF0IHRoaXMgaW5pdGlhbCBlbnF1ZXVlaW5nIGFuZCBzdWJzZXF1ZW50IGZpbHRlcmluZyBtYXkgYmUgYSBjcnVjaWFsIG9wdGltaXphdGlvbiBwb2ludCBpbiB0aGUgZGF0YSBmbG93LiBUaGlzIGRlc2lnbiwgd2l0aCBgdGlwY19za19maWx0ZXJfcmN2YCBhdCBpdHMgY29yZSwgbGlrZWx5IGFsbG93cyBmb3Igc29tZSBpbml0aWFsIGluc3BlY3Rpb24gYW5kIGZpbHRlcmluZyBvZiB0aGUgaW5jb21pbmcgZGF0YSwgd2hldGhlciBpdCYjMzk7cyBoZWxkIGluIHRoZSBiYWNrbG9nIG9yIGJlaW5nIGRpcmVjdGx5IGVucXVldWVkLiBJ4oCZbGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB3aGF0IGNyaXRlcmlhIGB0aXBjX3NrX2ZpbHRlcl9yY3ZgIHVzZXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBkYXRhIHByb2Nlc3NpbmcgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19za19lbnF1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9MjQxMj1zdGF0aWMgaW50IHRpcGNfc2tfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI0MjktLyoqXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDMwOiAqIHRpcGNfc2tfZW5xdWV1ZSAtIGV4dHJhY3QgYWxsIGJ1ZmZlcnMgd2l0aCBkZXN0aW5hdGlvbiAmIzM5O2Rwb3J0JiMzOTsgZnJvbVxubmV0L3RpcGMvc29ja2V0LmMtMjQzMS0gKiAgICAgICAgICAgICAgICAgICBpbnB1dHEgYW5kIHRyeSBhZGRpbmcgdGhlbSB0byBzb2NrZXQgb3IgYmFja2xvZyBxdWV1ZVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI0MzgtICovXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDM5OnN0YXRpYyB2b2lkIHRpcGNfc2tfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsIHN0cnVjdCBzb2NrICpzayxcbm5ldC90aXBjL3NvY2tldC5jLTI0NDAtXHRcdFx0ICAgIHUzMiBkcG9ydCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjQ5Mz12b2lkIHRpcGNfc2tfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI1MDktXHRcdFx0aWYgKGxpa2VseShzcGluX3RyeWxvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jaykpKSB7XG5uZXQvdGlwYy9zb2NrZXQuYzoyNTEwOlx0XHRcdFx0dGlwY19za19lbnF1ZXVlKGlucHV0cSwgc2ssIGRwb3J0LCBcdTAwMjZ4bWl0cSk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yNTExLVx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHRpcGNfc2tfcmN2YCBhbmQgQ29ubmVjdGlvbiBGaWx0ZXJpbmcqKgoKT2theSwgc28gYHRpcGNfc2tfcmN2YCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93IEkgbmVlZCB0byBzZWUgaG93IHRoYXQgaW1wYWN0cyBpdHMgdXNlIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBUSVBDIHN0YWNrLiBJJiMzOTttIGdvaW5nIHRvIHNoaWZ0IG15IGZvY3VzIHRvIGB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0YCB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBmaWx0ZXJpbmcgbG9naWMgYW5kIGlkZW50aWZ5IGhvdyBkYXRhIGlzIHJlY2VpdmVkIHdoZW4gY29ubmVjdGlvbiBmaWx0ZXJpbmcgaXMgdXNlZC4gSSBhbnRpY2lwYXRlIGl0JiMzOTtzIGxpa2VseSB1c2VkIHdpdGhpbiB0aGUgZnVuY3Rpb24gdG8gaGFuZGxlIGNvbm5lY3Rpb24gcmVxdWVzdHMgd2l0aCB0aG9zZSBkZWZpbmVkIGZpbHRlciBzcGVjaWZpY2F0aW9ucy4gTGV0IG1lIHRyYWNlIHRoZSBjYWxscyBhbmQgZGF0YSBmbG93IHRoZXJlLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBgdGlwY19za19yY3ZgIGlzIGludm9rZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIHdpdGhpbiB0aGUgc2NvcGUgb2YgZmlsdGVyIGV2YWx1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfc2tfZmlsdGVyX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYz0yMTU3PXN0YXRpYyB2b2lkIHRpcGNfc2tfcHJvdG9fcmN2KHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yMTk2LS8qKlxubmV0L3RpcGMvc29ja2V0LmM6MjE5NzogKiB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0IC0gY2hlY2sgaW5jb21pbmcgbWVzc2FnZSBmb3IgYSBjb25uZWN0aW9uLWJhc2VkIHNvY2tldFxubmV0L3RpcGMvc29ja2V0LmMtMjE5OC0gKiBAdHNrOiBUSVBDIHNvY2tldFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTIyMDItICovXG5uZXQvdGlwYy9zb2NrZXQuYzoyMjAzOnN0YXRpYyBib29sIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3Qoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3RpcGMvc29ja2V0LmMtMjIwNC1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTIzNDc9c3RhdGljIHZvaWQgdGlwY19za19maWx0ZXJfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzc2LVx0XHRsaW1pdCA9IHJjdmJ1Zl9saW1pdChzaywgc2tiKTtcbm5ldC90aXBjL3NvY2tldC5jOjIzNzc6XHRcdGlmICgoc2tfY29ubiBcdTAwMjZcdTAwMjYgIXRpcGNfc2tfZmlsdGVyX2Nvbm5lY3QodHNrLCBza2IsIHhtaXRxKSkgfHxcbm5ldC90aXBjL3NvY2tldC5jLTIzNzgtXHRcdCAgICAoIXNrX2Nvbm4gXHUwMDI2XHUwMDI2IG1zZ19jb25uZWN0ZWQoaGRyKSkgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE0NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVElQQyBTb2NrZXQgRmlsdGVyaW5nIGFuZCBTaHV0ZG93biBQYXRocyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IFRJUEMgc29ja2V0IGZpbHRlcmluZyBhbmQgc2h1dGRvd24gYXJlIGhhbmRsZWQsIGFuZCBpdCBzZWVtcyBsaWtlIGB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0YCBpcyBhbiBpbXBvcnRhbnQgZnVuY3Rpb24uIEkmIzM5O20gbm90aW5nIHRoYXQgaXQmIzM5O3MgY2FsbGVkIG5vdCBqdXN0IGZyb20gdGhlIGNvbm5lY3Rpb24gcHJvY2VzcywgYnV0IGFsc28gZnJvbSBgdGlwY19za19maWx0ZXJfcmN2YC4gVGhpcyBtZWFucyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBtb3JlIHRoYW4ganVzdCBpbml0aWFsIGNvbm5lY3Rpb24gc2V0dXA7IGl0JiMzOTtzIGFsc28gcmVsZXZhbnQgZHVyaW5nIG1lc3NhZ2UgcmVjZXB0aW9uLgoKTm93LCBjb25zaWRlcmluZyB0aGUgY29yZSBlbnRyeSBwb2ludHMgZm9yIGRhdGEgaGFuZGxpbmcsIEkgc2VlIHRocmVlIGtleSBwYXRoczoKCiogICBgdGlwY19za19yY3ZgOiBUaGlzIGlzIHRoZSBzdGFuZGFyZCByZWNlaXZlIHBhdGguCiogICBgdGlwY19za19iYWNrbG9nX3JjdmA6IFRoaXMgb25lIGNvbWVzIGludG8gcGxheSB0aHJvdWdoIHRoZSBzb2NrZXQgYmFja2xvZyBtZWNoYW5pc20gKGBza19iYWNrbG9nX3JjdmApLgoqICAgYF9fdGlwY19zaHV0ZG93bmA6ICBUaGlzIGlzIHRyaWdnZXJlZCBkdXJpbmcgc2h1dGRvd24sIHVsdGltYXRlbHkgY2FsbGVkIHZpYSB0aGUgc29ja2V0IG9wZXJhdGlvbiYjMzk7cyBzaHV0ZG93biBmdW5jdGlvbiAoYHRpcGNfc2h1dGRvd25gIHdoaWNoIHdyYXBzIGBzb2NrZXRfb3BzLSZndDtzaHV0ZG93bmApLgoKU2luY2Ugc2h1dGRvd24gaXMgY3JpdGljYWwgZm9yIGEgd2VsbC1iZWhhdmVkIHN5c3RlbSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyBvZiBgX190aXBjX3NodXRkb3duYC4gVW5kZXJzdGFuZGluZyB3aGF0IGluaXRpYXRlcyBzaHV0ZG93biB3aWxsIGJlIGtleSBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGFzcGVjdCBvZiB0aGUgVElQQyBzb2NrZXQgaW1wbGVtZW50YXRpb24gb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdGlwY19zaHV0ZG93biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTU0Mj1zdGF0aWMgdm9pZCB0aXBjX3NrX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy01NDktLyogQ2FsbGVyIHNob3VsZCBob2xkIHNvY2tldCBsb2NrIGZvciB0aGUgc29ja2V0LiAqL1xubmV0L3RpcGMvc29ja2V0LmM6NTUwOnN0YXRpYyB2b2lkIF9fdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZXJyb3IpXG5uZXQvdGlwYy9zb2NrZXQuYy01NTEte1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTYyNj1zdGF0aWMgaW50IHRpcGNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTY0MS1cdHRyYWNlX3RpcGNfc2tfcmVsZWFzZShzaywgTlVMTCwgVElQQ19EVU1QX0FMTCwgXCYjMzQ7IFwmIzM0Oyk7XG5uZXQvdGlwYy9zb2NrZXQuYzo2NDI6XHRfX3RpcGNfc2h1dGRvd24oc29jaywgVElQQ19FUlJfTk9fUE9SVCk7XG5uZXQvdGlwYy9zb2NrZXQuYy02NDMtXHRzay1cdTAwM2Vza19zaHV0ZG93biA9IFNIVVRET1dOX01BU0s7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjgwOT1zdGF0aWMgaW50IHRpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yODE5LVx0dHJhY2VfdGlwY19za19zaHV0ZG93bihzaywgTlVMTCwgVElQQ19EVU1QX0FMTCwgXCYjMzQ7IFwmIzM0Oyk7XG5uZXQvdGlwYy9zb2NrZXQuYzoyODIwOlx0X190aXBjX3NodXRkb3duKHNvY2ssIFRJUENfQ09OTl9TSFVURE9XTik7XG5uZXQvdGlwYy9zb2NrZXQuYy0yODIxLVx0c2stXHUwMDNlc2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTI4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipNeSBGb2N1c2VkIExvb2sgYXQgdGhlIFRJUEMgU29ja2V0IE9wZXJhdGlvbnMqKgoKUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluLiBJJiMzOTttIHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIFRJUEMgc29ja2V0IG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgbGlmZWN5Y2xlIG9mIGEgY29ubmVjdGlvbi4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgYHRpcGNfcmVsZWFzZWAgYW5kIGB0aXBjX3NodXRkb3duYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gbWFuYWdpbmcgdGhlIHNvY2tldCYjMzk7cyByZXNvdXJjZXMgYW5kIGhhbmRsaW5nIGl0cyBjbG9zdXJlLiBLbm93aW5nIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjcml0aWNhbCBwYXRocy4gVGhlcmVmb3JlLCBteSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gdGhlc2Ugc3ltYm9sczogYHRpcGNfc2tfcmN2YCwgYHRpcGNfcmVsZWFzZWAsIGFuZCBgdGlwY19zaHV0ZG93bmAuIFRoZXNlIHdpbGwgdGVsbCB0aGUgc3Rvcnkgb2YgdGhlIGRhdGEgcmVjZXB0aW9uLCBjb25uZWN0aW9uIHJlbGVhc2UsIGFuZCB0ZXJtaW5hdGlvbi4gSSBzZWUgdGhlIGZsb3cgZnJvbSBvbmUgcG9pbnQgdG8gdGhlIG5leHQsIGxpa2UgYSByaXZlciBvZiBkYXRhLCBhbmQgdGhlc2UgYXJlIHRoZSBiYW5rcywgb3IgZWRnZXMgb2YgdGhhdCByaXZlci4gSSYjMzk7bSB3b25kZXJpbmcgaWYgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBpcyBob3cgZGF0YSB3YWl0aW5nIHRvIGJlIHNlbnQgaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgaXQgaXMgY2FsbGVkIHRvIGRldGVybWluZSBob3cgbWVzc2FnZXMgYXJlIGJlaW5nIHNlbnQuIFNvLCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgdGlwY19zZW5kbXNnYCBvciBgdGlwY19zZW5kc3RyZWFtYCBhcmUgdGhlIGNhbGxlcnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19za19wdXNoX2JhY2tsb2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYz0xNTg9c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jOjE1OTpzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxubmV0L3RpcGMvc29ja2V0LmMtMTYwLVx0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz01NTA9c3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy01NjMtXHQvKiBQdXNoIG91dCBkZWxheWVkIG1lc3NhZ2VzIGlmIGluIE5hZ2xlIG1vZGUgKi9cbm5ldC90aXBjL3NvY2tldC5jOjU2NDpcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIE5VTEwpO1xubmV0L3RpcGMvc29ja2V0LmMtNTY1LVx0LyogUmVtb3ZlIHBlbmRpbmcgU1lOICovXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTE5Mj12b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTI2OC1cbm5ldC90aXBjL3NvY2tldC5jOjEyNjk6LyogdGlwY19za19wdXNoX2JhY2tsb2coKTogc2VuZCBhY2N1bXVsYXRlZCBidWZmZXJzIGluIHNvY2tldCB3cml0ZSBxdWV1ZVxubmV0L3RpcGMvc29ja2V0LmMtMTI3MC0gKiAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHNvY2tldCBpcyBpbiBOYWdsZSBtb2RlXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTI3Mi0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjEyNzM6c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayxcbm5ldC90aXBjL3NvY2tldC5jLTEyNzQtXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTMzND1zdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzc4LVx0XHR3YXNfY29uZyA9IHRza19jb25uX2NvbmcodHNrKTtcbm5ldC90aXBjL3NvY2tldC5jOjEzNzk6XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgbXNnX25hZ2xlX2FjayhoZHIpLCB4bWl0cSk7XG5uZXQvdGlwYy9zb2NrZXQuYy0xMzgwLVx0XHR0c2stXHUwMDNlc250X3VuYWNrZWQgLT0gbXNnX2Nvbm5fYWNrKGhkcik7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjE1Nz1zdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjE3Ni1cdFx0d2FrZXVwID0gdHJ1ZTtcbm5ldC90aXBjL3NvY2tldC5jOjIxNzc6XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTtcbm5ldC90aXBjL3NvY2tldC5jLTIxNzgtXHRcdGJyZWFrO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTIyMDM9c3RhdGljIGJvb2wgdGlwY19za19maWx0ZXJfY29ubmVjdChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjI2Ny1cdFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfd3JpdGVfcXVldWUpKVxubmV0L3RpcGMvc29ja2V0LmM6MjI2ODpcdFx0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yMjY5LVx0XHQvKiBBY2NlcHQgb25seSBjb25uZWN0aW9uLWJhc2VkIG1lc3NhZ2VzIHNlbnQgYnkgcGVlciAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE0NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVElQQyBTb2NrZXQgQnVmZmVyIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgVElQQyBjb2RlLCBhbmQgaXQgc2VlbXMgdGhpcyBjaGFuZ2UsIHdoaWxlIG5vdCAqZGlyZWN0bHkqIGluIGB0aXBjX3NlbmRtc2dgLCBpcyBkZWZpbml0ZWx5IHRpZWQgdG8gaG93IGJ1ZmZlcnMgYXJlIGhhbmRsZWQgd2hlbiBOYWdsZSBtb2RlIGlzIGVuYWJsZWQgb24gYSBzb2NrZXQuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgdGlwY19za19wdXNoX2JhY2tsb2dgLCB3aGljaCBpcyB3aGVyZSB3ZSBtYW5hZ2UgdGhlIGJhY2tsb2cgb2YgZGF0YSB0byBiZSB0cmFuc21pdHRlZC4gU3BlY2lmaWNhbGx5LCBpZiB0aGUgYHhtaXRxYCAodHJhbnNtaXQgcXVldWUpIGlzIHByZXNlbnQsIGFuZCB0aGUgZGVzdGluYXRpb24gbm9kZSBpcyB0aGUgbG9jYWwgbm9kZSwgaXQgc3BsaWNlcyB0aGUgYHR4cWAgKHRyYW5zbWl0IHF1ZXVlKSB0byB0aGUgYHhtaXRxYC4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmV0dGVyLgoKVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIGNvbnNpZGVyIGEgZmV3IG90aGVyIGZ1bmN0aW9ucy4gRmlyc3QsIGB0aXBjX3NrX3JjdmAgaXMga2V5LCBhcyBpdCYjMzk7cyB0aGUgY29yZSByZWNlaXZlIGZ1bmN0aW9uIGZvciBUSVBDIHNvY2tldHMuIEkmIzM5O2xsIGFsc28gY2hlY2sgYHRpcGNfc2tfYmFja2xvZ19yY3ZgIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJhY2tsb2cuIFRoZW4gdGhlcmUmIzM5O3MgdGhlIHNvY2tldCBvcGVyYXRpb25zIHRoZW1zZWx2ZXM6IGB0aXBjX3JlbGVhc2VgIGFuZCBgdGlwY19zaHV0ZG93bmAsIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuIEFuZCBmaW5hbGx5LCBJIHNob3VsZCByZXZpZXcgYHRpcGNfc2VuZG1zZ2AgYW5kIGB0aXBjX3NlbmRzdHJlYW1gIGJlY2F1c2UgdGhleSYjMzk7cmUgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHF1ZXVpbmcgdGhlIGJ1ZmZlcnMgdGhhdCBhcmUgdWx0aW1hdGVseSBpbnZvbHZlZCBpbiB0aGlzIHNwbGljaW5nIG9wZXJhdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoaXMgbmV3IHNwbGljZSBsb2dpYyBpcyBnb2luZyB0byBiZSBjcnVjaWFsIHRvIGRldGVybWluaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTE1Nz1zdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xubmV0L3RpcGMvc29ja2V0LmM6MTU4OnN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XG5uZXQvdGlwYy9zb2NrZXQuYy0xNTktc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz03OTE9c3RhdGljIF9fcG9sbF90IHRpcGNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy04MzktICpcbm5ldC90aXBjL3NvY2tldC5jOjg0MDogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3Ncbm5ldC90aXBjL3NvY2tldC5jLTg0MS0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTkwNj1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zb2NrICp0c2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtOTUzLSAqXG5uZXQvdGlwYy9zb2NrZXQuYzo5NTQ6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXG5uZXQvdGlwYy9zb2NrZXQuYy05NTUtICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz05NTc9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfdW5pY2FzdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTk5Ny0gKlxubmV0L3RpcGMvc29ja2V0LmM6OTk4OiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xubmV0L3RpcGMvc29ja2V0LmMtOTk5LSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTAwMT1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF9hbnljYXN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTA3OC0gKlxubmV0L3RpcGMvc29ja2V0LmM6MTA3OTogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3Ncbm5ldC90aXBjL3NvY2tldC5jLTEwODAtICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xMDgyPXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX2JjYXN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTE1Mi0gKlxubmV0L3RpcGMvc29ja2V0LmM6MTE1MzogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3Ncbm5ldC90aXBjL3NvY2tldC5jLTExNTQtICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xMzM0PXN0YXRpYyB2b2lkIHRpcGNfc2tfY29ubl9wcm90b19yY3Yoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTEzOTItLyoqXG5uZXQvdGlwYy9zb2NrZXQuYzoxMzkzOiAqIHRpcGNfc2VuZG1zZyAtIHNlbmQgbWVzc2FnZSBpbiBjb25uZWN0aW9ubGVzcyBtYW5uZXJcbm5ldC90aXBjL3NvY2tldC5jLTEzOTQtICogQHNvY2s6IHNvY2tldCBzdHJ1Y3R1cmVcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDA0LSAqL1xubmV0L3RpcGMvc29ja2V0LmM6MTQwNTpzdGF0aWMgaW50IHRpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxubmV0L3RpcGMvc29ja2V0LmMtMTQwNi1cdFx0XHRzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE0MTEtXHRsb2NrX3NvY2soc2spO1xubmV0L3RpcGMvc29ja2V0LmM6MTQxMjpcdHJldCA9IF9fdGlwY19zZW5kbXNnKHNvY2ssIG0sIGRzeik7XG5uZXQvdGlwYy9zb2NrZXQuYy0xNDEzLVx0cmVsZWFzZV9zb2NrKHNrKTtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDE3LVxubmV0L3RpcGMvc29ja2V0LmM6MTQxODpzdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxubmV0L3RpcGMvc29ja2V0LmMtMTQxOS17XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTU2NT1zdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE1ODUtXHRpZiAodW5saWtlbHkoZGVzdCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgPT0gVElQQ19PUEVOKSkge1xubmV0L3RpcGMvc29ja2V0LmM6MTU4NjpcdFx0cmMgPSBfX3RpcGNfc2VuZG1zZyhzb2NrLCBtLCBkbGVuKTtcbm5ldC90aXBjL3NvY2tldC5jLTE1ODctXHRcdGlmIChkbGVuIFx1MDAyNlx1MDAyNiBkbGVuID09IHJjKSB7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjU4Mz1zdGF0aWMgaW50IHRpcGNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqZGVzdCxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNjM3LVxubmV0L3RpcGMvc29ja2V0LmM6MjYzODpcdFx0cmVzID0gX190aXBjX3NlbmRtc2coc29jaywgXHUwMDI2bSwgMCk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yNjM5LVx0XHRpZiAoKHJlcyBcdTAwM2MgMCkgXHUwMDI2XHUwMDI2IChyZXMgIT0gLUVXT1VMREJMT0NLKSlcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzY3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1zZ19vcHMgPSB7XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzM4MS1cdC5nZXRzb2Nrb3B0X2l0ZXIgPSB0aXBjX2dldHNvY2tvcHQsXG5uZXQvdGlwYy9zb2NrZXQuYzozMzgyOlx0LnNlbmRtc2dcdD0gdGlwY19zZW5kbXNnLFxubmV0L3RpcGMvc29ja2V0LmMtMzM4My1cdC5yZWN2bXNnXHQ9IHRpcGNfcmVjdm1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwOTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLgoKKipGb2N1cyBTeW1ib2xzIGZvciBFeGFtaW5hdGlvbioqCgpSaWdodCwgc28gSSYjMzk7dmUgYmVlbiB0aGlua2luZyBhYm91dCB0aGUgY3JpdGljYWwgZm9jdXMgc3ltYm9scyB3ZSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byBoZXJlLiBCYXNlZCBvbiBteSBhbmFseXNpcywgdGhlc2UgYXJlIHRoZSBvbmVzIHRoYXQganVtcCBvdXQ6IGB0aXBjX3NrX3JjdmAsIGB0aXBjX3NlbmRtc2dgLCBgdGlwY19zZW5kc3RyZWFtYCwgYHRpcGNfcmVsZWFzZWAsIGFuZCBgdGlwY19zaHV0ZG93bmAuIFRoZXNlIGxvb2sgbGlrZSB0aGUga2V5IHBpZWNlcyBvZiB0aGUgcHV6emxlIHdoZW4gd2UmIzM5O3JlIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaW5jbHVkZSBgdGlwY19zZW5kc3RyZWFtYC4gSSYjMzk7dmUgZ290IGEgaHVuY2ggaXQmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19zZW5kc3RyZWFtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9MTU2PXN0YXRpYyB2b2lkIHRpcGNfc2tfcmVtb3ZlKHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNTc6c3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jLTE1OC1zdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTE0MTg9c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTQyLS8qKlxubmV0L3RpcGMvc29ja2V0LmM6MTU0MzogKiB0aXBjX3NlbmRzdHJlYW0gLSBzZW5kIHN0cmVhbS1vcmllbnRlZCBkYXRhXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTQ0LSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTU1Mi0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjE1NTM6c3RhdGljIGludCB0aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeilcbm5ldC90aXBjL3NvY2tldC5jLTE1NTQte1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE1NTgtXHRsb2NrX3NvY2soc2spO1xubmV0L3RpcGMvc29ja2V0LmM6MTU1OTpcdHJldCA9IF9fdGlwY19zZW5kc3RyZWFtKHNvY2ssIG0sIGRzeik7XG5uZXQvdGlwYy9zb2NrZXQuYy0xNTYwLVx0cmVsZWFzZV9zb2NrKHNrKTtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTY0LVxubmV0L3RpcGMvc29ja2V0LmM6MTU2NTpzdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxubmV0L3RpcGMvc29ja2V0LmMtMTU2Ni17XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTY2MD1zdGF0aWMgaW50IHRpcGNfc2VuZF9wYWNrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNjY0LVxubmV0L3RpcGMvc29ja2V0LmM6MTY2NTpcdHJldHVybiB0aXBjX3NlbmRzdHJlYW0oc29jaywgbSwgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jLTE2NjYtfVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI3Mjk9c3RhdGljIGludCB0aXBjX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdfc29jayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNzkyLVx0aW92X2l0ZXJfa3ZlYyhcdTAwMjZtLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgTlVMTCwgMCwgMCk7XG5uZXQvdGlwYy9zb2NrZXQuYzoyNzkzOlx0X190aXBjX3NlbmRzdHJlYW0obmV3X3NvY2ssIFx1MDAyNm0sIDApO1xubmV0L3RpcGMvc29ja2V0LmMtMjc5NC1cdHJlbGVhc2Vfc29jayhuZXdfc2spO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTM0MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc3RyZWFtX29wcyA9IHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDIxLVx0LmdldHNvY2tvcHRfaXRlciA9IHRpcGNfZ2V0c29ja29wdCxcbm5ldC90aXBjL3NvY2tldC5jOjM0MjI6XHQuc2VuZG1zZ1x0PSB0aXBjX3NlbmRzdHJlYW0sXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDIzLVx0LnJlY3Ztc2dcdD0gdGlwY19yZWN2c3RyZWFtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE1MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byBUSVBDIFNvY2tldCBPcGVyYXRpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBUSVBDIHNvY2tldCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIHNlbmQgZnVuY3Rpb25zLiBJIGtub3cgYHRpcGNfc2VuZHN0cmVhbWAgYW5kIGB0aXBjX3NlbmRtc2dgIGFyZSB0aGUga2V5IG9uZXMgZm9yIHN0cmVhbSBhbmQgbWVzc2FnZSBzb2NrZXRzLCByZXNwZWN0aXZlbHkuIEFuZCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBgdGlwY19zZW5kX3BhY2tldGAgaGFuZGxlcyB0aGUgcGFja2V0IHNvY2tldHMuIEkgc2hvdWxkIG1ha2UgYSBub3RlIG9mIHRoaXMgdG8gaGF2ZSBteSBiYXNpY3Mgc3RyYWlnaHQgYW5kIHRvIGtlZXAgdGhpbmdzIG9yZ2FuaXNlZC4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBkaWcgaW50byB0aGUgcmVjZWl2ZSBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBpcyBhY3R1YWxseSAqcmVjZWl2ZWQqIHdpdGhpbiB0aGlzIHdob2xlIGZyYW1ld29yay4gTGV0JiMzOTtzIHNlZSBob3cgYHRpcGNfc2tfcmN2YCB3b3Jrcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIGhvdyBldmVyeXRoaW5nIGNvbm5lY3RzIG9uIHRoZSByZWNlaXZlIHNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfc2tfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9MTE5Mj12b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTI2NS1cdH1cbm5ldC90aXBjL3NvY2tldC5jOjEyNjY6XHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XG5uZXQvdGlwYy9zb2NrZXQuYy0xMjY3LX1cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yNDM5PXN0YXRpYyB2b2lkIHRpcGNfc2tfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDg2LS8qKlxubmV0L3RpcGMvc29ja2V0LmM6MjQ4NzogKiB0aXBjX3NrX3JjdiAtIGhhbmRsZSBhIGNoYWluIG9mIGluY29taW5nIGJ1ZmZlcnNcbm5ldC90aXBjL3NvY2tldC5jLTI0ODgtICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2Vcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDkyLSAqL1xubmV0L3RpcGMvc29ja2V0LmM6MjQ5Mzp2b2lkIHRpcGNfc2tfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxKVxubmV0L3RpcGMvc29ja2V0LmMtMjQ5NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzExCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYHRpcGNfc2tfcmN2YCBVc2FnZSBpbiB0aGUgVElQQyBTdWJzeXN0ZW0qKgoKQWxyaWdodCwgc28gYHRpcGNfc2tfcmN2YCBpcyBub24tc3RhdGljIGFuZCBhcHBhcmVudGx5IGVpdGhlciBleHBvcnRlZCBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGFjdGl2ZWx5IHV0aWxpemVkIG91dHNpZGUgb2YgaXRzIGltbWVkaWF0ZSBkZWZpbml0aW9uLiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbC4gVGhpcyBzdWdnZXN0cyBpdCYjMzk7cyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IG9yIGEgY29yZSBmdW5jdGlvbiB3aXRoaW4gdGhlIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgZnJhbWV3b3JrLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgbW9yZSBkZWVwbHkuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgb3RoZXIgc291cmNlIGZpbGVzIHdpdGhpbiB0aGUgVElQQyBjb2RlYmFzZSB0byBkZXRlcm1pbmUgZXhhY3RseSB3aGVyZSBhbmQgaG93IGB0aXBjX3NrX3JjdmAgaXMgYmVpbmcgY2FsbGVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb250ZXh0IOKAkyB3aG8mIzM5O3MgY2FsbGluZyBpdCwgd2hhdCBhcmd1bWVudHMgYXJlIGJlaW5nIHBhc3NlZCwgYW5kIHdoYXQmIzM5O3MgdGhlIG92ZXJhbGwgZmxvdyBvZiBjb250cm9sIHRoYXQgYnJpbmdzIHVzIGhlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCB3aWxsIHNoZWQgbGlnaHQgb24gd2hhdCBpdHMgZnVuY3Rpb25hbGl0eSBpcy4gS25vd2luZyBpdCBpc24mIzM5O3Qgc3RhdGljIGxpbWl0cyB3aGVyZSBJIG5lZWQgdG8gbG9vaywgd2hpY2ggd2lsbCBzYXZlIHRpbWUuIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMgYW5kIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19za19yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmNhc3QuYz00MzY9aW50IHRpcGNfYmNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvdGlwYy9iY2FzdC5jLTQ2MC1cdGlmICghc2tiX3F1ZXVlX2VtcHR5KGlucHV0cSkpXG5uZXQvdGlwYy9iY2FzdC5jOjQ2MTpcdFx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xubmV0L3RpcGMvYmNhc3QuYy00NjItXG4tLVxubmV0L3RpcGMvYmNhc3QuYz00NzA9dm9pZCB0aXBjX2JjYXN0X2Fja19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLFxuLS1cbm5ldC90aXBjL2JjYXN0LmMtNDkwLVx0aWYgKCFza2JfcXVldWVfZW1wdHkoaW5wdXRxKSlcbm5ldC90aXBjL2JjYXN0LmM6NDkxOlx0XHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XG5uZXQvdGlwYy9iY2FzdC5jLTQ5Mi19XG4tLVxubmV0L3RpcGMvYmNhc3QuYz00OTg9aW50IHRpcGNfYmNhc3Rfc3luY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLFxuLS1cbm5ldC90aXBjL2JjYXN0LmMtNTMyLVx0aWYgKCFza2JfcXVldWVfZW1wdHkoaW5wdXRxKSlcbm5ldC90aXBjL2JjYXN0LmM6NTMzOlx0XHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XG5uZXQvdGlwYy9iY2FzdC5jLTUzNC1cdHJldHVybiByYztcbi0tXG5uZXQvdGlwYy9iY2FzdC5jPTU1Nz12b2lkIHRpcGNfYmNhc3RfcmVtb3ZlX3BlZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpyY3ZfbClcbi0tXG5uZXQvdGlwYy9iY2FzdC5jLTU3NC1cdGlmICghc2tiX3F1ZXVlX2VtcHR5KGlucHV0cSkpXG5uZXQvdGlwYy9iY2FzdC5jOjU3NTpcdFx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xubmV0L3RpcGMvYmNhc3QuYy01NzYtfVxuLS1cbm5ldC90aXBjL25vZGUuYz0xMDYyPXN0YXRpYyB2b2lkIHRpcGNfbm9kZV9saW5rX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbiwgaW50IGJlYXJlcl9pZCwgYm9vbCBkZWxldGUpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTEwOTMtXHRcdHRpcGNfYmVhcmVyX3htaXQobi1cdTAwM2VuZXQsIGJlYXJlcl9pZCwgXHUwMDI2eG1pdHEsIG1hZGRyLCBuKTtcbm5ldC90aXBjL25vZGUuYzoxMDk0Olx0dGlwY19za19yY3Yobi1cdTAwM2VuZXQsIFx1MDAyNmxlLVx1MDAzZWlucHV0cSk7XG5uZXQvdGlwYy9ub2RlLmMtMTA5NS19XG4tLVxubmV0L3RpcGMvbm9kZS5jPTE2Mjc9c3RhdGljIHZvaWQgdGlwY19seGNfeG1pdChzdHJ1Y3QgbmV0ICpwZWVyX25ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTY0MC1cdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZsaXN0LVx1MDAzZWxvY2spO1xubmV0L3RpcGMvbm9kZS5jOjE2NDE6XHRcdFx0dGlwY19za19yY3YocGVlcl9uZXQsIGxpc3QpO1xubmV0L3RpcGMvbm9kZS5jLTE2NDItXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC90aXBjL25vZGUuYy0xNjY1LVx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZsaXN0LVx1MDAzZWxvY2spO1xubmV0L3RpcGMvbm9kZS5jOjE2NjY6XHRcdHRpcGNfc2tfcmN2KHBlZXJfbmV0LCBsaXN0KTtcbm5ldC90aXBjL25vZGUuYy0xNjY3LVx0XHRyZXR1cm47XG4tLVxubmV0L3RpcGMvbm9kZS5jPTE2ODc9aW50IHRpcGNfbm9kZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTcwMC1cdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bGlzdC1cdTAwM2Vsb2NrKTtcbm5ldC90aXBjL25vZGUuYzoxNzAxOlx0XHR0aXBjX3NrX3JjdihuZXQsIGxpc3QpO1xubmV0L3RpcGMvbm9kZS5jLTE3MDItXHRcdHJldHVybiAwO1xuLS1cbm5ldC90aXBjL25vZGUuYz0yMDg2PXZvaWQgdGlwY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmIpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTIyMDItXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZsZS1cdTAwM2VpbnB1dHEpKVxubmV0L3RpcGMvbm9kZS5jOjIyMDM6XHRcdHRpcGNfc2tfcmN2KG5ldCwgXHUwMDI2bGUtXHUwMDNlaW5wdXRxKTtcbm5ldC90aXBjL25vZGUuYy0yMjA0LVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTExOTI9dm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTEyNjUtXHR9XG5uZXQvdGlwYy9zb2NrZXQuYzoxMjY2Olx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xubmV0L3RpcGMvc29ja2V0LmMtMTI2Ny19XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjQzOT1zdGF0aWMgdm9pZCB0aXBjX3NrX2VucXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjQ4Ni0vKipcbm5ldC90aXBjL3NvY2tldC5jOjI0ODc6ICogdGlwY19za19yY3YgLSBoYW5kbGUgYSBjaGFpbiBvZiBpbmNvbWluZyBidWZmZXJzXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDg4LSAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjQ5Mi0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjI0OTM6dm9pZCB0aXBjX3NrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSlcbm5ldC90aXBjL3NvY2tldC5jLTI0OTQte1xuLS1cbm5ldC90aXBjL3NvY2tldC5oPTU1PXZvaWQgdGlwY19zb2NrZXRfc3RvcCh2b2lkKTtcbm5ldC90aXBjL3NvY2tldC5oOjU2OnZvaWQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpO1xubmV0L3RpcGMvc29ja2V0LmgtNTctdm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLFxuLS1cbm5ldC90aXBjL3RvcHNydi5jPTYxND1zdGF0aWMgdm9pZCB0aXBjX3RvcHNydl9rZXJuX2V2dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2V2ZW50ICpldnQpXG4tLVxubmV0L3RpcGMvdG9wc3J2LmMtNjI5LVx0dGlwY19sb29wYmFja190cmFjZShuZXQsIFx1MDAyNmV2dHEpO1xubmV0L3RpcGMvdG9wc3J2LmM6NjMwOlx0dGlwY19za19yY3YobmV0LCBcdTAwMjZldnRxKTtcbm5ldC90aXBjL3RvcHNydi5jLTYzMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkZvY3VzaW5nIG9uIFRJUEMgQ29tbXVuaWNhdGlvbioqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSwgYHRpcGNfc2tfcmN2YCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGNvcmUgVElQQyByZWNlaXZlciBmdW5jdGlvbnMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGNydWNpYWwgdGFzayBvZiByZWNlaXZpbmcgaW5jb21pbmcgVElQQyBtZXNzYWdlcy4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUga2V5IHRvIHBpbnBvaW50aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcywgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyB3aXRoaW4gdGhlIHJlY2VpdmVyIGltcGxlbWVudGF0aW9uLgoKTm93LCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBhbmQgc2VlIGhvdyB0aGUgbWVzc2FnZXMgYXJyaXZlIGF0IHRoZSByZWNlaXZlciwgSSBzaG91bGQgYWxzbyBpbW1lZGlhdGVseSBzaGlmdCBteSBhdHRlbnRpb24gdG8gYHRpcGNfc2VuZG1zZ2AgYW5kIGB0aXBjX3NlbmRzdHJlYW1gLiBUaG9zZSB0d28gZnVuY3Rpb25zIGFyZSBwcm9iYWJseSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgc2VuZGluZyBzaWRlIG9mIHRoaW5ncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZXNzYWdlcyBhcmUgY29uc3RydWN0ZWQsIHB1dCBvbiB0aGUgd2lyZSwgYW5kIHdoYXQgZmxvdyBjb250cm9sIG9yIHJhdGUgbGltaXRpbmcsIGlmIGFueSwgdGhlIHNlbmRpbmcgc2lkZSBlbmZvcmNlcy4gU2VlaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgY29tbXVuaWNhdGlvbiBmbG93LCB3aGljaCBpcyBob3cgSSBjYW4gZGV2ZWxvcCBhIGdvb2QgcGxhbiB0byBvcHRpbWl6ZSB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9MTU3PXN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNTg6c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jLTE1OS1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTc5MT1zdGF0aWMgX19wb2xsX3QgdGlwY19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTgzOS0gKlxubmV0L3RpcGMvc29ja2V0LmM6ODQwOiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xubmV0L3RpcGMvc29ja2V0LmMtODQxLSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9OTA2PXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX21zZyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NvY2sgKnRzayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy05NTMtICpcbm5ldC90aXBjL3NvY2tldC5jOjk1NDogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3Ncbm5ldC90aXBjL3NvY2tldC5jLTk1NS0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTk1Nz1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF91bmljYXN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtOTk3LSAqXG5uZXQvdGlwYy9zb2NrZXQuYzo5OTg6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXG5uZXQvdGlwYy9zb2NrZXQuYy05OTktICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xMDAxPXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX2FueWNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMDc4LSAqXG5uZXQvdGlwYy9zb2NrZXQuYzoxMDc5OiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xubmV0L3RpcGMvc29ja2V0LmMtMTA4MC0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTEwODI9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfYmNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMTUyLSAqXG5uZXQvdGlwYy9zb2NrZXQuYzoxMTUzOiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xubmV0L3RpcGMvc29ja2V0LmMtMTE1NC0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTEzMzQ9c3RhdGljIHZvaWQgdGlwY19za19jb25uX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTM5Mi0vKipcbm5ldC90aXBjL3NvY2tldC5jOjEzOTM6ICogdGlwY19zZW5kbXNnIC0gc2VuZCBtZXNzYWdlIGluIGNvbm5lY3Rpb25sZXNzIG1hbm5lclxubmV0L3RpcGMvc29ja2V0LmMtMTM5NC0gKiBAc29jazogc29ja2V0IHN0cnVjdHVyZVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE0MDQtICovXG5uZXQvdGlwYy9zb2NrZXQuYzoxNDA1OnN0YXRpYyBpbnQgdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDA2LVx0XHRcdHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTQxMS1cdGxvY2tfc29jayhzayk7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNDEyOlx0cmV0ID0gX190aXBjX3NlbmRtc2coc29jaywgbSwgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jLTE0MTMtXHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE0MTctXG5uZXQvdGlwYy9zb2NrZXQuYzoxNDE4OnN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDE5LXtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xNTY1PXN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTU4NS1cdGlmICh1bmxpa2VseShkZXN0IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSA9PSBUSVBDX09QRU4pKSB7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNTg2Olx0XHRyYyA9IF9fdGlwY19zZW5kbXNnKHNvY2ssIG0sIGRsZW4pO1xubmV0L3RpcGMvc29ja2V0LmMtMTU4Ny1cdFx0aWYgKGRsZW4gXHUwMDI2XHUwMDI2IGRsZW4gPT0gcmMpIHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yNTgzPXN0YXRpYyBpbnQgdGlwY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpkZXN0LFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI2MzctXG5uZXQvdGlwYy9zb2NrZXQuYzoyNjM4Olx0XHRyZXMgPSBfX3RpcGNfc2VuZG1zZyhzb2NrLCBcdTAwMjZtLCAwKTtcbm5ldC90aXBjL3NvY2tldC5jLTI2MzktXHRcdGlmICgocmVzIFx1MDAzYyAwKSBcdTAwMjZcdTAwMjYgKHJlcyAhPSAtRVdPVUxEQkxPQ0spKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMzNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcyA9IHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzgxLVx0LmdldHNvY2tvcHRfaXRlciA9IHRpcGNfZ2V0c29ja29wdCxcbm5ldC90aXBjL3NvY2tldC5jOjMzODI6XHQuc2VuZG1zZ1x0PSB0aXBjX3NlbmRtc2csXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzgzLVx0LnJlY3Ztc2dcdD0gdGlwY19yZWN2bXNnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMxMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVElQQyBTb2NrZXQgRnVuY3Rpb24gUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmV0L3RpcGMvc29ja2V0LmNgIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYWNjZXNzIHBhdGhzIHRvIGl0cyBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiBgdGlwY19zZW5kbXNnYCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAuIFRoZSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhleSBhcmUgKmRlY2xhcmVkKiBhcyBgc3RhdGljYCBmdW5jdGlvbnMgd2l0aGluIHRoZSBmaWxlLCB3aGljaCB1c3VhbGx5IGltcGxpZXMgbGltaXRlZCBzY29wZSBhbmQgcG90ZW50aWFsIGZvciBpbmxpbmluZy4gQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3JpdGljYWwgcG9pbnQsIHRoZXkgYXJlIGFzc2lnbmVkIHRvIGBwcm90b19vcHNgLiBUaGF0JiMzOTtzIGhvdyB0aGVzZSBmdW5jdGlvbnMgYmVjb21lIHJlYWNoYWJsZSB2aWEgc3lzY2FsbHMuCgpOb3csIGlmIHRoZXkgKndlcmUqIHB1cmVseSBzdGF0aWMsIHRoZXJl4oCZcyBhIHNsaWdodCBjaGFuY2UgdGhlIGNvbXBpbGVyIG1pZ2h0IGlubGluZSB0aGVtLCBhbmQgdGhleSB3b3VsZG4mIzM5O3QgaGF2ZSB0aGVpciBvd24gZGlzY3JldGUgc3ltYm9sIGFkZHJlc3MgaW4gdGhlIGtlcm5lbCBpbWFnZS4gQnV0IGJlaW5nIGFzc2lnbmVkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGBwcm90b19vcHNgIHByZXZlbnRzIHRoaXMuIFRoZSBjb21waWxlciAqbXVzdCogdHJlYXQgdGhlbSBhcyBkaXN0aW5jdCwgZXh0ZXJuYWwtZmFjaW5nIGVudHJ5IHBvaW50cy4gU28sIEkgbmVlZCB0byBiZSBzdXJlIEkgYW0gdHJhY2luZyB0aGUgcmlnaHQgZnVuY3Rpb25zLgoKV2FpdCBhIG1pbnV0ZSwgYF9fdGlwY19zZW5kbXNnYCBhbmQgYF9fdGlwY19zZW5kc3RyZWFtYCBhcmUgYWxzbyBzdGF0aWMsIHNvIEkgY291bGQgYmUgZ2V0dGluZyBjb25mdXNlZCB0aGVyZS4gTGV0JiMzOTtzIHN0aWNrIHdpdGggYHRpcGNfc2VuZG1zZ2AgYW5kIGB0aXBjX3NlbmRzdHJlYW1gIHRvIGF2b2lkIGNvbmZ1c2lvbi4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2sgYSBtb21lbnQgYW5kIGZvY3VzIG9uIHRoZSByZWNlaXZpbmcgc2lkZS4gYHRpcGNfc2tfcmN2YCBpcyBub24tc3RhdGljLCBzbyBhdCBsZWFzdCBvbmUgcmVjZWl2aW5nIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUuIEkgbmVlZCB0byBub3RlIHRoaXMgZm9yIGxhdGVyLiBJIGFtIGFsc28gc2VlaW5nIHRoYXQgYHRpcGNfbm9kZV94bWl0YCBpcyAqYWxzbyogbm9uLXN0YXRpYy4gTG9va2luZyBmdXJ0aGVyLCBJIHNlZSB0aGF0IGB0aXBjX25vZGVfeG1pdGAgaXMgY2FsbGVkIGZyb20gYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGB0aXBjX25vZGVfeG1pdGAgZm9yIGEgbW9tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX25vZGVfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9iY2FzdC5jPTI4OD1zdGF0aWMgaW50IHRpcGNfcmNhc3RfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKnBrdHMsXG4tLVxubmV0L3RpcGMvYmNhc3QuYy0zMDMtXHRcdC8qIEFueSBvdGhlciByZXR1cm4gdmFsdWUgdGhhbiAtRUxJTktDT05HIGlzIGlnbm9yZWQgKi9cbm5ldC90aXBjL2JjYXN0LmM6MzA0Olx0XHRpZiAodGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZfcGt0cywgZG5vZGUsIHNlbGVjdG9yKSA9PSAtRUxJTktDT05HKVxubmV0L3RpcGMvYmNhc3QuYy0zMDUtXHRcdFx0KCpjb25nX2xpbmtfY250KSYjNDM7JiM0Mzs7XG4tLVxubmV0L3RpcGMvY3J5cHRvLmM9MjIzOD1zdGF0aWMgaW50IHRpcGNfY3J5cHRvX2tleV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfYWVhZF9rZXkgKnNrZXksXG4tLVxubmV0L3RpcGMvY3J5cHRvLmMtMjI2OC1cdGlmIChkbm9kZSlcbm5ldC90aXBjL2NyeXB0by5jOjIyNjk6XHRcdHJjID0gdGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZwa3RzLCBkbm9kZSwgMCk7XG5uZXQvdGlwYy9jcnlwdG8uYy0yMjcwLVx0ZWxzZVxuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYz0yMDY9dm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTIyMS1cdG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSwgc2Vxbm8pO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjIyMjpcdHRpcGNfbm9kZV94bWl0KG5ldCwgXHUwMDI2aGVhZCwgZG5vZGUsIDApO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTIyMy1cdHJlYWRfdW5sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4tLVxubmV0L3RpcGMvbm9kZS5jPTE2Mjc9c3RhdGljIHZvaWQgdGlwY19seGNfeG1pdChzdHJ1Y3QgbmV0ICpwZWVyX25ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTY3OC0vKipcbm5ldC90aXBjL25vZGUuYzoxNjc5OiAqIHRpcGNfbm9kZV94bWl0KCkgLSBnZW5lcmFsIGxpbmsgbGV2ZWwgZnVuY3Rpb24gZm9yIG1lc3NhZ2Ugc2VuZGluZ1xubmV0L3RpcGMvbm9kZS5jLTE2ODAtICogQG5ldDogdGhlIGFwcGxpY2FibGUgbmV0IG5hbWVzcGFjZVxuLS1cbm5ldC90aXBjL25vZGUuYy0xNjg2LSAqL1xubmV0L3RpcGMvbm9kZS5jOjE2ODc6aW50IHRpcGNfbm9kZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbm5ldC90aXBjL25vZGUuYy0xNjg4LVx0XHQgICB1MzIgZG5vZGUsIGludCBzZWxlY3Rvcilcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTc1Mi1cbm5ldC90aXBjL25vZGUuYzoxNzUzOi8qIHRpcGNfbm9kZV94bWl0X3NrYigpOiBzZW5kIHNpbmdsZSBidWZmZXIgdG8gZGVzdGluYXRpb25cbm5ldC90aXBjL25vZGUuYy0xNzU0LSAqIEJ1ZmZlcnMgc2VudCB2aWEgdGhpcyBmdW5jdGlvbiBhcmUgZ2VuZXJhbGx5IFRJUENfU1lTVEVNX0lNUE9SVEFOQ0Vcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTc1OC0gKi9cbm5ldC90aXBjL25vZGUuYzoxNzU5OmludCB0aXBjX25vZGVfeG1pdF9za2Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgZG5vZGUsXG5uZXQvdGlwYy9ub2RlLmMtMTc2MC1cdFx0ICAgICAgIHUzMiBzZWxlY3Rvcilcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTc2NS1cdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2aGVhZCwgc2tiKTtcbm5ldC90aXBjL25vZGUuYzoxNzY2Olx0dGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgc2VsZWN0b3IpO1xubmV0L3RpcGMvbm9kZS5jLTE3NjctXHRyZXR1cm4gMDtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9MTc3Mz1pbnQgdGlwY19ub2RlX2Rpc3RyX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSlcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTc4MC1cdFx0ZG5vZGUgPSBtc2dfZGVzdG5vZGUoYnVmX21zZyhza2IpKTtcbm5ldC90aXBjL25vZGUuYzoxNzgxOlx0XHR0aXBjX25vZGVfeG1pdF9za2IobmV0LCBza2IsIGRub2RlLCBzZWxlY3Rvcik7XG5uZXQvdGlwYy9ub2RlLmMtMTc4Mi1cdH1cbi0tXG5uZXQvdGlwYy9ub2RlLmM9MTc4Nj12b2lkIHRpcGNfbm9kZV9icm9hZGNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcmNfZGVzdHMpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTE4MTMtXHRcdG1zZ19zZXRfZGVzdG5vZGUoYnVmX21zZyh0eHNrYiksIGRzdCk7XG5uZXQvdGlwYy9ub2RlLmM6MTgxNDpcdFx0dGlwY19ub2RlX3htaXRfc2tiKG5ldCwgdHhza2IsIGRzdCwgMCk7XG5uZXQvdGlwYy9ub2RlLmMtMTgxNS1cdH1cbi0tXG5uZXQvdGlwYy9ub2RlLmg9OTk9aW50IHRpcGNfbm9kZV9nZXRfbGlua25hbWUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYmVhcmVyX2lkLCB1MzIgbm9kZSxcbm5ldC90aXBjL25vZGUuaC0xMDAtXHRcdFx0ICAgY2hhciAqbGlua25hbWUsIHNpemVfdCBsZW4pO1xubmV0L3RpcGMvbm9kZS5oOjEwMTppbnQgdGlwY19ub2RlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LCB1MzIgZG5vZGUsXG5uZXQvdGlwYy9ub2RlLmgtMTAyLVx0XHQgICBpbnQgc2VsZWN0b3IpO1xubmV0L3RpcGMvbm9kZS5oPTEwMz1pbnQgdGlwY19ub2RlX2Rpc3RyX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KTtcbm5ldC90aXBjL25vZGUuaDoxMDQ6aW50IHRpcGNfbm9kZV94bWl0X3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBkZXN0LFxubmV0L3RpcGMvbm9kZS5oLTEwNS1cdFx0ICAgICAgIHUzMiBzZWxlY3Rvcik7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9Mjg2PXN0YXRpYyB2b2lkIHRpcGNfc2tfcmVzcG9uZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjk3LVx0c2VsZWN0b3IgPSBtc2dfb3JpZ3BvcnQoYnVmX21zZyhza2IpKTtcbm5ldC90aXBjL3NvY2tldC5jOjI5ODpcdHRpcGNfbm9kZV94bWl0X3NrYihzb2NrX25ldChzayksIHNrYiwgZG5vZGUsIHNlbGVjdG9yKTtcbm5ldC90aXBjL3NvY2tldC5jLTI5OS19XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9NTUwPXN0YXRpYyB2b2lkIF9fdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZXJyb3IpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNTk3LVx0XHRpZiAoc2tiKVxubmV0L3RpcGMvc29ja2V0LmM6NTk4Olx0XHRcdHRpcGNfbm9kZV94bWl0X3NrYihuZXQsIHNrYiwgZG5vZGUsIHRzay1cdTAwM2Vwb3J0aWQpO1xubmV0L3RpcGMvc29ja2V0LmMtNTk5LVx0XHRicmVhaztcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz05MDY9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc29jayAqdHNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTkzMS1cdC8qIFNlbmQgbWVzc2FnZSAqL1xubmV0L3RpcGMvc29ja2V0LmM6OTMyOlx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNnBrdHMsIGRub2RlLCB0c2stXHUwMDNlcG9ydGlkKTtcbm5ldC90aXBjL3NvY2tldC5jLTkzMy1cdGlmICh1bmxpa2VseShyYyA9PSAtRUxJTktDT05HKSkge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTEyNzM9c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzIxLVxubmV0L3RpcGMvc29ja2V0LmM6MTMyMjpcdHJjID0gdGlwY19ub2RlX3htaXQobmV0LCB0eHEsIGRub2RlLCB0c2stXHUwMDNlcG9ydGlkKTtcbm5ldC90aXBjL3NvY2tldC5jLTEzMjMtXHRpZiAocmMgPT0gLUVMSU5LQ09ORylcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xNDE4PXN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTUyMy1cdHRyYWNlX3RpcGNfc2tfc2VuZG1zZyhzaywgc2tiX3BlZWsoXHUwMDI2cGt0cyksIFRJUENfRFVNUF9TS19TTkRRLCBcJiMzNDsgXCYjMzQ7KTtcbm5ldC90aXBjL3NvY2tldC5jOjE1MjQ6XHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgXHUwMDI2cGt0cywgc2thZGRyLm5vZGUsIHRzay1cdTAwM2Vwb3J0aWQpO1xubmV0L3RpcGMvc29ja2V0LmMtMTUyNS1cdGlmICh1bmxpa2VseShyYyA9PSAtRUxJTktDT05HKSkge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTE1NjU9c3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNjM0LVx0XHRcdFx0XHQgVElQQ19EVU1QX1NLX1NORFEsIFwmIzM0OyBcJiMzNDspO1xubmV0L3RpcGMvc29ja2V0LmM6MTYzNTpcdFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIHR4cSwgZG5vZGUsIHRzay1cdTAwM2Vwb3J0aWQpO1xubmV0L3RpcGMvc29ja2V0LmMtMTYzNi1cdFx0aWYgKHVubGlrZWx5KHJjID09IC1FTElOS0NPTkcpKSB7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTgyOT1zdGF0aWMgdm9pZCB0aXBjX3NrX3NlbmRfYWNrKHN0cnVjdCB0aXBjX3NvY2sgKnRzaylcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xODM2LVxubmV0L3RpcGMvc29ja2V0LmM6MTgzNzpcdHRpcGNfbm9kZV94bWl0X3NrYihzb2NrX25ldChcdTAwMjZ0c2stXHUwMDNlc2spLCBza2IsIHRza19wZWVyX25vZGUodHNrKSxcbm5ldC90aXBjL3NvY2tldC5jLTE4MzgtXHRcdFx0ICAgbXNnX2xpbmtfc2VsZWN0b3IoYnVmX21zZyhza2IpKSk7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjQ5Mz12b2lkIHRpcGNfc2tfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI1MzQtXHRcdGRub2RlID0gbXNnX2Rlc3Rub2RlKGJ1Zl9tc2coc2tiKSk7XG5uZXQvdGlwYy9zb2NrZXQuYzoyNTM1Olx0XHR0aXBjX25vZGVfeG1pdF9za2IobmV0LCBza2IsIGRub2RlLCBkcG9ydCk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yNTM2LVx0fVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI4Nzg9c3RhdGljIHZvaWQgdGlwY19za190aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI5MDQtXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZsaXN0KSlcbm5ldC90aXBjL3NvY2tldC5jOjI5MDU6XHRcdHJjID0gdGlwY19ub2RlX3htaXQoc29ja19uZXQoc2spLCBcdTAwMjZsaXN0LCBwbm9kZSwgdHNrLVx1MDAzZXBvcnRpZCk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yOTA2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUwNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbml0aWFsIENvbnNpZGVyYXRpb25zIGZvciBUSVBDIEtlcm5lbCBNb2R1bGUgQW5hbHlzaXMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3Mgb24gdGhpcyBUSVBDIGtlcm5lbCBtb2R1bGUuIEJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgc2VlbiwgSSYjMzk7bSB0aGlua2luZyB0aGF0IGB0aXBjX25vZGVfeG1pdGAgd2lsbCBiZSBhIGNyaXRpY2FsIGZ1bmN0aW9uIHRvIHJlYWxseSB1bmRlcnN0YW5kLiBJdCYjMzk7cyBwcm9iYWJseSB0aGUgY29yZSB0cmFuc21pc3Npb24gZnVuY3Rpb24uIEkmIzM5O2xsIGFsc28gd2FudCB0byBsb29rIGF0IGB0aXBjX3NrX3JjdmAsIGFzIHRoYXQmIzM5O3MgbGlrZWx5IHRoZSByZWNlaXZlIHBhdGguIEFuZCBzaW5jZSB0aGlzIGlzIHJlbGF0ZWQgdG8gc29ja2V0IG9wZXJhdGlvbnMsIGB0aXBjX3NlbmRtc2dgIGFuZCBgdGlwY19zZW5kc3RyZWFtYCBhcmUgY2xlYXJseSByZWxldmFudCDigJMgdGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBleHBvcnRlZCBhcyBzb2NrZXQgb3BlcmF0aW9ucyBpcyBhIG1ham9yIGNsdWUgYXMgdG8gdGhlaXIgc2lnbmlmaWNhbmNlLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYG5ldC90aXBjL3NvY2tldC5jYCBmaWxlLiBHaXZlbiB0aGUgY29udGV4dCwgdGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYHRpcGNfc2VuZG1zZ2AgYW5kIGB0aXBjX3NlbmRzdHJlYW1gLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYz0xNTc9c3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jOjE1ODpzdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xubmV0L3RpcGMvc29ja2V0LmMtMTU5LXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9NzkxPXN0YXRpYyBfX3BvbGxfdCB0aXBjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtODM5LSAqXG5uZXQvdGlwYy9zb2NrZXQuYzo4NDA6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXG5uZXQvdGlwYy9zb2NrZXQuYy04NDEtICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz05MDY9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc29jayAqdHNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTk1My0gKlxubmV0L3RpcGMvc29ja2V0LmM6OTU0OiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xubmV0L3RpcGMvc29ja2V0LmMtOTU1LSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9OTU3PXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX3VuaWNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy05OTctICpcbm5ldC90aXBjL3NvY2tldC5jOjk5ODogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3Ncbm5ldC90aXBjL3NvY2tldC5jLTk5OS0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTEwMDE9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfYW55Y2FzdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTEwNzgtICpcbm5ldC90aXBjL3NvY2tldC5jOjEwNzk6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXG5uZXQvdGlwYy9zb2NrZXQuYy0xMDgwLSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTA4Mj1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF9iY2FzdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTExNTItICpcbm5ldC90aXBjL3NvY2tldC5jOjExNTM6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXG5uZXQvdGlwYy9zb2NrZXQuYy0xMTU0LSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTMzND1zdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzkyLS8qKlxubmV0L3RpcGMvc29ja2V0LmM6MTM5MzogKiB0aXBjX3NlbmRtc2cgLSBzZW5kIG1lc3NhZ2UgaW4gY29ubmVjdGlvbmxlc3MgbWFubmVyXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzk0LSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTQwNC0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjE0MDU6c3RhdGljIGludCB0aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jayxcbm5ldC90aXBjL3NvY2tldC5jLTE0MDYtXHRcdFx0c3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDExLVx0bG9ja19zb2NrKHNrKTtcbm5ldC90aXBjL3NvY2tldC5jOjE0MTI6XHRyZXQgPSBfX3RpcGNfc2VuZG1zZyhzb2NrLCBtLCBkc3opO1xubmV0L3RpcGMvc29ja2V0LmMtMTQxMy1cdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTQxNy1cbm5ldC90aXBjL3NvY2tldC5jOjE0MTg6c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcbm5ldC90aXBjL3NvY2tldC5jLTE0MTkte1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTE1NjU9c3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTg1LVx0aWYgKHVubGlrZWx5KGRlc3QgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlID09IFRJUENfT1BFTikpIHtcbm5ldC90aXBjL3NvY2tldC5jOjE1ODY6XHRcdHJjID0gX190aXBjX3NlbmRtc2coc29jaywgbSwgZGxlbik7XG5uZXQvdGlwYy9zb2NrZXQuYy0xNTg3LVx0XHRpZiAoZGxlbiBcdTAwMjZcdTAwMjYgZGxlbiA9PSByYykge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI1ODM9c3RhdGljIGludCB0aXBjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmRlc3QsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjYzNy1cbm5ldC90aXBjL3NvY2tldC5jOjI2Mzg6XHRcdHJlcyA9IF9fdGlwY19zZW5kbXNnKHNvY2ssIFx1MDAyNm0sIDApO1xubmV0L3RpcGMvc29ja2V0LmMtMjYzOS1cdFx0aWYgKChyZXMgXHUwMDNjIDApIFx1MDAyNlx1MDAyNiAocmVzICE9IC1FV09VTERCTE9DSykpXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzM2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtc2dfb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTMzODEtXHQuZ2V0c29ja29wdF9pdGVyID0gdGlwY19nZXRzb2Nrb3B0LFxubmV0L3RpcGMvc29ja2V0LmM6MzM4MjpcdC5zZW5kbXNnXHQ9IHRpcGNfc2VuZG1zZyxcbm5ldC90aXBjL3NvY2tldC5jLTMzODMtXHQucmVjdm1zZ1x0PSB0aXBjX3JlY3Ztc2csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjU0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUSVBDIEZ1bmN0aW9uIFN5bWJvbCBSZWFjaGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGVzZSBUSVBDIGZ1bmN0aW9ucyByZWxhdGUgdG8gZWFjaCBvdGhlciwgcGFydGljdWxhcmx5IGZvciBwb3RlbnRpYWwgYW5hbHlzaXMgb3IgaW5zdHJ1bWVudGF0aW9uLiBJIHNlZSB0aGF0IGB0aXBjX3NlbmRtc2dgIGFuZCBgdGlwY19zZW5kc3RyZWFtYCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIGJ1dCB0aGVuIHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGBwcm90b19vcHNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgaXQgbWFrZXMgdGhlbSBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVzZSB0aGVtLCBidXQgdGhlbiBJIHJlYWxpemUgdGhhdCAqYmVjYXVzZSogdGhleSYjMzk7cmUgYHN0YXRpY2AsIHRoZXJlJiMzOTtzIGEgY2hhbmNlIHRoZXkgd29uJiMzOTt0IGJlIGV4cG9ydGVkIGFzIHN5bWJvbHMgaW4gdGhlIGtlcm5lbCBpZiB0aGUgY29tcGlsZXIgaW5saW5lcyB0aGVtLiBCdXQgd2FpdC4uLiBzaW5jZSB0aGV5JiMzOTtyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYHByb3RvX29wc2AsIHRoZXkgKmNhbiYjMzk7dCogYmUgaW5saW5lZC4gVGhhdCBjaGFuZ2VzIHRoaW5nczsgaXQmIzM5O3MgbG9va2luZyBwcm9taXNpbmcuCgpIb3dldmVyLCBgdGlwY19za19yY3ZgIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYyBhbmQgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSBzb2xpZCwgZ3VhcmFudGVlZCBzeW1ib2wgdG8gd29yayB3aXRoLiBTbywgbGV0JiMzOTtzIGluY2x1ZGUgdGhhdCBpbiB0aGUgc2V0LCBhbG9uZyB3aXRoIGB0aXBjX25vZGVfeG1pdGAsIGB0aXBjX3NlbmRtc2dgLCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBmaXRzIGludG8gYWxsIHRoaXMuIFRoZSBxdWVzdGlvbiBpcywgY2FuIEkgcmVhY2ggaXQgZnJvbSBgdGlwY19zZW5kbXNnYCBvciBgdGlwY19zZW5kc3RyZWFtYD8gTG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYSBmZXcgcGxhY2VzLiBJIHNlZSBgdGlwY19za19jb25uX3Byb3RvX3JjdmAsIGB0aXBjX3NrX3Byb3RvX3JjdmAsIGB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0YCwgYW5kIGBfX3RpcGNfc2h1dGRvd25gLiBIbW0sIHNvIGl04oCZcyBwcmVkb21pbmFudGx5IGZyb20gdGhlIHJlY2VpdmUgcGF0aCAoc28sIHBvdGVudGlhbGx5LCBgdGlwY19za19yY3ZgKSBhbmQgdGhlIHNodXRkb3duIHBhdGggKHVzaW5nIGB0aXBjX3NodXRkb3duYCBvciBgdGlwY19yZWxlYXNlYCkuIFRoYXQgaW1wbGllcyB0aGF0IGB0aXBjX3NrX3JjdmAsIGB0aXBjX3JlbGVhc2VgLCBhbmQgYHRpcGNfc2h1dGRvd25gIGFyZSBhY3R1YWxseSB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzIHRvIHN0YXJ0IHdpdGguIFRoZXkgb2ZmZXIgdGhlIG1vc3QgY29tcGxldGUgdmlldy4KCkFscmlnaHQsIGxldCYjMzk7cyB2ZXJpZnkgdGhvc2UuIEkgbmVlZCB0byBjb25maXJtIHRoZSBiZWhhdmlvciBvZiBib3RoIGB0aXBjX3JlbGVhc2VgIGFuZCBgdGlwY19zaHV0ZG93bmAuIFRoZXkgYmVjb21lIHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTE0OD1zdGF0aWMgdm9pZCB0aXBjX3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC90aXBjL3NvY2tldC5jOjE0OTpzdGF0aWMgaW50IHRpcGNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKTtcbm5ldC90aXBjL3NvY2tldC5jLTE1MC1zdGF0aWMgdm9pZCB0aXBjX3NrX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTU1MD1zdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTYxMC0vKipcbm5ldC90aXBjL3NvY2tldC5jOjYxMTogKiB0aXBjX3JlbGVhc2UgLSBkZXN0cm95IGEgVElQQyBzb2NrZXRcbm5ldC90aXBjL3NvY2tldC5jLTYxMi0gKiBAc29jazogc29ja2V0IHRvIGRlc3Ryb3lcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy02MjUtICovXG5uZXQvdGlwYy9zb2NrZXQuYzo2MjY6c3RhdGljIGludCB0aXBjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbm5ldC90aXBjL3NvY2tldC5jLTYyNy17XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzM2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtc2dfb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTMzNjktXHQuZmFtaWx5XHRcdD0gQUZfVElQQyxcbm5ldC90aXBjL3NvY2tldC5jOjMzNzA6XHQucmVsZWFzZVx0PSB0aXBjX3JlbGVhc2UsXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzcxLVx0LmJpbmRcdFx0PSB0aXBjX2JpbmQsXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzM4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTMzODktXHQuZmFtaWx5XHRcdD0gQUZfVElQQyxcbm5ldC90aXBjL3NvY2tldC5jOjMzOTA6XHQucmVsZWFzZVx0PSB0aXBjX3JlbGVhc2UsXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzkxLVx0LmJpbmRcdFx0PSB0aXBjX2JpbmQsXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzQwNz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTM0MDktXHQuZmFtaWx5XHRcdD0gQUZfVElQQyxcbm5ldC90aXBjL3NvY2tldC5jOjM0MTA6XHQucmVsZWFzZVx0PSB0aXBjX3JlbGVhc2UsXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDExLVx0LmJpbmRcdFx0PSB0aXBjX2JpbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBUSVBDIFNodXRkb3duIE1lY2hhbmlzbSoqCgpBbHJpZ2h0LCBzbyBgdGlwY19yZWxlYXNlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEJ1dCBob2xkIG9uLCBpdCYjMzk7cyBnZXR0aW5nIGFzc2lnbmVkIHRvIGBwcm90b19vcHNgLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBjb2RlIG9wdGltaXphdGlvbiwga2VlcGluZyB0aGUgZnVuY3Rpb24gc2NvcGVkIHdoZXJlIGl0JiMzOTtzIG9ubHkgbmVlZGVkLiBBbmQgdGhlIHNhbWUgcGF0dGVybiBnb2VzIGZvciBgdGlwY19zaHV0ZG93bmAuIFRoaXMgc2NyZWFtcyB0aGF0IHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBtYW5hZ2VkIGxpZmVjeWNsZSBvciBjbGVhbnVwIHNlcXVlbmNlIGF0IHBsYXkuCgpNeSBpbW1lZGlhdGUgZm9jdXMgdGhlbiBoYXMgdG8gYmUgYHRpcGNfc2h1dGRvd25gLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHByZWNpc2VseSBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0LiBXZSBuZWVkIHRvIGFzY2VydGFpbiB3aGVyZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQsIHVuZGVyIHdoYXQgY29uZGl0aW9ucywgYW5kIHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBkZWFsbG9jYXRlZCBkdXJpbmcgaXRzIGV4ZWN1dGlvbi4gVGhlIHdob2xlIHRoaW5nIGhpbmdlcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjbGVhbnVwIHByb2Nlc3MsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhhdCB0aGUgcmVsZWFzZSBmdW5jdGlvbiBpcyBhbHNvIHN0YXRpYyBhbmQgYXNzaWduZWQuIFRoaXMgaXMgYSB0ZWxsIG9mIGltcG9ydGFudCByZXNvdXJjZSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NodXRkb3duJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9NTQyPXN0YXRpYyB2b2lkIHRpcGNfc2tfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTU0OS0vKiBDYWxsZXIgc2hvdWxkIGhvbGQgc29ja2V0IGxvY2sgZm9yIHRoZSBzb2NrZXQuICovXG5uZXQvdGlwYy9zb2NrZXQuYzo1NTA6c3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcbm5ldC90aXBjL3NvY2tldC5jLTU1MS17XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9NjI2PXN0YXRpYyBpbnQgdGlwY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNjQxLVx0dHJhY2VfdGlwY19za19yZWxlYXNlKHNrLCBOVUxMLCBUSVBDX0RVTVBfQUxMLCBcJiMzNDsgXCYjMzQ7KTtcbm5ldC90aXBjL3NvY2tldC5jOjY0MjpcdF9fdGlwY19zaHV0ZG93bihzb2NrLCBUSVBDX0VSUl9OT19QT1JUKTtcbm5ldC90aXBjL3NvY2tldC5jLTY0My1cdHNrLVx1MDAzZXNrX3NodXRkb3duID0gU0hVVERPV05fTUFTSztcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yNzI5PXN0YXRpYyBpbnQgdGlwY19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3X3NvY2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjgwMC0vKipcbm5ldC90aXBjL3NvY2tldC5jOjI4MDE6ICogdGlwY19zaHV0ZG93biAtIHNodXRkb3duIHNvY2tldCBjb25uZWN0aW9uXG5uZXQvdGlwYy9zb2NrZXQuYy0yODAyLSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjgwOC0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjI4MDk6c3RhdGljIGludCB0aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpXG5uZXQvdGlwYy9zb2NrZXQuYy0yODEwLXtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yODE5LVx0dHJhY2VfdGlwY19za19zaHV0ZG93bihzaywgTlVMTCwgVElQQ19EVU1QX0FMTCwgXCYjMzQ7IFwmIzM0Oyk7XG5uZXQvdGlwYy9zb2NrZXQuYzoyODIwOlx0X190aXBjX3NodXRkb3duKHNvY2ssIFRJUENfQ09OTl9TSFVURE9XTik7XG5uZXQvdGlwYy9zb2NrZXQuYy0yODIxLVx0c2stXHUwMDNlc2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMzNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcyA9IHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzc4LVx0Lmxpc3Rlblx0XHQ9IHNvY2tfbm9fbGlzdGVuLFxubmV0L3RpcGMvc29ja2V0LmM6MzM3OTpcdC5zaHV0ZG93blx0PSB0aXBjX3NodXRkb3duLFxubmV0L3RpcGMvc29ja2V0LmMtMzM4MC1cdC5zZXRzb2Nrb3B0XHQ9IHRpcGNfc2V0c29ja29wdCxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHMgPSB7XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzM5OC1cdC5saXN0ZW5cdFx0PSB0aXBjX2xpc3Rlbixcbm5ldC90aXBjL3NvY2tldC5jOjMzOTk6XHQuc2h1dGRvd25cdD0gdGlwY19zaHV0ZG93bixcbm5ldC90aXBjL3NvY2tldC5jLTM0MDAtXHQuc2V0c29ja29wdFx0PSB0aXBjX3NldHNvY2tvcHQsXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzQwNz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTM0MTgtXHQubGlzdGVuXHRcdD0gdGlwY19saXN0ZW4sXG5uZXQvdGlwYy9zb2NrZXQuYzozNDE5Olx0LnNodXRkb3duXHQ9IHRpcGNfc2h1dGRvd24sXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDIwLVx0LnNldHNvY2tvcHRcdD0gdGlwY19zZXRzb2Nrb3B0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDczNQoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiAxODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVElQQyBDb2RlIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBgdGlwY19za19yY3ZgLCBgdGlwY19yZWxlYXNlYCwgYW5kIGB0aXBjX3NodXRkb3duYCBhcmUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gVGhleSBzZWVtIHRvIHJlcHJlc2VudCBjb3JlIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgc3lzdGVtLiBUaGUgY29uZmlndXJhdGlvbiBmbGFnIEkgbmVlZCB0byBlbnN1cmUgaXMgZW5hYmxlZCBpcyBgVElQQ2AuIEkgc2hvdWxkIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgYnV0IGJhc2VkIG9uIHRoZSBrZXJuZWwgY29uZmlnIGZpbGUsIGBuZXQvdGlwYy9LY29uZmlnYCByZWxpZXMgb24gYElORVRgLCBidXQgYFRJUENgIHNob3VsZCBiZSB0aGUgb25seSByZXF1aXJlbWVudC4KCkhlcmUmIzM5O3MgbXkgZGlzdGlsbGVkIHVuZGVyc3RhbmRpbmc6IEkgZGVlbSB0aGlzIGNvZGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBkdWUgdG8gdGhlIGZ1bmN0aW9uYWwgbmF0dXJlIG9mIHRoZSBjaGFuZ2UuIE15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgYEZvY3VzU3ltYm9sc2AgLSBzcGVjaWZpY2FsbHksIGB0aXBjX3NrX3JjdmAsIGB0aXBjX3JlbGVhc2VgLCBhbmQgYHRpcGNfc2h1dGRvd25gLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGBFbmFibGVDb25maWdzYCBpbmNsdWRlIGBUSVBDYC4gVGhlIGNvcmUgcmVhc29uIGZvciB0aGlzIGFzc2Vzc21lbnQgbGllcyBpbiB0aGUgcGF0Y2ggaXRzZWxmOiBpdCYjMzk7cyBtb2RpZnlpbmcgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIHRvIHRoZSByZWNlaXZlIG91dHB1dCBxdWV1ZSwgYnV0IG9ubHkgd2hlbiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIHNhbWUgbm9kZS4gVGhpcyBpcyBhIGJlaGF2aW9yYWwgY2hhbmdlIHdpdGhpbiB0aGUgVElQQyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgYW5kIHVzZXJzcGFjZSBhY2Nlc3MgdGhyb3VnaCBUSVBDIHNvY2tldHMgbWFrZXMgdGhpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19za19yY3YmIzM0OywKICAgICYjMzQ7dGlwY19yZWxlYXNlJiMzNDssCiAgICAmIzM0O3RpcGNfc2h1dGRvd24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIHRvIHRoZSByZWNlaXZlIG91dHB1dCBxdWV1ZSBpZiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIG93biBub2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVElQQyBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19za19yY3YmIzM0OywKICAgICYjMzQ7dGlwY19yZWxlYXNlJiMzNDssCiAgICAmIzM0O3RpcGNfc2h1dGRvd24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIHRvIHRoZSByZWNlaXZlIG91dHB1dCBxdWV1ZSBpZiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIG93biBub2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVElQQyBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdGlwY19za19wdXNoX2JhY2tsb2dgIGZ1bmN0aW9uIHRvIGFjY2VwdCBhbiBhZGRpdGlvbmFsIGB4bWl0cWAgYXJndW1lbnQuIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgdHJhbnNtaXR0aW5nIHBhY2tldHMgdmlhIGB0aXBjX25vZGVfeG1pdGAsIGl0IHNwbGljZXMgdGhlIHNvY2tldCYjMzk7cyB3cml0ZSBxdWV1ZSBpbnRvIHRoZSBwcm92aWRlZCBgeG1pdHFgIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcXVldWUgbWFuYWdlbWVudCBjaGFuZ2UsIGxpa2VseSBpbnRlbmRlZCB0byBmaXggYSBsb2NraW5nIGlzc3VlLCBkZWFkbG9jaywgb3IgcmVjdXJzaW9uIHByb2JsZW0gZHVyaW5nIHBhY2tldCByZWNlcHRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkZWFkbG9ja3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZmRmNDhhYjIwYzg0YTQzYTc3ZjZlMDM1NjYzZmNlZmExMjgwZTA5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxNzowMjoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC90aXBjL3NvY2tldC5jIGIvbmV0L3RpcGMvc29ja2V0LmMKaW5kZXggZTU2NDM0MWUwMjE2ZC4uMzNkNzQ0ZGM1MTRmNSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvc29ja2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvc29ja2V0LmMKQEAgLTE1Niw3ICYjNDM7MTU2LDggQEAgc3RhdGljIGludCB0aXBjX3NrX2luc2VydChzdHJ1Y3QgdGlwY19zb2NrICp0c2spOwogc3RhdGljIHZvaWQgdGlwY19za19yZW1vdmUoc3RydWN0IHRpcGNfc29jayAqdHNrKTsKIHN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7CiBzdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opOwotc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayk7CiYjNDM7c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaywKJiM0MzsJCQkJIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTsKIHN0YXRpYyBpbnQgdGlwY193YWl0X2Zvcl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvbmcgKnRpbWVvX3ApOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzOwpAQCAtNTYwLDcgJiM0Mzs1NjEsNyBAQCBzdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKQogCQkJCQkgICAgIXRza19jb25uX2NvbmcodHNrKSkpOwogCiAJLyogUHVzaCBvdXQgZGVsYXllZCBtZXNzYWdlcyBpZiBpbiBOYWdsZSBtb2RlICovCi0JdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7CiYjNDM7CXRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIE5VTEwpOwogCS8qIFJlbW92ZSBwZW5kaW5nIFNZTiAqLwogCV9fc2tiX3F1ZXVlX3B1cmdlKCZhbXA7c2stJmd0O3NrX3dyaXRlX3F1ZXVlKTsKIApAQCAtMTI2Nyw4ICYjNDM7MTI2OCwxMCBAQCB2b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsCiAKIC8qIHRpcGNfc2tfcHVzaF9iYWNrbG9nKCk6IHNlbmQgYWNjdW11bGF0ZWQgYnVmZmVycyBpbiBzb2NrZXQgd3JpdGUgcXVldWUKICAqICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gc29ja2V0IGlzIGluIE5hZ2xlIG1vZGUKJiM0MzsgKiBAeG1pdHE6IHJlY2VpdmUgb3V0cHV0IHF1ZXVlLCBvciBOVUxMIG91dHNpZGUgcmVjZWl2ZSBjb250ZXh0CiAgKi8KLXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spCiYjNDM7c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaywKJiM0MzsJCQkJIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKQogewogCXN0cnVjdCBza19idWZmX2hlYWQgKnR4cSA9ICZhbXA7dHNrLSZndDtzay5za193cml0ZV9xdWV1ZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWtfdGFpbCh0eHEpOwpAQCAtMTMxMCw2ICYjNDM7MTMxMywxMiBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKQogCQl0c2stJmd0O3BrdF9jbnQgJiM0Mzs9IHNrYl9xdWV1ZV9sZW4odHhxKTsKIAl0c2stJmd0O3NudF91bmFja2VkICYjNDM7PSB0c2stJmd0O3NuZF9iYWNrbG9nOwogCXRzay0mZ3Q7c25kX2JhY2tsb2cgPSAwOwomIzQzOwomIzQzOwlpZiAoeG1pdHEgJmFtcDsmYW1wOyBpbl9vd25fbm9kZShuZXQsIGRub2RlKSkgewomIzQzOwkJc2tiX3F1ZXVlX3NwbGljZV90YWlsX2luaXQodHhxLCB4bWl0cSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAlyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgdHhxLCBkbm9kZSwgdHNrLSZndDtwb3J0aWQpOwogCWlmIChyYyA9PSAtRUxJTktDT05HKQogCQl0c2stJmd0O2NvbmdfbGlua19jbnQgPSAxOwpAQCAtMTM2Nyw3ICYjNDM7MTM3Niw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfc2tfY29ubl9wcm90b19yY3Yoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJZ290byBleGl0OwogCiAJCXdhc19jb25nID0gdHNrX2Nvbm5fY29uZyh0c2spOwotCQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSk7CiYjNDM7CQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSwgeG1pdHEpOwogCQl0c2stJmd0O3NudF91bmFja2VkIC09IG1zZ19jb25uX2FjayhoZHIpOwogCQlpZiAodHNrLSZndDtwZWVyX2NhcHMgJmFtcDsgVElQQ19CTE9DS19GTE9XQ1RMKQogCQkJdHNrLSZndDtzbmRfd2luID0gbXNnX2Fkdl93aW4oaGRyKTsKQEAgLTIxNjUsNyAmIzQzOzIxNzQsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssCiAJCXNtcF93bWIoKTsKIAkJdHNrLSZndDtjb25nX2xpbmtfY250LS07CiAJCXdha2V1cCA9IHRydWU7Ci0JCXRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpOwomIzQzOwkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpOwogCQlicmVhazsKIAljYXNlIEdST1VQX1BST1RPQ09MOgogCQl0aXBjX2dyb3VwX3Byb3RvX3JjdihncnAsICZhbXA7d2FrZXVwLCBoZHIsIGlucHV0cSwgeG1pdHEpOwpAQCAtMjI1Niw3ICYjNDM7MjI2NSw3IEBAIHN0YXRpYyBib29sIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3Qoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gZmFsc2U7CiAJY2FzZSBUSVBDX0VTVEFCTElTSEVEOgogCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3NrLSZndDtza193cml0ZV9xdWV1ZSkpCi0JCQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTsKJiM0MzsJCQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7CiAJCS8qIEFjY2VwdCBvbmx5IGNvbm5lY3Rpb24tYmFzZWQgbWVzc2FnZXMgc2VudCBieSBwZWVyICovCiAJCWlmIChsaWtlbHkoY29uX21zZyAmYW1wOyZhbXA7ICFlcnIgJmFtcDsmYW1wOyBwcG9ydCA9PSBvcG9ydCAmYW1wOyZhbXA7CiAJCQkgICBwbm9kZSA9PSBvbm9kZSkpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTQKCQkJCQkJCW91dHB1dDogMTk0CgkJCQkJCQl0aG91Z2h0czogNTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVElQQyBTb2NrZXQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBUSVBDIHNvY2tldCBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBpbiBgbmV0L3RpcGMvc29ja2V0LmNgIGJ5IGFkZGluZyBhIG5ldyBhcmd1bWVudCwgYHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxYC4gVGhlIGNvcmUgbG9naWMgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgdGhlIHRyYW5zbWl0IHF1ZXVlIChgdHhxYCkgaXMgaGFuZGxlZCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBub2RlIGlzIHRoZSBsb2NhbCBub2RlLiBJbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IGNhbGxpbmcgYHRpcGNfbm9kZV94bWl0YCwgdGhlIHBhdGNoIG5vdyBzcGxpY2VzIHRoZSBgdHhxYCBpbnRvIHRoZSBwcm92aWRlZCBgeG1pdHFgLgoKVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3IsIG1vcmUgbGlrZWx5LCBhIGZpeCBmb3IgYSBzdWJ0bGUgYnVnLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGB0aXBjX25vZGVfeG1pdGAgd2FzIGJlaW5nIGNhbGxlZCBpbiBhIHByb2JsZW1hdGljIGNvbnRleHQsIHBlcmhhcHMgd2l0aCB0aGUgd3JvbmcgbG9ja3MgaGVsZCBvciBpbiBhIGRlZXAgcmVjdXJzaW9uIHRoYXQgY291bGQgbGVhZCB0byBkZWFkbG9ja3MuIEFsdGVybmF0aXZlbHksIHRoZSBuZXcgYXBwcm9hY2ggbWlnaHQgc2ltcGx5IGJlIGRlZmVycmluZyBsb2NhbCBkZWxpdmVyeSBmb3Igb3B0aW1pemF0aW9uIHB1cnBvc2VzIGJ5IGFwcGVuZGluZyB0byBgeG1pdHFgIHdoaWNoIGlzIHRoZW4gcHJvY2Vzc2VkIGxhdGVyLgoKVGhlIGZhY3QgdGhhdCBgdGlwY19za19wdXNoX2JhY2tsb2dgIGlzIGNhbGxlZCBmcm9tIGB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2YCwgYHRpcGNfc2tfcHJvdG9fcmN2YCwgYHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3RgLCBhbmQgYF9fdGlwY19zaHV0ZG93bmAgZ2l2ZXMgbWUgYSBjbGVhcmVyIHBpY3R1cmU6IHRoaXMgcGF0Y2ggaXMgYmVpbmcgYXBwbGllZCBpbiAqcmVjZWl2ZSogY29udGV4dHMuIFNvLCB0aGV5IGFyZSBwYXNzaW5nIGB4bWl0cWAgdG8gYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBpbiB0aGVzZSByZWNlaXZlIHBhdGhzLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogYXJlIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkPyBObywgZnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aGlzIGlzIHB1cmVseSBhIGxvZ2ljIGNoYW5nZSB3aXRoaW4gcXVldWUgbWFuYWdlbWVudC4gSXQmIzM5O3MgYWJvdXQgc3BsaWNpbmcgYSBxdWV1ZSB2ZXJzdXMgaW1tZWRpYXRlIHRyYW5zbWlzc2lvbi4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYSBjb25jZXJuIGhlcmUuIEtBU0FOL0xPQ0tERVAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyByZWxhdGVkIHRvIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyAoY2FsbGluZyBgdGlwY19ub2RlX3htaXRgIHdoaWxlIGhvbGRpbmcgYSBsb2NrIHRoYXQgc2hvdWxkbiYjMzk7dCBiZSBoZWxkLCBvciBhdm9pZGluZyBkZWVwIHJlY3Vyc2lvbikuCgpJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcXVldWUgbWFuYWdlbWVudCBhbHRlcmF0aW9uLiBJJiMzOTtsbCBkb3VibGUgY2hlY2sgdGhlIGNvZGUgc25pcHBldCBvbmUgbW9yZSB0aW1lIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdGlwY19za19wdXNoX2JhY2tsb2dgIGZ1bmN0aW9uIHRvIGFjY2VwdCBhbiBhZGRpdGlvbmFsIGB4bWl0cWAgYXJndW1lbnQuIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgdHJhbnNtaXR0aW5nIHBhY2tldHMgdmlhIGB0aXBjX25vZGVfeG1pdGAsIGl0IHNwbGljZXMgdGhlIHNvY2tldCYjMzk7cyB3cml0ZSBxdWV1ZSBpbnRvIHRoZSBwcm92aWRlZCBgeG1pdHFgIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcXVldWUgbWFuYWdlbWVudCBjaGFuZ2UsIGxpa2VseSBpbnRlbmRlZCB0byBmaXggYSBsb2NraW5nIGlzc3VlLCBkZWFkbG9jaywgb3IgcmVjdXJzaW9uIHByb2JsZW0gZHVyaW5nIHBhY2tldCByZWNlcHRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkZWFkbG9ja3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgZnVuY3Rpb24gdG8gYWNjZXB0IGFuIGFkZGl0aW9uYWwgYHhtaXRxYCBhcmd1bWVudC4gSW5zdGVhZCBvZiBpbW1lZGlhdGVseSB0cmFuc21pdHRpbmcgcGFja2V0cyB2aWEgYHRpcGNfbm9kZV94bWl0YCwgaXQgc3BsaWNlcyB0aGUgc29ja2V0JiMzOTtzIHdyaXRlIHF1ZXVlIGludG8gdGhlIHByb3ZpZGVkIGB4bWl0cWAgaWYgdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBsb2NhbCBub2RlLiBUaGlzIGlzIGEgY29udHJvbCBmbG93IGFuZCBxdWV1ZSBtYW5hZ2VtZW50IGNoYW5nZSwgbGlrZWx5IGludGVuZGVkIHRvIGZpeCBhIGxvY2tpbmcgaXNzdWUsIGRlYWRsb2NrLCBvciByZWN1cnNpb24gcHJvYmxlbSBkdXJpbmcgcGFja2V0IHJlY2VwdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRlYWRsb2Nrcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAyOjIzLjczNDQyODA3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjg1NDY0NDAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19za19yY3ZcIixcbiAgICBcInRpcGNfcmVsZWFzZVwiLFxuICAgIFwidGlwY19zaHV0ZG93blwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgZnVuY3Rpb24gdG8gYWNjZXB0IGFuIGFkZGl0aW9uYWwgYHhtaXRxYCBhcmd1bWVudC4gSW5zdGVhZCBvZiBpbW1lZGlhdGVseSB0cmFuc21pdHRpbmcgcGFja2V0cyB2aWEgYHRpcGNfbm9kZV94bWl0YCwgaXQgc3BsaWNlcyB0aGUgc29ja2V0J3Mgd3JpdGUgcXVldWUgaW50byB0aGUgcHJvdmlkZWQgYHhtaXRxYCBpZiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIGxvY2FsIG5vZGUuIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgYW5kIHF1ZXVlIG1hbmFnZW1lbnQgY2hhbmdlLCBsaWtlbHkgaW50ZW5kZWQgdG8gZml4IGEgbG9ja2luZyBpc3N1ZSwgZGVhZGxvY2ssIG9yIHJlY3Vyc2lvbiBwcm9ibGVtIGR1cmluZyBwYWNrZXQgcmVjZXB0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdGlwY19za19wdXNoX2JhY2tsb2dgIHRvIHNwbGljZSB0aGUgdHJhbnNtaXQgcXVldWUgdG8gdGhlIHJlY2VpdmUgb3V0cHV0IHF1ZXVlIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgb3duIG5vZGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUSVBDIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAyOjIzLjczNDQzMzgwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMzMzMzUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZmZGY0OGFiMjBjODRhNDNhNzdmNmUwMzU2NjNmY2VmYTEyODBlMDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAxNzowMjoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jXFxuaW5kZXggZTU2NDM0MWUwMjE2ZC4uMzNkNzQ0ZGM1MTRmNSAxMDA2NDRcXG4tLS0gYS9uZXQvdGlwYy9zb2NrZXQuY1xcbisrKyBiL25ldC90aXBjL3NvY2tldC5jXFxuQEAgLTE1Niw3ICsxNTYsOCBAQCBzdGF0aWMgaW50IHRpcGNfc2tfaW5zZXJ0KHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XFxuIHN0YXRpYyB2b2lkIHRpcGNfc2tfcmVtb3ZlKHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XFxuIHN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XFxuIHN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XFxuLXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spO1xcbitzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpO1xcbiBzdGF0aWMgaW50IHRpcGNfd2FpdF9mb3JfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb25nICp0aW1lb19wKTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHM7XFxuQEAgLTU2MCw3ICs1NjEsNyBAQCBzdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKVxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIXRza19jb25uX2NvbmcodHNrKSkpO1xcbiBcXG4gXFx0LyogUHVzaCBvdXQgZGVsYXllZCBtZXNzYWdlcyBpZiBpbiBOYWdsZSBtb2RlICovXFxuLVxcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xcbitcXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCBOVUxMKTtcXG4gXFx0LyogUmVtb3ZlIHBlbmRpbmcgU1lOICovXFxuIFxcdF9fc2tiX3F1ZXVlX3B1cmdlKFxcdTAwMjZzay1cXHUwMDNlc2tfd3JpdGVfcXVldWUpO1xcbiBcXG5AQCAtMTI2Nyw4ICsxMjY4LDEwIEBAIHZvaWQgdGlwY19za19tY2FzdF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICphcnJ2cSxcXG4gXFxuIC8qIHRpcGNfc2tfcHVzaF9iYWNrbG9nKCk6IHNlbmQgYWNjdW11bGF0ZWQgYnVmZmVycyBpbiBzb2NrZXQgd3JpdGUgcXVldWVcXG4gICogICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBzb2NrZXQgaXMgaW4gTmFnbGUgbW9kZVxcbisgKiBAeG1pdHE6IHJlY2VpdmUgb3V0cHV0IHF1ZXVlLCBvciBOVUxMIG91dHNpZGUgcmVjZWl2ZSBjb250ZXh0XFxuICAqL1xcbi1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKVxcbitzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuIHtcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqdHhxID0gXFx1MDAyNnRzay1cXHUwMDNlc2suc2tfd3JpdGVfcXVldWU7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVla190YWlsKHR4cSk7XFxuQEAgLTEzMTAsNiArMTMxMywxMiBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKVxcbiBcXHRcXHR0c2stXFx1MDAzZXBrdF9jbnQgKz0gc2tiX3F1ZXVlX2xlbih0eHEpO1xcbiBcXHR0c2stXFx1MDAzZXNudF91bmFja2VkICs9IHRzay1cXHUwMDNlc25kX2JhY2tsb2c7XFxuIFxcdHRzay1cXHUwMDNlc25kX2JhY2tsb2cgPSAwO1xcbitcXG4rXFx0aWYgKHhtaXRxIFxcdTAwMjZcXHUwMDI2IGluX293bl9ub2RlKG5ldCwgZG5vZGUpKSB7XFxuK1xcdFxcdHNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KHR4cSwgeG1pdHEpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdHJjID0gdGlwY19ub2RlX3htaXQobmV0LCB0eHEsIGRub2RlLCB0c2stXFx1MDAzZXBvcnRpZCk7XFxuIFxcdGlmIChyYyA9PSAtRUxJTktDT05HKVxcbiBcXHRcXHR0c2stXFx1MDAzZWNvbmdfbGlua19jbnQgPSAxO1xcbkBAIC0xMzY3LDcgKzEzNzYsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0Z290byBleGl0O1xcbiBcXG4gXFx0XFx0d2FzX2NvbmcgPSB0c2tfY29ubl9jb25nKHRzayk7XFxuLVxcdFxcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgbXNnX25hZ2xlX2FjayhoZHIpKTtcXG4rXFx0XFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBtc2dfbmFnbGVfYWNrKGhkciksIHhtaXRxKTtcXG4gXFx0XFx0dHNrLVxcdTAwM2VzbnRfdW5hY2tlZCAtPSBtc2dfY29ubl9hY2soaGRyKTtcXG4gXFx0XFx0aWYgKHRzay1cXHUwMDNlcGVlcl9jYXBzIFxcdTAwMjYgVElQQ19CTE9DS19GTE9XQ1RMKVxcbiBcXHRcXHRcXHR0c2stXFx1MDAzZXNuZF93aW4gPSBtc2dfYWR2X3dpbihoZHIpO1xcbkBAIC0yMTY1LDcgKzIxNzQsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdHNtcF93bWIoKTtcXG4gXFx0XFx0dHNrLVxcdTAwM2Vjb25nX2xpbmtfY250LS07XFxuIFxcdFxcdHdha2V1cCA9IHRydWU7XFxuLVxcdFxcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xcbitcXHRcXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEdST1VQX1BST1RPQ09MOlxcbiBcXHRcXHR0aXBjX2dyb3VwX3Byb3RvX3JjdihncnAsIFxcdTAwMjZ3YWtldXAsIGhkciwgaW5wdXRxLCB4bWl0cSk7XFxuQEAgLTIyNTYsNyArMjI2NSw3IEBAIHN0YXRpYyBib29sIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3Qoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdGNhc2UgVElQQ19FU1RBQkxJU0hFRDpcXG4gXFx0XFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNnNrLVxcdTAwM2Vza193cml0ZV9xdWV1ZSkpXFxuLVxcdFxcdFxcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xcbitcXHRcXHRcXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7XFxuIFxcdFxcdC8qIEFjY2VwdCBvbmx5IGNvbm5lY3Rpb24tYmFzZWQgbWVzc2FnZXMgc2VudCBieSBwZWVyICovXFxuIFxcdFxcdGlmIChsaWtlbHkoY29uX21zZyBcXHUwMDI2XFx1MDAyNiAhZXJyIFxcdTAwMjZcXHUwMDI2IHBwb3J0ID09IG9wb3J0IFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgIHBub2RlID09IG9ub2RlKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowMjoyNC45Mzg0NjIyNzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDczMzU0Njg2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfc2tfcmN2XCIsXG4gICAgXCJ0aXBjX3JlbGVhc2VcIixcbiAgICBcInRpcGNfc2h1dGRvd25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdGlwY19za19wdXNoX2JhY2tsb2dgIHRvIHNwbGljZSB0aGUgdHJhbnNtaXQgcXVldWUgdG8gdGhlIHJlY2VpdmUgb3V0cHV0IHF1ZXVlIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgb3duIG5vZGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUSVBDIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZmZGY0OGFiMjBjODRhNDNhNzdmNmUwMzU2NjNmY2VmYTEyODBlMDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE3OjAyOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuY1xuaW5kZXggZTU2NDM0MWUwMjE2ZC4uMzNkNzQ0ZGM1MTRmNSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL3NvY2tldC5jXG4rKysgYi9uZXQvdGlwYy9zb2NrZXQuY1xuQEAgLTE1Niw3ICsxNTYsOCBAQCBzdGF0aWMgaW50IHRpcGNfc2tfaW5zZXJ0KHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XG4gc3RhdGljIHZvaWQgdGlwY19za19yZW1vdmUoc3RydWN0IHRpcGNfc29jayAqdHNrKTtcbiBzdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xuIHN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayk7XG4rc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjayxcbitcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XG4gc3RhdGljIGludCB0aXBjX3dhaXRfZm9yX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgbG9uZyAqdGltZW9fcCk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcztcbkBAIC01NjAsNyArNTYxLDcgQEAgc3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcbiBcdFx0XHRcdFx0ICAgICF0c2tfY29ubl9jb25nKHRzaykpKTtcbiBcbiBcdC8qIFB1c2ggb3V0IGRlbGF5ZWQgbWVzc2FnZXMgaWYgaW4gTmFnbGUgbW9kZSAqL1xuLVx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7XG4rXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCBOVUxMKTtcbiBcdC8qIFJlbW92ZSBwZW5kaW5nIFNZTiAqL1xuIFx0X19za2JfcXVldWVfcHVyZ2UoXHUwMDI2c2stXHUwMDNlc2tfd3JpdGVfcXVldWUpO1xuIFxuQEAgLTEyNjcsOCArMTI2OCwxMCBAQCB2b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsXG4gXG4gLyogdGlwY19za19wdXNoX2JhY2tsb2coKTogc2VuZCBhY2N1bXVsYXRlZCBidWZmZXJzIGluIHNvY2tldCB3cml0ZSBxdWV1ZVxuICAqICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gc29ja2V0IGlzIGluIE5hZ2xlIG1vZGVcbisgKiBAeG1pdHE6IHJlY2VpdmUgb3V0cHV0IHF1ZXVlLCBvciBOVUxMIG91dHNpZGUgcmVjZWl2ZSBjb250ZXh0XG4gICovXG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaylcbitzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxuK1x0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuIHtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgKnR4cSA9IFx1MDAyNnRzay1cdTAwM2Vzay5za193cml0ZV9xdWV1ZTtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVla190YWlsKHR4cSk7XG5AQCAtMTMxMCw2ICsxMzEzLDEyIEBAIHN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spXG4gXHRcdHRzay1cdTAwM2Vwa3RfY250ICs9IHNrYl9xdWV1ZV9sZW4odHhxKTtcbiBcdHRzay1cdTAwM2VzbnRfdW5hY2tlZCArPSB0c2stXHUwMDNlc25kX2JhY2tsb2c7XG4gXHR0c2stXHUwMDNlc25kX2JhY2tsb2cgPSAwO1xuK1xuK1x0aWYgKHhtaXRxIFx1MDAyNlx1MDAyNiBpbl9vd25fbm9kZShuZXQsIGRub2RlKSkge1xuK1x0XHRza2JfcXVldWVfc3BsaWNlX3RhaWxfaW5pdCh0eHEsIHhtaXRxKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIHR4cSwgZG5vZGUsIHRzay1cdTAwM2Vwb3J0aWQpO1xuIFx0aWYgKHJjID09IC1FTElOS0NPTkcpXG4gXHRcdHRzay1cdTAwM2Vjb25nX2xpbmtfY250ID0gMTtcbkBAIC0xMzY3LDcgKzEzNzYsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRnb3RvIGV4aXQ7XG4gXG4gXHRcdHdhc19jb25nID0gdHNrX2Nvbm5fY29uZyh0c2spO1xuLVx0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSk7XG4rXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgbXNnX25hZ2xlX2FjayhoZHIpLCB4bWl0cSk7XG4gXHRcdHRzay1cdTAwM2VzbnRfdW5hY2tlZCAtPSBtc2dfY29ubl9hY2soaGRyKTtcbiBcdFx0aWYgKHRzay1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfQkxPQ0tfRkxPV0NUTClcbiBcdFx0XHR0c2stXHUwMDNlc25kX3dpbiA9IG1zZ19hZHZfd2luKGhkcik7XG5AQCAtMjE2NSw3ICsyMTc0LDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRzbXBfd21iKCk7XG4gXHRcdHRzay1cdTAwM2Vjb25nX2xpbmtfY250LS07XG4gXHRcdHdha2V1cCA9IHRydWU7XG4tXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuK1x0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBHUk9VUF9QUk9UT0NPTDpcbiBcdFx0dGlwY19ncm91cF9wcm90b19yY3YoZ3JwLCBcdTAwMjZ3YWtldXAsIGhkciwgaW5wdXRxLCB4bWl0cSk7XG5AQCAtMjI1Niw3ICsyMjY1LDcgQEAgc3RhdGljIGJvb2wgdGlwY19za19maWx0ZXJfY29ubmVjdChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgVElQQ19FU1RBQkxJU0hFRDpcbiBcdFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfd3JpdGVfcXVldWUpKVxuLVx0XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuK1x0XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTtcbiBcdFx0LyogQWNjZXB0IG9ubHkgY29ubmVjdGlvbi1iYXNlZCBtZXNzYWdlcyBzZW50IGJ5IHBlZXIgKi9cbiBcdFx0aWYgKGxpa2VseShjb25fbXNnIFx1MDAyNlx1MDAyNiAhZXJyIFx1MDAyNlx1MDAyNiBwcG9ydCA9PSBvcG9ydCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBwbm9kZSA9PSBvbm9kZSkpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAyOjI0LjkzODQ2MzU0MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTQ3NDk5MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRJUEMgUHJvdG9jb2wgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIGBuZXQvdGlwYy9zb2NrZXQuY2AsIHNwZWNpZmljYWxseSB0aGUgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIGEgbmV3IGFyZ3VtZW50LCBgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHFgLCB3aGljaCBpcyBhIHByZXR0eSBjbGVhciBpbmRpY2F0b3Igb2YgYSBjaGFuZ2UgdG8gdGhlIHdheSBkYXRhIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBUSVBDIHByb3RvY29sLiBUaGlzIG5ldyBhcmd1bWVudCBtZWFucyB0aGUgZnVuY3Rpb24gY2FuIG5vdyBzcGxpY2UgYHR4cWAgaW50byBgeG1pdHFgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyDigJMgc3BlY2lmaWNhbGx5LCB3aGVuIGB4bWl0cWAgaXMgcHJvdmlkZWQgYW5kIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gVGhhdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gVElQQywgbm8gZG91YnQuXG5cbk5vdywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGltcGxpY2F0aW9ucy4gSSBzaG91bGQgY2hlY2sgd2hlcmUgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBpcyBjYWxsZWQgZnJvbS4gTGV0IG1lIHNlZS4uLiBJdCdzIGNhbGxlZCBieSBgX190aXBjX3NodXRkb3duYCwgYHRpcGNfc2tfY29ubl9wcm90b19yY3ZgLCBgdGlwY19za19wcm90b19yY3ZgLCBhbmQgYHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3RgLiBUaGF0IGdpdmVzIG1lIGEgZGVjZW50IG92ZXJ2aWV3IG9mIHRoZSBhcmVhcyB0aGlzIGNoYW5nZSB0b3VjaGVzLlxuXG5HaXZlbiB0aGF0IFRJUEMgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBhbmQgdGh1cyBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgZnV6emluZyBpdC4gVGhpcyBraW5kIG9mIGNoYW5nZSBpcyBleGFjdGx5IHRoZSB0eXBlIG9mIHRoaW5nIHRoYXQgY291bGQgaW50cm9kdWNlIHN1YnRsZSBidWdzIG9yIHZ1bG5lcmFiaWxpdGllcywgc28gZnV6emluZyBpcyBwcm9iYWJseSBhIGdvb2QgbW92ZS5cblxuTmV4dCBzdGVwOiBsZXQgbWUgdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IHRyYWNrIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGZvciBUSVBDLiBJJ2xsIHNlYXJjaCBmb3IgYGNvbmZpZyBUSVBDYCBhbmQgZ2V0IGEgbGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAyOjM2Ljg4NTk2NDg2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDU5MTgwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeY29uZmlnIFRJUENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9LY29uZmlnPTY9bWVudWNvbmZpZyBUSVBDXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTIzLVxcbm5ldC90aXBjL0tjb25maWc6MjQ6Y29uZmlnIFRJUENfTUVESUFfSUJcXG5uZXQvdGlwYy9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIkluZmluaUJhbmQgbWVkaWEgdHlwZSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy0yOS1cXHQgIElQLW92ZXItSW5maW5pQmFuZCBkZXZpY2VzLlxcbm5ldC90aXBjL0tjb25maWc6MzA6Y29uZmlnIFRJUENfTUVESUFfVURQXFxubmV0L3RpcGMvS2NvbmZpZy0zMS1cXHRib29sIFxcXCJJUC9VRFAgbWVkaWEgdHlwZSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy0zNy1cXG5uZXQvdGlwYy9LY29uZmlnOjM4OmNvbmZpZyBUSVBDX0NSWVBUT1xcbm5ldC90aXBjL0tjb25maWctMzktXFx0Ym9vbCBcXFwiVElQQyBlbmNyeXB0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTUyLVxcbm5ldC90aXBjL0tjb25maWc6NTM6Y29uZmlnIFRJUENfRElBR1xcbm5ldC90aXBjL0tjb25maWctNTQtXFx0dHJpc3RhdGUgXFxcIlRJUEM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDI6MzYuOTM2NTYxMTA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyNDUyMzI2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIFRJUEMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBUSVBDYCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gaXRlbSB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBlbmFibGVzIGl0LiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IG1vZHVsZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIHdhbnQgdG8gY2hlY2sgYG5ldC90aXBjL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFsIGJ1aWxkIGxvZ2ljIHdpbGwgcmVzaWRlLiBUaW1lIHRvIGRpdmUgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk3MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAyOjQ3LjE4MTc5Njg2MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVElQQyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgVElQQ1xcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBUSVBDIFByb3RvY29sXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoZSBUcmFuc3BhcmVudCBJbnRlciBQcm9jZXNzIENvbW11bmljYXRpb24gKFRJUEMpIHByb3RvY29sIGlzXFxuICAxMTpcXHRcXHQgIHNwZWNpYWxseSBkZXNpZ25lZCBmb3IgaW50cmEgY2x1c3RlciBjb21tdW5pY2F0aW9uLiBUaGlzIHByb3RvY29sXFxuICAxMjpcXHRcXHQgIG9yaWdpbmF0ZXMgZnJvbSBFcmljc3NvbiB3aGVyZSBpdCBoYXMgYmVlbiB1c2VkIGluIGNhcnJpZXIgZ3JhZGVcXG4gIDEzOlxcdFxcdCAgY2x1c3RlciBhcHBsaWNhdGlvbnMgZm9yIG1hbnkgeWVhcnMuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVElQQywgc2VlIGh0dHA6Ly90aXBjLnNvdXJjZWZvcmdlLm5ldC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBUaGlzIHByb3RvY29sIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUgKCA9IGNvZGUgd2hpY2hcXG4gIDE4OlxcdFxcdCAgY2FuIGJlIGluc2VydGVkIGluIGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdVxcbiAgMTk6XFx0XFx0ICB3YW50KS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aXBjLiBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0XFxuICAyMDpcXHRcXHQgIGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlIGFuZCByZWFkIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMucnN0XFx1MDAzZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDI6NDcuMTgxODgxMTMxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2NTI4NjgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRpcGMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIGNoYW5nZSBoaW5nZXMgb24gdGhlIElORVQgaW1wbGVtZW50YXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCBuZXR3b3JrIGltcGxpY2F0aW9ucy4gTGV0J3MgZGlnIGludG8gdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBhbmQgc2VlIHdoYXQncyBiZWluZyBtb2RpZmllZC5cblxuVGhlIGNlbnRyYWwgcG9pbnQgaGVyZSBpcyB0aGUgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBmdW5jdGlvbi4gSXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgaXQncyB0aWdodGx5IHNjb3BlZCB3aXRoaW4gdGhlIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgbW9kdWxlLiBOb3csIHdobydzIGNhbGxpbmcgKnRoYXQqPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCB0byBzZWUgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cbkl0J3MgY2FsbGVkIGJ5IGBfX3RpcGNfc2h1dGRvd25gLCBgdGlwY19za19jb25uX3Byb3RvX3JjdmAsIGB0aXBjX3NrX3Byb3RvX3JjdmAsIGFuZCBgdGlwY19za19maWx0ZXJfY29ubmVjdGAuIFRoZXNlIGFyZSBhbGwgYWxzbyBzdGF0aWMsIGFuZCB0aGF0IHByb3ZpZGVzIHNvbWUgbGV2ZWwgb2YgZW5jYXBzdWxhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBfY2FsbHNfIHRob3NlIHRvIGZ1bGx5IGNvbXByZWhlbmQgdGhlIGZsb3cuIFRoaXMgdGVsbHMgbWUgd2hlcmUgdG8gY29uY2VudHJhdGUgbXkgZWZmb3J0cy4gTGV0J3Mgc2VlIHdoYXQgdGhvc2UgdXBzdHJlYW0gZnVuY3Rpb25zIGFyZSBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAyOjUxLjg0NzE2OTkzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE3MTI3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTEyNzM9c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEzMjctLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MTMyODogKiB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2IC0gcmVjZWl2ZSBhIGNvbm5lY3Rpb24gbW5nIHByb3RvY29sIG1lc3NhZ2VcXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzI5LSAqIEB0c2s6IHJlY2VpdmluZyBzb2NrZXRcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEzMzMtICovXFxubmV0L3RpcGMvc29ja2V0LmM6MTMzNDpzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzM1LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTIxNTc9c3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjE2OC1cXHRjYXNlIENPTk5fTUFOQUdFUjpcXG5uZXQvdGlwYy9zb2NrZXQuYzoyMTY5OlxcdFxcdHRpcGNfc2tfY29ubl9wcm90b19yY3YodHNrLCBza2IsIGlucHV0cSwgeG1pdHEpO1xcbm5ldC90aXBjL3NvY2tldC5jLTIxNzAtXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowMjo1MS44OTMzNDM4NzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgxMDgxODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC5cblxuKipBbmFseXppbmcgdGhlIERhdGEgRmxvdzogYHRpcGNfc2tfY29ubl9wcm90b19yY3ZgKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUgaGVyZSwgYHRpcGNfc2tfY29ubl9wcm90b19yY3ZgIGlzbid0IHNvbWUgc3RhbmRhbG9uZSBmdW5jdGlvbiwgaXQncyBleHBsaWNpdGx5IGNhbGxlZCBieSBgdGlwY19za19wcm90b19yY3ZgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHNvbWV0aGluZyBhYm91dCB0aGUgY29tbXVuaWNhdGlvbiBmbG93IHdpdGhpbiB0aGUgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXItUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBzb2NrZXQgbGF5ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aHkgdGhlIGRlc2lnbiBpcyB0aGlzIHdheS5cblxuU28sIGB0aXBjX3NrX3Byb3RvX3JjdmAgaXMgdGhlIGdlbmVyYWwgcmVjZWl2ZXIsIHRoZSBlbnRyeSBwb2ludCBmb3IgaW5jb21pbmcgZGF0YSBvbiBhIFRJUEMgc29ja2V0LCB3aGlsZSBgdGlwY19za19jb25uX3Byb3RvX3JjdmAgaXMgbW9yZSBzcGVjaWFsaXplZC4gVGhpcyBzdWdnZXN0cyB0aGF0IGB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2YCBpcyBoYW5kbGluZyByZWNlaXZlIG9wZXJhdGlvbnMgc3BlY2lmaWNhbGx5IGZvciBjb25uZWN0aW9uLW9yaWVudGVkIHNvY2tldHMgd2l0aGluIHRoZSBUSVBDIHByb3RvY29sLiBJdCBtaWdodCBiZSBoYW5kbGluZyBzdGF0ZSBjaGFuZ2VzLCBhY2tub3dsZWRnZW1lbnQsIG9yIGNvbm5lY3Rpb24tc3BlY2lmaWMgZGF0YS4gSSB3aWxsIGFzc3VtZSBpdCdzIGRlYWxpbmcgd2l0aCBjb25uZWN0aW9uLXNwZWNpZmljIGFzcGVjdHMuXG5cbkknZCBleHBlY3QgdG8gc2VlIGEgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBmb3IgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFzIHdlbGwgLSBJIG5lZWQgdG8gZXhwbG9yZSB0aGF0IGZvciBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlbnRpcmUgcHJvdG9jb2wuIEkgc2hvdWxkIGNoZWNrIGhvdyBjb25uZWN0aW9uLXJlbGF0ZWQgc3RhdGUgaXMgc3RvcmVkIGFuZCByZXRyaWV2ZWQgd2l0aGluIHRoZSBkYXRhIHN0cnVjdHVyZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE1NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAyOjU1LjM3NDQyNzk0NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNjEyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19za19wcm90b19yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvc29ja2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvc29ja2V0LmM9NDAzPXN0YXRpYyBpbnQgdGlwY19za19zb2NrX2VycihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb25nICp0aW1lb3V0KVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtNDMxLVxcdHdoaWxlICgocmNfID0gIShjb25kaXRpb25fKSkpIHtcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbm5ldC90aXBjL3NvY2tldC5jOjQzMjpcXHRcXHQvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIHRpcGNfc2tfcHJvdG9fcmN2KCkgKi8gICAgICAgICAgICBcXFxcXFxubmV0L3RpcGMvc29ja2V0LmMtNDMzLVxcdFxcdHNtcF9ybWIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTIxNTI9c3RhdGljIHZvaWQgdGlwY19zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTIxNTYtXFxubmV0L3RpcGMvc29ja2V0LmM6MjE1NzpzdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L3RpcGMvc29ja2V0LmMtMjE1OC1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yMzQ3PXN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzY0LVxcdGlmICh1bmxpa2VseSghbXNnX2lzZGF0YShoZHIpKSlcXG5uZXQvdGlwYy9zb2NrZXQuYzoyMzY1OlxcdFxcdHRpcGNfc2tfcHJvdG9fcmN2KHNrLCBcXHUwMDI2aW5wdXRxLCB4bWl0cSk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjM2Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDI6NTUuNDIwNTkxNzIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3OTA4ODI2OTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC5cblxuKipBbmFseXppbmcgdGhlIFJlY2VpdmVyIFBhdGggaW4gVElQQyBTb2NrZXRzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBUSVBDIHNvY2tldCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIHJlY2VpdmVyIHBhdGguIEkgc2VlIHRoYXQgYHRpcGNfc2tfcHJvdG9fcmN2YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBhY3R1YWwgaW5jb21pbmcgcGFja2V0IHByb2Nlc3NpbmcgZm9yIHRoZSBwcm90b2NvbC4gSXQncyB0aGUgY29yZSBvZiB0aGUgcmVjZWl2ZSBmdW5jdGlvbmFsaXR5LCB0aGUgXCJndXRzXCIgb2YgdGhlIHJlY2VpdmluZyBwcm9jZXNzLlxuXG5BbmQgSSBub3RpY2UgdGhhdCBgdGlwY19za19maWx0ZXJfcmN2YCBjYWxscyBpdC4gU28sIGBmaWx0ZXJfcmN2YCBtdXN0IGJlIGFjdGluZyBhcyBhIHByZS1wcm9jZXNzaW5nIHN0ZXAsIG9yIGEgZ2F0ZWtlZXBlciBvZiBzb3J0cy4gSXQgcHJvYmFibHkgZG9lcyBzb21lIHByZWxpbWluYXJ5IGNoZWNrcywgbGlrZSBmaWx0ZXJpbmcgb3IgcGVyaGFwcyBxdWV1ZSBtYW5hZ2VtZW50LCAqYmVmb3JlKiBwYXNzaW5nIHRoZSBwYWNrZXQgb24gdG8gYHRpcGNfc2tfcHJvdG9fcmN2YCBmb3IgdGhlIHNlcmlvdXMgd29yayBvZiBwcm90b2NvbCBoYW5kbGluZyBhbmQgc29ja2V0IGRlbGl2ZXJ5LiBJbnRlcmVzdGluZyBpbnRlcnBsYXk7IEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgdHdvIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZSByZWNlaXZpbmcgbWVjaGFuaXNtIGlzIHN0cnVjdHVyZWQuIFRoaXMgaXMgcG90ZW50aWFsbHkgd2hlcmUgdGhlIG1vcmUgc29waGlzdGljYXRlZCBmaWx0ZXJpbmcgYW5kIHBvbGljeSBhc3BlY3RzIGFyZSBiZWluZyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIFRJUEMgc3RhY2suIEl0IG1ha2VzIHNlbnNlLCBrZWVwIHRoZSBwcm90b2NvbCdzIHByaW1hcnkgcmVjZWl2aW5nIGxvZ2ljIGNsZWFuIGFuZCBmb2N1c2VkIGFuZCBoYXZlIHRoZSBwcmUtcHJvY2Vzc2luZyBiZSBtb3JlIGR5bmFtaWMsIGRlcGVuZGVudCBvbiB0aGUgY29uZmlndXJlZCBwb2xpY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowMzoxMy4zMjk0MjEyNzJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTMzNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfc2tfZmlsdGVyX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz0yMzE5PXN0YXRpYyB1bnNpZ25lZCBpbnQgcmN2YnVmX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTIzMzYtLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MjMzNzogKiB0aXBjX3NrX2ZpbHRlcl9yY3YgLSB2YWxpZGF0ZSBpbmNvbWluZyBtZXNzYWdlXFxubmV0L3RpcGMvc29ja2V0LmMtMjMzOC0gKiBAc2s6IHNvY2tldFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjM0Ni0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyMzQ3OnN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3RpcGMvc29ja2V0LmMtMjM0OC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzU4LVxcbm5ldC90aXBjL3NvY2tldC5jOjIzNTk6XFx0dHJhY2VfdGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIFRJUENfRFVNUF9BTEwsIFxcXCIgXFxcIik7XFxubmV0L3RpcGMvc29ja2V0LmMtMjM2MC1cXHRUSVBDX1NLQl9DQihza2IpLVxcdTAwM2VieXRlc19yZWFkID0gMDtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI0MTI9c3RhdGljIGludCB0aXBjX3NrX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI0MTktXFxubmV0L3RpcGMvc29ja2V0LmM6MjQyMDpcXHR0aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgXFx1MDAyNnhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDIxLVxcdGFkZGVkID0gc2tfcm1lbV9hbGxvY19nZXQoc2spIC0gYmVmb3JlO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjQzOT1zdGF0aWMgdm9pZCB0aXBjX3NrX2VucXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDU3LVxcdFxcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xcbm5ldC90aXBjL3NvY2tldC5jOjI0NTg6XFx0XFx0XFx0dGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIHhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDU5LVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowMzoxMy4zNzYzNTk0NDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUwMzEyNzkyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGZsb3csIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIHRoZSBUSVBDIFNvY2tldCBEYXRhIEZsb3cqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBUSVBDIHNvY2tldCBkYXRhIGZsb3cgaGluZ2VzIG9uIHRoZXNlIHRocmVlIGZ1bmN0aW9ucy4gYHRpcGNfc2tfZmlsdGVyX3JjdmAgaXMgdGhlIHBpdm90YWwgZnVuY3Rpb24gaGVyZS4gSSBzZWUgaXQgYXMgdGhlIGNlbnRyYWwgZ2F0ZWtlZXBlciwgYW5kIGl0J3MgaW52b2tlZCBpbiB0d28gZGlzdGluY3Qgc2NlbmFyaW9zOiBmaXJzdCwgdGhyb3VnaCBgdGlwY19za19iYWNrbG9nX3JjdmAgd2hpY2gsIG9mIGNvdXJzZSwgc2VydmVzIGFzIHRoZSBzdGFuZGFyZCBgc2tfYmFja2xvZ19yY3ZgIGNhbGxiYWNrIGZvciBUSVBDIHNvY2tldHPigJRlbnN1cmluZyBlZmZpY2llbnQgaGFuZGxpbmcgb2YgaW5jb21pbmcgZGF0YSB3aGVuIHRoZSBzb2NrZXQgaXNuJ3QgaW1tZWRpYXRlbHkgcmVhZHkgdG8gcHJvY2VzcyBpdC4gU2Vjb25kbHksIGB0aXBjX3NrX2ZpbHRlcl9yY3ZgIGFsc28gZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4gYHRpcGNfc2tfZW5xdWV1ZWAsIGltcGx5aW5nIHRoYXQgdGhlcmUncyBhIGZpbHRlcmluZy9wcm9jZXNzaW5nIHN0ZXAgaGFwcGVuaW5nICpiZWZvcmUqIHRoZSBkYXRhIGlzIHVsdGltYXRlbHkgZW5xdWV1ZWQgb250byB0aGUgc29ja2V0J3MgcmVjZWl2ZSBxdWV1ZS4gVGhlIGZhY3QgdGhhdCBgdGlwY19za19lbnF1ZXVlYCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGB0aXBjX3NrX3JjdmAgc3VnZ2VzdHMgdGhhdCB0aGlzIGluaXRpYWwgZW5xdWV1ZWluZyBhbmQgc3Vic2VxdWVudCBmaWx0ZXJpbmcgbWF5IGJlIGEgY3J1Y2lhbCBvcHRpbWl6YXRpb24gcG9pbnQgaW4gdGhlIGRhdGEgZmxvdy4gVGhpcyBkZXNpZ24sIHdpdGggYHRpcGNfc2tfZmlsdGVyX3JjdmAgYXQgaXRzIGNvcmUsIGxpa2VseSBhbGxvd3MgZm9yIHNvbWUgaW5pdGlhbCBpbnNwZWN0aW9uIGFuZCBmaWx0ZXJpbmcgb2YgdGhlIGluY29taW5nIGRhdGEsIHdoZXRoZXIgaXQncyBoZWxkIGluIHRoZSBiYWNrbG9nIG9yIGJlaW5nIGRpcmVjdGx5IGVucXVldWVkLiBJ4oCZbGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB3aGF0IGNyaXRlcmlhIGB0aXBjX3NrX2ZpbHRlcl9yY3ZgIHVzZXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBkYXRhIHByb2Nlc3NpbmcgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc0MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAzOjI4LjQwNzY0MTcyOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwOTEyODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19za19lbnF1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTI0MTI9c3RhdGljIGludCB0aXBjX3NrX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI0MjktLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MjQzMDogKiB0aXBjX3NrX2VucXVldWUgLSBleHRyYWN0IGFsbCBidWZmZXJzIHdpdGggZGVzdGluYXRpb24gJ2Rwb3J0JyBmcm9tXFxubmV0L3RpcGMvc29ja2V0LmMtMjQzMS0gKiAgICAgICAgICAgICAgICAgICBpbnB1dHEgYW5kIHRyeSBhZGRpbmcgdGhlbSB0byBzb2NrZXQgb3IgYmFja2xvZyBxdWV1ZVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjQzOC0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDM5OnN0YXRpYyB2b2lkIHRpcGNfc2tfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDQwLVxcdFxcdFxcdCAgICB1MzIgZHBvcnQsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjQ5Mz12b2lkIHRpcGNfc2tfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjUwOS1cXHRcXHRcXHRpZiAobGlrZWx5KHNwaW5fdHJ5bG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX2xvY2suc2xvY2spKSkge1xcbm5ldC90aXBjL3NvY2tldC5jOjI1MTA6XFx0XFx0XFx0XFx0dGlwY19za19lbnF1ZXVlKGlucHV0cSwgc2ssIGRwb3J0LCBcXHUwMDI2eG1pdHEpO1xcbm5ldC90aXBjL3NvY2tldC5jLTI1MTEtXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNrLVxcdTAwM2Vza19sb2NrLnNsb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDM6MjguNDUyNzM4ODU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDg2OTg5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgdGlwY19za19yY3ZgIGFuZCBDb25uZWN0aW9uIEZpbHRlcmluZyoqXG5cbk9rYXksIHNvIGB0aXBjX3NrX3JjdmAgaXNuJ3Qgc3RhdGljLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3cgSSBuZWVkIHRvIHNlZSBob3cgdGhhdCBpbXBhY3RzIGl0cyB1c2UgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIFRJUEMgc3RhY2suIEknbSBnb2luZyB0byBzaGlmdCBteSBmb2N1cyB0byBgdGlwY19za19maWx0ZXJfY29ubmVjdGAgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gZmlsdGVyaW5nIGxvZ2ljIGFuZCBpZGVudGlmeSBob3cgZGF0YSBpcyByZWNlaXZlZCB3aGVuIGNvbm5lY3Rpb24gZmlsdGVyaW5nIGlzIHVzZWQuIEkgYW50aWNpcGF0ZSBpdCdzIGxpa2VseSB1c2VkIHdpdGhpbiB0aGUgZnVuY3Rpb24gdG8gaGFuZGxlIGNvbm5lY3Rpb24gcmVxdWVzdHMgd2l0aCB0aG9zZSBkZWZpbmVkIGZpbHRlciBzcGVjaWZpY2F0aW9ucy4gTGV0IG1lIHRyYWNlIHRoZSBjYWxscyBhbmQgZGF0YSBmbG93IHRoZXJlLiBJdCdzIGxpa2VseSB0aGF0IGB0aXBjX3NrX3JjdmAgaXMgaW52b2tlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgd2l0aGluIHRoZSBzY29wZSBvZiBmaWx0ZXIgZXZhbHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU1NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAzOjMyLjk2MTQ0MDQ3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE5OTUzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NrX2ZpbHRlcl9jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTIxNTc9c3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjE5Ni0vKipcXG5uZXQvdGlwYy9zb2NrZXQuYzoyMTk3OiAqIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3QgLSBjaGVjayBpbmNvbWluZyBtZXNzYWdlIGZvciBhIGNvbm5lY3Rpb24tYmFzZWQgc29ja2V0XFxubmV0L3RpcGMvc29ja2V0LmMtMjE5OC0gKiBAdHNrOiBUSVBDIHNvY2tldFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjIwMi0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyMjAzOnN0YXRpYyBib29sIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3Qoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC90aXBjL3NvY2tldC5jLTIyMDQtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yMzQ3PXN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzc2LVxcdFxcdGxpbWl0ID0gcmN2YnVmX2xpbWl0KHNrLCBza2IpO1xcbm5ldC90aXBjL3NvY2tldC5jOjIzNzc6XFx0XFx0aWYgKChza19jb25uIFxcdTAwMjZcXHUwMDI2ICF0aXBjX3NrX2ZpbHRlcl9jb25uZWN0KHRzaywgc2tiLCB4bWl0cSkpIHx8XFxubmV0L3RpcGMvc29ja2V0LmMtMjM3OC1cXHRcXHQgICAgKCFza19jb25uIFxcdTAwMjZcXHUwMDI2IG1zZ19jb25uZWN0ZWQoaGRyKSkgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDM6MzMuMDA1NjQzODg3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjg1NTIzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRJUEMgU29ja2V0IEZpbHRlcmluZyBhbmQgU2h1dGRvd24gUGF0aHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgVElQQyBzb2NrZXQgZmlsdGVyaW5nIGFuZCBzaHV0ZG93biBhcmUgaGFuZGxlZCwgYW5kIGl0IHNlZW1zIGxpa2UgYHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3RgIGlzIGFuIGltcG9ydGFudCBmdW5jdGlvbi4gSSdtIG5vdGluZyB0aGF0IGl0J3MgY2FsbGVkIG5vdCBqdXN0IGZyb20gdGhlIGNvbm5lY3Rpb24gcHJvY2VzcywgYnV0IGFsc28gZnJvbSBgdGlwY19za19maWx0ZXJfcmN2YC4gVGhpcyBtZWFucyBpdCdzIGludm9sdmVkIGluIG1vcmUgdGhhbiBqdXN0IGluaXRpYWwgY29ubmVjdGlvbiBzZXR1cDsgaXQncyBhbHNvIHJlbGV2YW50IGR1cmluZyBtZXNzYWdlIHJlY2VwdGlvbi5cblxuTm93LCBjb25zaWRlcmluZyB0aGUgY29yZSBlbnRyeSBwb2ludHMgZm9yIGRhdGEgaGFuZGxpbmcsIEkgc2VlIHRocmVlIGtleSBwYXRoczpcblxuKiAgIGB0aXBjX3NrX3JjdmA6IFRoaXMgaXMgdGhlIHN0YW5kYXJkIHJlY2VpdmUgcGF0aC5cbiogICBgdGlwY19za19iYWNrbG9nX3JjdmA6IFRoaXMgb25lIGNvbWVzIGludG8gcGxheSB0aHJvdWdoIHRoZSBzb2NrZXQgYmFja2xvZyBtZWNoYW5pc20gKGBza19iYWNrbG9nX3JjdmApLlxuKiAgIGBfX3RpcGNfc2h1dGRvd25gOiAgVGhpcyBpcyB0cmlnZ2VyZWQgZHVyaW5nIHNodXRkb3duLCB1bHRpbWF0ZWx5IGNhbGxlZCB2aWEgdGhlIHNvY2tldCBvcGVyYXRpb24ncyBzaHV0ZG93biBmdW5jdGlvbiAoYHRpcGNfc2h1dGRvd25gIHdoaWNoIHdyYXBzIGBzb2NrZXRfb3BzLVx1MDAzZXNodXRkb3duYCkuXG5cblNpbmNlIHNodXRkb3duIGlzIGNyaXRpY2FsIGZvciBhIHdlbGwtYmVoYXZlZCBzeXN0ZW0sIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyBvZiBgX190aXBjX3NodXRkb3duYC4gVW5kZXJzdGFuZGluZyB3aGF0IGluaXRpYXRlcyBzaHV0ZG93biB3aWxsIGJlIGtleSBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGFzcGVjdCBvZiB0aGUgVElQQyBzb2NrZXQgaW1wbGVtZW50YXRpb24gb3BlcmF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNDUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDM6MzcuMDM0MTk4MjM5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI4MTY5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3RpcGNfc2h1dGRvd25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvc29ja2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvc29ja2V0LmM9NTQyPXN0YXRpYyB2b2lkIHRpcGNfc2tfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtNTQ5LS8qIENhbGxlciBzaG91bGQgaG9sZCBzb2NrZXQgbG9jayBmb3IgdGhlIHNvY2tldC4gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzo1NTA6c3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcXG5uZXQvdGlwYy9zb2NrZXQuYy01NTEte1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9NjI2PXN0YXRpYyBpbnQgdGlwY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy02NDEtXFx0dHJhY2VfdGlwY19za19yZWxlYXNlKHNrLCBOVUxMLCBUSVBDX0RVTVBfQUxMLCBcXFwiIFxcXCIpO1xcbm5ldC90aXBjL3NvY2tldC5jOjY0MjpcXHRfX3RpcGNfc2h1dGRvd24oc29jaywgVElQQ19FUlJfTk9fUE9SVCk7XFxubmV0L3RpcGMvc29ja2V0LmMtNjQzLVxcdHNrLVxcdTAwM2Vza19zaHV0ZG93biA9IFNIVVRET1dOX01BU0s7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yODA5PXN0YXRpYyBpbnQgdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjgxOS1cXHR0cmFjZV90aXBjX3NrX3NodXRkb3duKHNrLCBOVUxMLCBUSVBDX0RVTVBfQUxMLCBcXFwiIFxcXCIpO1xcbm5ldC90aXBjL3NvY2tldC5jOjI4MjA6XFx0X190aXBjX3NodXRkb3duKHNvY2ssIFRJUENfQ09OTl9TSFVURE9XTik7XFxubmV0L3RpcGMvc29ja2V0LmMtMjgyMS1cXHRzay1cXHUwMDNlc2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowMzozNy4wODE0ODIwMjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4MDE4MDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipNeSBGb2N1c2VkIExvb2sgYXQgdGhlIFRJUEMgU29ja2V0IE9wZXJhdGlvbnMqKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbi4gSSdtIHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIFRJUEMgc29ja2V0IG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgbGlmZWN5Y2xlIG9mIGEgY29ubmVjdGlvbi4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgYHRpcGNfcmVsZWFzZWAgYW5kIGB0aXBjX3NodXRkb3duYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gbWFuYWdpbmcgdGhlIHNvY2tldCdzIHJlc291cmNlcyBhbmQgaGFuZGxpbmcgaXRzIGNsb3N1cmUuIEtub3dpbmcgdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIHBhdGhzLiBUaGVyZWZvcmUsIG15IHByaW1hcnkgZm9jdXMgd2lsbCBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgdGlwY19za19yY3ZgLCBgdGlwY19yZWxlYXNlYCwgYW5kIGB0aXBjX3NodXRkb3duYC4gVGhlc2Ugd2lsbCB0ZWxsIHRoZSBzdG9yeSBvZiB0aGUgZGF0YSByZWNlcHRpb24sIGNvbm5lY3Rpb24gcmVsZWFzZSwgYW5kIHRlcm1pbmF0aW9uLiBJIHNlZSB0aGUgZmxvdyBmcm9tIG9uZSBwb2ludCB0byB0aGUgbmV4dCwgbGlrZSBhIHJpdmVyIG9mIGRhdGEsIGFuZCB0aGVzZSBhcmUgdGhlIGJhbmtzLCBvciBlZGdlcyBvZiB0aGF0IHJpdmVyLiBJJ20gd29uZGVyaW5nIGlmIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgaXMgaG93IGRhdGEgd2FpdGluZyB0byBiZSBzZW50IGlzIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGl0IGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaG93IG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LiBTbywgSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYHRpcGNfc2VuZG1zZ2Agb3IgYHRpcGNfc2VuZHN0cmVhbWAgYXJlIHRoZSBjYWxsZXJzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowMzo0MS4yNjE2NjQ0OTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjU5ODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfc2tfcHVzaF9iYWNrbG9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTE1OD1zdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xcbm5ldC90aXBjL3NvY2tldC5jOjE1OTpzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxcbm5ldC90aXBjL3NvY2tldC5jLTE2MC1cXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9NTUwPXN0YXRpYyB2b2lkIF9fdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZXJyb3IpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy01NjMtXFx0LyogUHVzaCBvdXQgZGVsYXllZCBtZXNzYWdlcyBpZiBpbiBOYWdsZSBtb2RlICovXFxubmV0L3RpcGMvc29ja2V0LmM6NTY0OlxcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIE5VTEwpO1xcbm5ldC90aXBjL3NvY2tldC5jLTU2NS1cXHQvKiBSZW1vdmUgcGVuZGluZyBTWU4gKi9cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTExOTI9dm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTI2OC1cXG5uZXQvdGlwYy9zb2NrZXQuYzoxMjY5Oi8qIHRpcGNfc2tfcHVzaF9iYWNrbG9nKCk6IHNlbmQgYWNjdW11bGF0ZWQgYnVmZmVycyBpbiBzb2NrZXQgd3JpdGUgcXVldWVcXG5uZXQvdGlwYy9zb2NrZXQuYy0xMjcwLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gc29ja2V0IGlzIGluIE5hZ2xlIG1vZGVcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEyNzItICovXFxubmV0L3RpcGMvc29ja2V0LmM6MTI3MzpzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxcbm5ldC90aXBjL3NvY2tldC5jLTEyNzQtXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTMzND1zdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEzNzgtXFx0XFx0d2FzX2NvbmcgPSB0c2tfY29ubl9jb25nKHRzayk7XFxubmV0L3RpcGMvc29ja2V0LmM6MTM3OTpcXHRcXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSwgeG1pdHEpO1xcbm5ldC90aXBjL3NvY2tldC5jLTEzODAtXFx0XFx0dHNrLVxcdTAwM2VzbnRfdW5hY2tlZCAtPSBtc2dfY29ubl9hY2soaGRyKTtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTIxNTc9c3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjE3Ni1cXHRcXHR3YWtldXAgPSB0cnVlO1xcbm5ldC90aXBjL3NvY2tldC5jOjIxNzc6XFx0XFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpO1xcbm5ldC90aXBjL3NvY2tldC5jLTIxNzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yMjAzPXN0YXRpYyBib29sIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3Qoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjI2Ny1cXHRcXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2c2stXFx1MDAzZXNrX3dyaXRlX3F1ZXVlKSlcXG5uZXQvdGlwYy9zb2NrZXQuYzoyMjY4OlxcdFxcdFxcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yMjY5LVxcdFxcdC8qIEFjY2VwdCBvbmx5IGNvbm5lY3Rpb24tYmFzZWQgbWVzc2FnZXMgc2VudCBieSBwZWVyICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAzOjQxLjMwNjkyODAwM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjQ4Mjc3MjQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVElQQyBTb2NrZXQgQnVmZmVyIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFRJUEMgY29kZSwgYW5kIGl0IHNlZW1zIHRoaXMgY2hhbmdlLCB3aGlsZSBub3QgKmRpcmVjdGx5KiBpbiBgdGlwY19zZW5kbXNnYCwgaXMgZGVmaW5pdGVseSB0aWVkIHRvIGhvdyBidWZmZXJzIGFyZSBoYW5kbGVkIHdoZW4gTmFnbGUgbW9kZSBpcyBlbmFibGVkIG9uIGEgc29ja2V0LiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCwgd2hpY2ggaXMgd2hlcmUgd2UgbWFuYWdlIHRoZSBiYWNrbG9nIG9mIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQuIFNwZWNpZmljYWxseSwgaWYgdGhlIGB4bWl0cWAgKHRyYW5zbWl0IHF1ZXVlKSBpcyBwcmVzZW50LCBhbmQgdGhlIGRlc3RpbmF0aW9uIG5vZGUgaXMgdGhlIGxvY2FsIG5vZGUsIGl0IHNwbGljZXMgdGhlIGB0eHFgICh0cmFuc21pdCBxdWV1ZSkgdG8gdGhlIGB4bWl0cWAuIEl0J3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmV0dGVyLlxuXG5UbyBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIG5lZWQgdG8gY29uc2lkZXIgYSBmZXcgb3RoZXIgZnVuY3Rpb25zLiBGaXJzdCwgYHRpcGNfc2tfcmN2YCBpcyBrZXksIGFzIGl0J3MgdGhlIGNvcmUgcmVjZWl2ZSBmdW5jdGlvbiBmb3IgVElQQyBzb2NrZXRzLiBJJ2xsIGFsc28gY2hlY2sgYHRpcGNfc2tfYmFja2xvZ19yY3ZgIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJhY2tsb2cuIFRoZW4gdGhlcmUncyB0aGUgc29ja2V0IG9wZXJhdGlvbnMgdGhlbXNlbHZlczogYHRpcGNfcmVsZWFzZWAgYW5kIGB0aXBjX3NodXRkb3duYCwgSSBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC4gQW5kIGZpbmFsbHksIEkgc2hvdWxkIHJldmlldyBgdGlwY19zZW5kbXNnYCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAgYmVjYXVzZSB0aGV5J3JlIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBxdWV1aW5nIHRoZSBidWZmZXJzIHRoYXQgYXJlIHVsdGltYXRlbHkgaW52b2x2ZWQgaW4gdGhpcyBzcGxpY2luZyBvcGVyYXRpb24uIFVuZGVyc3RhbmRpbmcgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGlzIG5ldyBzcGxpY2UgbG9naWMgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCB0byBkZXRlcm1pbmluZyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE0NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowMzo1Ny43ODk3MDMxOTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTcwMjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvc29ja2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvc29ja2V0LmM9MTU3PXN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XFxubmV0L3RpcGMvc29ja2V0LmM6MTU4OnN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XFxubmV0L3RpcGMvc29ja2V0LmMtMTU5LXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz03OTE9c3RhdGljIF9fcG9sbF90IHRpcGNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTgzOS0gKlxcbm5ldC90aXBjL3NvY2tldC5jOjg0MDogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3NcXG5uZXQvdGlwYy9zb2NrZXQuYy04NDEtICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTkwNj1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zb2NrICp0c2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy05NTMtICpcXG5uZXQvdGlwYy9zb2NrZXQuYzo5NTQ6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXFxubmV0L3RpcGMvc29ja2V0LmMtOTU1LSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz05NTc9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfdW5pY2FzdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtOTk3LSAqXFxubmV0L3RpcGMvc29ja2V0LmM6OTk4OiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xcbm5ldC90aXBjL3NvY2tldC5jLTk5OS0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTAwMT1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF9hbnljYXN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xMDc4LSAqXFxubmV0L3RpcGMvc29ja2V0LmM6MTA3OTogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3NcXG5uZXQvdGlwYy9zb2NrZXQuYy0xMDgwLSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xMDgyPXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX2JjYXN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xMTUyLSAqXFxubmV0L3RpcGMvc29ja2V0LmM6MTE1MzogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3NcXG5uZXQvdGlwYy9zb2NrZXQuYy0xMTU0LSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xMzM0PXN0YXRpYyB2b2lkIHRpcGNfc2tfY29ubl9wcm90b19yY3Yoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTM5Mi0vKipcXG5uZXQvdGlwYy9zb2NrZXQuYzoxMzkzOiAqIHRpcGNfc2VuZG1zZyAtIHNlbmQgbWVzc2FnZSBpbiBjb25uZWN0aW9ubGVzcyBtYW5uZXJcXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzk0LSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDA0LSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjE0MDU6c3RhdGljIGludCB0aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDA2LVxcdFxcdFxcdHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDExLVxcdGxvY2tfc29jayhzayk7XFxubmV0L3RpcGMvc29ja2V0LmM6MTQxMjpcXHRyZXQgPSBfX3RpcGNfc2VuZG1zZyhzb2NrLCBtLCBkc3opO1xcbm5ldC90aXBjL3NvY2tldC5jLTE0MTMtXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTE0MTctXFxubmV0L3RpcGMvc29ja2V0LmM6MTQxODpzdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxcbm5ldC90aXBjL3NvY2tldC5jLTE0MTkte1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTU2NT1zdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTU4NS1cXHRpZiAodW5saWtlbHkoZGVzdCBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfc3RhdGUgPT0gVElQQ19PUEVOKSkge1xcbm5ldC90aXBjL3NvY2tldC5jOjE1ODY6XFx0XFx0cmMgPSBfX3RpcGNfc2VuZG1zZyhzb2NrLCBtLCBkbGVuKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTg3LVxcdFxcdGlmIChkbGVuIFxcdTAwMjZcXHUwMDI2IGRsZW4gPT0gcmMpIHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI1ODM9c3RhdGljIGludCB0aXBjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmRlc3QsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNjM3LVxcbm5ldC90aXBjL3NvY2tldC5jOjI2Mzg6XFx0XFx0cmVzID0gX190aXBjX3NlbmRtc2coc29jaywgXFx1MDAyNm0sIDApO1xcbm5ldC90aXBjL3NvY2tldC5jLTI2MzktXFx0XFx0aWYgKChyZXMgXFx1MDAzYyAwKSBcXHUwMDI2XFx1MDAyNiAocmVzICE9IC1FV09VTERCTE9DSykpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzY3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1zZ19vcHMgPSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzgxLVxcdC5nZXRzb2Nrb3B0X2l0ZXIgPSB0aXBjX2dldHNvY2tvcHQsXFxubmV0L3RpcGMvc29ja2V0LmM6MzM4MjpcXHQuc2VuZG1zZ1xcdD0gdGlwY19zZW5kbXNnLFxcbm5ldC90aXBjL3NvY2tldC5jLTMzODMtXFx0LnJlY3Ztc2dcXHQ9IHRpcGNfcmVjdm1zZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDM6NTcuOTI5NDA4NjkyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMTU2NjMwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLlxuXG4qKkZvY3VzIFN5bWJvbHMgZm9yIEV4YW1pbmF0aW9uKipcblxuUmlnaHQsIHNvIEkndmUgYmVlbiB0aGlua2luZyBhYm91dCB0aGUgY3JpdGljYWwgZm9jdXMgc3ltYm9scyB3ZSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byBoZXJlLiBCYXNlZCBvbiBteSBhbmFseXNpcywgdGhlc2UgYXJlIHRoZSBvbmVzIHRoYXQganVtcCBvdXQ6IGB0aXBjX3NrX3JjdmAsIGB0aXBjX3NlbmRtc2dgLCBgdGlwY19zZW5kc3RyZWFtYCwgYHRpcGNfcmVsZWFzZWAsIGFuZCBgdGlwY19zaHV0ZG93bmAuIFRoZXNlIGxvb2sgbGlrZSB0aGUga2V5IHBpZWNlcyBvZiB0aGUgcHV6emxlIHdoZW4gd2UncmUgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHN5c3RlbS4gTGV0J3MgbWFrZSBzdXJlIHdlIGluY2x1ZGUgYHRpcGNfc2VuZHN0cmVhbWAuIEkndmUgZ290IGEgaHVuY2ggaXQnbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA5OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjA0OjA0LjI0NTA3NTAzOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MDY0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19zZW5kc3RyZWFtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTE1Nj1zdGF0aWMgdm9pZCB0aXBjX3NrX3JlbW92ZShzdHJ1Y3QgdGlwY19zb2NrICp0c2spO1xcbm5ldC90aXBjL3NvY2tldC5jOjE1NzpzdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xcbm5ldC90aXBjL3NvY2tldC5jLTE1OC1zdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTQxOD1zdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTU0Mi0vKipcXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTQzOiAqIHRpcGNfc2VuZHN0cmVhbSAtIHNlbmQgc3RyZWFtLW9yaWVudGVkIGRhdGFcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTQ0LSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTUyLSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjE1NTM6c3RhdGljIGludCB0aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeilcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTU0LXtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTE1NTgtXFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTU5OlxcdHJldCA9IF9fdGlwY19zZW5kc3RyZWFtKHNvY2ssIG0sIGRzeik7XFxubmV0L3RpcGMvc29ja2V0LmMtMTU2MC1cXHRyZWxlYXNlX3NvY2soc2spO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTU2NC1cXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTY1OnN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXFxubmV0L3RpcGMvc29ja2V0LmMtMTU2Ni17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xNjYwPXN0YXRpYyBpbnQgdGlwY19zZW5kX3BhY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTY2NC1cXG5uZXQvdGlwYy9zb2NrZXQuYzoxNjY1OlxcdHJldHVybiB0aXBjX3NlbmRzdHJlYW0oc29jaywgbSwgZHN6KTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNjY2LX1cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI3Mjk9c3RhdGljIGludCB0aXBjX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdfc29jayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI3OTItXFx0aW92X2l0ZXJfa3ZlYyhcXHUwMDI2bS5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsIE5VTEwsIDAsIDApO1xcbm5ldC90aXBjL3NvY2tldC5jOjI3OTM6XFx0X190aXBjX3NlbmRzdHJlYW0obmV3X3NvY2ssIFxcdTAwMjZtLCAwKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNzk0LVxcdHJlbGVhc2Vfc29jayhuZXdfc2spO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MzQwNz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzQyMS1cXHQuZ2V0c29ja29wdF9pdGVyID0gdGlwY19nZXRzb2Nrb3B0LFxcbm5ldC90aXBjL3NvY2tldC5jOjM0MjI6XFx0LnNlbmRtc2dcXHQ9IHRpcGNfc2VuZHN0cmVhbSxcXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDIzLVxcdC5yZWN2bXNnXFx0PSB0aXBjX3JlY3ZzdHJlYW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjA0OjA0LjI5MDU4NTYzNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODg2MjYwNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gVElQQyBTb2NrZXQgT3BlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIFRJUEMgc29ja2V0IG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgc2VuZCBmdW5jdGlvbnMuIEkga25vdyBgdGlwY19zZW5kc3RyZWFtYCBhbmQgYHRpcGNfc2VuZG1zZ2AgYXJlIHRoZSBrZXkgb25lcyBmb3Igc3RyZWFtIGFuZCBtZXNzYWdlIHNvY2tldHMsIHJlc3BlY3RpdmVseS4gQW5kLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGB0aXBjX3NlbmRfcGFja2V0YCBoYW5kbGVzIHRoZSBwYWNrZXQgc29ja2V0cy4gSSBzaG91bGQgbWFrZSBhIG5vdGUgb2YgdGhpcyB0byBoYXZlIG15IGJhc2ljcyBzdHJhaWdodCBhbmQgdG8ga2VlcCB0aGluZ3Mgb3JnYW5pc2VkLlxuXG5Ob3csIGxldCdzIHNoaWZ0IGdlYXJzIGFuZCBkaWcgaW50byB0aGUgcmVjZWl2ZSBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBpcyBhY3R1YWxseSAqcmVjZWl2ZWQqIHdpdGhpbiB0aGlzIHdob2xlIGZyYW1ld29yay4gTGV0J3Mgc2VlIGhvdyBgdGlwY19za19yY3ZgIHdvcmtzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IGV2ZXJ5dGhpbmcgY29ubmVjdHMgb24gdGhlIHJlY2VpdmUgc2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNDoxMi4xNzY4NDk5NzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTY1Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfc2tfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTExOTI9dm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTI2NS1cXHR9XFxubmV0L3RpcGMvc29ja2V0LmM6MTI2NjpcXHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XFxubmV0L3RpcGMvc29ja2V0LmMtMTI2Ny19XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yNDM5PXN0YXRpYyB2b2lkIHRpcGNfc2tfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI0ODYtLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MjQ4NzogKiB0aXBjX3NrX3JjdiAtIGhhbmRsZSBhIGNoYWluIG9mIGluY29taW5nIGJ1ZmZlcnNcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDg4LSAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDkyLSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjI0OTM6dm9pZCB0aXBjX3NrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSlcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDk0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDQ6MTIuMjI2NDIxNDQ4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTI2MjMxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYHRpcGNfc2tfcmN2YCBVc2FnZSBpbiB0aGUgVElQQyBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBzbyBgdGlwY19za19yY3ZgIGlzIG5vbi1zdGF0aWMgYW5kIGFwcGFyZW50bHkgZWl0aGVyIGV4cG9ydGVkIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgYWN0aXZlbHkgdXRpbGl6ZWQgb3V0c2lkZSBvZiBpdHMgaW1tZWRpYXRlIGRlZmluaXRpb24uIFRoYXQncyBhIGtleSBkZXRhaWwuIFRoaXMgc3VnZ2VzdHMgaXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IG9yIGEgY29yZSBmdW5jdGlvbiB3aXRoaW4gdGhlIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgZnJhbWV3b3JrLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgbW9yZSBkZWVwbHkuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSdsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIG90aGVyIHNvdXJjZSBmaWxlcyB3aXRoaW4gdGhlIFRJUEMgY29kZWJhc2UgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgd2hlcmUgYW5kIGhvdyBgdGlwY19za19yY3ZgIGlzIGJlaW5nIGNhbGxlZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb250ZXh0IOKAkyB3aG8ncyBjYWxsaW5nIGl0LCB3aGF0IGFyZ3VtZW50cyBhcmUgYmVpbmcgcGFzc2VkLCBhbmQgd2hhdCdzIHRoZSBvdmVyYWxsIGZsb3cgb2YgY29udHJvbCB0aGF0IGJyaW5ncyB1cyBoZXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgd2lsbCBzaGVkIGxpZ2h0IG9uIHdoYXQgaXRzIGZ1bmN0aW9uYWxpdHkgaXMuIEtub3dpbmcgaXQgaXNuJ3Qgc3RhdGljIGxpbWl0cyB3aGVyZSBJIG5lZWQgdG8gbG9vaywgd2hpY2ggd2lsbCBzYXZlIHRpbWUuIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMgYW5kIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNDoxNy4xMTkwNDc1MjRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODQ4MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfc2tfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9iY2FzdC5jPTQzNj1pbnQgdGlwY19iY2FzdF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3RpcGMvYmNhc3QuYy00NjAtXFx0aWYgKCFza2JfcXVldWVfZW1wdHkoaW5wdXRxKSlcXG5uZXQvdGlwYy9iY2FzdC5jOjQ2MTpcXHRcXHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XFxubmV0L3RpcGMvYmNhc3QuYy00NjItXFxuLS1cXG5uZXQvdGlwYy9iY2FzdC5jPTQ3MD12b2lkIHRpcGNfYmNhc3RfYWNrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxuLS1cXG5uZXQvdGlwYy9iY2FzdC5jLTQ5MC1cXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShpbnB1dHEpKVxcbm5ldC90aXBjL2JjYXN0LmM6NDkxOlxcdFxcdHRpcGNfc2tfcmN2KG5ldCwgaW5wdXRxKTtcXG5uZXQvdGlwYy9iY2FzdC5jLTQ5Mi19XFxuLS1cXG5uZXQvdGlwYy9iY2FzdC5jPTQ5OD1pbnQgdGlwY19iY2FzdF9zeW5jX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxuLS1cXG5uZXQvdGlwYy9iY2FzdC5jLTUzMi1cXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShpbnB1dHEpKVxcbm5ldC90aXBjL2JjYXN0LmM6NTMzOlxcdFxcdHRpcGNfc2tfcmN2KG5ldCwgaW5wdXRxKTtcXG5uZXQvdGlwYy9iY2FzdC5jLTUzNC1cXHRyZXR1cm4gcmM7XFxuLS1cXG5uZXQvdGlwYy9iY2FzdC5jPTU1Nz12b2lkIHRpcGNfYmNhc3RfcmVtb3ZlX3BlZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpyY3ZfbClcXG4tLVxcbm5ldC90aXBjL2JjYXN0LmMtNTc0LVxcdGlmICghc2tiX3F1ZXVlX2VtcHR5KGlucHV0cSkpXFxubmV0L3RpcGMvYmNhc3QuYzo1NzU6XFx0XFx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xcbm5ldC90aXBjL2JjYXN0LmMtNTc2LX1cXG4tLVxcbm5ldC90aXBjL25vZGUuYz0xMDYyPXN0YXRpYyB2b2lkIHRpcGNfbm9kZV9saW5rX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbiwgaW50IGJlYXJlcl9pZCwgYm9vbCBkZWxldGUpXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMTA5My1cXHRcXHR0aXBjX2JlYXJlcl94bWl0KG4tXFx1MDAzZW5ldCwgYmVhcmVyX2lkLCBcXHUwMDI2eG1pdHEsIG1hZGRyLCBuKTtcXG5uZXQvdGlwYy9ub2RlLmM6MTA5NDpcXHR0aXBjX3NrX3JjdihuLVxcdTAwM2VuZXQsIFxcdTAwMjZsZS1cXHUwMDNlaW5wdXRxKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTA5NS19XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9MTYyNz1zdGF0aWMgdm9pZCB0aXBjX2x4Y194bWl0KHN0cnVjdCBuZXQgKnBlZXJfbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE2NDAtXFx0XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmxpc3QtXFx1MDAzZWxvY2spO1xcbm5ldC90aXBjL25vZGUuYzoxNjQxOlxcdFxcdFxcdHRpcGNfc2tfcmN2KHBlZXJfbmV0LCBsaXN0KTtcXG5uZXQvdGlwYy9ub2RlLmMtMTY0Mi1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMTY2NS1cXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bGlzdC1cXHUwMDNlbG9jayk7XFxubmV0L3RpcGMvbm9kZS5jOjE2NjY6XFx0XFx0dGlwY19za19yY3YocGVlcl9uZXQsIGxpc3QpO1xcbm5ldC90aXBjL25vZGUuYy0xNjY3LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0xNjg3PWludCB0aXBjX25vZGVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMTcwMC1cXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bGlzdC1cXHUwMDNlbG9jayk7XFxubmV0L3RpcGMvbm9kZS5jOjE3MDE6XFx0XFx0dGlwY19za19yY3YobmV0LCBsaXN0KTtcXG5uZXQvdGlwYy9ub2RlLmMtMTcwMi1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0yMDg2PXZvaWQgdGlwY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmIpXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMjIwMi1cXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2bGUtXFx1MDAzZWlucHV0cSkpXFxubmV0L3RpcGMvbm9kZS5jOjIyMDM6XFx0XFx0dGlwY19za19yY3YobmV0LCBcXHUwMDI2bGUtXFx1MDAzZWlucHV0cSk7XFxubmV0L3RpcGMvbm9kZS5jLTIyMDQtXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xMTkyPXZvaWQgdGlwY19za19tY2FzdF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICphcnJ2cSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEyNjUtXFx0fVxcbm5ldC90aXBjL3NvY2tldC5jOjEyNjY6XFx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xcbm5ldC90aXBjL3NvY2tldC5jLTEyNjctfVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjQzOT1zdGF0aWMgdm9pZCB0aXBjX3NrX2VucXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDg2LS8qKlxcbm5ldC90aXBjL3NvY2tldC5jOjI0ODc6ICogdGlwY19za19yY3YgLSBoYW5kbGUgYSBjaGFpbiBvZiBpbmNvbWluZyBidWZmZXJzXFxubmV0L3RpcGMvc29ja2V0LmMtMjQ4OC0gKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjQ5Mi0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDkzOnZvaWQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpXFxubmV0L3RpcGMvc29ja2V0LmMtMjQ5NC17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuaD01NT12b2lkIHRpcGNfc29ja2V0X3N0b3Aodm9pZCk7XFxubmV0L3RpcGMvc29ja2V0Lmg6NTY6dm9pZCB0aXBjX3NrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSk7XFxubmV0L3RpcGMvc29ja2V0LmgtNTctdm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLFxcbi0tXFxubmV0L3RpcGMvdG9wc3J2LmM9NjE0PXN0YXRpYyB2b2lkIHRpcGNfdG9wc3J2X2tlcm5fZXZ0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZXZlbnQgKmV2dClcXG4tLVxcbm5ldC90aXBjL3RvcHNydi5jLTYyOS1cXHR0aXBjX2xvb3BiYWNrX3RyYWNlKG5ldCwgXFx1MDAyNmV2dHEpO1xcbm5ldC90aXBjL3RvcHNydi5jOjYzMDpcXHR0aXBjX3NrX3JjdihuZXQsIFxcdTAwMjZldnRxKTtcXG5uZXQvdGlwYy90b3BzcnYuYy02MzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNDoxNy4xNjg4OTk0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTY2Mjk0NTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipGb2N1c2luZyBvbiBUSVBDIENvbW11bmljYXRpb24qKlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSwgYHRpcGNfc2tfcmN2YCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGNvcmUgVElQQyByZWNlaXZlciBmdW5jdGlvbnMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGNydWNpYWwgdGFzayBvZiByZWNlaXZpbmcgaW5jb21pbmcgVElQQyBtZXNzYWdlcy4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUga2V5IHRvIHBpbnBvaW50aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcywgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyB3aXRoaW4gdGhlIHJlY2VpdmVyIGltcGxlbWVudGF0aW9uLlxuXG5Ob3csIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIGFuZCBzZWUgaG93IHRoZSBtZXNzYWdlcyBhcnJpdmUgYXQgdGhlIHJlY2VpdmVyLCBJIHNob3VsZCBhbHNvIGltbWVkaWF0ZWx5IHNoaWZ0IG15IGF0dGVudGlvbiB0byBgdGlwY19zZW5kbXNnYCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAuIFRob3NlIHR3byBmdW5jdGlvbnMgYXJlIHByb2JhYmx5IHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBzZW5kaW5nIHNpZGUgb2YgdGhpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lc3NhZ2VzIGFyZSBjb25zdHJ1Y3RlZCwgcHV0IG9uIHRoZSB3aXJlLCBhbmQgd2hhdCBmbG93IGNvbnRyb2wgb3IgcmF0ZSBsaW1pdGluZywgaWYgYW55LCB0aGUgc2VuZGluZyBzaWRlIGVuZm9yY2VzLiBTZWVpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBjb21tdW5pY2F0aW9uIGZsb3csIHdoaWNoIGlzIGhvdyBJIGNhbiBkZXZlbG9wIGEgZ29vZCBwbGFuIHRvIG9wdGltaXplIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjAwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDQ6MjIuNzM1MTk4NTY1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUxNjYxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTE1Nz1zdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xcbm5ldC90aXBjL3NvY2tldC5jOjE1ODpzdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xcbm5ldC90aXBjL3NvY2tldC5jLTE1OS1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9NzkxPXN0YXRpYyBfX3BvbGxfdCB0aXBjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy04MzktICpcXG5uZXQvdGlwYy9zb2NrZXQuYzo4NDA6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXFxubmV0L3RpcGMvc29ja2V0LmMtODQxLSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz05MDY9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc29jayAqdHNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtOTUzLSAqXFxubmV0L3RpcGMvc29ja2V0LmM6OTU0OiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xcbm5ldC90aXBjL3NvY2tldC5jLTk1NS0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9OTU3PXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX3VuaWNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTk5Ny0gKlxcbm5ldC90aXBjL3NvY2tldC5jOjk5ODogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3NcXG5uZXQvdGlwYy9zb2NrZXQuYy05OTktICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTEwMDE9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfYW55Y2FzdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTA3OC0gKlxcbm5ldC90aXBjL3NvY2tldC5jOjEwNzk6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXFxubmV0L3RpcGMvc29ja2V0LmMtMTA4MC0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTA4Mj1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF9iY2FzdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTE1Mi0gKlxcbm5ldC90aXBjL3NvY2tldC5jOjExNTM6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXFxubmV0L3RpcGMvc29ja2V0LmMtMTE1NC0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTMzND1zdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEzOTItLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MTM5MzogKiB0aXBjX3NlbmRtc2cgLSBzZW5kIG1lc3NhZ2UgaW4gY29ubmVjdGlvbmxlc3MgbWFubmVyXFxubmV0L3RpcGMvc29ja2V0LmMtMTM5NC0gKiBAc29jazogc29ja2V0IHN0cnVjdHVyZVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTQwNC0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoxNDA1OnN0YXRpYyBpbnQgdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxubmV0L3RpcGMvc29ja2V0LmMtMTQwNi1cXHRcXHRcXHRzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTQxMS1cXHRsb2NrX3NvY2soc2spO1xcbm5ldC90aXBjL3NvY2tldC5jOjE0MTI6XFx0cmV0ID0gX190aXBjX3NlbmRtc2coc29jaywgbSwgZHN6KTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDEzLVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDE3LVxcbm5ldC90aXBjL3NvY2tldC5jOjE0MTg6c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDE5LXtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTE1NjU9c3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTE1ODUtXFx0aWYgKHVubGlrZWx5KGRlc3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRJUENfT1BFTikpIHtcXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTg2OlxcdFxcdHJjID0gX190aXBjX3NlbmRtc2coc29jaywgbSwgZGxlbik7XFxubmV0L3RpcGMvc29ja2V0LmMtMTU4Ny1cXHRcXHRpZiAoZGxlbiBcXHUwMDI2XFx1MDAyNiBkbGVuID09IHJjKSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yNTgzPXN0YXRpYyBpbnQgdGlwY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpkZXN0LFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjYzNy1cXG5uZXQvdGlwYy9zb2NrZXQuYzoyNjM4OlxcdFxcdHJlcyA9IF9fdGlwY19zZW5kbXNnKHNvY2ssIFxcdTAwMjZtLCAwKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNjM5LVxcdFxcdGlmICgocmVzIFxcdTAwM2MgMCkgXFx1MDAyNlxcdTAwMjYgKHJlcyAhPSAtRVdPVUxEQkxPQ0spKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MzM2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtc2dfb3BzID0ge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzM4MS1cXHQuZ2V0c29ja29wdF9pdGVyID0gdGlwY19nZXRzb2Nrb3B0LFxcbm5ldC90aXBjL3NvY2tldC5jOjMzODI6XFx0LnNlbmRtc2dcXHQ9IHRpcGNfc2VuZG1zZyxcXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzgzLVxcdC5yZWN2bXNnXFx0PSB0aXBjX3JlY3Ztc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjA0OjIyLjc4MjcxNzU2MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTA5MzM0NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUSVBDIFNvY2tldCBGdW5jdGlvbiBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0L3RpcGMvc29ja2V0LmNgIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYWNjZXNzIHBhdGhzIHRvIGl0cyBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIGB0aXBjX3NlbmRtc2dgIGFuZCBgdGlwY19zZW5kc3RyZWFtYC4gVGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGV5IGFyZSAqZGVjbGFyZWQqIGFzIGBzdGF0aWNgIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGZpbGUsIHdoaWNoIHVzdWFsbHkgaW1wbGllcyBsaW1pdGVkIHNjb3BlIGFuZCBwb3RlbnRpYWwgZm9yIGlubGluaW5nLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBjcml0aWNhbCBwb2ludCwgdGhleSBhcmUgYXNzaWduZWQgdG8gYHByb3RvX29wc2AuIFRoYXQncyBob3cgdGhlc2UgZnVuY3Rpb25zIGJlY29tZSByZWFjaGFibGUgdmlhIHN5c2NhbGxzLlxuXG5Ob3csIGlmIHRoZXkgKndlcmUqIHB1cmVseSBzdGF0aWMsIHRoZXJl4oCZcyBhIHNsaWdodCBjaGFuY2UgdGhlIGNvbXBpbGVyIG1pZ2h0IGlubGluZSB0aGVtLCBhbmQgdGhleSB3b3VsZG4ndCBoYXZlIHRoZWlyIG93biBkaXNjcmV0ZSBzeW1ib2wgYWRkcmVzcyBpbiB0aGUga2VybmVsIGltYWdlLiBCdXQgYmVpbmcgYXNzaWduZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYHByb3RvX29wc2AgcHJldmVudHMgdGhpcy4gVGhlIGNvbXBpbGVyICptdXN0KiB0cmVhdCB0aGVtIGFzIGRpc3RpbmN0LCBleHRlcm5hbC1mYWNpbmcgZW50cnkgcG9pbnRzLiBTbywgSSBuZWVkIHRvIGJlIHN1cmUgSSBhbSB0cmFjaW5nIHRoZSByaWdodCBmdW5jdGlvbnMuXG5cbldhaXQgYSBtaW51dGUsIGBfX3RpcGNfc2VuZG1zZ2AgYW5kIGBfX3RpcGNfc2VuZHN0cmVhbWAgYXJlIGFsc28gc3RhdGljLCBzbyBJIGNvdWxkIGJlIGdldHRpbmcgY29uZnVzZWQgdGhlcmUuIExldCdzIHN0aWNrIHdpdGggYHRpcGNfc2VuZG1zZ2AgYW5kIGB0aXBjX3NlbmRzdHJlYW1gIHRvIGF2b2lkIGNvbmZ1c2lvbi5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrIGEgbW9tZW50IGFuZCBmb2N1cyBvbiB0aGUgcmVjZWl2aW5nIHNpZGUuIGB0aXBjX3NrX3JjdmAgaXMgbm9uLXN0YXRpYywgc28gYXQgbGVhc3Qgb25lIHJlY2VpdmluZyBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlLiBJIG5lZWQgdG8gbm90ZSB0aGlzIGZvciBsYXRlci4gSSBhbSBhbHNvIHNlZWluZyB0aGF0IGB0aXBjX25vZGVfeG1pdGAgaXMgKmFsc28qIG5vbi1zdGF0aWMuIExvb2tpbmcgZnVydGhlciwgSSBzZWUgdGhhdCBgdGlwY19ub2RlX3htaXRgIGlzIGNhbGxlZCBmcm9tIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgdGlwY19ub2RlX3htaXRgIGZvciBhIG1vbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDQ6MjkuMjkyMDU0NDMzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU1MDE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX25vZGVfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmNhc3QuYz0yODg9c3RhdGljIGludCB0aXBjX3JjYXN0X3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpwa3RzLFxcbi0tXFxubmV0L3RpcGMvYmNhc3QuYy0zMDMtXFx0XFx0LyogQW55IG90aGVyIHJldHVybiB2YWx1ZSB0aGFuIC1FTElOS0NPTkcgaXMgaWdub3JlZCAqL1xcbm5ldC90aXBjL2JjYXN0LmM6MzA0OlxcdFxcdGlmICh0aXBjX25vZGVfeG1pdChuZXQsIFxcdTAwMjZfcGt0cywgZG5vZGUsIHNlbGVjdG9yKSA9PSAtRUxJTktDT05HKVxcbm5ldC90aXBjL2JjYXN0LmMtMzA1LVxcdFxcdFxcdCgqY29uZ19saW5rX2NudCkrKztcXG4tLVxcbm5ldC90aXBjL2NyeXB0by5jPTIyMzg9c3RhdGljIGludCB0aXBjX2NyeXB0b19rZXlfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2FlYWRfa2V5ICpza2V5LFxcbi0tXFxubmV0L3RpcGMvY3J5cHRvLmMtMjI2OC1cXHRpZiAoZG5vZGUpXFxubmV0L3RpcGMvY3J5cHRvLmM6MjI2OTpcXHRcXHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgXFx1MDAyNnBrdHMsIGRub2RlLCAwKTtcXG5uZXQvdGlwYy9jcnlwdG8uYy0yMjcwLVxcdGVsc2VcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYz0yMDY9dm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjIxLVxcdG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBcXHUwMDI2aGVhZCwgZG5vZGUsIFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZSwgc2Vxbm8pO1xcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyMjI6XFx0dGlwY19ub2RlX3htaXQobmV0LCBcXHUwMDI2aGVhZCwgZG5vZGUsIDApO1xcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yMjMtXFx0cmVhZF91bmxvY2tfYmgoXFx1MDAyNm50LVxcdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTE2Mjc9c3RhdGljIHZvaWQgdGlwY19seGNfeG1pdChzdHJ1Y3QgbmV0ICpwZWVyX25ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xNjc4LS8qKlxcbm5ldC90aXBjL25vZGUuYzoxNjc5OiAqIHRpcGNfbm9kZV94bWl0KCkgLSBnZW5lcmFsIGxpbmsgbGV2ZWwgZnVuY3Rpb24gZm9yIG1lc3NhZ2Ugc2VuZGluZ1xcbm5ldC90aXBjL25vZGUuYy0xNjgwLSAqIEBuZXQ6IHRoZSBhcHBsaWNhYmxlIG5ldCBuYW1lc3BhY2VcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xNjg2LSAqL1xcbm5ldC90aXBjL25vZGUuYzoxNjg3OmludCB0aXBjX25vZGVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxubmV0L3RpcGMvbm9kZS5jLTE2ODgtXFx0XFx0ICAgdTMyIGRub2RlLCBpbnQgc2VsZWN0b3IpXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMTc1Mi1cXG5uZXQvdGlwYy9ub2RlLmM6MTc1MzovKiB0aXBjX25vZGVfeG1pdF9za2IoKTogc2VuZCBzaW5nbGUgYnVmZmVyIHRvIGRlc3RpbmF0aW9uXFxubmV0L3RpcGMvbm9kZS5jLTE3NTQtICogQnVmZmVycyBzZW50IHZpYSB0aGlzIGZ1bmN0aW9uIGFyZSBnZW5lcmFsbHkgVElQQ19TWVNURU1fSU1QT1JUQU5DRVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE3NTgtICovXFxubmV0L3RpcGMvbm9kZS5jOjE3NTk6aW50IHRpcGNfbm9kZV94bWl0X3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBkbm9kZSxcXG5uZXQvdGlwYy9ub2RlLmMtMTc2MC1cXHRcXHQgICAgICAgdTMyIHNlbGVjdG9yKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE3NjUtXFx0X19za2JfcXVldWVfdGFpbChcXHUwMDI2aGVhZCwgc2tiKTtcXG5uZXQvdGlwYy9ub2RlLmM6MTc2NjpcXHR0aXBjX25vZGVfeG1pdChuZXQsIFxcdTAwMjZoZWFkLCBkbm9kZSwgc2VsZWN0b3IpO1xcbm5ldC90aXBjL25vZGUuYy0xNzY3LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTE3NzM9aW50IHRpcGNfbm9kZV9kaXN0cl94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMTc4MC1cXHRcXHRkbm9kZSA9IG1zZ19kZXN0bm9kZShidWZfbXNnKHNrYikpO1xcbm5ldC90aXBjL25vZGUuYzoxNzgxOlxcdFxcdHRpcGNfbm9kZV94bWl0X3NrYihuZXQsIHNrYiwgZG5vZGUsIHNlbGVjdG9yKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTc4Mi1cXHR9XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9MTc4Nj12b2lkIHRpcGNfbm9kZV9icm9hZGNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcmNfZGVzdHMpXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMTgxMy1cXHRcXHRtc2dfc2V0X2Rlc3Rub2RlKGJ1Zl9tc2codHhza2IpLCBkc3QpO1xcbm5ldC90aXBjL25vZGUuYzoxODE0OlxcdFxcdHRpcGNfbm9kZV94bWl0X3NrYihuZXQsIHR4c2tiLCBkc3QsIDApO1xcbm5ldC90aXBjL25vZGUuYy0xODE1LVxcdH1cXG4tLVxcbm5ldC90aXBjL25vZGUuaD05OT1pbnQgdGlwY19ub2RlX2dldF9saW5rbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBiZWFyZXJfaWQsIHUzMiBub2RlLFxcbm5ldC90aXBjL25vZGUuaC0xMDAtXFx0XFx0XFx0ICAgY2hhciAqbGlua25hbWUsIHNpemVfdCBsZW4pO1xcbm5ldC90aXBjL25vZGUuaDoxMDE6aW50IHRpcGNfbm9kZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwgdTMyIGRub2RlLFxcbm5ldC90aXBjL25vZGUuaC0xMDItXFx0XFx0ICAgaW50IHNlbGVjdG9yKTtcXG5uZXQvdGlwYy9ub2RlLmg9MTAzPWludCB0aXBjX25vZGVfZGlzdHJfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpO1xcbm5ldC90aXBjL25vZGUuaDoxMDQ6aW50IHRpcGNfbm9kZV94bWl0X3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBkZXN0LFxcbm5ldC90aXBjL25vZGUuaC0xMDUtXFx0XFx0ICAgICAgIHUzMiBzZWxlY3Rvcik7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yODY9c3RhdGljIHZvaWQgdGlwY19za19yZXNwb25kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI5Ny1cXHRzZWxlY3RvciA9IG1zZ19vcmlncG9ydChidWZfbXNnKHNrYikpO1xcbm5ldC90aXBjL3NvY2tldC5jOjI5ODpcXHR0aXBjX25vZGVfeG1pdF9za2Ioc29ja19uZXQoc2spLCBza2IsIGRub2RlLCBzZWxlY3Rvcik7XFxubmV0L3RpcGMvc29ja2V0LmMtMjk5LX1cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTU1MD1zdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtNTk3LVxcdFxcdGlmIChza2IpXFxubmV0L3RpcGMvc29ja2V0LmM6NTk4OlxcdFxcdFxcdHRpcGNfbm9kZV94bWl0X3NrYihuZXQsIHNrYiwgZG5vZGUsIHRzay1cXHUwMDNlcG9ydGlkKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy01OTktXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz05MDY9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc29jayAqdHNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtOTMxLVxcdC8qIFNlbmQgbWVzc2FnZSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjkzMjpcXHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgXFx1MDAyNnBrdHMsIGRub2RlLCB0c2stXFx1MDAzZXBvcnRpZCk7XFxubmV0L3RpcGMvc29ja2V0LmMtOTMzLVxcdGlmICh1bmxpa2VseShyYyA9PSAtRUxJTktDT05HKSkge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTI3Mz1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTMyMS1cXG5uZXQvdGlwYy9zb2NrZXQuYzoxMzIyOlxcdHJjID0gdGlwY19ub2RlX3htaXQobmV0LCB0eHEsIGRub2RlLCB0c2stXFx1MDAzZXBvcnRpZCk7XFxubmV0L3RpcGMvc29ja2V0LmMtMTMyMy1cXHRpZiAocmMgPT0gLUVMSU5LQ09ORylcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTE0MTg9c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTE1MjMtXFx0dHJhY2VfdGlwY19za19zZW5kbXNnKHNrLCBza2JfcGVlayhcXHUwMDI2cGt0cyksIFRJUENfRFVNUF9TS19TTkRRLCBcXFwiIFxcXCIpO1xcbm5ldC90aXBjL3NvY2tldC5jOjE1MjQ6XFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFxcdTAwMjZwa3RzLCBza2FkZHIubm9kZSwgdHNrLVxcdTAwM2Vwb3J0aWQpO1xcbm5ldC90aXBjL3NvY2tldC5jLTE1MjUtXFx0aWYgKHVubGlrZWx5KHJjID09IC1FTElOS0NPTkcpKSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xNTY1PXN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNjM0LVxcdFxcdFxcdFxcdFxcdCBUSVBDX0RVTVBfU0tfU05EUSwgXFxcIiBcXFwiKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoxNjM1OlxcdFxcdHJjID0gdGlwY19ub2RlX3htaXQobmV0LCB0eHEsIGRub2RlLCB0c2stXFx1MDAzZXBvcnRpZCk7XFxubmV0L3RpcGMvc29ja2V0LmMtMTYzNi1cXHRcXHRpZiAodW5saWtlbHkocmMgPT0gLUVMSU5LQ09ORykpIHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTE4Mjk9c3RhdGljIHZvaWQgdGlwY19za19zZW5kX2FjayhzdHJ1Y3QgdGlwY19zb2NrICp0c2spXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xODM2LVxcbm5ldC90aXBjL3NvY2tldC5jOjE4Mzc6XFx0dGlwY19ub2RlX3htaXRfc2tiKHNvY2tfbmV0KFxcdTAwMjZ0c2stXFx1MDAzZXNrKSwgc2tiLCB0c2tfcGVlcl9ub2RlKHRzayksXFxubmV0L3RpcGMvc29ja2V0LmMtMTgzOC1cXHRcXHRcXHQgICBtc2dfbGlua19zZWxlY3RvcihidWZfbXNnKHNrYikpKTtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI0OTM9dm9pZCB0aXBjX3NrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSlcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI1MzQtXFx0XFx0ZG5vZGUgPSBtc2dfZGVzdG5vZGUoYnVmX21zZyhza2IpKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoyNTM1OlxcdFxcdHRpcGNfbm9kZV94bWl0X3NrYihuZXQsIHNrYiwgZG5vZGUsIGRwb3J0KTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNTM2LVxcdH1cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI4Nzg9c3RhdGljIHZvaWQgdGlwY19za190aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjkwNC1cXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2bGlzdCkpXFxubmV0L3RpcGMvc29ja2V0LmM6MjkwNTpcXHRcXHRyYyA9IHRpcGNfbm9kZV94bWl0KHNvY2tfbmV0KHNrKSwgXFx1MDAyNmxpc3QsIHBub2RlLCB0c2stXFx1MDAzZXBvcnRpZCk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjkwNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDQ6MjkuMzM4NjA3MjlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwMTQ3NTEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgQ29uc2lkZXJhdGlvbnMgZm9yIFRJUEMgS2VybmVsIE1vZHVsZSBBbmFseXNpcyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IG15IGJlYXJpbmdzIG9uIHRoaXMgVElQQyBrZXJuZWwgbW9kdWxlLiBCYXNlZCBvbiB3aGF0IEkndmUgc2VlbiwgSSdtIHRoaW5raW5nIHRoYXQgYHRpcGNfbm9kZV94bWl0YCB3aWxsIGJlIGEgY3JpdGljYWwgZnVuY3Rpb24gdG8gcmVhbGx5IHVuZGVyc3RhbmQuIEl0J3MgcHJvYmFibHkgdGhlIGNvcmUgdHJhbnNtaXNzaW9uIGZ1bmN0aW9uLiBJJ2xsIGFsc28gd2FudCB0byBsb29rIGF0IGB0aXBjX3NrX3JjdmAsIGFzIHRoYXQncyBsaWtlbHkgdGhlIHJlY2VpdmUgcGF0aC4gQW5kIHNpbmNlIHRoaXMgaXMgcmVsYXRlZCB0byBzb2NrZXQgb3BlcmF0aW9ucywgYHRpcGNfc2VuZG1zZ2AgYW5kIGB0aXBjX3NlbmRzdHJlYW1gIGFyZSBjbGVhcmx5IHJlbGV2YW50IOKAkyB0aGUgZmFjdCB0aGF0IHRoZXkgYXJlIGV4cG9ydGVkIGFzIHNvY2tldCBvcGVyYXRpb25zIGlzIGEgbWFqb3IgY2x1ZSBhcyB0byB0aGVpciBzaWduaWZpY2FuY2UuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYG5ldC90aXBjL3NvY2tldC5jYCBmaWxlLiBHaXZlbiB0aGUgY29udGV4dCwgdGhhdCdzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgdGlwY19zZW5kbXNnYCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1MDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNDozNC4zNDAwODQ2MzdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDU2OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz0xNTc9c3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTg6c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTktc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTc5MT1zdGF0aWMgX19wb2xsX3QgdGlwY19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtODM5LSAqXFxubmV0L3RpcGMvc29ja2V0LmM6ODQwOiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xcbm5ldC90aXBjL3NvY2tldC5jLTg0MS0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9OTA2PXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX21zZyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NvY2sgKnRzayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTk1My0gKlxcbm5ldC90aXBjL3NvY2tldC5jOjk1NDogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3NcXG5uZXQvdGlwYy9zb2NrZXQuYy05NTUtICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTk1Nz1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF91bmljYXN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy05OTctICpcXG5uZXQvdGlwYy9zb2NrZXQuYzo5OTg6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXFxubmV0L3RpcGMvc29ja2V0LmMtOTk5LSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xMDAxPXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX2FueWNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEwNzgtICpcXG5uZXQvdGlwYy9zb2NrZXQuYzoxMDc5OiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xcbm5ldC90aXBjL3NvY2tldC5jLTEwODAtICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTEwODI9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfYmNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTExNTItICpcXG5uZXQvdGlwYy9zb2NrZXQuYzoxMTUzOiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xcbm5ldC90aXBjL3NvY2tldC5jLTExNTQtICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTEzMzQ9c3RhdGljIHZvaWQgdGlwY19za19jb25uX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzkyLS8qKlxcbm5ldC90aXBjL3NvY2tldC5jOjEzOTM6ICogdGlwY19zZW5kbXNnIC0gc2VuZCBtZXNzYWdlIGluIGNvbm5lY3Rpb25sZXNzIG1hbm5lclxcbm5ldC90aXBjL3NvY2tldC5jLTEzOTQtICogQHNvY2s6IHNvY2tldCBzdHJ1Y3R1cmVcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTE0MDQtICovXFxubmV0L3RpcGMvc29ja2V0LmM6MTQwNTpzdGF0aWMgaW50IHRpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbm5ldC90aXBjL3NvY2tldC5jLTE0MDYtXFx0XFx0XFx0c3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTE0MTEtXFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoxNDEyOlxcdHJldCA9IF9fdGlwY19zZW5kbXNnKHNvY2ssIG0sIGRzeik7XFxubmV0L3RpcGMvc29ja2V0LmMtMTQxMy1cXHRyZWxlYXNlX3NvY2soc2spO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTQxNy1cXG5uZXQvdGlwYy9zb2NrZXQuYzoxNDE4OnN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXFxubmV0L3RpcGMvc29ja2V0LmMtMTQxOS17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xNTY1PXN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTg1LVxcdGlmICh1bmxpa2VseShkZXN0IFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUSVBDX09QRU4pKSB7XFxubmV0L3RpcGMvc29ja2V0LmM6MTU4NjpcXHRcXHRyYyA9IF9fdGlwY19zZW5kbXNnKHNvY2ssIG0sIGRsZW4pO1xcbm5ldC90aXBjL3NvY2tldC5jLTE1ODctXFx0XFx0aWYgKGRsZW4gXFx1MDAyNlxcdTAwMjYgZGxlbiA9PSByYykge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjU4Mz1zdGF0aWMgaW50IHRpcGNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqZGVzdCxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI2MzctXFxubmV0L3RpcGMvc29ja2V0LmM6MjYzODpcXHRcXHRyZXMgPSBfX3RpcGNfc2VuZG1zZyhzb2NrLCBcXHUwMDI2bSwgMCk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjYzOS1cXHRcXHRpZiAoKHJlcyBcXHUwMDNjIDApIFxcdTAwMjZcXHUwMDI2IChyZXMgIT0gLUVXT1VMREJMT0NLKSlcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTMzNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcyA9IHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTMzODEtXFx0LmdldHNvY2tvcHRfaXRlciA9IHRpcGNfZ2V0c29ja29wdCxcXG5uZXQvdGlwYy9zb2NrZXQuYzozMzgyOlxcdC5zZW5kbXNnXFx0PSB0aXBjX3NlbmRtc2csXFxubmV0L3RpcGMvc29ja2V0LmMtMzM4My1cXHQucmVjdm1zZ1xcdD0gdGlwY19yZWN2bXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNDozNC4zODMxNDYwODRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAzNzYzOTQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVElQQyBGdW5jdGlvbiBTeW1ib2wgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZXNlIFRJUEMgZnVuY3Rpb25zIHJlbGF0ZSB0byBlYWNoIG90aGVyLCBwYXJ0aWN1bGFybHkgZm9yIHBvdGVudGlhbCBhbmFseXNpcyBvciBpbnN0cnVtZW50YXRpb24uIEkgc2VlIHRoYXQgYHRpcGNfc2VuZG1zZ2AgYW5kIGB0aXBjX3NlbmRzdHJlYW1gIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYCwgYnV0IHRoZW4gdGhleSdyZSBhc3NpZ25lZCB0byBgcHJvdG9fb3BzYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgbWFrZXMgdGhlbSBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVzZSB0aGVtLCBidXQgdGhlbiBJIHJlYWxpemUgdGhhdCAqYmVjYXVzZSogdGhleSdyZSBgc3RhdGljYCwgdGhlcmUncyBhIGNoYW5jZSB0aGV5IHdvbid0IGJlIGV4cG9ydGVkIGFzIHN5bWJvbHMgaW4gdGhlIGtlcm5lbCBpZiB0aGUgY29tcGlsZXIgaW5saW5lcyB0aGVtLiBCdXQgd2FpdC4uLiBzaW5jZSB0aGV5J3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgcHJvdG9fb3BzYCwgdGhleSAqY2FuJ3QqIGJlIGlubGluZWQuIFRoYXQgY2hhbmdlcyB0aGluZ3M7IGl0J3MgbG9va2luZyBwcm9taXNpbmcuXG5cbkhvd2V2ZXIsIGB0aXBjX3NrX3JjdmAgaXMgZGVmaW5pdGVseSBub24tc3RhdGljIGFuZCBleHBvcnRlZC4gVGhhdCdzIGEgc29saWQsIGd1YXJhbnRlZWQgc3ltYm9sIHRvIHdvcmsgd2l0aC4gU28sIGxldCdzIGluY2x1ZGUgdGhhdCBpbiB0aGUgc2V0LCBhbG9uZyB3aXRoIGB0aXBjX25vZGVfeG1pdGAsIGB0aXBjX3NlbmRtc2dgLCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgZml0cyBpbnRvIGFsbCB0aGlzLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIHJlYWNoIGl0IGZyb20gYHRpcGNfc2VuZG1zZ2Agb3IgYHRpcGNfc2VuZHN0cmVhbWA/IExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgY2FsbGVkIGZyb20gYSBmZXcgcGxhY2VzLiBJIHNlZSBgdGlwY19za19jb25uX3Byb3RvX3JjdmAsIGB0aXBjX3NrX3Byb3RvX3JjdmAsIGB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0YCwgYW5kIGBfX3RpcGNfc2h1dGRvd25gLiBIbW0sIHNvIGl04oCZcyBwcmVkb21pbmFudGx5IGZyb20gdGhlIHJlY2VpdmUgcGF0aCAoc28sIHBvdGVudGlhbGx5LCBgdGlwY19za19yY3ZgKSBhbmQgdGhlIHNodXRkb3duIHBhdGggKHVzaW5nIGB0aXBjX3NodXRkb3duYCBvciBgdGlwY19yZWxlYXNlYCkuIFRoYXQgaW1wbGllcyB0aGF0IGB0aXBjX3NrX3JjdmAsIGB0aXBjX3JlbGVhc2VgLCBhbmQgYHRpcGNfc2h1dGRvd25gIGFyZSBhY3R1YWxseSB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzIHRvIHN0YXJ0IHdpdGguIFRoZXkgb2ZmZXIgdGhlIG1vc3QgY29tcGxldGUgdmlldy5cblxuQWxyaWdodCwgbGV0J3MgdmVyaWZ5IHRob3NlLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgYmVoYXZpb3Igb2YgYm90aCBgdGlwY19yZWxlYXNlYCBhbmQgYHRpcGNfc2h1dGRvd25gLiBUaGV5IGJlY29tZSB0aGUgY3JpdGljYWwgc3ltYm9scyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI1NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNDo0MS40MjA3ODc3ODZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTE5MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz0xNDg9c3RhdGljIHZvaWQgdGlwY19zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzayk7XFxubmV0L3RpcGMvc29ja2V0LmM6MTQ5OnN0YXRpYyBpbnQgdGlwY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xcbm5ldC90aXBjL3NvY2tldC5jLTE1MC1zdGF0aWMgdm9pZCB0aXBjX3NrX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9NTUwPXN0YXRpYyB2b2lkIF9fdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZXJyb3IpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy02MTAtLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6NjExOiAqIHRpcGNfcmVsZWFzZSAtIGRlc3Ryb3kgYSBUSVBDIHNvY2tldFxcbm5ldC90aXBjL3NvY2tldC5jLTYxMi0gKiBAc29jazogc29ja2V0IHRvIGRlc3Ryb3lcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTYyNS0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzo2MjY6c3RhdGljIGludCB0aXBjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG5uZXQvdGlwYy9zb2NrZXQuYy02Mjcte1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MzM2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtc2dfb3BzID0ge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzM2OS1cXHQuZmFtaWx5XFx0XFx0PSBBRl9USVBDLFxcbm5ldC90aXBjL3NvY2tldC5jOjMzNzA6XFx0LnJlbGVhc2VcXHQ9IHRpcGNfcmVsZWFzZSxcXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzcxLVxcdC5iaW5kXFx0XFx0PSB0aXBjX2JpbmQsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHMgPSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzg5LVxcdC5mYW1pbHlcXHRcXHQ9IEFGX1RJUEMsXFxubmV0L3RpcGMvc29ja2V0LmM6MzM5MDpcXHQucmVsZWFzZVxcdD0gdGlwY19yZWxlYXNlLFxcbm5ldC90aXBjL3NvY2tldC5jLTMzOTEtXFx0LmJpbmRcXHRcXHQ9IHRpcGNfYmluZCxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTM0MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTM0MDktXFx0LmZhbWlseVxcdFxcdD0gQUZfVElQQyxcXG5uZXQvdGlwYy9zb2NrZXQuYzozNDEwOlxcdC5yZWxlYXNlXFx0PSB0aXBjX3JlbGVhc2UsXFxubmV0L3RpcGMvc29ja2V0LmMtMzQxMS1cXHQuYmluZFxcdFxcdD0gdGlwY19iaW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNDo0MS40NjczMTA1NzJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMDg3Njc0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBUSVBDIFNodXRkb3duIE1lY2hhbmlzbSoqXG5cbkFscmlnaHQsIHNvIGB0aXBjX3JlbGVhc2VgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gQnV0IGhvbGQgb24sIGl0J3MgZ2V0dGluZyBhc3NpZ25lZCB0byBgcHJvdG9fb3BzYC4gVGhhdCdzIGEgY2xhc3NpYyBjb2RlIG9wdGltaXphdGlvbiwga2VlcGluZyB0aGUgZnVuY3Rpb24gc2NvcGVkIHdoZXJlIGl0J3Mgb25seSBuZWVkZWQuIEFuZCB0aGUgc2FtZSBwYXR0ZXJuIGdvZXMgZm9yIGB0aXBjX3NodXRkb3duYC4gVGhpcyBzY3JlYW1zIHRoYXQgdGhlcmUncyBzb21lIGtpbmQgb2YgbWFuYWdlZCBsaWZlY3ljbGUgb3IgY2xlYW51cCBzZXF1ZW5jZSBhdCBwbGF5LlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgdGhlbiBoYXMgdG8gYmUgYHRpcGNfc2h1dGRvd25gLiBMZXQncyBkaWcgaW50byB0aGF0IGFuZCBzZWUgcHJlY2lzZWx5IGhvdyBpdCdzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dC4gV2UgbmVlZCB0byBhc2NlcnRhaW4gd2hlcmUgaXQncyBiZWluZyBjYWxsZWQsIHVuZGVyIHdoYXQgY29uZGl0aW9ucywgYW5kIHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBkZWFsbG9jYXRlZCBkdXJpbmcgaXRzIGV4ZWN1dGlvbi4gVGhlIHdob2xlIHRoaW5nIGhpbmdlcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjbGVhbnVwIHByb2Nlc3MsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhhdCB0aGUgcmVsZWFzZSBmdW5jdGlvbiBpcyBhbHNvIHN0YXRpYyBhbmQgYXNzaWduZWQuIFRoaXMgaXMgYSB0ZWxsIG9mIGltcG9ydGFudCByZXNvdXJjZSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzYzNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjA0OjQ1Ljc3ODE4OTU1M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNjg4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19zaHV0ZG93blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz01NDI9c3RhdGljIHZvaWQgdGlwY19za19jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy01NDktLyogQ2FsbGVyIHNob3VsZCBob2xkIHNvY2tldCBsb2NrIGZvciB0aGUgc29ja2V0LiAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjU1MDpzdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKVxcbm5ldC90aXBjL3NvY2tldC5jLTU1MS17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz02MjY9c3RhdGljIGludCB0aXBjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTY0MS1cXHR0cmFjZV90aXBjX3NrX3JlbGVhc2Uoc2ssIE5VTEwsIFRJUENfRFVNUF9BTEwsIFxcXCIgXFxcIik7XFxubmV0L3RpcGMvc29ja2V0LmM6NjQyOlxcdF9fdGlwY19zaHV0ZG93bihzb2NrLCBUSVBDX0VSUl9OT19QT1JUKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy02NDMtXFx0c2stXFx1MDAzZXNrX3NodXRkb3duID0gU0hVVERPV05fTUFTSztcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI3Mjk9c3RhdGljIGludCB0aXBjX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdfc29jayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI4MDAtLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MjgwMTogKiB0aXBjX3NodXRkb3duIC0gc2h1dGRvd24gc29ja2V0IGNvbm5lY3Rpb25cXG5uZXQvdGlwYy9zb2NrZXQuYy0yODAyLSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yODA4LSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjI4MDk6c3RhdGljIGludCB0aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpXFxubmV0L3RpcGMvc29ja2V0LmMtMjgxMC17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yODE5LVxcdHRyYWNlX3RpcGNfc2tfc2h1dGRvd24oc2ssIE5VTEwsIFRJUENfRFVNUF9BTEwsIFxcXCIgXFxcIik7XFxubmV0L3RpcGMvc29ja2V0LmM6MjgyMDpcXHRfX3RpcGNfc2h1dGRvd24oc29jaywgVElQQ19DT05OX1NIVVRET1dOKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yODIxLVxcdHNrLVxcdTAwM2Vza19zaHV0ZG93biA9IFNIVVRET1dOX01BU0s7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzY3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1zZ19vcHMgPSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzc4LVxcdC5saXN0ZW5cXHRcXHQ9IHNvY2tfbm9fbGlzdGVuLFxcbm5ldC90aXBjL3NvY2tldC5jOjMzNzk6XFx0LnNodXRkb3duXFx0PSB0aXBjX3NodXRkb3duLFxcbm5ldC90aXBjL3NvY2tldC5jLTMzODAtXFx0LnNldHNvY2tvcHRcXHQ9IHRpcGNfc2V0c29ja29wdCxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTMzODc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcyA9IHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTMzOTgtXFx0Lmxpc3RlblxcdFxcdD0gdGlwY19saXN0ZW4sXFxubmV0L3RpcGMvc29ja2V0LmM6MzM5OTpcXHQuc2h1dGRvd25cXHQ9IHRpcGNfc2h1dGRvd24sXFxubmV0L3RpcGMvc29ja2V0LmMtMzQwMC1cXHQuc2V0c29ja29wdFxcdD0gdGlwY19zZXRzb2Nrb3B0LFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MzQwNz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzQxOC1cXHQubGlzdGVuXFx0XFx0PSB0aXBjX2xpc3RlbixcXG5uZXQvdGlwYy9zb2NrZXQuYzozNDE5OlxcdC5zaHV0ZG93blxcdD0gdGlwY19zaHV0ZG93bixcXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDIwLVxcdC5zZXRzb2Nrb3B0XFx0PSB0aXBjX3NldHNvY2tvcHQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjA0OjQ1LjgyNDQ2MTc4OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzcyODUzNzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRJUEMgQ29kZSBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGB0aXBjX3NrX3JjdmAsIGB0aXBjX3JlbGVhc2VgLCBhbmQgYHRpcGNfc2h1dGRvd25gIGFyZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLiBUaGV5IHNlZW0gdG8gcmVwcmVzZW50IGNvcmUgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXItUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBzeXN0ZW0uIFRoZSBjb25maWd1cmF0aW9uIGZsYWcgSSBuZWVkIHRvIGVuc3VyZSBpcyBlbmFibGVkIGlzIGBUSVBDYC4gSSBzaG91bGQgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGRlcGVuZGVudCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YsIGJ1dCBiYXNlZCBvbiB0aGUga2VybmVsIGNvbmZpZyBmaWxlLCBgbmV0L3RpcGMvS2NvbmZpZ2AgcmVsaWVzIG9uIGBJTkVUYCwgYnV0IGBUSVBDYCBzaG91bGQgYmUgdGhlIG9ubHkgcmVxdWlyZW1lbnQuXG5cbkhlcmUncyBteSBkaXN0aWxsZWQgdW5kZXJzdGFuZGluZzogSSBkZWVtIHRoaXMgY29kZSBcIldvcnRoRnV6emluZ1wiIGR1ZSB0byB0aGUgZnVuY3Rpb25hbCBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBgRm9jdXNTeW1ib2xzYCAtIHNwZWNpZmljYWxseSwgYHRpcGNfc2tfcmN2YCwgYHRpcGNfcmVsZWFzZWAsIGFuZCBgdGlwY19zaHV0ZG93bmAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGluY2x1ZGUgYFRJUENgLiBUaGUgY29yZSByZWFzb24gZm9yIHRoaXMgYXNzZXNzbWVudCBsaWVzIGluIHRoZSBwYXRjaCBpdHNlbGY6IGl0J3MgbW9kaWZ5aW5nIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgdG8gc3BsaWNlIHRoZSB0cmFuc21pdCBxdWV1ZSB0byB0aGUgcmVjZWl2ZSBvdXRwdXQgcXVldWUsIGJ1dCBvbmx5IHdoZW4gdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBzYW1lIG5vZGUuIFRoaXMgaXMgYSBiZWhhdmlvcmFsIGNoYW5nZSB3aXRoaW4gdGhlIFRJUEMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIGFuZCB1c2Vyc3BhY2UgYWNjZXNzIHRocm91Z2ggVElQQyBzb2NrZXRzIG1ha2VzIHRoaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDczNSwiT3V0cHV0VG9rZW5zIjoxMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDQ6NTIuMTk3MzE5NDIyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY2MDg3MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX3NrX3JjdlwiLFxuICAgIFwidGlwY19yZWxlYXNlXCIsXG4gICAgXCJ0aXBjX3NodXRkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIHRvIHRoZSByZWNlaXZlIG91dHB1dCBxdWV1ZSBpZiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIG93biBub2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVElQQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX3NrX3JjdlwiLFxuICAgIFwidGlwY19yZWxlYXNlXCIsXG4gICAgXCJ0aXBjX3NodXRkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIHRvIHRoZSByZWNlaXZlIG91dHB1dCBxdWV1ZSBpZiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIG93biBub2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVElQQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNDo1Mi4yNzM5MzUwODZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzE1MTI0MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDQ6NTIuMjc0NDM2NzI2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0MzE0NjE3NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBmdW5jdGlvbiB0byBhY2NlcHQgYW4gYWRkaXRpb25hbCBgeG1pdHFgIGFyZ3VtZW50LiBJbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IHRyYW5zbWl0dGluZyBwYWNrZXRzIHZpYSBgdGlwY19ub2RlX3htaXRgLCBpdCBzcGxpY2VzIHRoZSBzb2NrZXQncyB3cml0ZSBxdWV1ZSBpbnRvIHRoZSBwcm92aWRlZCBgeG1pdHFgIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcXVldWUgbWFuYWdlbWVudCBjaGFuZ2UsIGxpa2VseSBpbnRlbmRlZCB0byBmaXggYSBsb2NraW5nIGlzc3VlLCBkZWFkbG9jaywgb3IgcmVjdXJzaW9uIHByb2JsZW0gZHVyaW5nIHBhY2tldCByZWNlcHRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkZWFkbG9ja3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZmZGY0OGFiMjBjODRhNDNhNzdmNmUwMzU2NjNmY2VmYTEyODBlMDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE3OjAyOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuY1xuaW5kZXggZTU2NDM0MWUwMjE2ZC4uMzNkNzQ0ZGM1MTRmNSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL3NvY2tldC5jXG4rKysgYi9uZXQvdGlwYy9zb2NrZXQuY1xuQEAgLTE1Niw3ICsxNTYsOCBAQCBzdGF0aWMgaW50IHRpcGNfc2tfaW5zZXJ0KHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XG4gc3RhdGljIHZvaWQgdGlwY19za19yZW1vdmUoc3RydWN0IHRpcGNfc29jayAqdHNrKTtcbiBzdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xuIHN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayk7XG4rc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjayxcbitcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XG4gc3RhdGljIGludCB0aXBjX3dhaXRfZm9yX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgbG9uZyAqdGltZW9fcCk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcztcbkBAIC01NjAsNyArNTYxLDcgQEAgc3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcbiBcdFx0XHRcdFx0ICAgICF0c2tfY29ubl9jb25nKHRzaykpKTtcbiBcbiBcdC8qIFB1c2ggb3V0IGRlbGF5ZWQgbWVzc2FnZXMgaWYgaW4gTmFnbGUgbW9kZSAqL1xuLVx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7XG4rXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCBOVUxMKTtcbiBcdC8qIFJlbW92ZSBwZW5kaW5nIFNZTiAqL1xuIFx0X19za2JfcXVldWVfcHVyZ2UoXHUwMDI2c2stXHUwMDNlc2tfd3JpdGVfcXVldWUpO1xuIFxuQEAgLTEyNjcsOCArMTI2OCwxMCBAQCB2b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsXG4gXG4gLyogdGlwY19za19wdXNoX2JhY2tsb2coKTogc2VuZCBhY2N1bXVsYXRlZCBidWZmZXJzIGluIHNvY2tldCB3cml0ZSBxdWV1ZVxuICAqICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gc29ja2V0IGlzIGluIE5hZ2xlIG1vZGVcbisgKiBAeG1pdHE6IHJlY2VpdmUgb3V0cHV0IHF1ZXVlLCBvciBOVUxMIG91dHNpZGUgcmVjZWl2ZSBjb250ZXh0XG4gICovXG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaylcbitzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxuK1x0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuIHtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgKnR4cSA9IFx1MDAyNnRzay1cdTAwM2Vzay5za193cml0ZV9xdWV1ZTtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVla190YWlsKHR4cSk7XG5AQCAtMTMxMCw2ICsxMzEzLDEyIEBAIHN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spXG4gXHRcdHRzay1cdTAwM2Vwa3RfY250ICs9IHNrYl9xdWV1ZV9sZW4odHhxKTtcbiBcdHRzay1cdTAwM2VzbnRfdW5hY2tlZCArPSB0c2stXHUwMDNlc25kX2JhY2tsb2c7XG4gXHR0c2stXHUwMDNlc25kX2JhY2tsb2cgPSAwO1xuK1xuK1x0aWYgKHhtaXRxIFx1MDAyNlx1MDAyNiBpbl9vd25fbm9kZShuZXQsIGRub2RlKSkge1xuK1x0XHRza2JfcXVldWVfc3BsaWNlX3RhaWxfaW5pdCh0eHEsIHhtaXRxKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIHR4cSwgZG5vZGUsIHRzay1cdTAwM2Vwb3J0aWQpO1xuIFx0aWYgKHJjID09IC1FTElOS0NPTkcpXG4gXHRcdHRzay1cdTAwM2Vjb25nX2xpbmtfY250ID0gMTtcbkBAIC0xMzY3LDcgKzEzNzYsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRnb3RvIGV4aXQ7XG4gXG4gXHRcdHdhc19jb25nID0gdHNrX2Nvbm5fY29uZyh0c2spO1xuLVx0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSk7XG4rXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgbXNnX25hZ2xlX2FjayhoZHIpLCB4bWl0cSk7XG4gXHRcdHRzay1cdTAwM2VzbnRfdW5hY2tlZCAtPSBtc2dfY29ubl9hY2soaGRyKTtcbiBcdFx0aWYgKHRzay1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfQkxPQ0tfRkxPV0NUTClcbiBcdFx0XHR0c2stXHUwMDNlc25kX3dpbiA9IG1zZ19hZHZfd2luKGhkcik7XG5AQCAtMjE2NSw3ICsyMTc0LDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRzbXBfd21iKCk7XG4gXHRcdHRzay1cdTAwM2Vjb25nX2xpbmtfY250LS07XG4gXHRcdHdha2V1cCA9IHRydWU7XG4tXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuK1x0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBHUk9VUF9QUk9UT0NPTDpcbiBcdFx0dGlwY19ncm91cF9wcm90b19yY3YoZ3JwLCBcdTAwMjZ3YWtldXAsIGhkciwgaW5wdXRxLCB4bWl0cSk7XG5AQCAtMjI1Niw3ICsyMjY1LDcgQEAgc3RhdGljIGJvb2wgdGlwY19za19maWx0ZXJfY29ubmVjdChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgVElQQ19FU1RBQkxJU0hFRDpcbiBcdFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfd3JpdGVfcXVldWUpKVxuLVx0XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuK1x0XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTtcbiBcdFx0LyogQWNjZXB0IG9ubHkgY29ubmVjdGlvbi1iYXNlZCBtZXNzYWdlcyBzZW50IGJ5IHBlZXIgKi9cbiBcdFx0aWYgKGxpa2VseShjb25fbXNnIFx1MDAyNlx1MDAyNiAhZXJyIFx1MDAyNlx1MDAyNiBwcG9ydCA9PSBvcG9ydCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBwbm9kZSA9PSBvbm9kZSkpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjA0OjUyLjI3NDQzNzY2NloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDMxNDU4NjQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgU29ja2V0IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIFRJUEMgc29ja2V0IHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBtb2RpZmllcyBgdGlwY19za19wdXNoX2JhY2tsb2dgIGluIGBuZXQvdGlwYy9zb2NrZXQuY2AgYnkgYWRkaW5nIGEgbmV3IGFyZ3VtZW50LCBgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHFgLiBUaGUgY29yZSBsb2dpYyBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgdHJhbnNtaXQgcXVldWUgKGB0eHFgKSBpcyBoYW5kbGVkIHdoZW4gdGhlIGRlc3RpbmF0aW9uIG5vZGUgaXMgdGhlIGxvY2FsIG5vZGUuIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgY2FsbGluZyBgdGlwY19ub2RlX3htaXRgLCB0aGUgcGF0Y2ggbm93IHNwbGljZXMgdGhlIGB0eHFgIGludG8gdGhlIHByb3ZpZGVkIGB4bWl0cWAuXG5cblRoaXMgaW1tZWRpYXRlbHkgc2NyZWFtcyBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yLCBtb3JlIGxpa2VseSwgYSBmaXggZm9yIGEgc3VidGxlIGJ1Zy4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBgdGlwY19ub2RlX3htaXRgIHdhcyBiZWluZyBjYWxsZWQgaW4gYSBwcm9ibGVtYXRpYyBjb250ZXh0LCBwZXJoYXBzIHdpdGggdGhlIHdyb25nIGxvY2tzIGhlbGQgb3IgaW4gYSBkZWVwIHJlY3Vyc2lvbiB0aGF0IGNvdWxkIGxlYWQgdG8gZGVhZGxvY2tzLiBBbHRlcm5hdGl2ZWx5LCB0aGUgbmV3IGFwcHJvYWNoIG1pZ2h0IHNpbXBseSBiZSBkZWZlcnJpbmcgbG9jYWwgZGVsaXZlcnkgZm9yIG9wdGltaXphdGlvbiBwdXJwb3NlcyBieSBhcHBlbmRpbmcgdG8gYHhtaXRxYCB3aGljaCBpcyB0aGVuIHByb2Nlc3NlZCBsYXRlci5cblxuVGhlIGZhY3QgdGhhdCBgdGlwY19za19wdXNoX2JhY2tsb2dgIGlzIGNhbGxlZCBmcm9tIGB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2YCwgYHRpcGNfc2tfcHJvdG9fcmN2YCwgYHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3RgLCBhbmQgYF9fdGlwY19zaHV0ZG93bmAgZ2l2ZXMgbWUgYSBjbGVhcmVyIHBpY3R1cmU6IHRoaXMgcGF0Y2ggaXMgYmVpbmcgYXBwbGllZCBpbiAqcmVjZWl2ZSogY29udGV4dHMuIFNvLCB0aGV5IGFyZSBwYXNzaW5nIGB4bWl0cWAgdG8gYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBpbiB0aGVzZSByZWNlaXZlIHBhdGhzLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQ/IE5vLCBmcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBpcyBwdXJlbHkgYSBsb2dpYyBjaGFuZ2Ugd2l0aGluIHF1ZXVlIG1hbmFnZW1lbnQuIEl0J3MgYWJvdXQgc3BsaWNpbmcgYSBxdWV1ZSB2ZXJzdXMgaW1tZWRpYXRlIHRyYW5zbWlzc2lvbi4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYSBjb25jZXJuIGhlcmUuIEtBU0FOL0xPQ0tERVAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyByZWxhdGVkIHRvIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyAoY2FsbGluZyBgdGlwY19ub2RlX3htaXRgIHdoaWxlIGhvbGRpbmcgYSBsb2NrIHRoYXQgc2hvdWxkbid0IGJlIGhlbGQsIG9yIGF2b2lkaW5nIGRlZXAgcmVjdXJzaW9uKS5cblxuSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcXVldWUgbWFuYWdlbWVudCBhbHRlcmF0aW9uLiBJJ2xsIGRvdWJsZSBjaGVjayB0aGUgY29kZSBzbmlwcGV0IG9uZSBtb3JlIHRpbWUgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5NCwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNTowNi41ODkwMjcyODFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdGlwY19za19wdXNoX2JhY2tsb2dgIGZ1bmN0aW9uIHRvIGFjY2VwdCBhbiBhZGRpdGlvbmFsIGB4bWl0cWAgYXJndW1lbnQuIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgdHJhbnNtaXR0aW5nIHBhY2tldHMgdmlhIGB0aXBjX25vZGVfeG1pdGAsIGl0IHNwbGljZXMgdGhlIHNvY2tldCdzIHdyaXRlIHF1ZXVlIGludG8gdGhlIHByb3ZpZGVkIGB4bWl0cWAgaWYgdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBsb2NhbCBub2RlLiBUaGlzIGlzIGEgY29udHJvbCBmbG93IGFuZCBxdWV1ZSBtYW5hZ2VtZW50IGNoYW5nZSwgbGlrZWx5IGludGVuZGVkIHRvIGZpeCBhIGxvY2tpbmcgaXNzdWUsIGRlYWRsb2NrLCBvciByZWN1cnNpb24gcHJvYmxlbSBkdXJpbmcgcGFja2V0IHJlY2VwdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRlYWRsb2Nrcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgZnVuY3Rpb24gdG8gYWNjZXB0IGFuIGFkZGl0aW9uYWwgYHhtaXRxYCBhcmd1bWVudC4gSW5zdGVhZCBvZiBpbW1lZGlhdGVseSB0cmFuc21pdHRpbmcgcGFja2V0cyB2aWEgYHRpcGNfbm9kZV94bWl0YCwgaXQgc3BsaWNlcyB0aGUgc29ja2V0J3Mgd3JpdGUgcXVldWUgaW50byB0aGUgcHJvdmlkZWQgYHhtaXRxYCBpZiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIGxvY2FsIG5vZGUuIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgYW5kIHF1ZXVlIG1hbmFnZW1lbnQgY2hhbmdlLCBsaWtlbHkgaW50ZW5kZWQgdG8gZml4IGEgbG9ja2luZyBpc3N1ZSwgZGVhZGxvY2ssIG9yIHJlY3Vyc2lvbiBwcm9ibGVtIGR1cmluZyBwYWNrZXQgcmVjZXB0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow4l92h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 17:01:08 +0000 UTC FinishedAt: 2026-08-07 17:05:08 +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": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "512afa2b-c6b0-4a5a-a82a-ee92b73f04dc" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "tipc_sk_rcv", "tipc_release", "tipc_shutdown" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX3NrX3JjdiYjMzQ7LAogICAgJiMzNDt0aXBjX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dGlwY19zaHV0ZG93biYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdGlwY19za19wdXNoX2JhY2tsb2dgIGZ1bmN0aW9uIHRvIGFjY2VwdCBhbiBhZGRpdGlvbmFsIGB4bWl0cWAgYXJndW1lbnQuIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgdHJhbnNtaXR0aW5nIHBhY2tldHMgdmlhIGB0aXBjX25vZGVfeG1pdGAsIGl0IHNwbGljZXMgdGhlIHNvY2tldCYjMzk7cyB3cml0ZSBxdWV1ZSBpbnRvIHRoZSBwcm92aWRlZCBgeG1pdHFgIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcXVldWUgbWFuYWdlbWVudCBjaGFuZ2UsIGxpa2VseSBpbnRlbmRlZCB0byBmaXggYSBsb2NraW5nIGlzc3VlLCBkZWFkbG9jaywgb3IgcmVjdXJzaW9uIHByb2JsZW0gZHVyaW5nIHBhY2tldCByZWNlcHRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkZWFkbG9ja3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGlwY19za19wdXNoX2JhY2tsb2dgIHRvIHNwbGljZSB0aGUgdHJhbnNtaXQgcXVldWUgdG8gdGhlIHJlY2VpdmUgb3V0cHV0IHF1ZXVlIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgb3duIG5vZGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUSVBDIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZmRmNDhhYjIwYzg0YTQzYTc3ZjZlMDM1NjYzZmNlZmExMjgwZTA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNzowMjoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jXG5pbmRleCBlNTY0MzQxZTAyMTZkLi4zM2Q3NDRkYzUxNGY1IDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvc29ja2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL3NvY2tldC5jXG5AQCAtMTU2LDcgJiM0MzsxNTYsOCBAQCBzdGF0aWMgaW50IHRpcGNfc2tfaW5zZXJ0KHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XG4gc3RhdGljIHZvaWQgdGlwY19za19yZW1vdmUoc3RydWN0IHRpcGNfc29jayAqdHNrKTtcbiBzdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xuIHN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayk7XG4mIzQzO3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcbiBzdGF0aWMgaW50IHRpcGNfd2FpdF9mb3JfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb25nICp0aW1lb19wKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzO1xuQEAgLTU2MCw3ICYjNDM7NTYxLDcgQEAgc3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcbiBcdFx0XHRcdFx0ICAgICF0c2tfY29ubl9jb25nKHRzaykpKTtcbiBcbiBcdC8qIFB1c2ggb3V0IGRlbGF5ZWQgbWVzc2FnZXMgaWYgaW4gTmFnbGUgbW9kZSAqL1xuLVx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7XG4mIzQzO1x0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgTlVMTCk7XG4gXHQvKiBSZW1vdmUgcGVuZGluZyBTWU4gKi9cbiBcdF9fc2tiX3F1ZXVlX3B1cmdlKFx1MDAyNnNrLVx1MDAzZXNrX3dyaXRlX3F1ZXVlKTtcbiBcbkBAIC0xMjY3LDggJiM0MzsxMjY4LDEwIEBAIHZvaWQgdGlwY19za19tY2FzdF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICphcnJ2cSxcbiBcbiAvKiB0aXBjX3NrX3B1c2hfYmFja2xvZygpOiBzZW5kIGFjY3VtdWxhdGVkIGJ1ZmZlcnMgaW4gc29ja2V0IHdyaXRlIHF1ZXVlXG4gICogICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBzb2NrZXQgaXMgaW4gTmFnbGUgbW9kZVxuJiM0MzsgKiBAeG1pdHE6IHJlY2VpdmUgb3V0cHV0IHF1ZXVlLCBvciBOVUxMIG91dHNpZGUgcmVjZWl2ZSBjb250ZXh0XG4gICovXG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaylcbiYjNDM7c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjayxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqdHhxID0gXHUwMDI2dHNrLVx1MDAzZXNrLnNrX3dyaXRlX3F1ZXVlO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVrX3RhaWwodHhxKTtcbkBAIC0xMzEwLDYgJiM0MzsxMzEzLDEyIEBAIHN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spXG4gXHRcdHRzay1cdTAwM2Vwa3RfY250ICYjNDM7PSBza2JfcXVldWVfbGVuKHR4cSk7XG4gXHR0c2stXHUwMDNlc250X3VuYWNrZWQgJiM0Mzs9IHRzay1cdTAwM2VzbmRfYmFja2xvZztcbiBcdHRzay1cdTAwM2VzbmRfYmFja2xvZyA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICh4bWl0cSBcdTAwMjZcdTAwMjYgaW5fb3duX25vZGUobmV0LCBkbm9kZSkpIHtcbiYjNDM7XHRcdHNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KHR4cSwgeG1pdHEpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgdHhxLCBkbm9kZSwgdHNrLVx1MDAzZXBvcnRpZCk7XG4gXHRpZiAocmMgPT0gLUVMSU5LQ09ORylcbiBcdFx0dHNrLVx1MDAzZWNvbmdfbGlua19jbnQgPSAxO1xuQEAgLTEzNjcsNyAmIzQzOzEzNzYsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRnb3RvIGV4aXQ7XG4gXG4gXHRcdHdhc19jb25nID0gdHNrX2Nvbm5fY29uZyh0c2spO1xuLVx0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSk7XG4mIzQzO1x0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSwgeG1pdHEpO1xuIFx0XHR0c2stXHUwMDNlc250X3VuYWNrZWQgLT0gbXNnX2Nvbm5fYWNrKGhkcik7XG4gXHRcdGlmICh0c2stXHUwMDNlcGVlcl9jYXBzIFx1MDAyNiBUSVBDX0JMT0NLX0ZMT1dDVEwpXG4gXHRcdFx0dHNrLVx1MDAzZXNuZF93aW4gPSBtc2dfYWR2X3dpbihoZHIpO1xuQEAgLTIxNjUsNyAmIzQzOzIxNzQsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdHNtcF93bWIoKTtcbiBcdFx0dHNrLVx1MDAzZWNvbmdfbGlua19jbnQtLTtcbiBcdFx0d2FrZXVwID0gdHJ1ZTtcbi1cdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7XG4mIzQzO1x0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBHUk9VUF9QUk9UT0NPTDpcbiBcdFx0dGlwY19ncm91cF9wcm90b19yY3YoZ3JwLCBcdTAwMjZ3YWtldXAsIGhkciwgaW5wdXRxLCB4bWl0cSk7XG5AQCAtMjI1Niw3ICYjNDM7MjI2NSw3IEBAIHN0YXRpYyBib29sIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3Qoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRjYXNlIFRJUENfRVNUQUJMSVNIRUQ6XG4gXHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3dyaXRlX3F1ZXVlKSlcbi1cdFx0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTtcbiYjNDM7XHRcdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpO1xuIFx0XHQvKiBBY2NlcHQgb25seSBjb25uZWN0aW9uLWJhc2VkIG1lc3NhZ2VzIHNlbnQgYnkgcGVlciAqL1xuIFx0XHRpZiAobGlrZWx5KGNvbl9tc2cgXHUwMDI2XHUwMDI2ICFlcnIgXHUwMDI2XHUwMDI2IHBwb3J0ID09IG9wb3J0IFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgIHBub2RlID09IG9ub2RlKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19za19yY3YmIzM0OywKICAgICYjMzQ7dGlwY19yZWxlYXNlJiMzNDssCiAgICAmIzM0O3RpcGNfc2h1dGRvd24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIHRvIHRoZSByZWNlaXZlIG91dHB1dCBxdWV1ZSBpZiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIG93biBub2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVElQQyBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmZkZjQ4YWIyMGM4NGE0M2E3N2Y2ZTAzNTY2M2ZjZWZhMTI4MGUwOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTc6MDI6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jCmluZGV4IGU1NjQzNDFlMDIxNmQuLjMzZDc0NGRjNTE0ZjUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3NvY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL3NvY2tldC5jCkBAIC0xNTYsNyAmIzQzOzE1Niw4IEBAIHN0YXRpYyBpbnQgdGlwY19za19pbnNlcnQoc3RydWN0IHRpcGNfc29jayAqdHNrKTsKIHN0YXRpYyB2b2lkIHRpcGNfc2tfcmVtb3ZlKHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7CiBzdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opOwogc3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTsKLXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spOwomIzQzO3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssCiYjNDM7CQkJCSBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7CiBzdGF0aWMgaW50IHRpcGNfd2FpdF9mb3JfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb25nICp0aW1lb19wKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wczsKQEAgLTU2MCw3ICYjNDM7NTYxLDcgQEAgc3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcikKIAkJCQkJICAgICF0c2tfY29ubl9jb25nKHRzaykpKTsKIAogCS8qIFB1c2ggb3V0IGRlbGF5ZWQgbWVzc2FnZXMgaWYgaW4gTmFnbGUgbW9kZSAqLwotCXRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpOwomIzQzOwl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCBOVUxMKTsKIAkvKiBSZW1vdmUgcGVuZGluZyBTWU4gKi8KIAlfX3NrYl9xdWV1ZV9wdXJnZSgmYW1wO3NrLSZndDtza193cml0ZV9xdWV1ZSk7CiAKQEAgLTEyNjcsOCAmIzQzOzEyNjgsMTAgQEAgdm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLAogCiAvKiB0aXBjX3NrX3B1c2hfYmFja2xvZygpOiBzZW5kIGFjY3VtdWxhdGVkIGJ1ZmZlcnMgaW4gc29ja2V0IHdyaXRlIHF1ZXVlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHNvY2tldCBpcyBpbiBOYWdsZSBtb2RlCiYjNDM7ICogQHhtaXRxOiByZWNlaXZlIG91dHB1dCBxdWV1ZSwgb3IgTlVMTCBvdXRzaWRlIHJlY2VpdmUgY29udGV4dAogICovCi1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKQomIzQzO3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssCiYjNDM7CQkJCSBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp0eHEgPSAmYW1wO3Rzay0mZ3Q7c2suc2tfd3JpdGVfcXVldWU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVrX3RhaWwodHhxKTsKQEAgLTEzMTAsNiAmIzQzOzEzMTMsMTIgQEAgc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaykKIAkJdHNrLSZndDtwa3RfY250ICYjNDM7PSBza2JfcXVldWVfbGVuKHR4cSk7CiAJdHNrLSZndDtzbnRfdW5hY2tlZCAmIzQzOz0gdHNrLSZndDtzbmRfYmFja2xvZzsKIAl0c2stJmd0O3NuZF9iYWNrbG9nID0gMDsKJiM0MzsKJiM0MzsJaWYgKHhtaXRxICZhbXA7JmFtcDsgaW5fb3duX25vZGUobmV0LCBkbm9kZSkpIHsKJiM0MzsJCXNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KHR4cSwgeG1pdHEpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJcmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIHR4cSwgZG5vZGUsIHRzay0mZ3Q7cG9ydGlkKTsKIAlpZiAocmMgPT0gLUVMSU5LQ09ORykKIAkJdHNrLSZndDtjb25nX2xpbmtfY250ID0gMTsKQEAgLTEzNjcsNyAmIzQzOzEzNzYsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCWdvdG8gZXhpdDsKIAogCQl3YXNfY29uZyA9IHRza19jb25uX2NvbmcodHNrKTsKLQkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBtc2dfbmFnbGVfYWNrKGhkcikpOwomIzQzOwkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBtc2dfbmFnbGVfYWNrKGhkciksIHhtaXRxKTsKIAkJdHNrLSZndDtzbnRfdW5hY2tlZCAtPSBtc2dfY29ubl9hY2soaGRyKTsKIAkJaWYgKHRzay0mZ3Q7cGVlcl9jYXBzICZhbXA7IFRJUENfQkxPQ0tfRkxPV0NUTCkKIAkJCXRzay0mZ3Q7c25kX3dpbiA9IG1zZ19hZHZfd2luKGhkcik7CkBAIC0yMTY1LDcgJiM0MzsyMTc0LDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLAogCQlzbXBfd21iKCk7CiAJCXRzay0mZ3Q7Y29uZ19saW5rX2NudC0tOwogCQl3YWtldXAgPSB0cnVlOwotCQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTsKJiM0MzsJCXRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTsKIAkJYnJlYWs7CiAJY2FzZSBHUk9VUF9QUk9UT0NPTDoKIAkJdGlwY19ncm91cF9wcm90b19yY3YoZ3JwLCAmYW1wO3dha2V1cCwgaGRyLCBpbnB1dHEsIHhtaXRxKTsKQEAgLTIyNTYsNyAmIzQzOzIyNjUsNyBAQCBzdGF0aWMgYm9vbCB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJcmV0dXJuIGZhbHNlOwogCWNhc2UgVElQQ19FU1RBQkxJU0hFRDoKIAkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFtcDtzay0mZ3Q7c2tfd3JpdGVfcXVldWUpKQotCQkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7CiYjNDM7CQkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpOwogCQkvKiBBY2NlcHQgb25seSBjb25uZWN0aW9uLWJhc2VkIG1lc3NhZ2VzIHNlbnQgYnkgcGVlciAqLwogCQlpZiAobGlrZWx5KGNvbl9tc2cgJmFtcDsmYW1wOyAhZXJyICZhbXA7JmFtcDsgcHBvcnQgPT0gb3BvcnQgJmFtcDsmYW1wOwogCQkJICAgcG5vZGUgPT0gb25vZGUpKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVElQQyBQcm90b2NvbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyBgbmV0L3RpcGMvc29ja2V0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYSBuZXcgYXJndW1lbnQsIGBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cWAsIHdoaWNoIGlzIGEgcHJldHR5IGNsZWFyIGluZGljYXRvciBvZiBhIGNoYW5nZSB0byB0aGUgd2F5IGRhdGEgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIFRJUEMgcHJvdG9jb2wuIFRoaXMgbmV3IGFyZ3VtZW50IG1lYW5zIHRoZSBmdW5jdGlvbiBjYW4gbm93IHNwbGljZSBgdHhxYCBpbnRvIGB4bWl0cWAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gYHhtaXRxYCBpcyBwcm92aWRlZCBhbmQgdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBsb2NhbCBub2RlLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gVElQQywgbm8gZG91YnQuCgpOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBpbXBsaWNhdGlvbnMuIEkgc2hvdWxkIGNoZWNrIHdoZXJlIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgaXMgY2FsbGVkIGZyb20uIExldCBtZSBzZWUuLi4gSXQmIzM5O3MgY2FsbGVkIGJ5IGBfX3RpcGNfc2h1dGRvd25gLCBgdGlwY19za19jb25uX3Byb3RvX3JjdmAsIGB0aXBjX3NrX3Byb3RvX3JjdmAsIGFuZCBgdGlwY19za19maWx0ZXJfY29ubmVjdGAuIFRoYXQgZ2l2ZXMgbWUgYSBkZWNlbnQgb3ZlcnZpZXcgb2YgdGhlIGFyZWFzIHRoaXMgY2hhbmdlIHRvdWNoZXMuCgpHaXZlbiB0aGF0IFRJUEMgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBhbmQgdGh1cyBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IGZ1enppbmcgaXQuIFRoaXMga2luZCBvZiBjaGFuZ2UgaXMgZXhhY3RseSB0aGUgdHlwZSBvZiB0aGluZyB0aGF0IGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgYnVncyBvciB2dWxuZXJhYmlsaXRpZXMsIHNvIGZ1enppbmcgaXMgcHJvYmFibHkgYSBnb29kIG1vdmUuCgpOZXh0IHN0ZXA6IGxldCBtZSB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgdHJhY2sgZG93biB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgZm9yIFRJUEMuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYGNvbmZpZyBUSVBDYCBhbmQgZ2V0IGEgbGlzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteY29uZmlnIFRJUEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL0tjb25maWc9Nj1tZW51Y29uZmlnIFRJUENcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTIzLVxubmV0L3RpcGMvS2NvbmZpZzoyNDpjb25maWcgVElQQ19NRURJQV9JQlxubmV0L3RpcGMvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBtZWRpYSB0eXBlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTI5LVx0ICBJUC1vdmVyLUluZmluaUJhbmQgZGV2aWNlcy5cbm5ldC90aXBjL0tjb25maWc6MzA6Y29uZmlnIFRJUENfTUVESUFfVURQXG5uZXQvdGlwYy9LY29uZmlnLTMxLVx0Ym9vbCBcJiMzNDtJUC9VRFAgbWVkaWEgdHlwZSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3RpcGMvS2NvbmZpZy0zNy1cbm5ldC90aXBjL0tjb25maWc6Mzg6Y29uZmlnIFRJUENfQ1JZUFRPXG5uZXQvdGlwYy9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtUSVBDIGVuY3J5cHRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctNTItXG5uZXQvdGlwYy9LY29uZmlnOjUzOmNvbmZpZyBUSVBDX0RJQUdcbm5ldC90aXBjL0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDtUSVBDOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTczCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgVElQQyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgVElQQ2AgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdGhlIG1haW4gY29uZmlndXJhdGlvbiBpdGVtIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBlbmFibGVzIGl0LiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IG1vZHVsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIGBuZXQvdGlwYy9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZGl0aW9uYWwgYnVpbGQgbG9naWMgd2lsbCByZXNpZGUuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBUSVBDIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBUSVBDXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtUaGUgVElQQyBQcm90b2NvbFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoZSBUcmFuc3BhcmVudCBJbnRlciBQcm9jZXNzIENvbW11bmljYXRpb24gKFRJUEMpIHByb3RvY29sIGlzXG4gIDExOlx0XHQgIHNwZWNpYWxseSBkZXNpZ25lZCBmb3IgaW50cmEgY2x1c3RlciBjb21tdW5pY2F0aW9uLiBUaGlzIHByb3RvY29sXG4gIDEyOlx0XHQgIG9yaWdpbmF0ZXMgZnJvbSBFcmljc3NvbiB3aGVyZSBpdCBoYXMgYmVlbiB1c2VkIGluIGNhcnJpZXIgZ3JhZGVcbiAgMTM6XHRcdCAgY2x1c3RlciBhcHBsaWNhdGlvbnMgZm9yIG1hbnkgeWVhcnMuXG4gIDE0Olx0XG4gIDE1Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFRJUEMsIHNlZSBodHRwOi8vdGlwYy5zb3VyY2Vmb3JnZS5uZXQuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIFRoaXMgcHJvdG9jb2wgc3VwcG9ydCBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSAoID0gY29kZSB3aGljaFxuICAxODpcdFx0ICBjYW4gYmUgaW5zZXJ0ZWQgaW4gYW5kIHJlbW92ZWQgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwgd2hlbmV2ZXIgeW91XG4gIDE5Olx0XHQgIHdhbnQpLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRpcGMuIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXRcbiAgMjA6XHRcdCAgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmUgYW5kIHJlYWQgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnJzdFx1MDAzZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDUxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGlwYyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGNoYW5nZSBoaW5nZXMgb24gdGhlIElORVQgaW1wbGVtZW50YXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCBuZXR3b3JrIGltcGxpY2F0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIG1vZGlmaWVkLgoKVGhlIGNlbnRyYWwgcG9pbnQgaGVyZSBpcyB0aGUgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBmdW5jdGlvbi4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGl0JiMzOTtzIHRpZ2h0bHkgc2NvcGVkIHdpdGhpbiB0aGUgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXItUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBtb2R1bGUuIE5vdywgd2hvJiMzOTtzIGNhbGxpbmcgKnRoYXQqPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCB0byBzZWUgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuCgpJdCYjMzk7cyBjYWxsZWQgYnkgYF9fdGlwY19zaHV0ZG93bmAsIGB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2YCwgYHRpcGNfc2tfcHJvdG9fcmN2YCwgYW5kIGB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0YC4gVGhlc2UgYXJlIGFsbCBhbHNvIHN0YXRpYywgYW5kIHRoYXQgcHJvdmlkZXMgc29tZSBsZXZlbCBvZiBlbmNhcHN1bGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IF9jYWxsc18gdGhvc2UgdG8gZnVsbHkgY29tcHJlaGVuZCB0aGUgZmxvdy4gVGhpcyB0ZWxscyBtZSB3aGVyZSB0byBjb25jZW50cmF0ZSBteSBlZmZvcnRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhvc2UgdXBzdHJlYW0gZnVuY3Rpb25zIGFyZSBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9MTI3Mz1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTEzMjctLyoqXG5uZXQvdGlwYy9zb2NrZXQuYzoxMzI4OiAqIHRpcGNfc2tfY29ubl9wcm90b19yY3YgLSByZWNlaXZlIGEgY29ubmVjdGlvbiBtbmcgcHJvdG9jb2wgbWVzc2FnZVxubmV0L3RpcGMvc29ja2V0LmMtMTMyOS0gKiBAdHNrOiByZWNlaXZpbmcgc29ja2V0XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTMzMy0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjEzMzQ6c3RhdGljIHZvaWQgdGlwY19za19jb25uX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzM1LVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTIxNTc9c3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTIxNjgtXHRjYXNlIENPTk5fTUFOQUdFUjpcbm5ldC90aXBjL3NvY2tldC5jOjIxNjk6XHRcdHRpcGNfc2tfY29ubl9wcm90b19yY3YodHNrLCBza2IsIGlucHV0cSwgeG1pdHEpO1xubmV0L3RpcGMvc29ja2V0LmMtMjE3MC1cdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipBbmFseXppbmcgdGhlIERhdGEgRmxvdzogYHRpcGNfc2tfY29ubl9wcm90b19yY3ZgKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSBoZXJlLCBgdGlwY19za19jb25uX3Byb3RvX3JjdmAgaXNuJiMzOTt0IHNvbWUgc3RhbmRhbG9uZSBmdW5jdGlvbiwgaXQmIzM5O3MgZXhwbGljaXRseSBjYWxsZWQgYnkgYHRpcGNfc2tfcHJvdG9fcmN2YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBzb21ldGhpbmcgYWJvdXQgdGhlIGNvbW11bmljYXRpb24gZmxvdyB3aXRoaW4gdGhlIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgc29ja2V0IGxheWVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd2h5IHRoZSBkZXNpZ24gaXMgdGhpcyB3YXkuCgpTbywgYHRpcGNfc2tfcHJvdG9fcmN2YCBpcyB0aGUgZ2VuZXJhbCByZWNlaXZlciwgdGhlIGVudHJ5IHBvaW50IGZvciBpbmNvbWluZyBkYXRhIG9uIGEgVElQQyBzb2NrZXQsIHdoaWxlIGB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2YCBpcyBtb3JlIHNwZWNpYWxpemVkLiBUaGlzIHN1Z2dlc3RzIHRoYXQgYHRpcGNfc2tfY29ubl9wcm90b19yY3ZgIGlzIGhhbmRsaW5nIHJlY2VpdmUgb3BlcmF0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIGNvbm5lY3Rpb24tb3JpZW50ZWQgc29ja2V0cyB3aXRoaW4gdGhlIFRJUEMgcHJvdG9jb2wuIEl0IG1pZ2h0IGJlIGhhbmRsaW5nIHN0YXRlIGNoYW5nZXMsIGFja25vd2xlZGdlbWVudCwgb3IgY29ubmVjdGlvbi1zcGVjaWZpYyBkYXRhLiBJIHdpbGwgYXNzdW1lIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBjb25uZWN0aW9uLXNwZWNpZmljIGFzcGVjdHMuCgpJJiMzOTtkIGV4cGVjdCB0byBzZWUgYSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIGZvciBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYXMgd2VsbCAtIEkgbmVlZCB0byBleHBsb3JlIHRoYXQgZm9yIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGVudGlyZSBwcm90b2NvbC4gSSBzaG91bGQgY2hlY2sgaG93IGNvbm5lY3Rpb24tcmVsYXRlZCBzdGF0ZSBpcyBzdG9yZWQgYW5kIHJldHJpZXZlZCB3aXRoaW4gdGhlIGRhdGEgc3RydWN0dXJlcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NrX3Byb3RvX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTQwMz1zdGF0aWMgaW50IHRpcGNfc2tfc29ja19lcnIoc3RydWN0IHNvY2tldCAqc29jaywgbG9uZyAqdGltZW91dClcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy00MzEtXHR3aGlsZSAoKHJjXyA9ICEoY29uZGl0aW9uXykpKSB7XHRcdFx0XHRcdCAgICAgICBcXFxubmV0L3RpcGMvc29ja2V0LmM6NDMyOlx0XHQvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIHRpcGNfc2tfcHJvdG9fcmN2KCkgKi8gICAgICAgICAgICBcXFxubmV0L3RpcGMvc29ja2V0LmMtNDMzLVx0XHRzbXBfcm1iKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTIxNTI9c3RhdGljIHZvaWQgdGlwY19zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yMTU2LVxubmV0L3RpcGMvc29ja2V0LmM6MjE1NzpzdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdGlwYy9zb2NrZXQuYy0yMTU4LVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yMzQ3PXN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjM2NC1cdGlmICh1bmxpa2VseSghbXNnX2lzZGF0YShoZHIpKSlcbm5ldC90aXBjL3NvY2tldC5jOjIzNjU6XHRcdHRpcGNfc2tfcHJvdG9fcmN2KHNrLCBcdTAwMjZpbnB1dHEsIHhtaXRxKTtcbm5ldC90aXBjL3NvY2tldC5jLTIzNjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipBbmFseXppbmcgdGhlIFJlY2VpdmVyIFBhdGggaW4gVElQQyBTb2NrZXRzKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIFRJUEMgc29ja2V0IGNvZGUsIHNwZWNpZmljYWxseSB0aGUgcmVjZWl2ZXIgcGF0aC4gSSBzZWUgdGhhdCBgdGlwY19za19wcm90b19yY3ZgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGFjdHVhbCBpbmNvbWluZyBwYWNrZXQgcHJvY2Vzc2luZyBmb3IgdGhlIHByb3RvY29sLiBJdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgcmVjZWl2ZSBmdW5jdGlvbmFsaXR5LCB0aGUgJiMzNDtndXRzJiMzNDsgb2YgdGhlIHJlY2VpdmluZyBwcm9jZXNzLgoKQW5kIEkgbm90aWNlIHRoYXQgYHRpcGNfc2tfZmlsdGVyX3JjdmAgY2FsbHMgaXQuIFNvLCBgZmlsdGVyX3JjdmAgbXVzdCBiZSBhY3RpbmcgYXMgYSBwcmUtcHJvY2Vzc2luZyBzdGVwLCBvciBhIGdhdGVrZWVwZXIgb2Ygc29ydHMuIEl0IHByb2JhYmx5IGRvZXMgc29tZSBwcmVsaW1pbmFyeSBjaGVja3MsIGxpa2UgZmlsdGVyaW5nIG9yIHBlcmhhcHMgcXVldWUgbWFuYWdlbWVudCwgKmJlZm9yZSogcGFzc2luZyB0aGUgcGFja2V0IG9uIHRvIGB0aXBjX3NrX3Byb3RvX3JjdmAgZm9yIHRoZSBzZXJpb3VzIHdvcmsgb2YgcHJvdG9jb2wgaGFuZGxpbmcgYW5kIHNvY2tldCBkZWxpdmVyeS4gSW50ZXJlc3RpbmcgaW50ZXJwbGF5OyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28gdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlIHJlY2VpdmluZyBtZWNoYW5pc20gaXMgc3RydWN0dXJlZC4gVGhpcyBpcyBwb3RlbnRpYWxseSB3aGVyZSB0aGUgbW9yZSBzb3BoaXN0aWNhdGVkIGZpbHRlcmluZyBhbmQgcG9saWN5IGFzcGVjdHMgYXJlIGJlaW5nIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgVElQQyBzdGFjay4gSXQgbWFrZXMgc2Vuc2UsIGtlZXAgdGhlIHByb3RvY29sJiMzOTtzIHByaW1hcnkgcmVjZWl2aW5nIGxvZ2ljIGNsZWFuIGFuZCBmb2N1c2VkIGFuZCBoYXZlIHRoZSBwcmUtcHJvY2Vzc2luZyBiZSBtb3JlIGR5bmFtaWMsIGRlcGVuZGVudCBvbiB0aGUgY29uZmlndXJlZCBwb2xpY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfc2tfZmlsdGVyX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTIzMTk9c3RhdGljIHVuc2lnbmVkIGludCByY3ZidWZfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTIzMzYtLyoqXG5uZXQvdGlwYy9zb2NrZXQuYzoyMzM3OiAqIHRpcGNfc2tfZmlsdGVyX3JjdiAtIHZhbGlkYXRlIGluY29taW5nIG1lc3NhZ2Vcbm5ldC90aXBjL3NvY2tldC5jLTIzMzgtICogQHNrOiBzb2NrZXRcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzQ2LSAqL1xubmV0L3RpcGMvc29ja2V0LmM6MjM0NzpzdGF0aWMgdm9pZCB0aXBjX3NrX2ZpbHRlcl9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3RpcGMvc29ja2V0LmMtMjM0OC1cdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjM1OC1cbm5ldC90aXBjL3NvY2tldC5jOjIzNTk6XHR0cmFjZV90aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgVElQQ19EVU1QX0FMTCwgXCYjMzQ7IFwmIzM0Oyk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yMzYwLVx0VElQQ19TS0JfQ0Ioc2tiKS1cdTAwM2VieXRlc19yZWFkID0gMDtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yNDEyPXN0YXRpYyBpbnQgdGlwY19za19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjQxOS1cbm5ldC90aXBjL3NvY2tldC5jOjI0MjA6XHR0aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgXHUwMDI2eG1pdHEpO1xubmV0L3RpcGMvc29ja2V0LmMtMjQyMS1cdGFkZGVkID0gc2tfcm1lbV9hbGxvY19nZXQoc2spIC0gYmVmb3JlO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI0Mzk9c3RhdGljIHZvaWQgdGlwY19za19lbnF1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI0NTctXHRcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xubmV0L3RpcGMvc29ja2V0LmM6MjQ1ODpcdFx0XHR0aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgeG1pdHEpO1xubmV0L3RpcGMvc29ja2V0LmMtMjQ1OS1cdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc0MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgZmxvdywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRlY29kaW5nIHRoZSBUSVBDIFNvY2tldCBEYXRhIEZsb3cqKgoKQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgVElQQyBzb2NrZXQgZGF0YSBmbG93IGhpbmdlcyBvbiB0aGVzZSB0aHJlZSBmdW5jdGlvbnMuIGB0aXBjX3NrX2ZpbHRlcl9yY3ZgIGlzIHRoZSBwaXZvdGFsIGZ1bmN0aW9uIGhlcmUuIEkgc2VlIGl0IGFzIHRoZSBjZW50cmFsIGdhdGVrZWVwZXIsIGFuZCBpdCYjMzk7cyBpbnZva2VkIGluIHR3byBkaXN0aW5jdCBzY2VuYXJpb3M6IGZpcnN0LCB0aHJvdWdoIGB0aXBjX3NrX2JhY2tsb2dfcmN2YCB3aGljaCwgb2YgY291cnNlLCBzZXJ2ZXMgYXMgdGhlIHN0YW5kYXJkIGBza19iYWNrbG9nX3JjdmAgY2FsbGJhY2sgZm9yIFRJUEMgc29ja2V0c+KAlGVuc3VyaW5nIGVmZmljaWVudCBoYW5kbGluZyBvZiBpbmNvbWluZyBkYXRhIHdoZW4gdGhlIHNvY2tldCBpc24mIzM5O3QgaW1tZWRpYXRlbHkgcmVhZHkgdG8gcHJvY2VzcyBpdC4gU2Vjb25kbHksIGB0aXBjX3NrX2ZpbHRlcl9yY3ZgIGFsc28gZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4gYHRpcGNfc2tfZW5xdWV1ZWAsIGltcGx5aW5nIHRoYXQgdGhlcmUmIzM5O3MgYSBmaWx0ZXJpbmcvcHJvY2Vzc2luZyBzdGVwIGhhcHBlbmluZyAqYmVmb3JlKiB0aGUgZGF0YSBpcyB1bHRpbWF0ZWx5IGVucXVldWVkIG9udG8gdGhlIHNvY2tldCYjMzk7cyByZWNlaXZlIHF1ZXVlLiBUaGUgZmFjdCB0aGF0IGB0aXBjX3NrX2VucXVldWVgIGlzIGl0c2VsZiBjYWxsZWQgYnkgYHRpcGNfc2tfcmN2YCBzdWdnZXN0cyB0aGF0IHRoaXMgaW5pdGlhbCBlbnF1ZXVlaW5nIGFuZCBzdWJzZXF1ZW50IGZpbHRlcmluZyBtYXkgYmUgYSBjcnVjaWFsIG9wdGltaXphdGlvbiBwb2ludCBpbiB0aGUgZGF0YSBmbG93LiBUaGlzIGRlc2lnbiwgd2l0aCBgdGlwY19za19maWx0ZXJfcmN2YCBhdCBpdHMgY29yZSwgbGlrZWx5IGFsbG93cyBmb3Igc29tZSBpbml0aWFsIGluc3BlY3Rpb24gYW5kIGZpbHRlcmluZyBvZiB0aGUgaW5jb21pbmcgZGF0YSwgd2hldGhlciBpdCYjMzk7cyBoZWxkIGluIHRoZSBiYWNrbG9nIG9yIGJlaW5nIGRpcmVjdGx5IGVucXVldWVkLiBJ4oCZbGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB3aGF0IGNyaXRlcmlhIGB0aXBjX3NrX2ZpbHRlcl9yY3ZgIHVzZXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBkYXRhIHByb2Nlc3NpbmcgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19za19lbnF1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9MjQxMj1zdGF0aWMgaW50IHRpcGNfc2tfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI0MjktLyoqXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDMwOiAqIHRpcGNfc2tfZW5xdWV1ZSAtIGV4dHJhY3QgYWxsIGJ1ZmZlcnMgd2l0aCBkZXN0aW5hdGlvbiAmIzM5O2Rwb3J0JiMzOTsgZnJvbVxubmV0L3RpcGMvc29ja2V0LmMtMjQzMS0gKiAgICAgICAgICAgICAgICAgICBpbnB1dHEgYW5kIHRyeSBhZGRpbmcgdGhlbSB0byBzb2NrZXQgb3IgYmFja2xvZyBxdWV1ZVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI0MzgtICovXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDM5OnN0YXRpYyB2b2lkIHRpcGNfc2tfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsIHN0cnVjdCBzb2NrICpzayxcbm5ldC90aXBjL3NvY2tldC5jLTI0NDAtXHRcdFx0ICAgIHUzMiBkcG9ydCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjQ5Mz12b2lkIHRpcGNfc2tfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI1MDktXHRcdFx0aWYgKGxpa2VseShzcGluX3RyeWxvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jaykpKSB7XG5uZXQvdGlwYy9zb2NrZXQuYzoyNTEwOlx0XHRcdFx0dGlwY19za19lbnF1ZXVlKGlucHV0cSwgc2ssIGRwb3J0LCBcdTAwMjZ4bWl0cSk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yNTExLVx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHRpcGNfc2tfcmN2YCBhbmQgQ29ubmVjdGlvbiBGaWx0ZXJpbmcqKgoKT2theSwgc28gYHRpcGNfc2tfcmN2YCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93IEkgbmVlZCB0byBzZWUgaG93IHRoYXQgaW1wYWN0cyBpdHMgdXNlIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBUSVBDIHN0YWNrLiBJJiMzOTttIGdvaW5nIHRvIHNoaWZ0IG15IGZvY3VzIHRvIGB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0YCB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBmaWx0ZXJpbmcgbG9naWMgYW5kIGlkZW50aWZ5IGhvdyBkYXRhIGlzIHJlY2VpdmVkIHdoZW4gY29ubmVjdGlvbiBmaWx0ZXJpbmcgaXMgdXNlZC4gSSBhbnRpY2lwYXRlIGl0JiMzOTtzIGxpa2VseSB1c2VkIHdpdGhpbiB0aGUgZnVuY3Rpb24gdG8gaGFuZGxlIGNvbm5lY3Rpb24gcmVxdWVzdHMgd2l0aCB0aG9zZSBkZWZpbmVkIGZpbHRlciBzcGVjaWZpY2F0aW9ucy4gTGV0IG1lIHRyYWNlIHRoZSBjYWxscyBhbmQgZGF0YSBmbG93IHRoZXJlLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBgdGlwY19za19yY3ZgIGlzIGludm9rZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIHdpdGhpbiB0aGUgc2NvcGUgb2YgZmlsdGVyIGV2YWx1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfc2tfZmlsdGVyX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYz0yMTU3PXN0YXRpYyB2b2lkIHRpcGNfc2tfcHJvdG9fcmN2KHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yMTk2LS8qKlxubmV0L3RpcGMvc29ja2V0LmM6MjE5NzogKiB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0IC0gY2hlY2sgaW5jb21pbmcgbWVzc2FnZSBmb3IgYSBjb25uZWN0aW9uLWJhc2VkIHNvY2tldFxubmV0L3RpcGMvc29ja2V0LmMtMjE5OC0gKiBAdHNrOiBUSVBDIHNvY2tldFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTIyMDItICovXG5uZXQvdGlwYy9zb2NrZXQuYzoyMjAzOnN0YXRpYyBib29sIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3Qoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3RpcGMvc29ja2V0LmMtMjIwNC1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTIzNDc9c3RhdGljIHZvaWQgdGlwY19za19maWx0ZXJfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzc2LVx0XHRsaW1pdCA9IHJjdmJ1Zl9saW1pdChzaywgc2tiKTtcbm5ldC90aXBjL3NvY2tldC5jOjIzNzc6XHRcdGlmICgoc2tfY29ubiBcdTAwMjZcdTAwMjYgIXRpcGNfc2tfZmlsdGVyX2Nvbm5lY3QodHNrLCBza2IsIHhtaXRxKSkgfHxcbm5ldC90aXBjL3NvY2tldC5jLTIzNzgtXHRcdCAgICAoIXNrX2Nvbm4gXHUwMDI2XHUwMDI2IG1zZ19jb25uZWN0ZWQoaGRyKSkgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE0NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVElQQyBTb2NrZXQgRmlsdGVyaW5nIGFuZCBTaHV0ZG93biBQYXRocyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IFRJUEMgc29ja2V0IGZpbHRlcmluZyBhbmQgc2h1dGRvd24gYXJlIGhhbmRsZWQsIGFuZCBpdCBzZWVtcyBsaWtlIGB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0YCBpcyBhbiBpbXBvcnRhbnQgZnVuY3Rpb24uIEkmIzM5O20gbm90aW5nIHRoYXQgaXQmIzM5O3MgY2FsbGVkIG5vdCBqdXN0IGZyb20gdGhlIGNvbm5lY3Rpb24gcHJvY2VzcywgYnV0IGFsc28gZnJvbSBgdGlwY19za19maWx0ZXJfcmN2YC4gVGhpcyBtZWFucyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBtb3JlIHRoYW4ganVzdCBpbml0aWFsIGNvbm5lY3Rpb24gc2V0dXA7IGl0JiMzOTtzIGFsc28gcmVsZXZhbnQgZHVyaW5nIG1lc3NhZ2UgcmVjZXB0aW9uLgoKTm93LCBjb25zaWRlcmluZyB0aGUgY29yZSBlbnRyeSBwb2ludHMgZm9yIGRhdGEgaGFuZGxpbmcsIEkgc2VlIHRocmVlIGtleSBwYXRoczoKCiogICBgdGlwY19za19yY3ZgOiBUaGlzIGlzIHRoZSBzdGFuZGFyZCByZWNlaXZlIHBhdGguCiogICBgdGlwY19za19iYWNrbG9nX3JjdmA6IFRoaXMgb25lIGNvbWVzIGludG8gcGxheSB0aHJvdWdoIHRoZSBzb2NrZXQgYmFja2xvZyBtZWNoYW5pc20gKGBza19iYWNrbG9nX3JjdmApLgoqICAgYF9fdGlwY19zaHV0ZG93bmA6ICBUaGlzIGlzIHRyaWdnZXJlZCBkdXJpbmcgc2h1dGRvd24sIHVsdGltYXRlbHkgY2FsbGVkIHZpYSB0aGUgc29ja2V0IG9wZXJhdGlvbiYjMzk7cyBzaHV0ZG93biBmdW5jdGlvbiAoYHRpcGNfc2h1dGRvd25gIHdoaWNoIHdyYXBzIGBzb2NrZXRfb3BzLSZndDtzaHV0ZG93bmApLgoKU2luY2Ugc2h1dGRvd24gaXMgY3JpdGljYWwgZm9yIGEgd2VsbC1iZWhhdmVkIHN5c3RlbSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyBvZiBgX190aXBjX3NodXRkb3duYC4gVW5kZXJzdGFuZGluZyB3aGF0IGluaXRpYXRlcyBzaHV0ZG93biB3aWxsIGJlIGtleSBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGFzcGVjdCBvZiB0aGUgVElQQyBzb2NrZXQgaW1wbGVtZW50YXRpb24gb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdGlwY19zaHV0ZG93biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTU0Mj1zdGF0aWMgdm9pZCB0aXBjX3NrX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy01NDktLyogQ2FsbGVyIHNob3VsZCBob2xkIHNvY2tldCBsb2NrIGZvciB0aGUgc29ja2V0LiAqL1xubmV0L3RpcGMvc29ja2V0LmM6NTUwOnN0YXRpYyB2b2lkIF9fdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZXJyb3IpXG5uZXQvdGlwYy9zb2NrZXQuYy01NTEte1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTYyNj1zdGF0aWMgaW50IHRpcGNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTY0MS1cdHRyYWNlX3RpcGNfc2tfcmVsZWFzZShzaywgTlVMTCwgVElQQ19EVU1QX0FMTCwgXCYjMzQ7IFwmIzM0Oyk7XG5uZXQvdGlwYy9zb2NrZXQuYzo2NDI6XHRfX3RpcGNfc2h1dGRvd24oc29jaywgVElQQ19FUlJfTk9fUE9SVCk7XG5uZXQvdGlwYy9zb2NrZXQuYy02NDMtXHRzay1cdTAwM2Vza19zaHV0ZG93biA9IFNIVVRET1dOX01BU0s7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjgwOT1zdGF0aWMgaW50IHRpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yODE5LVx0dHJhY2VfdGlwY19za19zaHV0ZG93bihzaywgTlVMTCwgVElQQ19EVU1QX0FMTCwgXCYjMzQ7IFwmIzM0Oyk7XG5uZXQvdGlwYy9zb2NrZXQuYzoyODIwOlx0X190aXBjX3NodXRkb3duKHNvY2ssIFRJUENfQ09OTl9TSFVURE9XTik7XG5uZXQvdGlwYy9zb2NrZXQuYy0yODIxLVx0c2stXHUwMDNlc2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTI4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipNeSBGb2N1c2VkIExvb2sgYXQgdGhlIFRJUEMgU29ja2V0IE9wZXJhdGlvbnMqKgoKUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluLiBJJiMzOTttIHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIFRJUEMgc29ja2V0IG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgbGlmZWN5Y2xlIG9mIGEgY29ubmVjdGlvbi4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgYHRpcGNfcmVsZWFzZWAgYW5kIGB0aXBjX3NodXRkb3duYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gbWFuYWdpbmcgdGhlIHNvY2tldCYjMzk7cyByZXNvdXJjZXMgYW5kIGhhbmRsaW5nIGl0cyBjbG9zdXJlLiBLbm93aW5nIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjcml0aWNhbCBwYXRocy4gVGhlcmVmb3JlLCBteSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gdGhlc2Ugc3ltYm9sczogYHRpcGNfc2tfcmN2YCwgYHRpcGNfcmVsZWFzZWAsIGFuZCBgdGlwY19zaHV0ZG93bmAuIFRoZXNlIHdpbGwgdGVsbCB0aGUgc3Rvcnkgb2YgdGhlIGRhdGEgcmVjZXB0aW9uLCBjb25uZWN0aW9uIHJlbGVhc2UsIGFuZCB0ZXJtaW5hdGlvbi4gSSBzZWUgdGhlIGZsb3cgZnJvbSBvbmUgcG9pbnQgdG8gdGhlIG5leHQsIGxpa2UgYSByaXZlciBvZiBkYXRhLCBhbmQgdGhlc2UgYXJlIHRoZSBiYW5rcywgb3IgZWRnZXMgb2YgdGhhdCByaXZlci4gSSYjMzk7bSB3b25kZXJpbmcgaWYgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBpcyBob3cgZGF0YSB3YWl0aW5nIHRvIGJlIHNlbnQgaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgaXQgaXMgY2FsbGVkIHRvIGRldGVybWluZSBob3cgbWVzc2FnZXMgYXJlIGJlaW5nIHNlbnQuIFNvLCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgdGlwY19zZW5kbXNnYCBvciBgdGlwY19zZW5kc3RyZWFtYCBhcmUgdGhlIGNhbGxlcnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19za19wdXNoX2JhY2tsb2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYz0xNTg9c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jOjE1OTpzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxubmV0L3RpcGMvc29ja2V0LmMtMTYwLVx0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz01NTA9c3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy01NjMtXHQvKiBQdXNoIG91dCBkZWxheWVkIG1lc3NhZ2VzIGlmIGluIE5hZ2xlIG1vZGUgKi9cbm5ldC90aXBjL3NvY2tldC5jOjU2NDpcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIE5VTEwpO1xubmV0L3RpcGMvc29ja2V0LmMtNTY1LVx0LyogUmVtb3ZlIHBlbmRpbmcgU1lOICovXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTE5Mj12b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTI2OC1cbm5ldC90aXBjL3NvY2tldC5jOjEyNjk6LyogdGlwY19za19wdXNoX2JhY2tsb2coKTogc2VuZCBhY2N1bXVsYXRlZCBidWZmZXJzIGluIHNvY2tldCB3cml0ZSBxdWV1ZVxubmV0L3RpcGMvc29ja2V0LmMtMTI3MC0gKiAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHNvY2tldCBpcyBpbiBOYWdsZSBtb2RlXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTI3Mi0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjEyNzM6c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayxcbm5ldC90aXBjL3NvY2tldC5jLTEyNzQtXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTMzND1zdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzc4LVx0XHR3YXNfY29uZyA9IHRza19jb25uX2NvbmcodHNrKTtcbm5ldC90aXBjL3NvY2tldC5jOjEzNzk6XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgbXNnX25hZ2xlX2FjayhoZHIpLCB4bWl0cSk7XG5uZXQvdGlwYy9zb2NrZXQuYy0xMzgwLVx0XHR0c2stXHUwMDNlc250X3VuYWNrZWQgLT0gbXNnX2Nvbm5fYWNrKGhkcik7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjE1Nz1zdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjE3Ni1cdFx0d2FrZXVwID0gdHJ1ZTtcbm5ldC90aXBjL3NvY2tldC5jOjIxNzc6XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTtcbm5ldC90aXBjL3NvY2tldC5jLTIxNzgtXHRcdGJyZWFrO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTIyMDM9c3RhdGljIGJvb2wgdGlwY19za19maWx0ZXJfY29ubmVjdChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjI2Ny1cdFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfd3JpdGVfcXVldWUpKVxubmV0L3RpcGMvc29ja2V0LmM6MjI2ODpcdFx0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yMjY5LVx0XHQvKiBBY2NlcHQgb25seSBjb25uZWN0aW9uLWJhc2VkIG1lc3NhZ2VzIHNlbnQgYnkgcGVlciAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE0NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVElQQyBTb2NrZXQgQnVmZmVyIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgVElQQyBjb2RlLCBhbmQgaXQgc2VlbXMgdGhpcyBjaGFuZ2UsIHdoaWxlIG5vdCAqZGlyZWN0bHkqIGluIGB0aXBjX3NlbmRtc2dgLCBpcyBkZWZpbml0ZWx5IHRpZWQgdG8gaG93IGJ1ZmZlcnMgYXJlIGhhbmRsZWQgd2hlbiBOYWdsZSBtb2RlIGlzIGVuYWJsZWQgb24gYSBzb2NrZXQuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgdGlwY19za19wdXNoX2JhY2tsb2dgLCB3aGljaCBpcyB3aGVyZSB3ZSBtYW5hZ2UgdGhlIGJhY2tsb2cgb2YgZGF0YSB0byBiZSB0cmFuc21pdHRlZC4gU3BlY2lmaWNhbGx5LCBpZiB0aGUgYHhtaXRxYCAodHJhbnNtaXQgcXVldWUpIGlzIHByZXNlbnQsIGFuZCB0aGUgZGVzdGluYXRpb24gbm9kZSBpcyB0aGUgbG9jYWwgbm9kZSwgaXQgc3BsaWNlcyB0aGUgYHR4cWAgKHRyYW5zbWl0IHF1ZXVlKSB0byB0aGUgYHhtaXRxYC4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmV0dGVyLgoKVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIGNvbnNpZGVyIGEgZmV3IG90aGVyIGZ1bmN0aW9ucy4gRmlyc3QsIGB0aXBjX3NrX3JjdmAgaXMga2V5LCBhcyBpdCYjMzk7cyB0aGUgY29yZSByZWNlaXZlIGZ1bmN0aW9uIGZvciBUSVBDIHNvY2tldHMuIEkmIzM5O2xsIGFsc28gY2hlY2sgYHRpcGNfc2tfYmFja2xvZ19yY3ZgIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJhY2tsb2cuIFRoZW4gdGhlcmUmIzM5O3MgdGhlIHNvY2tldCBvcGVyYXRpb25zIHRoZW1zZWx2ZXM6IGB0aXBjX3JlbGVhc2VgIGFuZCBgdGlwY19zaHV0ZG93bmAsIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuIEFuZCBmaW5hbGx5LCBJIHNob3VsZCByZXZpZXcgYHRpcGNfc2VuZG1zZ2AgYW5kIGB0aXBjX3NlbmRzdHJlYW1gIGJlY2F1c2UgdGhleSYjMzk7cmUgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHF1ZXVpbmcgdGhlIGJ1ZmZlcnMgdGhhdCBhcmUgdWx0aW1hdGVseSBpbnZvbHZlZCBpbiB0aGlzIHNwbGljaW5nIG9wZXJhdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoaXMgbmV3IHNwbGljZSBsb2dpYyBpcyBnb2luZyB0byBiZSBjcnVjaWFsIHRvIGRldGVybWluaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTE1Nz1zdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xubmV0L3RpcGMvc29ja2V0LmM6MTU4OnN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XG5uZXQvdGlwYy9zb2NrZXQuYy0xNTktc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz03OTE9c3RhdGljIF9fcG9sbF90IHRpcGNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy04MzktICpcbm5ldC90aXBjL3NvY2tldC5jOjg0MDogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3Ncbm5ldC90aXBjL3NvY2tldC5jLTg0MS0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTkwNj1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zb2NrICp0c2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtOTUzLSAqXG5uZXQvdGlwYy9zb2NrZXQuYzo5NTQ6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXG5uZXQvdGlwYy9zb2NrZXQuYy05NTUtICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz05NTc9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfdW5pY2FzdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTk5Ny0gKlxubmV0L3RpcGMvc29ja2V0LmM6OTk4OiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xubmV0L3RpcGMvc29ja2V0LmMtOTk5LSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTAwMT1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF9hbnljYXN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTA3OC0gKlxubmV0L3RpcGMvc29ja2V0LmM6MTA3OTogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3Ncbm5ldC90aXBjL3NvY2tldC5jLTEwODAtICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xMDgyPXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX2JjYXN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTE1Mi0gKlxubmV0L3RpcGMvc29ja2V0LmM6MTE1MzogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3Ncbm5ldC90aXBjL3NvY2tldC5jLTExNTQtICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xMzM0PXN0YXRpYyB2b2lkIHRpcGNfc2tfY29ubl9wcm90b19yY3Yoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTEzOTItLyoqXG5uZXQvdGlwYy9zb2NrZXQuYzoxMzkzOiAqIHRpcGNfc2VuZG1zZyAtIHNlbmQgbWVzc2FnZSBpbiBjb25uZWN0aW9ubGVzcyBtYW5uZXJcbm5ldC90aXBjL3NvY2tldC5jLTEzOTQtICogQHNvY2s6IHNvY2tldCBzdHJ1Y3R1cmVcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDA0LSAqL1xubmV0L3RpcGMvc29ja2V0LmM6MTQwNTpzdGF0aWMgaW50IHRpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxubmV0L3RpcGMvc29ja2V0LmMtMTQwNi1cdFx0XHRzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE0MTEtXHRsb2NrX3NvY2soc2spO1xubmV0L3RpcGMvc29ja2V0LmM6MTQxMjpcdHJldCA9IF9fdGlwY19zZW5kbXNnKHNvY2ssIG0sIGRzeik7XG5uZXQvdGlwYy9zb2NrZXQuYy0xNDEzLVx0cmVsZWFzZV9zb2NrKHNrKTtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDE3LVxubmV0L3RpcGMvc29ja2V0LmM6MTQxODpzdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxubmV0L3RpcGMvc29ja2V0LmMtMTQxOS17XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTU2NT1zdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE1ODUtXHRpZiAodW5saWtlbHkoZGVzdCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgPT0gVElQQ19PUEVOKSkge1xubmV0L3RpcGMvc29ja2V0LmM6MTU4NjpcdFx0cmMgPSBfX3RpcGNfc2VuZG1zZyhzb2NrLCBtLCBkbGVuKTtcbm5ldC90aXBjL3NvY2tldC5jLTE1ODctXHRcdGlmIChkbGVuIFx1MDAyNlx1MDAyNiBkbGVuID09IHJjKSB7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjU4Mz1zdGF0aWMgaW50IHRpcGNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqZGVzdCxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNjM3LVxubmV0L3RpcGMvc29ja2V0LmM6MjYzODpcdFx0cmVzID0gX190aXBjX3NlbmRtc2coc29jaywgXHUwMDI2bSwgMCk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yNjM5LVx0XHRpZiAoKHJlcyBcdTAwM2MgMCkgXHUwMDI2XHUwMDI2IChyZXMgIT0gLUVXT1VMREJMT0NLKSlcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzY3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1zZ19vcHMgPSB7XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzM4MS1cdC5nZXRzb2Nrb3B0X2l0ZXIgPSB0aXBjX2dldHNvY2tvcHQsXG5uZXQvdGlwYy9zb2NrZXQuYzozMzgyOlx0LnNlbmRtc2dcdD0gdGlwY19zZW5kbXNnLFxubmV0L3RpcGMvc29ja2V0LmMtMzM4My1cdC5yZWN2bXNnXHQ9IHRpcGNfcmVjdm1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwOTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLgoKKipGb2N1cyBTeW1ib2xzIGZvciBFeGFtaW5hdGlvbioqCgpSaWdodCwgc28gSSYjMzk7dmUgYmVlbiB0aGlua2luZyBhYm91dCB0aGUgY3JpdGljYWwgZm9jdXMgc3ltYm9scyB3ZSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byBoZXJlLiBCYXNlZCBvbiBteSBhbmFseXNpcywgdGhlc2UgYXJlIHRoZSBvbmVzIHRoYXQganVtcCBvdXQ6IGB0aXBjX3NrX3JjdmAsIGB0aXBjX3NlbmRtc2dgLCBgdGlwY19zZW5kc3RyZWFtYCwgYHRpcGNfcmVsZWFzZWAsIGFuZCBgdGlwY19zaHV0ZG93bmAuIFRoZXNlIGxvb2sgbGlrZSB0aGUga2V5IHBpZWNlcyBvZiB0aGUgcHV6emxlIHdoZW4gd2UmIzM5O3JlIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaW5jbHVkZSBgdGlwY19zZW5kc3RyZWFtYC4gSSYjMzk7dmUgZ290IGEgaHVuY2ggaXQmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19zZW5kc3RyZWFtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9MTU2PXN0YXRpYyB2b2lkIHRpcGNfc2tfcmVtb3ZlKHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNTc6c3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jLTE1OC1zdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTE0MTg9c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTQyLS8qKlxubmV0L3RpcGMvc29ja2V0LmM6MTU0MzogKiB0aXBjX3NlbmRzdHJlYW0gLSBzZW5kIHN0cmVhbS1vcmllbnRlZCBkYXRhXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTQ0LSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTU1Mi0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjE1NTM6c3RhdGljIGludCB0aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeilcbm5ldC90aXBjL3NvY2tldC5jLTE1NTQte1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE1NTgtXHRsb2NrX3NvY2soc2spO1xubmV0L3RpcGMvc29ja2V0LmM6MTU1OTpcdHJldCA9IF9fdGlwY19zZW5kc3RyZWFtKHNvY2ssIG0sIGRzeik7XG5uZXQvdGlwYy9zb2NrZXQuYy0xNTYwLVx0cmVsZWFzZV9zb2NrKHNrKTtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTY0LVxubmV0L3RpcGMvc29ja2V0LmM6MTU2NTpzdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxubmV0L3RpcGMvc29ja2V0LmMtMTU2Ni17XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTY2MD1zdGF0aWMgaW50IHRpcGNfc2VuZF9wYWNrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNjY0LVxubmV0L3RpcGMvc29ja2V0LmM6MTY2NTpcdHJldHVybiB0aXBjX3NlbmRzdHJlYW0oc29jaywgbSwgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jLTE2NjYtfVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI3Mjk9c3RhdGljIGludCB0aXBjX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdfc29jayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNzkyLVx0aW92X2l0ZXJfa3ZlYyhcdTAwMjZtLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgTlVMTCwgMCwgMCk7XG5uZXQvdGlwYy9zb2NrZXQuYzoyNzkzOlx0X190aXBjX3NlbmRzdHJlYW0obmV3X3NvY2ssIFx1MDAyNm0sIDApO1xubmV0L3RpcGMvc29ja2V0LmMtMjc5NC1cdHJlbGVhc2Vfc29jayhuZXdfc2spO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTM0MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc3RyZWFtX29wcyA9IHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDIxLVx0LmdldHNvY2tvcHRfaXRlciA9IHRpcGNfZ2V0c29ja29wdCxcbm5ldC90aXBjL3NvY2tldC5jOjM0MjI6XHQuc2VuZG1zZ1x0PSB0aXBjX3NlbmRzdHJlYW0sXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDIzLVx0LnJlY3Ztc2dcdD0gdGlwY19yZWN2c3RyZWFtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE1MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byBUSVBDIFNvY2tldCBPcGVyYXRpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBUSVBDIHNvY2tldCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIHNlbmQgZnVuY3Rpb25zLiBJIGtub3cgYHRpcGNfc2VuZHN0cmVhbWAgYW5kIGB0aXBjX3NlbmRtc2dgIGFyZSB0aGUga2V5IG9uZXMgZm9yIHN0cmVhbSBhbmQgbWVzc2FnZSBzb2NrZXRzLCByZXNwZWN0aXZlbHkuIEFuZCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBgdGlwY19zZW5kX3BhY2tldGAgaGFuZGxlcyB0aGUgcGFja2V0IHNvY2tldHMuIEkgc2hvdWxkIG1ha2UgYSBub3RlIG9mIHRoaXMgdG8gaGF2ZSBteSBiYXNpY3Mgc3RyYWlnaHQgYW5kIHRvIGtlZXAgdGhpbmdzIG9yZ2FuaXNlZC4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBkaWcgaW50byB0aGUgcmVjZWl2ZSBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBpcyBhY3R1YWxseSAqcmVjZWl2ZWQqIHdpdGhpbiB0aGlzIHdob2xlIGZyYW1ld29yay4gTGV0JiMzOTtzIHNlZSBob3cgYHRpcGNfc2tfcmN2YCB3b3Jrcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIGhvdyBldmVyeXRoaW5nIGNvbm5lY3RzIG9uIHRoZSByZWNlaXZlIHNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfc2tfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9MTE5Mj12b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTI2NS1cdH1cbm5ldC90aXBjL3NvY2tldC5jOjEyNjY6XHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XG5uZXQvdGlwYy9zb2NrZXQuYy0xMjY3LX1cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yNDM5PXN0YXRpYyB2b2lkIHRpcGNfc2tfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDg2LS8qKlxubmV0L3RpcGMvc29ja2V0LmM6MjQ4NzogKiB0aXBjX3NrX3JjdiAtIGhhbmRsZSBhIGNoYWluIG9mIGluY29taW5nIGJ1ZmZlcnNcbm5ldC90aXBjL3NvY2tldC5jLTI0ODgtICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2Vcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDkyLSAqL1xubmV0L3RpcGMvc29ja2V0LmM6MjQ5Mzp2b2lkIHRpcGNfc2tfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxKVxubmV0L3RpcGMvc29ja2V0LmMtMjQ5NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzExCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYHRpcGNfc2tfcmN2YCBVc2FnZSBpbiB0aGUgVElQQyBTdWJzeXN0ZW0qKgoKQWxyaWdodCwgc28gYHRpcGNfc2tfcmN2YCBpcyBub24tc3RhdGljIGFuZCBhcHBhcmVudGx5IGVpdGhlciBleHBvcnRlZCBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGFjdGl2ZWx5IHV0aWxpemVkIG91dHNpZGUgb2YgaXRzIGltbWVkaWF0ZSBkZWZpbml0aW9uLiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbC4gVGhpcyBzdWdnZXN0cyBpdCYjMzk7cyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IG9yIGEgY29yZSBmdW5jdGlvbiB3aXRoaW4gdGhlIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgZnJhbWV3b3JrLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgbW9yZSBkZWVwbHkuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgb3RoZXIgc291cmNlIGZpbGVzIHdpdGhpbiB0aGUgVElQQyBjb2RlYmFzZSB0byBkZXRlcm1pbmUgZXhhY3RseSB3aGVyZSBhbmQgaG93IGB0aXBjX3NrX3JjdmAgaXMgYmVpbmcgY2FsbGVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb250ZXh0IOKAkyB3aG8mIzM5O3MgY2FsbGluZyBpdCwgd2hhdCBhcmd1bWVudHMgYXJlIGJlaW5nIHBhc3NlZCwgYW5kIHdoYXQmIzM5O3MgdGhlIG92ZXJhbGwgZmxvdyBvZiBjb250cm9sIHRoYXQgYnJpbmdzIHVzIGhlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCB3aWxsIHNoZWQgbGlnaHQgb24gd2hhdCBpdHMgZnVuY3Rpb25hbGl0eSBpcy4gS25vd2luZyBpdCBpc24mIzM5O3Qgc3RhdGljIGxpbWl0cyB3aGVyZSBJIG5lZWQgdG8gbG9vaywgd2hpY2ggd2lsbCBzYXZlIHRpbWUuIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMgYW5kIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19za19yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmNhc3QuYz00MzY9aW50IHRpcGNfYmNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvdGlwYy9iY2FzdC5jLTQ2MC1cdGlmICghc2tiX3F1ZXVlX2VtcHR5KGlucHV0cSkpXG5uZXQvdGlwYy9iY2FzdC5jOjQ2MTpcdFx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xubmV0L3RpcGMvYmNhc3QuYy00NjItXG4tLVxubmV0L3RpcGMvYmNhc3QuYz00NzA9dm9pZCB0aXBjX2JjYXN0X2Fja19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLFxuLS1cbm5ldC90aXBjL2JjYXN0LmMtNDkwLVx0aWYgKCFza2JfcXVldWVfZW1wdHkoaW5wdXRxKSlcbm5ldC90aXBjL2JjYXN0LmM6NDkxOlx0XHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XG5uZXQvdGlwYy9iY2FzdC5jLTQ5Mi19XG4tLVxubmV0L3RpcGMvYmNhc3QuYz00OTg9aW50IHRpcGNfYmNhc3Rfc3luY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLFxuLS1cbm5ldC90aXBjL2JjYXN0LmMtNTMyLVx0aWYgKCFza2JfcXVldWVfZW1wdHkoaW5wdXRxKSlcbm5ldC90aXBjL2JjYXN0LmM6NTMzOlx0XHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XG5uZXQvdGlwYy9iY2FzdC5jLTUzNC1cdHJldHVybiByYztcbi0tXG5uZXQvdGlwYy9iY2FzdC5jPTU1Nz12b2lkIHRpcGNfYmNhc3RfcmVtb3ZlX3BlZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpyY3ZfbClcbi0tXG5uZXQvdGlwYy9iY2FzdC5jLTU3NC1cdGlmICghc2tiX3F1ZXVlX2VtcHR5KGlucHV0cSkpXG5uZXQvdGlwYy9iY2FzdC5jOjU3NTpcdFx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xubmV0L3RpcGMvYmNhc3QuYy01NzYtfVxuLS1cbm5ldC90aXBjL25vZGUuYz0xMDYyPXN0YXRpYyB2b2lkIHRpcGNfbm9kZV9saW5rX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbiwgaW50IGJlYXJlcl9pZCwgYm9vbCBkZWxldGUpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTEwOTMtXHRcdHRpcGNfYmVhcmVyX3htaXQobi1cdTAwM2VuZXQsIGJlYXJlcl9pZCwgXHUwMDI2eG1pdHEsIG1hZGRyLCBuKTtcbm5ldC90aXBjL25vZGUuYzoxMDk0Olx0dGlwY19za19yY3Yobi1cdTAwM2VuZXQsIFx1MDAyNmxlLVx1MDAzZWlucHV0cSk7XG5uZXQvdGlwYy9ub2RlLmMtMTA5NS19XG4tLVxubmV0L3RpcGMvbm9kZS5jPTE2Mjc9c3RhdGljIHZvaWQgdGlwY19seGNfeG1pdChzdHJ1Y3QgbmV0ICpwZWVyX25ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTY0MC1cdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZsaXN0LVx1MDAzZWxvY2spO1xubmV0L3RpcGMvbm9kZS5jOjE2NDE6XHRcdFx0dGlwY19za19yY3YocGVlcl9uZXQsIGxpc3QpO1xubmV0L3RpcGMvbm9kZS5jLTE2NDItXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC90aXBjL25vZGUuYy0xNjY1LVx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZsaXN0LVx1MDAzZWxvY2spO1xubmV0L3RpcGMvbm9kZS5jOjE2NjY6XHRcdHRpcGNfc2tfcmN2KHBlZXJfbmV0LCBsaXN0KTtcbm5ldC90aXBjL25vZGUuYy0xNjY3LVx0XHRyZXR1cm47XG4tLVxubmV0L3RpcGMvbm9kZS5jPTE2ODc9aW50IHRpcGNfbm9kZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTcwMC1cdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bGlzdC1cdTAwM2Vsb2NrKTtcbm5ldC90aXBjL25vZGUuYzoxNzAxOlx0XHR0aXBjX3NrX3JjdihuZXQsIGxpc3QpO1xubmV0L3RpcGMvbm9kZS5jLTE3MDItXHRcdHJldHVybiAwO1xuLS1cbm5ldC90aXBjL25vZGUuYz0yMDg2PXZvaWQgdGlwY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmIpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTIyMDItXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZsZS1cdTAwM2VpbnB1dHEpKVxubmV0L3RpcGMvbm9kZS5jOjIyMDM6XHRcdHRpcGNfc2tfcmN2KG5ldCwgXHUwMDI2bGUtXHUwMDNlaW5wdXRxKTtcbm5ldC90aXBjL25vZGUuYy0yMjA0LVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTExOTI9dm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTEyNjUtXHR9XG5uZXQvdGlwYy9zb2NrZXQuYzoxMjY2Olx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xubmV0L3RpcGMvc29ja2V0LmMtMTI2Ny19XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjQzOT1zdGF0aWMgdm9pZCB0aXBjX3NrX2VucXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjQ4Ni0vKipcbm5ldC90aXBjL3NvY2tldC5jOjI0ODc6ICogdGlwY19za19yY3YgLSBoYW5kbGUgYSBjaGFpbiBvZiBpbmNvbWluZyBidWZmZXJzXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDg4LSAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjQ5Mi0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjI0OTM6dm9pZCB0aXBjX3NrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSlcbm5ldC90aXBjL3NvY2tldC5jLTI0OTQte1xuLS1cbm5ldC90aXBjL3NvY2tldC5oPTU1PXZvaWQgdGlwY19zb2NrZXRfc3RvcCh2b2lkKTtcbm5ldC90aXBjL3NvY2tldC5oOjU2OnZvaWQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpO1xubmV0L3RpcGMvc29ja2V0LmgtNTctdm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLFxuLS1cbm5ldC90aXBjL3RvcHNydi5jPTYxND1zdGF0aWMgdm9pZCB0aXBjX3RvcHNydl9rZXJuX2V2dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2V2ZW50ICpldnQpXG4tLVxubmV0L3RpcGMvdG9wc3J2LmMtNjI5LVx0dGlwY19sb29wYmFja190cmFjZShuZXQsIFx1MDAyNmV2dHEpO1xubmV0L3RpcGMvdG9wc3J2LmM6NjMwOlx0dGlwY19za19yY3YobmV0LCBcdTAwMjZldnRxKTtcbm5ldC90aXBjL3RvcHNydi5jLTYzMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkZvY3VzaW5nIG9uIFRJUEMgQ29tbXVuaWNhdGlvbioqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSwgYHRpcGNfc2tfcmN2YCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGNvcmUgVElQQyByZWNlaXZlciBmdW5jdGlvbnMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGNydWNpYWwgdGFzayBvZiByZWNlaXZpbmcgaW5jb21pbmcgVElQQyBtZXNzYWdlcy4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUga2V5IHRvIHBpbnBvaW50aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcywgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyB3aXRoaW4gdGhlIHJlY2VpdmVyIGltcGxlbWVudGF0aW9uLgoKTm93LCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBhbmQgc2VlIGhvdyB0aGUgbWVzc2FnZXMgYXJyaXZlIGF0IHRoZSByZWNlaXZlciwgSSBzaG91bGQgYWxzbyBpbW1lZGlhdGVseSBzaGlmdCBteSBhdHRlbnRpb24gdG8gYHRpcGNfc2VuZG1zZ2AgYW5kIGB0aXBjX3NlbmRzdHJlYW1gLiBUaG9zZSB0d28gZnVuY3Rpb25zIGFyZSBwcm9iYWJseSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgc2VuZGluZyBzaWRlIG9mIHRoaW5ncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZXNzYWdlcyBhcmUgY29uc3RydWN0ZWQsIHB1dCBvbiB0aGUgd2lyZSwgYW5kIHdoYXQgZmxvdyBjb250cm9sIG9yIHJhdGUgbGltaXRpbmcsIGlmIGFueSwgdGhlIHNlbmRpbmcgc2lkZSBlbmZvcmNlcy4gU2VlaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgY29tbXVuaWNhdGlvbiBmbG93LCB3aGljaCBpcyBob3cgSSBjYW4gZGV2ZWxvcCBhIGdvb2QgcGxhbiB0byBvcHRpbWl6ZSB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9MTU3PXN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNTg6c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jLTE1OS1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTc5MT1zdGF0aWMgX19wb2xsX3QgdGlwY19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTgzOS0gKlxubmV0L3RpcGMvc29ja2V0LmM6ODQwOiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xubmV0L3RpcGMvc29ja2V0LmMtODQxLSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9OTA2PXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX21zZyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NvY2sgKnRzayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy05NTMtICpcbm5ldC90aXBjL3NvY2tldC5jOjk1NDogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3Ncbm5ldC90aXBjL3NvY2tldC5jLTk1NS0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTk1Nz1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF91bmljYXN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtOTk3LSAqXG5uZXQvdGlwYy9zb2NrZXQuYzo5OTg6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXG5uZXQvdGlwYy9zb2NrZXQuYy05OTktICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xMDAxPXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX2FueWNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMDc4LSAqXG5uZXQvdGlwYy9zb2NrZXQuYzoxMDc5OiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xubmV0L3RpcGMvc29ja2V0LmMtMTA4MC0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTEwODI9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfYmNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMTUyLSAqXG5uZXQvdGlwYy9zb2NrZXQuYzoxMTUzOiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xubmV0L3RpcGMvc29ja2V0LmMtMTE1NC0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTEzMzQ9c3RhdGljIHZvaWQgdGlwY19za19jb25uX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTM5Mi0vKipcbm5ldC90aXBjL3NvY2tldC5jOjEzOTM6ICogdGlwY19zZW5kbXNnIC0gc2VuZCBtZXNzYWdlIGluIGNvbm5lY3Rpb25sZXNzIG1hbm5lclxubmV0L3RpcGMvc29ja2V0LmMtMTM5NC0gKiBAc29jazogc29ja2V0IHN0cnVjdHVyZVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE0MDQtICovXG5uZXQvdGlwYy9zb2NrZXQuYzoxNDA1OnN0YXRpYyBpbnQgdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDA2LVx0XHRcdHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTQxMS1cdGxvY2tfc29jayhzayk7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNDEyOlx0cmV0ID0gX190aXBjX3NlbmRtc2coc29jaywgbSwgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jLTE0MTMtXHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE0MTctXG5uZXQvdGlwYy9zb2NrZXQuYzoxNDE4OnN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDE5LXtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xNTY1PXN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTU4NS1cdGlmICh1bmxpa2VseShkZXN0IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSA9PSBUSVBDX09QRU4pKSB7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNTg2Olx0XHRyYyA9IF9fdGlwY19zZW5kbXNnKHNvY2ssIG0sIGRsZW4pO1xubmV0L3RpcGMvc29ja2V0LmMtMTU4Ny1cdFx0aWYgKGRsZW4gXHUwMDI2XHUwMDI2IGRsZW4gPT0gcmMpIHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yNTgzPXN0YXRpYyBpbnQgdGlwY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpkZXN0LFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI2MzctXG5uZXQvdGlwYy9zb2NrZXQuYzoyNjM4Olx0XHRyZXMgPSBfX3RpcGNfc2VuZG1zZyhzb2NrLCBcdTAwMjZtLCAwKTtcbm5ldC90aXBjL3NvY2tldC5jLTI2MzktXHRcdGlmICgocmVzIFx1MDAzYyAwKSBcdTAwMjZcdTAwMjYgKHJlcyAhPSAtRVdPVUxEQkxPQ0spKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMzNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcyA9IHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzgxLVx0LmdldHNvY2tvcHRfaXRlciA9IHRpcGNfZ2V0c29ja29wdCxcbm5ldC90aXBjL3NvY2tldC5jOjMzODI6XHQuc2VuZG1zZ1x0PSB0aXBjX3NlbmRtc2csXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzgzLVx0LnJlY3Ztc2dcdD0gdGlwY19yZWN2bXNnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMxMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVElQQyBTb2NrZXQgRnVuY3Rpb24gUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmV0L3RpcGMvc29ja2V0LmNgIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYWNjZXNzIHBhdGhzIHRvIGl0cyBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiBgdGlwY19zZW5kbXNnYCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAuIFRoZSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhleSBhcmUgKmRlY2xhcmVkKiBhcyBgc3RhdGljYCBmdW5jdGlvbnMgd2l0aGluIHRoZSBmaWxlLCB3aGljaCB1c3VhbGx5IGltcGxpZXMgbGltaXRlZCBzY29wZSBhbmQgcG90ZW50aWFsIGZvciBpbmxpbmluZy4gQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3JpdGljYWwgcG9pbnQsIHRoZXkgYXJlIGFzc2lnbmVkIHRvIGBwcm90b19vcHNgLiBUaGF0JiMzOTtzIGhvdyB0aGVzZSBmdW5jdGlvbnMgYmVjb21lIHJlYWNoYWJsZSB2aWEgc3lzY2FsbHMuCgpOb3csIGlmIHRoZXkgKndlcmUqIHB1cmVseSBzdGF0aWMsIHRoZXJl4oCZcyBhIHNsaWdodCBjaGFuY2UgdGhlIGNvbXBpbGVyIG1pZ2h0IGlubGluZSB0aGVtLCBhbmQgdGhleSB3b3VsZG4mIzM5O3QgaGF2ZSB0aGVpciBvd24gZGlzY3JldGUgc3ltYm9sIGFkZHJlc3MgaW4gdGhlIGtlcm5lbCBpbWFnZS4gQnV0IGJlaW5nIGFzc2lnbmVkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGBwcm90b19vcHNgIHByZXZlbnRzIHRoaXMuIFRoZSBjb21waWxlciAqbXVzdCogdHJlYXQgdGhlbSBhcyBkaXN0aW5jdCwgZXh0ZXJuYWwtZmFjaW5nIGVudHJ5IHBvaW50cy4gU28sIEkgbmVlZCB0byBiZSBzdXJlIEkgYW0gdHJhY2luZyB0aGUgcmlnaHQgZnVuY3Rpb25zLgoKV2FpdCBhIG1pbnV0ZSwgYF9fdGlwY19zZW5kbXNnYCBhbmQgYF9fdGlwY19zZW5kc3RyZWFtYCBhcmUgYWxzbyBzdGF0aWMsIHNvIEkgY291bGQgYmUgZ2V0dGluZyBjb25mdXNlZCB0aGVyZS4gTGV0JiMzOTtzIHN0aWNrIHdpdGggYHRpcGNfc2VuZG1zZ2AgYW5kIGB0aXBjX3NlbmRzdHJlYW1gIHRvIGF2b2lkIGNvbmZ1c2lvbi4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2sgYSBtb21lbnQgYW5kIGZvY3VzIG9uIHRoZSByZWNlaXZpbmcgc2lkZS4gYHRpcGNfc2tfcmN2YCBpcyBub24tc3RhdGljLCBzbyBhdCBsZWFzdCBvbmUgcmVjZWl2aW5nIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUuIEkgbmVlZCB0byBub3RlIHRoaXMgZm9yIGxhdGVyLiBJIGFtIGFsc28gc2VlaW5nIHRoYXQgYHRpcGNfbm9kZV94bWl0YCBpcyAqYWxzbyogbm9uLXN0YXRpYy4gTG9va2luZyBmdXJ0aGVyLCBJIHNlZSB0aGF0IGB0aXBjX25vZGVfeG1pdGAgaXMgY2FsbGVkIGZyb20gYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGB0aXBjX25vZGVfeG1pdGAgZm9yIGEgbW9tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX25vZGVfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9iY2FzdC5jPTI4OD1zdGF0aWMgaW50IHRpcGNfcmNhc3RfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKnBrdHMsXG4tLVxubmV0L3RpcGMvYmNhc3QuYy0zMDMtXHRcdC8qIEFueSBvdGhlciByZXR1cm4gdmFsdWUgdGhhbiAtRUxJTktDT05HIGlzIGlnbm9yZWQgKi9cbm5ldC90aXBjL2JjYXN0LmM6MzA0Olx0XHRpZiAodGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZfcGt0cywgZG5vZGUsIHNlbGVjdG9yKSA9PSAtRUxJTktDT05HKVxubmV0L3RpcGMvYmNhc3QuYy0zMDUtXHRcdFx0KCpjb25nX2xpbmtfY250KSYjNDM7JiM0Mzs7XG4tLVxubmV0L3RpcGMvY3J5cHRvLmM9MjIzOD1zdGF0aWMgaW50IHRpcGNfY3J5cHRvX2tleV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfYWVhZF9rZXkgKnNrZXksXG4tLVxubmV0L3RpcGMvY3J5cHRvLmMtMjI2OC1cdGlmIChkbm9kZSlcbm5ldC90aXBjL2NyeXB0by5jOjIyNjk6XHRcdHJjID0gdGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZwa3RzLCBkbm9kZSwgMCk7XG5uZXQvdGlwYy9jcnlwdG8uYy0yMjcwLVx0ZWxzZVxuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYz0yMDY9dm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTIyMS1cdG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSwgc2Vxbm8pO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjIyMjpcdHRpcGNfbm9kZV94bWl0KG5ldCwgXHUwMDI2aGVhZCwgZG5vZGUsIDApO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTIyMy1cdHJlYWRfdW5sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4tLVxubmV0L3RpcGMvbm9kZS5jPTE2Mjc9c3RhdGljIHZvaWQgdGlwY19seGNfeG1pdChzdHJ1Y3QgbmV0ICpwZWVyX25ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTY3OC0vKipcbm5ldC90aXBjL25vZGUuYzoxNjc5OiAqIHRpcGNfbm9kZV94bWl0KCkgLSBnZW5lcmFsIGxpbmsgbGV2ZWwgZnVuY3Rpb24gZm9yIG1lc3NhZ2Ugc2VuZGluZ1xubmV0L3RpcGMvbm9kZS5jLTE2ODAtICogQG5ldDogdGhlIGFwcGxpY2FibGUgbmV0IG5hbWVzcGFjZVxuLS1cbm5ldC90aXBjL25vZGUuYy0xNjg2LSAqL1xubmV0L3RpcGMvbm9kZS5jOjE2ODc6aW50IHRpcGNfbm9kZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbm5ldC90aXBjL25vZGUuYy0xNjg4LVx0XHQgICB1MzIgZG5vZGUsIGludCBzZWxlY3Rvcilcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTc1Mi1cbm5ldC90aXBjL25vZGUuYzoxNzUzOi8qIHRpcGNfbm9kZV94bWl0X3NrYigpOiBzZW5kIHNpbmdsZSBidWZmZXIgdG8gZGVzdGluYXRpb25cbm5ldC90aXBjL25vZGUuYy0xNzU0LSAqIEJ1ZmZlcnMgc2VudCB2aWEgdGhpcyBmdW5jdGlvbiBhcmUgZ2VuZXJhbGx5IFRJUENfU1lTVEVNX0lNUE9SVEFOQ0Vcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTc1OC0gKi9cbm5ldC90aXBjL25vZGUuYzoxNzU5OmludCB0aXBjX25vZGVfeG1pdF9za2Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgZG5vZGUsXG5uZXQvdGlwYy9ub2RlLmMtMTc2MC1cdFx0ICAgICAgIHUzMiBzZWxlY3Rvcilcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTc2NS1cdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2aGVhZCwgc2tiKTtcbm5ldC90aXBjL25vZGUuYzoxNzY2Olx0dGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgc2VsZWN0b3IpO1xubmV0L3RpcGMvbm9kZS5jLTE3NjctXHRyZXR1cm4gMDtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9MTc3Mz1pbnQgdGlwY19ub2RlX2Rpc3RyX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSlcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTc4MC1cdFx0ZG5vZGUgPSBtc2dfZGVzdG5vZGUoYnVmX21zZyhza2IpKTtcbm5ldC90aXBjL25vZGUuYzoxNzgxOlx0XHR0aXBjX25vZGVfeG1pdF9za2IobmV0LCBza2IsIGRub2RlLCBzZWxlY3Rvcik7XG5uZXQvdGlwYy9ub2RlLmMtMTc4Mi1cdH1cbi0tXG5uZXQvdGlwYy9ub2RlLmM9MTc4Nj12b2lkIHRpcGNfbm9kZV9icm9hZGNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcmNfZGVzdHMpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTE4MTMtXHRcdG1zZ19zZXRfZGVzdG5vZGUoYnVmX21zZyh0eHNrYiksIGRzdCk7XG5uZXQvdGlwYy9ub2RlLmM6MTgxNDpcdFx0dGlwY19ub2RlX3htaXRfc2tiKG5ldCwgdHhza2IsIGRzdCwgMCk7XG5uZXQvdGlwYy9ub2RlLmMtMTgxNS1cdH1cbi0tXG5uZXQvdGlwYy9ub2RlLmg9OTk9aW50IHRpcGNfbm9kZV9nZXRfbGlua25hbWUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYmVhcmVyX2lkLCB1MzIgbm9kZSxcbm5ldC90aXBjL25vZGUuaC0xMDAtXHRcdFx0ICAgY2hhciAqbGlua25hbWUsIHNpemVfdCBsZW4pO1xubmV0L3RpcGMvbm9kZS5oOjEwMTppbnQgdGlwY19ub2RlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LCB1MzIgZG5vZGUsXG5uZXQvdGlwYy9ub2RlLmgtMTAyLVx0XHQgICBpbnQgc2VsZWN0b3IpO1xubmV0L3RpcGMvbm9kZS5oPTEwMz1pbnQgdGlwY19ub2RlX2Rpc3RyX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KTtcbm5ldC90aXBjL25vZGUuaDoxMDQ6aW50IHRpcGNfbm9kZV94bWl0X3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBkZXN0LFxubmV0L3RpcGMvbm9kZS5oLTEwNS1cdFx0ICAgICAgIHUzMiBzZWxlY3Rvcik7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9Mjg2PXN0YXRpYyB2b2lkIHRpcGNfc2tfcmVzcG9uZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjk3LVx0c2VsZWN0b3IgPSBtc2dfb3JpZ3BvcnQoYnVmX21zZyhza2IpKTtcbm5ldC90aXBjL3NvY2tldC5jOjI5ODpcdHRpcGNfbm9kZV94bWl0X3NrYihzb2NrX25ldChzayksIHNrYiwgZG5vZGUsIHNlbGVjdG9yKTtcbm5ldC90aXBjL3NvY2tldC5jLTI5OS19XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9NTUwPXN0YXRpYyB2b2lkIF9fdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZXJyb3IpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNTk3LVx0XHRpZiAoc2tiKVxubmV0L3RpcGMvc29ja2V0LmM6NTk4Olx0XHRcdHRpcGNfbm9kZV94bWl0X3NrYihuZXQsIHNrYiwgZG5vZGUsIHRzay1cdTAwM2Vwb3J0aWQpO1xubmV0L3RpcGMvc29ja2V0LmMtNTk5LVx0XHRicmVhaztcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz05MDY9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc29jayAqdHNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTkzMS1cdC8qIFNlbmQgbWVzc2FnZSAqL1xubmV0L3RpcGMvc29ja2V0LmM6OTMyOlx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNnBrdHMsIGRub2RlLCB0c2stXHUwMDNlcG9ydGlkKTtcbm5ldC90aXBjL3NvY2tldC5jLTkzMy1cdGlmICh1bmxpa2VseShyYyA9PSAtRUxJTktDT05HKSkge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTEyNzM9c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzIxLVxubmV0L3RpcGMvc29ja2V0LmM6MTMyMjpcdHJjID0gdGlwY19ub2RlX3htaXQobmV0LCB0eHEsIGRub2RlLCB0c2stXHUwMDNlcG9ydGlkKTtcbm5ldC90aXBjL3NvY2tldC5jLTEzMjMtXHRpZiAocmMgPT0gLUVMSU5LQ09ORylcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xNDE4PXN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTUyMy1cdHRyYWNlX3RpcGNfc2tfc2VuZG1zZyhzaywgc2tiX3BlZWsoXHUwMDI2cGt0cyksIFRJUENfRFVNUF9TS19TTkRRLCBcJiMzNDsgXCYjMzQ7KTtcbm5ldC90aXBjL3NvY2tldC5jOjE1MjQ6XHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgXHUwMDI2cGt0cywgc2thZGRyLm5vZGUsIHRzay1cdTAwM2Vwb3J0aWQpO1xubmV0L3RpcGMvc29ja2V0LmMtMTUyNS1cdGlmICh1bmxpa2VseShyYyA9PSAtRUxJTktDT05HKSkge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTE1NjU9c3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNjM0LVx0XHRcdFx0XHQgVElQQ19EVU1QX1NLX1NORFEsIFwmIzM0OyBcJiMzNDspO1xubmV0L3RpcGMvc29ja2V0LmM6MTYzNTpcdFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIHR4cSwgZG5vZGUsIHRzay1cdTAwM2Vwb3J0aWQpO1xubmV0L3RpcGMvc29ja2V0LmMtMTYzNi1cdFx0aWYgKHVubGlrZWx5KHJjID09IC1FTElOS0NPTkcpKSB7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTgyOT1zdGF0aWMgdm9pZCB0aXBjX3NrX3NlbmRfYWNrKHN0cnVjdCB0aXBjX3NvY2sgKnRzaylcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xODM2LVxubmV0L3RpcGMvc29ja2V0LmM6MTgzNzpcdHRpcGNfbm9kZV94bWl0X3NrYihzb2NrX25ldChcdTAwMjZ0c2stXHUwMDNlc2spLCBza2IsIHRza19wZWVyX25vZGUodHNrKSxcbm5ldC90aXBjL3NvY2tldC5jLTE4MzgtXHRcdFx0ICAgbXNnX2xpbmtfc2VsZWN0b3IoYnVmX21zZyhza2IpKSk7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjQ5Mz12b2lkIHRpcGNfc2tfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI1MzQtXHRcdGRub2RlID0gbXNnX2Rlc3Rub2RlKGJ1Zl9tc2coc2tiKSk7XG5uZXQvdGlwYy9zb2NrZXQuYzoyNTM1Olx0XHR0aXBjX25vZGVfeG1pdF9za2IobmV0LCBza2IsIGRub2RlLCBkcG9ydCk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yNTM2LVx0fVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI4Nzg9c3RhdGljIHZvaWQgdGlwY19za190aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI5MDQtXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZsaXN0KSlcbm5ldC90aXBjL3NvY2tldC5jOjI5MDU6XHRcdHJjID0gdGlwY19ub2RlX3htaXQoc29ja19uZXQoc2spLCBcdTAwMjZsaXN0LCBwbm9kZSwgdHNrLVx1MDAzZXBvcnRpZCk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yOTA2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUwNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbml0aWFsIENvbnNpZGVyYXRpb25zIGZvciBUSVBDIEtlcm5lbCBNb2R1bGUgQW5hbHlzaXMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3Mgb24gdGhpcyBUSVBDIGtlcm5lbCBtb2R1bGUuIEJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgc2VlbiwgSSYjMzk7bSB0aGlua2luZyB0aGF0IGB0aXBjX25vZGVfeG1pdGAgd2lsbCBiZSBhIGNyaXRpY2FsIGZ1bmN0aW9uIHRvIHJlYWxseSB1bmRlcnN0YW5kLiBJdCYjMzk7cyBwcm9iYWJseSB0aGUgY29yZSB0cmFuc21pc3Npb24gZnVuY3Rpb24uIEkmIzM5O2xsIGFsc28gd2FudCB0byBsb29rIGF0IGB0aXBjX3NrX3JjdmAsIGFzIHRoYXQmIzM5O3MgbGlrZWx5IHRoZSByZWNlaXZlIHBhdGguIEFuZCBzaW5jZSB0aGlzIGlzIHJlbGF0ZWQgdG8gc29ja2V0IG9wZXJhdGlvbnMsIGB0aXBjX3NlbmRtc2dgIGFuZCBgdGlwY19zZW5kc3RyZWFtYCBhcmUgY2xlYXJseSByZWxldmFudCDigJMgdGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBleHBvcnRlZCBhcyBzb2NrZXQgb3BlcmF0aW9ucyBpcyBhIG1ham9yIGNsdWUgYXMgdG8gdGhlaXIgc2lnbmlmaWNhbmNlLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYG5ldC90aXBjL3NvY2tldC5jYCBmaWxlLiBHaXZlbiB0aGUgY29udGV4dCwgdGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYHRpcGNfc2VuZG1zZ2AgYW5kIGB0aXBjX3NlbmRzdHJlYW1gLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYz0xNTc9c3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jOjE1ODpzdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xubmV0L3RpcGMvc29ja2V0LmMtMTU5LXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9NzkxPXN0YXRpYyBfX3BvbGxfdCB0aXBjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtODM5LSAqXG5uZXQvdGlwYy9zb2NrZXQuYzo4NDA6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXG5uZXQvdGlwYy9zb2NrZXQuYy04NDEtICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz05MDY9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc29jayAqdHNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTk1My0gKlxubmV0L3RpcGMvc29ja2V0LmM6OTU0OiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xubmV0L3RpcGMvc29ja2V0LmMtOTU1LSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9OTU3PXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX3VuaWNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy05OTctICpcbm5ldC90aXBjL3NvY2tldC5jOjk5ODogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3Ncbm5ldC90aXBjL3NvY2tldC5jLTk5OS0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTEwMDE9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfYW55Y2FzdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTEwNzgtICpcbm5ldC90aXBjL3NvY2tldC5jOjEwNzk6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXG5uZXQvdGlwYy9zb2NrZXQuYy0xMDgwLSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTA4Mj1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF9iY2FzdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTExNTItICpcbm5ldC90aXBjL3NvY2tldC5jOjExNTM6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXG5uZXQvdGlwYy9zb2NrZXQuYy0xMTU0LSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTMzND1zdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzkyLS8qKlxubmV0L3RpcGMvc29ja2V0LmM6MTM5MzogKiB0aXBjX3NlbmRtc2cgLSBzZW5kIG1lc3NhZ2UgaW4gY29ubmVjdGlvbmxlc3MgbWFubmVyXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzk0LSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTQwNC0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjE0MDU6c3RhdGljIGludCB0aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jayxcbm5ldC90aXBjL3NvY2tldC5jLTE0MDYtXHRcdFx0c3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDExLVx0bG9ja19zb2NrKHNrKTtcbm5ldC90aXBjL3NvY2tldC5jOjE0MTI6XHRyZXQgPSBfX3RpcGNfc2VuZG1zZyhzb2NrLCBtLCBkc3opO1xubmV0L3RpcGMvc29ja2V0LmMtMTQxMy1cdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTQxNy1cbm5ldC90aXBjL3NvY2tldC5jOjE0MTg6c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcbm5ldC90aXBjL3NvY2tldC5jLTE0MTkte1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTE1NjU9c3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTg1LVx0aWYgKHVubGlrZWx5KGRlc3QgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlID09IFRJUENfT1BFTikpIHtcbm5ldC90aXBjL3NvY2tldC5jOjE1ODY6XHRcdHJjID0gX190aXBjX3NlbmRtc2coc29jaywgbSwgZGxlbik7XG5uZXQvdGlwYy9zb2NrZXQuYy0xNTg3LVx0XHRpZiAoZGxlbiBcdTAwMjZcdTAwMjYgZGxlbiA9PSByYykge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI1ODM9c3RhdGljIGludCB0aXBjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmRlc3QsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjYzNy1cbm5ldC90aXBjL3NvY2tldC5jOjI2Mzg6XHRcdHJlcyA9IF9fdGlwY19zZW5kbXNnKHNvY2ssIFx1MDAyNm0sIDApO1xubmV0L3RpcGMvc29ja2V0LmMtMjYzOS1cdFx0aWYgKChyZXMgXHUwMDNjIDApIFx1MDAyNlx1MDAyNiAocmVzICE9IC1FV09VTERCTE9DSykpXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzM2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtc2dfb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTMzODEtXHQuZ2V0c29ja29wdF9pdGVyID0gdGlwY19nZXRzb2Nrb3B0LFxubmV0L3RpcGMvc29ja2V0LmM6MzM4MjpcdC5zZW5kbXNnXHQ9IHRpcGNfc2VuZG1zZyxcbm5ldC90aXBjL3NvY2tldC5jLTMzODMtXHQucmVjdm1zZ1x0PSB0aXBjX3JlY3Ztc2csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjU0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUSVBDIEZ1bmN0aW9uIFN5bWJvbCBSZWFjaGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGVzZSBUSVBDIGZ1bmN0aW9ucyByZWxhdGUgdG8gZWFjaCBvdGhlciwgcGFydGljdWxhcmx5IGZvciBwb3RlbnRpYWwgYW5hbHlzaXMgb3IgaW5zdHJ1bWVudGF0aW9uLiBJIHNlZSB0aGF0IGB0aXBjX3NlbmRtc2dgIGFuZCBgdGlwY19zZW5kc3RyZWFtYCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIGJ1dCB0aGVuIHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGBwcm90b19vcHNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgaXQgbWFrZXMgdGhlbSBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVzZSB0aGVtLCBidXQgdGhlbiBJIHJlYWxpemUgdGhhdCAqYmVjYXVzZSogdGhleSYjMzk7cmUgYHN0YXRpY2AsIHRoZXJlJiMzOTtzIGEgY2hhbmNlIHRoZXkgd29uJiMzOTt0IGJlIGV4cG9ydGVkIGFzIHN5bWJvbHMgaW4gdGhlIGtlcm5lbCBpZiB0aGUgY29tcGlsZXIgaW5saW5lcyB0aGVtLiBCdXQgd2FpdC4uLiBzaW5jZSB0aGV5JiMzOTtyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYHByb3RvX29wc2AsIHRoZXkgKmNhbiYjMzk7dCogYmUgaW5saW5lZC4gVGhhdCBjaGFuZ2VzIHRoaW5nczsgaXQmIzM5O3MgbG9va2luZyBwcm9taXNpbmcuCgpIb3dldmVyLCBgdGlwY19za19yY3ZgIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYyBhbmQgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSBzb2xpZCwgZ3VhcmFudGVlZCBzeW1ib2wgdG8gd29yayB3aXRoLiBTbywgbGV0JiMzOTtzIGluY2x1ZGUgdGhhdCBpbiB0aGUgc2V0LCBhbG9uZyB3aXRoIGB0aXBjX25vZGVfeG1pdGAsIGB0aXBjX3NlbmRtc2dgLCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBmaXRzIGludG8gYWxsIHRoaXMuIFRoZSBxdWVzdGlvbiBpcywgY2FuIEkgcmVhY2ggaXQgZnJvbSBgdGlwY19zZW5kbXNnYCBvciBgdGlwY19zZW5kc3RyZWFtYD8gTG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYSBmZXcgcGxhY2VzLiBJIHNlZSBgdGlwY19za19jb25uX3Byb3RvX3JjdmAsIGB0aXBjX3NrX3Byb3RvX3JjdmAsIGB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0YCwgYW5kIGBfX3RpcGNfc2h1dGRvd25gLiBIbW0sIHNvIGl04oCZcyBwcmVkb21pbmFudGx5IGZyb20gdGhlIHJlY2VpdmUgcGF0aCAoc28sIHBvdGVudGlhbGx5LCBgdGlwY19za19yY3ZgKSBhbmQgdGhlIHNodXRkb3duIHBhdGggKHVzaW5nIGB0aXBjX3NodXRkb3duYCBvciBgdGlwY19yZWxlYXNlYCkuIFRoYXQgaW1wbGllcyB0aGF0IGB0aXBjX3NrX3JjdmAsIGB0aXBjX3JlbGVhc2VgLCBhbmQgYHRpcGNfc2h1dGRvd25gIGFyZSBhY3R1YWxseSB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzIHRvIHN0YXJ0IHdpdGguIFRoZXkgb2ZmZXIgdGhlIG1vc3QgY29tcGxldGUgdmlldy4KCkFscmlnaHQsIGxldCYjMzk7cyB2ZXJpZnkgdGhvc2UuIEkgbmVlZCB0byBjb25maXJtIHRoZSBiZWhhdmlvciBvZiBib3RoIGB0aXBjX3JlbGVhc2VgIGFuZCBgdGlwY19zaHV0ZG93bmAuIFRoZXkgYmVjb21lIHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTE0OD1zdGF0aWMgdm9pZCB0aXBjX3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC90aXBjL3NvY2tldC5jOjE0OTpzdGF0aWMgaW50IHRpcGNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKTtcbm5ldC90aXBjL3NvY2tldC5jLTE1MC1zdGF0aWMgdm9pZCB0aXBjX3NrX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTU1MD1zdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTYxMC0vKipcbm5ldC90aXBjL3NvY2tldC5jOjYxMTogKiB0aXBjX3JlbGVhc2UgLSBkZXN0cm95IGEgVElQQyBzb2NrZXRcbm5ldC90aXBjL3NvY2tldC5jLTYxMi0gKiBAc29jazogc29ja2V0IHRvIGRlc3Ryb3lcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy02MjUtICovXG5uZXQvdGlwYy9zb2NrZXQuYzo2MjY6c3RhdGljIGludCB0aXBjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbm5ldC90aXBjL3NvY2tldC5jLTYyNy17XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzM2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtc2dfb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTMzNjktXHQuZmFtaWx5XHRcdD0gQUZfVElQQyxcbm5ldC90aXBjL3NvY2tldC5jOjMzNzA6XHQucmVsZWFzZVx0PSB0aXBjX3JlbGVhc2UsXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzcxLVx0LmJpbmRcdFx0PSB0aXBjX2JpbmQsXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzM4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTMzODktXHQuZmFtaWx5XHRcdD0gQUZfVElQQyxcbm5ldC90aXBjL3NvY2tldC5jOjMzOTA6XHQucmVsZWFzZVx0PSB0aXBjX3JlbGVhc2UsXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzkxLVx0LmJpbmRcdFx0PSB0aXBjX2JpbmQsXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzQwNz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTM0MDktXHQuZmFtaWx5XHRcdD0gQUZfVElQQyxcbm5ldC90aXBjL3NvY2tldC5jOjM0MTA6XHQucmVsZWFzZVx0PSB0aXBjX3JlbGVhc2UsXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDExLVx0LmJpbmRcdFx0PSB0aXBjX2JpbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBUSVBDIFNodXRkb3duIE1lY2hhbmlzbSoqCgpBbHJpZ2h0LCBzbyBgdGlwY19yZWxlYXNlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEJ1dCBob2xkIG9uLCBpdCYjMzk7cyBnZXR0aW5nIGFzc2lnbmVkIHRvIGBwcm90b19vcHNgLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBjb2RlIG9wdGltaXphdGlvbiwga2VlcGluZyB0aGUgZnVuY3Rpb24gc2NvcGVkIHdoZXJlIGl0JiMzOTtzIG9ubHkgbmVlZGVkLiBBbmQgdGhlIHNhbWUgcGF0dGVybiBnb2VzIGZvciBgdGlwY19zaHV0ZG93bmAuIFRoaXMgc2NyZWFtcyB0aGF0IHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBtYW5hZ2VkIGxpZmVjeWNsZSBvciBjbGVhbnVwIHNlcXVlbmNlIGF0IHBsYXkuCgpNeSBpbW1lZGlhdGUgZm9jdXMgdGhlbiBoYXMgdG8gYmUgYHRpcGNfc2h1dGRvd25gLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHByZWNpc2VseSBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0LiBXZSBuZWVkIHRvIGFzY2VydGFpbiB3aGVyZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQsIHVuZGVyIHdoYXQgY29uZGl0aW9ucywgYW5kIHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBkZWFsbG9jYXRlZCBkdXJpbmcgaXRzIGV4ZWN1dGlvbi4gVGhlIHdob2xlIHRoaW5nIGhpbmdlcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjbGVhbnVwIHByb2Nlc3MsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhhdCB0aGUgcmVsZWFzZSBmdW5jdGlvbiBpcyBhbHNvIHN0YXRpYyBhbmQgYXNzaWduZWQuIFRoaXMgaXMgYSB0ZWxsIG9mIGltcG9ydGFudCByZXNvdXJjZSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NodXRkb3duJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9NTQyPXN0YXRpYyB2b2lkIHRpcGNfc2tfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTU0OS0vKiBDYWxsZXIgc2hvdWxkIGhvbGQgc29ja2V0IGxvY2sgZm9yIHRoZSBzb2NrZXQuICovXG5uZXQvdGlwYy9zb2NrZXQuYzo1NTA6c3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcbm5ldC90aXBjL3NvY2tldC5jLTU1MS17XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9NjI2PXN0YXRpYyBpbnQgdGlwY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNjQxLVx0dHJhY2VfdGlwY19za19yZWxlYXNlKHNrLCBOVUxMLCBUSVBDX0RVTVBfQUxMLCBcJiMzNDsgXCYjMzQ7KTtcbm5ldC90aXBjL3NvY2tldC5jOjY0MjpcdF9fdGlwY19zaHV0ZG93bihzb2NrLCBUSVBDX0VSUl9OT19QT1JUKTtcbm5ldC90aXBjL3NvY2tldC5jLTY0My1cdHNrLVx1MDAzZXNrX3NodXRkb3duID0gU0hVVERPV05fTUFTSztcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yNzI5PXN0YXRpYyBpbnQgdGlwY19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3X3NvY2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjgwMC0vKipcbm5ldC90aXBjL3NvY2tldC5jOjI4MDE6ICogdGlwY19zaHV0ZG93biAtIHNodXRkb3duIHNvY2tldCBjb25uZWN0aW9uXG5uZXQvdGlwYy9zb2NrZXQuYy0yODAyLSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjgwOC0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjI4MDk6c3RhdGljIGludCB0aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpXG5uZXQvdGlwYy9zb2NrZXQuYy0yODEwLXtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yODE5LVx0dHJhY2VfdGlwY19za19zaHV0ZG93bihzaywgTlVMTCwgVElQQ19EVU1QX0FMTCwgXCYjMzQ7IFwmIzM0Oyk7XG5uZXQvdGlwYy9zb2NrZXQuYzoyODIwOlx0X190aXBjX3NodXRkb3duKHNvY2ssIFRJUENfQ09OTl9TSFVURE9XTik7XG5uZXQvdGlwYy9zb2NrZXQuYy0yODIxLVx0c2stXHUwMDNlc2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMzNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcyA9IHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzc4LVx0Lmxpc3Rlblx0XHQ9IHNvY2tfbm9fbGlzdGVuLFxubmV0L3RpcGMvc29ja2V0LmM6MzM3OTpcdC5zaHV0ZG93blx0PSB0aXBjX3NodXRkb3duLFxubmV0L3RpcGMvc29ja2V0LmMtMzM4MC1cdC5zZXRzb2Nrb3B0XHQ9IHRpcGNfc2V0c29ja29wdCxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHMgPSB7XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzM5OC1cdC5saXN0ZW5cdFx0PSB0aXBjX2xpc3Rlbixcbm5ldC90aXBjL3NvY2tldC5jOjMzOTk6XHQuc2h1dGRvd25cdD0gdGlwY19zaHV0ZG93bixcbm5ldC90aXBjL3NvY2tldC5jLTM0MDAtXHQuc2V0c29ja29wdFx0PSB0aXBjX3NldHNvY2tvcHQsXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzQwNz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTM0MTgtXHQubGlzdGVuXHRcdD0gdGlwY19saXN0ZW4sXG5uZXQvdGlwYy9zb2NrZXQuYzozNDE5Olx0LnNodXRkb3duXHQ9IHRpcGNfc2h1dGRvd24sXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDIwLVx0LnNldHNvY2tvcHRcdD0gdGlwY19zZXRzb2Nrb3B0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDczNQoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiAxODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVElQQyBDb2RlIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBgdGlwY19za19yY3ZgLCBgdGlwY19yZWxlYXNlYCwgYW5kIGB0aXBjX3NodXRkb3duYCBhcmUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gVGhleSBzZWVtIHRvIHJlcHJlc2VudCBjb3JlIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgc3lzdGVtLiBUaGUgY29uZmlndXJhdGlvbiBmbGFnIEkgbmVlZCB0byBlbnN1cmUgaXMgZW5hYmxlZCBpcyBgVElQQ2AuIEkgc2hvdWxkIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgYnV0IGJhc2VkIG9uIHRoZSBrZXJuZWwgY29uZmlnIGZpbGUsIGBuZXQvdGlwYy9LY29uZmlnYCByZWxpZXMgb24gYElORVRgLCBidXQgYFRJUENgIHNob3VsZCBiZSB0aGUgb25seSByZXF1aXJlbWVudC4KCkhlcmUmIzM5O3MgbXkgZGlzdGlsbGVkIHVuZGVyc3RhbmRpbmc6IEkgZGVlbSB0aGlzIGNvZGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBkdWUgdG8gdGhlIGZ1bmN0aW9uYWwgbmF0dXJlIG9mIHRoZSBjaGFuZ2UuIE15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgYEZvY3VzU3ltYm9sc2AgLSBzcGVjaWZpY2FsbHksIGB0aXBjX3NrX3JjdmAsIGB0aXBjX3JlbGVhc2VgLCBhbmQgYHRpcGNfc2h1dGRvd25gLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGBFbmFibGVDb25maWdzYCBpbmNsdWRlIGBUSVBDYC4gVGhlIGNvcmUgcmVhc29uIGZvciB0aGlzIGFzc2Vzc21lbnQgbGllcyBpbiB0aGUgcGF0Y2ggaXRzZWxmOiBpdCYjMzk7cyBtb2RpZnlpbmcgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIHRvIHRoZSByZWNlaXZlIG91dHB1dCBxdWV1ZSwgYnV0IG9ubHkgd2hlbiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIHNhbWUgbm9kZS4gVGhpcyBpcyBhIGJlaGF2aW9yYWwgY2hhbmdlIHdpdGhpbiB0aGUgVElQQyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgYW5kIHVzZXJzcGFjZSBhY2Nlc3MgdGhyb3VnaCBUSVBDIHNvY2tldHMgbWFrZXMgdGhpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19za19yY3YmIzM0OywKICAgICYjMzQ7dGlwY19yZWxlYXNlJiMzNDssCiAgICAmIzM0O3RpcGNfc2h1dGRvd24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIHRvIHRoZSByZWNlaXZlIG91dHB1dCBxdWV1ZSBpZiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIG93biBub2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVElQQyBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19za19yY3YmIzM0OywKICAgICYjMzQ7dGlwY19yZWxlYXNlJiMzNDssCiAgICAmIzM0O3RpcGNfc2h1dGRvd24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIHRvIHRoZSByZWNlaXZlIG91dHB1dCBxdWV1ZSBpZiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIG93biBub2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVElQQyBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdGlwY19za19wdXNoX2JhY2tsb2dgIGZ1bmN0aW9uIHRvIGFjY2VwdCBhbiBhZGRpdGlvbmFsIGB4bWl0cWAgYXJndW1lbnQuIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgdHJhbnNtaXR0aW5nIHBhY2tldHMgdmlhIGB0aXBjX25vZGVfeG1pdGAsIGl0IHNwbGljZXMgdGhlIHNvY2tldCYjMzk7cyB3cml0ZSBxdWV1ZSBpbnRvIHRoZSBwcm92aWRlZCBgeG1pdHFgIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcXVldWUgbWFuYWdlbWVudCBjaGFuZ2UsIGxpa2VseSBpbnRlbmRlZCB0byBmaXggYSBsb2NraW5nIGlzc3VlLCBkZWFkbG9jaywgb3IgcmVjdXJzaW9uIHByb2JsZW0gZHVyaW5nIHBhY2tldCByZWNlcHRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkZWFkbG9ja3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZmRmNDhhYjIwYzg0YTQzYTc3ZjZlMDM1NjYzZmNlZmExMjgwZTA5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxNzowMjoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC90aXBjL3NvY2tldC5jIGIvbmV0L3RpcGMvc29ja2V0LmMKaW5kZXggZTU2NDM0MWUwMjE2ZC4uMzNkNzQ0ZGM1MTRmNSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvc29ja2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvc29ja2V0LmMKQEAgLTE1Niw3ICYjNDM7MTU2LDggQEAgc3RhdGljIGludCB0aXBjX3NrX2luc2VydChzdHJ1Y3QgdGlwY19zb2NrICp0c2spOwogc3RhdGljIHZvaWQgdGlwY19za19yZW1vdmUoc3RydWN0IHRpcGNfc29jayAqdHNrKTsKIHN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7CiBzdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opOwotc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayk7CiYjNDM7c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaywKJiM0MzsJCQkJIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTsKIHN0YXRpYyBpbnQgdGlwY193YWl0X2Zvcl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvbmcgKnRpbWVvX3ApOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzOwpAQCAtNTYwLDcgJiM0Mzs1NjEsNyBAQCBzdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKQogCQkJCQkgICAgIXRza19jb25uX2NvbmcodHNrKSkpOwogCiAJLyogUHVzaCBvdXQgZGVsYXllZCBtZXNzYWdlcyBpZiBpbiBOYWdsZSBtb2RlICovCi0JdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7CiYjNDM7CXRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIE5VTEwpOwogCS8qIFJlbW92ZSBwZW5kaW5nIFNZTiAqLwogCV9fc2tiX3F1ZXVlX3B1cmdlKCZhbXA7c2stJmd0O3NrX3dyaXRlX3F1ZXVlKTsKIApAQCAtMTI2Nyw4ICYjNDM7MTI2OCwxMCBAQCB2b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsCiAKIC8qIHRpcGNfc2tfcHVzaF9iYWNrbG9nKCk6IHNlbmQgYWNjdW11bGF0ZWQgYnVmZmVycyBpbiBzb2NrZXQgd3JpdGUgcXVldWUKICAqICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gc29ja2V0IGlzIGluIE5hZ2xlIG1vZGUKJiM0MzsgKiBAeG1pdHE6IHJlY2VpdmUgb3V0cHV0IHF1ZXVlLCBvciBOVUxMIG91dHNpZGUgcmVjZWl2ZSBjb250ZXh0CiAgKi8KLXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spCiYjNDM7c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaywKJiM0MzsJCQkJIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKQogewogCXN0cnVjdCBza19idWZmX2hlYWQgKnR4cSA9ICZhbXA7dHNrLSZndDtzay5za193cml0ZV9xdWV1ZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWtfdGFpbCh0eHEpOwpAQCAtMTMxMCw2ICYjNDM7MTMxMywxMiBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKQogCQl0c2stJmd0O3BrdF9jbnQgJiM0Mzs9IHNrYl9xdWV1ZV9sZW4odHhxKTsKIAl0c2stJmd0O3NudF91bmFja2VkICYjNDM7PSB0c2stJmd0O3NuZF9iYWNrbG9nOwogCXRzay0mZ3Q7c25kX2JhY2tsb2cgPSAwOwomIzQzOwomIzQzOwlpZiAoeG1pdHEgJmFtcDsmYW1wOyBpbl9vd25fbm9kZShuZXQsIGRub2RlKSkgewomIzQzOwkJc2tiX3F1ZXVlX3NwbGljZV90YWlsX2luaXQodHhxLCB4bWl0cSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAlyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgdHhxLCBkbm9kZSwgdHNrLSZndDtwb3J0aWQpOwogCWlmIChyYyA9PSAtRUxJTktDT05HKQogCQl0c2stJmd0O2NvbmdfbGlua19jbnQgPSAxOwpAQCAtMTM2Nyw3ICYjNDM7MTM3Niw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfc2tfY29ubl9wcm90b19yY3Yoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJZ290byBleGl0OwogCiAJCXdhc19jb25nID0gdHNrX2Nvbm5fY29uZyh0c2spOwotCQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSk7CiYjNDM7CQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSwgeG1pdHEpOwogCQl0c2stJmd0O3NudF91bmFja2VkIC09IG1zZ19jb25uX2FjayhoZHIpOwogCQlpZiAodHNrLSZndDtwZWVyX2NhcHMgJmFtcDsgVElQQ19CTE9DS19GTE9XQ1RMKQogCQkJdHNrLSZndDtzbmRfd2luID0gbXNnX2Fkdl93aW4oaGRyKTsKQEAgLTIxNjUsNyAmIzQzOzIxNzQsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssCiAJCXNtcF93bWIoKTsKIAkJdHNrLSZndDtjb25nX2xpbmtfY250LS07CiAJCXdha2V1cCA9IHRydWU7Ci0JCXRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpOwomIzQzOwkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpOwogCQlicmVhazsKIAljYXNlIEdST1VQX1BST1RPQ09MOgogCQl0aXBjX2dyb3VwX3Byb3RvX3JjdihncnAsICZhbXA7d2FrZXVwLCBoZHIsIGlucHV0cSwgeG1pdHEpOwpAQCAtMjI1Niw3ICYjNDM7MjI2NSw3IEBAIHN0YXRpYyBib29sIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3Qoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gZmFsc2U7CiAJY2FzZSBUSVBDX0VTVEFCTElTSEVEOgogCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3NrLSZndDtza193cml0ZV9xdWV1ZSkpCi0JCQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTsKJiM0MzsJCQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7CiAJCS8qIEFjY2VwdCBvbmx5IGNvbm5lY3Rpb24tYmFzZWQgbWVzc2FnZXMgc2VudCBieSBwZWVyICovCiAJCWlmIChsaWtlbHkoY29uX21zZyAmYW1wOyZhbXA7ICFlcnIgJmFtcDsmYW1wOyBwcG9ydCA9PSBvcG9ydCAmYW1wOyZhbXA7CiAJCQkgICBwbm9kZSA9PSBvbm9kZSkpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTQKCQkJCQkJCW91dHB1dDogMTk0CgkJCQkJCQl0aG91Z2h0czogNTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVElQQyBTb2NrZXQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBUSVBDIHNvY2tldCBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBpbiBgbmV0L3RpcGMvc29ja2V0LmNgIGJ5IGFkZGluZyBhIG5ldyBhcmd1bWVudCwgYHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxYC4gVGhlIGNvcmUgbG9naWMgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgdGhlIHRyYW5zbWl0IHF1ZXVlIChgdHhxYCkgaXMgaGFuZGxlZCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBub2RlIGlzIHRoZSBsb2NhbCBub2RlLiBJbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IGNhbGxpbmcgYHRpcGNfbm9kZV94bWl0YCwgdGhlIHBhdGNoIG5vdyBzcGxpY2VzIHRoZSBgdHhxYCBpbnRvIHRoZSBwcm92aWRlZCBgeG1pdHFgLgoKVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3IsIG1vcmUgbGlrZWx5LCBhIGZpeCBmb3IgYSBzdWJ0bGUgYnVnLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGB0aXBjX25vZGVfeG1pdGAgd2FzIGJlaW5nIGNhbGxlZCBpbiBhIHByb2JsZW1hdGljIGNvbnRleHQsIHBlcmhhcHMgd2l0aCB0aGUgd3JvbmcgbG9ja3MgaGVsZCBvciBpbiBhIGRlZXAgcmVjdXJzaW9uIHRoYXQgY291bGQgbGVhZCB0byBkZWFkbG9ja3MuIEFsdGVybmF0aXZlbHksIHRoZSBuZXcgYXBwcm9hY2ggbWlnaHQgc2ltcGx5IGJlIGRlZmVycmluZyBsb2NhbCBkZWxpdmVyeSBmb3Igb3B0aW1pemF0aW9uIHB1cnBvc2VzIGJ5IGFwcGVuZGluZyB0byBgeG1pdHFgIHdoaWNoIGlzIHRoZW4gcHJvY2Vzc2VkIGxhdGVyLgoKVGhlIGZhY3QgdGhhdCBgdGlwY19za19wdXNoX2JhY2tsb2dgIGlzIGNhbGxlZCBmcm9tIGB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2YCwgYHRpcGNfc2tfcHJvdG9fcmN2YCwgYHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3RgLCBhbmQgYF9fdGlwY19zaHV0ZG93bmAgZ2l2ZXMgbWUgYSBjbGVhcmVyIHBpY3R1cmU6IHRoaXMgcGF0Y2ggaXMgYmVpbmcgYXBwbGllZCBpbiAqcmVjZWl2ZSogY29udGV4dHMuIFNvLCB0aGV5IGFyZSBwYXNzaW5nIGB4bWl0cWAgdG8gYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBpbiB0aGVzZSByZWNlaXZlIHBhdGhzLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogYXJlIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkPyBObywgZnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aGlzIGlzIHB1cmVseSBhIGxvZ2ljIGNoYW5nZSB3aXRoaW4gcXVldWUgbWFuYWdlbWVudC4gSXQmIzM5O3MgYWJvdXQgc3BsaWNpbmcgYSBxdWV1ZSB2ZXJzdXMgaW1tZWRpYXRlIHRyYW5zbWlzc2lvbi4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYSBjb25jZXJuIGhlcmUuIEtBU0FOL0xPQ0tERVAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyByZWxhdGVkIHRvIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyAoY2FsbGluZyBgdGlwY19ub2RlX3htaXRgIHdoaWxlIGhvbGRpbmcgYSBsb2NrIHRoYXQgc2hvdWxkbiYjMzk7dCBiZSBoZWxkLCBvciBhdm9pZGluZyBkZWVwIHJlY3Vyc2lvbikuCgpJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcXVldWUgbWFuYWdlbWVudCBhbHRlcmF0aW9uLiBJJiMzOTtsbCBkb3VibGUgY2hlY2sgdGhlIGNvZGUgc25pcHBldCBvbmUgbW9yZSB0aW1lIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdGlwY19za19wdXNoX2JhY2tsb2dgIGZ1bmN0aW9uIHRvIGFjY2VwdCBhbiBhZGRpdGlvbmFsIGB4bWl0cWAgYXJndW1lbnQuIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgdHJhbnNtaXR0aW5nIHBhY2tldHMgdmlhIGB0aXBjX25vZGVfeG1pdGAsIGl0IHNwbGljZXMgdGhlIHNvY2tldCYjMzk7cyB3cml0ZSBxdWV1ZSBpbnRvIHRoZSBwcm92aWRlZCBgeG1pdHFgIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcXVldWUgbWFuYWdlbWVudCBjaGFuZ2UsIGxpa2VseSBpbnRlbmRlZCB0byBmaXggYSBsb2NraW5nIGlzc3VlLCBkZWFkbG9jaywgb3IgcmVjdXJzaW9uIHByb2JsZW0gZHVyaW5nIHBhY2tldCByZWNlcHRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkZWFkbG9ja3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgZnVuY3Rpb24gdG8gYWNjZXB0IGFuIGFkZGl0aW9uYWwgYHhtaXRxYCBhcmd1bWVudC4gSW5zdGVhZCBvZiBpbW1lZGlhdGVseSB0cmFuc21pdHRpbmcgcGFja2V0cyB2aWEgYHRpcGNfbm9kZV94bWl0YCwgaXQgc3BsaWNlcyB0aGUgc29ja2V0JiMzOTtzIHdyaXRlIHF1ZXVlIGludG8gdGhlIHByb3ZpZGVkIGB4bWl0cWAgaWYgdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBsb2NhbCBub2RlLiBUaGlzIGlzIGEgY29udHJvbCBmbG93IGFuZCBxdWV1ZSBtYW5hZ2VtZW50IGNoYW5nZSwgbGlrZWx5IGludGVuZGVkIHRvIGZpeCBhIGxvY2tpbmcgaXNzdWUsIGRlYWRsb2NrLCBvciByZWN1cnNpb24gcHJvYmxlbSBkdXJpbmcgcGFja2V0IHJlY2VwdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRlYWRsb2Nrcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAyOjIzLjczNDQyODA3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjg1NDY0NDAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19za19yY3ZcIixcbiAgICBcInRpcGNfcmVsZWFzZVwiLFxuICAgIFwidGlwY19zaHV0ZG93blwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgZnVuY3Rpb24gdG8gYWNjZXB0IGFuIGFkZGl0aW9uYWwgYHhtaXRxYCBhcmd1bWVudC4gSW5zdGVhZCBvZiBpbW1lZGlhdGVseSB0cmFuc21pdHRpbmcgcGFja2V0cyB2aWEgYHRpcGNfbm9kZV94bWl0YCwgaXQgc3BsaWNlcyB0aGUgc29ja2V0J3Mgd3JpdGUgcXVldWUgaW50byB0aGUgcHJvdmlkZWQgYHhtaXRxYCBpZiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIGxvY2FsIG5vZGUuIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgYW5kIHF1ZXVlIG1hbmFnZW1lbnQgY2hhbmdlLCBsaWtlbHkgaW50ZW5kZWQgdG8gZml4IGEgbG9ja2luZyBpc3N1ZSwgZGVhZGxvY2ssIG9yIHJlY3Vyc2lvbiBwcm9ibGVtIGR1cmluZyBwYWNrZXQgcmVjZXB0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdGlwY19za19wdXNoX2JhY2tsb2dgIHRvIHNwbGljZSB0aGUgdHJhbnNtaXQgcXVldWUgdG8gdGhlIHJlY2VpdmUgb3V0cHV0IHF1ZXVlIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgb3duIG5vZGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUSVBDIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAyOjIzLjczNDQzMzgwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMzMzMzUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZmZGY0OGFiMjBjODRhNDNhNzdmNmUwMzU2NjNmY2VmYTEyODBlMDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAxNzowMjoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jXFxuaW5kZXggZTU2NDM0MWUwMjE2ZC4uMzNkNzQ0ZGM1MTRmNSAxMDA2NDRcXG4tLS0gYS9uZXQvdGlwYy9zb2NrZXQuY1xcbisrKyBiL25ldC90aXBjL3NvY2tldC5jXFxuQEAgLTE1Niw3ICsxNTYsOCBAQCBzdGF0aWMgaW50IHRpcGNfc2tfaW5zZXJ0KHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XFxuIHN0YXRpYyB2b2lkIHRpcGNfc2tfcmVtb3ZlKHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XFxuIHN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XFxuIHN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XFxuLXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spO1xcbitzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpO1xcbiBzdGF0aWMgaW50IHRpcGNfd2FpdF9mb3JfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb25nICp0aW1lb19wKTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHM7XFxuQEAgLTU2MCw3ICs1NjEsNyBAQCBzdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKVxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIXRza19jb25uX2NvbmcodHNrKSkpO1xcbiBcXG4gXFx0LyogUHVzaCBvdXQgZGVsYXllZCBtZXNzYWdlcyBpZiBpbiBOYWdsZSBtb2RlICovXFxuLVxcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xcbitcXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCBOVUxMKTtcXG4gXFx0LyogUmVtb3ZlIHBlbmRpbmcgU1lOICovXFxuIFxcdF9fc2tiX3F1ZXVlX3B1cmdlKFxcdTAwMjZzay1cXHUwMDNlc2tfd3JpdGVfcXVldWUpO1xcbiBcXG5AQCAtMTI2Nyw4ICsxMjY4LDEwIEBAIHZvaWQgdGlwY19za19tY2FzdF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICphcnJ2cSxcXG4gXFxuIC8qIHRpcGNfc2tfcHVzaF9iYWNrbG9nKCk6IHNlbmQgYWNjdW11bGF0ZWQgYnVmZmVycyBpbiBzb2NrZXQgd3JpdGUgcXVldWVcXG4gICogICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBzb2NrZXQgaXMgaW4gTmFnbGUgbW9kZVxcbisgKiBAeG1pdHE6IHJlY2VpdmUgb3V0cHV0IHF1ZXVlLCBvciBOVUxMIG91dHNpZGUgcmVjZWl2ZSBjb250ZXh0XFxuICAqL1xcbi1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKVxcbitzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuIHtcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqdHhxID0gXFx1MDAyNnRzay1cXHUwMDNlc2suc2tfd3JpdGVfcXVldWU7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVla190YWlsKHR4cSk7XFxuQEAgLTEzMTAsNiArMTMxMywxMiBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKVxcbiBcXHRcXHR0c2stXFx1MDAzZXBrdF9jbnQgKz0gc2tiX3F1ZXVlX2xlbih0eHEpO1xcbiBcXHR0c2stXFx1MDAzZXNudF91bmFja2VkICs9IHRzay1cXHUwMDNlc25kX2JhY2tsb2c7XFxuIFxcdHRzay1cXHUwMDNlc25kX2JhY2tsb2cgPSAwO1xcbitcXG4rXFx0aWYgKHhtaXRxIFxcdTAwMjZcXHUwMDI2IGluX293bl9ub2RlKG5ldCwgZG5vZGUpKSB7XFxuK1xcdFxcdHNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KHR4cSwgeG1pdHEpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdHJjID0gdGlwY19ub2RlX3htaXQobmV0LCB0eHEsIGRub2RlLCB0c2stXFx1MDAzZXBvcnRpZCk7XFxuIFxcdGlmIChyYyA9PSAtRUxJTktDT05HKVxcbiBcXHRcXHR0c2stXFx1MDAzZWNvbmdfbGlua19jbnQgPSAxO1xcbkBAIC0xMzY3LDcgKzEzNzYsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0Z290byBleGl0O1xcbiBcXG4gXFx0XFx0d2FzX2NvbmcgPSB0c2tfY29ubl9jb25nKHRzayk7XFxuLVxcdFxcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgbXNnX25hZ2xlX2FjayhoZHIpKTtcXG4rXFx0XFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBtc2dfbmFnbGVfYWNrKGhkciksIHhtaXRxKTtcXG4gXFx0XFx0dHNrLVxcdTAwM2VzbnRfdW5hY2tlZCAtPSBtc2dfY29ubl9hY2soaGRyKTtcXG4gXFx0XFx0aWYgKHRzay1cXHUwMDNlcGVlcl9jYXBzIFxcdTAwMjYgVElQQ19CTE9DS19GTE9XQ1RMKVxcbiBcXHRcXHRcXHR0c2stXFx1MDAzZXNuZF93aW4gPSBtc2dfYWR2X3dpbihoZHIpO1xcbkBAIC0yMTY1LDcgKzIxNzQsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdHNtcF93bWIoKTtcXG4gXFx0XFx0dHNrLVxcdTAwM2Vjb25nX2xpbmtfY250LS07XFxuIFxcdFxcdHdha2V1cCA9IHRydWU7XFxuLVxcdFxcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xcbitcXHRcXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEdST1VQX1BST1RPQ09MOlxcbiBcXHRcXHR0aXBjX2dyb3VwX3Byb3RvX3JjdihncnAsIFxcdTAwMjZ3YWtldXAsIGhkciwgaW5wdXRxLCB4bWl0cSk7XFxuQEAgLTIyNTYsNyArMjI2NSw3IEBAIHN0YXRpYyBib29sIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3Qoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdGNhc2UgVElQQ19FU1RBQkxJU0hFRDpcXG4gXFx0XFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNnNrLVxcdTAwM2Vza193cml0ZV9xdWV1ZSkpXFxuLVxcdFxcdFxcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xcbitcXHRcXHRcXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7XFxuIFxcdFxcdC8qIEFjY2VwdCBvbmx5IGNvbm5lY3Rpb24tYmFzZWQgbWVzc2FnZXMgc2VudCBieSBwZWVyICovXFxuIFxcdFxcdGlmIChsaWtlbHkoY29uX21zZyBcXHUwMDI2XFx1MDAyNiAhZXJyIFxcdTAwMjZcXHUwMDI2IHBwb3J0ID09IG9wb3J0IFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgIHBub2RlID09IG9ub2RlKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowMjoyNC45Mzg0NjIyNzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDczMzU0Njg2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfc2tfcmN2XCIsXG4gICAgXCJ0aXBjX3JlbGVhc2VcIixcbiAgICBcInRpcGNfc2h1dGRvd25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdGlwY19za19wdXNoX2JhY2tsb2dgIHRvIHNwbGljZSB0aGUgdHJhbnNtaXQgcXVldWUgdG8gdGhlIHJlY2VpdmUgb3V0cHV0IHF1ZXVlIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgb3duIG5vZGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUSVBDIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZmZGY0OGFiMjBjODRhNDNhNzdmNmUwMzU2NjNmY2VmYTEyODBlMDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE3OjAyOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuY1xuaW5kZXggZTU2NDM0MWUwMjE2ZC4uMzNkNzQ0ZGM1MTRmNSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL3NvY2tldC5jXG4rKysgYi9uZXQvdGlwYy9zb2NrZXQuY1xuQEAgLTE1Niw3ICsxNTYsOCBAQCBzdGF0aWMgaW50IHRpcGNfc2tfaW5zZXJ0KHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XG4gc3RhdGljIHZvaWQgdGlwY19za19yZW1vdmUoc3RydWN0IHRpcGNfc29jayAqdHNrKTtcbiBzdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xuIHN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayk7XG4rc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjayxcbitcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XG4gc3RhdGljIGludCB0aXBjX3dhaXRfZm9yX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgbG9uZyAqdGltZW9fcCk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcztcbkBAIC01NjAsNyArNTYxLDcgQEAgc3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcbiBcdFx0XHRcdFx0ICAgICF0c2tfY29ubl9jb25nKHRzaykpKTtcbiBcbiBcdC8qIFB1c2ggb3V0IGRlbGF5ZWQgbWVzc2FnZXMgaWYgaW4gTmFnbGUgbW9kZSAqL1xuLVx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7XG4rXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCBOVUxMKTtcbiBcdC8qIFJlbW92ZSBwZW5kaW5nIFNZTiAqL1xuIFx0X19za2JfcXVldWVfcHVyZ2UoXHUwMDI2c2stXHUwMDNlc2tfd3JpdGVfcXVldWUpO1xuIFxuQEAgLTEyNjcsOCArMTI2OCwxMCBAQCB2b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsXG4gXG4gLyogdGlwY19za19wdXNoX2JhY2tsb2coKTogc2VuZCBhY2N1bXVsYXRlZCBidWZmZXJzIGluIHNvY2tldCB3cml0ZSBxdWV1ZVxuICAqICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gc29ja2V0IGlzIGluIE5hZ2xlIG1vZGVcbisgKiBAeG1pdHE6IHJlY2VpdmUgb3V0cHV0IHF1ZXVlLCBvciBOVUxMIG91dHNpZGUgcmVjZWl2ZSBjb250ZXh0XG4gICovXG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaylcbitzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxuK1x0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuIHtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgKnR4cSA9IFx1MDAyNnRzay1cdTAwM2Vzay5za193cml0ZV9xdWV1ZTtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVla190YWlsKHR4cSk7XG5AQCAtMTMxMCw2ICsxMzEzLDEyIEBAIHN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spXG4gXHRcdHRzay1cdTAwM2Vwa3RfY250ICs9IHNrYl9xdWV1ZV9sZW4odHhxKTtcbiBcdHRzay1cdTAwM2VzbnRfdW5hY2tlZCArPSB0c2stXHUwMDNlc25kX2JhY2tsb2c7XG4gXHR0c2stXHUwMDNlc25kX2JhY2tsb2cgPSAwO1xuK1xuK1x0aWYgKHhtaXRxIFx1MDAyNlx1MDAyNiBpbl9vd25fbm9kZShuZXQsIGRub2RlKSkge1xuK1x0XHRza2JfcXVldWVfc3BsaWNlX3RhaWxfaW5pdCh0eHEsIHhtaXRxKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIHR4cSwgZG5vZGUsIHRzay1cdTAwM2Vwb3J0aWQpO1xuIFx0aWYgKHJjID09IC1FTElOS0NPTkcpXG4gXHRcdHRzay1cdTAwM2Vjb25nX2xpbmtfY250ID0gMTtcbkBAIC0xMzY3LDcgKzEzNzYsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRnb3RvIGV4aXQ7XG4gXG4gXHRcdHdhc19jb25nID0gdHNrX2Nvbm5fY29uZyh0c2spO1xuLVx0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSk7XG4rXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgbXNnX25hZ2xlX2FjayhoZHIpLCB4bWl0cSk7XG4gXHRcdHRzay1cdTAwM2VzbnRfdW5hY2tlZCAtPSBtc2dfY29ubl9hY2soaGRyKTtcbiBcdFx0aWYgKHRzay1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfQkxPQ0tfRkxPV0NUTClcbiBcdFx0XHR0c2stXHUwMDNlc25kX3dpbiA9IG1zZ19hZHZfd2luKGhkcik7XG5AQCAtMjE2NSw3ICsyMTc0LDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRzbXBfd21iKCk7XG4gXHRcdHRzay1cdTAwM2Vjb25nX2xpbmtfY250LS07XG4gXHRcdHdha2V1cCA9IHRydWU7XG4tXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuK1x0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBHUk9VUF9QUk9UT0NPTDpcbiBcdFx0dGlwY19ncm91cF9wcm90b19yY3YoZ3JwLCBcdTAwMjZ3YWtldXAsIGhkciwgaW5wdXRxLCB4bWl0cSk7XG5AQCAtMjI1Niw3ICsyMjY1LDcgQEAgc3RhdGljIGJvb2wgdGlwY19za19maWx0ZXJfY29ubmVjdChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgVElQQ19FU1RBQkxJU0hFRDpcbiBcdFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfd3JpdGVfcXVldWUpKVxuLVx0XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuK1x0XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTtcbiBcdFx0LyogQWNjZXB0IG9ubHkgY29ubmVjdGlvbi1iYXNlZCBtZXNzYWdlcyBzZW50IGJ5IHBlZXIgKi9cbiBcdFx0aWYgKGxpa2VseShjb25fbXNnIFx1MDAyNlx1MDAyNiAhZXJyIFx1MDAyNlx1MDAyNiBwcG9ydCA9PSBvcG9ydCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBwbm9kZSA9PSBvbm9kZSkpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAyOjI0LjkzODQ2MzU0MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTQ3NDk5MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRJUEMgUHJvdG9jb2wgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIGBuZXQvdGlwYy9zb2NrZXQuY2AsIHNwZWNpZmljYWxseSB0aGUgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIGEgbmV3IGFyZ3VtZW50LCBgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHFgLCB3aGljaCBpcyBhIHByZXR0eSBjbGVhciBpbmRpY2F0b3Igb2YgYSBjaGFuZ2UgdG8gdGhlIHdheSBkYXRhIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBUSVBDIHByb3RvY29sLiBUaGlzIG5ldyBhcmd1bWVudCBtZWFucyB0aGUgZnVuY3Rpb24gY2FuIG5vdyBzcGxpY2UgYHR4cWAgaW50byBgeG1pdHFgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyDigJMgc3BlY2lmaWNhbGx5LCB3aGVuIGB4bWl0cWAgaXMgcHJvdmlkZWQgYW5kIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gVGhhdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gVElQQywgbm8gZG91YnQuXG5cbk5vdywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGltcGxpY2F0aW9ucy4gSSBzaG91bGQgY2hlY2sgd2hlcmUgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBpcyBjYWxsZWQgZnJvbS4gTGV0IG1lIHNlZS4uLiBJdCdzIGNhbGxlZCBieSBgX190aXBjX3NodXRkb3duYCwgYHRpcGNfc2tfY29ubl9wcm90b19yY3ZgLCBgdGlwY19za19wcm90b19yY3ZgLCBhbmQgYHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3RgLiBUaGF0IGdpdmVzIG1lIGEgZGVjZW50IG92ZXJ2aWV3IG9mIHRoZSBhcmVhcyB0aGlzIGNoYW5nZSB0b3VjaGVzLlxuXG5HaXZlbiB0aGF0IFRJUEMgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBhbmQgdGh1cyBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgZnV6emluZyBpdC4gVGhpcyBraW5kIG9mIGNoYW5nZSBpcyBleGFjdGx5IHRoZSB0eXBlIG9mIHRoaW5nIHRoYXQgY291bGQgaW50cm9kdWNlIHN1YnRsZSBidWdzIG9yIHZ1bG5lcmFiaWxpdGllcywgc28gZnV6emluZyBpcyBwcm9iYWJseSBhIGdvb2QgbW92ZS5cblxuTmV4dCBzdGVwOiBsZXQgbWUgdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IHRyYWNrIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGZvciBUSVBDLiBJJ2xsIHNlYXJjaCBmb3IgYGNvbmZpZyBUSVBDYCBhbmQgZ2V0IGEgbGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAyOjM2Ljg4NTk2NDg2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDU5MTgwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeY29uZmlnIFRJUENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9LY29uZmlnPTY9bWVudWNvbmZpZyBUSVBDXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTIzLVxcbm5ldC90aXBjL0tjb25maWc6MjQ6Y29uZmlnIFRJUENfTUVESUFfSUJcXG5uZXQvdGlwYy9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIkluZmluaUJhbmQgbWVkaWEgdHlwZSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy0yOS1cXHQgIElQLW92ZXItSW5maW5pQmFuZCBkZXZpY2VzLlxcbm5ldC90aXBjL0tjb25maWc6MzA6Y29uZmlnIFRJUENfTUVESUFfVURQXFxubmV0L3RpcGMvS2NvbmZpZy0zMS1cXHRib29sIFxcXCJJUC9VRFAgbWVkaWEgdHlwZSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy0zNy1cXG5uZXQvdGlwYy9LY29uZmlnOjM4OmNvbmZpZyBUSVBDX0NSWVBUT1xcbm5ldC90aXBjL0tjb25maWctMzktXFx0Ym9vbCBcXFwiVElQQyBlbmNyeXB0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTUyLVxcbm5ldC90aXBjL0tjb25maWc6NTM6Y29uZmlnIFRJUENfRElBR1xcbm5ldC90aXBjL0tjb25maWctNTQtXFx0dHJpc3RhdGUgXFxcIlRJUEM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDI6MzYuOTM2NTYxMTA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyNDUyMzI2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIFRJUEMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBUSVBDYCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gaXRlbSB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBlbmFibGVzIGl0LiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IG1vZHVsZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIHdhbnQgdG8gY2hlY2sgYG5ldC90aXBjL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFsIGJ1aWxkIGxvZ2ljIHdpbGwgcmVzaWRlLiBUaW1lIHRvIGRpdmUgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk3MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAyOjQ3LjE4MTc5Njg2MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVElQQyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgVElQQ1xcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBUSVBDIFByb3RvY29sXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoZSBUcmFuc3BhcmVudCBJbnRlciBQcm9jZXNzIENvbW11bmljYXRpb24gKFRJUEMpIHByb3RvY29sIGlzXFxuICAxMTpcXHRcXHQgIHNwZWNpYWxseSBkZXNpZ25lZCBmb3IgaW50cmEgY2x1c3RlciBjb21tdW5pY2F0aW9uLiBUaGlzIHByb3RvY29sXFxuICAxMjpcXHRcXHQgIG9yaWdpbmF0ZXMgZnJvbSBFcmljc3NvbiB3aGVyZSBpdCBoYXMgYmVlbiB1c2VkIGluIGNhcnJpZXIgZ3JhZGVcXG4gIDEzOlxcdFxcdCAgY2x1c3RlciBhcHBsaWNhdGlvbnMgZm9yIG1hbnkgeWVhcnMuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVElQQywgc2VlIGh0dHA6Ly90aXBjLnNvdXJjZWZvcmdlLm5ldC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBUaGlzIHByb3RvY29sIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUgKCA9IGNvZGUgd2hpY2hcXG4gIDE4OlxcdFxcdCAgY2FuIGJlIGluc2VydGVkIGluIGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdVxcbiAgMTk6XFx0XFx0ICB3YW50KS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aXBjLiBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0XFxuICAyMDpcXHRcXHQgIGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlIGFuZCByZWFkIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMucnN0XFx1MDAzZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDI6NDcuMTgxODgxMTMxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2NTI4NjgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRpcGMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIGNoYW5nZSBoaW5nZXMgb24gdGhlIElORVQgaW1wbGVtZW50YXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCBuZXR3b3JrIGltcGxpY2F0aW9ucy4gTGV0J3MgZGlnIGludG8gdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBhbmQgc2VlIHdoYXQncyBiZWluZyBtb2RpZmllZC5cblxuVGhlIGNlbnRyYWwgcG9pbnQgaGVyZSBpcyB0aGUgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBmdW5jdGlvbi4gSXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgaXQncyB0aWdodGx5IHNjb3BlZCB3aXRoaW4gdGhlIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgbW9kdWxlLiBOb3csIHdobydzIGNhbGxpbmcgKnRoYXQqPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCB0byBzZWUgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cbkl0J3MgY2FsbGVkIGJ5IGBfX3RpcGNfc2h1dGRvd25gLCBgdGlwY19za19jb25uX3Byb3RvX3JjdmAsIGB0aXBjX3NrX3Byb3RvX3JjdmAsIGFuZCBgdGlwY19za19maWx0ZXJfY29ubmVjdGAuIFRoZXNlIGFyZSBhbGwgYWxzbyBzdGF0aWMsIGFuZCB0aGF0IHByb3ZpZGVzIHNvbWUgbGV2ZWwgb2YgZW5jYXBzdWxhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBfY2FsbHNfIHRob3NlIHRvIGZ1bGx5IGNvbXByZWhlbmQgdGhlIGZsb3cuIFRoaXMgdGVsbHMgbWUgd2hlcmUgdG8gY29uY2VudHJhdGUgbXkgZWZmb3J0cy4gTGV0J3Mgc2VlIHdoYXQgdGhvc2UgdXBzdHJlYW0gZnVuY3Rpb25zIGFyZSBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAyOjUxLjg0NzE2OTkzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE3MTI3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTEyNzM9c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEzMjctLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MTMyODogKiB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2IC0gcmVjZWl2ZSBhIGNvbm5lY3Rpb24gbW5nIHByb3RvY29sIG1lc3NhZ2VcXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzI5LSAqIEB0c2s6IHJlY2VpdmluZyBzb2NrZXRcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEzMzMtICovXFxubmV0L3RpcGMvc29ja2V0LmM6MTMzNDpzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzM1LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTIxNTc9c3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjE2OC1cXHRjYXNlIENPTk5fTUFOQUdFUjpcXG5uZXQvdGlwYy9zb2NrZXQuYzoyMTY5OlxcdFxcdHRpcGNfc2tfY29ubl9wcm90b19yY3YodHNrLCBza2IsIGlucHV0cSwgeG1pdHEpO1xcbm5ldC90aXBjL3NvY2tldC5jLTIxNzAtXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowMjo1MS44OTMzNDM4NzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgxMDgxODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC5cblxuKipBbmFseXppbmcgdGhlIERhdGEgRmxvdzogYHRpcGNfc2tfY29ubl9wcm90b19yY3ZgKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUgaGVyZSwgYHRpcGNfc2tfY29ubl9wcm90b19yY3ZgIGlzbid0IHNvbWUgc3RhbmRhbG9uZSBmdW5jdGlvbiwgaXQncyBleHBsaWNpdGx5IGNhbGxlZCBieSBgdGlwY19za19wcm90b19yY3ZgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHNvbWV0aGluZyBhYm91dCB0aGUgY29tbXVuaWNhdGlvbiBmbG93IHdpdGhpbiB0aGUgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXItUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBzb2NrZXQgbGF5ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aHkgdGhlIGRlc2lnbiBpcyB0aGlzIHdheS5cblxuU28sIGB0aXBjX3NrX3Byb3RvX3JjdmAgaXMgdGhlIGdlbmVyYWwgcmVjZWl2ZXIsIHRoZSBlbnRyeSBwb2ludCBmb3IgaW5jb21pbmcgZGF0YSBvbiBhIFRJUEMgc29ja2V0LCB3aGlsZSBgdGlwY19za19jb25uX3Byb3RvX3JjdmAgaXMgbW9yZSBzcGVjaWFsaXplZC4gVGhpcyBzdWdnZXN0cyB0aGF0IGB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2YCBpcyBoYW5kbGluZyByZWNlaXZlIG9wZXJhdGlvbnMgc3BlY2lmaWNhbGx5IGZvciBjb25uZWN0aW9uLW9yaWVudGVkIHNvY2tldHMgd2l0aGluIHRoZSBUSVBDIHByb3RvY29sLiBJdCBtaWdodCBiZSBoYW5kbGluZyBzdGF0ZSBjaGFuZ2VzLCBhY2tub3dsZWRnZW1lbnQsIG9yIGNvbm5lY3Rpb24tc3BlY2lmaWMgZGF0YS4gSSB3aWxsIGFzc3VtZSBpdCdzIGRlYWxpbmcgd2l0aCBjb25uZWN0aW9uLXNwZWNpZmljIGFzcGVjdHMuXG5cbkknZCBleHBlY3QgdG8gc2VlIGEgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBmb3IgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFzIHdlbGwgLSBJIG5lZWQgdG8gZXhwbG9yZSB0aGF0IGZvciBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlbnRpcmUgcHJvdG9jb2wuIEkgc2hvdWxkIGNoZWNrIGhvdyBjb25uZWN0aW9uLXJlbGF0ZWQgc3RhdGUgaXMgc3RvcmVkIGFuZCByZXRyaWV2ZWQgd2l0aGluIHRoZSBkYXRhIHN0cnVjdHVyZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE1NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAyOjU1LjM3NDQyNzk0NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNjEyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19za19wcm90b19yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvc29ja2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvc29ja2V0LmM9NDAzPXN0YXRpYyBpbnQgdGlwY19za19zb2NrX2VycihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb25nICp0aW1lb3V0KVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtNDMxLVxcdHdoaWxlICgocmNfID0gIShjb25kaXRpb25fKSkpIHtcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbm5ldC90aXBjL3NvY2tldC5jOjQzMjpcXHRcXHQvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIHRpcGNfc2tfcHJvdG9fcmN2KCkgKi8gICAgICAgICAgICBcXFxcXFxubmV0L3RpcGMvc29ja2V0LmMtNDMzLVxcdFxcdHNtcF9ybWIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTIxNTI9c3RhdGljIHZvaWQgdGlwY19zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTIxNTYtXFxubmV0L3RpcGMvc29ja2V0LmM6MjE1NzpzdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L3RpcGMvc29ja2V0LmMtMjE1OC1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yMzQ3PXN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzY0LVxcdGlmICh1bmxpa2VseSghbXNnX2lzZGF0YShoZHIpKSlcXG5uZXQvdGlwYy9zb2NrZXQuYzoyMzY1OlxcdFxcdHRpcGNfc2tfcHJvdG9fcmN2KHNrLCBcXHUwMDI2aW5wdXRxLCB4bWl0cSk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjM2Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDI6NTUuNDIwNTkxNzIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3OTA4ODI2OTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC5cblxuKipBbmFseXppbmcgdGhlIFJlY2VpdmVyIFBhdGggaW4gVElQQyBTb2NrZXRzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBUSVBDIHNvY2tldCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIHJlY2VpdmVyIHBhdGguIEkgc2VlIHRoYXQgYHRpcGNfc2tfcHJvdG9fcmN2YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBhY3R1YWwgaW5jb21pbmcgcGFja2V0IHByb2Nlc3NpbmcgZm9yIHRoZSBwcm90b2NvbC4gSXQncyB0aGUgY29yZSBvZiB0aGUgcmVjZWl2ZSBmdW5jdGlvbmFsaXR5LCB0aGUgXCJndXRzXCIgb2YgdGhlIHJlY2VpdmluZyBwcm9jZXNzLlxuXG5BbmQgSSBub3RpY2UgdGhhdCBgdGlwY19za19maWx0ZXJfcmN2YCBjYWxscyBpdC4gU28sIGBmaWx0ZXJfcmN2YCBtdXN0IGJlIGFjdGluZyBhcyBhIHByZS1wcm9jZXNzaW5nIHN0ZXAsIG9yIGEgZ2F0ZWtlZXBlciBvZiBzb3J0cy4gSXQgcHJvYmFibHkgZG9lcyBzb21lIHByZWxpbWluYXJ5IGNoZWNrcywgbGlrZSBmaWx0ZXJpbmcgb3IgcGVyaGFwcyBxdWV1ZSBtYW5hZ2VtZW50LCAqYmVmb3JlKiBwYXNzaW5nIHRoZSBwYWNrZXQgb24gdG8gYHRpcGNfc2tfcHJvdG9fcmN2YCBmb3IgdGhlIHNlcmlvdXMgd29yayBvZiBwcm90b2NvbCBoYW5kbGluZyBhbmQgc29ja2V0IGRlbGl2ZXJ5LiBJbnRlcmVzdGluZyBpbnRlcnBsYXk7IEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgdHdvIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZSByZWNlaXZpbmcgbWVjaGFuaXNtIGlzIHN0cnVjdHVyZWQuIFRoaXMgaXMgcG90ZW50aWFsbHkgd2hlcmUgdGhlIG1vcmUgc29waGlzdGljYXRlZCBmaWx0ZXJpbmcgYW5kIHBvbGljeSBhc3BlY3RzIGFyZSBiZWluZyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIFRJUEMgc3RhY2suIEl0IG1ha2VzIHNlbnNlLCBrZWVwIHRoZSBwcm90b2NvbCdzIHByaW1hcnkgcmVjZWl2aW5nIGxvZ2ljIGNsZWFuIGFuZCBmb2N1c2VkIGFuZCBoYXZlIHRoZSBwcmUtcHJvY2Vzc2luZyBiZSBtb3JlIGR5bmFtaWMsIGRlcGVuZGVudCBvbiB0aGUgY29uZmlndXJlZCBwb2xpY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowMzoxMy4zMjk0MjEyNzJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTMzNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfc2tfZmlsdGVyX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz0yMzE5PXN0YXRpYyB1bnNpZ25lZCBpbnQgcmN2YnVmX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTIzMzYtLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MjMzNzogKiB0aXBjX3NrX2ZpbHRlcl9yY3YgLSB2YWxpZGF0ZSBpbmNvbWluZyBtZXNzYWdlXFxubmV0L3RpcGMvc29ja2V0LmMtMjMzOC0gKiBAc2s6IHNvY2tldFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjM0Ni0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyMzQ3OnN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3RpcGMvc29ja2V0LmMtMjM0OC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzU4LVxcbm5ldC90aXBjL3NvY2tldC5jOjIzNTk6XFx0dHJhY2VfdGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIFRJUENfRFVNUF9BTEwsIFxcXCIgXFxcIik7XFxubmV0L3RpcGMvc29ja2V0LmMtMjM2MC1cXHRUSVBDX1NLQl9DQihza2IpLVxcdTAwM2VieXRlc19yZWFkID0gMDtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI0MTI9c3RhdGljIGludCB0aXBjX3NrX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI0MTktXFxubmV0L3RpcGMvc29ja2V0LmM6MjQyMDpcXHR0aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgXFx1MDAyNnhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDIxLVxcdGFkZGVkID0gc2tfcm1lbV9hbGxvY19nZXQoc2spIC0gYmVmb3JlO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjQzOT1zdGF0aWMgdm9pZCB0aXBjX3NrX2VucXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDU3LVxcdFxcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xcbm5ldC90aXBjL3NvY2tldC5jOjI0NTg6XFx0XFx0XFx0dGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIHhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDU5LVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowMzoxMy4zNzYzNTk0NDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUwMzEyNzkyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGZsb3csIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIHRoZSBUSVBDIFNvY2tldCBEYXRhIEZsb3cqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBUSVBDIHNvY2tldCBkYXRhIGZsb3cgaGluZ2VzIG9uIHRoZXNlIHRocmVlIGZ1bmN0aW9ucy4gYHRpcGNfc2tfZmlsdGVyX3JjdmAgaXMgdGhlIHBpdm90YWwgZnVuY3Rpb24gaGVyZS4gSSBzZWUgaXQgYXMgdGhlIGNlbnRyYWwgZ2F0ZWtlZXBlciwgYW5kIGl0J3MgaW52b2tlZCBpbiB0d28gZGlzdGluY3Qgc2NlbmFyaW9zOiBmaXJzdCwgdGhyb3VnaCBgdGlwY19za19iYWNrbG9nX3JjdmAgd2hpY2gsIG9mIGNvdXJzZSwgc2VydmVzIGFzIHRoZSBzdGFuZGFyZCBgc2tfYmFja2xvZ19yY3ZgIGNhbGxiYWNrIGZvciBUSVBDIHNvY2tldHPigJRlbnN1cmluZyBlZmZpY2llbnQgaGFuZGxpbmcgb2YgaW5jb21pbmcgZGF0YSB3aGVuIHRoZSBzb2NrZXQgaXNuJ3QgaW1tZWRpYXRlbHkgcmVhZHkgdG8gcHJvY2VzcyBpdC4gU2Vjb25kbHksIGB0aXBjX3NrX2ZpbHRlcl9yY3ZgIGFsc28gZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4gYHRpcGNfc2tfZW5xdWV1ZWAsIGltcGx5aW5nIHRoYXQgdGhlcmUncyBhIGZpbHRlcmluZy9wcm9jZXNzaW5nIHN0ZXAgaGFwcGVuaW5nICpiZWZvcmUqIHRoZSBkYXRhIGlzIHVsdGltYXRlbHkgZW5xdWV1ZWQgb250byB0aGUgc29ja2V0J3MgcmVjZWl2ZSBxdWV1ZS4gVGhlIGZhY3QgdGhhdCBgdGlwY19za19lbnF1ZXVlYCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGB0aXBjX3NrX3JjdmAgc3VnZ2VzdHMgdGhhdCB0aGlzIGluaXRpYWwgZW5xdWV1ZWluZyBhbmQgc3Vic2VxdWVudCBmaWx0ZXJpbmcgbWF5IGJlIGEgY3J1Y2lhbCBvcHRpbWl6YXRpb24gcG9pbnQgaW4gdGhlIGRhdGEgZmxvdy4gVGhpcyBkZXNpZ24sIHdpdGggYHRpcGNfc2tfZmlsdGVyX3JjdmAgYXQgaXRzIGNvcmUsIGxpa2VseSBhbGxvd3MgZm9yIHNvbWUgaW5pdGlhbCBpbnNwZWN0aW9uIGFuZCBmaWx0ZXJpbmcgb2YgdGhlIGluY29taW5nIGRhdGEsIHdoZXRoZXIgaXQncyBoZWxkIGluIHRoZSBiYWNrbG9nIG9yIGJlaW5nIGRpcmVjdGx5IGVucXVldWVkLiBJ4oCZbGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB3aGF0IGNyaXRlcmlhIGB0aXBjX3NrX2ZpbHRlcl9yY3ZgIHVzZXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBkYXRhIHByb2Nlc3NpbmcgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc0MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAzOjI4LjQwNzY0MTcyOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwOTEyODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19za19lbnF1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTI0MTI9c3RhdGljIGludCB0aXBjX3NrX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI0MjktLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MjQzMDogKiB0aXBjX3NrX2VucXVldWUgLSBleHRyYWN0IGFsbCBidWZmZXJzIHdpdGggZGVzdGluYXRpb24gJ2Rwb3J0JyBmcm9tXFxubmV0L3RpcGMvc29ja2V0LmMtMjQzMS0gKiAgICAgICAgICAgICAgICAgICBpbnB1dHEgYW5kIHRyeSBhZGRpbmcgdGhlbSB0byBzb2NrZXQgb3IgYmFja2xvZyBxdWV1ZVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjQzOC0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDM5OnN0YXRpYyB2b2lkIHRpcGNfc2tfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDQwLVxcdFxcdFxcdCAgICB1MzIgZHBvcnQsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjQ5Mz12b2lkIHRpcGNfc2tfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjUwOS1cXHRcXHRcXHRpZiAobGlrZWx5KHNwaW5fdHJ5bG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX2xvY2suc2xvY2spKSkge1xcbm5ldC90aXBjL3NvY2tldC5jOjI1MTA6XFx0XFx0XFx0XFx0dGlwY19za19lbnF1ZXVlKGlucHV0cSwgc2ssIGRwb3J0LCBcXHUwMDI2eG1pdHEpO1xcbm5ldC90aXBjL3NvY2tldC5jLTI1MTEtXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNrLVxcdTAwM2Vza19sb2NrLnNsb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDM6MjguNDUyNzM4ODU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDg2OTg5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgdGlwY19za19yY3ZgIGFuZCBDb25uZWN0aW9uIEZpbHRlcmluZyoqXG5cbk9rYXksIHNvIGB0aXBjX3NrX3JjdmAgaXNuJ3Qgc3RhdGljLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3cgSSBuZWVkIHRvIHNlZSBob3cgdGhhdCBpbXBhY3RzIGl0cyB1c2UgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIFRJUEMgc3RhY2suIEknbSBnb2luZyB0byBzaGlmdCBteSBmb2N1cyB0byBgdGlwY19za19maWx0ZXJfY29ubmVjdGAgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gZmlsdGVyaW5nIGxvZ2ljIGFuZCBpZGVudGlmeSBob3cgZGF0YSBpcyByZWNlaXZlZCB3aGVuIGNvbm5lY3Rpb24gZmlsdGVyaW5nIGlzIHVzZWQuIEkgYW50aWNpcGF0ZSBpdCdzIGxpa2VseSB1c2VkIHdpdGhpbiB0aGUgZnVuY3Rpb24gdG8gaGFuZGxlIGNvbm5lY3Rpb24gcmVxdWVzdHMgd2l0aCB0aG9zZSBkZWZpbmVkIGZpbHRlciBzcGVjaWZpY2F0aW9ucy4gTGV0IG1lIHRyYWNlIHRoZSBjYWxscyBhbmQgZGF0YSBmbG93IHRoZXJlLiBJdCdzIGxpa2VseSB0aGF0IGB0aXBjX3NrX3JjdmAgaXMgaW52b2tlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgd2l0aGluIHRoZSBzY29wZSBvZiBmaWx0ZXIgZXZhbHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU1NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAzOjMyLjk2MTQ0MDQ3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE5OTUzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NrX2ZpbHRlcl9jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTIxNTc9c3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjE5Ni0vKipcXG5uZXQvdGlwYy9zb2NrZXQuYzoyMTk3OiAqIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3QgLSBjaGVjayBpbmNvbWluZyBtZXNzYWdlIGZvciBhIGNvbm5lY3Rpb24tYmFzZWQgc29ja2V0XFxubmV0L3RpcGMvc29ja2V0LmMtMjE5OC0gKiBAdHNrOiBUSVBDIHNvY2tldFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjIwMi0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyMjAzOnN0YXRpYyBib29sIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3Qoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC90aXBjL3NvY2tldC5jLTIyMDQtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yMzQ3PXN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzc2LVxcdFxcdGxpbWl0ID0gcmN2YnVmX2xpbWl0KHNrLCBza2IpO1xcbm5ldC90aXBjL3NvY2tldC5jOjIzNzc6XFx0XFx0aWYgKChza19jb25uIFxcdTAwMjZcXHUwMDI2ICF0aXBjX3NrX2ZpbHRlcl9jb25uZWN0KHRzaywgc2tiLCB4bWl0cSkpIHx8XFxubmV0L3RpcGMvc29ja2V0LmMtMjM3OC1cXHRcXHQgICAgKCFza19jb25uIFxcdTAwMjZcXHUwMDI2IG1zZ19jb25uZWN0ZWQoaGRyKSkgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDM6MzMuMDA1NjQzODg3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjg1NTIzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRJUEMgU29ja2V0IEZpbHRlcmluZyBhbmQgU2h1dGRvd24gUGF0aHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgVElQQyBzb2NrZXQgZmlsdGVyaW5nIGFuZCBzaHV0ZG93biBhcmUgaGFuZGxlZCwgYW5kIGl0IHNlZW1zIGxpa2UgYHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3RgIGlzIGFuIGltcG9ydGFudCBmdW5jdGlvbi4gSSdtIG5vdGluZyB0aGF0IGl0J3MgY2FsbGVkIG5vdCBqdXN0IGZyb20gdGhlIGNvbm5lY3Rpb24gcHJvY2VzcywgYnV0IGFsc28gZnJvbSBgdGlwY19za19maWx0ZXJfcmN2YC4gVGhpcyBtZWFucyBpdCdzIGludm9sdmVkIGluIG1vcmUgdGhhbiBqdXN0IGluaXRpYWwgY29ubmVjdGlvbiBzZXR1cDsgaXQncyBhbHNvIHJlbGV2YW50IGR1cmluZyBtZXNzYWdlIHJlY2VwdGlvbi5cblxuTm93LCBjb25zaWRlcmluZyB0aGUgY29yZSBlbnRyeSBwb2ludHMgZm9yIGRhdGEgaGFuZGxpbmcsIEkgc2VlIHRocmVlIGtleSBwYXRoczpcblxuKiAgIGB0aXBjX3NrX3JjdmA6IFRoaXMgaXMgdGhlIHN0YW5kYXJkIHJlY2VpdmUgcGF0aC5cbiogICBgdGlwY19za19iYWNrbG9nX3JjdmA6IFRoaXMgb25lIGNvbWVzIGludG8gcGxheSB0aHJvdWdoIHRoZSBzb2NrZXQgYmFja2xvZyBtZWNoYW5pc20gKGBza19iYWNrbG9nX3JjdmApLlxuKiAgIGBfX3RpcGNfc2h1dGRvd25gOiAgVGhpcyBpcyB0cmlnZ2VyZWQgZHVyaW5nIHNodXRkb3duLCB1bHRpbWF0ZWx5IGNhbGxlZCB2aWEgdGhlIHNvY2tldCBvcGVyYXRpb24ncyBzaHV0ZG93biBmdW5jdGlvbiAoYHRpcGNfc2h1dGRvd25gIHdoaWNoIHdyYXBzIGBzb2NrZXRfb3BzLVx1MDAzZXNodXRkb3duYCkuXG5cblNpbmNlIHNodXRkb3duIGlzIGNyaXRpY2FsIGZvciBhIHdlbGwtYmVoYXZlZCBzeXN0ZW0sIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyBvZiBgX190aXBjX3NodXRkb3duYC4gVW5kZXJzdGFuZGluZyB3aGF0IGluaXRpYXRlcyBzaHV0ZG93biB3aWxsIGJlIGtleSBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGFzcGVjdCBvZiB0aGUgVElQQyBzb2NrZXQgaW1wbGVtZW50YXRpb24gb3BlcmF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNDUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDM6MzcuMDM0MTk4MjM5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI4MTY5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3RpcGNfc2h1dGRvd25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvc29ja2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvc29ja2V0LmM9NTQyPXN0YXRpYyB2b2lkIHRpcGNfc2tfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtNTQ5LS8qIENhbGxlciBzaG91bGQgaG9sZCBzb2NrZXQgbG9jayBmb3IgdGhlIHNvY2tldC4gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzo1NTA6c3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcXG5uZXQvdGlwYy9zb2NrZXQuYy01NTEte1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9NjI2PXN0YXRpYyBpbnQgdGlwY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy02NDEtXFx0dHJhY2VfdGlwY19za19yZWxlYXNlKHNrLCBOVUxMLCBUSVBDX0RVTVBfQUxMLCBcXFwiIFxcXCIpO1xcbm5ldC90aXBjL3NvY2tldC5jOjY0MjpcXHRfX3RpcGNfc2h1dGRvd24oc29jaywgVElQQ19FUlJfTk9fUE9SVCk7XFxubmV0L3RpcGMvc29ja2V0LmMtNjQzLVxcdHNrLVxcdTAwM2Vza19zaHV0ZG93biA9IFNIVVRET1dOX01BU0s7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yODA5PXN0YXRpYyBpbnQgdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjgxOS1cXHR0cmFjZV90aXBjX3NrX3NodXRkb3duKHNrLCBOVUxMLCBUSVBDX0RVTVBfQUxMLCBcXFwiIFxcXCIpO1xcbm5ldC90aXBjL3NvY2tldC5jOjI4MjA6XFx0X190aXBjX3NodXRkb3duKHNvY2ssIFRJUENfQ09OTl9TSFVURE9XTik7XFxubmV0L3RpcGMvc29ja2V0LmMtMjgyMS1cXHRzay1cXHUwMDNlc2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowMzozNy4wODE0ODIwMjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4MDE4MDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipNeSBGb2N1c2VkIExvb2sgYXQgdGhlIFRJUEMgU29ja2V0IE9wZXJhdGlvbnMqKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbi4gSSdtIHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIFRJUEMgc29ja2V0IG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgbGlmZWN5Y2xlIG9mIGEgY29ubmVjdGlvbi4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgYHRpcGNfcmVsZWFzZWAgYW5kIGB0aXBjX3NodXRkb3duYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gbWFuYWdpbmcgdGhlIHNvY2tldCdzIHJlc291cmNlcyBhbmQgaGFuZGxpbmcgaXRzIGNsb3N1cmUuIEtub3dpbmcgdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIHBhdGhzLiBUaGVyZWZvcmUsIG15IHByaW1hcnkgZm9jdXMgd2lsbCBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgdGlwY19za19yY3ZgLCBgdGlwY19yZWxlYXNlYCwgYW5kIGB0aXBjX3NodXRkb3duYC4gVGhlc2Ugd2lsbCB0ZWxsIHRoZSBzdG9yeSBvZiB0aGUgZGF0YSByZWNlcHRpb24sIGNvbm5lY3Rpb24gcmVsZWFzZSwgYW5kIHRlcm1pbmF0aW9uLiBJIHNlZSB0aGUgZmxvdyBmcm9tIG9uZSBwb2ludCB0byB0aGUgbmV4dCwgbGlrZSBhIHJpdmVyIG9mIGRhdGEsIGFuZCB0aGVzZSBhcmUgdGhlIGJhbmtzLCBvciBlZGdlcyBvZiB0aGF0IHJpdmVyLiBJJ20gd29uZGVyaW5nIGlmIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgaXMgaG93IGRhdGEgd2FpdGluZyB0byBiZSBzZW50IGlzIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGl0IGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaG93IG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LiBTbywgSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYHRpcGNfc2VuZG1zZ2Agb3IgYHRpcGNfc2VuZHN0cmVhbWAgYXJlIHRoZSBjYWxsZXJzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowMzo0MS4yNjE2NjQ0OTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjU5ODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfc2tfcHVzaF9iYWNrbG9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTE1OD1zdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xcbm5ldC90aXBjL3NvY2tldC5jOjE1OTpzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxcbm5ldC90aXBjL3NvY2tldC5jLTE2MC1cXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9NTUwPXN0YXRpYyB2b2lkIF9fdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZXJyb3IpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy01NjMtXFx0LyogUHVzaCBvdXQgZGVsYXllZCBtZXNzYWdlcyBpZiBpbiBOYWdsZSBtb2RlICovXFxubmV0L3RpcGMvc29ja2V0LmM6NTY0OlxcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIE5VTEwpO1xcbm5ldC90aXBjL3NvY2tldC5jLTU2NS1cXHQvKiBSZW1vdmUgcGVuZGluZyBTWU4gKi9cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTExOTI9dm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTI2OC1cXG5uZXQvdGlwYy9zb2NrZXQuYzoxMjY5Oi8qIHRpcGNfc2tfcHVzaF9iYWNrbG9nKCk6IHNlbmQgYWNjdW11bGF0ZWQgYnVmZmVycyBpbiBzb2NrZXQgd3JpdGUgcXVldWVcXG5uZXQvdGlwYy9zb2NrZXQuYy0xMjcwLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gc29ja2V0IGlzIGluIE5hZ2xlIG1vZGVcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEyNzItICovXFxubmV0L3RpcGMvc29ja2V0LmM6MTI3MzpzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxcbm5ldC90aXBjL3NvY2tldC5jLTEyNzQtXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTMzND1zdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEzNzgtXFx0XFx0d2FzX2NvbmcgPSB0c2tfY29ubl9jb25nKHRzayk7XFxubmV0L3RpcGMvc29ja2V0LmM6MTM3OTpcXHRcXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSwgeG1pdHEpO1xcbm5ldC90aXBjL3NvY2tldC5jLTEzODAtXFx0XFx0dHNrLVxcdTAwM2VzbnRfdW5hY2tlZCAtPSBtc2dfY29ubl9hY2soaGRyKTtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTIxNTc9c3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjE3Ni1cXHRcXHR3YWtldXAgPSB0cnVlO1xcbm5ldC90aXBjL3NvY2tldC5jOjIxNzc6XFx0XFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpO1xcbm5ldC90aXBjL3NvY2tldC5jLTIxNzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yMjAzPXN0YXRpYyBib29sIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3Qoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjI2Ny1cXHRcXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2c2stXFx1MDAzZXNrX3dyaXRlX3F1ZXVlKSlcXG5uZXQvdGlwYy9zb2NrZXQuYzoyMjY4OlxcdFxcdFxcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yMjY5LVxcdFxcdC8qIEFjY2VwdCBvbmx5IGNvbm5lY3Rpb24tYmFzZWQgbWVzc2FnZXMgc2VudCBieSBwZWVyICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjAzOjQxLjMwNjkyODAwM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjQ4Mjc3MjQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVElQQyBTb2NrZXQgQnVmZmVyIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFRJUEMgY29kZSwgYW5kIGl0IHNlZW1zIHRoaXMgY2hhbmdlLCB3aGlsZSBub3QgKmRpcmVjdGx5KiBpbiBgdGlwY19zZW5kbXNnYCwgaXMgZGVmaW5pdGVseSB0aWVkIHRvIGhvdyBidWZmZXJzIGFyZSBoYW5kbGVkIHdoZW4gTmFnbGUgbW9kZSBpcyBlbmFibGVkIG9uIGEgc29ja2V0LiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCwgd2hpY2ggaXMgd2hlcmUgd2UgbWFuYWdlIHRoZSBiYWNrbG9nIG9mIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQuIFNwZWNpZmljYWxseSwgaWYgdGhlIGB4bWl0cWAgKHRyYW5zbWl0IHF1ZXVlKSBpcyBwcmVzZW50LCBhbmQgdGhlIGRlc3RpbmF0aW9uIG5vZGUgaXMgdGhlIGxvY2FsIG5vZGUsIGl0IHNwbGljZXMgdGhlIGB0eHFgICh0cmFuc21pdCBxdWV1ZSkgdG8gdGhlIGB4bWl0cWAuIEl0J3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmV0dGVyLlxuXG5UbyBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIG5lZWQgdG8gY29uc2lkZXIgYSBmZXcgb3RoZXIgZnVuY3Rpb25zLiBGaXJzdCwgYHRpcGNfc2tfcmN2YCBpcyBrZXksIGFzIGl0J3MgdGhlIGNvcmUgcmVjZWl2ZSBmdW5jdGlvbiBmb3IgVElQQyBzb2NrZXRzLiBJJ2xsIGFsc28gY2hlY2sgYHRpcGNfc2tfYmFja2xvZ19yY3ZgIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJhY2tsb2cuIFRoZW4gdGhlcmUncyB0aGUgc29ja2V0IG9wZXJhdGlvbnMgdGhlbXNlbHZlczogYHRpcGNfcmVsZWFzZWAgYW5kIGB0aXBjX3NodXRkb3duYCwgSSBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC4gQW5kIGZpbmFsbHksIEkgc2hvdWxkIHJldmlldyBgdGlwY19zZW5kbXNnYCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAgYmVjYXVzZSB0aGV5J3JlIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBxdWV1aW5nIHRoZSBidWZmZXJzIHRoYXQgYXJlIHVsdGltYXRlbHkgaW52b2x2ZWQgaW4gdGhpcyBzcGxpY2luZyBvcGVyYXRpb24uIFVuZGVyc3RhbmRpbmcgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGlzIG5ldyBzcGxpY2UgbG9naWMgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCB0byBkZXRlcm1pbmluZyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE0NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowMzo1Ny43ODk3MDMxOTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTcwMjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvc29ja2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvc29ja2V0LmM9MTU3PXN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XFxubmV0L3RpcGMvc29ja2V0LmM6MTU4OnN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XFxubmV0L3RpcGMvc29ja2V0LmMtMTU5LXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz03OTE9c3RhdGljIF9fcG9sbF90IHRpcGNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTgzOS0gKlxcbm5ldC90aXBjL3NvY2tldC5jOjg0MDogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3NcXG5uZXQvdGlwYy9zb2NrZXQuYy04NDEtICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTkwNj1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zb2NrICp0c2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy05NTMtICpcXG5uZXQvdGlwYy9zb2NrZXQuYzo5NTQ6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXFxubmV0L3RpcGMvc29ja2V0LmMtOTU1LSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz05NTc9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfdW5pY2FzdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtOTk3LSAqXFxubmV0L3RpcGMvc29ja2V0LmM6OTk4OiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xcbm5ldC90aXBjL3NvY2tldC5jLTk5OS0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTAwMT1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF9hbnljYXN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xMDc4LSAqXFxubmV0L3RpcGMvc29ja2V0LmM6MTA3OTogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3NcXG5uZXQvdGlwYy9zb2NrZXQuYy0xMDgwLSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xMDgyPXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX2JjYXN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xMTUyLSAqXFxubmV0L3RpcGMvc29ja2V0LmM6MTE1MzogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3NcXG5uZXQvdGlwYy9zb2NrZXQuYy0xMTU0LSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xMzM0PXN0YXRpYyB2b2lkIHRpcGNfc2tfY29ubl9wcm90b19yY3Yoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTM5Mi0vKipcXG5uZXQvdGlwYy9zb2NrZXQuYzoxMzkzOiAqIHRpcGNfc2VuZG1zZyAtIHNlbmQgbWVzc2FnZSBpbiBjb25uZWN0aW9ubGVzcyBtYW5uZXJcXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzk0LSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDA0LSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjE0MDU6c3RhdGljIGludCB0aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDA2LVxcdFxcdFxcdHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDExLVxcdGxvY2tfc29jayhzayk7XFxubmV0L3RpcGMvc29ja2V0LmM6MTQxMjpcXHRyZXQgPSBfX3RpcGNfc2VuZG1zZyhzb2NrLCBtLCBkc3opO1xcbm5ldC90aXBjL3NvY2tldC5jLTE0MTMtXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTE0MTctXFxubmV0L3RpcGMvc29ja2V0LmM6MTQxODpzdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxcbm5ldC90aXBjL3NvY2tldC5jLTE0MTkte1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTU2NT1zdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTU4NS1cXHRpZiAodW5saWtlbHkoZGVzdCBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfc3RhdGUgPT0gVElQQ19PUEVOKSkge1xcbm5ldC90aXBjL3NvY2tldC5jOjE1ODY6XFx0XFx0cmMgPSBfX3RpcGNfc2VuZG1zZyhzb2NrLCBtLCBkbGVuKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTg3LVxcdFxcdGlmIChkbGVuIFxcdTAwMjZcXHUwMDI2IGRsZW4gPT0gcmMpIHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI1ODM9c3RhdGljIGludCB0aXBjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmRlc3QsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNjM3LVxcbm5ldC90aXBjL3NvY2tldC5jOjI2Mzg6XFx0XFx0cmVzID0gX190aXBjX3NlbmRtc2coc29jaywgXFx1MDAyNm0sIDApO1xcbm5ldC90aXBjL3NvY2tldC5jLTI2MzktXFx0XFx0aWYgKChyZXMgXFx1MDAzYyAwKSBcXHUwMDI2XFx1MDAyNiAocmVzICE9IC1FV09VTERCTE9DSykpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzY3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1zZ19vcHMgPSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzgxLVxcdC5nZXRzb2Nrb3B0X2l0ZXIgPSB0aXBjX2dldHNvY2tvcHQsXFxubmV0L3RpcGMvc29ja2V0LmM6MzM4MjpcXHQuc2VuZG1zZ1xcdD0gdGlwY19zZW5kbXNnLFxcbm5ldC90aXBjL3NvY2tldC5jLTMzODMtXFx0LnJlY3Ztc2dcXHQ9IHRpcGNfcmVjdm1zZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDM6NTcuOTI5NDA4NjkyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMTU2NjMwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLlxuXG4qKkZvY3VzIFN5bWJvbHMgZm9yIEV4YW1pbmF0aW9uKipcblxuUmlnaHQsIHNvIEkndmUgYmVlbiB0aGlua2luZyBhYm91dCB0aGUgY3JpdGljYWwgZm9jdXMgc3ltYm9scyB3ZSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byBoZXJlLiBCYXNlZCBvbiBteSBhbmFseXNpcywgdGhlc2UgYXJlIHRoZSBvbmVzIHRoYXQganVtcCBvdXQ6IGB0aXBjX3NrX3JjdmAsIGB0aXBjX3NlbmRtc2dgLCBgdGlwY19zZW5kc3RyZWFtYCwgYHRpcGNfcmVsZWFzZWAsIGFuZCBgdGlwY19zaHV0ZG93bmAuIFRoZXNlIGxvb2sgbGlrZSB0aGUga2V5IHBpZWNlcyBvZiB0aGUgcHV6emxlIHdoZW4gd2UncmUgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHN5c3RlbS4gTGV0J3MgbWFrZSBzdXJlIHdlIGluY2x1ZGUgYHRpcGNfc2VuZHN0cmVhbWAuIEkndmUgZ290IGEgaHVuY2ggaXQnbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA5OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjA0OjA0LjI0NTA3NTAzOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MDY0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19zZW5kc3RyZWFtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTE1Nj1zdGF0aWMgdm9pZCB0aXBjX3NrX3JlbW92ZShzdHJ1Y3QgdGlwY19zb2NrICp0c2spO1xcbm5ldC90aXBjL3NvY2tldC5jOjE1NzpzdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xcbm5ldC90aXBjL3NvY2tldC5jLTE1OC1zdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTQxOD1zdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTU0Mi0vKipcXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTQzOiAqIHRpcGNfc2VuZHN0cmVhbSAtIHNlbmQgc3RyZWFtLW9yaWVudGVkIGRhdGFcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTQ0LSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTUyLSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjE1NTM6c3RhdGljIGludCB0aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeilcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTU0LXtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTE1NTgtXFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTU5OlxcdHJldCA9IF9fdGlwY19zZW5kc3RyZWFtKHNvY2ssIG0sIGRzeik7XFxubmV0L3RpcGMvc29ja2V0LmMtMTU2MC1cXHRyZWxlYXNlX3NvY2soc2spO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTU2NC1cXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTY1OnN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXFxubmV0L3RpcGMvc29ja2V0LmMtMTU2Ni17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xNjYwPXN0YXRpYyBpbnQgdGlwY19zZW5kX3BhY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTY2NC1cXG5uZXQvdGlwYy9zb2NrZXQuYzoxNjY1OlxcdHJldHVybiB0aXBjX3NlbmRzdHJlYW0oc29jaywgbSwgZHN6KTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNjY2LX1cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI3Mjk9c3RhdGljIGludCB0aXBjX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdfc29jayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI3OTItXFx0aW92X2l0ZXJfa3ZlYyhcXHUwMDI2bS5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsIE5VTEwsIDAsIDApO1xcbm5ldC90aXBjL3NvY2tldC5jOjI3OTM6XFx0X190aXBjX3NlbmRzdHJlYW0obmV3X3NvY2ssIFxcdTAwMjZtLCAwKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNzk0LVxcdHJlbGVhc2Vfc29jayhuZXdfc2spO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MzQwNz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzQyMS1cXHQuZ2V0c29ja29wdF9pdGVyID0gdGlwY19nZXRzb2Nrb3B0LFxcbm5ldC90aXBjL3NvY2tldC5jOjM0MjI6XFx0LnNlbmRtc2dcXHQ9IHRpcGNfc2VuZHN0cmVhbSxcXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDIzLVxcdC5yZWN2bXNnXFx0PSB0aXBjX3JlY3ZzdHJlYW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjA0OjA0LjI5MDU4NTYzNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODg2MjYwNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gVElQQyBTb2NrZXQgT3BlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIFRJUEMgc29ja2V0IG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgc2VuZCBmdW5jdGlvbnMuIEkga25vdyBgdGlwY19zZW5kc3RyZWFtYCBhbmQgYHRpcGNfc2VuZG1zZ2AgYXJlIHRoZSBrZXkgb25lcyBmb3Igc3RyZWFtIGFuZCBtZXNzYWdlIHNvY2tldHMsIHJlc3BlY3RpdmVseS4gQW5kLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGB0aXBjX3NlbmRfcGFja2V0YCBoYW5kbGVzIHRoZSBwYWNrZXQgc29ja2V0cy4gSSBzaG91bGQgbWFrZSBhIG5vdGUgb2YgdGhpcyB0byBoYXZlIG15IGJhc2ljcyBzdHJhaWdodCBhbmQgdG8ga2VlcCB0aGluZ3Mgb3JnYW5pc2VkLlxuXG5Ob3csIGxldCdzIHNoaWZ0IGdlYXJzIGFuZCBkaWcgaW50byB0aGUgcmVjZWl2ZSBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBpcyBhY3R1YWxseSAqcmVjZWl2ZWQqIHdpdGhpbiB0aGlzIHdob2xlIGZyYW1ld29yay4gTGV0J3Mgc2VlIGhvdyBgdGlwY19za19yY3ZgIHdvcmtzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IGV2ZXJ5dGhpbmcgY29ubmVjdHMgb24gdGhlIHJlY2VpdmUgc2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNDoxMi4xNzY4NDk5NzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTY1Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfc2tfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTExOTI9dm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTI2NS1cXHR9XFxubmV0L3RpcGMvc29ja2V0LmM6MTI2NjpcXHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XFxubmV0L3RpcGMvc29ja2V0LmMtMTI2Ny19XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yNDM5PXN0YXRpYyB2b2lkIHRpcGNfc2tfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI0ODYtLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MjQ4NzogKiB0aXBjX3NrX3JjdiAtIGhhbmRsZSBhIGNoYWluIG9mIGluY29taW5nIGJ1ZmZlcnNcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDg4LSAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDkyLSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjI0OTM6dm9pZCB0aXBjX3NrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSlcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDk0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDQ6MTIuMjI2NDIxNDQ4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTI2MjMxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYHRpcGNfc2tfcmN2YCBVc2FnZSBpbiB0aGUgVElQQyBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBzbyBgdGlwY19za19yY3ZgIGlzIG5vbi1zdGF0aWMgYW5kIGFwcGFyZW50bHkgZWl0aGVyIGV4cG9ydGVkIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgYWN0aXZlbHkgdXRpbGl6ZWQgb3V0c2lkZSBvZiBpdHMgaW1tZWRpYXRlIGRlZmluaXRpb24uIFRoYXQncyBhIGtleSBkZXRhaWwuIFRoaXMgc3VnZ2VzdHMgaXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IG9yIGEgY29yZSBmdW5jdGlvbiB3aXRoaW4gdGhlIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgZnJhbWV3b3JrLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgbW9yZSBkZWVwbHkuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSdsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIG90aGVyIHNvdXJjZSBmaWxlcyB3aXRoaW4gdGhlIFRJUEMgY29kZWJhc2UgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgd2hlcmUgYW5kIGhvdyBgdGlwY19za19yY3ZgIGlzIGJlaW5nIGNhbGxlZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb250ZXh0IOKAkyB3aG8ncyBjYWxsaW5nIGl0LCB3aGF0IGFyZ3VtZW50cyBhcmUgYmVpbmcgcGFzc2VkLCBhbmQgd2hhdCdzIHRoZSBvdmVyYWxsIGZsb3cgb2YgY29udHJvbCB0aGF0IGJyaW5ncyB1cyBoZXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgd2lsbCBzaGVkIGxpZ2h0IG9uIHdoYXQgaXRzIGZ1bmN0aW9uYWxpdHkgaXMuIEtub3dpbmcgaXQgaXNuJ3Qgc3RhdGljIGxpbWl0cyB3aGVyZSBJIG5lZWQgdG8gbG9vaywgd2hpY2ggd2lsbCBzYXZlIHRpbWUuIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMgYW5kIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNDoxNy4xMTkwNDc1MjRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODQ4MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfc2tfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9iY2FzdC5jPTQzNj1pbnQgdGlwY19iY2FzdF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3RpcGMvYmNhc3QuYy00NjAtXFx0aWYgKCFza2JfcXVldWVfZW1wdHkoaW5wdXRxKSlcXG5uZXQvdGlwYy9iY2FzdC5jOjQ2MTpcXHRcXHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XFxubmV0L3RpcGMvYmNhc3QuYy00NjItXFxuLS1cXG5uZXQvdGlwYy9iY2FzdC5jPTQ3MD12b2lkIHRpcGNfYmNhc3RfYWNrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxuLS1cXG5uZXQvdGlwYy9iY2FzdC5jLTQ5MC1cXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShpbnB1dHEpKVxcbm5ldC90aXBjL2JjYXN0LmM6NDkxOlxcdFxcdHRpcGNfc2tfcmN2KG5ldCwgaW5wdXRxKTtcXG5uZXQvdGlwYy9iY2FzdC5jLTQ5Mi19XFxuLS1cXG5uZXQvdGlwYy9iY2FzdC5jPTQ5OD1pbnQgdGlwY19iY2FzdF9zeW5jX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxuLS1cXG5uZXQvdGlwYy9iY2FzdC5jLTUzMi1cXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShpbnB1dHEpKVxcbm5ldC90aXBjL2JjYXN0LmM6NTMzOlxcdFxcdHRpcGNfc2tfcmN2KG5ldCwgaW5wdXRxKTtcXG5uZXQvdGlwYy9iY2FzdC5jLTUzNC1cXHRyZXR1cm4gcmM7XFxuLS1cXG5uZXQvdGlwYy9iY2FzdC5jPTU1Nz12b2lkIHRpcGNfYmNhc3RfcmVtb3ZlX3BlZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpyY3ZfbClcXG4tLVxcbm5ldC90aXBjL2JjYXN0LmMtNTc0LVxcdGlmICghc2tiX3F1ZXVlX2VtcHR5KGlucHV0cSkpXFxubmV0L3RpcGMvYmNhc3QuYzo1NzU6XFx0XFx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xcbm5ldC90aXBjL2JjYXN0LmMtNTc2LX1cXG4tLVxcbm5ldC90aXBjL25vZGUuYz0xMDYyPXN0YXRpYyB2b2lkIHRpcGNfbm9kZV9saW5rX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbiwgaW50IGJlYXJlcl9pZCwgYm9vbCBkZWxldGUpXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMTA5My1cXHRcXHR0aXBjX2JlYXJlcl94bWl0KG4tXFx1MDAzZW5ldCwgYmVhcmVyX2lkLCBcXHUwMDI2eG1pdHEsIG1hZGRyLCBuKTtcXG5uZXQvdGlwYy9ub2RlLmM6MTA5NDpcXHR0aXBjX3NrX3JjdihuLVxcdTAwM2VuZXQsIFxcdTAwMjZsZS1cXHUwMDNlaW5wdXRxKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTA5NS19XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9MTYyNz1zdGF0aWMgdm9pZCB0aXBjX2x4Y194bWl0KHN0cnVjdCBuZXQgKnBlZXJfbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE2NDAtXFx0XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmxpc3QtXFx1MDAzZWxvY2spO1xcbm5ldC90aXBjL25vZGUuYzoxNjQxOlxcdFxcdFxcdHRpcGNfc2tfcmN2KHBlZXJfbmV0LCBsaXN0KTtcXG5uZXQvdGlwYy9ub2RlLmMtMTY0Mi1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMTY2NS1cXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bGlzdC1cXHUwMDNlbG9jayk7XFxubmV0L3RpcGMvbm9kZS5jOjE2NjY6XFx0XFx0dGlwY19za19yY3YocGVlcl9uZXQsIGxpc3QpO1xcbm5ldC90aXBjL25vZGUuYy0xNjY3LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0xNjg3PWludCB0aXBjX25vZGVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMTcwMC1cXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bGlzdC1cXHUwMDNlbG9jayk7XFxubmV0L3RpcGMvbm9kZS5jOjE3MDE6XFx0XFx0dGlwY19za19yY3YobmV0LCBsaXN0KTtcXG5uZXQvdGlwYy9ub2RlLmMtMTcwMi1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0yMDg2PXZvaWQgdGlwY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmIpXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMjIwMi1cXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2bGUtXFx1MDAzZWlucHV0cSkpXFxubmV0L3RpcGMvbm9kZS5jOjIyMDM6XFx0XFx0dGlwY19za19yY3YobmV0LCBcXHUwMDI2bGUtXFx1MDAzZWlucHV0cSk7XFxubmV0L3RpcGMvbm9kZS5jLTIyMDQtXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xMTkyPXZvaWQgdGlwY19za19tY2FzdF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICphcnJ2cSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEyNjUtXFx0fVxcbm5ldC90aXBjL3NvY2tldC5jOjEyNjY6XFx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xcbm5ldC90aXBjL3NvY2tldC5jLTEyNjctfVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjQzOT1zdGF0aWMgdm9pZCB0aXBjX3NrX2VucXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDg2LS8qKlxcbm5ldC90aXBjL3NvY2tldC5jOjI0ODc6ICogdGlwY19za19yY3YgLSBoYW5kbGUgYSBjaGFpbiBvZiBpbmNvbWluZyBidWZmZXJzXFxubmV0L3RpcGMvc29ja2V0LmMtMjQ4OC0gKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjQ5Mi0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDkzOnZvaWQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpXFxubmV0L3RpcGMvc29ja2V0LmMtMjQ5NC17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuaD01NT12b2lkIHRpcGNfc29ja2V0X3N0b3Aodm9pZCk7XFxubmV0L3RpcGMvc29ja2V0Lmg6NTY6dm9pZCB0aXBjX3NrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSk7XFxubmV0L3RpcGMvc29ja2V0LmgtNTctdm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLFxcbi0tXFxubmV0L3RpcGMvdG9wc3J2LmM9NjE0PXN0YXRpYyB2b2lkIHRpcGNfdG9wc3J2X2tlcm5fZXZ0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZXZlbnQgKmV2dClcXG4tLVxcbm5ldC90aXBjL3RvcHNydi5jLTYyOS1cXHR0aXBjX2xvb3BiYWNrX3RyYWNlKG5ldCwgXFx1MDAyNmV2dHEpO1xcbm5ldC90aXBjL3RvcHNydi5jOjYzMDpcXHR0aXBjX3NrX3JjdihuZXQsIFxcdTAwMjZldnRxKTtcXG5uZXQvdGlwYy90b3BzcnYuYy02MzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNDoxNy4xNjg4OTk0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTY2Mjk0NTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipGb2N1c2luZyBvbiBUSVBDIENvbW11bmljYXRpb24qKlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSwgYHRpcGNfc2tfcmN2YCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGNvcmUgVElQQyByZWNlaXZlciBmdW5jdGlvbnMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGNydWNpYWwgdGFzayBvZiByZWNlaXZpbmcgaW5jb21pbmcgVElQQyBtZXNzYWdlcy4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUga2V5IHRvIHBpbnBvaW50aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcywgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyB3aXRoaW4gdGhlIHJlY2VpdmVyIGltcGxlbWVudGF0aW9uLlxuXG5Ob3csIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIGFuZCBzZWUgaG93IHRoZSBtZXNzYWdlcyBhcnJpdmUgYXQgdGhlIHJlY2VpdmVyLCBJIHNob3VsZCBhbHNvIGltbWVkaWF0ZWx5IHNoaWZ0IG15IGF0dGVudGlvbiB0byBgdGlwY19zZW5kbXNnYCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAuIFRob3NlIHR3byBmdW5jdGlvbnMgYXJlIHByb2JhYmx5IHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBzZW5kaW5nIHNpZGUgb2YgdGhpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lc3NhZ2VzIGFyZSBjb25zdHJ1Y3RlZCwgcHV0IG9uIHRoZSB3aXJlLCBhbmQgd2hhdCBmbG93IGNvbnRyb2wgb3IgcmF0ZSBsaW1pdGluZywgaWYgYW55LCB0aGUgc2VuZGluZyBzaWRlIGVuZm9yY2VzLiBTZWVpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBjb21tdW5pY2F0aW9uIGZsb3csIHdoaWNoIGlzIGhvdyBJIGNhbiBkZXZlbG9wIGEgZ29vZCBwbGFuIHRvIG9wdGltaXplIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjAwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDQ6MjIuNzM1MTk4NTY1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUxNjYxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTE1Nz1zdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xcbm5ldC90aXBjL3NvY2tldC5jOjE1ODpzdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xcbm5ldC90aXBjL3NvY2tldC5jLTE1OS1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9NzkxPXN0YXRpYyBfX3BvbGxfdCB0aXBjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy04MzktICpcXG5uZXQvdGlwYy9zb2NrZXQuYzo4NDA6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXFxubmV0L3RpcGMvc29ja2V0LmMtODQxLSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz05MDY9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc29jayAqdHNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtOTUzLSAqXFxubmV0L3RpcGMvc29ja2V0LmM6OTU0OiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xcbm5ldC90aXBjL3NvY2tldC5jLTk1NS0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9OTU3PXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX3VuaWNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTk5Ny0gKlxcbm5ldC90aXBjL3NvY2tldC5jOjk5ODogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3NcXG5uZXQvdGlwYy9zb2NrZXQuYy05OTktICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTEwMDE9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfYW55Y2FzdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTA3OC0gKlxcbm5ldC90aXBjL3NvY2tldC5jOjEwNzk6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXFxubmV0L3RpcGMvc29ja2V0LmMtMTA4MC0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTA4Mj1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF9iY2FzdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTE1Mi0gKlxcbm5ldC90aXBjL3NvY2tldC5jOjExNTM6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXFxubmV0L3RpcGMvc29ja2V0LmMtMTE1NC0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTMzND1zdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEzOTItLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MTM5MzogKiB0aXBjX3NlbmRtc2cgLSBzZW5kIG1lc3NhZ2UgaW4gY29ubmVjdGlvbmxlc3MgbWFubmVyXFxubmV0L3RpcGMvc29ja2V0LmMtMTM5NC0gKiBAc29jazogc29ja2V0IHN0cnVjdHVyZVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTQwNC0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoxNDA1OnN0YXRpYyBpbnQgdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxubmV0L3RpcGMvc29ja2V0LmMtMTQwNi1cXHRcXHRcXHRzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTQxMS1cXHRsb2NrX3NvY2soc2spO1xcbm5ldC90aXBjL3NvY2tldC5jOjE0MTI6XFx0cmV0ID0gX190aXBjX3NlbmRtc2coc29jaywgbSwgZHN6KTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDEzLVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDE3LVxcbm5ldC90aXBjL3NvY2tldC5jOjE0MTg6c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDE5LXtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTE1NjU9c3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTE1ODUtXFx0aWYgKHVubGlrZWx5KGRlc3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRJUENfT1BFTikpIHtcXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTg2OlxcdFxcdHJjID0gX190aXBjX3NlbmRtc2coc29jaywgbSwgZGxlbik7XFxubmV0L3RpcGMvc29ja2V0LmMtMTU4Ny1cXHRcXHRpZiAoZGxlbiBcXHUwMDI2XFx1MDAyNiBkbGVuID09IHJjKSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yNTgzPXN0YXRpYyBpbnQgdGlwY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpkZXN0LFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjYzNy1cXG5uZXQvdGlwYy9zb2NrZXQuYzoyNjM4OlxcdFxcdHJlcyA9IF9fdGlwY19zZW5kbXNnKHNvY2ssIFxcdTAwMjZtLCAwKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNjM5LVxcdFxcdGlmICgocmVzIFxcdTAwM2MgMCkgXFx1MDAyNlxcdTAwMjYgKHJlcyAhPSAtRVdPVUxEQkxPQ0spKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MzM2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtc2dfb3BzID0ge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzM4MS1cXHQuZ2V0c29ja29wdF9pdGVyID0gdGlwY19nZXRzb2Nrb3B0LFxcbm5ldC90aXBjL3NvY2tldC5jOjMzODI6XFx0LnNlbmRtc2dcXHQ9IHRpcGNfc2VuZG1zZyxcXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzgzLVxcdC5yZWN2bXNnXFx0PSB0aXBjX3JlY3Ztc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjA0OjIyLjc4MjcxNzU2MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTA5MzM0NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUSVBDIFNvY2tldCBGdW5jdGlvbiBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0L3RpcGMvc29ja2V0LmNgIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYWNjZXNzIHBhdGhzIHRvIGl0cyBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIGB0aXBjX3NlbmRtc2dgIGFuZCBgdGlwY19zZW5kc3RyZWFtYC4gVGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGV5IGFyZSAqZGVjbGFyZWQqIGFzIGBzdGF0aWNgIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGZpbGUsIHdoaWNoIHVzdWFsbHkgaW1wbGllcyBsaW1pdGVkIHNjb3BlIGFuZCBwb3RlbnRpYWwgZm9yIGlubGluaW5nLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBjcml0aWNhbCBwb2ludCwgdGhleSBhcmUgYXNzaWduZWQgdG8gYHByb3RvX29wc2AuIFRoYXQncyBob3cgdGhlc2UgZnVuY3Rpb25zIGJlY29tZSByZWFjaGFibGUgdmlhIHN5c2NhbGxzLlxuXG5Ob3csIGlmIHRoZXkgKndlcmUqIHB1cmVseSBzdGF0aWMsIHRoZXJl4oCZcyBhIHNsaWdodCBjaGFuY2UgdGhlIGNvbXBpbGVyIG1pZ2h0IGlubGluZSB0aGVtLCBhbmQgdGhleSB3b3VsZG4ndCBoYXZlIHRoZWlyIG93biBkaXNjcmV0ZSBzeW1ib2wgYWRkcmVzcyBpbiB0aGUga2VybmVsIGltYWdlLiBCdXQgYmVpbmcgYXNzaWduZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYHByb3RvX29wc2AgcHJldmVudHMgdGhpcy4gVGhlIGNvbXBpbGVyICptdXN0KiB0cmVhdCB0aGVtIGFzIGRpc3RpbmN0LCBleHRlcm5hbC1mYWNpbmcgZW50cnkgcG9pbnRzLiBTbywgSSBuZWVkIHRvIGJlIHN1cmUgSSBhbSB0cmFjaW5nIHRoZSByaWdodCBmdW5jdGlvbnMuXG5cbldhaXQgYSBtaW51dGUsIGBfX3RpcGNfc2VuZG1zZ2AgYW5kIGBfX3RpcGNfc2VuZHN0cmVhbWAgYXJlIGFsc28gc3RhdGljLCBzbyBJIGNvdWxkIGJlIGdldHRpbmcgY29uZnVzZWQgdGhlcmUuIExldCdzIHN0aWNrIHdpdGggYHRpcGNfc2VuZG1zZ2AgYW5kIGB0aXBjX3NlbmRzdHJlYW1gIHRvIGF2b2lkIGNvbmZ1c2lvbi5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrIGEgbW9tZW50IGFuZCBmb2N1cyBvbiB0aGUgcmVjZWl2aW5nIHNpZGUuIGB0aXBjX3NrX3JjdmAgaXMgbm9uLXN0YXRpYywgc28gYXQgbGVhc3Qgb25lIHJlY2VpdmluZyBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlLiBJIG5lZWQgdG8gbm90ZSB0aGlzIGZvciBsYXRlci4gSSBhbSBhbHNvIHNlZWluZyB0aGF0IGB0aXBjX25vZGVfeG1pdGAgaXMgKmFsc28qIG5vbi1zdGF0aWMuIExvb2tpbmcgZnVydGhlciwgSSBzZWUgdGhhdCBgdGlwY19ub2RlX3htaXRgIGlzIGNhbGxlZCBmcm9tIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgdGlwY19ub2RlX3htaXRgIGZvciBhIG1vbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDQ6MjkuMjkyMDU0NDMzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU1MDE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX25vZGVfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmNhc3QuYz0yODg9c3RhdGljIGludCB0aXBjX3JjYXN0X3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpwa3RzLFxcbi0tXFxubmV0L3RpcGMvYmNhc3QuYy0zMDMtXFx0XFx0LyogQW55IG90aGVyIHJldHVybiB2YWx1ZSB0aGFuIC1FTElOS0NPTkcgaXMgaWdub3JlZCAqL1xcbm5ldC90aXBjL2JjYXN0LmM6MzA0OlxcdFxcdGlmICh0aXBjX25vZGVfeG1pdChuZXQsIFxcdTAwMjZfcGt0cywgZG5vZGUsIHNlbGVjdG9yKSA9PSAtRUxJTktDT05HKVxcbm5ldC90aXBjL2JjYXN0LmMtMzA1LVxcdFxcdFxcdCgqY29uZ19saW5rX2NudCkrKztcXG4tLVxcbm5ldC90aXBjL2NyeXB0by5jPTIyMzg9c3RhdGljIGludCB0aXBjX2NyeXB0b19rZXlfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2FlYWRfa2V5ICpza2V5LFxcbi0tXFxubmV0L3RpcGMvY3J5cHRvLmMtMjI2OC1cXHRpZiAoZG5vZGUpXFxubmV0L3RpcGMvY3J5cHRvLmM6MjI2OTpcXHRcXHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgXFx1MDAyNnBrdHMsIGRub2RlLCAwKTtcXG5uZXQvdGlwYy9jcnlwdG8uYy0yMjcwLVxcdGVsc2VcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYz0yMDY9dm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjIxLVxcdG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBcXHUwMDI2aGVhZCwgZG5vZGUsIFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZSwgc2Vxbm8pO1xcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyMjI6XFx0dGlwY19ub2RlX3htaXQobmV0LCBcXHUwMDI2aGVhZCwgZG5vZGUsIDApO1xcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yMjMtXFx0cmVhZF91bmxvY2tfYmgoXFx1MDAyNm50LVxcdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTE2Mjc9c3RhdGljIHZvaWQgdGlwY19seGNfeG1pdChzdHJ1Y3QgbmV0ICpwZWVyX25ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xNjc4LS8qKlxcbm5ldC90aXBjL25vZGUuYzoxNjc5OiAqIHRpcGNfbm9kZV94bWl0KCkgLSBnZW5lcmFsIGxpbmsgbGV2ZWwgZnVuY3Rpb24gZm9yIG1lc3NhZ2Ugc2VuZGluZ1xcbm5ldC90aXBjL25vZGUuYy0xNjgwLSAqIEBuZXQ6IHRoZSBhcHBsaWNhYmxlIG5ldCBuYW1lc3BhY2VcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xNjg2LSAqL1xcbm5ldC90aXBjL25vZGUuYzoxNjg3OmludCB0aXBjX25vZGVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxubmV0L3RpcGMvbm9kZS5jLTE2ODgtXFx0XFx0ICAgdTMyIGRub2RlLCBpbnQgc2VsZWN0b3IpXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMTc1Mi1cXG5uZXQvdGlwYy9ub2RlLmM6MTc1MzovKiB0aXBjX25vZGVfeG1pdF9za2IoKTogc2VuZCBzaW5nbGUgYnVmZmVyIHRvIGRlc3RpbmF0aW9uXFxubmV0L3RpcGMvbm9kZS5jLTE3NTQtICogQnVmZmVycyBzZW50IHZpYSB0aGlzIGZ1bmN0aW9uIGFyZSBnZW5lcmFsbHkgVElQQ19TWVNURU1fSU1QT1JUQU5DRVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE3NTgtICovXFxubmV0L3RpcGMvbm9kZS5jOjE3NTk6aW50IHRpcGNfbm9kZV94bWl0X3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBkbm9kZSxcXG5uZXQvdGlwYy9ub2RlLmMtMTc2MC1cXHRcXHQgICAgICAgdTMyIHNlbGVjdG9yKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE3NjUtXFx0X19za2JfcXVldWVfdGFpbChcXHUwMDI2aGVhZCwgc2tiKTtcXG5uZXQvdGlwYy9ub2RlLmM6MTc2NjpcXHR0aXBjX25vZGVfeG1pdChuZXQsIFxcdTAwMjZoZWFkLCBkbm9kZSwgc2VsZWN0b3IpO1xcbm5ldC90aXBjL25vZGUuYy0xNzY3LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTE3NzM9aW50IHRpcGNfbm9kZV9kaXN0cl94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMTc4MC1cXHRcXHRkbm9kZSA9IG1zZ19kZXN0bm9kZShidWZfbXNnKHNrYikpO1xcbm5ldC90aXBjL25vZGUuYzoxNzgxOlxcdFxcdHRpcGNfbm9kZV94bWl0X3NrYihuZXQsIHNrYiwgZG5vZGUsIHNlbGVjdG9yKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTc4Mi1cXHR9XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9MTc4Nj12b2lkIHRpcGNfbm9kZV9icm9hZGNhc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcmNfZGVzdHMpXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMTgxMy1cXHRcXHRtc2dfc2V0X2Rlc3Rub2RlKGJ1Zl9tc2codHhza2IpLCBkc3QpO1xcbm5ldC90aXBjL25vZGUuYzoxODE0OlxcdFxcdHRpcGNfbm9kZV94bWl0X3NrYihuZXQsIHR4c2tiLCBkc3QsIDApO1xcbm5ldC90aXBjL25vZGUuYy0xODE1LVxcdH1cXG4tLVxcbm5ldC90aXBjL25vZGUuaD05OT1pbnQgdGlwY19ub2RlX2dldF9saW5rbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBiZWFyZXJfaWQsIHUzMiBub2RlLFxcbm5ldC90aXBjL25vZGUuaC0xMDAtXFx0XFx0XFx0ICAgY2hhciAqbGlua25hbWUsIHNpemVfdCBsZW4pO1xcbm5ldC90aXBjL25vZGUuaDoxMDE6aW50IHRpcGNfbm9kZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwgdTMyIGRub2RlLFxcbm5ldC90aXBjL25vZGUuaC0xMDItXFx0XFx0ICAgaW50IHNlbGVjdG9yKTtcXG5uZXQvdGlwYy9ub2RlLmg9MTAzPWludCB0aXBjX25vZGVfZGlzdHJfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpO1xcbm5ldC90aXBjL25vZGUuaDoxMDQ6aW50IHRpcGNfbm9kZV94bWl0X3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBkZXN0LFxcbm5ldC90aXBjL25vZGUuaC0xMDUtXFx0XFx0ICAgICAgIHUzMiBzZWxlY3Rvcik7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yODY9c3RhdGljIHZvaWQgdGlwY19za19yZXNwb25kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI5Ny1cXHRzZWxlY3RvciA9IG1zZ19vcmlncG9ydChidWZfbXNnKHNrYikpO1xcbm5ldC90aXBjL3NvY2tldC5jOjI5ODpcXHR0aXBjX25vZGVfeG1pdF9za2Ioc29ja19uZXQoc2spLCBza2IsIGRub2RlLCBzZWxlY3Rvcik7XFxubmV0L3RpcGMvc29ja2V0LmMtMjk5LX1cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTU1MD1zdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtNTk3LVxcdFxcdGlmIChza2IpXFxubmV0L3RpcGMvc29ja2V0LmM6NTk4OlxcdFxcdFxcdHRpcGNfbm9kZV94bWl0X3NrYihuZXQsIHNrYiwgZG5vZGUsIHRzay1cXHUwMDNlcG9ydGlkKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy01OTktXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz05MDY9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc29jayAqdHNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtOTMxLVxcdC8qIFNlbmQgbWVzc2FnZSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjkzMjpcXHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgXFx1MDAyNnBrdHMsIGRub2RlLCB0c2stXFx1MDAzZXBvcnRpZCk7XFxubmV0L3RpcGMvc29ja2V0LmMtOTMzLVxcdGlmICh1bmxpa2VseShyYyA9PSAtRUxJTktDT05HKSkge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTI3Mz1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTMyMS1cXG5uZXQvdGlwYy9zb2NrZXQuYzoxMzIyOlxcdHJjID0gdGlwY19ub2RlX3htaXQobmV0LCB0eHEsIGRub2RlLCB0c2stXFx1MDAzZXBvcnRpZCk7XFxubmV0L3RpcGMvc29ja2V0LmMtMTMyMy1cXHRpZiAocmMgPT0gLUVMSU5LQ09ORylcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTE0MTg9c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTE1MjMtXFx0dHJhY2VfdGlwY19za19zZW5kbXNnKHNrLCBza2JfcGVlayhcXHUwMDI2cGt0cyksIFRJUENfRFVNUF9TS19TTkRRLCBcXFwiIFxcXCIpO1xcbm5ldC90aXBjL3NvY2tldC5jOjE1MjQ6XFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFxcdTAwMjZwa3RzLCBza2FkZHIubm9kZSwgdHNrLVxcdTAwM2Vwb3J0aWQpO1xcbm5ldC90aXBjL3NvY2tldC5jLTE1MjUtXFx0aWYgKHVubGlrZWx5KHJjID09IC1FTElOS0NPTkcpKSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xNTY1PXN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNjM0LVxcdFxcdFxcdFxcdFxcdCBUSVBDX0RVTVBfU0tfU05EUSwgXFxcIiBcXFwiKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoxNjM1OlxcdFxcdHJjID0gdGlwY19ub2RlX3htaXQobmV0LCB0eHEsIGRub2RlLCB0c2stXFx1MDAzZXBvcnRpZCk7XFxubmV0L3RpcGMvc29ja2V0LmMtMTYzNi1cXHRcXHRpZiAodW5saWtlbHkocmMgPT0gLUVMSU5LQ09ORykpIHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTE4Mjk9c3RhdGljIHZvaWQgdGlwY19za19zZW5kX2FjayhzdHJ1Y3QgdGlwY19zb2NrICp0c2spXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xODM2LVxcbm5ldC90aXBjL3NvY2tldC5jOjE4Mzc6XFx0dGlwY19ub2RlX3htaXRfc2tiKHNvY2tfbmV0KFxcdTAwMjZ0c2stXFx1MDAzZXNrKSwgc2tiLCB0c2tfcGVlcl9ub2RlKHRzayksXFxubmV0L3RpcGMvc29ja2V0LmMtMTgzOC1cXHRcXHRcXHQgICBtc2dfbGlua19zZWxlY3RvcihidWZfbXNnKHNrYikpKTtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI0OTM9dm9pZCB0aXBjX3NrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSlcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI1MzQtXFx0XFx0ZG5vZGUgPSBtc2dfZGVzdG5vZGUoYnVmX21zZyhza2IpKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoyNTM1OlxcdFxcdHRpcGNfbm9kZV94bWl0X3NrYihuZXQsIHNrYiwgZG5vZGUsIGRwb3J0KTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNTM2LVxcdH1cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI4Nzg9c3RhdGljIHZvaWQgdGlwY19za190aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjkwNC1cXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2bGlzdCkpXFxubmV0L3RpcGMvc29ja2V0LmM6MjkwNTpcXHRcXHRyYyA9IHRpcGNfbm9kZV94bWl0KHNvY2tfbmV0KHNrKSwgXFx1MDAyNmxpc3QsIHBub2RlLCB0c2stXFx1MDAzZXBvcnRpZCk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjkwNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDQ6MjkuMzM4NjA3MjlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwMTQ3NTEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgQ29uc2lkZXJhdGlvbnMgZm9yIFRJUEMgS2VybmVsIE1vZHVsZSBBbmFseXNpcyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IG15IGJlYXJpbmdzIG9uIHRoaXMgVElQQyBrZXJuZWwgbW9kdWxlLiBCYXNlZCBvbiB3aGF0IEkndmUgc2VlbiwgSSdtIHRoaW5raW5nIHRoYXQgYHRpcGNfbm9kZV94bWl0YCB3aWxsIGJlIGEgY3JpdGljYWwgZnVuY3Rpb24gdG8gcmVhbGx5IHVuZGVyc3RhbmQuIEl0J3MgcHJvYmFibHkgdGhlIGNvcmUgdHJhbnNtaXNzaW9uIGZ1bmN0aW9uLiBJJ2xsIGFsc28gd2FudCB0byBsb29rIGF0IGB0aXBjX3NrX3JjdmAsIGFzIHRoYXQncyBsaWtlbHkgdGhlIHJlY2VpdmUgcGF0aC4gQW5kIHNpbmNlIHRoaXMgaXMgcmVsYXRlZCB0byBzb2NrZXQgb3BlcmF0aW9ucywgYHRpcGNfc2VuZG1zZ2AgYW5kIGB0aXBjX3NlbmRzdHJlYW1gIGFyZSBjbGVhcmx5IHJlbGV2YW50IOKAkyB0aGUgZmFjdCB0aGF0IHRoZXkgYXJlIGV4cG9ydGVkIGFzIHNvY2tldCBvcGVyYXRpb25zIGlzIGEgbWFqb3IgY2x1ZSBhcyB0byB0aGVpciBzaWduaWZpY2FuY2UuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYG5ldC90aXBjL3NvY2tldC5jYCBmaWxlLiBHaXZlbiB0aGUgY29udGV4dCwgdGhhdCdzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgdGlwY19zZW5kbXNnYCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1MDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNDozNC4zNDAwODQ2MzdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDU2OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz0xNTc9c3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTg6c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTktc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTc5MT1zdGF0aWMgX19wb2xsX3QgdGlwY19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtODM5LSAqXFxubmV0L3RpcGMvc29ja2V0LmM6ODQwOiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xcbm5ldC90aXBjL3NvY2tldC5jLTg0MS0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9OTA2PXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX21zZyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NvY2sgKnRzayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTk1My0gKlxcbm5ldC90aXBjL3NvY2tldC5jOjk1NDogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3NcXG5uZXQvdGlwYy9zb2NrZXQuYy05NTUtICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTk1Nz1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF91bmljYXN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy05OTctICpcXG5uZXQvdGlwYy9zb2NrZXQuYzo5OTg6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXFxubmV0L3RpcGMvc29ja2V0LmMtOTk5LSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xMDAxPXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX2FueWNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEwNzgtICpcXG5uZXQvdGlwYy9zb2NrZXQuYzoxMDc5OiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xcbm5ldC90aXBjL3NvY2tldC5jLTEwODAtICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTEwODI9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfYmNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTExNTItICpcXG5uZXQvdGlwYy9zb2NrZXQuYzoxMTUzOiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xcbm5ldC90aXBjL3NvY2tldC5jLTExNTQtICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTEzMzQ9c3RhdGljIHZvaWQgdGlwY19za19jb25uX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzkyLS8qKlxcbm5ldC90aXBjL3NvY2tldC5jOjEzOTM6ICogdGlwY19zZW5kbXNnIC0gc2VuZCBtZXNzYWdlIGluIGNvbm5lY3Rpb25sZXNzIG1hbm5lclxcbm5ldC90aXBjL3NvY2tldC5jLTEzOTQtICogQHNvY2s6IHNvY2tldCBzdHJ1Y3R1cmVcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTE0MDQtICovXFxubmV0L3RpcGMvc29ja2V0LmM6MTQwNTpzdGF0aWMgaW50IHRpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbm5ldC90aXBjL3NvY2tldC5jLTE0MDYtXFx0XFx0XFx0c3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTE0MTEtXFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoxNDEyOlxcdHJldCA9IF9fdGlwY19zZW5kbXNnKHNvY2ssIG0sIGRzeik7XFxubmV0L3RpcGMvc29ja2V0LmMtMTQxMy1cXHRyZWxlYXNlX3NvY2soc2spO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTQxNy1cXG5uZXQvdGlwYy9zb2NrZXQuYzoxNDE4OnN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXFxubmV0L3RpcGMvc29ja2V0LmMtMTQxOS17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xNTY1PXN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTg1LVxcdGlmICh1bmxpa2VseShkZXN0IFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUSVBDX09QRU4pKSB7XFxubmV0L3RpcGMvc29ja2V0LmM6MTU4NjpcXHRcXHRyYyA9IF9fdGlwY19zZW5kbXNnKHNvY2ssIG0sIGRsZW4pO1xcbm5ldC90aXBjL3NvY2tldC5jLTE1ODctXFx0XFx0aWYgKGRsZW4gXFx1MDAyNlxcdTAwMjYgZGxlbiA9PSByYykge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjU4Mz1zdGF0aWMgaW50IHRpcGNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqZGVzdCxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI2MzctXFxubmV0L3RpcGMvc29ja2V0LmM6MjYzODpcXHRcXHRyZXMgPSBfX3RpcGNfc2VuZG1zZyhzb2NrLCBcXHUwMDI2bSwgMCk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjYzOS1cXHRcXHRpZiAoKHJlcyBcXHUwMDNjIDApIFxcdTAwMjZcXHUwMDI2IChyZXMgIT0gLUVXT1VMREJMT0NLKSlcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTMzNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcyA9IHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTMzODEtXFx0LmdldHNvY2tvcHRfaXRlciA9IHRpcGNfZ2V0c29ja29wdCxcXG5uZXQvdGlwYy9zb2NrZXQuYzozMzgyOlxcdC5zZW5kbXNnXFx0PSB0aXBjX3NlbmRtc2csXFxubmV0L3RpcGMvc29ja2V0LmMtMzM4My1cXHQucmVjdm1zZ1xcdD0gdGlwY19yZWN2bXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNDozNC4zODMxNDYwODRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAzNzYzOTQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVElQQyBGdW5jdGlvbiBTeW1ib2wgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZXNlIFRJUEMgZnVuY3Rpb25zIHJlbGF0ZSB0byBlYWNoIG90aGVyLCBwYXJ0aWN1bGFybHkgZm9yIHBvdGVudGlhbCBhbmFseXNpcyBvciBpbnN0cnVtZW50YXRpb24uIEkgc2VlIHRoYXQgYHRpcGNfc2VuZG1zZ2AgYW5kIGB0aXBjX3NlbmRzdHJlYW1gIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYCwgYnV0IHRoZW4gdGhleSdyZSBhc3NpZ25lZCB0byBgcHJvdG9fb3BzYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgbWFrZXMgdGhlbSBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVzZSB0aGVtLCBidXQgdGhlbiBJIHJlYWxpemUgdGhhdCAqYmVjYXVzZSogdGhleSdyZSBgc3RhdGljYCwgdGhlcmUncyBhIGNoYW5jZSB0aGV5IHdvbid0IGJlIGV4cG9ydGVkIGFzIHN5bWJvbHMgaW4gdGhlIGtlcm5lbCBpZiB0aGUgY29tcGlsZXIgaW5saW5lcyB0aGVtLiBCdXQgd2FpdC4uLiBzaW5jZSB0aGV5J3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgcHJvdG9fb3BzYCwgdGhleSAqY2FuJ3QqIGJlIGlubGluZWQuIFRoYXQgY2hhbmdlcyB0aGluZ3M7IGl0J3MgbG9va2luZyBwcm9taXNpbmcuXG5cbkhvd2V2ZXIsIGB0aXBjX3NrX3JjdmAgaXMgZGVmaW5pdGVseSBub24tc3RhdGljIGFuZCBleHBvcnRlZC4gVGhhdCdzIGEgc29saWQsIGd1YXJhbnRlZWQgc3ltYm9sIHRvIHdvcmsgd2l0aC4gU28sIGxldCdzIGluY2x1ZGUgdGhhdCBpbiB0aGUgc2V0LCBhbG9uZyB3aXRoIGB0aXBjX25vZGVfeG1pdGAsIGB0aXBjX3NlbmRtc2dgLCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgZml0cyBpbnRvIGFsbCB0aGlzLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIHJlYWNoIGl0IGZyb20gYHRpcGNfc2VuZG1zZ2Agb3IgYHRpcGNfc2VuZHN0cmVhbWA/IExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgY2FsbGVkIGZyb20gYSBmZXcgcGxhY2VzLiBJIHNlZSBgdGlwY19za19jb25uX3Byb3RvX3JjdmAsIGB0aXBjX3NrX3Byb3RvX3JjdmAsIGB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0YCwgYW5kIGBfX3RpcGNfc2h1dGRvd25gLiBIbW0sIHNvIGl04oCZcyBwcmVkb21pbmFudGx5IGZyb20gdGhlIHJlY2VpdmUgcGF0aCAoc28sIHBvdGVudGlhbGx5LCBgdGlwY19za19yY3ZgKSBhbmQgdGhlIHNodXRkb3duIHBhdGggKHVzaW5nIGB0aXBjX3NodXRkb3duYCBvciBgdGlwY19yZWxlYXNlYCkuIFRoYXQgaW1wbGllcyB0aGF0IGB0aXBjX3NrX3JjdmAsIGB0aXBjX3JlbGVhc2VgLCBhbmQgYHRpcGNfc2h1dGRvd25gIGFyZSBhY3R1YWxseSB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzIHRvIHN0YXJ0IHdpdGguIFRoZXkgb2ZmZXIgdGhlIG1vc3QgY29tcGxldGUgdmlldy5cblxuQWxyaWdodCwgbGV0J3MgdmVyaWZ5IHRob3NlLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgYmVoYXZpb3Igb2YgYm90aCBgdGlwY19yZWxlYXNlYCBhbmQgYHRpcGNfc2h1dGRvd25gLiBUaGV5IGJlY29tZSB0aGUgY3JpdGljYWwgc3ltYm9scyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI1NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNDo0MS40MjA3ODc3ODZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTE5MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz0xNDg9c3RhdGljIHZvaWQgdGlwY19zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzayk7XFxubmV0L3RpcGMvc29ja2V0LmM6MTQ5OnN0YXRpYyBpbnQgdGlwY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xcbm5ldC90aXBjL3NvY2tldC5jLTE1MC1zdGF0aWMgdm9pZCB0aXBjX3NrX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9NTUwPXN0YXRpYyB2b2lkIF9fdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZXJyb3IpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy02MTAtLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6NjExOiAqIHRpcGNfcmVsZWFzZSAtIGRlc3Ryb3kgYSBUSVBDIHNvY2tldFxcbm5ldC90aXBjL3NvY2tldC5jLTYxMi0gKiBAc29jazogc29ja2V0IHRvIGRlc3Ryb3lcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTYyNS0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzo2MjY6c3RhdGljIGludCB0aXBjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG5uZXQvdGlwYy9zb2NrZXQuYy02Mjcte1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MzM2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtc2dfb3BzID0ge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzM2OS1cXHQuZmFtaWx5XFx0XFx0PSBBRl9USVBDLFxcbm5ldC90aXBjL3NvY2tldC5jOjMzNzA6XFx0LnJlbGVhc2VcXHQ9IHRpcGNfcmVsZWFzZSxcXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzcxLVxcdC5iaW5kXFx0XFx0PSB0aXBjX2JpbmQsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHMgPSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzg5LVxcdC5mYW1pbHlcXHRcXHQ9IEFGX1RJUEMsXFxubmV0L3RpcGMvc29ja2V0LmM6MzM5MDpcXHQucmVsZWFzZVxcdD0gdGlwY19yZWxlYXNlLFxcbm5ldC90aXBjL3NvY2tldC5jLTMzOTEtXFx0LmJpbmRcXHRcXHQ9IHRpcGNfYmluZCxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTM0MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTM0MDktXFx0LmZhbWlseVxcdFxcdD0gQUZfVElQQyxcXG5uZXQvdGlwYy9zb2NrZXQuYzozNDEwOlxcdC5yZWxlYXNlXFx0PSB0aXBjX3JlbGVhc2UsXFxubmV0L3RpcGMvc29ja2V0LmMtMzQxMS1cXHQuYmluZFxcdFxcdD0gdGlwY19iaW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNDo0MS40NjczMTA1NzJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMDg3Njc0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBUSVBDIFNodXRkb3duIE1lY2hhbmlzbSoqXG5cbkFscmlnaHQsIHNvIGB0aXBjX3JlbGVhc2VgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gQnV0IGhvbGQgb24sIGl0J3MgZ2V0dGluZyBhc3NpZ25lZCB0byBgcHJvdG9fb3BzYC4gVGhhdCdzIGEgY2xhc3NpYyBjb2RlIG9wdGltaXphdGlvbiwga2VlcGluZyB0aGUgZnVuY3Rpb24gc2NvcGVkIHdoZXJlIGl0J3Mgb25seSBuZWVkZWQuIEFuZCB0aGUgc2FtZSBwYXR0ZXJuIGdvZXMgZm9yIGB0aXBjX3NodXRkb3duYC4gVGhpcyBzY3JlYW1zIHRoYXQgdGhlcmUncyBzb21lIGtpbmQgb2YgbWFuYWdlZCBsaWZlY3ljbGUgb3IgY2xlYW51cCBzZXF1ZW5jZSBhdCBwbGF5LlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgdGhlbiBoYXMgdG8gYmUgYHRpcGNfc2h1dGRvd25gLiBMZXQncyBkaWcgaW50byB0aGF0IGFuZCBzZWUgcHJlY2lzZWx5IGhvdyBpdCdzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dC4gV2UgbmVlZCB0byBhc2NlcnRhaW4gd2hlcmUgaXQncyBiZWluZyBjYWxsZWQsIHVuZGVyIHdoYXQgY29uZGl0aW9ucywgYW5kIHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBkZWFsbG9jYXRlZCBkdXJpbmcgaXRzIGV4ZWN1dGlvbi4gVGhlIHdob2xlIHRoaW5nIGhpbmdlcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjbGVhbnVwIHByb2Nlc3MsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhhdCB0aGUgcmVsZWFzZSBmdW5jdGlvbiBpcyBhbHNvIHN0YXRpYyBhbmQgYXNzaWduZWQuIFRoaXMgaXMgYSB0ZWxsIG9mIGltcG9ydGFudCByZXNvdXJjZSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzYzNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjA0OjQ1Ljc3ODE4OTU1M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNjg4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19zaHV0ZG93blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz01NDI9c3RhdGljIHZvaWQgdGlwY19za19jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy01NDktLyogQ2FsbGVyIHNob3VsZCBob2xkIHNvY2tldCBsb2NrIGZvciB0aGUgc29ja2V0LiAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjU1MDpzdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKVxcbm5ldC90aXBjL3NvY2tldC5jLTU1MS17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz02MjY9c3RhdGljIGludCB0aXBjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTY0MS1cXHR0cmFjZV90aXBjX3NrX3JlbGVhc2Uoc2ssIE5VTEwsIFRJUENfRFVNUF9BTEwsIFxcXCIgXFxcIik7XFxubmV0L3RpcGMvc29ja2V0LmM6NjQyOlxcdF9fdGlwY19zaHV0ZG93bihzb2NrLCBUSVBDX0VSUl9OT19QT1JUKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy02NDMtXFx0c2stXFx1MDAzZXNrX3NodXRkb3duID0gU0hVVERPV05fTUFTSztcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI3Mjk9c3RhdGljIGludCB0aXBjX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdfc29jayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI4MDAtLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MjgwMTogKiB0aXBjX3NodXRkb3duIC0gc2h1dGRvd24gc29ja2V0IGNvbm5lY3Rpb25cXG5uZXQvdGlwYy9zb2NrZXQuYy0yODAyLSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yODA4LSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjI4MDk6c3RhdGljIGludCB0aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpXFxubmV0L3RpcGMvc29ja2V0LmMtMjgxMC17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yODE5LVxcdHRyYWNlX3RpcGNfc2tfc2h1dGRvd24oc2ssIE5VTEwsIFRJUENfRFVNUF9BTEwsIFxcXCIgXFxcIik7XFxubmV0L3RpcGMvc29ja2V0LmM6MjgyMDpcXHRfX3RpcGNfc2h1dGRvd24oc29jaywgVElQQ19DT05OX1NIVVRET1dOKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yODIxLVxcdHNrLVxcdTAwM2Vza19zaHV0ZG93biA9IFNIVVRET1dOX01BU0s7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzY3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1zZ19vcHMgPSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzc4LVxcdC5saXN0ZW5cXHRcXHQ9IHNvY2tfbm9fbGlzdGVuLFxcbm5ldC90aXBjL3NvY2tldC5jOjMzNzk6XFx0LnNodXRkb3duXFx0PSB0aXBjX3NodXRkb3duLFxcbm5ldC90aXBjL3NvY2tldC5jLTMzODAtXFx0LnNldHNvY2tvcHRcXHQ9IHRpcGNfc2V0c29ja29wdCxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTMzODc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcyA9IHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTMzOTgtXFx0Lmxpc3RlblxcdFxcdD0gdGlwY19saXN0ZW4sXFxubmV0L3RpcGMvc29ja2V0LmM6MzM5OTpcXHQuc2h1dGRvd25cXHQ9IHRpcGNfc2h1dGRvd24sXFxubmV0L3RpcGMvc29ja2V0LmMtMzQwMC1cXHQuc2V0c29ja29wdFxcdD0gdGlwY19zZXRzb2Nrb3B0LFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MzQwNz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzQxOC1cXHQubGlzdGVuXFx0XFx0PSB0aXBjX2xpc3RlbixcXG5uZXQvdGlwYy9zb2NrZXQuYzozNDE5OlxcdC5zaHV0ZG93blxcdD0gdGlwY19zaHV0ZG93bixcXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDIwLVxcdC5zZXRzb2Nrb3B0XFx0PSB0aXBjX3NldHNvY2tvcHQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjA0OjQ1LjgyNDQ2MTc4OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzcyODUzNzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRJUEMgQ29kZSBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGB0aXBjX3NrX3JjdmAsIGB0aXBjX3JlbGVhc2VgLCBhbmQgYHRpcGNfc2h1dGRvd25gIGFyZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLiBUaGV5IHNlZW0gdG8gcmVwcmVzZW50IGNvcmUgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXItUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBzeXN0ZW0uIFRoZSBjb25maWd1cmF0aW9uIGZsYWcgSSBuZWVkIHRvIGVuc3VyZSBpcyBlbmFibGVkIGlzIGBUSVBDYC4gSSBzaG91bGQgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGRlcGVuZGVudCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YsIGJ1dCBiYXNlZCBvbiB0aGUga2VybmVsIGNvbmZpZyBmaWxlLCBgbmV0L3RpcGMvS2NvbmZpZ2AgcmVsaWVzIG9uIGBJTkVUYCwgYnV0IGBUSVBDYCBzaG91bGQgYmUgdGhlIG9ubHkgcmVxdWlyZW1lbnQuXG5cbkhlcmUncyBteSBkaXN0aWxsZWQgdW5kZXJzdGFuZGluZzogSSBkZWVtIHRoaXMgY29kZSBcIldvcnRoRnV6emluZ1wiIGR1ZSB0byB0aGUgZnVuY3Rpb25hbCBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBgRm9jdXNTeW1ib2xzYCAtIHNwZWNpZmljYWxseSwgYHRpcGNfc2tfcmN2YCwgYHRpcGNfcmVsZWFzZWAsIGFuZCBgdGlwY19zaHV0ZG93bmAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGluY2x1ZGUgYFRJUENgLiBUaGUgY29yZSByZWFzb24gZm9yIHRoaXMgYXNzZXNzbWVudCBsaWVzIGluIHRoZSBwYXRjaCBpdHNlbGY6IGl0J3MgbW9kaWZ5aW5nIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgdG8gc3BsaWNlIHRoZSB0cmFuc21pdCBxdWV1ZSB0byB0aGUgcmVjZWl2ZSBvdXRwdXQgcXVldWUsIGJ1dCBvbmx5IHdoZW4gdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBzYW1lIG5vZGUuIFRoaXMgaXMgYSBiZWhhdmlvcmFsIGNoYW5nZSB3aXRoaW4gdGhlIFRJUEMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIGFuZCB1c2Vyc3BhY2UgYWNjZXNzIHRocm91Z2ggVElQQyBzb2NrZXRzIG1ha2VzIHRoaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDczNSwiT3V0cHV0VG9rZW5zIjoxMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDQ6NTIuMTk3MzE5NDIyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY2MDg3MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX3NrX3JjdlwiLFxuICAgIFwidGlwY19yZWxlYXNlXCIsXG4gICAgXCJ0aXBjX3NodXRkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIHRvIHRoZSByZWNlaXZlIG91dHB1dCBxdWV1ZSBpZiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIG93biBub2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVElQQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX3NrX3JjdlwiLFxuICAgIFwidGlwY19yZWxlYXNlXCIsXG4gICAgXCJ0aXBjX3NodXRkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIHRvIHRoZSByZWNlaXZlIG91dHB1dCBxdWV1ZSBpZiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIG93biBub2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVElQQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNDo1Mi4yNzM5MzUwODZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzE1MTI0MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6MDQ6NTIuMjc0NDM2NzI2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0MzE0NjE3NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBmdW5jdGlvbiB0byBhY2NlcHQgYW4gYWRkaXRpb25hbCBgeG1pdHFgIGFyZ3VtZW50LiBJbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IHRyYW5zbWl0dGluZyBwYWNrZXRzIHZpYSBgdGlwY19ub2RlX3htaXRgLCBpdCBzcGxpY2VzIHRoZSBzb2NrZXQncyB3cml0ZSBxdWV1ZSBpbnRvIHRoZSBwcm92aWRlZCBgeG1pdHFgIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcXVldWUgbWFuYWdlbWVudCBjaGFuZ2UsIGxpa2VseSBpbnRlbmRlZCB0byBmaXggYSBsb2NraW5nIGlzc3VlLCBkZWFkbG9jaywgb3IgcmVjdXJzaW9uIHByb2JsZW0gZHVyaW5nIHBhY2tldCByZWNlcHRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkZWFkbG9ja3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZmZGY0OGFiMjBjODRhNDNhNzdmNmUwMzU2NjNmY2VmYTEyODBlMDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE3OjAyOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuY1xuaW5kZXggZTU2NDM0MWUwMjE2ZC4uMzNkNzQ0ZGM1MTRmNSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL3NvY2tldC5jXG4rKysgYi9uZXQvdGlwYy9zb2NrZXQuY1xuQEAgLTE1Niw3ICsxNTYsOCBAQCBzdGF0aWMgaW50IHRpcGNfc2tfaW5zZXJ0KHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XG4gc3RhdGljIHZvaWQgdGlwY19za19yZW1vdmUoc3RydWN0IHRpcGNfc29jayAqdHNrKTtcbiBzdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xuIHN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayk7XG4rc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjayxcbitcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XG4gc3RhdGljIGludCB0aXBjX3dhaXRfZm9yX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgbG9uZyAqdGltZW9fcCk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcztcbkBAIC01NjAsNyArNTYxLDcgQEAgc3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcbiBcdFx0XHRcdFx0ICAgICF0c2tfY29ubl9jb25nKHRzaykpKTtcbiBcbiBcdC8qIFB1c2ggb3V0IGRlbGF5ZWQgbWVzc2FnZXMgaWYgaW4gTmFnbGUgbW9kZSAqL1xuLVx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7XG4rXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCBOVUxMKTtcbiBcdC8qIFJlbW92ZSBwZW5kaW5nIFNZTiAqL1xuIFx0X19za2JfcXVldWVfcHVyZ2UoXHUwMDI2c2stXHUwMDNlc2tfd3JpdGVfcXVldWUpO1xuIFxuQEAgLTEyNjcsOCArMTI2OCwxMCBAQCB2b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsXG4gXG4gLyogdGlwY19za19wdXNoX2JhY2tsb2coKTogc2VuZCBhY2N1bXVsYXRlZCBidWZmZXJzIGluIHNvY2tldCB3cml0ZSBxdWV1ZVxuICAqICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gc29ja2V0IGlzIGluIE5hZ2xlIG1vZGVcbisgKiBAeG1pdHE6IHJlY2VpdmUgb3V0cHV0IHF1ZXVlLCBvciBOVUxMIG91dHNpZGUgcmVjZWl2ZSBjb250ZXh0XG4gICovXG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaylcbitzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxuK1x0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuIHtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgKnR4cSA9IFx1MDAyNnRzay1cdTAwM2Vzay5za193cml0ZV9xdWV1ZTtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVla190YWlsKHR4cSk7XG5AQCAtMTMxMCw2ICsxMzEzLDEyIEBAIHN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spXG4gXHRcdHRzay1cdTAwM2Vwa3RfY250ICs9IHNrYl9xdWV1ZV9sZW4odHhxKTtcbiBcdHRzay1cdTAwM2VzbnRfdW5hY2tlZCArPSB0c2stXHUwMDNlc25kX2JhY2tsb2c7XG4gXHR0c2stXHUwMDNlc25kX2JhY2tsb2cgPSAwO1xuK1xuK1x0aWYgKHhtaXRxIFx1MDAyNlx1MDAyNiBpbl9vd25fbm9kZShuZXQsIGRub2RlKSkge1xuK1x0XHRza2JfcXVldWVfc3BsaWNlX3RhaWxfaW5pdCh0eHEsIHhtaXRxKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIHR4cSwgZG5vZGUsIHRzay1cdTAwM2Vwb3J0aWQpO1xuIFx0aWYgKHJjID09IC1FTElOS0NPTkcpXG4gXHRcdHRzay1cdTAwM2Vjb25nX2xpbmtfY250ID0gMTtcbkBAIC0xMzY3LDcgKzEzNzYsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRnb3RvIGV4aXQ7XG4gXG4gXHRcdHdhc19jb25nID0gdHNrX2Nvbm5fY29uZyh0c2spO1xuLVx0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSk7XG4rXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgbXNnX25hZ2xlX2FjayhoZHIpLCB4bWl0cSk7XG4gXHRcdHRzay1cdTAwM2VzbnRfdW5hY2tlZCAtPSBtc2dfY29ubl9hY2soaGRyKTtcbiBcdFx0aWYgKHRzay1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfQkxPQ0tfRkxPV0NUTClcbiBcdFx0XHR0c2stXHUwMDNlc25kX3dpbiA9IG1zZ19hZHZfd2luKGhkcik7XG5AQCAtMjE2NSw3ICsyMTc0LDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRzbXBfd21iKCk7XG4gXHRcdHRzay1cdTAwM2Vjb25nX2xpbmtfY250LS07XG4gXHRcdHdha2V1cCA9IHRydWU7XG4tXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuK1x0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBHUk9VUF9QUk9UT0NPTDpcbiBcdFx0dGlwY19ncm91cF9wcm90b19yY3YoZ3JwLCBcdTAwMjZ3YWtldXAsIGhkciwgaW5wdXRxLCB4bWl0cSk7XG5AQCAtMjI1Niw3ICsyMjY1LDcgQEAgc3RhdGljIGJvb2wgdGlwY19za19maWx0ZXJfY29ubmVjdChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgVElQQ19FU1RBQkxJU0hFRDpcbiBcdFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfd3JpdGVfcXVldWUpKVxuLVx0XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuK1x0XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTtcbiBcdFx0LyogQWNjZXB0IG9ubHkgY29ubmVjdGlvbi1iYXNlZCBtZXNzYWdlcyBzZW50IGJ5IHBlZXIgKi9cbiBcdFx0aWYgKGxpa2VseShjb25fbXNnIFx1MDAyNlx1MDAyNiAhZXJyIFx1MDAyNlx1MDAyNiBwcG9ydCA9PSBvcG9ydCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBwbm9kZSA9PSBvbm9kZSkpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjA0OjUyLjI3NDQzNzY2NloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDMxNDU4NjQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgU29ja2V0IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIFRJUEMgc29ja2V0IHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBtb2RpZmllcyBgdGlwY19za19wdXNoX2JhY2tsb2dgIGluIGBuZXQvdGlwYy9zb2NrZXQuY2AgYnkgYWRkaW5nIGEgbmV3IGFyZ3VtZW50LCBgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHFgLiBUaGUgY29yZSBsb2dpYyBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgdHJhbnNtaXQgcXVldWUgKGB0eHFgKSBpcyBoYW5kbGVkIHdoZW4gdGhlIGRlc3RpbmF0aW9uIG5vZGUgaXMgdGhlIGxvY2FsIG5vZGUuIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgY2FsbGluZyBgdGlwY19ub2RlX3htaXRgLCB0aGUgcGF0Y2ggbm93IHNwbGljZXMgdGhlIGB0eHFgIGludG8gdGhlIHByb3ZpZGVkIGB4bWl0cWAuXG5cblRoaXMgaW1tZWRpYXRlbHkgc2NyZWFtcyBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yLCBtb3JlIGxpa2VseSwgYSBmaXggZm9yIGEgc3VidGxlIGJ1Zy4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBgdGlwY19ub2RlX3htaXRgIHdhcyBiZWluZyBjYWxsZWQgaW4gYSBwcm9ibGVtYXRpYyBjb250ZXh0LCBwZXJoYXBzIHdpdGggdGhlIHdyb25nIGxvY2tzIGhlbGQgb3IgaW4gYSBkZWVwIHJlY3Vyc2lvbiB0aGF0IGNvdWxkIGxlYWQgdG8gZGVhZGxvY2tzLiBBbHRlcm5hdGl2ZWx5LCB0aGUgbmV3IGFwcHJvYWNoIG1pZ2h0IHNpbXBseSBiZSBkZWZlcnJpbmcgbG9jYWwgZGVsaXZlcnkgZm9yIG9wdGltaXphdGlvbiBwdXJwb3NlcyBieSBhcHBlbmRpbmcgdG8gYHhtaXRxYCB3aGljaCBpcyB0aGVuIHByb2Nlc3NlZCBsYXRlci5cblxuVGhlIGZhY3QgdGhhdCBgdGlwY19za19wdXNoX2JhY2tsb2dgIGlzIGNhbGxlZCBmcm9tIGB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2YCwgYHRpcGNfc2tfcHJvdG9fcmN2YCwgYHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3RgLCBhbmQgYF9fdGlwY19zaHV0ZG93bmAgZ2l2ZXMgbWUgYSBjbGVhcmVyIHBpY3R1cmU6IHRoaXMgcGF0Y2ggaXMgYmVpbmcgYXBwbGllZCBpbiAqcmVjZWl2ZSogY29udGV4dHMuIFNvLCB0aGV5IGFyZSBwYXNzaW5nIGB4bWl0cWAgdG8gYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBpbiB0aGVzZSByZWNlaXZlIHBhdGhzLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQ/IE5vLCBmcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBpcyBwdXJlbHkgYSBsb2dpYyBjaGFuZ2Ugd2l0aGluIHF1ZXVlIG1hbmFnZW1lbnQuIEl0J3MgYWJvdXQgc3BsaWNpbmcgYSBxdWV1ZSB2ZXJzdXMgaW1tZWRpYXRlIHRyYW5zbWlzc2lvbi4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYSBjb25jZXJuIGhlcmUuIEtBU0FOL0xPQ0tERVAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyByZWxhdGVkIHRvIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyAoY2FsbGluZyBgdGlwY19ub2RlX3htaXRgIHdoaWxlIGhvbGRpbmcgYSBsb2NrIHRoYXQgc2hvdWxkbid0IGJlIGhlbGQsIG9yIGF2b2lkaW5nIGRlZXAgcmVjdXJzaW9uKS5cblxuSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcXVldWUgbWFuYWdlbWVudCBhbHRlcmF0aW9uLiBJJ2xsIGRvdWJsZSBjaGVjayB0aGUgY29kZSBzbmlwcGV0IG9uZSBtb3JlIHRpbWUgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5NCwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzowNTowNi41ODkwMjcyODFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgdGlwY19za19wdXNoX2JhY2tsb2dgIGZ1bmN0aW9uIHRvIGFjY2VwdCBhbiBhZGRpdGlvbmFsIGB4bWl0cWAgYXJndW1lbnQuIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgdHJhbnNtaXR0aW5nIHBhY2tldHMgdmlhIGB0aXBjX25vZGVfeG1pdGAsIGl0IHNwbGljZXMgdGhlIHNvY2tldCdzIHdyaXRlIHF1ZXVlIGludG8gdGhlIHByb3ZpZGVkIGB4bWl0cWAgaWYgdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBsb2NhbCBub2RlLiBUaGlzIGlzIGEgY29udHJvbCBmbG93IGFuZCBxdWV1ZSBtYW5hZ2VtZW50IGNoYW5nZSwgbGlrZWx5IGludGVuZGVkIHRvIGZpeCBhIGxvY2tpbmcgaXNzdWUsIGRlYWRsb2NrLCBvciByZWN1cnNpb24gcHJvYmxlbSBkdXJpbmcgcGFja2V0IHJlY2VwdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRlYWRsb2Nrcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgZnVuY3Rpb24gdG8gYWNjZXB0IGFuIGFkZGl0aW9uYWwgYHhtaXRxYCBhcmd1bWVudC4gSW5zdGVhZCBvZiBpbW1lZGlhdGVseSB0cmFuc21pdHRpbmcgcGFja2V0cyB2aWEgYHRpcGNfbm9kZV94bWl0YCwgaXQgc3BsaWNlcyB0aGUgc29ja2V0J3Mgd3JpdGUgcXVldWUgaW50byB0aGUgcHJvdmlkZWQgYHhtaXRxYCBpZiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIGxvY2FsIG5vZGUuIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgYW5kIHF1ZXVlIG1hbmFnZW1lbnQgY2hhbmdlLCBsaWtlbHkgaW50ZW5kZWQgdG8gZml4IGEgbG9ja2luZyBpc3N1ZSwgZGVhZGxvY2ssIG9yIHJlY3Vyc2lvbiBwcm9ibGVtIGR1cmluZyBwYWNrZXQgcmVjZXB0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow4l92h[1] Phase: Succeeded StartedAt: 2026-08-07 17:05:17 +0000 UTC FinishedAt: 2026-08-07 17:05:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 17:05:17 +0000 UTC FinishedAt: 2026-08-07 17:05:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2] Phase: Succeeded StartedAt: 2026-08-07 17:05:17 +0000 UTC FinishedAt: 2026-08-07 20:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:05:17 +0000 UTC FinishedAt: 2026-08-07 20:45:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:05:17 +0000 UTC FinishedAt: 2026-08-07 17:05:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:05:17 +0000 UTC FinishedAt: 2026-08-07 17:05:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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-workflow4l92h/series-workflow4l92h-convert-artifact-804748823/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:05:27 +0000 UTC FinishedAt: 2026-08-07 17:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:05:27 +0000 UTC FinishedAt: 2026-08-07 17:22:03 +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:*8cc84889-182e-42ce-9df3-bd0a1f135380,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-workflow4l92h/series-workflow4l92h-convert-artifact-804748823/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": "005a1f48-b7ea-453f-a40e-fd5aba93510b", "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-workflow4l92h/series-workflow4l92h-build-action-4163517293/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:05:27 +0000 UTC FinishedAt: 2026-08-07 17:21:53 +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:*8cc84889-182e-42ce-9df3-bd0a1f135380,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-workflow4l92h/series-workflow4l92h-convert-artifact-804748823/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": "005a1f48-b7ea-453f-a40e-fd5aba93510b", "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-workflow4l92h/series-workflow4l92h-build-action-4163517293/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:22:03 +0000 UTC FinishedAt: 2026-08-07 17:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:22:03 +0000 UTC FinishedAt: 2026-08-07 17:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:22:03 +0000 UTC FinishedAt: 2026-08-07 17:22:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:22:03 +0000 UTC FinishedAt: 2026-08-07 17:22:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-workflow4l92h/series-workflow4l92h-convert-artifact-1591460166/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:22:13 +0000 UTC FinishedAt: 2026-08-07 17:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:22:13 +0000 UTC FinishedAt: 2026-08-07 17:24:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*005a1f48-b7ea-453f-a40e-fd5aba93510b,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-workflow4l92h/series-workflow4l92h-build-action-4163517293/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-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:24:19 +0000 UTC FinishedAt: 2026-08-07 17:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:24:19 +0000 UTC FinishedAt: 2026-08-07 17:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:24:19 +0000 UTC FinishedAt: 2026-08-07 17:40:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:24:19 +0000 UTC FinishedAt: 2026-08-07 17:40:39 +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:*8cc84889-182e-42ce-9df3-bd0a1f135380,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-workflow4l92h/series-workflow4l92h-convert-artifact-1591460166/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": "3ab3bb76-5f50-4398-ae31-a9d5b52ac780", "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-workflow4l92h/series-workflow4l92h-build-action-2454209674/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:24:19 +0000 UTC FinishedAt: 2026-08-07 17:40:28 +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:*8cc84889-182e-42ce-9df3-bd0a1f135380,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-workflow4l92h/series-workflow4l92h-convert-artifact-1591460166/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": "3ab3bb76-5f50-4398-ae31-a9d5b52ac780", "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-workflow4l92h/series-workflow4l92h-build-action-2454209674/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:40:39 +0000 UTC FinishedAt: 2026-08-07 17:40:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:40:39 +0000 UTC FinishedAt: 2026-08-07 17:40:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:40:39 +0000 UTC FinishedAt: 2026-08-07 17:42:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:40:39 +0000 UTC FinishedAt: 2026-08-07 17:42:35 +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:*3ab3bb76-5f50-4398-ae31-a9d5b52ac780,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-workflow4l92h/series-workflow4l92h-build-action-2454209674/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-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:42:45 +0000 UTC FinishedAt: 2026-08-07 20:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:42:45 +0000 UTC FinishedAt: 2026-08-07 20:45:13 +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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*005a1f48-b7ea-453f-a40e-fd5aba93510b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3ab3bb76-5f50-4398-ae31-a9d5b52ac780,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-workflow4l92h/series-workflow4l92h-build-action-4163517293/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-workflow4l92h/series-workflow4l92h-build-action-2454209674/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:42:45 +0000 UTC FinishedAt: 2026-08-07 17:42:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:42:45 +0000 UTC FinishedAt: 2026-08-07 17:42:51 +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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4l92h/series-workflow4l92h-convert-artifact-2053122059/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:42:45 +0000 UTC FinishedAt: 2026-08-07 17:42:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:42:45 +0000 UTC FinishedAt: 2026-08-07 17:42:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:42:45 +0000 UTC FinishedAt: 2026-08-07 17:42:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:42:55 +0000 UTC FinishedAt: 2026-08-07 20:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4l92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_sk_rcv","tipc_release","tipc_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"512afa2b-c6b0-4a5a-a82a-ee92b73f04dc","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-08-07 17:42:55 +0000 UTC FinishedAt: 2026-08-07 20:45:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*005a1f48-b7ea-453f-a40e-fd5aba93510b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3ab3bb76-5f50-4398-ae31-a9d5b52ac780,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-workflow4l92h/series-workflow4l92h-build-action-4163517293/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-workflow4l92h/series-workflow4l92h-build-action-2454209674/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-workflow4l92h/series-workflow4l92h-convert-artifact-2053122059/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,}