Name: series-workflowrntdq Phase: Succeeded StartedAt: 2026-08-27 12:28:47 +0000 UTC FinishedAt: 2026-08-27 16:14:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[0] Phase: Succeeded StartedAt: 2026-08-27 12:28:47 +0000 UTC FinishedAt: 2026-08-27 12:33:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 12:28:47 +0000 UTC FinishedAt: 2026-08-27 12:33:10 +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": "502d801f0ab03e4f32f9a33d203154ce84887921", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "QRTR", "QRTR_TUN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "502d801f0ab03e4f32f9a33d203154ce84887921", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "QRTR", "QRTR_TUN" ], "series_id": "d01f1395-9ca2-438c-82b3-276bcd4b372d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "qrtr_node_enqueue", "qrtr_hello_work", "qrtr_endpoint_register", "qrtr_bcast_enqueue" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1FSVFImIzM0OywKICAgICYjMzQ7UVJUUl9UVU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtxcnRyX25vZGVfZW5xdWV1ZSYjMzQ7LAogICAgJiMzNDtxcnRyX2hlbGxvX3dvcmsmIzM0OywKICAgICYjMzQ7cXJ0cl9lbmRwb2ludF9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtxcnRyX2JjYXN0X2VucXVldWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgc2VuZGluZyBvZiBRUlRSIEhFTExPIHBhY2tldHMgZnJvbSB0aGUgbmFtZXNlcnZpY2UgKHVzaW5nIGEga2VybmVsIHNvY2tldCkgdG8gdGhlIGNvcmUgbGF5ZXIgKHVzaW5nIGRpcmVjdCBza2IgYWxsb2NhdGlvbiBhbmQgZW5xdWV1ZWluZykuIFRoZSBuZXcgSEVMTE8gcGFja2V0IHBheWxvYWQgaXMgYWxsb2NhdGVkIHZpYSBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldCgpYCwgd2hpY2ggdXNlcyBgc2tiX3B1dF96ZXJvKClgIHRvIGVuc3VyZSB0aGUgbWVtb3J5IGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgcGFja2V0IGhlYWRlciBpcyBhbHNvIGV4cGxpY2l0bHkgYW5kIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgaW4gYHFydHJfbm9kZV9lbnF1ZXVlKClgLiBXaGlsZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIHZhcmlhYmxlcyBhcmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBpbiBgcXJ0cl9oZWxsb193b3JrKClgLCB0aGV5IGFyZSBvbmx5IHVzZWQgdG8gcmVhZCB0aGUgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAgZmllbGRzOyB0aGUgc3RydWN0dXJlcyB0aGVtc2VsdmVzIGFyZSBuZXZlciBjb3BpZWQgdG8gdGhlIHNrYiBvciB1c2Vyc3BhY2UsIG1lYW5pbmcgYW55IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBhcmUgc2FmZWx5IGlnbm9yZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgSEVMTE8gaGFuZHNoYWtlIGxvZ2ljIGZyb20gdGhlIHVzZXJzcGFjZS9ucyBsYXllciB0byB0aGUgY29yZSBsYXllciBpbiB0aGUgUVJUUiBzdWJzeXN0ZW0uIEl0IG1vZGlmaWVzIGNvcmUgZnVuY3Rpb25zIGxpa2UgYHFydHJfbm9kZV9lbnF1ZXVlYCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAgYW5kIGFkZHMgYSBuZXcgZGVsYXllZCB3b3JrIGBxcnRyX2hlbGxvX3dvcmtgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBRUlRSX1RVTmAgdmlydHVhbCBlbmRwb2ludCBkcml2ZXIsIHNvIGl0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4OTlkMWRjZmZkMDlhNWM3Yzc5YjYyYmI1Zjk2YjdmMjBjNWU3MmM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMTI6MzA6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvYWZfcXJ0ci5jIGIvbmV0L3FydHIvYWZfcXJ0ci5jXG5pbmRleCBkMDJlZjlhNzRjM2NhLi44ZTliMzY0NzliYWI4IDEwMDY0NFxuLS0tIGEvbmV0L3FydHIvYWZfcXJ0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcXJ0ci9hZl9xcnRyLmNcbkBAIC05LDYgJiM0Mzs5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90ZXJtaW9zLmhcdTAwM2VcdC8qIEZvciBUSU9DSU5RL09VVFEgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuIFxuQEAgLTEyMCw4ICYjNDM7MTIxLDEwIEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DKHFydHJfcG9ydHMpO1xuICAqIEBuaWQ6IG5vZGUgaWRcbiAgKiBAcXJ0cl90eF9mbG93OiB4YXJyYXkgb2YgcXJ0cl90eF9mbG93LCBrZXllZCBieSBub2RlIFx1MDAzY1x1MDAzYyAzMiB8IHBvcnRcbiAgKiBAcXJ0cl90eF9sb2NrOiBsb2NrIGZvciBxcnRyX3R4X2Zsb3cgaW5zZXJ0c1xuJiM0MzsgKiBAaGVsbG9fc2VudDogaGVsbG8gcGFja2V0IHNlbmQgc3VjY2Vzc2Z1bFxuICAqIEByeF9xdWV1ZTogcmVjZWl2ZSBxdWV1ZVxuICAqIEBpdGVtOiBsaXN0IGl0ZW0gZm9yIGJyb2FkY2FzdCBsaXN0XG4mIzQzOyAqIEBzYXlfaGVsbG86IGRlbGF5ZWQgd29yayBmb3Igc2VuZGluZyBoZWxsbyBwYWNrZXRcbiAgKi9cbiBzdHJ1Y3QgcXJ0cl9ub2RlIHtcbiBcdHN0cnVjdCBtdXRleCBlcF9sb2NrO1xuQEAgLTEzMiw4ICYjNDM7MTM1LDExIEBAIHN0cnVjdCBxcnRyX25vZGUge1xuIFx0c3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7XG4gXHRzdHJ1Y3QgbXV0ZXggcXJ0cl90eF9sb2NrOyAvKiBmb3IgcXJ0cl90eF9mbG93ICovXG4gXG4mIzQzO1x0Ym9vbCBoZWxsb19zZW50O1xuJiM0MztcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgcnhfcXVldWU7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGl0ZW07XG4mIzQzO1x0c3RydWN0IGRlbGF5ZWRfd29yayBzYXlfaGVsbG87XG4gfTtcbiBcbiAvKipcbkBAIC0xODcsNiAmIzQzOzE5Myw4IEBAIHN0YXRpYyB2b2lkIF9fcXJ0cl9ub2RlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXG4gXHRsaXN0X2RlbChcdTAwMjZub2RlLVx1MDAzZWl0ZW0pO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnFydHJfbm9kZV9sb2NrKTtcbiBcbiYjNDM7XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8pO1xuJiM0MztcbiBcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZub2RlLVx1MDAzZXJ4X3F1ZXVlKTtcbiBcbiBcdC8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqL1xuQEAgLTM0MSw2ICYjNDM7MzQ5LDE0IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHNpemVfdCBsZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0aW50IHJjLCBjb25maXJtX3J4O1xuIFxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bm9kZS1cdTAwM2VlcF9sb2NrKTtcbiYjNDM7XHRpZiAoIW5vZGUtXHUwMDNlaGVsbG9fc2VudCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4mIzQzO1xuIFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0LCB0eXBlKTtcbiBcdGlmIChjb25maXJtX3J4IFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTM1Myw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aGRyLVx1MDAzZXNyY19ub2RlX2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cdTAwM2VzcV9ub2RlKTtcbiBcdGhkci1cdTAwM2VzcmNfcG9ydF9pZCA9IGNwdV90b19sZTMyKGZyb20tXHUwMDNlc3FfcG9ydCk7XG4gXHRpZiAodG8tXHUwMDNlc3FfcG9ydCA9PSBRUlRSX1BPUlRfQ1RSTCkge1xuLVx0XHRoZHItXHUwMDNlZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMihub2RlLVx1MDAzZW5pZCk7XG4mIzQzO1x0XHRoZHItXHUwMDNlZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMihSRUFEX09OQ0Uobm9kZS1cdTAwM2VuaWQpKTtcbiBcdFx0aGRyLVx1MDAzZWRzdF9wb3J0X2lkID0gY3B1X3RvX2xlMzIoUVJUUl9QT1JUX0NUUkwpO1xuIFx0fSBlbHNlIHtcbiBcdFx0aGRyLVx1MDAzZWRzdF9ub2RlX2lkID0gY3B1X3RvX2xlMzIodG8tXHUwMDNlc3Ffbm9kZSk7XG5AQCAtMzcyLDYgJiM0MzszODgsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0cmMgPSBub2RlLVx1MDAzZWVwLVx1MDAzZXhtaXQobm9kZS1cdTAwM2VlcCwgc2tiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0aWYgKCFyYyBcdTAwMjZcdTAwMjYgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pXG4mIzQzO1x0XHRcdG5vZGUtXHUwMDNlaGVsbG9fc2VudCA9IHRydWU7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIFx0fVxuIFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxuQEAgLTM3OSw2ICYjNDM7Mzk3LDkgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHJjIFx1MDAyNlx1MDAyNiBjb25maXJtX3J4KVxuIFx0XHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVx1MDAzZXNxX25vZGUsIHRvLVx1MDAzZXNxX3BvcnQpO1xuIFxuJiM0MztcdGlmIChyYyA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcbiYjNDM7XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcbiYjNDM7XG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuQEAgLTQxNiw3ICYjNDM7NDM3LDcgQEAgc3RhdGljIHZvaWQgcXJ0cl9ub2RlX2Fzc2lnbihzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgbmlkKVxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cXJ0cl9ub2Rlc19sb2NrLCBmbGFncyk7XG4gXHRyYWRpeF90cmVlX2luc2VydChcdTAwMjZxcnRyX25vZGVzLCBuaWQsIG5vZGUpO1xuIFx0aWYgKG5vZGUtXHUwMDNlbmlkID09IFFSVFJfRVBfTklEX0FVVE8pXG4tXHRcdG5vZGUtXHUwMDNlbmlkID0gbmlkO1xuJiM0MztcdFx0V1JJVEVfT05DRShub2RlLVx1MDAzZW5pZCwgbmlkKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cXJ0cl9ub2Rlc19sb2NrLCBmbGFncyk7XG4gfVxuIFxuQEAgLTU3MCw2ICYjNDM7NTkxLDM4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCxcbiBcdHJldHVybiBza2I7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBxcnRyX2hlbGxvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX3FydHIgZnJvbSA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX3FydHIgdG8gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9O1xuJiM0MztcdHN0cnVjdCBxcnRyX2N0cmxfcGt0ICpwa3Q7XG4mIzQzO1x0c3RydWN0IHFydHJfbm9kZSAqbm9kZTtcbiYjNDM7XHRzdHJ1Y3QgcXJ0cl9zb2NrICpjdHJsO1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1xuJiM0MztcdG5vZGUgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcXJ0cl9ub2RlLCBzYXlfaGVsbG8pO1xuJiM0MztcbiYjNDM7XHQvKiBOUyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB3ZSBjYW4gc2VuZDsgcmV0cnkgd2l0aCBiYWNrb2ZmIGlmIG5vdCByZWFkeSAqL1xuJiM0MztcdGN0cmwgPSBxcnRyX3BvcnRfbG9va3VwKFFSVFJfUE9SVF9DVFJMKTtcbiYjNDM7XHRpZiAoIWN0cmwpIHtcbiYjNDM7XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoXHUwMDI2cGt0LCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXNrYikge1xuJiM0MztcdFx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcbiYjNDM7XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBrdC1cdTAwM2VjbWQgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfSEVMTE8pO1xuJiM0MztcdGZyb20uc3Ffbm9kZSA9IHFydHJfbG9jYWxfbmlkO1xuJiM0MztcdHRvLnNxX25vZGUgPSBub2RlLVx1MDAzZW5pZDtcbiYjNDM7XHRxcnRyX25vZGVfZW5xdWV1ZShub2RlLCBza2IsIFFSVFJfVFlQRV9IRUxMTywgXHUwMDI2ZnJvbSwgXHUwMDI2dG8pO1xuJiM0MztcdHFydHJfcG9ydF9wdXQoY3RybCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogcXJ0cl9lbmRwb2ludF9yZWdpc3RlcigpIC0gcmVnaXN0ZXIgYSBuZXcgZW5kcG9pbnRcbiAgKiBAZXA6IGVuZHBvaW50IHRvIHJlZ2lzdGVyXG5AQCAtNTk1LDYgJiM0Mzs2NDgsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpXG4gXHRub2RlLVx1MDAzZW5pZCA9IFFSVFJfRVBfTklEX0FVVE87XG4gXHRub2RlLVx1MDAzZWVwID0gZXA7XG4gXG4mIzQzO1x0bm9kZS1cdTAwM2VoZWxsb19zZW50ID0gZmFsc2U7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8sIHFydHJfaGVsbG9fd29yayk7XG4mIzQzO1xuIFx0eGFfaW5pdChcdTAwMjZub2RlLVx1MDAzZXFydHJfdHhfZmxvdyk7XG4gXHRtdXRleF9pbml0KFx1MDAyNm5vZGUtXHUwMDNlcXJ0cl90eF9sb2NrKTtcbiBcbkBAIC02MDUsNiAmIzQzOzY2MSw5IEBAIGludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZxcnRyX25vZGVfbG9jayk7XG4gXHRlcC1cdTAwM2Vub2RlID0gbm9kZTtcbiBcbiYjNDM7XHQvKiBJbml0aWF0ZSBIRUxMTyBoYW5kc2hha2UgZnJvbSB0aGUgY29yZSBsYXllciAqL1xuJiM0MztcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgMCk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIpO1xuQEAgLTg3OSw2ICYjNDM7OTM4LDkgQEAgc3RhdGljIGludCBxcnRyX2JjYXN0X2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2cXJ0cl9ub2RlX2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBcdTAwMjZxcnRyX2FsbF9ub2RlcywgaXRlbSkge1xuJiM0MztcdFx0LyogU2tpcCBub2RlcyB3aXRoIG5vIGFzc2lnbmVkIG5vZGUgSUQgeWV0LiAqL1xuJiM0MztcdFx0aWYgKFJFQURfT05DRShub2RlLVx1MDAzZW5pZCkgPT0gUVJUUl9FUF9OSURfQVVUTylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdHNrYm4gPSBwc2tiX2NvcHkoc2tiLCBHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFza2JuKVxuIFx0XHRcdGJyZWFrO1xuZGlmZiAtLWdpdCBhL25ldC9xcnRyL25zLmMgYi9uZXQvcXJ0ci9ucy5jXG5pbmRleCBiM2Y5YmJjZjlhYjliLi42ZDkzYmNkMjUwZTc1IDEwMDY0NFxuLS0tIGEvbmV0L3FydHIvbnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3FydHIvbnMuY1xuQEAgLTIxMiw2ICYjNDM7MjEyLDcgQEAgc3RhdGljIHZvaWQgbG9va3VwX25vdGlmeShzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8sIHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2LFxuIFx0XHRwcl9lcnIoXCYjMzQ7ZmFpbGVkIHRvIHNlbmQgbG9va3VwIG5vdGlmaWNhdGlvblxcblwmIzM0Oyk7XG4gfVxuIFxuJiM0MzsvKiBBbm5vdW5jZSB0aGUgbGlzdCBvZiBzZXJ2ZXJzIHJlZ2lzdGVyZWQgb24gdGhlIGxvY2FsIG5vZGUgKi9cbiBzdGF0aWMgaW50IGFubm91bmNlX3NlcnZlcnMoc3RydWN0IHNvY2thZGRyX3FydHIgKnNxKVxuIHtcbiBcdHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2O1xuQEAgLTMyNiwzOCAmIzQzOzMyNyw4IEBAIHN0YXRpYyBpbnQgc2VydmVyX2RlbChzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgcG9ydCwgYm9vbCBiY2FzdClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNheV9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZGVzdClcbi17XG4tXHRzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCBwa3Q7XG4tXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsgfTtcbi1cdHN0cnVjdCBrdmVjIGl2O1xuLVx0aW50IHJldDtcbi1cbi1cdGl2Lmlvdl9iYXNlID0gXHUwMDI2cGt0O1xuLVx0aXYuaW92X2xlbiA9IHNpemVvZihwa3QpO1xuLVxuLVx0bWVtc2V0KFx1MDAyNnBrdCwgMCwgc2l6ZW9mKHBrdCkpO1xuLVx0cGt0LmNtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9IRUxMTyk7XG4tXG4tXHRtc2cubXNnX25hbWUgPSAoc3RydWN0IHNvY2thZGRyICopZGVzdDtcbi1cdG1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZigqZGVzdCk7XG4tXG4tXHRyZXQgPSBrZXJuZWxfc2VuZG1zZyhxcnRyX25zLnNvY2ssIFx1MDAyNm1zZywgXHUwMDI2aXYsIDEsIHNpemVvZihwa3QpKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gc2VuZCBoZWxsbyBtc2dcXG5cJiMzNDspO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovXG4gc3RhdGljIGludCBjdHJsX2NtZF9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXG4ge1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHNheV9oZWxsbyhzcSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0cmV0dXJuIGFubm91bmNlX3NlcnZlcnMoc3EpO1xuIH1cbiBcbkBAIC03NzQsMTAgJiM0Mzs3NDUsNiBAQCBpbnQgcXJ0cl9uc19pbml0KHZvaWQpXG4gXHRxcnRyX25zLmJjYXN0X3NxLnNxX25vZGUgPSBRUlRSX05PREVfQkNBU1Q7XG4gXHRxcnRyX25zLmJjYXN0X3NxLnNxX3BvcnQgPSBRUlRSX1BPUlRfQ1RSTDtcbiBcbi1cdHJldCA9IHNheV9oZWxsbyhcdTAwMjZxcnRyX25zLmJjYXN0X3NxKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZXJyX3dxO1xuLVxuIFx0LyogQXMgdGhlIHFydHIgbnMgc29ja2V0IG93bmVyIGFuZCBjcmVhdG9yIGlzIHRoZSBzYW1lIG1vZHVsZSwgd2UgaGF2ZVxuIFx0ICogdG8gZGVjcmVhc2UgdGhlIHFydHIgbW9kdWxlIHJlZmVyZW5jZSBjb3VudCB0byBndWFyYW50ZWUgdGhhdCBpdFxuIFx0ICogcmVtYWlucyB6ZXJvIGFmdGVyIHRoZSBucyBzb2NrZXQgaXMgY3JlYXRlZCwgb3RoZXJ3aXNlLCBleGVjdXRpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UVJUUiYjMzQ7LAogICAgJiMzNDtRUlRSX1RVTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3FydHJfbm9kZV9lbnF1ZXVlJiMzNDssCiAgICAmIzM0O3FydHJfaGVsbG9fd29yayYjMzQ7LAogICAgJiMzNDtxcnRyX2VuZHBvaW50X3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3FydHJfYmNhc3RfZW5xdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgSEVMTE8gaGFuZHNoYWtlIGxvZ2ljIGZyb20gdGhlIHVzZXJzcGFjZS9ucyBsYXllciB0byB0aGUgY29yZSBsYXllciBpbiB0aGUgUVJUUiBzdWJzeXN0ZW0uIEl0IG1vZGlmaWVzIGNvcmUgZnVuY3Rpb25zIGxpa2UgYHFydHJfbm9kZV9lbnF1ZXVlYCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAgYW5kIGFkZHMgYSBuZXcgZGVsYXllZCB3b3JrIGBxcnRyX2hlbGxvX3dvcmtgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBRUlRSX1RVTmAgdmlydHVhbCBlbmRwb2ludCBkcml2ZXIsIHNvIGl0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4OTlkMWRjZmZkMDlhNWM3Yzc5YjYyYmI1Zjk2YjdmMjBjNWU3MmM0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMTI6MzA6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9hZl9xcnRyLmMgYi9uZXQvcXJ0ci9hZl9xcnRyLmMKaW5kZXggZDAyZWY5YTc0YzNjYS4uOGU5YjM2NDc5YmFiOCAxMDA2NDQKLS0tIGEvbmV0L3FydHIvYWZfcXJ0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9xcnRyL2FmX3FydHIuYwpAQCAtOSw2ICYjNDM7OSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdGVybWlvcy5oJmd0OwkvKiBGb3IgVElPQ0lOUS9PVVRRICovCiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2suaCZndDsKIApAQCAtMTIwLDggJiM0MzsxMjEsMTAgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MocXJ0cl9wb3J0cyk7CiAgKiBAbmlkOiBub2RlIGlkCiAgKiBAcXJ0cl90eF9mbG93OiB4YXJyYXkgb2YgcXJ0cl90eF9mbG93LCBrZXllZCBieSBub2RlICZsdDsmbHQ7IDMyIHwgcG9ydAogICogQHFydHJfdHhfbG9jazogbG9jayBmb3IgcXJ0cl90eF9mbG93IGluc2VydHMKJiM0MzsgKiBAaGVsbG9fc2VudDogaGVsbG8gcGFja2V0IHNlbmQgc3VjY2Vzc2Z1bAogICogQHJ4X3F1ZXVlOiByZWNlaXZlIHF1ZXVlCiAgKiBAaXRlbTogbGlzdCBpdGVtIGZvciBicm9hZGNhc3QgbGlzdAomIzQzOyAqIEBzYXlfaGVsbG86IGRlbGF5ZWQgd29yayBmb3Igc2VuZGluZyBoZWxsbyBwYWNrZXQKICAqLwogc3RydWN0IHFydHJfbm9kZSB7CiAJc3RydWN0IG11dGV4IGVwX2xvY2s7CkBAIC0xMzIsOCAmIzQzOzEzNSwxMSBAQCBzdHJ1Y3QgcXJ0cl9ub2RlIHsKIAlzdHJ1Y3QgeGFycmF5IHFydHJfdHhfZmxvdzsKIAlzdHJ1Y3QgbXV0ZXggcXJ0cl90eF9sb2NrOyAvKiBmb3IgcXJ0cl90eF9mbG93ICovCiAKJiM0MzsJYm9vbCBoZWxsb19zZW50OwomIzQzOwogCXN0cnVjdCBza19idWZmX2hlYWQgcnhfcXVldWU7CiAJc3RydWN0IGxpc3RfaGVhZCBpdGVtOwomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIHNheV9oZWxsbzsKIH07CiAKIC8qKgpAQCAtMTg3LDYgJiM0MzsxOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3FydHJfbm9kZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQogCWxpc3RfZGVsKCZhbXA7bm9kZS0mZ3Q7aXRlbSk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cXJ0cl9ub2RlX2xvY2spOwogCiYjNDM7CWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO25vZGUtJmd0O3NheV9oZWxsbyk7CiYjNDM7CiAJc2tiX3F1ZXVlX3B1cmdlKCZhbXA7bm9kZS0mZ3Q7cnhfcXVldWUpOwogCiAJLyogRnJlZSB0eCBmbG93IGNvdW50ZXJzICovCkBAIC0zNDEsNiAmIzQzOzM0OSwxNCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsCiAJc2l6ZV90IGxlbiA9IHNrYi0mZ3Q7bGVuOwogCWludCByYywgY29uZmlybV9yeDsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7bm9kZS0mZ3Q7ZXBfbG9jayk7CiYjNDM7CWlmICghbm9kZS0mZ3Q7aGVsbG9fc2VudCAmYW1wOyZhbXA7IHR5cGUgIT0gUVJUUl9UWVBFX0hFTExPKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtub2RlLSZndDtlcF9sb2NrKTsKJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bm9kZS0mZ3Q7ZXBfbG9jayk7CiYjNDM7CiAJY29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by0mZ3Q7c3Ffbm9kZSwgdG8tJmd0O3NxX3BvcnQsIHR5cGUpOwogCWlmIChjb25maXJtX3J4ICZsdDsgMCkgewogCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTM1Myw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWhkci0mZ3Q7c3JjX25vZGVfaWQgPSBjcHVfdG9fbGUzMihmcm9tLSZndDtzcV9ub2RlKTsKIAloZHItJmd0O3NyY19wb3J0X2lkID0gY3B1X3RvX2xlMzIoZnJvbS0mZ3Q7c3FfcG9ydCk7CiAJaWYgKHRvLSZndDtzcV9wb3J0ID09IFFSVFJfUE9SVF9DVFJMKSB7Ci0JCWhkci0mZ3Q7ZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMihub2RlLSZndDtuaWQpOwomIzQzOwkJaGRyLSZndDtkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKFJFQURfT05DRShub2RlLSZndDtuaWQpKTsKIAkJaGRyLSZndDtkc3RfcG9ydF9pZCA9IGNwdV90b19sZTMyKFFSVFJfUE9SVF9DVFJMKTsKIAl9IGVsc2UgewogCQloZHItJmd0O2RzdF9ub2RlX2lkID0gY3B1X3RvX2xlMzIodG8tJmd0O3NxX25vZGUpOwpAQCAtMzcyLDYgJiM0MzszODgsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQlyYyA9IG5vZGUtJmd0O2VwLSZndDt4bWl0KG5vZGUtJmd0O2VwLCBza2IpOwogCQllbHNlCiAJCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWlmICghcmMgJmFtcDsmYW1wOyB0eXBlID09IFFSVFJfVFlQRV9IRUxMTykKJiM0MzsJCQlub2RlLSZndDtoZWxsb19zZW50ID0gdHJ1ZTsKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7bm9kZS0mZ3Q7ZXBfbG9jayk7CiAJfQogCS8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3QKQEAgLTM3OSw2ICYjNDM7Mzk3LDkgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChyYyAmYW1wOyZhbXA7IGNvbmZpcm1fcngpCiAJCXFydHJfdHhfZmxvd19mYWlsZWQobm9kZSwgdG8tJmd0O3NxX25vZGUsIHRvLSZndDtzcV9wb3J0KTsKIAomIzQzOwlpZiAocmMgPT0gLUVBR0FJTiAmYW1wOyZhbXA7IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKQomIzQzOwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bm9kZS0mZ3Q7c2F5X2hlbGxvLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwomIzQzOwogCXJldHVybiByYzsKIH0KIApAQCAtNDE2LDcgJiM0Mzs0MzcsNyBAQCBzdGF0aWMgdm9pZCBxcnRyX25vZGVfYXNzaWduKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBuaWQpCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtxcnRyX25vZGVzX2xvY2ssIGZsYWdzKTsKIAlyYWRpeF90cmVlX2luc2VydCgmYW1wO3FydHJfbm9kZXMsIG5pZCwgbm9kZSk7CiAJaWYgKG5vZGUtJmd0O25pZCA9PSBRUlRSX0VQX05JRF9BVVRPKQotCQlub2RlLSZndDtuaWQgPSBuaWQ7CiYjNDM7CQlXUklURV9PTkNFKG5vZGUtJmd0O25pZCwgbmlkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cXJ0cl9ub2Rlc19sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTU3MCw2ICYjNDM7NTkxLDM4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCwKIAlyZXR1cm4gc2tiOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9xcnRyIGZyb20gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9OwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciB0byA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07CiYjNDM7CXN0cnVjdCBxcnRyX2N0cmxfcGt0ICpwa3Q7CiYjNDM7CXN0cnVjdCBxcnRyX25vZGUgKm5vZGU7CiYjNDM7CXN0cnVjdCBxcnRyX3NvY2sgKmN0cmw7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CiYjNDM7CW5vZGUgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcXJ0cl9ub2RlLCBzYXlfaGVsbG8pOwomIzQzOwomIzQzOwkvKiBOUyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB3ZSBjYW4gc2VuZDsgcmV0cnkgd2l0aCBiYWNrb2ZmIGlmIG5vdCByZWFkeSAqLwomIzQzOwljdHJsID0gcXJ0cl9wb3J0X2xvb2t1cChRUlRSX1BPUlRfQ1RSTCk7CiYjNDM7CWlmICghY3RybCkgewomIzQzOwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bm9kZS0mZ3Q7c2F5X2hlbGxvLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoJmFtcDtwa3QsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXNrYikgewomIzQzOwkJcXJ0cl9wb3J0X3B1dChjdHJsKTsKJiM0MzsJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO25vZGUtJmd0O3NheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlwa3QtJmd0O2NtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9IRUxMTyk7CiYjNDM7CWZyb20uc3Ffbm9kZSA9IHFydHJfbG9jYWxfbmlkOwomIzQzOwl0by5zcV9ub2RlID0gbm9kZS0mZ3Q7bmlkOwomIzQzOwlxcnRyX25vZGVfZW5xdWV1ZShub2RlLCBza2IsIFFSVFJfVFlQRV9IRUxMTywgJmFtcDtmcm9tLCAmYW1wO3RvKTsKJiM0MzsJcXJ0cl9wb3J0X3B1dChjdHJsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGEgbmV3IGVuZHBvaW50CiAgKiBAZXA6IGVuZHBvaW50IHRvIHJlZ2lzdGVyCkBAIC01OTUsNiAmIzQzOzY0OCw5IEBAIGludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZCkKIAlub2RlLSZndDtuaWQgPSBRUlRSX0VQX05JRF9BVVRPOwogCW5vZGUtJmd0O2VwID0gZXA7CiAKJiM0MzsJbm9kZS0mZ3Q7aGVsbG9fc2VudCA9IGZhbHNlOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO25vZGUtJmd0O3NheV9oZWxsbywgcXJ0cl9oZWxsb193b3JrKTsKJiM0MzsKIAl4YV9pbml0KCZhbXA7bm9kZS0mZ3Q7cXJ0cl90eF9mbG93KTsKIAltdXRleF9pbml0KCZhbXA7bm9kZS0mZ3Q7cXJ0cl90eF9sb2NrKTsKIApAQCAtNjA1LDYgJiM0Mzs2NjEsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpCiAJbXV0ZXhfdW5sb2NrKCZhbXA7cXJ0cl9ub2RlX2xvY2spOwogCWVwLSZndDtub2RlID0gbm9kZTsKIAomIzQzOwkvKiBJbml0aWF0ZSBIRUxMTyBoYW5kc2hha2UgZnJvbSB0aGUgY29yZSBsYXllciAqLwomIzQzOwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtub2RlLSZndDtzYXlfaGVsbG8sIDApOwomIzQzOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocXJ0cl9lbmRwb2ludF9yZWdpc3Rlcik7CkBAIC04NzksNiAmIzQzOzkzOCw5IEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsCiAKIAltdXRleF9sb2NrKCZhbXA7cXJ0cl9ub2RlX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJmFtcDtxcnRyX2FsbF9ub2RlcywgaXRlbSkgewomIzQzOwkJLyogU2tpcCBub2RlcyB3aXRoIG5vIGFzc2lnbmVkIG5vZGUgSUQgeWV0LiAqLwomIzQzOwkJaWYgKFJFQURfT05DRShub2RlLSZndDtuaWQpID09IFFSVFJfRVBfTklEX0FVVE8pCiYjNDM7CQkJY29udGludWU7CiAJCXNrYm4gPSBwc2tiX2NvcHkoc2tiLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFza2JuKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuYwppbmRleCBiM2Y5YmJjZjlhYjliLi42ZDkzYmNkMjUwZTc1IDEwMDY0NAotLS0gYS9uZXQvcXJ0ci9ucy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9xcnRyL25zLmMKQEAgLTIxMiw2ICYjNDM7MjEyLDcgQEAgc3RhdGljIHZvaWQgbG9va3VwX25vdGlmeShzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8sIHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2LAogCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gc2VuZCBsb29rdXAgbm90aWZpY2F0aW9uXG4mIzM0Oyk7CiB9CiAKJiM0MzsvKiBBbm5vdW5jZSB0aGUgbGlzdCBvZiBzZXJ2ZXJzIHJlZ2lzdGVyZWQgb24gdGhlIGxvY2FsIG5vZGUgKi8KIHN0YXRpYyBpbnQgYW5ub3VuY2Vfc2VydmVycyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpCiB7CiAJc3RydWN0IHFydHJfc2VydmVyICpzcnY7CkBAIC0zMjYsMzggJiM0MzszMjcsOCBAQCBzdGF0aWMgaW50IHNlcnZlcl9kZWwoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgYmNhc3QpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2F5X2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0KQotewotCXN0cnVjdCBxcnRyX2N0cmxfcGt0IHBrdDsKLQlzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsgfTsKLQlzdHJ1Y3Qga3ZlYyBpdjsKLQlpbnQgcmV0OwotCi0JaXYuaW92X2Jhc2UgPSAmYW1wO3BrdDsKLQlpdi5pb3ZfbGVuID0gc2l6ZW9mKHBrdCk7Ci0KLQltZW1zZXQoJmFtcDtwa3QsIDAsIHNpemVvZihwa3QpKTsKLQlwa3QuY21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTsKLQotCW1zZy5tc2dfbmFtZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKilkZXN0OwotCW1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZigqZGVzdCk7Ci0KLQlyZXQgPSBrZXJuZWxfc2VuZG1zZyhxcnRyX25zLnNvY2ssICZhbXA7bXNnLCAmYW1wO2l2LCAxLCBzaXplb2YocGt0KSk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXByX2VycigmIzM0O2ZhaWxlZCB0byBzZW5kIGhlbGxvIG1zZ1xuJiMzNDspOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovCiBzdGF0aWMgaW50IGN0cmxfY21kX2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2F5X2hlbGxvKHNxKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKLQogCXJldHVybiBhbm5vdW5jZV9zZXJ2ZXJzKHNxKTsKIH0KIApAQCAtNzc0LDEwICYjNDM7NzQ1LDYgQEAgaW50IHFydHJfbnNfaW5pdCh2b2lkKQogCXFydHJfbnMuYmNhc3Rfc3Euc3Ffbm9kZSA9IFFSVFJfTk9ERV9CQ0FTVDsKIAlxcnRyX25zLmJjYXN0X3NxLnNxX3BvcnQgPSBRUlRSX1BPUlRfQ1RSTDsKIAotCXJldCA9IHNheV9oZWxsbygmYW1wO3FydHJfbnMuYmNhc3Rfc3EpOwotCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIGVycl93cTsKLQogCS8qIEFzIHRoZSBxcnRyIG5zIHNvY2tldCBvd25lciBhbmQgY3JlYXRvciBpcyB0aGUgc2FtZSBtb2R1bGUsIHdlIGhhdmUKIAkgKiB0byBkZWNyZWFzZSB0aGUgcXJ0ciBtb2R1bGUgcmVmZXJlbmNlIGNvdW50IHRvIGd1YXJhbnRlZSB0aGF0IGl0CiAJICogcmVtYWlucyB6ZXJvIGFmdGVyIHRoZSBucyBzb2NrZXQgaXMgY3JlYXRlZCwgb3RoZXJ3aXNlLCBleGVjdXRpbmcKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1OAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFFSVFIgSEVMTE8gSGFuZHNoYWtlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgUVJUUiBzdWJzeXN0ZW0g4oCTIHNlZW1zIGxpa2UgYSByZWZhY3RvcmluZyBlZmZvcnQsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIEhFTExPIGhhbmRzaGFrZSBsb2dpYy4gVGhlIGNvcmUgaWRlYSBpcyB0byBtb3ZlIHRoZSBoYW5kc2hha2UgZnJvbSB0aGUgbmFtZXNwYWNlIGxheWVyIChgbnMuY2ApIGludG8gdGhlIGNvcmUgKGBhZl9xcnRyLmNgKS4gVGhhdCYjMzk7cyBnZW5lcmFsbHkgYSBnb29kIG1vdmU7IGNlbnRyYWxpemluZyBjb3JlIGZ1bmN0aW9uYWxpdHkgb2Z0ZW4gbGVhZHMgdG8gY2xlYW5lciBjb2RlIGFuZCBzaW1wbGlmaWVzIG1haW50ZW5hbmNlLgoKVGhlIGFkZGl0aW9uIG9mIGBoZWxsb19zZW50YCBhbmQgdGhlIGRlbGF5ZWQgd29yayBgc2F5X2hlbGxvYCB0byB0aGUgYHFydHJfbm9kZWAgc3RydWN0dXJlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gV2UmIzM5O3JlIGVmZmVjdGl2ZWx5IHRyYWNraW5nIHRoZSBoYW5kc2hha2Ugc3RhdGUgYW5kIGRlbGF5aW5nIHRoZSBIRUxMTyBtZXNzYWdlIHRvIGF2b2lkIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGVuZHBvaW50IHJlZ2lzdHJhdGlvbiDigJMgbWFrZXMgc2Vuc2UuIEFuZCB0aGUgY2hhbmdlcyB0byBgcXJ0cl9ub2RlX2VucXVldWVgIHRvIGRyb3Agbm9uLUhFTExPIHBhY2tldHMgaWYgYGhlbGxvX3NlbnRgIGlzIGZhbHNlLCB0aGF0JiMzOTtzIGNydWNpYWwgZm9yIGVuZm9yY2luZyB0aGUgaGFuZHNoYWtlIG9yZGVyIGFuZCBwcmV2ZW50aW5nIHBvdGVudGlhbGx5IG1hbGljaW91cyBvciBtYWxmb3JtZWQgcGFja2V0cyBmcm9tIGJlaW5nIHByb2Nlc3NlZCBwcmVtYXR1cmVseS4gRW5mb3JjaW5nIHRoaXMgZmxvdyBpcyBhIHNlY3VyaXR5IGJlc3QgcHJhY3RpY2UuCgpUaGUgc2NoZWR1bGluZyBvZiBgc2F5X2hlbGxvYCBvbiBlbmRwb2ludCByZWdpc3RyYXRpb24gbG9va3MgY2xlYW4gYW5kIGxvZ2ljYWwsIGVuc3VyaW5nIHRoZSBoYW5kc2hha2UgaXMgaW5pdGlhdGVkIGFzIHNvb24gYXMgYSBuZXcgZW5kcG9pbnQgYmVjb21lcyBhY3RpdmUuIEFsc28sIHRoZSBtb2RpZmljYXRpb24gdG8gYHFydHJfYmNhc3RfZW5xdWV1ZWAgdG8gc2tpcCBub2RlcyB3aXRoIGBRUlRSX0VQX05JRF9BVVRPYC4uLiB5ZWFoLCBJIGNhbiBzZWUgdGhlIHJlYXNvbmluZy4gVGhvc2UgYXJlIGxpa2VseSBhdXRvLWFzc2lnbmVkIG5vZGUgSURzIGFuZCBpdCBtYWtlcyBzZW5zZSB0byBhdm9pZCBicm9hZGNhc3RpbmcgdG8gdGhlbSBkdXJpbmcgdGhlIEhFTExPIHBoYXNlIHRvIGF2b2lkIHVubmVjZXNzYXJ5IG5vaXNlIGFuZCBwcm9jZXNzaW5nLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEkgbmVlZCB0byB2ZXJpZnkgcmVhY2hhYmlsaXR5IGFuZCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gUVJUUiBpcyB0aGUgUXVhbGNvbW0gSVBDIFJvdXRlciDigJMgc28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgUVJUUi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBiZSBzdXJlIHRoaXMgcmVmYWN0b3JpbmcgaXMgYWN0dWFsbHkgZXhlcmNpc2VkIGluIGFueSBvZiBvdXIgY29tbW9uIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRvIHNvbWUgc2VhcmNoaW5nLCBwcm9iYWJseSBzdGFydGluZyB3aXRoIGBRUlRSYCBhbmQgc2VlaW5nIHdoYXQgSSBjYW4gZmluZC4gVW5kZXJzdGFuZGluZyB0aGUgcmVsZXZhbnQgYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCB3aGV0aGVyIHRoaXMgbG9naWMgaXMgY29tbW9ubHkgdXNlZCBpcyBjcml0aWNhbCB0byBldmFsdWF0aW5nIHRoZSBpbXBhY3QgYW5kIHBvdGVudGlhbCByaXNrIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBRUlRSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9xcnRyL0tjb25maWctNC1cbm5ldC9xcnRyL0tjb25maWc6NTpjb25maWcgUVJUUlxubmV0L3FydHIvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gSVBDIFJvdXRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3FydHIvS2NvbmZpZz0xNT1pZiBRUlRSXG5uZXQvcXJ0ci9LY29uZmlnLTE2LVxubmV0L3FydHIvS2NvbmZpZzoxNzpjb25maWcgUVJUUl9TTURcbm5ldC9xcnRyL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtTTUQgSVBDIFJvdXRlciBjaGFubmVsc1wmIzM0O1xuLS1cbm5ldC9xcnRyL0tjb25maWctMjMtXG5uZXQvcXJ0ci9LY29uZmlnOjI0OmNvbmZpZyBRUlRSX1RVTlxubmV0L3FydHIvS2NvbmZpZy0yNS1cdHRyaXN0YXRlIFwmIzM0O1RVTiBkZXZpY2UgZm9yIFF1YWxjb21tIElQQyBSb3V0ZXJcJiMzNDtcbi0tXG5uZXQvcXJ0ci9LY29uZmlnLTMwLVxubmV0L3FydHIvS2NvbmZpZzozMTpjb25maWcgUVJUUl9NSElcbm5ldC9xcnRyL0tjb25maWctMzItXHR0cmlzdGF0ZSBcJiMzNDtNSEkgSVBDIFJvdXRlciBjaGFubmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NDEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFFSVFIgYW5kIFZpcnR1YWxpemF0aW9uKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIEkmIzM5O20gZGVhbGluZyB3aXRoIGlzIGBRUlRSYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIEkgYWN0dWFsbHkgKnVzZSogdGhpcyBpbiBhIHZpcnR1YWxpemVkIHNldHVwPyYjMzQ7LiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwgd2F5cyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMuIFRoZW4sIGJvb20sIGl0IGNsaWNrczogYFFSVFJfVFVOYCEgVGhhdCYjMzk7cyB0aGUgc29sdXRpb24uIEl0IHByb3ZpZGVzIGEgVFVOIGRldmljZSBzcGVjaWZpY2FsbHkgZm9yIHRoZSBRdWFsY29tbSBJUEMgUm91dGVyLCB3aGljaCBtZWFucyBJIGNhbiBjcmVhdGUgYSB2aXJ0dWFsIFFSVFIgZW5kcG9pbnQgcmlnaHQgZnJvbSB1c2VyIHNwYWNlLiBObyBuZWVkIHRvIG1lc3MgYXJvdW5kIHdpdGggbG93LWxldmVsIGtlcm5lbCBtb2R1bGVzICh3aGljaCwgYWRtaXR0ZWRseSwgSSAqY291bGQqIGRvLCBidXQgdGhpcyBpcyBmYXIgbW9yZSBlbGVnYW50KS4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBRUlRSX1RVTmAgYW5kIHNlZSBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtRUlRSX1RVTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTE3OT1DT05GSUdfUVJUUl9TTUQ9bVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoxODA6Q09ORklHX1FSVFJfVFVOPW1cbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWctMTgxLUNPTkZJR19DQU49bVxuLS1cbm5ldC9xcnRyL0tjb25maWc9MTc9Y29uZmlnIFFSVFJfU01EXG4tLVxubmV0L3FydHIvS2NvbmZpZy0yMy1cbm5ldC9xcnRyL0tjb25maWc6MjQ6Y29uZmlnIFFSVFJfVFVOXG5uZXQvcXJ0ci9LY29uZmlnLTI1LVx0dHJpc3RhdGUgXCYjMzQ7VFVOIGRldmljZSBmb3IgUXVhbGNvbW0gSVBDIFJvdXRlclwmIzM0O1xuLS1cbm5ldC9xcnRyL01ha2VmaWxlPTY9cXJ0ci1zbWQteVx0Oj0gc21kLm9cbm5ldC9xcnRyL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1FSVFJfVFVOKSAmIzQzOz0gcXJ0ci10dW4ub1xubmV0L3FydHIvTWFrZWZpbGUtOC1xcnRyLXR1bi15XHQ6PSB0dW4ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBUdW5uZWwqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGlubmVyIHdvcmtpbmdzIG9mIHRoaXMgdHVubmVsaW5nIG1lY2hhbmlzbS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGludG8gdGhlIGNvcmUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBxcnRyLXR1bi5jYCBvciwgZmFpbGluZyB0aGF0LCBgdHVuLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgcGFja2V0IHJlY2VwdGlvbiwgdHJhbnNtaXNzaW9uLCBhZGRyZXNzIGFzc2lnbm1lbnQsIGFuZCB0aGUgb3ZlcmFsbCBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2suIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IG9wdGltaXphdGlvbnMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gdGhlIFF1YWxjb21tIFFNSSBSYWRpbyBUcmFuc3BvcnQgKFFSVFIpIG9yIHN0YW5kYXJkIFRVTiBpbnRlcmZhY2UuIExldCYjMzk7cyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3FydHJfZW5kcG9pbnRfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3FydHIvYWZfcXJ0ci5jPTU5ND1zdGF0aWMgdm9pZCBxcnRyX2hlbGxvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy02MjYtLyoqXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NjI3OiAqIHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGEgbmV3IGVuZHBvaW50XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjI4LSAqIEBlcDogZW5kcG9pbnQgdG8gcmVnaXN0ZXJcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjMzLSAqL1xubmV0L3FydHIvYWZfcXJ0ci5jOjYzNDppbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjM1LXtcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjY4LX1cbm5ldC9xcnRyL2FmX3FydHIuYzo2Njk6RVhQT1JUX1NZTUJPTF9HUEwocXJ0cl9lbmRwb2ludF9yZWdpc3Rlcik7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjcwLVxuLS1cbm5ldC9xcnRyL21oaS5jPTExMD1zdGF0aWMgaW50IHFjb21fbWhpX3FydHJfcHJvYmUoc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYsXG4tLVxubmV0L3FydHIvbWhpLmMtMTMwLVxubmV0L3FydHIvbWhpLmM6MTMxOlx0cmMgPSBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKFx1MDAyNnFkZXYtXHUwMDNlZXAsIFFSVFJfRVBfTklEX0FVVE8pO1xubmV0L3FydHIvbWhpLmMtMTMyLVx0aWYgKHJjKVxuLS1cbm5ldC9xcnRyL3FydHIuaD0yMD1zdHJ1Y3QgcXJ0cl9lbmRwb2ludCB7XG4tLVxubmV0L3FydHIvcXJ0ci5oLTI1LVxubmV0L3FydHIvcXJ0ci5oOjI2OmludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZCk7XG5uZXQvcXJ0ci9xcnRyLmgtMjctXG4tLVxubmV0L3FydHIvc21kLmM9NTk9c3RhdGljIGludCBxY29tX3NtZF9xcnRyX3Byb2JlKHN0cnVjdCBycG1zZ19kZXZpY2UgKnJwZGV2KVxuLS1cbm5ldC9xcnRyL3NtZC5jLTcxLVxubmV0L3FydHIvc21kLmM6NzI6XHRyYyA9IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoXHUwMDI2cWRldi1cdTAwM2VlcCwgUVJUUl9FUF9OSURfQVVUTyk7XG5uZXQvcXJ0ci9zbWQuYy03My1cdGlmIChyYylcbi0tXG5uZXQvcXJ0ci90dW4uYz0zMT1zdGF0aWMgaW50IHFydHJfdHVuX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4tLVxubmV0L3FydHIvdHVuLmMtNDYtXG5uZXQvcXJ0ci90dW4uYzo0NzpcdHJldCA9IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoXHUwMDI2dHVuLVx1MDAzZWVwLCBRUlRSX0VQX05JRF9BVVRPKTtcbm5ldC9xcnRyL3R1bi5jLTQ4LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTg2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBRUlRSIFN1YnN5c3RlbSoqCgpPa2F5LCBzbyBgdHVuLmNgIGRvZXMgaW5kZWVkIGNhbGwgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgIHdoZW4gdGhlIFRVTiBkZXZpY2Ugb3BlbnMuIFRoYXQgY29uZmlybXMgdGhhdCBgUVJUUl9UVU5gIHByb3ZpZGVzIGEgdXNlcnNwYWNlIGVudHJ5IHBvaW50LCBtYWtpbmcgaXQgcmVhY2hhYmxlLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgc2lnbmlmaWNhbnQuCgpMb29raW5nIGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgaW4gYG5ldC9xcnRyL2FmX3FydHIuY2Ag4oCTIHNwZWNpZmljYWxseSBgcXJ0cl9ub2RlX2VucXVldWVgLCBgcXJ0cl9oZWxsb193b3JrYCAodGhhdCYjMzk7cyBuZXcsIGludGVyZXN0aW5nKSwgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgLCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAg4oCTIHRoZXNlIGFyZSBhbGwgKmNvcmUqIFFSVFIgZnVuY3Rpb25zLiBUaGlzIHBhdGNoIGNlbnRyYWxpemVzIHRoZSBIRUxMTyBoYW5kc2hha2UgaW50byB0aGlzIGNvcmUgbGF5ZXIsIHNvIGl0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoaXMgc2NyZWFtcyAmIzM0O2Z1enogbWUhJiMzNDsKCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBjb25maWdzOiBgUVJUUmAgYW5kIGBRUlRSX1RVTmAsIG5hdHVyYWxseS4KCk5vdywgZm9yIHNwZWNpZmljIHN5bWJvbHMgdG8gdGFyZ2V0IGR1cmluZyBmdXp6aW5nOiBgcXJ0cl9ub2RlX2VucXVldWVgLCBgcXJ0cl9oZWxsb193b3JrYCwgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgLCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAuCgpIYW5nIG9uLCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGBxcnRyX2hlbGxvX3dvcmtgIGlzIHN0YXRpYy4gWWVzLCBpdCBpcy4gQnV0LCBpdCYjMzk7cyBhIHdvcmtxdWV1ZSBjYWxsYmFjay4gVGhhdCBtZWFucyBpdCB3b24mIzM5O3QgYmUgaW5saW5lZCBhbmQgKmRvZXMqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgc28gaXQmIzM5O3MgZnV6emFibGUuIFdhaXQgYSBzZWNvbmQsIHRoZSBhZGRyZXNzIG9mIGBxcnRyX2hlbGxvX3dvcmtgIGlzIHRha2VuIGJlY2F1c2UgaXQmIzM5O3MgcGFzc2VkIHRvIGBJTklUX0RFTEFZRURfV09SS2AuIFRoYXQgc29saWRpZmllcyBpdDsgaXQgd29uJiMzOTt0IGJlIGlubGluZWQuCgpOb3csIGxldCYjMzk7cyBjaGVjayBgcXJ0cl9ub2RlX2VucXVldWVgIGFuZCBzZWUgaWYgaXQmIzM5O3MgaW5saW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0cl9ub2RlX2VucXVldWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3FydHIvYWZfcXJ0ci5jPTMyOT1zdGF0aWMgdm9pZCBxcnRyX3R4X2Zsb3dfZmFpbGVkKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIGludCBkZXN0X25vZGUsXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTM0My0vKiBQYXNzIGFuIG91dGdvaW5nIHBhY2tldCBzb2NrZXQgYnVmZmVyIHRvIHRoZSBlbmRwb2ludCBkcml2ZXIuICovXG5uZXQvcXJ0ci9hZl9xcnRyLmM6MzQ0OnN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9xcnRyL2FmX3FydHIuYy0zNDUtXHRcdFx0ICAgICBpbnQgdHlwZSwgc3RydWN0IHNvY2thZGRyX3FydHIgKmZyb20sXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTU5ND1zdGF0aWMgdm9pZCBxcnRyX2hlbGxvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy02MjEtXHR0by5zcV9ub2RlID0gbm9kZS1cdTAwM2VuaWQ7XG5uZXQvcXJ0ci9hZl9xcnRyLmM6NjIyOlx0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFx1MDAyNmZyb20sIFx1MDAyNnRvKTtcbm5ldC9xcnRyL2FmX3FydHIuYy02MjMtXHRxcnRyX3BvcnRfcHV0KGN0cmwpO1xuLS1cbm5ldC9xcnRyL2FmX3FydHIuYz05MzM9c3RhdGljIGludCBxcnRyX2JjYXN0X2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTQ3LVx0XHRza2Jfc2V0X293bmVyX3coc2tibiwgc2tiLVx1MDAzZXNrKTtcbm5ldC9xcnRyL2FmX3FydHIuYzo5NDg6XHRcdHFydHJfbm9kZV9lbnF1ZXVlKG5vZGUsIHNrYm4sIHR5cGUsIGZyb20sIHRvKTtcbm5ldC9xcnRyL2FmX3FydHIuYy05NDktXHR9XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTk1Nz1zdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTEwMTctXHRcdH1cbm5ldC9xcnRyL2FmX3FydHIuYzoxMDE4Olx0XHRlbnF1ZXVlX2ZuID0gcXJ0cl9ub2RlX2VucXVldWU7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTAxOS1cdH1cbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9MTA2MD1zdGF0aWMgaW50IHFydHJfc2VuZF9yZXN1bWVfdHgoc3RydWN0IHFydHJfY2IgKmNiKVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy0xMDgyLVxubmV0L3FydHIvYWZfcXJ0ci5jOjEwODM6XHRyZXQgPSBxcnRyX25vZGVfZW5xdWV1ZShub2RlLCBza2IsIFFSVFJfVFlQRV9SRVNVTUVfVFgsIFx1MDAyNmxvY2FsLCBcdTAwMjZyZW1vdGUpO1xubmV0L3FydHIvYWZfcXJ0ci5jLTEwODQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBRUlRSIEVucXVldWUgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBgcXJ0cl9ub2RlX2VucXVldWVgIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYCBmdW5jdGlvbnMsIGFuZCBhIGNydWNpYWwgb3B0aW1pemF0aW9uIHBvaW50IGp1bXBzIG91dC4gSSBub3RpY2VkIHRoYXQgYHFydHJfbm9kZV9lbnF1ZXVlYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCAqdXN1YWxseSogaXMgYSBnb29kIGluZGljYXRvciB0aGF0IHRoZSBjb21waWxlciB3aWxsIGJlIGFibGUgdG8gaW5saW5lIGl0LCBidXQgaG9sZCBvbi4uLiBJIHNlZSB0aGF0IGl0cyBhZGRyZXNzIGlzIGJlaW5nIHRha2VuIChzcGVjaWZpY2FsbHksIGFzc2lnbmVkIHRvIGBlbnF1ZXVlX2ZuID0gcXJ0cl9ub2RlX2VucXVldWU7YCkuIFRoYXQmIzM5O3MgdGhlIHJlYXNvbiByaWdodCB0aGVyZSEgQmVjYXVzZSBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgaXQmIzM5O3MgdmlydHVhbGx5IGd1YXJhbnRlZWQgdGhhdCB0aGUgY29tcGlsZXIgKndvbiYjMzk7dCogaW5saW5lIGl0LCByZWdhcmRsZXNzIG9mIHRoZSBgc3RhdGljYCBkZWNsYXJhdGlvbi4gVGhlIGZ1bmN0aW9uIG11c3QgYmUgYWNjZXNzaWJsZSBleHRlcm5hbGx5IHRocm91Z2ggdGhhdCBmdW5jdGlvbiBwb2ludGVyLiBUaGF0JiMzOTtzIGEgcGVyZm9ybWFuY2UgaGl0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIEkgbmVlZCB0byBjaGVjayBob3cgZnJlcXVlbnRseSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBiZWNhdXNlIHRoaXMgd29uJiMzOTt0IGJlIGFzIGVmZmljaWVudCBhcyBhIGRpcmVjdCBjYWxsLgoKTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBxcnRyX2JjYXN0X2VucXVldWVgLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGFsc28gZGVjbGFyZWQgYHN0YXRpY2AsIHNvIHRoZSBzYW1lIGlubGluaW5nIGNvbnNpZGVyYXRpb25zIGFwcGx5LiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgd2hldGhlciAqaXRzKiBhZGRyZXNzIGlzIGFsc28gYmVpbmcgdGFrZW4gYW55d2hlcmUgaW4gdGhlIGNvZGUuIElmIGl0IGlzLCB0aGVuIHRoZSBzYW1lIG5vbi1pbmxpbmluZyBiZWhhdmlvciB3aWxsIHJlc3VsdC4gVGhpcyBtaWdodCByZXF1aXJlIGEgcXVpY2sgc2VhcmNoIHRocm91Z2ggdGhlIGNvZGViYXNlLCB0byB2ZXJpZnkgaWYgdGhlIGFkZHJlc3Mgb2YgYHFydHJfYmNhc3RfZW5xdWV1ZWAgaXMgYXNzaWduZWQgdG8gYW55IGZ1bmN0aW9uIHBvaW50ZXIgdmFyaWFibGVzLiBJZiBpdCBpc24mIzM5O3QgdGhlbiB3ZSBtaWdodCBoYXZlIGZvdW5kIGEgbmljZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3FydHJfYmNhc3RfZW5xdWV1ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmM9MTYwPXN0YXRpYyBpbnQgcXJ0cl9sb2NhbF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTE2Mi1cdFx0XHQgICAgICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pO1xubmV0L3FydHIvYWZfcXJ0ci5jOjE2MzpzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3FydHIvYWZfcXJ0ci5jLTE2NC1cdFx0XHQgICAgICBpbnQgdHlwZSwgc3RydWN0IHNvY2thZGRyX3FydHIgKmZyb20sXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTc0ND1zdGF0aWMgdm9pZCBxcnRyX3BvcnRfcmVtb3ZlKHN0cnVjdCBxcnRyX3NvY2sgKmlwYylcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNzYxLVx0XHRza2Jfc2V0X293bmVyX3coc2tiLCBcdTAwMjZpcGMtXHUwMDNlc2spO1xubmV0L3FydHIvYWZfcXJ0ci5jOjc2MjpcdFx0cXJ0cl9iY2FzdF9lbnF1ZXVlKE5VTEwsIHNrYiwgUVJUUl9UWVBFX0RFTF9DTElFTlQsIFx1MDAyNmlwYy1cdTAwM2V1cyxcbm5ldC9xcnRyL2FmX3FydHIuYy03NjMtXHRcdFx0XHQgICBcdTAwMjZ0byk7XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTkwMj1zdGF0aWMgaW50IHFydHJfbG9jYWxfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy05MzItLyogUXVldWUgcGFja2V0IGZvciBicm9hZGNhc3QuICovXG5uZXQvcXJ0ci9hZl9xcnRyLmM6OTMzOnN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTM0LVx0XHRcdCAgICAgIGludCB0eXBlLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSxcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9OTU3PXN0YXRpYyBpbnQgcXJ0cl9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTAwOC1cdFx0fVxubmV0L3FydHIvYWZfcXJ0ci5jOjEwMDk6XHRcdGVucXVldWVfZm4gPSBxcnRyX2JjYXN0X2VucXVldWU7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTAxMC1cdH0gZWxzZSBpZiAoYWRkci1cdTAwM2VzcV9ub2RlID09IGlwYy1cdTAwM2V1cy5zcV9ub2RlKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNDkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBUaGlua2luZyBvbiBRUlRSIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIGBxcnRyX2JjYXN0X2VucXVldWVgIGFkZHJlc3MgaXMgYWxzbyBpbiB1c2UsIHRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGlzIGNvbmZpcm1zIHdoYXQgSSBzdXNwZWN0ZWQuCgpUaGVyZWZvcmUsIHRoZSBrZXkgZm9jdXMgcG9pbnRzIGZvciB0cm91Ymxlc2hvb3Rpbmcgb3IgdW5kZXJzdGFuZGluZyB0aGUgUVJUUiBjb25maWd1cmF0aW9uIGFyZTogYHFydHJfbm9kZV9lbnF1ZXVlYCwgYHFydHJfaGVsbG9fd29ya2AsIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCwgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZWxlbWVudHMuCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gTXkgaW5pdGlhbCBmZWVsaW5nIGlzIHRoYXQgYFFSVFJgIGFuZCBgUVJUUl9UVU5gIHNob3VsZCBiZSBzdWZmaWNpZW50LCBidXQgaXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2guCgpUbyBtYWtlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgZ28gYmFjayBhbmQgZXhhbWluZSBgbmV0L3FydHIvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyB0aGF0IGBRUlRSYCBtaWdodCByZXF1aXJlLiBBIGRlcGVuZGVuY3kgY291bGQgYmUgdGhlIGtleSB0byB0aGUgcHJvYmxlbS4gSSBuZWVkIHRvIGxlYXZlIG5vIHN0b25lIHVudHVybmVkIGluIHRoaXMgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9xcnRyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3FydHIvS2NvbmZpZz0xNz1jb25maWcgUVJUUl9TTURcbm5ldC9xcnRyL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtTTUQgSVBDIFJvdXRlciBjaGFubmVsc1wmIzM0O1xubmV0L3FydHIvS2NvbmZpZzoxOTpcdGRlcGVuZHMgb24gUlBNU0cgfHwgKENPTVBJTEVfVEVTVCBcdTAwMjZcdTAwMjYgUlBNU0c9bilcbm5ldC9xcnRyL0tjb25maWctMjAtXHRoZWxwXG4tLVxubmV0L3FydHIvS2NvbmZpZz0zMT1jb25maWcgUVJUUl9NSElcbm5ldC9xcnRyL0tjb25maWctMzItXHR0cmlzdGF0ZSBcJiMzNDtNSEkgSVBDIFJvdXRlciBjaGFubmVsc1wmIzM0O1xubmV0L3FydHIvS2NvbmZpZzozMzpcdGRlcGVuZHMgb24gTUhJX0JVU1xubmV0L3FydHIvS2NvbmZpZy0zNC1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgUVJUUiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgaXQgbG9va3MgbGlrZSBgUVJUUmAgaXMgc3RhbmRpbmcgb24gaXRzIG93biwgbm8gZGVwZW5kZW5jaWVzIHJpZ2h0IG9mZiB0aGUgYmF0LiBTYW1lIGZvciBgUVJUUl9UVU5gLiBHb29kLiBCdXQgd2FpdCBhIHNlY29uZC4uLiBpc24mIzM5O3QgYFFSVFJgIGEgdG9wLWxldmVsIGNvbmZpZyBvcHRpb24/IEFoYSEgSXQmIzM5O3MgbGlrZWx5IGRlZmluZWQgaW4gYG5ldC9xcnRyL0tjb25maWdgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgYG5ldC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIHRyYWNrIGRvd24gdGhlIGNvbnRleHQgYW5kIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmcm9tIHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZSBcJiMzNDtuZXQvcXJ0ci9LY29uZmlnXCYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTI4MT1zb3VyY2UgXCYjMzQ7bmV0L2wzbWRldi9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyODI6c291cmNlIFwmIzM0O25ldC9xcnRyL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnLTI4My1zb3VyY2UgXCYjMzQ7bmV0L25jc2kvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE3MgoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiAxOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUVJUUiBTdWJzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28sIGFmdGVyIHJldmlld2luZyB0aGlzIHBhdGNoLCBpdCBzZWVtcyBsaWtlIHRoZSBrZXkgdGFyZ2V0cyBmb3IgZnV6emluZyBhcmUgZ29pbmcgdG8gYmUgYFFSVFJgIGFuZCBgUVJUUl9UVU5gLiBObyBvdGhlciBjb25maWd1cmF0aW9ucyBhcHBlYXIgbmVjZXNzYXJ5LgoKSGVyZSYjMzk7cyBteSBkaXN0aWxsZWQgcmVhc29uaW5nOiB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgc2hpZnRzIHRoZSBIRUxMTyBoYW5kc2hha2UgbG9naWMgd2l0aGluIHRoZSBRUlRSIHN1YnN5c3RlbS4gUHJldmlvdXNseSByZXNpZGluZyBpbiB0aGUgdXNlcnNwYWNlL25ldHdvcmsgbmFtZXNwYWNlIChucykgbGF5ZXIsIGl0JiMzOTtzIG5vdyBlbWJlZGRlZCB3aXRoaW4gdGhlIGNvcmUgUVJUUiBsYXllci4gVGhpcyBtZWFucyBjb3JlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQsIHN1Y2ggYXMgYHFydHJfbm9kZV9lbnF1ZXVlYCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAuIEEgbmV3IGRlbGF5ZWQgd29yayBpdGVtLCBgcXJ0cl9oZWxsb193b3JrYCwgaGFzIGFsc28gYmVlbiBpbnRyb2R1Y2VkLgoKVGhpcyBjaGFuZ2UgaXMgaW5oZXJlbnRseSBmdW5jdGlvbmFsIGFuZCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGBRUlRSX1RVTmAgdmlydHVhbCBlbmRwb2ludCBkcml2ZXIsIHdoaWNoIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHNwZWNpZmljIHN5bWJvbHM6IGBxcnRyX25vZGVfZW5xdWV1ZWAsIGBxcnRyX2hlbGxvX3dvcmtgLCBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAsIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYC4gVGhlc2UgcmVwcmVzZW50IHRoZSBjcml0aWNhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24gYW5kIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIHN5c3RlbS4KCkkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYCBub3cuIFRoaXMgaXMgYSBzb2xpZCwgZm9jdXNlZCBhcHByb2FjaCB0byBmdXp6aW5nIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtRUlRSJiMzNDssCiAgICAmIzM0O1FSVFJfVFVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cXJ0cl9ub2RlX2VucXVldWUmIzM0OywKICAgICYjMzQ7cXJ0cl9oZWxsb193b3JrJiMzNDssCiAgICAmIzM0O3FydHJfZW5kcG9pbnRfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cXJ0cl9iY2FzdF9lbnF1ZXVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBIRUxMTyBoYW5kc2hha2UgbG9naWMgZnJvbSB0aGUgdXNlcnNwYWNlL25zIGxheWVyIHRvIHRoZSBjb3JlIGxheWVyIGluIHRoZSBRUlRSIHN1YnN5c3RlbS4gSXQgbW9kaWZpZXMgY29yZSBmdW5jdGlvbnMgbGlrZSBgcXJ0cl9ub2RlX2VucXVldWVgIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYCBhbmQgYWRkcyBhIG5ldyBkZWxheWVkIHdvcmsgYHFydHJfaGVsbG9fd29ya2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYFFSVFJfVFVOYCB2aXJ0dWFsIGVuZHBvaW50IGRyaXZlciwgc28gaXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UVJUUiYjMzQ7LAogICAgJiMzNDtRUlRSX1RVTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3FydHJfbm9kZV9lbnF1ZXVlJiMzNDssCiAgICAmIzM0O3FydHJfaGVsbG9fd29yayYjMzQ7LAogICAgJiMzNDtxcnRyX2VuZHBvaW50X3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3FydHJfYmNhc3RfZW5xdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgSEVMTE8gaGFuZHNoYWtlIGxvZ2ljIGZyb20gdGhlIHVzZXJzcGFjZS9ucyBsYXllciB0byB0aGUgY29yZSBsYXllciBpbiB0aGUgUVJUUiBzdWJzeXN0ZW0uIEl0IG1vZGlmaWVzIGNvcmUgZnVuY3Rpb25zIGxpa2UgYHFydHJfbm9kZV9lbnF1ZXVlYCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAgYW5kIGFkZHMgYSBuZXcgZGVsYXllZCB3b3JrIGBxcnRyX2hlbGxvX3dvcmtgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBRUlRSX1RVTmAgdmlydHVhbCBlbmRwb2ludCBkcml2ZXIsIHNvIGl0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIHNlbmRpbmcgb2YgUVJUUiBIRUxMTyBwYWNrZXRzIGZyb20gdGhlIG5hbWVzZXJ2aWNlICh1c2luZyBhIGtlcm5lbCBzb2NrZXQpIHRvIHRoZSBjb3JlIGxheWVyICh1c2luZyBkaXJlY3Qgc2tiIGFsbG9jYXRpb24gYW5kIGVucXVldWVpbmcpLiBUaGUgbmV3IEhFTExPIHBhY2tldCBwYXlsb2FkIGlzIGFsbG9jYXRlZCB2aWEgYHFydHJfYWxsb2NfY3RybF9wYWNrZXQoKWAsIHdoaWNoIHVzZXMgYHNrYl9wdXRfemVybygpYCB0byBlbnN1cmUgdGhlIG1lbW9yeSBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIHBhY2tldCBoZWFkZXIgaXMgYWxzbyBleHBsaWNpdGx5IGFuZCBjb21wbGV0ZWx5IGluaXRpYWxpemVkIGluIGBxcnRyX25vZGVfZW5xdWV1ZSgpYC4gV2hpbGUgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgYXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgaW4gYHFydHJfaGVsbG9fd29yaygpYCwgdGhleSBhcmUgb25seSB1c2VkIHRvIHJlYWQgdGhlIGBzcV9ub2RlYCBhbmQgYHNxX3BvcnRgIGZpZWxkczsgdGhlIHN0cnVjdHVyZXMgdGhlbXNlbHZlcyBhcmUgbmV2ZXIgY29waWVkIHRvIHRoZSBza2Igb3IgdXNlcnNwYWNlLCBtZWFuaW5nIGFueSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgYXJlIHNhZmVseSBpZ25vcmVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODk5ZDFkY2ZmZDA5YTVjN2M3OWI2MmJiNWY5NmI3ZjIwYzVlNzJjNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDEyOjMwOjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3FydHIvYWZfcXJ0ci5jIGIvbmV0L3FydHIvYWZfcXJ0ci5jCmluZGV4IGQwMmVmOWE3NGMzY2EuLjhlOWIzNjQ3OWJhYjggMTAwNjQ0Ci0tLSBhL25ldC9xcnRyL2FmX3FydHIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcXJ0ci9hZl9xcnRyLmMKQEAgLTksNiAmIzQzOzksNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3Rlcm1pb3MuaCZndDsJLyogRm9yIFRJT0NJTlEvT1VUUSAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd2FpdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKIAogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiAKQEAgLTEyMCw4ICYjNDM7MTIxLDEwIEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DKHFydHJfcG9ydHMpOwogICogQG5pZDogbm9kZSBpZAogICogQHFydHJfdHhfZmxvdzogeGFycmF5IG9mIHFydHJfdHhfZmxvdywga2V5ZWQgYnkgbm9kZSAmbHQ7Jmx0OyAzMiB8IHBvcnQKICAqIEBxcnRyX3R4X2xvY2s6IGxvY2sgZm9yIHFydHJfdHhfZmxvdyBpbnNlcnRzCiYjNDM7ICogQGhlbGxvX3NlbnQ6IGhlbGxvIHBhY2tldCBzZW5kIHN1Y2Nlc3NmdWwKICAqIEByeF9xdWV1ZTogcmVjZWl2ZSBxdWV1ZQogICogQGl0ZW06IGxpc3QgaXRlbSBmb3IgYnJvYWRjYXN0IGxpc3QKJiM0MzsgKiBAc2F5X2hlbGxvOiBkZWxheWVkIHdvcmsgZm9yIHNlbmRpbmcgaGVsbG8gcGFja2V0CiAgKi8KIHN0cnVjdCBxcnRyX25vZGUgewogCXN0cnVjdCBtdXRleCBlcF9sb2NrOwpAQCAtMTMyLDggJiM0MzsxMzUsMTEgQEAgc3RydWN0IHFydHJfbm9kZSB7CiAJc3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7CiAJc3RydWN0IG11dGV4IHFydHJfdHhfbG9jazsgLyogZm9yIHFydHJfdHhfZmxvdyAqLwogCiYjNDM7CWJvb2wgaGVsbG9fc2VudDsKJiM0MzsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3F1ZXVlOwogCXN0cnVjdCBsaXN0X2hlYWQgaXRlbTsKJiM0MzsJc3RydWN0IGRlbGF5ZWRfd29yayBzYXlfaGVsbG87CiB9OwogCiAvKioKQEAgLTE4Nyw2ICYjNDM7MTkzLDggQEAgc3RhdGljIHZvaWQgX19xcnRyX25vZGVfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKIAlsaXN0X2RlbCgmYW1wO25vZGUtJmd0O2l0ZW0pOwogCW11dGV4X3VubG9jaygmYW1wO3FydHJfbm9kZV9sb2NrKTsKIAomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtub2RlLSZndDtzYXlfaGVsbG8pOwomIzQzOwogCXNrYl9xdWV1ZV9wdXJnZSgmYW1wO25vZGUtJmd0O3J4X3F1ZXVlKTsKIAogCS8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqLwpAQCAtMzQxLDYgJiM0MzszNDksMTQgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXNpemVfdCBsZW4gPSBza2ItJmd0O2xlbjsKIAlpbnQgcmMsIGNvbmZpcm1fcng7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwomIzQzOwlpZiAoIW5vZGUtJmd0O2hlbGxvX3NlbnQgJmFtcDsmYW1wOyB0eXBlICE9IFFSVFJfVFlQRV9IRUxMTykgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bm9kZS0mZ3Q7ZXBfbG9jayk7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiAtRUFHQUlOOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwomIzQzOwogCWNvbmZpcm1fcnggPSBxcnRyX3R4X3dhaXQobm9kZSwgdG8tJmd0O3NxX25vZGUsIHRvLSZndDtzcV9wb3J0LCB0eXBlKTsKIAlpZiAoY29uZmlybV9yeCAmbHQ7IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CkBAIC0zNTMsNyAmIzQzOzM2OSw3IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAloZHItJmd0O3NyY19ub2RlX2lkID0gY3B1X3RvX2xlMzIoZnJvbS0mZ3Q7c3Ffbm9kZSk7CiAJaGRyLSZndDtzcmNfcG9ydF9pZCA9IGNwdV90b19sZTMyKGZyb20tJmd0O3NxX3BvcnQpOwogCWlmICh0by0mZ3Q7c3FfcG9ydCA9PSBRUlRSX1BPUlRfQ1RSTCkgewotCQloZHItJmd0O2RzdF9ub2RlX2lkID0gY3B1X3RvX2xlMzIobm9kZS0mZ3Q7bmlkKTsKJiM0MzsJCWhkci0mZ3Q7ZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMihSRUFEX09OQ0Uobm9kZS0mZ3Q7bmlkKSk7CiAJCWhkci0mZ3Q7ZHN0X3BvcnRfaWQgPSBjcHVfdG9fbGUzMihRUlRSX1BPUlRfQ1RSTCk7CiAJfSBlbHNlIHsKIAkJaGRyLSZndDtkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKHRvLSZndDtzcV9ub2RlKTsKQEAgLTM3Miw2ICYjNDM7Mzg4LDggQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJcmMgPSBub2RlLSZndDtlcC0mZ3Q7eG1pdChub2RlLSZndDtlcCwgc2tiKTsKIAkJZWxzZQogCQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlpZiAoIXJjICZhbXA7JmFtcDsgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pCiYjNDM7CQkJbm9kZS0mZ3Q7aGVsbG9fc2VudCA9IHRydWU7CiAJCW11dGV4X3VubG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwogCX0KIAkvKiBOZWVkIHRvIGVuc3VyZSB0aGF0IGEgc3Vic2VxdWVudCBtZXNzYWdlIGNhcnJpZXMgdGhlIG90aGVyd2lzZSBsb3N0CkBAIC0zNzksNiAmIzQzOzM5Nyw5IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAocmMgJmFtcDsmYW1wOyBjb25maXJtX3J4KQogCQlxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLSZndDtzcV9ub2RlLCB0by0mZ3Q7c3FfcG9ydCk7CiAKJiM0MzsJaWYgKHJjID09IC1FQUdBSU4gJmFtcDsmYW1wOyB0eXBlID09IFFSVFJfVFlQRV9IRUxMTykKJiM0MzsJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO25vZGUtJmd0O3NheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTsKJiM0MzsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTQxNiw3ICYjNDM7NDM3LDcgQEAgc3RhdGljIHZvaWQgcXJ0cl9ub2RlX2Fzc2lnbihzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgbmlkKQogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cXJ0cl9ub2Rlc19sb2NrLCBmbGFncyk7CiAJcmFkaXhfdHJlZV9pbnNlcnQoJmFtcDtxcnRyX25vZGVzLCBuaWQsIG5vZGUpOwogCWlmIChub2RlLSZndDtuaWQgPT0gUVJUUl9FUF9OSURfQVVUTykKLQkJbm9kZS0mZ3Q7bmlkID0gbmlkOwomIzQzOwkJV1JJVEVfT05DRShub2RlLSZndDtuaWQsIG5pZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3FydHJfbm9kZXNfbG9jaywgZmxhZ3MpOwogfQogCkBAIC01NzAsNiAmIzQzOzU5MSwzOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsCiAJcmV0dXJuIHNrYjsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTsKJiM0MzsJc3RydWN0IHNvY2thZGRyX3FydHIgdG8gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9OwomIzQzOwlzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqcGt0OwomIzQzOwlzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlOwomIzQzOwlzdHJ1Y3QgcXJ0cl9zb2NrICpjdHJsOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwlub2RlID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwgc3RydWN0IHFydHJfbm9kZSwgc2F5X2hlbGxvKTsKJiM0MzsKJiM0MzsJLyogTlMgbXVzdCBiZSBib3VuZCBiZWZvcmUgd2UgY2FuIHNlbmQ7IHJldHJ5IHdpdGggYmFja29mZiBpZiBub3QgcmVhZHkgKi8KJiM0MzsJY3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpOwomIzQzOwlpZiAoIWN0cmwpIHsKJiM0MzsJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO25vZGUtJmd0O3NheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KCZhbXA7cGt0LCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFza2IpIHsKJiM0MzsJCXFydHJfcG9ydF9wdXQoY3RybCk7CiYjNDM7CQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtub2RlLSZndDtzYXlfaGVsbG8sIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGt0LSZndDtjbWQgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfSEVMTE8pOwomIzQzOwlmcm9tLnNxX25vZGUgPSBxcnRyX2xvY2FsX25pZDsKJiM0MzsJdG8uc3Ffbm9kZSA9IG5vZGUtJmd0O25pZDsKJiM0MzsJcXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sICZhbXA7ZnJvbSwgJmFtcDt0byk7CiYjNDM7CXFydHJfcG9ydF9wdXQoY3RybCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKCkgLSByZWdpc3RlciBhIG5ldyBlbmRwb2ludAogICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlcgpAQCAtNTk1LDYgJiM0Mzs2NDgsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpCiAJbm9kZS0mZ3Q7bmlkID0gUVJUUl9FUF9OSURfQVVUTzsKIAlub2RlLSZndDtlcCA9IGVwOwogCiYjNDM7CW5vZGUtJmd0O2hlbGxvX3NlbnQgPSBmYWxzZTsKJiM0MzsJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtub2RlLSZndDtzYXlfaGVsbG8sIHFydHJfaGVsbG9fd29yayk7CiYjNDM7CiAJeGFfaW5pdCgmYW1wO25vZGUtJmd0O3FydHJfdHhfZmxvdyk7CiAJbXV0ZXhfaW5pdCgmYW1wO25vZGUtJmd0O3FydHJfdHhfbG9jayk7CiAKQEAgLTYwNSw2ICYjNDM7NjYxLDkgQEAgaW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKQogCW11dGV4X3VubG9jaygmYW1wO3FydHJfbm9kZV9sb2NrKTsKIAllcC0mZ3Q7bm9kZSA9IG5vZGU7CiAKJiM0MzsJLyogSW5pdGlhdGUgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgKi8KJiM0MzsJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bm9kZS0mZ3Q7c2F5X2hlbGxvLCAwKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIpOwpAQCAtODc5LDYgJiM0Mzs5MzgsOSBAQCBzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJbXV0ZXhfbG9jaygmYW1wO3FydHJfbm9kZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhbXA7cXJ0cl9hbGxfbm9kZXMsIGl0ZW0pIHsKJiM0MzsJCS8qIFNraXAgbm9kZXMgd2l0aCBubyBhc3NpZ25lZCBub2RlIElEIHlldC4gKi8KJiM0MzsJCWlmIChSRUFEX09OQ0Uobm9kZS0mZ3Q7bmlkKSA9PSBRUlRSX0VQX05JRF9BVVRPKQomIzQzOwkJCWNvbnRpbnVlOwogCQlza2JuID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2tibikKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L3FydHIvbnMuYyBiL25ldC9xcnRyL25zLmMKaW5kZXggYjNmOWJiY2Y5YWI5Yi4uNmQ5M2JjZDI1MGU3NSAxMDA2NDQKLS0tIGEvbmV0L3FydHIvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcXJ0ci9ucy5jCkBAIC0yMTIsNiAmIzQzOzIxMiw3IEBAIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydiwKIAkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHNlbmQgbG9va3VwIG5vdGlmaWNhdGlvblxuJiMzNDspOwogfQogCiYjNDM7LyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovCiBzdGF0aWMgaW50IGFubm91bmNlX3NlcnZlcnMoc3RydWN0IHNvY2thZGRyX3FydHIgKnNxKQogewogCXN0cnVjdCBxcnRyX3NlcnZlciAqc3J2OwpAQCAtMzI2LDM4ICYjNDM7MzI3LDggQEAgc3RhdGljIGludCBzZXJ2ZXJfZGVsKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBwb3J0LCBib29sIGJjYXN0KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNheV9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZGVzdCkKLXsKLQlzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCBwa3Q7Ci0Jc3RydWN0IG1zZ2hkciBtc2cgPSB7IH07Ci0Jc3RydWN0IGt2ZWMgaXY7Ci0JaW50IHJldDsKLQotCWl2Lmlvdl9iYXNlID0gJmFtcDtwa3Q7Ci0JaXYuaW92X2xlbiA9IHNpemVvZihwa3QpOwotCi0JbWVtc2V0KCZhbXA7cGt0LCAwLCBzaXplb2YocGt0KSk7Ci0JcGt0LmNtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9IRUxMTyk7Ci0KLQltc2cubXNnX25hbWUgPSAoc3RydWN0IHNvY2thZGRyICopZGVzdDsKLQltc2cubXNnX25hbWVsZW4gPSBzaXplb2YoKmRlc3QpOwotCi0JcmV0ID0ga2VybmVsX3NlbmRtc2cocXJ0cl9ucy5zb2NrLCAmYW1wO21zZywgJmFtcDtpdiwgMSwgc2l6ZW9mKHBrdCkpOwotCWlmIChyZXQgJmx0OyAwKQotCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gc2VuZCBoZWxsbyBtc2dcbiYjMzQ7KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qIEFubm91bmNlIHRoZSBsaXN0IG9mIHNlcnZlcnMgcmVnaXN0ZXJlZCBvbiB0aGUgbG9jYWwgbm9kZSAqLwogc3RhdGljIGludCBjdHJsX2NtZF9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IHNheV9oZWxsbyhzcSk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiByZXQ7Ci0KIAlyZXR1cm4gYW5ub3VuY2Vfc2VydmVycyhzcSk7CiB9CiAKQEAgLTc3NCwxMCAmIzQzOzc0NSw2IEBAIGludCBxcnRyX25zX2luaXQodm9pZCkKIAlxcnRyX25zLmJjYXN0X3NxLnNxX25vZGUgPSBRUlRSX05PREVfQkNBU1Q7CiAJcXJ0cl9ucy5iY2FzdF9zcS5zcV9wb3J0ID0gUVJUUl9QT1JUX0NUUkw7CiAKLQlyZXQgPSBzYXlfaGVsbG8oJmFtcDtxcnRyX25zLmJjYXN0X3NxKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlcnJfd3E7Ci0KIAkvKiBBcyB0aGUgcXJ0ciBucyBzb2NrZXQgb3duZXIgYW5kIGNyZWF0b3IgaXMgdGhlIHNhbWUgbW9kdWxlLCB3ZSBoYXZlCiAJICogdG8gZGVjcmVhc2UgdGhlIHFydHIgbW9kdWxlIHJlZmVyZW5jZSBjb3VudCB0byBndWFyYW50ZWUgdGhhdCBpdAogCSAqIHJlbWFpbnMgemVybyBhZnRlciB0aGUgbnMgc29ja2V0IGlzIGNyZWF0ZWQsIG90aGVyd2lzZSwgZXhlY3V0aW5nCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzU1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUVJUUiBIZWxsbyBQYWNrZXQgUmVsb2NhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvcXJ0ci9hZl9xcnRyLmNgIGFuZCBgbmV0L3FydHIvbnMuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgY29yZSBjaGFuZ2VzIHRvIHRoZSBRdWFsY29tbSBSb3V0ZXIgVHJhbnNwb3J0IChRUlRSKSBzdWJzeXN0ZW0uIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIG1vdmluZyB0aGUgc2VuZGluZyBvZiB0aGUgYFFSVFJfVFlQRV9IRUxMT2AgcGFja2V0LiBQcmV2aW91c2x5IGhhbmRsZWQgYnkgdGhlIG5hbWVzZXJ2aWNlIChgbnMuY2ApLCBpdCYjMzk7cyBub3cgYmVpbmcgc2hpZnRlZCB0byB0aGUgY29yZSBsYXllciAoYGFmX3FydHIuY2ApLiBUaGF0JiMzOTtzIGEgbG9naWNhbCBtb3ZlLCBwcm9iYWJseSBmb3IgYmV0dGVyIGludGVncmF0aW9uIGFuZCBjb250cm9sLgoKSW50ZXJlc3RpbmcgdGhhdCB0aGV5IGFyZSB1c2luZyBkZWxheWVkIHdvcmsgKGBzYXlfaGVsbG9gKSB0byBhY3R1YWxseSBzZW5kIHRoZSBoZWxsbyBwYWNrZXQuIFRoaXMgc3VnZ2VzdHMgdGhleSB3YW50IHRvIGF2b2lkIGJsb2NraW5nIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGdvb2QuIExldCYjMzk7cyBkaWcgaW50byB0aGUgYHFydHJfaGVsbG9fd29ya2AgZnVuY3Rpb24gYW5kIHNlZSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuCgpMb29raW5nIGF0IHRoZSBjb2RlOgpgYGBjCiYjNDM7c3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9xcnRyIGZyb20gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9OwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciB0byA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07CiYjNDM7CXN0cnVjdCBxcnRyX2N0cmxfcGt0ICpwa3Q7CiYjNDM7CXN0cnVjdCBxcnRyX25vZGUgKm5vZGU7CiYjNDM7CXN0cnVjdCBxcnRyX3NvY2sgKmN0cmw7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CiYjNDM7CW5vZGUgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcXJ0cl9ub2RlLCBzYXlfaGVsbG8pOwomIzQzOwomIzQzOwkvKiBOUyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB3ZSBjYW4gc2VuZDsgcmV0cnkgd2l0aCBiYWNrb2ZmIGlmIG5vdCByZWFkeSAqLwomIzQzOwljdHJsID0gcXJ0cl9wb3J0X2xvb2t1cChRUlRSX1BPUlRfQ1RSTCk7CiYjNDM7CWlmICghY3RybCkgewomIzQzOwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bm9kZS0mZ3Q7c2F5X2hlbGxvLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoJmFtcDtwa3QsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXNrYikgewomIzQzOwkJcXJ0cl9wb3J0X3B1dChjdHJsKTsKJiM0MzsJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO25vZGUtJmd0O3NheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlwa3QtJmd0O2NtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9IRUxMTyk7CiYjNDM7CWZyb20uc3Ffbm9kZSA9IHFydHJfbG9jYWxfbmlkOwomIzQzOwl0by5zcV9ub2RlID0gbm9kZS0mZ3Q7bmlkOwomIzQzOwlxcnRyX25vZGVfZW5xdWV1ZShub2RlLCBza2IsIFFSVFJfVFlQRV9IRUxMTywgJmFtcDtmcm9tLCAmYW1wO3RvKTsKJiM0MzsJcXJ0cl9wb3J0X3B1dChjdHJsKTsKJiM0Mzt9CmBgYAoKT2theSwgc28gdGhlIGBxcnRyX2hlbGxvX3dvcmtgIGZ1bmN0aW9uIGRvZXMgYSBmZXcgdGhpbmdzLiBJdCByZXRyaWV2ZXMgdGhlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZWxheWVkIHdvcmssIGxvb2tzIHVwIHRoZSBjb250cm9sIHNvY2tldCAoYFFSVFJfUE9SVF9DVFJMYCksIGNoZWNrcyBpZiB0aGUgbmFtZXNlcnZlciBpcyBib3VuZCwgYW5kIGlmIG5vdCwgaXQgc2NoZWR1bGVzIGFub3RoZXIgZGVsYXllZCB3b3JrIGluc3RhbmNlIHdpdGggYSBiYWNrb2ZmLiBUaGF0JiMzOTtzIGEgZ29vZCB3YXkgdG8gaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGluaXRpYWxpemF0aW9uLgoKSWYgdGhlIGNvbnRyb2wgc29ja2V0IGlzIGF2YWlsYWJsZSwgaXQgYWxsb2NhdGVzIGEgY29udHJvbCBwYWNrZXQgKGBza2JgKSwgcG9wdWxhdGVzIHRoZSBgUVJUUl9UWVBFX0hFTExPYCBjb21tYW5kLCBzZXRzIHVwIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcywgYW5kIHRoZW4gZW5xdWV1ZXMgdGhlIHBhY2tldCB1c2luZyBgcXJ0cl9ub2RlX2VucXVldWVgLiBUaGlzIG1ha2VzIHNlbnNlLiBJdCBhbHNvIGdyYWNlZnVsbHkgaGFuZGxlcyB0aGUgYWxsb2NhdGlvbiBmYWlsdXJlLCBzY2hlZHVsaW5nIGFub3RoZXIgZGVsYXllZCB3b3JrIGluc3RhbmNlLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgcGFja2V0IGFsbG9jYXRpb24uIE5lZWQgdG8gc2VlIGhvdyBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgaXMgaW1wbGVtZW50ZWQuIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoYXQgU0tCIGFsbG9jYXRpb24sIGVzcGVjaWFsbHkgaXRzIHNpemUgYW5kIGFueSBhc3NvY2lhdGVkIGZsYWdzLCBhbmQgaG93IHRoZSBwYXlsb2FkIHBvaW50ZXIgYHBrdGAgaXMgbWFuYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0cl9hbGxvY19jdHJsX3BhY2tldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmM9NTY2PUVYUE9SVF9TWU1CT0xfR1BMKHFydHJfZW5kcG9pbnRfcG9zdCk7XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTU2OC0vKipcbm5ldC9xcnRyL2FmX3FydHIuYzo1Njk6ICogcXJ0cl9hbGxvY19jdHJsX3BhY2tldCgpIC0gYWxsb2NhdGUgY29udHJvbCBwYWNrZXQgc2tiXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTcwLSAqIEBwa3Q6IHJlZmVyZW5jZSB0byBxcnRyX2N0cmxfcGt0IHBvaW50ZXJcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTc3LSAqL1xubmV0L3FydHIvYWZfcXJ0ci5jOjU3ODpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTc5LVx0XHRcdFx0XHQgICAgICBnZnBfdCBmbGFncylcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9NTk0PXN0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTYxMS1cbm5ldC9xcnRyL2FmX3FydHIuYzo2MTI6XHRza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KFx1MDAyNnBrdCwgR0ZQX0tFUk5FTCk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjEzLVx0aWYgKCFza2IpIHtcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9Njc1PXZvaWQgcXJ0cl9lbmRwb2ludF91bnJlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcClcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjk3LVx0XHRzcmMuc3Ffbm9kZSA9IGl0ZXIuaW5kZXg7XG5uZXQvcXJ0ci9hZl9xcnRyLmM6Njk4Olx0XHRza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KFx1MDAyNnBrdCwgR0ZQX0FUT01JQyk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjk5LVx0XHRpZiAoc2tiKSB7XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTc0ND1zdGF0aWMgdm9pZCBxcnRyX3BvcnRfcmVtb3ZlKHN0cnVjdCBxcnRyX3NvY2sgKmlwYylcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNzU0LVxubmV0L3FydHIvYWZfcXJ0ci5jOjc1NTpcdHNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoXHUwMDI2cGt0LCBHRlBfS0VSTkVMKTtcbm5ldC9xcnRyL2FmX3FydHIuYy03NTYtXHRpZiAoc2tiKSB7XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTEwNjA9c3RhdGljIGludCBxcnRyX3NlbmRfcmVzdW1lX3R4KHN0cnVjdCBxcnRyX2NiICpjYilcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTA3Mi1cbm5ldC9xcnRyL2FmX3FydHIuYzoxMDczOlx0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcdTAwMjZwa3QsIEdGUF9LRVJORUwpO1xubmV0L3FydHIvYWZfcXJ0ci5jLTEwNzQtXHRpZiAoIXNrYikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODYyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGJlaW5nIGltcGxlbWVudGVkLCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCBhIGxvdyBsZXZlbC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29yZSBvZiB0aGUgUVJUUiBtZXNzYWdpbmcgc3lzdGVtLiBJJiMzOTttIGFscmVhZHkgaW1hZ2luaW5nIGEgc3RydWN0dXJlIGFsbG9jYXRpb24sIGxpa2VseSBzb21lIGZvcm0gb2YgYGttYWxsb2NgIG9yIHNpbWlsYXIsIGZvbGxvd2VkIGJ5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrZXQgaGVhZGVyLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGZpZWxkIHNldHVwIOKAkyB0aGUgdHlwZSwgZmxhZ3MsIG1heWJlIGEgc2VxdWVuY2UgbnVtYmVyLCBhbmQgYWRkcmVzc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbnRyb2wgY2hhbm5lbC4gVGhlcmUgbWlnaHQgYmUgc29tZSBlcnJvciBjaGVja2luZyBpbnZvbHZlZCwgZW5zdXJpbmcgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUgYW5kIHRoYXQgcGFyYW1ldGVycyBhcmUgdmFsaWQuIEkmIzM5O20gYWxzbyB3b25kZXJpbmcgYWJvdXQgcG90ZW50aWFsIG1lbW9yeSBhbGlnbm1lbnQgY29uc2lkZXJhdGlvbnMg4oCTIHNvbWV0aGluZyBsaWtlIHRoaXMgaXMgcHJvYmFibHkgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlLCBzbyB0aGV5JiMzOTtsbCB3YW50IGVmZmljaWVudCB1c2Ugb2YgdGhlIGNhY2hlLiBJIGFsc28gd29uZGVyIGlmIHRoZXkmIzM5O3JlIHVzaW5nIGEgcHJlLWFsbG9jYXRlZCBwb29sIGluIHRoZSBmYXN0IHBhdGggdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIG1hbGxvYyBpbiB0aGUgY29tbW9uIGNhc2UuIEkgbmVlZCB0byBzZWUgaWYgaXTigJlzIGRlc2lnbmVkIHRvIGhhbmRsZSBkaWZmZXJlbnQgc2l6ZXMgb3IgdHlwZXMgb2YgY29udHJvbCBwYWNrZXRzLCBvciBpZiBpdCYjMzk7cyBzcGVjaWFsaXplZCBmb3IgYSBzcGVjaWZpYyBvbmUuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcmV0dXJuIHZhbHVlLCBpcyBpdCBhIHBvaW50ZXIgdG8gdGhlIHBhY2tldCBvciBhbiBlcnJvciBjb2RlPyBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGtpbmQgb2YgZXJyb3IgY2hlY2tpbmcgdG8gaGFuZGxlIHRoZSBmYWlsdXJlIGNhc2VzLCBhbmQgSSBob3BlIGl0JiMzOTtzIHdlbGwtZG9jdW1lbnRlZC4gQWxyaWdodCwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTcwOlx0ICogQHBrdDogcmVmZXJlbmNlIHRvIHFydHJfY3RybF9wa3QgcG9pbnRlclxuIDU3MTpcdCAqIEBmbGFnczogdGhlIHR5cGUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlXG4gNTcyOlx0ICpcbiA1NzM6XHQgKiBSZXR1cm5zIG5ld2x5IGFsbG9jYXRlZCBza19idWZmLCBvciBOVUxMIG9uIGZhaWx1cmVcbiA1NzQ6XHQgKlxuIDU3NTpcdCAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGEgc2tfYnVmZiBsYXJnZSBlbm91Z2ggdG8gY2FycnkgYSBxcnRyX2N0cmxfcGt0IGFuZFxuIDU3NjpcdCAqIG9uIHN1Y2Nlc3MgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgY29udHJvbCBwYWNrZXQgaW4gQHBrdC5cbiA1Nzc6XHQgKi9cbiA1Nzg6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsXG4gNTc5Olx0XHRcdFx0XHRcdCAgICAgIGdmcF90IGZsYWdzKVxuIDU4MDpcdHtcbiA1ODE6XHRcdGNvbnN0IGludCBwa3RfbGVuID0gc2l6ZW9mKHN0cnVjdCBxcnRyX2N0cmxfcGt0KTtcbiA1ODI6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gNTgzOlx0XG4gNTg0Olx0XHRza2IgPSBhbGxvY19za2IoUVJUUl9IRFJfTUFYX1NJWkUgJiM0MzsgcGt0X2xlbiwgZmxhZ3MpO1xuIDU4NTpcdFx0aWYgKCFza2IpXG4gNTg2Olx0XHRcdHJldHVybiBOVUxMO1xuIDU4NzpcdFxuIDU4ODpcdFx0c2tiX3Jlc2VydmUoc2tiLCBRUlRSX0hEUl9NQVhfU0laRSk7XG4gNTg5Olx0XHQqcGt0ID0gc2tiX3B1dF96ZXJvKHNrYiwgcGt0X2xlbik7XG4gNTkwOlx0XG4gNTkxOlx0XHRyZXR1cm4gc2tiO1xuIDU5MjpcdH1cbiA1OTM6XHRcbiA1OTQ6XHRzdGF0aWMgdm9pZCBxcnRyX2hlbGxvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDU5NTpcdHtcbiA1OTY6XHRcdHN0cnVjdCBzb2NrYWRkcl9xcnRyIGZyb20gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9O1xuIDU5NzpcdFx0c3RydWN0IHNvY2thZGRyX3FydHIgdG8gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9O1xuIDU5ODpcdFx0c3RydWN0IHFydHJfY3RybF9wa3QgKnBrdDtcbiA1OTk6XHRcdHN0cnVjdCBxcnRyX25vZGUgKm5vZGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MDUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0ODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBRUlRSIEhlbGxvIFBhY2tldCBUcmFuc21pc3Npb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgJiMzNDtoZWxsbyYjMzQ7IHBhY2tldCBpcyBiZWluZyBoYW5kbGVkIGluIHRoZSBRUlRSIGZyYW1ld29yayBub3cuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBza2JfcHV0X3plcm9gIGlzIGJlaW5nIHVzZWQsIHNvIHRoZSBwYWNrZXQmIzM5O3MgcGF5bG9hZCBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm9lZCBvdXQgaW5pdGlhbGx5LiBHb29kLiBUaGVuLCB3aXRoaW4gYHFydHJfaGVsbG9fd29ya2AsIHRoZSBgcGt0LSZndDtjbWRgIGZpZWxkIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGBRUlRSX1RZUEVfSEVMTE9gIHVzaW5nIGBjcHVfdG9fbGUzMmAsIGFuZCB0aGUgcmVzdCBvZiB0aGUgcGFja2V0IGlzLCBhZ2FpbiwgemVyb2VkIG91dC4gVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLCBgZnJvbWAgYW5kIGB0b2AsIGFyZSBpbml0aWFsaXplZCB3aXRoIGB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9YCwgd2hpY2gsIGR1ZSB0byB0aGUgYHNvY2thZGRyX3FydHJgIHN0cnVjdHVyZSBkZWZpbml0aW9uLCBlZmZlY3RpdmVseSB6ZXJvZXMgdGhlIHJlbWFpbmluZyBmaWVsZHMuIEZpbmFsbHksIGl0JiMzOTtzIGVucXVldWVkIHVzaW5nIGBxcnRyX25vZGVfZW5xdWV1ZWAuCgpCdXQgaG9sZCBvbiBhIHNlY29uZOKApiBJJiMzOTttIHJlbWVtYmVyaW5nIHRoZSBvbGRlciB2ZXJzaW9uLCBwYXJ0aWN1bGFybHkgdGhlIGBzYXlfaGVsbG9gIGZ1bmN0aW9uIGluIGBuZXQvcXJ0ci9ucy5jYC4gQWgsIHllcywgaXQgdXNlZCB0byB1c2UgYGtlcm5lbF9zZW5kbXNnYCB0byB0cmFuc21pdCB0aGUgaGVsbG8gcGFja2V0LiBUaGUgb2xkIGNvZGUgc25pcHBldCBzaG93cyB0aGlzIHF1aXRlIGNsZWFybHkuIEl0IGV4cGxpY2l0bHkgc2V0cyB0aGUgcGFja2V0IGNvbnRlbnRzLCBhbmQgdGhlbiBzZW5kcyBpdCB2aWEgYGtlcm5lbF9zZW5kbXNnYC4KClNvLCB0aGUgY3JpdGljYWwgZGlmZmVyZW5jZSBpcyB0aGUgdHJhbnNtaXNzaW9uIG1ldGhvZDogZGlyZWN0IGVucXVldWUgdmVyc3VzIGBrZXJuZWxfc2VuZG1zZ2AuIE5vdywgdGhpcyBjaGFuZ2UgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgY29uY2VybjogSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gbGVhayBpbnRvIHRoZSBoZWxsbyBwYWNrZXQ/CgpJIGFtIG9ic2VydmluZyB0aGF0IHRoZSBgZnJvbWAgYW5kIGB0b2AgYHNvY2thZGRyX3FydHJgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2suIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBzdHJ1Y3R1cmUgaXMgY3JpdGljYWwgaGVyZS4gTGV0IG1lIGNoZWNrIHRoZSBkZWZpbml0aW9u4oCmCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBzb2NrYWRkcl9xcnRyIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvcXJ0ci5oLTEwLVxuaW5jbHVkZS91YXBpL2xpbnV4L3FydHIuaDoxMTpzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciB7XG5pbmNsdWRlL3VhcGkvbGludXgvcXJ0ci5oLTEyLVx0X19rZXJuZWxfc2FfZmFtaWx5X3Qgc3FfZmFtaWx5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjQ2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBzeW50aGVzaXplIHRoZXNlIHRob3VnaHRzIGFzIGlmIHRoZXkgd2VyZSBteSBvd24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIG15IGZpZWxkLiBIZXJlIHdlIGdvOgoKKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBOdWFuY2VzKioKCkFscmlnaHQsIGJlZm9yZSBJIGNvbW1pdCB0byBhbnkga2luZCBvZiBhbmFseXNpcyBvciByZXNwb25zZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlICplbnRpcmUqIHBpY3R1cmUuIEl0JiMzOTtzIGNydWNpYWwgZm9yIG1lLCBhcyBhbiBleHBlcnQsIHRvIHVuZGVyc3RhbmQgdGhlIHN1YmplY3QgbWF0dGVyIGluIGl0cyBlbnRpcmV0eS4gSSBjYW4mIzM5O3QganVzdCBza2ltIHRoZSBzdXJmYWNlLiBJIG5lZWQgYSByb2J1c3QsIGNvbXByZWhlbnNpdmUgZGVmaW5pdGlvbiAtIG5vIHNob3J0Y3V0cywgbm8gYXNzdW1wdGlvbnMuIEkgbmVlZCBhbGwgdGhlIGNvbnRleHR1YWwgZmFjdG9ycywgdGhlIGZ1bGwgc2NvcGUgb2YgYW55IHRlY2huaWNhbCBqYXJnb24gb3IgdGhlb3J5LCBhbmQgdGhlIGV4YWN0IGludGVudCBvZiB0aGUgZG9jdW1lbnQuIFRoYXQmIzM5O3Mgd2hhdCBJIHJlcXVpcmUgYmVmb3JlIEkgc3RhcnQuIEkgbmVlZCB0byBiZSBleGFjdC4gSXQgaXMgZXNzZW50aWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9xcnRyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDEwOlx0XG4gIDExOlx0c3RydWN0IHNvY2thZGRyX3FydHIge1xuICAxMjpcdFx0X19rZXJuZWxfc2FfZmFtaWx5X3Qgc3FfZmFtaWx5O1xuICAxMzpcdFx0X191MzIgc3Ffbm9kZTtcbiAgMTQ6XHRcdF9fdTMyIHNxX3BvcnQ7XG4gIDE1Olx0fTtcbiAgMTY6XHRcbiAgMTc6XHRlbnVtIHFydHJfcGt0X3R5cGUge1xuICAxODpcdFx0UVJUUl9UWVBFX0RBVEFcdFx0PSAxLFxuICAxOTpcdFx0UVJUUl9UWVBFX0hFTExPXHRcdD0gMixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk4NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIHNvY2thZGRyX3FydHIgU3RydWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgYW5kIGltbWVkaWF0ZWx5IEkmIzM5O20gbm90aWNpbmcgc29tZXRoaW5nIHRoYXQgcGlxdWVzIG15IGludGVyZXN0LiBJdCBoYXMgdGhlIHN0YW5kYXJkIGBzcV9mYW1pbHlgIGZpZWxkLCBhIG5vZGUgSUQgKGBzcV9ub2RlYCksIGFuZCBhIHBvcnQgSUQgKGBzcV9wb3J0YCkuIEZpbmUuIEJ1dCB0aGVuIEkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGF0YSB0eXBlcy4gSSBrbm93IGBfX2tlcm5lbF9zYV9mYW1pbHlfdGAgaXMgdHlwaWNhbGx5IGFuIGB1bnNpZ25lZCBzaG9ydGAsIHdoaWNoIG1lYW5zIGl04oCZcyBvbmx5IHR3byBieXRlcy4gVGhlbiBgc3Ffbm9kZWAgaXMgYSBgX191MzJgLCB0aGF0JiMzOTtzIGZvdXIgYnl0ZXMuCgpUaGF0JiMzOTtzIHdoZW4gaXQgaGl0cyBtZTogdGhlcmUmIzM5O3MgZ29pbmcgdG8gYmUgcGFkZGluZyBpbiB0aGVyZS4gV2UmIzM5O3ZlIGdvdCB0d28gYnl0ZXMgZm9yIGBzcV9mYW1pbHlgLCBmb3VyIGJ5dGVzIGZvciBgc3Ffbm9kZWAsIG1lYW5pbmcgYSB0d28tYnl0ZSBnYXAgaXMgZ2V0dGluZyBpbnNlcnRlZCBzb21ld2hlcmUgdG8gYWxpZ24gbWVtb3J5LiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVmaW5pdGlvbiBvZiBgX19rZXJuZWxfc2FfZmFtaWx5X3RgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwganVzdCBpbiBjYXNlIHRoZXJlJiMzOTtzIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgdmFyaWF0aW9uIEkmIzM5O20gbm90IGF3YXJlIG9mLiBHb3R0YSBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHZhbGlkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0eXBlZGVmLipfX2tlcm5lbF9zYV9mYW1pbHlfdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NvY2tldC5oPTI2PWV4dGVybiB2b2lkIHNvY2tldF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSk7XG4tLVxuaW5jbHVkZS9saW51eC9zb2NrZXQuaC0yOC1cbmluY2x1ZGUvbGludXgvc29ja2V0Lmg6Mjk6dHlwZWRlZiBfX2tlcm5lbF9zYV9mYW1pbHlfdFx0c2FfZmFtaWx5X3Q7XG5pbmNsdWRlL2xpbnV4L3NvY2tldC5oLTMwLVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9zb2NrZXQuaC05LVxuaW5jbHVkZS91YXBpL2xpbnV4L3NvY2tldC5oOjEwOnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfc2FfZmFtaWx5X3Q7XG5pbmNsdWRlL3VhcGkvbGludXgvc29ja2V0LmgtMTEtXG4tLVxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS9saW51eC9zb2NrZXQuaD0yNj1leHRlcm4gdm9pZCBzb2NrZXRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEpO1xuLS1cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvbGludXgvc29ja2V0LmgtMjgtXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oOjI5OnR5cGVkZWYgX19rZXJuZWxfc2FfZmFtaWx5X3RcdHNhX2ZhbWlseV90O1xudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS9saW51eC9zb2NrZXQuaC0zMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYwNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBzb2NrYWRkcl9xcnRyYCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgYW4gYHVuc2lnbmVkIHNob3J0YCBpcyBpbmRlZWQgMiBieXRlcy4gTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCBkZWZpbml0aW9uLiBJIHNlZSBgc3FfZmFtaWx5YCBhcyBhIDItYnl0ZSBmaWVsZC4gVGhlbiwgdGhlcmUmIzM5O3MgbGlrZWx5IDIgYnl0ZXMgb2YgcGFkZGluZy4gRm9sbG93aW5nIHRoYXQsIHdlIGhhdmUgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAsIGJvdGggYF9fdTMyYCB3aGljaCBJIGtub3cgYXJlIDQgYnl0ZXMgZWFjaC4gVGhhdCBwdXRzIHRoZSB0b3RhbCBhdCAxMiBieXRlczogYHNxX2ZhbWlseWAgKDIgYnl0ZXMpICYjNDM7IHBhZGRpbmcgKDIgYnl0ZXMpICYjNDM7IGBzcV9ub2RlYCAoNCBieXRlcykgJiM0MzsgYHNxX3BvcnRgICg0IGJ5dGVzKS4gTG9va2luZyBhdCB0aGUgbWVtb3J5IGxheW91dCwgYHNxX2ZhbWlseWAgc3RhcnRzIGF0IG9mZnNldCAwLCBgc3Ffbm9kZWAgYXQgNCwgYW5kIGBzcV9wb3J0YCBhdCA4LgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGlzIGFib3V0IHRoZSBwYWRkaW5nLiBJZiBJIGluaXRpYWxpemUgaXQgd2l0aCBzb21ldGhpbmcgbGlrZSBge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfWAsIHdpbGwgdGhlIHBhZGRpbmcgYmUgemVyb2VkPyBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIEMgc3RhbmRhcmQgaGVyZS4gSXQmIzM5O3MgZGljZXk7IHBhZGRpbmcgYnl0ZXMgYXJlbiYjMzk7dCAqZ3VhcmFudGVlZCogdG8gYmUgemVyb2VkLCBldmVuIGlmIHRoZSBzdHJ1Y3QgaXMgcGFydGlhbGx5IGluaXRpYWxpemVkLiBBbmQgZXZlbiBpZiBJIGV4cGxpY2l0bHkgdXNlIHNvbWV0aGluZyBsaWtlIGB7MH1gIG9yIGEgZGVzaWduYXRlZCBpbml0aWFsaXplciBzeW50YXgsIG1vZGVybiBjb21waWxlcnMgbWlnaHQgKmdlbmVyYWxseSogemVybyBpdCwgYnV0IGl0JiMzOTtzIG5vdCBhIGhhcmQgZ3VhcmFudGVlLiBJIGNhbiYjMzk7dCByZWx5IG9uIHRoYXQgYmVoYXZpb3IgZm9yIHJvYnVzdG5lc3MuCgpSaWdodCwgYGZyb21gIGFuZCBgdG9gIGFyZSBwYXNzZWQgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBmdW5jdGlvbiBiZXR0ZXIsIHNvIEkgd2lsbCBub3cgbG9vayBhdCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0MDpcdFx0fVxuIDM0MTpcdH1cbiAzNDI6XHRcbiAzNDM6XHQvKiBQYXNzIGFuIG91dGdvaW5nIHBhY2tldCBzb2NrZXQgYnVmZmVyIHRvIHRoZSBlbmRwb2ludCBkcml2ZXIuICovXG4gMzQ0Olx0c3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDM0NTpcdFx0XHRcdCAgICAgaW50IHR5cGUsIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLFxuIDM0NjpcdFx0XHRcdCAgICAgc3RydWN0IHNvY2thZGRyX3FydHIgKnRvKVxuIDM0NzpcdHtcbiAzNDg6XHRcdHN0cnVjdCBxcnRyX2hkcl92MSAqaGRyO1xuIDM0OTpcdFx0c2l6ZV90IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gMzUwOlx0XHRpbnQgcmMsIGNvbmZpcm1fcng7XG4gMzUxOlx0XG4gMzUyOlx0XHRtdXRleF9sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4gMzUzOlx0XHRpZiAoIW5vZGUtXHUwMDNlaGVsbG9fc2VudCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcbiAzNTQ6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4gMzU1Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM1NjpcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiAzNTc6XHRcdH1cbiAzNTg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIDM1OTpcdFxuIDM2MDpcdFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0LCB0eXBlKTtcbiAzNjE6XHRcdGlmIChjb25maXJtX3J4IFx1MDAzYyAwKSB7XG4gMzYyOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM2MzpcdFx0XHRyZXR1cm4gY29uZmlybV9yeDtcbiAzNjQ6XHRcdH1cbiAzNjU6XHRcbiAzNjY6XHRcdGhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTtcbiAzNjc6XHRcdGhkci1cdTAwM2V2ZXJzaW9uID0gY3B1X3RvX2xlMzIoUVJUUl9QUk9UT19WRVJfMSk7XG4gMzY4Olx0XHRoZHItXHUwMDNldHlwZSA9IGNwdV90b19sZTMyKHR5cGUpO1xuIDM2OTpcdFx0aGRyLVx1MDAzZXNyY19ub2RlX2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cdTAwM2VzcV9ub2RlKTtcbiAzNzA6XHRcdGhkci1cdTAwM2VzcmNfcG9ydF9pZCA9IGNwdV90b19sZTMyKGZyb20tXHUwMDNlc3FfcG9ydCk7XG4gMzcxOlx0XHRpZiAodG8tXHUwMDNlc3FfcG9ydCA9PSBRUlRSX1BPUlRfQ1RSTCkge1xuIDM3MjpcdFx0XHRoZHItXHUwMDNlZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMihSRUFEX09OQ0Uobm9kZS1cdTAwM2VuaWQpKTtcbiAzNzM6XHRcdFx0aGRyLVx1MDAzZWRzdF9wb3J0X2lkID0gY3B1X3RvX2xlMzIoUVJUUl9QT1JUX0NUUkwpO1xuIDM3NDpcdFx0fSBlbHNlIHtcbiAzNzU6XHRcdFx0aGRyLVx1MDAzZWRzdF9ub2RlX2lkID0gY3B1X3RvX2xlMzIodG8tXHUwMDNlc3Ffbm9kZSk7XG4gMzc2Olx0XHRcdGhkci1cdTAwM2Vkc3RfcG9ydF9pZCA9IGNwdV90b19sZTMyKHRvLVx1MDAzZXNxX3BvcnQpO1xuIDM3NzpcdFx0fVxuIDM3ODpcdFxuIDM3OTpcdFx0aGRyLVx1MDAzZXNpemUgPSBjcHVfdG9fbGUzMihsZW4pO1xuIDM4MDpcdFx0aGRyLVx1MDAzZWNvbmZpcm1fcnggPSBjcHVfdG9fbGUzMighIWNvbmZpcm1fcngpO1xuIDM4MTpcdFxuIDM4MjpcdFx0cmMgPSBza2JfcHV0X3BhZHRvKHNrYiwgQUxJR04obGVuLCA0KSAmIzQzOyBzaXplb2YoKmhkcikpO1xuIDM4MzpcdFxuIDM4NDpcdFx0aWYgKCFyYykge1xuIDM4NTpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4gMzg2Olx0XHRcdHJjID0gLUVOT0RFVjtcbiAzODc6XHRcdFx0aWYgKG5vZGUtXHUwMDNlZXApXG4gMzg4Olx0XHRcdFx0cmMgPSBub2RlLVx1MDAzZWVwLVx1MDAzZXhtaXQobm9kZS1cdTAwM2VlcCwgc2tiKTtcbiAzODk6XHRcdFx0ZWxzZVxuIDM5MDpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM5MTpcdFx0XHRpZiAoIXJjIFx1MDAyNlx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcbiAzOTI6XHRcdFx0XHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSB0cnVlO1xuIDM5MzpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bm9kZS1cdTAwM2VlcF9sb2NrKTtcbiAzOTQ6XHRcdH1cbiAzOTU6XHRcdC8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3RcbiAzOTY6XHRcdCAqIGNvbmZpcm1fcnggZmxhZyBpZiB3ZSBkcm9wcGVkIHRoaXMgb25lICovXG4gMzk3Olx0XHRpZiAocmMgXHUwMDI2XHUwMDI2IGNvbmZpcm1fcngpXG4gMzk4Olx0XHRcdHFydHJfdHhfZmxvd19mYWlsZWQobm9kZSwgdG8tXHUwMDNlc3Ffbm9kZSwgdG8tXHUwMDNlc3FfcG9ydCk7XG4gMzk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzIzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgSW5mb3JtYXRpb24gTGVha3MgaW4gUVJUUiBQYWNrZXQgQ29uc3RydWN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgY29uY2VybiB3YXMgYWJvdXQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWthZ2UgdGhyb3VnaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHFydHJfbm9kZV9lbnF1ZXVlYCBmdW5jdGlvbi4gSSBzZWUgdGhhdCBpdCYjMzk7cyBvbmx5IHVzaW5nIHRoZSBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBtZW1iZXJzIGZyb20gdGhlIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgc3RydWN0dXJlcy4gSXQmIzM5O3Mgbm90IGRpcmVjdGx5IGNvcHlpbmcgdGhlIGVudGlyZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGNvbnRlbnQsIGFuZCB0aGF0JiMzOTtzIGdvb2QuIFRoZSBmdW5jdGlvbiBjb25zdHJ1Y3RzIHRoZSBgc3RydWN0IHFydHJfaGRyX3YxYCB1c2luZyB0aG9zZSBleHRyYWN0ZWQgdmFsdWVzOgoKYGBgYwoJaGRyLSZndDtzcmNfbm9kZV9pZCA9IGNwdV90b19sZTMyKGZyb20tJmd0O3NxX25vZGUpOwoJaGRyLSZndDtzcmNfcG9ydF9pZCA9IGNwdV90b19sZTMyKGZyb20tJmd0O3NxX3BvcnQpOwpgYGAKClNvLCB0aGUgcGFkZGluZyB3aXRoaW4gYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGFjY2Vzc2VkIG9yIGxlYWtlZCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgd2FzIGhvcGluZyB0byBjb25maXJtLgoKQnV0IEkgbmVlZCB0byBiZSBtb3JlIHRob3JvdWdoLCBzbyBJJiMzOTtsbCBjaGVjayBmb3Igb3RoZXIgc291cmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSW4gdGhlIGBxcnRyX2hlbGxvX3dvcmtgIGZ1bmN0aW9uLCB0aGUgY29kZSBhbGxvY2F0ZXMgYSBjb250cm9sIHBhY2tldDoKCmBgYGMKCXNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoJmFtcDtwa3QsIEdGUF9LRVJORUwpOwoJaWYgKCFza2IpIHsKLi4uCglwa3QtJmd0O2NtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9IRUxMTyk7CmBgYAoKQWgsIHJpZ2h0LCBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgdXNlcyBgc2tiX3B1dF96ZXJvYC4gVGhhdCBtZWFucyB0aGUgYHBrdGAgc3RydWN0dXJlIGlzICpmdWxseSogemVyb2VkLiBUaGUgY29kZSAqdGhlbiogc2V0cyB0aGUgYGNtZGAgZmllbGQuIFRoZSBza2IgaXMgdGhlbiBwYXNzZWQgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYC4KCldpdGhpbiBgcXJ0cl9ub2RlX2VucXVldWVgLCB0aGUgaGVhZGVyIGlzIGNyZWF0ZWQuCgpgYGBjCgloZHIgPSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7CgloZHItJmd0O3ZlcnNpb24gPSBjcHVfdG9fbGUzMihRUlRSX1BST1RPX1ZFUl8xKTsKCWhkci0mZ3Q7dHlwZSA9IGNwdV90b19sZTMyKHR5cGUpOwoJaGRyLSZndDtzcmNfbm9kZV9pZCA9IGNwdV90b19sZTMyKGZyb20tJmd0O3NxX25vZGUpOwoJaGRyLSZndDtzcmNfcG9ydF9pZCA9IGNwdV90b19sZTMyKGZyb20tJmd0O3NxX3BvcnQpOwoJaWYgKHRvLSZndDtzcV9wb3J0ID09IFFSVFJfUE9SVF9DVFJMKSB7CgkJaGRyLSZndDtkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKFJFQURfT05DRShub2RlLSZndDtuaWQpKTsKCQloZHItJmd0O2RzdF9wb3J0X2lkID0gY3B1X3RvX2xlMzIoUVJUUl9QT1JUX0NUUkwpOwoJfSBlbHNlIHsKCQloZHItJmd0O2RzdF9ub2RlX2lkID0gY3B1X3RvX2xlMzIodG8tJmd0O3NxX25vZGUpOwoJCWhkci0mZ3Q7ZHN0X3BvcnRfaWQgPSBjcHVfdG9fbGUzMih0by0mZ3Q7c3FfcG9ydCk7Cgl9CgoJaGRyLSZndDtzaXplID0gY3B1X3RvX2xlMzIobGVuKTsKCWhkci0mZ3Q7Y29uZmlybV9yeCA9IGNwdV90b19sZTMyKCEhY29uZmlybV9yeCk7CmBgYAoKT2theSwgZ29vZC4gQWxsIHRoZSBmaWVsZHMgb2YgYGhkcmAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoYXQmIzM5O3MgYSBzb2xpZCBjaGVjay4gTm93IEkgd2FudCB0byBxdWlja2x5IHJldmlldyB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHFydHJfaGRyX3YxYCB0byBtYWtlIHN1cmUgdGhlcmUgaXNuJiMzOTt0IGFueSB1bmV4cGVjdGVkIHBhZGRpbmcgdGhhdCBtaWdodCBub3QgYmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBzb21ld2hlcmUgZWxzZSBhbmQgcG90ZW50aWFsbHkgbGVhayBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgaGVhZGVyIGl0c2VsZiBkb2VzbiYjMzk7dCBjb250YWluIGFueSBwYWRkaW5nIHRoYXQgY291bGQgYmUgYSBjb25jZXJuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgcXJ0cl9oZHJfdjEgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYy0zOS0gKi9cbm5ldC9xcnRyL2FmX3FydHIuYzo0MDpzdHJ1Y3QgcXJ0cl9oZHJfdjEge1xubmV0L3FydHIvYWZfcXJ0ci5jLTQxLVx0X19sZTMyIHZlcnNpb247XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzcyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBzdHJ1Y3QgcXJ0cl9oZHJfdjFgKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgcXJ0cl9oZHJfdjFgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBzb2xpZCBoYW5kbGUgb24gdGhlIGJhc2UgdmVyc2lvbiBvZiB0aGlzIGhlYWRlci4gTm8gc2Vuc2UgaW4ganVtcGluZyBpbnRvIGxhdGVyIHJldmlzaW9ucyB3aXRob3V0IHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmRhbWVudGFscy4gV2hhdCBhcmUgdGhlIGtleSBmaWVsZHMgdGhleSYjMzk7dmUgY2hvc2VuIHRvIGluY2x1ZGUgaGVyZT8gSSYjMzk7bSBleHBlY3RpbmcgdGhlIHVzdWFsIHN1c3BlY3RzOiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG5vZGUvcG9ydCBpZGVudGlmaWVycywgYSBtZXNzYWdlIHR5cGUgZmllbGQsIGFuZCBsaWtlbHkgc29tZSBzb3J0IG9mIGZsYWdzIGZvciBjb250cm9sIGFuZCBlcnJvciBoYW5kbGluZy4gUGVyaGFwcyBhIHNlcXVlbmNlIG51bWJlciB0b28sIGRlcGVuZGluZyBvbiB0aGUgbmVlZCBmb3IgcmVsaWFibGUgZGVsaXZlcnkuIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBvdmVyYWxsIHNpemUg4oCTIGl0JiMzOTtsbCBiZSBhIGdvb2QgaW5kaWNhdG9yIG9mIHRoZSBleHBlY3RlZCBjb21wbGV4aXR5IG9mIHRoZSB0cmFuc3BvcnQgcHJvdG9jb2wgYnVpbHQgb24gdG9wLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBsYXlvdXQgaXMgbmF0dXJhbGx5IGFsaWduZWQgb3IgaWYgd2UgbmVlZCB0byBiZSBtaW5kZnVsIG9mIHBhZGRpbmcgaXNzdWVzIGR1cmluZyByZWFkL3dyaXRlIG9wZXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhpcyBiYXNlbGluZSBpcyBjcnVjaWFsIGJlZm9yZSBkaWdnaW5nIGludG8gYW55IG9mIHRoZSBtb3JlIGFkdmFuY2VkIGZlYXR1cmVzIG9yIHJldmlzaW9ucy4gSSB3YW50IHRvIGJ1aWxkIGEgcXVpY2sgcGljdHVyZSBvZiBob3cgdGhpcyBoZWFkZXIgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzk6XHQgKi9cbiAgNDA6XHRzdHJ1Y3QgcXJ0cl9oZHJfdjEge1xuICA0MTpcdFx0X19sZTMyIHZlcnNpb247XG4gIDQyOlx0XHRfX2xlMzIgdHlwZTtcbiAgNDM6XHRcdF9fbGUzMiBzcmNfbm9kZV9pZDtcbiAgNDQ6XHRcdF9fbGUzMiBzcmNfcG9ydF9pZDtcbiAgNDU6XHRcdF9fbGUzMiBjb25maXJtX3J4O1xuICA0NjpcdFx0X19sZTMyIHNpemU7XG4gIDQ3Olx0XHRfX2xlMzIgZHN0X25vZGVfaWQ7XG4gIDQ4Olx0XHRfX2xlMzIgZHN0X3BvcnRfaWQ7XG4gIDQ5Olx0fSBfX3BhY2tlZDtcbiAgNTA6XHRcbiAgNTE6XHQvKipcbiAgNTI6XHQgKiBzdHJ1Y3QgcXJ0cl9oZHJfdjIgLSAoSXxSKVBDcm91dGVyIHBhY2tldCBoZWFkZXIgbGF0ZXIgdmVyc2lvbnNcbiAgNTM6XHQgKiBAdmVyc2lvbjogcHJvdG9jb2wgdmVyc2lvblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3OAoJCQkJCQkJb3V0cHV0OiAyMzMKCQkJCQkJCXRob3VnaHRzOiAyMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBIRUxMTyBQYWNrZXQgVHJhbnNpdGlvbiBhbmQgVW5pbml0aWFsaXplZCBNZW1vcnkgQ2hlY2tzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IHJlZmFjdG9ycyB0aGUgSEVMTE8gcGFja2V0IHRyYW5zbWlzc2lvbiBsb2dpYyB3aXRoaW4gdGhlIFFSVFIgc3Vic3lzdGVtLCBtb3ZpbmcgaXQgZnJvbSBhIG5hbWVzZXJ2aWNlLWJhc2VkIGBrZXJuZWxfc2VuZG1zZ2AgYXBwcm9hY2ggdG8gYSBtb3JlIGRpcmVjdCBgc2tiYCBhbGxvY2F0aW9uIGFuZCBlbnF1ZXVlaW5nIHN0cmF0ZWd5IHdpdGhpbiB0aGUgY29yZSBuZXR3b3JrIGxheWVyLiBUaGlzIHNlZW1zIHJlYXNvbmFibGU7IGVsaW1pbmF0aW5nIHRoYXQga2VybmVsIHNwYWNlIHNvY2tldCBjYWxsIGlzIHByb2JhYmx5IGEgZ29vZCB0aGluZy4KClRoZSBmaXJzdCB0aGluZyBJIHplcm9lZCBpbiBvbiB3YXMgdGhlIHBvdGVudGlhbCBmb3IgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIE15IGluaXRpYWwgY29uY2VybiB3YXMgaW4gYHFydHJfbm9kZV9lbnF1ZXVlYCwgZ2l2ZW4gaXRzIG1hbmlwdWxhdGlvbiBvZiB0aGUgYHNrX2J1ZmZgIGFuZCB0aGUgcG90ZW50aWFsIGZvciBuZXcgZGF0YSBiZWluZyBwcmVzZW50IG9uIHRoZSB3aXJlLiBIb3dldmVyLCBJIGNvbmZpcm1lZCB0aGF0IHRoZSBoZWFkZXIgKGBzdHJ1Y3QgcXJ0cl9oZHJfdjFgKSBpcyAqZnVsbHkqIGluaXRpYWxpemVkLiBFYWNoIGZpZWxk4oCUdmVyc2lvbiwgdHlwZSwgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBub2RlL3BvcnQgSURzLCBzaXplLCBhbmQgY29uZmlybV9yeOKAlGlzIGV4cGxpY2l0bHkgc2V0IHVzaW5nIGBjcHVfdG9fbGUzMmAuIFRoZSBgc2tiX3B1dF9wYWR0b2AgY2FsbCBpcyBwcmVzZW50LCB3aGljaCBlbnN1cmVzIHRoYXQgYW55IHBhZGRpbmcgYWRkZWQgdG8gdGhlIGBza2JgIGlzIHplcm9lZCBvdXQsIHByZXZlbnRpbmcgYW55IGxlYWtzLiBUaGlzIGlzIHZpdGFsLgoKVGhlbiwgSSBsb29rZWQgYXQgdGhlIGFsbG9jYXRpb24gb2YgdGhlIEhFTExPIHBhY2tldCBpdHNlbGYuIFRoZSB1c2Ugb2YgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgIGlzIGtleSBoZXJlLiBJdCB1c2VzIGBza2JfcHV0X3plcm9gLCB3aGljaCBtZWFucyB0aGUgZW50aXJlIGNvbnRyb2wgcGFja2V0IHBheWxvYWQgaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvZWQgb3V0IHVwb24gYWxsb2NhdGlvbi4gVGhpcyBlbGltaW5hdGVzIGFueSByaXNrIHJlbGF0ZWQgdG8gdGhlIHBheWxvYWQgaXRzZWxmIGNvbnRhaW5pbmcgc3RhbGUgZGF0YS4gRnVydGhlcm1vcmUsIEkgd2VudCBiYWNrIGFuZCByZWNoZWNrZWQsIGFuZCB0aGUgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgYXJlIG9ubHkgdXNlZCBmb3IgZXh0cmFjdGluZyBzcGVjaWZpYyB2YWx1ZXMsIGxpa2UgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAsIGFuZCBuZXZlciBjb3BpZWQgYW55d2hlcmUgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgd291bGQgYmUgZXhwb3NlZC4KCkZ1cnRoZXJtb3JlLCB0aGUgbmV3IGNvZGUgaGFzIGFuIGV4cGxpY2l0IGNoZWNrIGZvciBgaGVsbG9fc2VudGAgd2l0aGluIHRoZSBgcXJ0cl9ub2RlX2VucXVldWVgIGZ1bmN0aW9uIHRoYXQgYWN0cyBhcyBhIGdhdGUgZm9yIG5ldyBwYWNrZXRzIGJlaW5nIHNlbnQuIFRoaXMgaXMgcmVhc29uYWJsZS4KCkZpbmFsbHksIHdoaWxlIHRoZSBwYXRjaCBjaGFuZ2VzIHdoZW4gYSBIRUxMTyBwYWNrZXQgY2FuIGJlIHNlbnQgdG8gZW5zdXJlIG5vZGVzIGFyZSBhc3NpZ25lZCBub2RlIElEcywgdGhlIGFjY2VzcyB0byBgbm9kZS0mZ3Q7bmlkYCBpcyBwcm90ZWN0ZWQgYnkgYFdSSVRFX09OQ0VgIG9yIGBSRUFEX09OQ0VgLgoKR2l2ZW4gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIG9yIGluZm8tbGVha3MuIFRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBzdHJhdGVnaWVzIGFyZSBzb3VuZC4gQW55IHBvdGVudGlhbCBwcm9ibGVtcyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHRoZSBzYW1lIGFzIGV4aXN0IGluIHRoZSBjb2RlYmFzZSB0b2RheS4gS0FTQU4gYW5kIG90aGVyIHN1Y2ggdG9vbHMgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEtNU0FOIGlzIG5vdCBuZWVkZWQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIHNlbmRpbmcgb2YgUVJUUiBIRUxMTyBwYWNrZXRzIGZyb20gdGhlIG5hbWVzZXJ2aWNlICh1c2luZyBhIGtlcm5lbCBzb2NrZXQpIHRvIHRoZSBjb3JlIGxheWVyICh1c2luZyBkaXJlY3Qgc2tiIGFsbG9jYXRpb24gYW5kIGVucXVldWVpbmcpLiBUaGUgbmV3IEhFTExPIHBhY2tldCBwYXlsb2FkIGlzIGFsbG9jYXRlZCB2aWEgYHFydHJfYWxsb2NfY3RybF9wYWNrZXQoKWAsIHdoaWNoIHVzZXMgYHNrYl9wdXRfemVybygpYCB0byBlbnN1cmUgdGhlIG1lbW9yeSBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIHBhY2tldCBoZWFkZXIgaXMgYWxzbyBleHBsaWNpdGx5IGFuZCBjb21wbGV0ZWx5IGluaXRpYWxpemVkIGluIGBxcnRyX25vZGVfZW5xdWV1ZSgpYC4gV2hpbGUgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgYXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgaW4gYHFydHJfaGVsbG9fd29yaygpYCwgdGhleSBhcmUgb25seSB1c2VkIHRvIHJlYWQgdGhlIGBzcV9ub2RlYCBhbmQgYHNxX3BvcnRgIGZpZWxkczsgdGhlIHN0cnVjdHVyZXMgdGhlbXNlbHZlcyBhcmUgbmV2ZXIgY29waWVkIHRvIHRoZSBza2Igb3IgdXNlcnNwYWNlLCBtZWFuaW5nIGFueSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgYXJlIHNhZmVseSBpZ25vcmVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBzZW5kaW5nIG9mIFFSVFIgSEVMTE8gcGFja2V0cyBmcm9tIHRoZSBuYW1lc2VydmljZSAodXNpbmcgYSBrZXJuZWwgc29ja2V0KSB0byB0aGUgY29yZSBsYXllciAodXNpbmcgZGlyZWN0IHNrYiBhbGxvY2F0aW9uIGFuZCBlbnF1ZXVlaW5nKS4gVGhlIG5ldyBIRUxMTyBwYWNrZXQgcGF5bG9hZCBpcyBhbGxvY2F0ZWQgdmlhIGBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KClgLCB3aGljaCB1c2VzIGBza2JfcHV0X3plcm8oKWAgdG8gZW5zdXJlIHRoZSBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBwYWNrZXQgaGVhZGVyIGlzIGFsc28gZXhwbGljaXRseSBhbmQgY29tcGxldGVseSBpbml0aWFsaXplZCBpbiBgcXJ0cl9ub2RlX2VucXVldWUoKWAuIFdoaWxlIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgdmFyaWFibGVzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGluIGBxcnRyX2hlbGxvX3dvcmsoKWAsIHRoZXkgYXJlIG9ubHkgdXNlZCB0byByZWFkIHRoZSBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBmaWVsZHM7IHRoZSBzdHJ1Y3R1cmVzIHRoZW1zZWx2ZXMgYXJlIG5ldmVyIGNvcGllZCB0byB0aGUgc2tiIG9yIHVzZXJzcGFjZSwgbWVhbmluZyBhbnkgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIGFyZSBzYWZlbHkgaWdub3JlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMwOjIwLjMyNDM1NTcxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODA4NDA4Mjg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJRUlRSXCIsXG4gICAgXCJRUlRSX1RVTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInFydHJfbm9kZV9lbnF1ZXVlXCIsXG4gICAgXCJxcnRyX2hlbGxvX3dvcmtcIixcbiAgICBcInFydHJfZW5kcG9pbnRfcmVnaXN0ZXJcIixcbiAgICBcInFydHJfYmNhc3RfZW5xdWV1ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIHNlbmRpbmcgb2YgUVJUUiBIRUxMTyBwYWNrZXRzIGZyb20gdGhlIG5hbWVzZXJ2aWNlICh1c2luZyBhIGtlcm5lbCBzb2NrZXQpIHRvIHRoZSBjb3JlIGxheWVyICh1c2luZyBkaXJlY3Qgc2tiIGFsbG9jYXRpb24gYW5kIGVucXVldWVpbmcpLiBUaGUgbmV3IEhFTExPIHBhY2tldCBwYXlsb2FkIGlzIGFsbG9jYXRlZCB2aWEgYHFydHJfYWxsb2NfY3RybF9wYWNrZXQoKWAsIHdoaWNoIHVzZXMgYHNrYl9wdXRfemVybygpYCB0byBlbnN1cmUgdGhlIG1lbW9yeSBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIHBhY2tldCBoZWFkZXIgaXMgYWxzbyBleHBsaWNpdGx5IGFuZCBjb21wbGV0ZWx5IGluaXRpYWxpemVkIGluIGBxcnRyX25vZGVfZW5xdWV1ZSgpYC4gV2hpbGUgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgYXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgaW4gYHFydHJfaGVsbG9fd29yaygpYCwgdGhleSBhcmUgb25seSB1c2VkIHRvIHJlYWQgdGhlIGBzcV9ub2RlYCBhbmQgYHNxX3BvcnRgIGZpZWxkczsgdGhlIHN0cnVjdHVyZXMgdGhlbXNlbHZlcyBhcmUgbmV2ZXIgY29waWVkIHRvIHRoZSBza2Igb3IgdXNlcnNwYWNlLCBtZWFuaW5nIGFueSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgYXJlIHNhZmVseSBpZ25vcmVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgSEVMTE8gaGFuZHNoYWtlIGxvZ2ljIGZyb20gdGhlIHVzZXJzcGFjZS9ucyBsYXllciB0byB0aGUgY29yZSBsYXllciBpbiB0aGUgUVJUUiBzdWJzeXN0ZW0uIEl0IG1vZGlmaWVzIGNvcmUgZnVuY3Rpb25zIGxpa2UgYHFydHJfbm9kZV9lbnF1ZXVlYCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAgYW5kIGFkZHMgYSBuZXcgZGVsYXllZCB3b3JrIGBxcnRyX2hlbGxvX3dvcmtgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBRUlRSX1RVTmAgdmlydHVhbCBlbmRwb2ludCBkcml2ZXIsIHNvIGl0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMwOjIwLjMyNDM2NDUzNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMDM1NDUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg5OWQxZGNmZmQwOWE1YzdjNzliNjJiYjVmOTZiN2YyMGM1ZTcyYzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMTI6MzA6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvYWZfcXJ0ci5jIGIvbmV0L3FydHIvYWZfcXJ0ci5jXFxuaW5kZXggZDAyZWY5YTc0YzNjYS4uOGU5YjM2NDc5YmFiOCAxMDA2NDRcXG4tLS0gYS9uZXQvcXJ0ci9hZl9xcnRyLmNcXG4rKysgYi9uZXQvcXJ0ci9hZl9xcnRyLmNcXG5AQCAtOSw2ICs5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Rlcm1pb3MuaFxcdTAwM2VcXHQvKiBGb3IgVElPQ0lOUS9PVVRRICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGlubG9jay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gXFxuQEAgLTEyMCw4ICsxMjEsMTAgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MocXJ0cl9wb3J0cyk7XFxuICAqIEBuaWQ6IG5vZGUgaWRcXG4gICogQHFydHJfdHhfZmxvdzogeGFycmF5IG9mIHFydHJfdHhfZmxvdywga2V5ZWQgYnkgbm9kZSBcXHUwMDNjXFx1MDAzYyAzMiB8IHBvcnRcXG4gICogQHFydHJfdHhfbG9jazogbG9jayBmb3IgcXJ0cl90eF9mbG93IGluc2VydHNcXG4rICogQGhlbGxvX3NlbnQ6IGhlbGxvIHBhY2tldCBzZW5kIHN1Y2Nlc3NmdWxcXG4gICogQHJ4X3F1ZXVlOiByZWNlaXZlIHF1ZXVlXFxuICAqIEBpdGVtOiBsaXN0IGl0ZW0gZm9yIGJyb2FkY2FzdCBsaXN0XFxuKyAqIEBzYXlfaGVsbG86IGRlbGF5ZWQgd29yayBmb3Igc2VuZGluZyBoZWxsbyBwYWNrZXRcXG4gICovXFxuIHN0cnVjdCBxcnRyX25vZGUge1xcbiBcXHRzdHJ1Y3QgbXV0ZXggZXBfbG9jaztcXG5AQCAtMTMyLDggKzEzNSwxMSBAQCBzdHJ1Y3QgcXJ0cl9ub2RlIHtcXG4gXFx0c3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7XFxuIFxcdHN0cnVjdCBtdXRleCBxcnRyX3R4X2xvY2s7IC8qIGZvciBxcnRyX3R4X2Zsb3cgKi9cXG4gXFxuK1xcdGJvb2wgaGVsbG9fc2VudDtcXG4rXFxuIFxcdHN0cnVjdCBza19idWZmX2hlYWQgcnhfcXVldWU7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgaXRlbTtcXG4rXFx0c3RydWN0IGRlbGF5ZWRfd29yayBzYXlfaGVsbG87XFxuIH07XFxuIFxcbiAvKipcXG5AQCAtMTg3LDYgKzE5Myw4IEBAIHN0YXRpYyB2b2lkIF9fcXJ0cl9ub2RlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuIFxcdGxpc3RfZGVsKFxcdTAwMjZub2RlLVxcdTAwM2VpdGVtKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZxcnRyX25vZGVfbG9jayk7XFxuIFxcbitcXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNm5vZGUtXFx1MDAzZXNheV9oZWxsbyk7XFxuK1xcbiBcXHRza2JfcXVldWVfcHVyZ2UoXFx1MDAyNm5vZGUtXFx1MDAzZXJ4X3F1ZXVlKTtcXG4gXFxuIFxcdC8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqL1xcbkBAIC0zNDEsNiArMzQ5LDE0IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c2l6ZV90IGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiBcXHRpbnQgcmMsIGNvbmZpcm1fcng7XFxuIFxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZub2RlLVxcdTAwM2VlcF9sb2NrKTtcXG4rXFx0aWYgKCFub2RlLVxcdTAwM2VoZWxsb19zZW50IFxcdTAwMjZcXHUwMDI2IHR5cGUgIT0gUVJUUl9UWVBFX0hFTExPKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bm9kZS1cXHUwMDNlZXBfbG9jayk7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm5vZGUtXFx1MDAzZWVwX2xvY2spO1xcbitcXG4gXFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cXHUwMDNlc3Ffbm9kZSwgdG8tXFx1MDAzZXNxX3BvcnQsIHR5cGUpO1xcbiBcXHRpZiAoY29uZmlybV9yeCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuQEAgLTM1Myw3ICszNjksNyBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGhkci1cXHUwMDNlc3JjX25vZGVfaWQgPSBjcHVfdG9fbGUzMihmcm9tLVxcdTAwM2VzcV9ub2RlKTtcXG4gXFx0aGRyLVxcdTAwM2VzcmNfcG9ydF9pZCA9IGNwdV90b19sZTMyKGZyb20tXFx1MDAzZXNxX3BvcnQpO1xcbiBcXHRpZiAodG8tXFx1MDAzZXNxX3BvcnQgPT0gUVJUUl9QT1JUX0NUUkwpIHtcXG4tXFx0XFx0aGRyLVxcdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKG5vZGUtXFx1MDAzZW5pZCk7XFxuK1xcdFxcdGhkci1cXHUwMDNlZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMihSRUFEX09OQ0Uobm9kZS1cXHUwMDNlbmlkKSk7XFxuIFxcdFxcdGhkci1cXHUwMDNlZHN0X3BvcnRfaWQgPSBjcHVfdG9fbGUzMihRUlRSX1BPUlRfQ1RSTCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGhkci1cXHUwMDNlZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMih0by1cXHUwMDNlc3Ffbm9kZSk7XFxuQEAgLTM3Miw2ICszODgsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdHJjID0gbm9kZS1cXHUwMDNlZXAtXFx1MDAzZXhtaXQobm9kZS1cXHUwMDNlZXAsIHNrYik7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdGlmICghcmMgXFx1MDAyNlxcdTAwMjYgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pXFxuK1xcdFxcdFxcdG5vZGUtXFx1MDAzZWhlbGxvX3NlbnQgPSB0cnVlO1xcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5vZGUtXFx1MDAzZWVwX2xvY2spO1xcbiBcXHR9XFxuIFxcdC8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3RcXG5AQCAtMzc5LDYgKzM5Nyw5IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IGNvbmZpcm1fcngpXFxuIFxcdFxcdHFydHJfdHhfZmxvd19mYWlsZWQobm9kZSwgdG8tXFx1MDAzZXNxX25vZGUsIHRvLVxcdTAwM2VzcV9wb3J0KTtcXG4gXFxuK1xcdGlmIChyYyA9PSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxcbitcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5vZGUtXFx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcXG4rXFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG5AQCAtNDE2LDcgKzQzNyw3IEBAIHN0YXRpYyB2b2lkIHFydHJfbm9kZV9hc3NpZ24oc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgdW5zaWduZWQgaW50IG5pZClcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnFydHJfbm9kZXNfbG9jaywgZmxhZ3MpO1xcbiBcXHRyYWRpeF90cmVlX2luc2VydChcXHUwMDI2cXJ0cl9ub2RlcywgbmlkLCBub2RlKTtcXG4gXFx0aWYgKG5vZGUtXFx1MDAzZW5pZCA9PSBRUlRSX0VQX05JRF9BVVRPKVxcbi1cXHRcXHRub2RlLVxcdTAwM2VuaWQgPSBuaWQ7XFxuK1xcdFxcdFdSSVRFX09OQ0Uobm9kZS1cXHUwMDNlbmlkLCBuaWQpO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZxcnRyX25vZGVzX2xvY2ssIGZsYWdzKTtcXG4gfVxcbiBcXG5AQCAtNTcwLDYgKzU5MSwzOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsXFxuIFxcdHJldHVybiBza2I7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IHNvY2thZGRyX3FydHIgZnJvbSA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9xcnRyIHRvID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcXG4rXFx0c3RydWN0IHFydHJfY3RybF9wa3QgKnBrdDtcXG4rXFx0c3RydWN0IHFydHJfbm9kZSAqbm9kZTtcXG4rXFx0c3RydWN0IHFydHJfc29jayAqY3RybDtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFxuK1xcdG5vZGUgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcXJ0cl9ub2RlLCBzYXlfaGVsbG8pO1xcbitcXG4rXFx0LyogTlMgbXVzdCBiZSBib3VuZCBiZWZvcmUgd2UgY2FuIHNlbmQ7IHJldHJ5IHdpdGggYmFja29mZiBpZiBub3QgcmVhZHkgKi9cXG4rXFx0Y3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpO1xcbitcXHRpZiAoIWN0cmwpIHtcXG4rXFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZub2RlLVxcdTAwM2VzYXlfaGVsbG8sIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcXHUwMDI2cGt0LCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFza2IpIHtcXG4rXFx0XFx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcXG4rXFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZub2RlLVxcdTAwM2VzYXlfaGVsbG8sIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cGt0LVxcdTAwM2VjbWQgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfSEVMTE8pO1xcbitcXHRmcm9tLnNxX25vZGUgPSBxcnRyX2xvY2FsX25pZDtcXG4rXFx0dG8uc3Ffbm9kZSA9IG5vZGUtXFx1MDAzZW5pZDtcXG4rXFx0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFxcdTAwMjZmcm9tLCBcXHUwMDI2dG8pO1xcbitcXHRxcnRyX3BvcnRfcHV0KGN0cmwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogcXJ0cl9lbmRwb2ludF9yZWdpc3RlcigpIC0gcmVnaXN0ZXIgYSBuZXcgZW5kcG9pbnRcXG4gICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlclxcbkBAIC01OTUsNiArNjQ4LDkgQEAgaW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKVxcbiBcXHRub2RlLVxcdTAwM2VuaWQgPSBRUlRSX0VQX05JRF9BVVRPO1xcbiBcXHRub2RlLVxcdTAwM2VlcCA9IGVwO1xcbiBcXG4rXFx0bm9kZS1cXHUwMDNlaGVsbG9fc2VudCA9IGZhbHNlO1xcbitcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2bm9kZS1cXHUwMDNlc2F5X2hlbGxvLCBxcnRyX2hlbGxvX3dvcmspO1xcbitcXG4gXFx0eGFfaW5pdChcXHUwMDI2bm9kZS1cXHUwMDNlcXJ0cl90eF9mbG93KTtcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2bm9kZS1cXHUwMDNlcXJ0cl90eF9sb2NrKTtcXG4gXFxuQEAgLTYwNSw2ICs2NjEsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cXJ0cl9ub2RlX2xvY2spO1xcbiBcXHRlcC1cXHUwMDNlbm9kZSA9IG5vZGU7XFxuIFxcbitcXHQvKiBJbml0aWF0ZSBIRUxMTyBoYW5kc2hha2UgZnJvbSB0aGUgY29yZSBsYXllciAqL1xcbitcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5vZGUtXFx1MDAzZXNheV9oZWxsbywgMCk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKTtcXG5AQCAtODc5LDYgKzkzOCw5IEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZxcnRyX25vZGVfbG9jayk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXFx1MDAyNnFydHJfYWxsX25vZGVzLCBpdGVtKSB7XFxuK1xcdFxcdC8qIFNraXAgbm9kZXMgd2l0aCBubyBhc3NpZ25lZCBub2RlIElEIHlldC4gKi9cXG4rXFx0XFx0aWYgKFJFQURfT05DRShub2RlLVxcdTAwM2VuaWQpID09IFFSVFJfRVBfTklEX0FVVE8pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRza2JuID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0tFUk5FTCk7XFxuIFxcdFxcdGlmICghc2tibilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuZGlmZiAtLWdpdCBhL25ldC9xcnRyL25zLmMgYi9uZXQvcXJ0ci9ucy5jXFxuaW5kZXggYjNmOWJiY2Y5YWI5Yi4uNmQ5M2JjZDI1MGU3NSAxMDA2NDRcXG4tLS0gYS9uZXQvcXJ0ci9ucy5jXFxuKysrIGIvbmV0L3FydHIvbnMuY1xcbkBAIC0yMTIsNiArMjEyLDcgQEAgc3RhdGljIHZvaWQgbG9va3VwX25vdGlmeShzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8sIHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2LFxcbiBcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBzZW5kIGxvb2t1cCBub3RpZmljYXRpb25cXFxcblxcXCIpO1xcbiB9XFxuIFxcbisvKiBBbm5vdW5jZSB0aGUgbGlzdCBvZiBzZXJ2ZXJzIHJlZ2lzdGVyZWQgb24gdGhlIGxvY2FsIG5vZGUgKi9cXG4gc3RhdGljIGludCBhbm5vdW5jZV9zZXJ2ZXJzKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydjtcXG5AQCAtMzI2LDM4ICszMjcsOCBAQCBzdGF0aWMgaW50IHNlcnZlcl9kZWwoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgYmNhc3QpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHNheV9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZGVzdClcXG4te1xcbi1cXHRzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCBwa3Q7XFxuLVxcdHN0cnVjdCBtc2doZHIgbXNnID0geyB9O1xcbi1cXHRzdHJ1Y3Qga3ZlYyBpdjtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdGl2Lmlvdl9iYXNlID0gXFx1MDAyNnBrdDtcXG4tXFx0aXYuaW92X2xlbiA9IHNpemVvZihwa3QpO1xcbi1cXG4tXFx0bWVtc2V0KFxcdTAwMjZwa3QsIDAsIHNpemVvZihwa3QpKTtcXG4tXFx0cGt0LmNtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9IRUxMTyk7XFxuLVxcbi1cXHRtc2cubXNnX25hbWUgPSAoc3RydWN0IHNvY2thZGRyICopZGVzdDtcXG4tXFx0bXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKCpkZXN0KTtcXG4tXFxuLVxcdHJldCA9IGtlcm5lbF9zZW5kbXNnKHFydHJfbnMuc29jaywgXFx1MDAyNm1zZywgXFx1MDAyNml2LCAxLCBzaXplb2YocGt0KSk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBzZW5kIGhlbGxvIG1zZ1xcXFxuXFxcIik7XFxuLVxcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi0vKiBBbm5vdW5jZSB0aGUgbGlzdCBvZiBzZXJ2ZXJzIHJlZ2lzdGVyZWQgb24gdGhlIGxvY2FsIG5vZGUgKi9cXG4gc3RhdGljIGludCBjdHJsX2NtZF9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXFxuIHtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHJldCA9IHNheV9oZWxsbyhzcSk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4gXFx0cmV0dXJuIGFubm91bmNlX3NlcnZlcnMoc3EpO1xcbiB9XFxuIFxcbkBAIC03NzQsMTAgKzc0NSw2IEBAIGludCBxcnRyX25zX2luaXQodm9pZClcXG4gXFx0cXJ0cl9ucy5iY2FzdF9zcS5zcV9ub2RlID0gUVJUUl9OT0RFX0JDQVNUO1xcbiBcXHRxcnRyX25zLmJjYXN0X3NxLnNxX3BvcnQgPSBRUlRSX1BPUlRfQ1RSTDtcXG4gXFxuLVxcdHJldCA9IHNheV9oZWxsbyhcXHUwMDI2cXJ0cl9ucy5iY2FzdF9zcSk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIGVycl93cTtcXG4tXFxuIFxcdC8qIEFzIHRoZSBxcnRyIG5zIHNvY2tldCBvd25lciBhbmQgY3JlYXRvciBpcyB0aGUgc2FtZSBtb2R1bGUsIHdlIGhhdmVcXG4gXFx0ICogdG8gZGVjcmVhc2UgdGhlIHFydHIgbW9kdWxlIHJlZmVyZW5jZSBjb3VudCB0byBndWFyYW50ZWUgdGhhdCBpdFxcbiBcXHQgKiByZW1haW5zIHplcm8gYWZ0ZXIgdGhlIG5zIHNvY2tldCBpcyBjcmVhdGVkLCBvdGhlcndpc2UsIGV4ZWN1dGluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMDoyMS42MzU0MjIyNTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NjU4NDg2ODgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJRUlRSXCIsXG4gICAgXCJRUlRSX1RVTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInFydHJfbm9kZV9lbnF1ZXVlXCIsXG4gICAgXCJxcnRyX2hlbGxvX3dvcmtcIixcbiAgICBcInFydHJfZW5kcG9pbnRfcmVnaXN0ZXJcIixcbiAgICBcInFydHJfYmNhc3RfZW5xdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBIRUxMTyBoYW5kc2hha2UgbG9naWMgZnJvbSB0aGUgdXNlcnNwYWNlL25zIGxheWVyIHRvIHRoZSBjb3JlIGxheWVyIGluIHRoZSBRUlRSIHN1YnN5c3RlbS4gSXQgbW9kaWZpZXMgY29yZSBmdW5jdGlvbnMgbGlrZSBgcXJ0cl9ub2RlX2VucXVldWVgIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYCBhbmQgYWRkcyBhIG5ldyBkZWxheWVkIHdvcmsgYHFydHJfaGVsbG9fd29ya2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYFFSVFJfVFVOYCB2aXJ0dWFsIGVuZHBvaW50IGRyaXZlciwgc28gaXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODk5ZDFkY2ZmZDA5YTVjN2M3OWI2MmJiNWY5NmI3ZjIwYzVlNzJjNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDEyOjMwOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvYWZfcXJ0ci5jIGIvbmV0L3FydHIvYWZfcXJ0ci5jXG5pbmRleCBkMDJlZjlhNzRjM2NhLi44ZTliMzY0NzliYWI4IDEwMDY0NFxuLS0tIGEvbmV0L3FydHIvYWZfcXJ0ci5jXG4rKysgYi9uZXQvcXJ0ci9hZl9xcnRyLmNcbkBAIC05LDYgKzksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Rlcm1pb3MuaFx1MDAzZVx0LyogRm9yIFRJT0NJTlEvT1VUUSAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiBcbkBAIC0xMjAsOCArMTIxLDEwIEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DKHFydHJfcG9ydHMpO1xuICAqIEBuaWQ6IG5vZGUgaWRcbiAgKiBAcXJ0cl90eF9mbG93OiB4YXJyYXkgb2YgcXJ0cl90eF9mbG93LCBrZXllZCBieSBub2RlIFx1MDAzY1x1MDAzYyAzMiB8IHBvcnRcbiAgKiBAcXJ0cl90eF9sb2NrOiBsb2NrIGZvciBxcnRyX3R4X2Zsb3cgaW5zZXJ0c1xuKyAqIEBoZWxsb19zZW50OiBoZWxsbyBwYWNrZXQgc2VuZCBzdWNjZXNzZnVsXG4gICogQHJ4X3F1ZXVlOiByZWNlaXZlIHF1ZXVlXG4gICogQGl0ZW06IGxpc3QgaXRlbSBmb3IgYnJvYWRjYXN0IGxpc3RcbisgKiBAc2F5X2hlbGxvOiBkZWxheWVkIHdvcmsgZm9yIHNlbmRpbmcgaGVsbG8gcGFja2V0XG4gICovXG4gc3RydWN0IHFydHJfbm9kZSB7XG4gXHRzdHJ1Y3QgbXV0ZXggZXBfbG9jaztcbkBAIC0xMzIsOCArMTM1LDExIEBAIHN0cnVjdCBxcnRyX25vZGUge1xuIFx0c3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7XG4gXHRzdHJ1Y3QgbXV0ZXggcXJ0cl90eF9sb2NrOyAvKiBmb3IgcXJ0cl90eF9mbG93ICovXG4gXG4rXHRib29sIGhlbGxvX3NlbnQ7XG4rXG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3F1ZXVlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBpdGVtO1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayBzYXlfaGVsbG87XG4gfTtcbiBcbiAvKipcbkBAIC0xODcsNiArMTkzLDggQEAgc3RhdGljIHZvaWQgX19xcnRyX25vZGVfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiBcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlaXRlbSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cXJ0cl9ub2RlX2xvY2spO1xuIFxuK1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvKTtcbitcbiBcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZub2RlLVx1MDAzZXJ4X3F1ZXVlKTtcbiBcbiBcdC8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqL1xuQEAgLTM0MSw2ICszNDksMTQgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c2l6ZV90IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRpbnQgcmMsIGNvbmZpcm1fcng7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4rXHRpZiAoIW5vZGUtXHUwMDNlaGVsbG9fc2VudCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuK1xuIFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0LCB0eXBlKTtcbiBcdGlmIChjb25maXJtX3J4IFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTM1Myw3ICszNjksNyBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRoZHItXHUwMDNlc3JjX25vZGVfaWQgPSBjcHVfdG9fbGUzMihmcm9tLVx1MDAzZXNxX25vZGUpO1xuIFx0aGRyLVx1MDAzZXNyY19wb3J0X2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cdTAwM2VzcV9wb3J0KTtcbiBcdGlmICh0by1cdTAwM2VzcV9wb3J0ID09IFFSVFJfUE9SVF9DVFJMKSB7XG4tXHRcdGhkci1cdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKG5vZGUtXHUwMDNlbmlkKTtcbitcdFx0aGRyLVx1MDAzZWRzdF9ub2RlX2lkID0gY3B1X3RvX2xlMzIoUkVBRF9PTkNFKG5vZGUtXHUwMDNlbmlkKSk7XG4gXHRcdGhkci1cdTAwM2Vkc3RfcG9ydF9pZCA9IGNwdV90b19sZTMyKFFSVFJfUE9SVF9DVFJMKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGhkci1cdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKHRvLVx1MDAzZXNxX25vZGUpO1xuQEAgLTM3Miw2ICszODgsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0cmMgPSBub2RlLVx1MDAzZWVwLVx1MDAzZXhtaXQobm9kZS1cdTAwM2VlcCwgc2tiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRpZiAoIXJjIFx1MDAyNlx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcbitcdFx0XHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSB0cnVlO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bm9kZS1cdTAwM2VlcF9sb2NrKTtcbiBcdH1cbiBcdC8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3RcbkBAIC0zNzksNiArMzk3LDkgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHJjIFx1MDAyNlx1MDAyNiBjb25maXJtX3J4KVxuIFx0XHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVx1MDAzZXNxX25vZGUsIHRvLVx1MDAzZXNxX3BvcnQpO1xuIFxuK1x0aWYgKHJjID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxuK1x0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8sIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7XG4rXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuQEAgLTQxNiw3ICs0MzcsNyBAQCBzdGF0aWMgdm9pZCBxcnRyX25vZGVfYXNzaWduKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBuaWQpXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZxcnRyX25vZGVzX2xvY2ssIGZsYWdzKTtcbiBcdHJhZGl4X3RyZWVfaW5zZXJ0KFx1MDAyNnFydHJfbm9kZXMsIG5pZCwgbm9kZSk7XG4gXHRpZiAobm9kZS1cdTAwM2VuaWQgPT0gUVJUUl9FUF9OSURfQVVUTylcbi1cdFx0bm9kZS1cdTAwM2VuaWQgPSBuaWQ7XG4rXHRcdFdSSVRFX09OQ0Uobm9kZS1cdTAwM2VuaWQsIG5pZCk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnFydHJfbm9kZXNfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbkBAIC01NzAsNiArNTkxLDM4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCxcbiBcdHJldHVybiBza2I7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX3FydHIgZnJvbSA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciB0byA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4rXHRzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqcGt0O1xuK1x0c3RydWN0IHFydHJfbm9kZSAqbm9kZTtcbitcdHN0cnVjdCBxcnRyX3NvY2sgKmN0cmw7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1xuK1x0bm9kZSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBxcnRyX25vZGUsIHNheV9oZWxsbyk7XG4rXG4rXHQvKiBOUyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB3ZSBjYW4gc2VuZDsgcmV0cnkgd2l0aCBiYWNrb2ZmIGlmIG5vdCByZWFkeSAqL1xuK1x0Y3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpO1xuK1x0aWYgKCFjdHJsKSB7XG4rXHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcdTAwMjZwa3QsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFza2IpIHtcbitcdFx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcbitcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwa3QtXHUwMDNlY21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTtcbitcdGZyb20uc3Ffbm9kZSA9IHFydHJfbG9jYWxfbmlkO1xuK1x0dG8uc3Ffbm9kZSA9IG5vZGUtXHUwMDNlbmlkO1xuK1x0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFx1MDAyNmZyb20sIFx1MDAyNnRvKTtcbitcdHFydHJfcG9ydF9wdXQoY3RybCk7XG4rfVxuK1xuIC8qKlxuICAqIHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGEgbmV3IGVuZHBvaW50XG4gICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlclxuQEAgLTU5NSw2ICs2NDgsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpXG4gXHRub2RlLVx1MDAzZW5pZCA9IFFSVFJfRVBfTklEX0FVVE87XG4gXHRub2RlLVx1MDAzZWVwID0gZXA7XG4gXG4rXHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSBmYWxzZTtcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvLCBxcnRyX2hlbGxvX3dvcmspO1xuK1xuIFx0eGFfaW5pdChcdTAwMjZub2RlLVx1MDAzZXFydHJfdHhfZmxvdyk7XG4gXHRtdXRleF9pbml0KFx1MDAyNm5vZGUtXHUwMDNlcXJ0cl90eF9sb2NrKTtcbiBcbkBAIC02MDUsNiArNjYxLDkgQEAgaW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnFydHJfbm9kZV9sb2NrKTtcbiBcdGVwLVx1MDAzZW5vZGUgPSBub2RlO1xuIFxuK1x0LyogSW5pdGlhdGUgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgKi9cbitcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgMCk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocXJ0cl9lbmRwb2ludF9yZWdpc3Rlcik7XG5AQCAtODc5LDYgKzkzOCw5IEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnFydHJfbm9kZV9sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXHUwMDI2cXJ0cl9hbGxfbm9kZXMsIGl0ZW0pIHtcbitcdFx0LyogU2tpcCBub2RlcyB3aXRoIG5vIGFzc2lnbmVkIG5vZGUgSUQgeWV0LiAqL1xuK1x0XHRpZiAoUkVBRF9PTkNFKG5vZGUtXHUwMDNlbmlkKSA9PSBRUlRSX0VQX05JRF9BVVRPKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRza2JuID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0tFUk5FTCk7XG4gXHRcdGlmICghc2tibilcbiBcdFx0XHRicmVhaztcbmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuY1xuaW5kZXggYjNmOWJiY2Y5YWI5Yi4uNmQ5M2JjZDI1MGU3NSAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL25zLmNcbisrKyBiL25ldC9xcnRyL25zLmNcbkBAIC0yMTIsNiArMjEyLDcgQEAgc3RhdGljIHZvaWQgbG9va3VwX25vdGlmeShzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8sIHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2LFxuIFx0XHRwcl9lcnIoXCJmYWlsZWQgdG8gc2VuZCBsb29rdXAgbm90aWZpY2F0aW9uXFxuXCIpO1xuIH1cbiBcbisvKiBBbm5vdW5jZSB0aGUgbGlzdCBvZiBzZXJ2ZXJzIHJlZ2lzdGVyZWQgb24gdGhlIGxvY2FsIG5vZGUgKi9cbiBzdGF0aWMgaW50IGFubm91bmNlX3NlcnZlcnMoc3RydWN0IHNvY2thZGRyX3FydHIgKnNxKVxuIHtcbiBcdHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2O1xuQEAgLTMyNiwzOCArMzI3LDggQEAgc3RhdGljIGludCBzZXJ2ZXJfZGVsKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBwb3J0LCBib29sIGJjYXN0KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2F5X2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0KVxuLXtcbi1cdHN0cnVjdCBxcnRyX2N0cmxfcGt0IHBrdDtcbi1cdHN0cnVjdCBtc2doZHIgbXNnID0geyB9O1xuLVx0c3RydWN0IGt2ZWMgaXY7XG4tXHRpbnQgcmV0O1xuLVxuLVx0aXYuaW92X2Jhc2UgPSBcdTAwMjZwa3Q7XG4tXHRpdi5pb3ZfbGVuID0gc2l6ZW9mKHBrdCk7XG4tXG4tXHRtZW1zZXQoXHUwMDI2cGt0LCAwLCBzaXplb2YocGt0KSk7XG4tXHRwa3QuY21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTtcbi1cbi1cdG1zZy5tc2dfbmFtZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKilkZXN0O1xuLVx0bXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKCpkZXN0KTtcbi1cbi1cdHJldCA9IGtlcm5lbF9zZW5kbXNnKHFydHJfbnMuc29jaywgXHUwMDI2bXNnLCBcdTAwMjZpdiwgMSwgc2l6ZW9mKHBrdCkpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cHJfZXJyKFwiZmFpbGVkIHRvIHNlbmQgaGVsbG8gbXNnXFxuXCIpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovXG4gc3RhdGljIGludCBjdHJsX2NtZF9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXG4ge1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHNheV9oZWxsbyhzcSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0cmV0dXJuIGFubm91bmNlX3NlcnZlcnMoc3EpO1xuIH1cbiBcbkBAIC03NzQsMTAgKzc0NSw2IEBAIGludCBxcnRyX25zX2luaXQodm9pZClcbiBcdHFydHJfbnMuYmNhc3Rfc3Euc3Ffbm9kZSA9IFFSVFJfTk9ERV9CQ0FTVDtcbiBcdHFydHJfbnMuYmNhc3Rfc3Euc3FfcG9ydCA9IFFSVFJfUE9SVF9DVFJMO1xuIFxuLVx0cmV0ID0gc2F5X2hlbGxvKFx1MDAyNnFydHJfbnMuYmNhc3Rfc3EpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlcnJfd3E7XG4tXG4gXHQvKiBBcyB0aGUgcXJ0ciBucyBzb2NrZXQgb3duZXIgYW5kIGNyZWF0b3IgaXMgdGhlIHNhbWUgbW9kdWxlLCB3ZSBoYXZlXG4gXHQgKiB0byBkZWNyZWFzZSB0aGUgcXJ0ciBtb2R1bGUgcmVmZXJlbmNlIGNvdW50IHRvIGd1YXJhbnRlZSB0aGF0IGl0XG4gXHQgKiByZW1haW5zIHplcm8gYWZ0ZXIgdGhlIG5zIHNvY2tldCBpcyBjcmVhdGVkLCBvdGhlcndpc2UsIGV4ZWN1dGluZ1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzA6MjEuNjM1NDIzODI1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ2Mzc5NjM5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFFSVFIgSEVMTE8gSGFuZHNoYWtlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFFSVFIgc3Vic3lzdGVtIOKAkyBzZWVtcyBsaWtlIGEgcmVmYWN0b3JpbmcgZWZmb3J0LCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBIRUxMTyBoYW5kc2hha2UgbG9naWMuIFRoZSBjb3JlIGlkZWEgaXMgdG8gbW92ZSB0aGUgaGFuZHNoYWtlIGZyb20gdGhlIG5hbWVzcGFjZSBsYXllciAoYG5zLmNgKSBpbnRvIHRoZSBjb3JlIChgYWZfcXJ0ci5jYCkuIFRoYXQncyBnZW5lcmFsbHkgYSBnb29kIG1vdmU7IGNlbnRyYWxpemluZyBjb3JlIGZ1bmN0aW9uYWxpdHkgb2Z0ZW4gbGVhZHMgdG8gY2xlYW5lciBjb2RlIGFuZCBzaW1wbGlmaWVzIG1haW50ZW5hbmNlLlxuXG5UaGUgYWRkaXRpb24gb2YgYGhlbGxvX3NlbnRgIGFuZCB0aGUgZGVsYXllZCB3b3JrIGBzYXlfaGVsbG9gIHRvIHRoZSBgcXJ0cl9ub2RlYCBzdHJ1Y3R1cmUgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBXZSdyZSBlZmZlY3RpdmVseSB0cmFja2luZyB0aGUgaGFuZHNoYWtlIHN0YXRlIGFuZCBkZWxheWluZyB0aGUgSEVMTE8gbWVzc2FnZSB0byBhdm9pZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyBlbmRwb2ludCByZWdpc3RyYXRpb24g4oCTIG1ha2VzIHNlbnNlLiBBbmQgdGhlIGNoYW5nZXMgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYCB0byBkcm9wIG5vbi1IRUxMTyBwYWNrZXRzIGlmIGBoZWxsb19zZW50YCBpcyBmYWxzZSwgdGhhdCdzIGNydWNpYWwgZm9yIGVuZm9yY2luZyB0aGUgaGFuZHNoYWtlIG9yZGVyIGFuZCBwcmV2ZW50aW5nIHBvdGVudGlhbGx5IG1hbGljaW91cyBvciBtYWxmb3JtZWQgcGFja2V0cyBmcm9tIGJlaW5nIHByb2Nlc3NlZCBwcmVtYXR1cmVseS4gRW5mb3JjaW5nIHRoaXMgZmxvdyBpcyBhIHNlY3VyaXR5IGJlc3QgcHJhY3RpY2UuXG5cblRoZSBzY2hlZHVsaW5nIG9mIGBzYXlfaGVsbG9gIG9uIGVuZHBvaW50IHJlZ2lzdHJhdGlvbiBsb29rcyBjbGVhbiBhbmQgbG9naWNhbCwgZW5zdXJpbmcgdGhlIGhhbmRzaGFrZSBpcyBpbml0aWF0ZWQgYXMgc29vbiBhcyBhIG5ldyBlbmRwb2ludCBiZWNvbWVzIGFjdGl2ZS4gQWxzbywgdGhlIG1vZGlmaWNhdGlvbiB0byBgcXJ0cl9iY2FzdF9lbnF1ZXVlYCB0byBza2lwIG5vZGVzIHdpdGggYFFSVFJfRVBfTklEX0FVVE9gLi4uIHllYWgsIEkgY2FuIHNlZSB0aGUgcmVhc29uaW5nLiBUaG9zZSBhcmUgbGlrZWx5IGF1dG8tYXNzaWduZWQgbm9kZSBJRHMgYW5kIGl0IG1ha2VzIHNlbnNlIHRvIGF2b2lkIGJyb2FkY2FzdGluZyB0byB0aGVtIGR1cmluZyB0aGUgSEVMTE8gcGhhc2UgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgbm9pc2UgYW5kIHByb2Nlc3NpbmcuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBJIG5lZWQgdG8gdmVyaWZ5IHJlYWNoYWJpbGl0eSBhbmQgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFFSVFIgaXMgdGhlIFF1YWxjb21tIElQQyBSb3V0ZXIg4oCTIHNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIFFSVFIuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGJlIHN1cmUgdGhpcyByZWZhY3RvcmluZyBpcyBhY3R1YWxseSBleGVyY2lzZWQgaW4gYW55IG9mIG91ciBjb21tb24gY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBkbyBzb21lIHNlYXJjaGluZywgcHJvYmFibHkgc3RhcnRpbmcgd2l0aCBgUVJUUmAgYW5kIHNlZWluZyB3aGF0IEkgY2FuIGZpbmQuIFVuZGVyc3RhbmRpbmcgdGhlIHJlbGV2YW50IGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgd2hldGhlciB0aGlzIGxvZ2ljIGlzIGNvbW1vbmx5IHVzZWQgaXMgY3JpdGljYWwgdG8gZXZhbHVhdGluZyB0aGUgaW1wYWN0IGFuZCBwb3RlbnRpYWwgcmlzayBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1OCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMwOjI5LjA5OTIyMzM0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjUxOTg3NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBRUlRSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9xcnRyL0tjb25maWctNC1cXG5uZXQvcXJ0ci9LY29uZmlnOjU6Y29uZmlnIFFSVFJcXG5uZXQvcXJ0ci9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIElQQyBSb3V0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9xcnRyL0tjb25maWc9MTU9aWYgUVJUUlxcbm5ldC9xcnRyL0tjb25maWctMTYtXFxubmV0L3FydHIvS2NvbmZpZzoxNzpjb25maWcgUVJUUl9TTURcXG5uZXQvcXJ0ci9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJTTUQgSVBDIFJvdXRlciBjaGFubmVsc1xcXCJcXG4tLVxcbm5ldC9xcnRyL0tjb25maWctMjMtXFxubmV0L3FydHIvS2NvbmZpZzoyNDpjb25maWcgUVJUUl9UVU5cXG5uZXQvcXJ0ci9LY29uZmlnLTI1LVxcdHRyaXN0YXRlIFxcXCJUVU4gZGV2aWNlIGZvciBRdWFsY29tbSBJUEMgUm91dGVyXFxcIlxcbi0tXFxubmV0L3FydHIvS2NvbmZpZy0zMC1cXG5uZXQvcXJ0ci9LY29uZmlnOjMxOmNvbmZpZyBRUlRSX01ISVxcbm5ldC9xcnRyL0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIk1ISSBJUEMgUm91dGVyIGNoYW5uZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMDozMS4zNTEyMTY0MjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYzNDYyMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gUVJUUiBhbmQgVmlydHVhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBJJ20gZGVhbGluZyB3aXRoIGlzIGBRUlRSYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQ2FuIEkgYWN0dWFsbHkgKnVzZSogdGhpcyBpbiBhIHZpcnR1YWxpemVkIHNldHVwP1wiLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCB3YXlzIEknZCBhcHByb2FjaCB0aGlzLiBUaGVuLCBib29tLCBpdCBjbGlja3M6IGBRUlRSX1RVTmAhIFRoYXQncyB0aGUgc29sdXRpb24uIEl0IHByb3ZpZGVzIGEgVFVOIGRldmljZSBzcGVjaWZpY2FsbHkgZm9yIHRoZSBRdWFsY29tbSBJUEMgUm91dGVyLCB3aGljaCBtZWFucyBJIGNhbiBjcmVhdGUgYSB2aXJ0dWFsIFFSVFIgZW5kcG9pbnQgcmlnaHQgZnJvbSB1c2VyIHNwYWNlLiBObyBuZWVkIHRvIG1lc3MgYXJvdW5kIHdpdGggbG93LWxldmVsIGtlcm5lbCBtb2R1bGVzICh3aGljaCwgYWRtaXR0ZWRseSwgSSAqY291bGQqIGRvLCBidXQgdGhpcyBpcyBmYXIgbW9yZSBlbGVnYW50KS4gTm93LCBsZXQncyBkaXZlIGludG8gYFFSVFJfVFVOYCBhbmQgc2VlIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjQxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzA6MzUuMDE0NjgxOTgxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjE1ODAxOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUVJUUl9UVU5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0xNzk9Q09ORklHX1FSVFJfU01EPW1cXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjE4MDpDT05GSUdfUVJUUl9UVU49bVxcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWctMTgxLUNPTkZJR19DQU49bVxcbi0tXFxubmV0L3FydHIvS2NvbmZpZz0xNz1jb25maWcgUVJUUl9TTURcXG4tLVxcbm5ldC9xcnRyL0tjb25maWctMjMtXFxubmV0L3FydHIvS2NvbmZpZzoyNDpjb25maWcgUVJUUl9UVU5cXG5uZXQvcXJ0ci9LY29uZmlnLTI1LVxcdHRyaXN0YXRlIFxcXCJUVU4gZGV2aWNlIGZvciBRdWFsY29tbSBJUEMgUm91dGVyXFxcIlxcbi0tXFxubmV0L3FydHIvTWFrZWZpbGU9Nj1xcnRyLXNtZC15XFx0Oj0gc21kLm9cXG5uZXQvcXJ0ci9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19RUlRSX1RVTikgKz0gcXJ0ci10dW4ub1xcbm5ldC9xcnRyL01ha2VmaWxlLTgtcXJ0ci10dW4teVxcdDo9IHR1bi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMwOjM3LjEzNjI2NjA2N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzMzODU3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFR1bm5lbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbm5lciB3b3JraW5ncyBvZiB0aGlzIHR1bm5lbGluZyBtZWNoYW5pc20uIEknbSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGludG8gdGhlIGNvcmUgc291cmNlIGNvZGUuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiBgcXJ0ci10dW4uY2Agb3IsIGZhaWxpbmcgdGhhdCwgYHR1bi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkncmUgaGFuZGxpbmcgcGFja2V0IHJlY2VwdGlvbiwgdHJhbnNtaXNzaW9uLCBhZGRyZXNzIGFzc2lnbm1lbnQsIGFuZCB0aGUgb3ZlcmFsbCBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2suIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgcmVsYXRlZCB0byB0aGUgUXVhbGNvbW0gUU1JIFJhZGlvIFRyYW5zcG9ydCAoUVJUUikgb3Igc3RhbmRhcmQgVFVOIGludGVyZmFjZS4gTGV0J3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjExNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMwOjQxLjM2OTY1NDcwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU5MTk3Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFydHJfZW5kcG9pbnRfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jPTU5ND1zdGF0aWMgdm9pZCBxcnRyX2hlbGxvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTYyNi0vKipcXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NjI3OiAqIHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGEgbmV3IGVuZHBvaW50XFxubmV0L3FydHIvYWZfcXJ0ci5jLTYyOC0gKiBAZXA6IGVuZHBvaW50IHRvIHJlZ2lzdGVyXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjMzLSAqL1xcbm5ldC9xcnRyL2FmX3FydHIuYzo2MzQ6aW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKVxcbm5ldC9xcnRyL2FmX3FydHIuYy02MzUte1xcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTY2OC19XFxubmV0L3FydHIvYWZfcXJ0ci5jOjY2OTpFWFBPUlRfU1lNQk9MX0dQTChxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjcwLVxcbi0tXFxubmV0L3FydHIvbWhpLmM9MTEwPXN0YXRpYyBpbnQgcWNvbV9taGlfcXJ0cl9wcm9iZShzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldixcXG4tLVxcbm5ldC9xcnRyL21oaS5jLTEzMC1cXG5uZXQvcXJ0ci9taGkuYzoxMzE6XFx0cmMgPSBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKFxcdTAwMjZxZGV2LVxcdTAwM2VlcCwgUVJUUl9FUF9OSURfQVVUTyk7XFxubmV0L3FydHIvbWhpLmMtMTMyLVxcdGlmIChyYylcXG4tLVxcbm5ldC9xcnRyL3FydHIuaD0yMD1zdHJ1Y3QgcXJ0cl9lbmRwb2ludCB7XFxuLS1cXG5uZXQvcXJ0ci9xcnRyLmgtMjUtXFxubmV0L3FydHIvcXJ0ci5oOjI2OmludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZCk7XFxubmV0L3FydHIvcXJ0ci5oLTI3LVxcbi0tXFxubmV0L3FydHIvc21kLmM9NTk9c3RhdGljIGludCBxY29tX3NtZF9xcnRyX3Byb2JlKHN0cnVjdCBycG1zZ19kZXZpY2UgKnJwZGV2KVxcbi0tXFxubmV0L3FydHIvc21kLmMtNzEtXFxubmV0L3FydHIvc21kLmM6NzI6XFx0cmMgPSBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKFxcdTAwMjZxZGV2LVxcdTAwM2VlcCwgUVJUUl9FUF9OSURfQVVUTyk7XFxubmV0L3FydHIvc21kLmMtNzMtXFx0aWYgKHJjKVxcbi0tXFxubmV0L3FydHIvdHVuLmM9MzE9c3RhdGljIGludCBxcnRyX3R1bl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxubmV0L3FydHIvdHVuLmMtNDYtXFxubmV0L3FydHIvdHVuLmM6NDc6XFx0cmV0ID0gcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihcXHUwMDI2dHVuLVxcdTAwM2VlcCwgUVJUUl9FUF9OSURfQVVUTyk7XFxubmV0L3FydHIvdHVuLmMtNDgtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzA6NDMuNDI4ODU2MjI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ3MTYwMTUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogUVJUUiBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBgdHVuLmNgIGRvZXMgaW5kZWVkIGNhbGwgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgIHdoZW4gdGhlIFRVTiBkZXZpY2Ugb3BlbnMuIFRoYXQgY29uZmlybXMgdGhhdCBgUVJUUl9UVU5gIHByb3ZpZGVzIGEgdXNlcnNwYWNlIGVudHJ5IHBvaW50LCBtYWtpbmcgaXQgcmVhY2hhYmxlLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgc2lnbmlmaWNhbnQuXG5cbkxvb2tpbmcgYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBpbiBgbmV0L3FydHIvYWZfcXJ0ci5jYCDigJMgc3BlY2lmaWNhbGx5IGBxcnRyX25vZGVfZW5xdWV1ZWAsIGBxcnRyX2hlbGxvX3dvcmtgICh0aGF0J3MgbmV3LCBpbnRlcmVzdGluZyksIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCwgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgIOKAkyB0aGVzZSBhcmUgYWxsICpjb3JlKiBRUlRSIGZ1bmN0aW9ucy4gVGhpcyBwYXRjaCBjZW50cmFsaXplcyB0aGUgSEVMTE8gaGFuZHNoYWtlIGludG8gdGhpcyBjb3JlIGxheWVyLCBzbyBpdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoaXMgc2NyZWFtcyBcImZ1enogbWUhXCJcblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGNvbmZpZ3M6IGBRUlRSYCBhbmQgYFFSVFJfVFVOYCwgbmF0dXJhbGx5LlxuXG5Ob3csIGZvciBzcGVjaWZpYyBzeW1ib2xzIHRvIHRhcmdldCBkdXJpbmcgZnV6emluZzogYHFydHJfbm9kZV9lbnF1ZXVlYCwgYHFydHJfaGVsbG9fd29ya2AsIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCwgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgLlxuXG5IYW5nIG9uLCBsZXQncyB2ZXJpZnkgaWYgYHFydHJfaGVsbG9fd29ya2AgaXMgc3RhdGljLiBZZXMsIGl0IGlzLiBCdXQsIGl0J3MgYSB3b3JrcXVldWUgY2FsbGJhY2suIFRoYXQgbWVhbnMgaXQgd29uJ3QgYmUgaW5saW5lZCBhbmQgKmRvZXMqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgc28gaXQncyBmdXp6YWJsZS4gV2FpdCBhIHNlY29uZCwgdGhlIGFkZHJlc3Mgb2YgYHFydHJfaGVsbG9fd29ya2AgaXMgdGFrZW4gYmVjYXVzZSBpdCdzIHBhc3NlZCB0byBgSU5JVF9ERUxBWUVEX1dPUktgLiBUaGF0IHNvbGlkaWZpZXMgaXQ7IGl0IHdvbid0IGJlIGlubGluZWQuXG5cbk5vdywgbGV0J3MgY2hlY2sgYHFydHJfbm9kZV9lbnF1ZXVlYCBhbmQgc2VlIGlmIGl0J3MgaW5saW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk4NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMDo0OS45MDA0NjEyODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzI1MTg3ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXJ0cl9ub2RlX2VucXVldWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jPTMyOT1zdGF0aWMgdm9pZCBxcnRyX3R4X2Zsb3dfZmFpbGVkKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIGludCBkZXN0X25vZGUsXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMzQzLS8qIFBhc3MgYW4gb3V0Z29pbmcgcGFja2V0IHNvY2tldCBidWZmZXIgdG8gdGhlIGVuZHBvaW50IGRyaXZlci4gKi9cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6MzQ0OnN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMzQ1LVxcdFxcdFxcdCAgICAgaW50IHR5cGUsIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLFxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTU5ND1zdGF0aWMgdm9pZCBxcnRyX2hlbGxvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTYyMS1cXHR0by5zcV9ub2RlID0gbm9kZS1cXHUwMDNlbmlkO1xcbm5ldC9xcnRyL2FmX3FydHIuYzo2MjI6XFx0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFxcdTAwMjZmcm9tLCBcXHUwMDI2dG8pO1xcbm5ldC9xcnRyL2FmX3FydHIuYy02MjMtXFx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz05MzM9c3RhdGljIGludCBxcnRyX2JjYXN0X2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYy05NDctXFx0XFx0c2tiX3NldF9vd25lcl93KHNrYm4sIHNrYi1cXHUwMDNlc2spO1xcbm5ldC9xcnRyL2FmX3FydHIuYzo5NDg6XFx0XFx0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tibiwgdHlwZSwgZnJvbSwgdG8pO1xcbm5ldC9xcnRyL2FmX3FydHIuYy05NDktXFx0fVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTk1Nz1zdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTAxNy1cXHRcXHR9XFxubmV0L3FydHIvYWZfcXJ0ci5jOjEwMTg6XFx0XFx0ZW5xdWV1ZV9mbiA9IHFydHJfbm9kZV9lbnF1ZXVlO1xcbm5ldC9xcnRyL2FmX3FydHIuYy0xMDE5LVxcdH1cXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz0xMDYwPXN0YXRpYyBpbnQgcXJ0cl9zZW5kX3Jlc3VtZV90eChzdHJ1Y3QgcXJ0cl9jYiAqY2IpXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTA4Mi1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6MTA4MzpcXHRyZXQgPSBxcnRyX25vZGVfZW5xdWV1ZShub2RlLCBza2IsIFFSVFJfVFlQRV9SRVNVTUVfVFgsIFxcdTAwMjZsb2NhbCwgXFx1MDAyNnJlbW90ZSk7XFxubmV0L3FydHIvYWZfcXJ0ci5jLTEwODQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMwOjUyLjAzMjk4NjU2OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg3MDc1NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBRUlRSIEVucXVldWUgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgYHFydHJfbm9kZV9lbnF1ZXVlYCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAgZnVuY3Rpb25zLCBhbmQgYSBjcnVjaWFsIG9wdGltaXphdGlvbiBwb2ludCBqdW1wcyBvdXQuIEkgbm90aWNlZCB0aGF0IGBxcnRyX25vZGVfZW5xdWV1ZWAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggKnVzdWFsbHkqIGlzIGEgZ29vZCBpbmRpY2F0b3IgdGhhdCB0aGUgY29tcGlsZXIgd2lsbCBiZSBhYmxlIHRvIGlubGluZSBpdCwgYnV0IGhvbGQgb24uLi4gSSBzZWUgdGhhdCBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbiAoc3BlY2lmaWNhbGx5LCBhc3NpZ25lZCB0byBgZW5xdWV1ZV9mbiA9IHFydHJfbm9kZV9lbnF1ZXVlO2ApLiBUaGF0J3MgdGhlIHJlYXNvbiByaWdodCB0aGVyZSEgQmVjYXVzZSBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgaXQncyB2aXJ0dWFsbHkgZ3VhcmFudGVlZCB0aGF0IHRoZSBjb21waWxlciAqd29uJ3QqIGlubGluZSBpdCwgcmVnYXJkbGVzcyBvZiB0aGUgYHN0YXRpY2AgZGVjbGFyYXRpb24uIFRoZSBmdW5jdGlvbiBtdXN0IGJlIGFjY2Vzc2libGUgZXh0ZXJuYWxseSB0aHJvdWdoIHRoYXQgZnVuY3Rpb24gcG9pbnRlci4gVGhhdCdzIGEgcGVyZm9ybWFuY2UgaGl0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIEkgbmVlZCB0byBjaGVjayBob3cgZnJlcXVlbnRseSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBiZWNhdXNlIHRoaXMgd29uJ3QgYmUgYXMgZWZmaWNpZW50IGFzIGEgZGlyZWN0IGNhbGwuXG5cbk5vdywgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBxcnRyX2JjYXN0X2VucXVldWVgLiBJIHNlZSB0aGF0IGl0J3MgYWxzbyBkZWNsYXJlZCBgc3RhdGljYCwgc28gdGhlIHNhbWUgaW5saW5pbmcgY29uc2lkZXJhdGlvbnMgYXBwbHkuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB3aGV0aGVyICppdHMqIGFkZHJlc3MgaXMgYWxzbyBiZWluZyB0YWtlbiBhbnl3aGVyZSBpbiB0aGUgY29kZS4gSWYgaXQgaXMsIHRoZW4gdGhlIHNhbWUgbm9uLWlubGluaW5nIGJlaGF2aW9yIHdpbGwgcmVzdWx0LiBUaGlzIG1pZ2h0IHJlcXVpcmUgYSBxdWljayBzZWFyY2ggdGhyb3VnaCB0aGUgY29kZWJhc2UsIHRvIHZlcmlmeSBpZiB0aGUgYWRkcmVzcyBvZiBgcXJ0cl9iY2FzdF9lbnF1ZXVlYCBpcyBhc3NpZ25lZCB0byBhbnkgZnVuY3Rpb24gcG9pbnRlciB2YXJpYWJsZXMuIElmIGl0IGlzbid0IHRoZW4gd2UgbWlnaHQgaGF2ZSBmb3VuZCBhIG5pY2Ugb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzYwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzA6NTcuMDIwMDY0Nzg4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDYzMTA4MDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFydHJfYmNhc3RfZW5xdWV1ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmM9MTYwPXN0YXRpYyBpbnQgcXJ0cl9sb2NhbF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTYyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICp0byk7XFxubmV0L3FydHIvYWZfcXJ0ci5jOjE2MzpzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9xcnRyL2FmX3FydHIuYy0xNjQtXFx0XFx0XFx0ICAgICAgaW50IHR5cGUsIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLFxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTc0ND1zdGF0aWMgdm9pZCBxcnRyX3BvcnRfcmVtb3ZlKHN0cnVjdCBxcnRyX3NvY2sgKmlwYylcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYy03NjEtXFx0XFx0c2tiX3NldF9vd25lcl93KHNrYiwgXFx1MDAyNmlwYy1cXHUwMDNlc2spO1xcbm5ldC9xcnRyL2FmX3FydHIuYzo3NjI6XFx0XFx0cXJ0cl9iY2FzdF9lbnF1ZXVlKE5VTEwsIHNrYiwgUVJUUl9UWVBFX0RFTF9DTElFTlQsIFxcdTAwMjZpcGMtXFx1MDAzZXVzLFxcbm5ldC9xcnRyL2FmX3FydHIuYy03NjMtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnRvKTtcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz05MDI9c3RhdGljIGludCBxcnRyX2xvY2FsX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYy05MzItLyogUXVldWUgcGFja2V0IGZvciBicm9hZGNhc3QuICovXFxubmV0L3FydHIvYWZfcXJ0ci5jOjkzMzpzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9xcnRyL2FmX3FydHIuYy05MzQtXFx0XFx0XFx0ICAgICAgaW50IHR5cGUsIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLFxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTk1Nz1zdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTAwOC1cXHRcXHR9XFxubmV0L3FydHIvYWZfcXJ0ci5jOjEwMDk6XFx0XFx0ZW5xdWV1ZV9mbiA9IHFydHJfYmNhc3RfZW5xdWV1ZTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTAxMC1cXHR9IGVsc2UgaWYgKGFkZHItXFx1MDAzZXNxX25vZGUgPT0gaXBjLVxcdTAwM2V1cy5zcV9ub2RlKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMwOjU5LjA4MzE3ODI1NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjIzNjc1NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgVGhpbmtpbmcgb24gUVJUUiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgYHFydHJfYmNhc3RfZW5xdWV1ZWAgYWRkcmVzcyBpcyBhbHNvIGluIHVzZSwgdGhhdCdzIGdvb2QgdG8ga25vdy4gVGhpcyBjb25maXJtcyB3aGF0IEkgc3VzcGVjdGVkLlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgZm9jdXMgcG9pbnRzIGZvciB0cm91Ymxlc2hvb3Rpbmcgb3IgdW5kZXJzdGFuZGluZyB0aGUgUVJUUiBjb25maWd1cmF0aW9uIGFyZTogYHFydHJfbm9kZV9lbnF1ZXVlYCwgYHFydHJfaGVsbG9fd29ya2AsIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCwgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZWxlbWVudHMuXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIE15IGluaXRpYWwgZmVlbGluZyBpcyB0aGF0IGBRUlRSYCBhbmQgYFFSVFJfVFVOYCBzaG91bGQgYmUgc3VmZmljaWVudCwgYnV0IGl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2guXG5cblRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIGdvIGJhY2sgYW5kIGV4YW1pbmUgYG5ldC9xcnRyL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgdGhhdCBgUVJUUmAgbWlnaHQgcmVxdWlyZS4gQSBkZXBlbmRlbmN5IGNvdWxkIGJlIHRoZSBrZXkgdG8gdGhlIHByb2JsZW0uIEkgbmVlZCB0byBsZWF2ZSBubyBzdG9uZSB1bnR1cm5lZCBpbiB0aGlzIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNDksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzE6MDMuNzA2ODY1NDlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDIzNDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3FydHIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcXJ0ci9LY29uZmlnPTE3PWNvbmZpZyBRUlRSX1NNRFxcbm5ldC9xcnRyL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcIlNNRCBJUEMgUm91dGVyIGNoYW5uZWxzXFxcIlxcbm5ldC9xcnRyL0tjb25maWc6MTk6XFx0ZGVwZW5kcyBvbiBSUE1TRyB8fCAoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IFJQTVNHPW4pXFxubmV0L3FydHIvS2NvbmZpZy0yMC1cXHRoZWxwXFxuLS1cXG5uZXQvcXJ0ci9LY29uZmlnPTMxPWNvbmZpZyBRUlRSX01ISVxcbm5ldC9xcnRyL0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIk1ISSBJUEMgUm91dGVyIGNoYW5uZWxzXFxcIlxcbm5ldC9xcnRyL0tjb25maWc6MzM6XFx0ZGVwZW5kcyBvbiBNSElfQlVTXFxubmV0L3FydHIvS2NvbmZpZy0zNC1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMxOjAzLjc1ODI5Mzc2OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc0NzQzMTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFFSVFIgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBpdCBsb29rcyBsaWtlIGBRUlRSYCBpcyBzdGFuZGluZyBvbiBpdHMgb3duLCBubyBkZXBlbmRlbmNpZXMgcmlnaHQgb2ZmIHRoZSBiYXQuIFNhbWUgZm9yIGBRUlRSX1RVTmAuIEdvb2QuIEJ1dCB3YWl0IGEgc2Vjb25kLi4uIGlzbid0IGBRUlRSYCBhIHRvcC1sZXZlbCBjb25maWcgb3B0aW9uPyBBaGEhIEl0J3MgbGlrZWx5IGRlZmluZWQgaW4gYG5ldC9xcnRyL0tjb25maWdgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgYG5ldC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIHRyYWNrIGRvd24gdGhlIGNvbnRleHQgYW5kIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmcm9tIHRoZSBzb3VyY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4ODAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMTowNy40MzMwMzkzMjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTgzNTkzNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic291cmNlIFxcXCJuZXQvcXJ0ci9LY29uZmlnXFxcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0yODE9c291cmNlIFxcXCJuZXQvbDNtZGV2L0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjgyOnNvdXJjZSBcXFwibmV0L3FydHIvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZy0yODMtc291cmNlIFxcXCJuZXQvbmNzaS9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMTowOS43MzE0MDI5NjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM1MDkzOTU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBRUlRSIFN1YnN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvLCBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgaXQgc2VlbXMgbGlrZSB0aGUga2V5IHRhcmdldHMgZm9yIGZ1enppbmcgYXJlIGdvaW5nIHRvIGJlIGBRUlRSYCBhbmQgYFFSVFJfVFVOYC4gTm8gb3RoZXIgY29uZmlndXJhdGlvbnMgYXBwZWFyIG5lY2Vzc2FyeS5cblxuSGVyZSdzIG15IGRpc3RpbGxlZCByZWFzb25pbmc6IHRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBzaGlmdHMgdGhlIEhFTExPIGhhbmRzaGFrZSBsb2dpYyB3aXRoaW4gdGhlIFFSVFIgc3Vic3lzdGVtLiBQcmV2aW91c2x5IHJlc2lkaW5nIGluIHRoZSB1c2Vyc3BhY2UvbmV0d29yayBuYW1lc3BhY2UgKG5zKSBsYXllciwgaXQncyBub3cgZW1iZWRkZWQgd2l0aGluIHRoZSBjb3JlIFFSVFIgbGF5ZXIuIFRoaXMgbWVhbnMgY29yZSBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkLCBzdWNoIGFzIGBxcnRyX25vZGVfZW5xdWV1ZWAgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgLiBBIG5ldyBkZWxheWVkIHdvcmsgaXRlbSwgYHFydHJfaGVsbG9fd29ya2AsIGhhcyBhbHNvIGJlZW4gaW50cm9kdWNlZC5cblxuVGhpcyBjaGFuZ2UgaXMgaW5oZXJlbnRseSBmdW5jdGlvbmFsIGFuZCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGBRUlRSX1RVTmAgdmlydHVhbCBlbmRwb2ludCBkcml2ZXIsIHdoaWNoIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHNwZWNpZmljIHN5bWJvbHM6IGBxcnRyX25vZGVfZW5xdWV1ZWAsIGBxcnRyX2hlbGxvX3dvcmtgLCBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAsIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYC4gVGhlc2UgcmVwcmVzZW50IHRoZSBjcml0aWNhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24gYW5kIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIHN5c3RlbS5cblxuSSdtIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agbm93LiBUaGlzIGlzIGEgc29saWQsIGZvY3VzZWQgYXBwcm9hY2ggdG8gZnV6emluZyB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE3MiwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzE6MTguMDgyMzQ3MjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc5NDA0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlFSVFJcIixcbiAgICBcIlFSVFJfVFVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicXJ0cl9ub2RlX2VucXVldWVcIixcbiAgICBcInFydHJfaGVsbG9fd29ya1wiLFxuICAgIFwicXJ0cl9lbmRwb2ludF9yZWdpc3RlclwiLFxuICAgIFwicXJ0cl9iY2FzdF9lbnF1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIEhFTExPIGhhbmRzaGFrZSBsb2dpYyBmcm9tIHRoZSB1c2Vyc3BhY2UvbnMgbGF5ZXIgdG8gdGhlIGNvcmUgbGF5ZXIgaW4gdGhlIFFSVFIgc3Vic3lzdGVtLiBJdCBtb2RpZmllcyBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBxcnRyX25vZGVfZW5xdWV1ZWAgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgIGFuZCBhZGRzIGEgbmV3IGRlbGF5ZWQgd29yayBgcXJ0cl9oZWxsb193b3JrYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgUVJUUl9UVU5gIHZpcnR1YWwgZW5kcG9pbnQgZHJpdmVyLCBzbyBpdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlFSVFJcIixcbiAgICBcIlFSVFJfVFVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicXJ0cl9ub2RlX2VucXVldWVcIixcbiAgICBcInFydHJfaGVsbG9fd29ya1wiLFxuICAgIFwicXJ0cl9lbmRwb2ludF9yZWdpc3RlclwiLFxuICAgIFwicXJ0cl9iY2FzdF9lbnF1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIEhFTExPIGhhbmRzaGFrZSBsb2dpYyBmcm9tIHRoZSB1c2Vyc3BhY2UvbnMgbGF5ZXIgdG8gdGhlIGNvcmUgbGF5ZXIgaW4gdGhlIFFSVFIgc3Vic3lzdGVtLiBJdCBtb2RpZmllcyBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBxcnRyX25vZGVfZW5xdWV1ZWAgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgIGFuZCBhZGRzIGEgbmV3IGRlbGF5ZWQgd29yayBgcXJ0cl9oZWxsb193b3JrYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgUVJUUl9UVU5gIHZpcnR1YWwgZW5kcG9pbnQgZHJpdmVyLCBzbyBpdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMToxOC4yMjAyOTQ3NjhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDE4ODEzMTUwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMxOjE4LjIyMDczMzMyOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDAxODc2ODgzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBzZW5kaW5nIG9mIFFSVFIgSEVMTE8gcGFja2V0cyBmcm9tIHRoZSBuYW1lc2VydmljZSAodXNpbmcgYSBrZXJuZWwgc29ja2V0KSB0byB0aGUgY29yZSBsYXllciAodXNpbmcgZGlyZWN0IHNrYiBhbGxvY2F0aW9uIGFuZCBlbnF1ZXVlaW5nKS4gVGhlIG5ldyBIRUxMTyBwYWNrZXQgcGF5bG9hZCBpcyBhbGxvY2F0ZWQgdmlhIGBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KClgLCB3aGljaCB1c2VzIGBza2JfcHV0X3plcm8oKWAgdG8gZW5zdXJlIHRoZSBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBwYWNrZXQgaGVhZGVyIGlzIGFsc28gZXhwbGljaXRseSBhbmQgY29tcGxldGVseSBpbml0aWFsaXplZCBpbiBgcXJ0cl9ub2RlX2VucXVldWUoKWAuIFdoaWxlIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgdmFyaWFibGVzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGluIGBxcnRyX2hlbGxvX3dvcmsoKWAsIHRoZXkgYXJlIG9ubHkgdXNlZCB0byByZWFkIHRoZSBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBmaWVsZHM7IHRoZSBzdHJ1Y3R1cmVzIHRoZW1zZWx2ZXMgYXJlIG5ldmVyIGNvcGllZCB0byB0aGUgc2tiIG9yIHVzZXJzcGFjZSwgbWVhbmluZyBhbnkgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIGFyZSBzYWZlbHkgaWdub3JlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODk5ZDFkY2ZmZDA5YTVjN2M3OWI2MmJiNWY5NmI3ZjIwYzVlNzJjNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDEyOjMwOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvYWZfcXJ0ci5jIGIvbmV0L3FydHIvYWZfcXJ0ci5jXG5pbmRleCBkMDJlZjlhNzRjM2NhLi44ZTliMzY0NzliYWI4IDEwMDY0NFxuLS0tIGEvbmV0L3FydHIvYWZfcXJ0ci5jXG4rKysgYi9uZXQvcXJ0ci9hZl9xcnRyLmNcbkBAIC05LDYgKzksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Rlcm1pb3MuaFx1MDAzZVx0LyogRm9yIFRJT0NJTlEvT1VUUSAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiBcbkBAIC0xMjAsOCArMTIxLDEwIEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DKHFydHJfcG9ydHMpO1xuICAqIEBuaWQ6IG5vZGUgaWRcbiAgKiBAcXJ0cl90eF9mbG93OiB4YXJyYXkgb2YgcXJ0cl90eF9mbG93LCBrZXllZCBieSBub2RlIFx1MDAzY1x1MDAzYyAzMiB8IHBvcnRcbiAgKiBAcXJ0cl90eF9sb2NrOiBsb2NrIGZvciBxcnRyX3R4X2Zsb3cgaW5zZXJ0c1xuKyAqIEBoZWxsb19zZW50OiBoZWxsbyBwYWNrZXQgc2VuZCBzdWNjZXNzZnVsXG4gICogQHJ4X3F1ZXVlOiByZWNlaXZlIHF1ZXVlXG4gICogQGl0ZW06IGxpc3QgaXRlbSBmb3IgYnJvYWRjYXN0IGxpc3RcbisgKiBAc2F5X2hlbGxvOiBkZWxheWVkIHdvcmsgZm9yIHNlbmRpbmcgaGVsbG8gcGFja2V0XG4gICovXG4gc3RydWN0IHFydHJfbm9kZSB7XG4gXHRzdHJ1Y3QgbXV0ZXggZXBfbG9jaztcbkBAIC0xMzIsOCArMTM1LDExIEBAIHN0cnVjdCBxcnRyX25vZGUge1xuIFx0c3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7XG4gXHRzdHJ1Y3QgbXV0ZXggcXJ0cl90eF9sb2NrOyAvKiBmb3IgcXJ0cl90eF9mbG93ICovXG4gXG4rXHRib29sIGhlbGxvX3NlbnQ7XG4rXG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3F1ZXVlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBpdGVtO1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayBzYXlfaGVsbG87XG4gfTtcbiBcbiAvKipcbkBAIC0xODcsNiArMTkzLDggQEAgc3RhdGljIHZvaWQgX19xcnRyX25vZGVfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiBcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlaXRlbSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cXJ0cl9ub2RlX2xvY2spO1xuIFxuK1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvKTtcbitcbiBcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZub2RlLVx1MDAzZXJ4X3F1ZXVlKTtcbiBcbiBcdC8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqL1xuQEAgLTM0MSw2ICszNDksMTQgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c2l6ZV90IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRpbnQgcmMsIGNvbmZpcm1fcng7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4rXHRpZiAoIW5vZGUtXHUwMDNlaGVsbG9fc2VudCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuK1xuIFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0LCB0eXBlKTtcbiBcdGlmIChjb25maXJtX3J4IFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTM1Myw3ICszNjksNyBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRoZHItXHUwMDNlc3JjX25vZGVfaWQgPSBjcHVfdG9fbGUzMihmcm9tLVx1MDAzZXNxX25vZGUpO1xuIFx0aGRyLVx1MDAzZXNyY19wb3J0X2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cdTAwM2VzcV9wb3J0KTtcbiBcdGlmICh0by1cdTAwM2VzcV9wb3J0ID09IFFSVFJfUE9SVF9DVFJMKSB7XG4tXHRcdGhkci1cdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKG5vZGUtXHUwMDNlbmlkKTtcbitcdFx0aGRyLVx1MDAzZWRzdF9ub2RlX2lkID0gY3B1X3RvX2xlMzIoUkVBRF9PTkNFKG5vZGUtXHUwMDNlbmlkKSk7XG4gXHRcdGhkci1cdTAwM2Vkc3RfcG9ydF9pZCA9IGNwdV90b19sZTMyKFFSVFJfUE9SVF9DVFJMKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGhkci1cdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKHRvLVx1MDAzZXNxX25vZGUpO1xuQEAgLTM3Miw2ICszODgsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0cmMgPSBub2RlLVx1MDAzZWVwLVx1MDAzZXhtaXQobm9kZS1cdTAwM2VlcCwgc2tiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRpZiAoIXJjIFx1MDAyNlx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcbitcdFx0XHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSB0cnVlO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bm9kZS1cdTAwM2VlcF9sb2NrKTtcbiBcdH1cbiBcdC8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3RcbkBAIC0zNzksNiArMzk3LDkgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHJjIFx1MDAyNlx1MDAyNiBjb25maXJtX3J4KVxuIFx0XHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVx1MDAzZXNxX25vZGUsIHRvLVx1MDAzZXNxX3BvcnQpO1xuIFxuK1x0aWYgKHJjID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxuK1x0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8sIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7XG4rXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuQEAgLTQxNiw3ICs0MzcsNyBAQCBzdGF0aWMgdm9pZCBxcnRyX25vZGVfYXNzaWduKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBuaWQpXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZxcnRyX25vZGVzX2xvY2ssIGZsYWdzKTtcbiBcdHJhZGl4X3RyZWVfaW5zZXJ0KFx1MDAyNnFydHJfbm9kZXMsIG5pZCwgbm9kZSk7XG4gXHRpZiAobm9kZS1cdTAwM2VuaWQgPT0gUVJUUl9FUF9OSURfQVVUTylcbi1cdFx0bm9kZS1cdTAwM2VuaWQgPSBuaWQ7XG4rXHRcdFdSSVRFX09OQ0Uobm9kZS1cdTAwM2VuaWQsIG5pZCk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnFydHJfbm9kZXNfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbkBAIC01NzAsNiArNTkxLDM4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCxcbiBcdHJldHVybiBza2I7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX3FydHIgZnJvbSA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciB0byA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4rXHRzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqcGt0O1xuK1x0c3RydWN0IHFydHJfbm9kZSAqbm9kZTtcbitcdHN0cnVjdCBxcnRyX3NvY2sgKmN0cmw7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1xuK1x0bm9kZSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBxcnRyX25vZGUsIHNheV9oZWxsbyk7XG4rXG4rXHQvKiBOUyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB3ZSBjYW4gc2VuZDsgcmV0cnkgd2l0aCBiYWNrb2ZmIGlmIG5vdCByZWFkeSAqL1xuK1x0Y3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpO1xuK1x0aWYgKCFjdHJsKSB7XG4rXHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcdTAwMjZwa3QsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFza2IpIHtcbitcdFx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcbitcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwa3QtXHUwMDNlY21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTtcbitcdGZyb20uc3Ffbm9kZSA9IHFydHJfbG9jYWxfbmlkO1xuK1x0dG8uc3Ffbm9kZSA9IG5vZGUtXHUwMDNlbmlkO1xuK1x0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFx1MDAyNmZyb20sIFx1MDAyNnRvKTtcbitcdHFydHJfcG9ydF9wdXQoY3RybCk7XG4rfVxuK1xuIC8qKlxuICAqIHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGEgbmV3IGVuZHBvaW50XG4gICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlclxuQEAgLTU5NSw2ICs2NDgsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpXG4gXHRub2RlLVx1MDAzZW5pZCA9IFFSVFJfRVBfTklEX0FVVE87XG4gXHRub2RlLVx1MDAzZWVwID0gZXA7XG4gXG4rXHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSBmYWxzZTtcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvLCBxcnRyX2hlbGxvX3dvcmspO1xuK1xuIFx0eGFfaW5pdChcdTAwMjZub2RlLVx1MDAzZXFydHJfdHhfZmxvdyk7XG4gXHRtdXRleF9pbml0KFx1MDAyNm5vZGUtXHUwMDNlcXJ0cl90eF9sb2NrKTtcbiBcbkBAIC02MDUsNiArNjYxLDkgQEAgaW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnFydHJfbm9kZV9sb2NrKTtcbiBcdGVwLVx1MDAzZW5vZGUgPSBub2RlO1xuIFxuK1x0LyogSW5pdGlhdGUgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgKi9cbitcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgMCk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocXJ0cl9lbmRwb2ludF9yZWdpc3Rlcik7XG5AQCAtODc5LDYgKzkzOCw5IEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnFydHJfbm9kZV9sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXHUwMDI2cXJ0cl9hbGxfbm9kZXMsIGl0ZW0pIHtcbitcdFx0LyogU2tpcCBub2RlcyB3aXRoIG5vIGFzc2lnbmVkIG5vZGUgSUQgeWV0LiAqL1xuK1x0XHRpZiAoUkVBRF9PTkNFKG5vZGUtXHUwMDNlbmlkKSA9PSBRUlRSX0VQX05JRF9BVVRPKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRza2JuID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0tFUk5FTCk7XG4gXHRcdGlmICghc2tibilcbiBcdFx0XHRicmVhaztcbmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuY1xuaW5kZXggYjNmOWJiY2Y5YWI5Yi4uNmQ5M2JjZDI1MGU3NSAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL25zLmNcbisrKyBiL25ldC9xcnRyL25zLmNcbkBAIC0yMTIsNiArMjEyLDcgQEAgc3RhdGljIHZvaWQgbG9va3VwX25vdGlmeShzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8sIHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2LFxuIFx0XHRwcl9lcnIoXCJmYWlsZWQgdG8gc2VuZCBsb29rdXAgbm90aWZpY2F0aW9uXFxuXCIpO1xuIH1cbiBcbisvKiBBbm5vdW5jZSB0aGUgbGlzdCBvZiBzZXJ2ZXJzIHJlZ2lzdGVyZWQgb24gdGhlIGxvY2FsIG5vZGUgKi9cbiBzdGF0aWMgaW50IGFubm91bmNlX3NlcnZlcnMoc3RydWN0IHNvY2thZGRyX3FydHIgKnNxKVxuIHtcbiBcdHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2O1xuQEAgLTMyNiwzOCArMzI3LDggQEAgc3RhdGljIGludCBzZXJ2ZXJfZGVsKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBwb3J0LCBib29sIGJjYXN0KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2F5X2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0KVxuLXtcbi1cdHN0cnVjdCBxcnRyX2N0cmxfcGt0IHBrdDtcbi1cdHN0cnVjdCBtc2doZHIgbXNnID0geyB9O1xuLVx0c3RydWN0IGt2ZWMgaXY7XG4tXHRpbnQgcmV0O1xuLVxuLVx0aXYuaW92X2Jhc2UgPSBcdTAwMjZwa3Q7XG4tXHRpdi5pb3ZfbGVuID0gc2l6ZW9mKHBrdCk7XG4tXG4tXHRtZW1zZXQoXHUwMDI2cGt0LCAwLCBzaXplb2YocGt0KSk7XG4tXHRwa3QuY21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTtcbi1cbi1cdG1zZy5tc2dfbmFtZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKilkZXN0O1xuLVx0bXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKCpkZXN0KTtcbi1cbi1cdHJldCA9IGtlcm5lbF9zZW5kbXNnKHFydHJfbnMuc29jaywgXHUwMDI2bXNnLCBcdTAwMjZpdiwgMSwgc2l6ZW9mKHBrdCkpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cHJfZXJyKFwiZmFpbGVkIHRvIHNlbmQgaGVsbG8gbXNnXFxuXCIpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovXG4gc3RhdGljIGludCBjdHJsX2NtZF9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXG4ge1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHNheV9oZWxsbyhzcSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0cmV0dXJuIGFubm91bmNlX3NlcnZlcnMoc3EpO1xuIH1cbiBcbkBAIC03NzQsMTAgKzc0NSw2IEBAIGludCBxcnRyX25zX2luaXQodm9pZClcbiBcdHFydHJfbnMuYmNhc3Rfc3Euc3Ffbm9kZSA9IFFSVFJfTk9ERV9CQ0FTVDtcbiBcdHFydHJfbnMuYmNhc3Rfc3Euc3FfcG9ydCA9IFFSVFJfUE9SVF9DVFJMO1xuIFxuLVx0cmV0ID0gc2F5X2hlbGxvKFx1MDAyNnFydHJfbnMuYmNhc3Rfc3EpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlcnJfd3E7XG4tXG4gXHQvKiBBcyB0aGUgcXJ0ciBucyBzb2NrZXQgb3duZXIgYW5kIGNyZWF0b3IgaXMgdGhlIHNhbWUgbW9kdWxlLCB3ZSBoYXZlXG4gXHQgKiB0byBkZWNyZWFzZSB0aGUgcXJ0ciBtb2R1bGUgcmVmZXJlbmNlIGNvdW50IHRvIGd1YXJhbnRlZSB0aGF0IGl0XG4gXHQgKiByZW1haW5zIHplcm8gYWZ0ZXIgdGhlIG5zIHNvY2tldCBpcyBjcmVhdGVkLCBvdGhlcndpc2UsIGV4ZWN1dGluZ1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzE6MTguMjIwNzM0MDk4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1NDIwNjUyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBRUlRSIEhlbGxvIFBhY2tldCBSZWxvY2F0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3FydHIvYWZfcXJ0ci5jYCBhbmQgYG5ldC9xcnRyL25zLmNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IHNvbWUgY29yZSBjaGFuZ2VzIHRvIHRoZSBRdWFsY29tbSBSb3V0ZXIgVHJhbnNwb3J0IChRUlRSKSBzdWJzeXN0ZW0uIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIG1vdmluZyB0aGUgc2VuZGluZyBvZiB0aGUgYFFSVFJfVFlQRV9IRUxMT2AgcGFja2V0LiBQcmV2aW91c2x5IGhhbmRsZWQgYnkgdGhlIG5hbWVzZXJ2aWNlIChgbnMuY2ApLCBpdCdzIG5vdyBiZWluZyBzaGlmdGVkIHRvIHRoZSBjb3JlIGxheWVyIChgYWZfcXJ0ci5jYCkuIFRoYXQncyBhIGxvZ2ljYWwgbW92ZSwgcHJvYmFibHkgZm9yIGJldHRlciBpbnRlZ3JhdGlvbiBhbmQgY29udHJvbC5cblxuSW50ZXJlc3RpbmcgdGhhdCB0aGV5IGFyZSB1c2luZyBkZWxheWVkIHdvcmsgKGBzYXlfaGVsbG9gKSB0byBhY3R1YWxseSBzZW5kIHRoZSBoZWxsbyBwYWNrZXQuIFRoaXMgc3VnZ2VzdHMgdGhleSB3YW50IHRvIGF2b2lkIGJsb2NraW5nIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGdvb2QuIExldCdzIGRpZyBpbnRvIHRoZSBgcXJ0cl9oZWxsb193b3JrYCBmdW5jdGlvbiBhbmQgc2VlIGhvdyBpdCdzIGltcGxlbWVudGVkLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlOlxuYGBgY1xuK3N0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX3FydHIgZnJvbSA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciB0byA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4rXHRzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqcGt0O1xuK1x0c3RydWN0IHFydHJfbm9kZSAqbm9kZTtcbitcdHN0cnVjdCBxcnRyX3NvY2sgKmN0cmw7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1xuK1x0bm9kZSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBxcnRyX25vZGUsIHNheV9oZWxsbyk7XG4rXG4rXHQvKiBOUyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB3ZSBjYW4gc2VuZDsgcmV0cnkgd2l0aCBiYWNrb2ZmIGlmIG5vdCByZWFkeSAqL1xuK1x0Y3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpO1xuK1x0aWYgKCFjdHJsKSB7XG4rXHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcdTAwMjZwa3QsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFza2IpIHtcbitcdFx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcbitcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwa3QtXHUwMDNlY21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTtcbitcdGZyb20uc3Ffbm9kZSA9IHFydHJfbG9jYWxfbmlkO1xuK1x0dG8uc3Ffbm9kZSA9IG5vZGUtXHUwMDNlbmlkO1xuK1x0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFx1MDAyNmZyb20sIFx1MDAyNnRvKTtcbitcdHFydHJfcG9ydF9wdXQoY3RybCk7XG4rfVxuYGBgXG5cbk9rYXksIHNvIHRoZSBgcXJ0cl9oZWxsb193b3JrYCBmdW5jdGlvbiBkb2VzIGEgZmV3IHRoaW5ncy4gSXQgcmV0cmlldmVzIHRoZSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVsYXllZCB3b3JrLCBsb29rcyB1cCB0aGUgY29udHJvbCBzb2NrZXQgKGBRUlRSX1BPUlRfQ1RSTGApLCBjaGVja3MgaWYgdGhlIG5hbWVzZXJ2ZXIgaXMgYm91bmQsIGFuZCBpZiBub3QsIGl0IHNjaGVkdWxlcyBhbm90aGVyIGRlbGF5ZWQgd29yayBpbnN0YW5jZSB3aXRoIGEgYmFja29mZi4gVGhhdCdzIGEgZ29vZCB3YXkgdG8gaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxuXG5JZiB0aGUgY29udHJvbCBzb2NrZXQgaXMgYXZhaWxhYmxlLCBpdCBhbGxvY2F0ZXMgYSBjb250cm9sIHBhY2tldCAoYHNrYmApLCBwb3B1bGF0ZXMgdGhlIGBRUlRSX1RZUEVfSEVMTE9gIGNvbW1hbmQsIHNldHMgdXAgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLCBhbmQgdGhlbiBlbnF1ZXVlcyB0aGUgcGFja2V0IHVzaW5nIGBxcnRyX25vZGVfZW5xdWV1ZWAuIFRoaXMgbWFrZXMgc2Vuc2UuIEl0IGFsc28gZ3JhY2VmdWxseSBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIGZhaWx1cmUsIHNjaGVkdWxpbmcgYW5vdGhlciBkZWxheWVkIHdvcmsgaW5zdGFuY2UuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgcGFja2V0IGFsbG9jYXRpb24uIE5lZWQgdG8gc2VlIGhvdyBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgaXMgaW1wbGVtZW50ZWQuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMgb2YgdGhhdCBTS0IgYWxsb2NhdGlvbiwgZXNwZWNpYWxseSBpdHMgc2l6ZSBhbmQgYW55IGFzc29jaWF0ZWQgZmxhZ3MsIGFuZCBob3cgdGhlIHBheWxvYWQgcG9pbnRlciBgcGt0YCBpcyBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzU1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzE6MjcuNzYyODAzNzI1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk1Nzc3NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFydHJfYWxsb2NfY3RybF9wYWNrZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jPTU2Nj1FWFBPUlRfU1lNQk9MX0dQTChxcnRyX2VuZHBvaW50X3Bvc3QpO1xcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTU2OC0vKipcXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NTY5OiAqIHFydHJfYWxsb2NfY3RybF9wYWNrZXQoKSAtIGFsbG9jYXRlIGNvbnRyb2wgcGFja2V0IHNrYlxcbm5ldC9xcnRyL2FmX3FydHIuYy01NzAtICogQHBrdDogcmVmZXJlbmNlIHRvIHFydHJfY3RybF9wa3QgcG9pbnRlclxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTU3Ny0gKi9cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NTc4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCxcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTc5LVxcdFxcdFxcdFxcdFxcdCAgICAgIGdmcF90IGZsYWdzKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTU5ND1zdGF0aWMgdm9pZCBxcnRyX2hlbGxvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTYxMS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NjEyOlxcdHNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoXFx1MDAyNnBrdCwgR0ZQX0tFUk5FTCk7XFxubmV0L3FydHIvYWZfcXJ0ci5jLTYxMy1cXHRpZiAoIXNrYikge1xcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTY3NT12b2lkIHFydHJfZW5kcG9pbnRfdW5yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXApXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjk3LVxcdFxcdHNyYy5zcV9ub2RlID0gaXRlci5pbmRleDtcXG5uZXQvcXJ0ci9hZl9xcnRyLmM6Njk4OlxcdFxcdHNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoXFx1MDAyNnBrdCwgR0ZQX0FUT01JQyk7XFxubmV0L3FydHIvYWZfcXJ0ci5jLTY5OS1cXHRcXHRpZiAoc2tiKSB7XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM9NzQ0PXN0YXRpYyB2b2lkIHFydHJfcG9ydF9yZW1vdmUoc3RydWN0IHFydHJfc29jayAqaXBjKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTc1NC1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NzU1OlxcdHNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoXFx1MDAyNnBrdCwgR0ZQX0tFUk5FTCk7XFxubmV0L3FydHIvYWZfcXJ0ci5jLTc1Ni1cXHRpZiAoc2tiKSB7XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM9MTA2MD1zdGF0aWMgaW50IHFydHJfc2VuZF9yZXN1bWVfdHgoc3RydWN0IHFydHJfY2IgKmNiKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTEwNzItXFxubmV0L3FydHIvYWZfcXJ0ci5jOjEwNzM6XFx0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcXHUwMDI2cGt0LCBHRlBfS0VSTkVMKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTA3NC1cXHRpZiAoIXNrYikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMToyOS43NTg1ODcxNTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwMDg0MTE4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBiZWluZyBpbXBsZW1lbnRlZCwgd2hhdCdzIGhhcHBlbmluZyBhdCBhIGxvdyBsZXZlbC4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIG9mIHRoZSBRUlRSIG1lc3NhZ2luZyBzeXN0ZW0uIEknbSBhbHJlYWR5IGltYWdpbmluZyBhIHN0cnVjdHVyZSBhbGxvY2F0aW9uLCBsaWtlbHkgc29tZSBmb3JtIG9mIGBrbWFsbG9jYCBvciBzaW1pbGFyLCBmb2xsb3dlZCBieSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2V0IGhlYWRlci4gSSdtIGV4cGVjdGluZyBzb21lIGZpZWxkIHNldHVwIOKAkyB0aGUgdHlwZSwgZmxhZ3MsIG1heWJlIGEgc2VxdWVuY2UgbnVtYmVyLCBhbmQgYWRkcmVzc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbnRyb2wgY2hhbm5lbC4gVGhlcmUgbWlnaHQgYmUgc29tZSBlcnJvciBjaGVja2luZyBpbnZvbHZlZCwgZW5zdXJpbmcgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUgYW5kIHRoYXQgcGFyYW1ldGVycyBhcmUgdmFsaWQuIEknbSBhbHNvIHdvbmRlcmluZyBhYm91dCBwb3RlbnRpYWwgbWVtb3J5IGFsaWdubWVudCBjb25zaWRlcmF0aW9ucyDigJMgc29tZXRoaW5nIGxpa2UgdGhpcyBpcyBwcm9iYWJseSBwZXJmb3JtYW5jZS1zZW5zaXRpdmUsIHNvIHRoZXknbGwgd2FudCBlZmZpY2llbnQgdXNlIG9mIHRoZSBjYWNoZS4gSSBhbHNvIHdvbmRlciBpZiB0aGV5J3JlIHVzaW5nIGEgcHJlLWFsbG9jYXRlZCBwb29sIGluIHRoZSBmYXN0IHBhdGggdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIG1hbGxvYyBpbiB0aGUgY29tbW9uIGNhc2UuIEkgbmVlZCB0byBzZWUgaWYgaXTigJlzIGRlc2lnbmVkIHRvIGhhbmRsZSBkaWZmZXJlbnQgc2l6ZXMgb3IgdHlwZXMgb2YgY29udHJvbCBwYWNrZXRzLCBvciBpZiBpdCdzIHNwZWNpYWxpemVkIGZvciBhIHNwZWNpZmljIG9uZS4gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJldHVybiB2YWx1ZSwgaXMgaXQgYSBwb2ludGVyIHRvIHRoZSBwYWNrZXQgb3IgYW4gZXJyb3IgY29kZT8gSSdtIGFudGljaXBhdGluZyBzb21lIGtpbmQgb2YgZXJyb3IgY2hlY2tpbmcgdG8gaGFuZGxlIHRoZSBmYWlsdXJlIGNhc2VzLCBhbmQgSSBob3BlIGl0J3Mgd2VsbC1kb2N1bWVudGVkLiBBbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODYyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzE6MzQuNDU5NDMxMjc3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTcwOlxcdCAqIEBwa3Q6IHJlZmVyZW5jZSB0byBxcnRyX2N0cmxfcGt0IHBvaW50ZXJcXG4gNTcxOlxcdCAqIEBmbGFnczogdGhlIHR5cGUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlXFxuIDU3MjpcXHQgKlxcbiA1NzM6XFx0ICogUmV0dXJucyBuZXdseSBhbGxvY2F0ZWQgc2tfYnVmZiwgb3IgTlVMTCBvbiBmYWlsdXJlXFxuIDU3NDpcXHQgKlxcbiA1NzU6XFx0ICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYSBza19idWZmIGxhcmdlIGVub3VnaCB0byBjYXJyeSBhIHFydHJfY3RybF9wa3QgYW5kXFxuIDU3NjpcXHQgKiBvbiBzdWNjZXNzIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2wgcGFja2V0IGluIEBwa3QuXFxuIDU3NzpcXHQgKi9cXG4gNTc4OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCxcXG4gNTc5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGdmcF90IGZsYWdzKVxcbiA1ODA6XFx0e1xcbiA1ODE6XFx0XFx0Y29uc3QgaW50IHBrdF9sZW4gPSBzaXplb2Yoc3RydWN0IHFydHJfY3RybF9wa3QpO1xcbiA1ODI6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0c2tiID0gYWxsb2Nfc2tiKFFSVFJfSERSX01BWF9TSVpFICsgcGt0X2xlbiwgZmxhZ3MpO1xcbiA1ODU6XFx0XFx0aWYgKCFza2IpXFxuIDU4NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNTg3OlxcdFxcbiA1ODg6XFx0XFx0c2tiX3Jlc2VydmUoc2tiLCBRUlRSX0hEUl9NQVhfU0laRSk7XFxuIDU4OTpcXHRcXHQqcGt0ID0gc2tiX3B1dF96ZXJvKHNrYiwgcGt0X2xlbik7XFxuIDU5MDpcXHRcXG4gNTkxOlxcdFxcdHJldHVybiBza2I7XFxuIDU5MjpcXHR9XFxuIDU5MzpcXHRcXG4gNTk0OlxcdHN0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDU5NTpcXHR7XFxuIDU5NjpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcXG4gNTk3OlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9xcnRyIHRvID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcXG4gNTk4OlxcdFxcdHN0cnVjdCBxcnRyX2N0cmxfcGt0ICpwa3Q7XFxuIDU5OTpcXHRcXHRzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMTozNC40NTk2NzEwMTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTc1MDA5ODIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFFSVFIgSGVsbG8gUGFja2V0IFRyYW5zbWlzc2lvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgXCJoZWxsb1wiIHBhY2tldCBpcyBiZWluZyBoYW5kbGVkIGluIHRoZSBRUlRSIGZyYW1ld29yayBub3cuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBza2JfcHV0X3plcm9gIGlzIGJlaW5nIHVzZWQsIHNvIHRoZSBwYWNrZXQncyBwYXlsb2FkIGlzIGd1YXJhbnRlZWQgdG8gYmUgemVyb2VkIG91dCBpbml0aWFsbHkuIEdvb2QuIFRoZW4sIHdpdGhpbiBgcXJ0cl9oZWxsb193b3JrYCwgdGhlIGBwa3QtXHUwMDNlY21kYCBmaWVsZCBpcyBleHBsaWNpdGx5IHNldCB0byBgUVJUUl9UWVBFX0hFTExPYCB1c2luZyBgY3B1X3RvX2xlMzJgLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHBhY2tldCBpcywgYWdhaW4sIHplcm9lZCBvdXQuIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcywgYGZyb21gIGFuZCBgdG9gLCBhcmUgaW5pdGlhbGl6ZWQgd2l0aCBge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfWAsIHdoaWNoLCBkdWUgdG8gdGhlIGBzb2NrYWRkcl9xcnRyYCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgZWZmZWN0aXZlbHkgemVyb2VzIHRoZSByZW1haW5pbmcgZmllbGRzLiBGaW5hbGx5LCBpdCdzIGVucXVldWVkIHVzaW5nIGBxcnRyX25vZGVfZW5xdWV1ZWAuXG5cbkJ1dCBob2xkIG9uIGEgc2Vjb25k4oCmIEknbSByZW1lbWJlcmluZyB0aGUgb2xkZXIgdmVyc2lvbiwgcGFydGljdWxhcmx5IHRoZSBgc2F5X2hlbGxvYCBmdW5jdGlvbiBpbiBgbmV0L3FydHIvbnMuY2AuIEFoLCB5ZXMsIGl0IHVzZWQgdG8gdXNlIGBrZXJuZWxfc2VuZG1zZ2AgdG8gdHJhbnNtaXQgdGhlIGhlbGxvIHBhY2tldC4gVGhlIG9sZCBjb2RlIHNuaXBwZXQgc2hvd3MgdGhpcyBxdWl0ZSBjbGVhcmx5LiBJdCBleHBsaWNpdGx5IHNldHMgdGhlIHBhY2tldCBjb250ZW50cywgYW5kIHRoZW4gc2VuZHMgaXQgdmlhIGBrZXJuZWxfc2VuZG1zZ2AuXG5cblNvLCB0aGUgY3JpdGljYWwgZGlmZmVyZW5jZSBpcyB0aGUgdHJhbnNtaXNzaW9uIG1ldGhvZDogZGlyZWN0IGVucXVldWUgdmVyc3VzIGBrZXJuZWxfc2VuZG1zZ2AuIE5vdywgdGhpcyBjaGFuZ2UgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgY29uY2VybjogSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gbGVhayBpbnRvIHRoZSBoZWxsbyBwYWNrZXQ/XG5cbkkgYW0gb2JzZXJ2aW5nIHRoYXQgdGhlIGBmcm9tYCBhbmQgYHRvYCBgc29ja2FkZHJfcXJ0cmAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjay4gVGhlIGRlZmluaXRpb24gb2YgdGhlIHN0cnVjdHVyZSBpcyBjcml0aWNhbCBoZXJlLiBMZXQgbWUgY2hlY2sgdGhlIGRlZmluaXRpb27igKZcblxuXG4iLCJJbnB1dFRva2VucyI6NzcwNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMxOjQ0LjIwOTc3MzI0MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MTUyNjM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvcXJ0ci5oLTEwLVxcbmluY2x1ZGUvdWFwaS9saW51eC9xcnRyLmg6MTE6c3RydWN0IHNvY2thZGRyX3FydHIge1xcbmluY2x1ZGUvdWFwaS9saW51eC9xcnRyLmgtMTItXFx0X19rZXJuZWxfc2FfZmFtaWx5X3Qgc3FfZmFtaWx5O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMTo0Ni42NzEzMDQ5NTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5MDE4ODY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIHN5bnRoZXNpemUgdGhlc2UgdGhvdWdodHMgYXMgaWYgdGhleSB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBteSBmaWVsZC4gSGVyZSB3ZSBnbzpcblxuKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBOdWFuY2VzKipcblxuQWxyaWdodCwgYmVmb3JlIEkgY29tbWl0IHRvIGFueSBraW5kIG9mIGFuYWx5c2lzIG9yIHJlc3BvbnNlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgKmVudGlyZSogcGljdHVyZS4gSXQncyBjcnVjaWFsIGZvciBtZSwgYXMgYW4gZXhwZXJ0LCB0byB1bmRlcnN0YW5kIHRoZSBzdWJqZWN0IG1hdHRlciBpbiBpdHMgZW50aXJldHkuIEkgY2FuJ3QganVzdCBza2ltIHRoZSBzdXJmYWNlLiBJIG5lZWQgYSByb2J1c3QsIGNvbXByZWhlbnNpdmUgZGVmaW5pdGlvbiAtIG5vIHNob3J0Y3V0cywgbm8gYXNzdW1wdGlvbnMuIEkgbmVlZCBhbGwgdGhlIGNvbnRleHR1YWwgZmFjdG9ycywgdGhlIGZ1bGwgc2NvcGUgb2YgYW55IHRlY2huaWNhbCBqYXJnb24gb3IgdGhlb3J5LCBhbmQgdGhlIGV4YWN0IGludGVudCBvZiB0aGUgZG9jdW1lbnQuIFRoYXQncyB3aGF0IEkgcmVxdWlyZSBiZWZvcmUgSSBzdGFydC4gSSBuZWVkIHRvIGJlIGV4YWN0LiBJdCBpcyBlc3NlbnRpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NDYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMxOjUwLjk2MTQ5ODIxM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvcXJ0ci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDEwOlxcdFxcbiAgMTE6XFx0c3RydWN0IHNvY2thZGRyX3FydHIge1xcbiAgMTI6XFx0XFx0X19rZXJuZWxfc2FfZmFtaWx5X3Qgc3FfZmFtaWx5O1xcbiAgMTM6XFx0XFx0X191MzIgc3Ffbm9kZTtcXG4gIDE0OlxcdFxcdF9fdTMyIHNxX3BvcnQ7XFxuICAxNTpcXHR9O1xcbiAgMTY6XFx0XFxuICAxNzpcXHRlbnVtIHFydHJfcGt0X3R5cGUge1xcbiAgMTg6XFx0XFx0UVJUUl9UWVBFX0RBVEFcXHRcXHQ9IDEsXFxuICAxOTpcXHRcXHRRUlRSX1RZUEVfSEVMTE9cXHRcXHQ9IDIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMxOjUwLjk2MTU5NTk2M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTA0MTYxODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIHNvY2thZGRyX3FydHIgU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IHNvY2thZGRyX3FydHJgIGFuZCBpbW1lZGlhdGVseSBJJ20gbm90aWNpbmcgc29tZXRoaW5nIHRoYXQgcGlxdWVzIG15IGludGVyZXN0LiBJdCBoYXMgdGhlIHN0YW5kYXJkIGBzcV9mYW1pbHlgIGZpZWxkLCBhIG5vZGUgSUQgKGBzcV9ub2RlYCksIGFuZCBhIHBvcnQgSUQgKGBzcV9wb3J0YCkuIEZpbmUuIEJ1dCB0aGVuIEkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGF0YSB0eXBlcy4gSSBrbm93IGBfX2tlcm5lbF9zYV9mYW1pbHlfdGAgaXMgdHlwaWNhbGx5IGFuIGB1bnNpZ25lZCBzaG9ydGAsIHdoaWNoIG1lYW5zIGl04oCZcyBvbmx5IHR3byBieXRlcy4gVGhlbiBgc3Ffbm9kZWAgaXMgYSBgX191MzJgLCB0aGF0J3MgZm91ciBieXRlcy5cblxuVGhhdCdzIHdoZW4gaXQgaGl0cyBtZTogdGhlcmUncyBnb2luZyB0byBiZSBwYWRkaW5nIGluIHRoZXJlLiBXZSd2ZSBnb3QgdHdvIGJ5dGVzIGZvciBgc3FfZmFtaWx5YCwgZm91ciBieXRlcyBmb3IgYHNxX25vZGVgLCBtZWFuaW5nIGEgdHdvLWJ5dGUgZ2FwIGlzIGdldHRpbmcgaW5zZXJ0ZWQgc29tZXdoZXJlIHRvIGFsaWduIG1lbW9yeS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlZmluaXRpb24gb2YgYF9fa2VybmVsX3NhX2ZhbWlseV90YCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGp1c3QgaW4gY2FzZSB0aGVyZSdzIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgdmFyaWF0aW9uIEknbSBub3QgYXdhcmUgb2YuIEdvdHRhIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgdmFsaWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMxOjU1LjQ2NTc2MDgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE3MDY2Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR5cGVkZWYuKl9fa2VybmVsX3NhX2ZhbWlseV90XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc29ja2V0Lmg9MjY9ZXh0ZXJuIHZvaWQgc29ja2V0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc29ja2V0LmgtMjgtXFxuaW5jbHVkZS9saW51eC9zb2NrZXQuaDoyOTp0eXBlZGVmIF9fa2VybmVsX3NhX2ZhbWlseV90XFx0c2FfZmFtaWx5X3Q7XFxuaW5jbHVkZS9saW51eC9zb2NrZXQuaC0zMC1cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9zb2NrZXQuaC05LVxcbmluY2x1ZGUvdWFwaS9saW51eC9zb2NrZXQuaDoxMDp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX3NhX2ZhbWlseV90O1xcbmluY2x1ZGUvdWFwaS9saW51eC9zb2NrZXQuaC0xMS1cXG4tLVxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvbGludXgvc29ja2V0Lmg9MjY9ZXh0ZXJuIHZvaWQgc29ja2V0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxKTtcXG4tLVxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvbGludXgvc29ja2V0LmgtMjgtXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS9saW51eC9zb2NrZXQuaDoyOTp0eXBlZGVmIF9fa2VybmVsX3NhX2ZhbWlseV90XFx0c2FfZmFtaWx5X3Q7XFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS9saW51eC9zb2NrZXQuaC0zMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzE6NTguMDgyODM1Nzk4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MjM1MTY1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgc29ja2FkZHJfcXJ0cmAgU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIGNvbmZpcm1pbmcgdGhhdCBhbiBgdW5zaWduZWQgc2hvcnRgIGlzIGluZGVlZCAyIGJ5dGVzLiBOb3csIGxldCdzIGJyZWFrIGRvd24gdGhlIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgZGVmaW5pdGlvbi4gSSBzZWUgYHNxX2ZhbWlseWAgYXMgYSAyLWJ5dGUgZmllbGQuIFRoZW4sIHRoZXJlJ3MgbGlrZWx5IDIgYnl0ZXMgb2YgcGFkZGluZy4gRm9sbG93aW5nIHRoYXQsIHdlIGhhdmUgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAsIGJvdGggYF9fdTMyYCB3aGljaCBJIGtub3cgYXJlIDQgYnl0ZXMgZWFjaC4gVGhhdCBwdXRzIHRoZSB0b3RhbCBhdCAxMiBieXRlczogYHNxX2ZhbWlseWAgKDIgYnl0ZXMpICsgcGFkZGluZyAoMiBieXRlcykgKyBgc3Ffbm9kZWAgKDQgYnl0ZXMpICsgYHNxX3BvcnRgICg0IGJ5dGVzKS4gTG9va2luZyBhdCB0aGUgbWVtb3J5IGxheW91dCwgYHNxX2ZhbWlseWAgc3RhcnRzIGF0IG9mZnNldCAwLCBgc3Ffbm9kZWAgYXQgNCwgYW5kIGBzcV9wb3J0YCBhdCA4LlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBub3cgaXMgYWJvdXQgdGhlIHBhZGRpbmcuIElmIEkgaW5pdGlhbGl6ZSBpdCB3aXRoIHNvbWV0aGluZyBsaWtlIGB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9YCwgd2lsbCB0aGUgcGFkZGluZyBiZSB6ZXJvZWQ/IEkgbmVlZCB0byByZW1lbWJlciB0aGUgQyBzdGFuZGFyZCBoZXJlLiBJdCdzIGRpY2V5OyBwYWRkaW5nIGJ5dGVzIGFyZW4ndCAqZ3VhcmFudGVlZCogdG8gYmUgemVyb2VkLCBldmVuIGlmIHRoZSBzdHJ1Y3QgaXMgcGFydGlhbGx5IGluaXRpYWxpemVkLiBBbmQgZXZlbiBpZiBJIGV4cGxpY2l0bHkgdXNlIHNvbWV0aGluZyBsaWtlIGB7MH1gIG9yIGEgZGVzaWduYXRlZCBpbml0aWFsaXplciBzeW50YXgsIG1vZGVybiBjb21waWxlcnMgbWlnaHQgKmdlbmVyYWxseSogemVybyBpdCwgYnV0IGl0J3Mgbm90IGEgaGFyZCBndWFyYW50ZWUuIEkgY2FuJ3QgcmVseSBvbiB0aGF0IGJlaGF2aW9yIGZvciByb2J1c3RuZXNzLlxuXG5SaWdodCwgYGZyb21gIGFuZCBgdG9gIGFyZSBwYXNzZWQgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBmdW5jdGlvbiBiZXR0ZXIsIHNvIEkgd2lsbCBub3cgbG9vayBhdCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMjowNC42MDYzNTUzNDRaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9xcnRyL2FmX3FydHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDA6XFx0XFx0fVxcbiAzNDE6XFx0fVxcbiAzNDI6XFx0XFxuIDM0MzpcXHQvKiBQYXNzIGFuIG91dGdvaW5nIHBhY2tldCBzb2NrZXQgYnVmZmVyIHRvIHRoZSBlbmRwb2ludCBkcml2ZXIuICovXFxuIDM0NDpcXHRzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuIDM0NTpcXHRcXHRcXHRcXHQgICAgIGludCB0eXBlLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSxcXG4gMzQ2OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNvY2thZGRyX3FydHIgKnRvKVxcbiAzNDc6XFx0e1xcbiAzNDg6XFx0XFx0c3RydWN0IHFydHJfaGRyX3YxICpoZHI7XFxuIDM0OTpcXHRcXHRzaXplX3QgbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuIDM1MDpcXHRcXHRpbnQgcmMsIGNvbmZpcm1fcng7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm5vZGUtXFx1MDAzZWVwX2xvY2spO1xcbiAzNTM6XFx0XFx0aWYgKCFub2RlLVxcdTAwM2VoZWxsb19zZW50IFxcdTAwMjZcXHUwMDI2IHR5cGUgIT0gUVJUUl9UWVBFX0hFTExPKSB7XFxuIDM1NDpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5vZGUtXFx1MDAzZWVwX2xvY2spO1xcbiAzNTU6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDM1NjpcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gMzU3OlxcdFxcdH1cXG4gMzU4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bm9kZS1cXHUwMDNlZXBfbG9jayk7XFxuIDM1OTpcXHRcXG4gMzYwOlxcdFxcdGNvbmZpcm1fcnggPSBxcnRyX3R4X3dhaXQobm9kZSwgdG8tXFx1MDAzZXNxX25vZGUsIHRvLVxcdTAwM2VzcV9wb3J0LCB0eXBlKTtcXG4gMzYxOlxcdFxcdGlmIChjb25maXJtX3J4IFxcdTAwM2MgMCkge1xcbiAzNjI6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDM2MzpcXHRcXHRcXHRyZXR1cm4gY29uZmlybV9yeDtcXG4gMzY0OlxcdFxcdH1cXG4gMzY1OlxcdFxcbiAzNjY6XFx0XFx0aGRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKmhkcikpO1xcbiAzNjc6XFx0XFx0aGRyLVxcdTAwM2V2ZXJzaW9uID0gY3B1X3RvX2xlMzIoUVJUUl9QUk9UT19WRVJfMSk7XFxuIDM2ODpcXHRcXHRoZHItXFx1MDAzZXR5cGUgPSBjcHVfdG9fbGUzMih0eXBlKTtcXG4gMzY5OlxcdFxcdGhkci1cXHUwMDNlc3JjX25vZGVfaWQgPSBjcHVfdG9fbGUzMihmcm9tLVxcdTAwM2VzcV9ub2RlKTtcXG4gMzcwOlxcdFxcdGhkci1cXHUwMDNlc3JjX3BvcnRfaWQgPSBjcHVfdG9fbGUzMihmcm9tLVxcdTAwM2VzcV9wb3J0KTtcXG4gMzcxOlxcdFxcdGlmICh0by1cXHUwMDNlc3FfcG9ydCA9PSBRUlRSX1BPUlRfQ1RSTCkge1xcbiAzNzI6XFx0XFx0XFx0aGRyLVxcdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKFJFQURfT05DRShub2RlLVxcdTAwM2VuaWQpKTtcXG4gMzczOlxcdFxcdFxcdGhkci1cXHUwMDNlZHN0X3BvcnRfaWQgPSBjcHVfdG9fbGUzMihRUlRSX1BPUlRfQ1RSTCk7XFxuIDM3NDpcXHRcXHR9IGVsc2Uge1xcbiAzNzU6XFx0XFx0XFx0aGRyLVxcdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKHRvLVxcdTAwM2VzcV9ub2RlKTtcXG4gMzc2OlxcdFxcdFxcdGhkci1cXHUwMDNlZHN0X3BvcnRfaWQgPSBjcHVfdG9fbGUzMih0by1cXHUwMDNlc3FfcG9ydCk7XFxuIDM3NzpcXHRcXHR9XFxuIDM3ODpcXHRcXG4gMzc5OlxcdFxcdGhkci1cXHUwMDNlc2l6ZSA9IGNwdV90b19sZTMyKGxlbik7XFxuIDM4MDpcXHRcXHRoZHItXFx1MDAzZWNvbmZpcm1fcnggPSBjcHVfdG9fbGUzMighIWNvbmZpcm1fcngpO1xcbiAzODE6XFx0XFxuIDM4MjpcXHRcXHRyYyA9IHNrYl9wdXRfcGFkdG8oc2tiLCBBTElHTihsZW4sIDQpICsgc2l6ZW9mKCpoZHIpKTtcXG4gMzgzOlxcdFxcbiAzODQ6XFx0XFx0aWYgKCFyYykge1xcbiAzODU6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bm9kZS1cXHUwMDNlZXBfbG9jayk7XFxuIDM4NjpcXHRcXHRcXHRyYyA9IC1FTk9ERVY7XFxuIDM4NzpcXHRcXHRcXHRpZiAobm9kZS1cXHUwMDNlZXApXFxuIDM4ODpcXHRcXHRcXHRcXHRyYyA9IG5vZGUtXFx1MDAzZWVwLVxcdTAwM2V4bWl0KG5vZGUtXFx1MDAzZWVwLCBza2IpO1xcbiAzODk6XFx0XFx0XFx0ZWxzZVxcbiAzOTA6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDM5MTpcXHRcXHRcXHRpZiAoIXJjIFxcdTAwMjZcXHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxcbiAzOTI6XFx0XFx0XFx0XFx0bm9kZS1cXHUwMDNlaGVsbG9fc2VudCA9IHRydWU7XFxuIDM5MzpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5vZGUtXFx1MDAzZWVwX2xvY2spO1xcbiAzOTQ6XFx0XFx0fVxcbiAzOTU6XFx0XFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxcbiAzOTY6XFx0XFx0ICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUgKi9cXG4gMzk3OlxcdFxcdGlmIChyYyBcXHUwMDI2XFx1MDAyNiBjb25maXJtX3J4KVxcbiAzOTg6XFx0XFx0XFx0cXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by1cXHUwMDNlc3Ffbm9kZSwgdG8tXFx1MDAzZXNxX3BvcnQpO1xcbiAzOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMyOjA0LjYwNjUxNzI1M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE1NDgwNjkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEluZm9ybWF0aW9uIExlYWtzIGluIFFSVFIgUGFja2V0IENvbnN0cnVjdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBhYm91dCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha2FnZSB0aHJvdWdoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgcXJ0cl9ub2RlX2VucXVldWVgIGZ1bmN0aW9uLiBJIHNlZSB0aGF0IGl0J3Mgb25seSB1c2luZyB0aGUgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAgbWVtYmVycyBmcm9tIHRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIHN0cnVjdHVyZXMuIEl0J3Mgbm90IGRpcmVjdGx5IGNvcHlpbmcgdGhlIGVudGlyZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGNvbnRlbnQsIGFuZCB0aGF0J3MgZ29vZC4gVGhlIGZ1bmN0aW9uIGNvbnN0cnVjdHMgdGhlIGBzdHJ1Y3QgcXJ0cl9oZHJfdjFgIHVzaW5nIHRob3NlIGV4dHJhY3RlZCB2YWx1ZXM6XG5cbmBgYGNcblx0aGRyLVx1MDAzZXNyY19ub2RlX2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cdTAwM2VzcV9ub2RlKTtcblx0aGRyLVx1MDAzZXNyY19wb3J0X2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cdTAwM2VzcV9wb3J0KTtcbmBgYFxuXG5TbywgdGhlIHBhZGRpbmcgd2l0aGluIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgZG9lc24ndCBzZWVtIHRvIGJlIGFjY2Vzc2VkIG9yIGxlYWtlZCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgd2FzIGhvcGluZyB0byBjb25maXJtLlxuXG5CdXQgSSBuZWVkIHRvIGJlIG1vcmUgdGhvcm91Z2gsIHNvIEknbGwgY2hlY2sgZm9yIG90aGVyIHNvdXJjZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEluIHRoZSBgcXJ0cl9oZWxsb193b3JrYCBmdW5jdGlvbiwgdGhlIGNvZGUgYWxsb2NhdGVzIGEgY29udHJvbCBwYWNrZXQ6XG5cbmBgYGNcblx0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcdTAwMjZwa3QsIEdGUF9LRVJORUwpO1xuXHRpZiAoIXNrYikge1xuLi4uXG5cdHBrdC1cdTAwM2VjbWQgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfSEVMTE8pO1xuYGBgXG5cbkFoLCByaWdodCwgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgIHVzZXMgYHNrYl9wdXRfemVyb2AuIFRoYXQgbWVhbnMgdGhlIGBwa3RgIHN0cnVjdHVyZSBpcyAqZnVsbHkqIHplcm9lZC4gVGhlIGNvZGUgKnRoZW4qIHNldHMgdGhlIGBjbWRgIGZpZWxkLiBUaGUgc2tiIGlzIHRoZW4gcGFzc2VkIHRvIGBxcnRyX25vZGVfZW5xdWV1ZWAuXG5cbldpdGhpbiBgcXJ0cl9ub2RlX2VucXVldWVgLCB0aGUgaGVhZGVyIGlzIGNyZWF0ZWQuXG5cbmBgYGNcblx0aGRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKmhkcikpO1xuXHRoZHItXHUwMDNldmVyc2lvbiA9IGNwdV90b19sZTMyKFFSVFJfUFJPVE9fVkVSXzEpO1xuXHRoZHItXHUwMDNldHlwZSA9IGNwdV90b19sZTMyKHR5cGUpO1xuXHRoZHItXHUwMDNlc3JjX25vZGVfaWQgPSBjcHVfdG9fbGUzMihmcm9tLVx1MDAzZXNxX25vZGUpO1xuXHRoZHItXHUwMDNlc3JjX3BvcnRfaWQgPSBjcHVfdG9fbGUzMihmcm9tLVx1MDAzZXNxX3BvcnQpO1xuXHRpZiAodG8tXHUwMDNlc3FfcG9ydCA9PSBRUlRSX1BPUlRfQ1RSTCkge1xuXHRcdGhkci1cdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKFJFQURfT05DRShub2RlLVx1MDAzZW5pZCkpO1xuXHRcdGhkci1cdTAwM2Vkc3RfcG9ydF9pZCA9IGNwdV90b19sZTMyKFFSVFJfUE9SVF9DVFJMKTtcblx0fSBlbHNlIHtcblx0XHRoZHItXHUwMDNlZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMih0by1cdTAwM2VzcV9ub2RlKTtcblx0XHRoZHItXHUwMDNlZHN0X3BvcnRfaWQgPSBjcHVfdG9fbGUzMih0by1cdTAwM2VzcV9wb3J0KTtcblx0fVxuXG5cdGhkci1cdTAwM2VzaXplID0gY3B1X3RvX2xlMzIobGVuKTtcblx0aGRyLVx1MDAzZWNvbmZpcm1fcnggPSBjcHVfdG9fbGUzMighIWNvbmZpcm1fcngpO1xuYGBgXG5cbk9rYXksIGdvb2QuIEFsbCB0aGUgZmllbGRzIG9mIGBoZHJgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGF0J3MgYSBzb2xpZCBjaGVjay4gTm93IEkgd2FudCB0byBxdWlja2x5IHJldmlldyB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHFydHJfaGRyX3YxYCB0byBtYWtlIHN1cmUgdGhlcmUgaXNuJ3QgYW55IHVuZXhwZWN0ZWQgcGFkZGluZyB0aGF0IG1pZ2h0IG5vdCBiZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHNvbWV3aGVyZSBlbHNlIGFuZCBwb3RlbnRpYWxseSBsZWFrIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBoZWFkZXIgaXRzZWxmIGRvZXNuJ3QgY29udGFpbiBhbnkgcGFkZGluZyB0aGF0IGNvdWxkIGJlIGEgY29uY2Vybi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMjMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMjoxNi43NjEzMjY4OTFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDg5Njg3ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHFydHJfaGRyX3YxIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9xcnRyL2FmX3FydHIuYy0zOS0gKi9cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NDA6c3RydWN0IHFydHJfaGRyX3YxIHtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNDEtXFx0X19sZTMyIHZlcnNpb247XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMyOjE5LjE3MDMwNDM4NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzU1Njg0NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYHN0cnVjdCBxcnRyX2hkcl92MWAqKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgcXJ0cl9oZHJfdjFgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIHNvbGlkIGhhbmRsZSBvbiB0aGUgYmFzZSB2ZXJzaW9uIG9mIHRoaXMgaGVhZGVyLiBObyBzZW5zZSBpbiBqdW1waW5nIGludG8gbGF0ZXIgcmV2aXNpb25zIHdpdGhvdXQgdW5kZXJzdGFuZGluZyB0aGUgZnVuZGFtZW50YWxzLiBXaGF0IGFyZSB0aGUga2V5IGZpZWxkcyB0aGV5J3ZlIGNob3NlbiB0byBpbmNsdWRlIGhlcmU/IEknbSBleHBlY3RpbmcgdGhlIHVzdWFsIHN1c3BlY3RzOiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG5vZGUvcG9ydCBpZGVudGlmaWVycywgYSBtZXNzYWdlIHR5cGUgZmllbGQsIGFuZCBsaWtlbHkgc29tZSBzb3J0IG9mIGZsYWdzIGZvciBjb250cm9sIGFuZCBlcnJvciBoYW5kbGluZy4gUGVyaGFwcyBhIHNlcXVlbmNlIG51bWJlciB0b28sIGRlcGVuZGluZyBvbiB0aGUgbmVlZCBmb3IgcmVsaWFibGUgZGVsaXZlcnkuIEknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIG92ZXJhbGwgc2l6ZSDigJMgaXQnbGwgYmUgYSBnb29kIGluZGljYXRvciBvZiB0aGUgZXhwZWN0ZWQgY29tcGxleGl0eSBvZiB0aGUgdHJhbnNwb3J0IHByb3RvY29sIGJ1aWx0IG9uIHRvcC4gTGV0J3Mgc2VlIGlmIHRoZSBsYXlvdXQgaXMgbmF0dXJhbGx5IGFsaWduZWQgb3IgaWYgd2UgbmVlZCB0byBiZSBtaW5kZnVsIG9mIHBhZGRpbmcgaXNzdWVzIGR1cmluZyByZWFkL3dyaXRlIG9wZXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhpcyBiYXNlbGluZSBpcyBjcnVjaWFsIGJlZm9yZSBkaWdnaW5nIGludG8gYW55IG9mIHRoZSBtb3JlIGFkdmFuY2VkIGZlYXR1cmVzIG9yIHJldmlzaW9ucy4gSSB3YW50IHRvIGJ1aWxkIGEgcXVpY2sgcGljdHVyZSBvZiBob3cgdGhpcyBoZWFkZXIgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc3MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMyOjIzLjUyNTk5MTY2NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzksXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzk6XFx0ICovXFxuICA0MDpcXHRzdHJ1Y3QgcXJ0cl9oZHJfdjEge1xcbiAgNDE6XFx0XFx0X19sZTMyIHZlcnNpb247XFxuICA0MjpcXHRcXHRfX2xlMzIgdHlwZTtcXG4gIDQzOlxcdFxcdF9fbGUzMiBzcmNfbm9kZV9pZDtcXG4gIDQ0OlxcdFxcdF9fbGUzMiBzcmNfcG9ydF9pZDtcXG4gIDQ1OlxcdFxcdF9fbGUzMiBjb25maXJtX3J4O1xcbiAgNDY6XFx0XFx0X19sZTMyIHNpemU7XFxuICA0NzpcXHRcXHRfX2xlMzIgZHN0X25vZGVfaWQ7XFxuICA0ODpcXHRcXHRfX2xlMzIgZHN0X3BvcnRfaWQ7XFxuICA0OTpcXHR9IF9fcGFja2VkO1xcbiAgNTA6XFx0XFxuICA1MTpcXHQvKipcXG4gIDUyOlxcdCAqIHN0cnVjdCBxcnRyX2hkcl92MiAtIChJfFIpUENyb3V0ZXIgcGFja2V0IGhlYWRlciBsYXRlciB2ZXJzaW9uc1xcbiAgNTM6XFx0ICogQHZlcnNpb246IHByb3RvY29sIHZlcnNpb25cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzI6MjMuNTI2MDc3NzE0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODgyMzExNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBIRUxMTyBQYWNrZXQgVHJhbnNpdGlvbiBhbmQgVW5pbml0aWFsaXplZCBNZW1vcnkgQ2hlY2tzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHByaW1hcmlseSByZWZhY3RvcnMgdGhlIEhFTExPIHBhY2tldCB0cmFuc21pc3Npb24gbG9naWMgd2l0aGluIHRoZSBRUlRSIHN1YnN5c3RlbSwgbW92aW5nIGl0IGZyb20gYSBuYW1lc2VydmljZS1iYXNlZCBga2VybmVsX3NlbmRtc2dgIGFwcHJvYWNoIHRvIGEgbW9yZSBkaXJlY3QgYHNrYmAgYWxsb2NhdGlvbiBhbmQgZW5xdWV1ZWluZyBzdHJhdGVneSB3aXRoaW4gdGhlIGNvcmUgbmV0d29yayBsYXllci4gVGhpcyBzZWVtcyByZWFzb25hYmxlOyBlbGltaW5hdGluZyB0aGF0IGtlcm5lbCBzcGFjZSBzb2NrZXQgY2FsbCBpcyBwcm9iYWJseSBhIGdvb2QgdGhpbmcuXG5cblRoZSBmaXJzdCB0aGluZyBJIHplcm9lZCBpbiBvbiB3YXMgdGhlIHBvdGVudGlhbCBmb3IgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIE15IGluaXRpYWwgY29uY2VybiB3YXMgaW4gYHFydHJfbm9kZV9lbnF1ZXVlYCwgZ2l2ZW4gaXRzIG1hbmlwdWxhdGlvbiBvZiB0aGUgYHNrX2J1ZmZgIGFuZCB0aGUgcG90ZW50aWFsIGZvciBuZXcgZGF0YSBiZWluZyBwcmVzZW50IG9uIHRoZSB3aXJlLiBIb3dldmVyLCBJIGNvbmZpcm1lZCB0aGF0IHRoZSBoZWFkZXIgKGBzdHJ1Y3QgcXJ0cl9oZHJfdjFgKSBpcyAqZnVsbHkqIGluaXRpYWxpemVkLiBFYWNoIGZpZWxk4oCUdmVyc2lvbiwgdHlwZSwgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBub2RlL3BvcnQgSURzLCBzaXplLCBhbmQgY29uZmlybV9yeOKAlGlzIGV4cGxpY2l0bHkgc2V0IHVzaW5nIGBjcHVfdG9fbGUzMmAuIFRoZSBgc2tiX3B1dF9wYWR0b2AgY2FsbCBpcyBwcmVzZW50LCB3aGljaCBlbnN1cmVzIHRoYXQgYW55IHBhZGRpbmcgYWRkZWQgdG8gdGhlIGBza2JgIGlzIHplcm9lZCBvdXQsIHByZXZlbnRpbmcgYW55IGxlYWtzLiBUaGlzIGlzIHZpdGFsLlxuXG5UaGVuLCBJIGxvb2tlZCBhdCB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgSEVMTE8gcGFja2V0IGl0c2VsZi4gVGhlIHVzZSBvZiBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgaXMga2V5IGhlcmUuIEl0IHVzZXMgYHNrYl9wdXRfemVyb2AsIHdoaWNoIG1lYW5zIHRoZSBlbnRpcmUgY29udHJvbCBwYWNrZXQgcGF5bG9hZCBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm9lZCBvdXQgdXBvbiBhbGxvY2F0aW9uLiBUaGlzIGVsaW1pbmF0ZXMgYW55IHJpc2sgcmVsYXRlZCB0byB0aGUgcGF5bG9hZCBpdHNlbGYgY29udGFpbmluZyBzdGFsZSBkYXRhLiBGdXJ0aGVybW9yZSwgSSB3ZW50IGJhY2sgYW5kIHJlY2hlY2tlZCwgYW5kIHRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIHZhcmlhYmxlcyBhcmUgb25seSB1c2VkIGZvciBleHRyYWN0aW5nIHNwZWNpZmljIHZhbHVlcywgbGlrZSBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCwgYW5kIG5ldmVyIGNvcGllZCBhbnl3aGVyZSB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSB3b3VsZCBiZSBleHBvc2VkLlxuXG5GdXJ0aGVybW9yZSwgdGhlIG5ldyBjb2RlIGhhcyBhbiBleHBsaWNpdCBjaGVjayBmb3IgYGhlbGxvX3NlbnRgIHdpdGhpbiB0aGUgYHFydHJfbm9kZV9lbnF1ZXVlYCBmdW5jdGlvbiB0aGF0IGFjdHMgYXMgYSBnYXRlIGZvciBuZXcgcGFja2V0cyBiZWluZyBzZW50LiBUaGlzIGlzIHJlYXNvbmFibGUuXG5cbkZpbmFsbHksIHdoaWxlIHRoZSBwYXRjaCBjaGFuZ2VzIHdoZW4gYSBIRUxMTyBwYWNrZXQgY2FuIGJlIHNlbnQgdG8gZW5zdXJlIG5vZGVzIGFyZSBhc3NpZ25lZCBub2RlIElEcywgdGhlIGFjY2VzcyB0byBgbm9kZS1cdTAwM2VuaWRgIGlzIHByb3RlY3RlZCBieSBgV1JJVEVfT05DRWAgb3IgYFJFQURfT05DRWAuXG5cbkdpdmVuIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgb3IgaW5mby1sZWFrcy4gVGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHN0cmF0ZWdpZXMgYXJlIHNvdW5kLiBBbnkgcG90ZW50aWFsIHByb2JsZW1zIGludHJvZHVjZWQgd291bGQgYmUgdGhlIHNhbWUgYXMgZXhpc3QgaW4gdGhlIGNvZGViYXNlIHRvZGF5LiBLQVNBTiBhbmQgb3RoZXIgc3VjaCB0b29scyBzaG91bGQgYmUgc3VmZmljaWVudC4gS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3OCwiT3V0cHV0VG9rZW5zIjoyMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzI6NTguNDA4MzkyNjA1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgc2VuZGluZyBvZiBRUlRSIEhFTExPIHBhY2tldHMgZnJvbSB0aGUgbmFtZXNlcnZpY2UgKHVzaW5nIGEga2VybmVsIHNvY2tldCkgdG8gdGhlIGNvcmUgbGF5ZXIgKHVzaW5nIGRpcmVjdCBza2IgYWxsb2NhdGlvbiBhbmQgZW5xdWV1ZWluZykuIFRoZSBuZXcgSEVMTE8gcGFja2V0IHBheWxvYWQgaXMgYWxsb2NhdGVkIHZpYSBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldCgpYCwgd2hpY2ggdXNlcyBgc2tiX3B1dF96ZXJvKClgIHRvIGVuc3VyZSB0aGUgbWVtb3J5IGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgcGFja2V0IGhlYWRlciBpcyBhbHNvIGV4cGxpY2l0bHkgYW5kIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgaW4gYHFydHJfbm9kZV9lbnF1ZXVlKClgLiBXaGlsZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIHZhcmlhYmxlcyBhcmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBpbiBgcXJ0cl9oZWxsb193b3JrKClgLCB0aGV5IGFyZSBvbmx5IHVzZWQgdG8gcmVhZCB0aGUgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAgZmllbGRzOyB0aGUgc3RydWN0dXJlcyB0aGVtc2VsdmVzIGFyZSBuZXZlciBjb3BpZWQgdG8gdGhlIHNrYiBvciB1c2Vyc3BhY2UsIG1lYW5pbmcgYW55IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBhcmUgc2FmZWx5IGlnbm9yZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBzZW5kaW5nIG9mIFFSVFIgSEVMTE8gcGFja2V0cyBmcm9tIHRoZSBuYW1lc2VydmljZSAodXNpbmcgYSBrZXJuZWwgc29ja2V0KSB0byB0aGUgY29yZSBsYXllciAodXNpbmcgZGlyZWN0IHNrYiBhbGxvY2F0aW9uIGFuZCBlbnF1ZXVlaW5nKS4gVGhlIG5ldyBIRUxMTyBwYWNrZXQgcGF5bG9hZCBpcyBhbGxvY2F0ZWQgdmlhIGBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KClgLCB3aGljaCB1c2VzIGBza2JfcHV0X3plcm8oKWAgdG8gZW5zdXJlIHRoZSBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBwYWNrZXQgaGVhZGVyIGlzIGFsc28gZXhwbGljaXRseSBhbmQgY29tcGxldGVseSBpbml0aWFsaXplZCBpbiBgcXJ0cl9ub2RlX2VucXVldWUoKWAuIFdoaWxlIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgdmFyaWFibGVzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGluIGBxcnRyX2hlbGxvX3dvcmsoKWAsIHRoZXkgYXJlIG9ubHkgdXNlZCB0byByZWFkIHRoZSBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBmaWVsZHM7IHRoZSBzdHJ1Y3R1cmVzIHRoZW1zZWx2ZXMgYXJlIG5ldmVyIGNvcGllZCB0byB0aGUgc2tiIG9yIHVzZXJzcGFjZSwgbWVhbmluZyBhbnkgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIGFyZSBzYWZlbHkgaWdub3JlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrntdq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 12:28:47 +0000 UTC FinishedAt: 2026-08-27 12:33:00 +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": "502d801f0ab03e4f32f9a33d203154ce84887921", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "QRTR", "QRTR_TUN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "502d801f0ab03e4f32f9a33d203154ce84887921", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "QRTR", "QRTR_TUN" ], "series_id": "d01f1395-9ca2-438c-82b3-276bcd4b372d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "qrtr_node_enqueue", "qrtr_hello_work", "qrtr_endpoint_register", "qrtr_bcast_enqueue" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1FSVFImIzM0OywKICAgICYjMzQ7UVJUUl9UVU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtxcnRyX25vZGVfZW5xdWV1ZSYjMzQ7LAogICAgJiMzNDtxcnRyX2hlbGxvX3dvcmsmIzM0OywKICAgICYjMzQ7cXJ0cl9lbmRwb2ludF9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtxcnRyX2JjYXN0X2VucXVldWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgc2VuZGluZyBvZiBRUlRSIEhFTExPIHBhY2tldHMgZnJvbSB0aGUgbmFtZXNlcnZpY2UgKHVzaW5nIGEga2VybmVsIHNvY2tldCkgdG8gdGhlIGNvcmUgbGF5ZXIgKHVzaW5nIGRpcmVjdCBza2IgYWxsb2NhdGlvbiBhbmQgZW5xdWV1ZWluZykuIFRoZSBuZXcgSEVMTE8gcGFja2V0IHBheWxvYWQgaXMgYWxsb2NhdGVkIHZpYSBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldCgpYCwgd2hpY2ggdXNlcyBgc2tiX3B1dF96ZXJvKClgIHRvIGVuc3VyZSB0aGUgbWVtb3J5IGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgcGFja2V0IGhlYWRlciBpcyBhbHNvIGV4cGxpY2l0bHkgYW5kIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgaW4gYHFydHJfbm9kZV9lbnF1ZXVlKClgLiBXaGlsZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIHZhcmlhYmxlcyBhcmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBpbiBgcXJ0cl9oZWxsb193b3JrKClgLCB0aGV5IGFyZSBvbmx5IHVzZWQgdG8gcmVhZCB0aGUgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAgZmllbGRzOyB0aGUgc3RydWN0dXJlcyB0aGVtc2VsdmVzIGFyZSBuZXZlciBjb3BpZWQgdG8gdGhlIHNrYiBvciB1c2Vyc3BhY2UsIG1lYW5pbmcgYW55IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBhcmUgc2FmZWx5IGlnbm9yZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgSEVMTE8gaGFuZHNoYWtlIGxvZ2ljIGZyb20gdGhlIHVzZXJzcGFjZS9ucyBsYXllciB0byB0aGUgY29yZSBsYXllciBpbiB0aGUgUVJUUiBzdWJzeXN0ZW0uIEl0IG1vZGlmaWVzIGNvcmUgZnVuY3Rpb25zIGxpa2UgYHFydHJfbm9kZV9lbnF1ZXVlYCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAgYW5kIGFkZHMgYSBuZXcgZGVsYXllZCB3b3JrIGBxcnRyX2hlbGxvX3dvcmtgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBRUlRSX1RVTmAgdmlydHVhbCBlbmRwb2ludCBkcml2ZXIsIHNvIGl0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4OTlkMWRjZmZkMDlhNWM3Yzc5YjYyYmI1Zjk2YjdmMjBjNWU3MmM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMTI6MzA6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvYWZfcXJ0ci5jIGIvbmV0L3FydHIvYWZfcXJ0ci5jXG5pbmRleCBkMDJlZjlhNzRjM2NhLi44ZTliMzY0NzliYWI4IDEwMDY0NFxuLS0tIGEvbmV0L3FydHIvYWZfcXJ0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcXJ0ci9hZl9xcnRyLmNcbkBAIC05LDYgJiM0Mzs5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90ZXJtaW9zLmhcdTAwM2VcdC8qIEZvciBUSU9DSU5RL09VVFEgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuIFxuQEAgLTEyMCw4ICYjNDM7MTIxLDEwIEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DKHFydHJfcG9ydHMpO1xuICAqIEBuaWQ6IG5vZGUgaWRcbiAgKiBAcXJ0cl90eF9mbG93OiB4YXJyYXkgb2YgcXJ0cl90eF9mbG93LCBrZXllZCBieSBub2RlIFx1MDAzY1x1MDAzYyAzMiB8IHBvcnRcbiAgKiBAcXJ0cl90eF9sb2NrOiBsb2NrIGZvciBxcnRyX3R4X2Zsb3cgaW5zZXJ0c1xuJiM0MzsgKiBAaGVsbG9fc2VudDogaGVsbG8gcGFja2V0IHNlbmQgc3VjY2Vzc2Z1bFxuICAqIEByeF9xdWV1ZTogcmVjZWl2ZSBxdWV1ZVxuICAqIEBpdGVtOiBsaXN0IGl0ZW0gZm9yIGJyb2FkY2FzdCBsaXN0XG4mIzQzOyAqIEBzYXlfaGVsbG86IGRlbGF5ZWQgd29yayBmb3Igc2VuZGluZyBoZWxsbyBwYWNrZXRcbiAgKi9cbiBzdHJ1Y3QgcXJ0cl9ub2RlIHtcbiBcdHN0cnVjdCBtdXRleCBlcF9sb2NrO1xuQEAgLTEzMiw4ICYjNDM7MTM1LDExIEBAIHN0cnVjdCBxcnRyX25vZGUge1xuIFx0c3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7XG4gXHRzdHJ1Y3QgbXV0ZXggcXJ0cl90eF9sb2NrOyAvKiBmb3IgcXJ0cl90eF9mbG93ICovXG4gXG4mIzQzO1x0Ym9vbCBoZWxsb19zZW50O1xuJiM0MztcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgcnhfcXVldWU7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGl0ZW07XG4mIzQzO1x0c3RydWN0IGRlbGF5ZWRfd29yayBzYXlfaGVsbG87XG4gfTtcbiBcbiAvKipcbkBAIC0xODcsNiAmIzQzOzE5Myw4IEBAIHN0YXRpYyB2b2lkIF9fcXJ0cl9ub2RlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXG4gXHRsaXN0X2RlbChcdTAwMjZub2RlLVx1MDAzZWl0ZW0pO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnFydHJfbm9kZV9sb2NrKTtcbiBcbiYjNDM7XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8pO1xuJiM0MztcbiBcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZub2RlLVx1MDAzZXJ4X3F1ZXVlKTtcbiBcbiBcdC8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqL1xuQEAgLTM0MSw2ICYjNDM7MzQ5LDE0IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHNpemVfdCBsZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0aW50IHJjLCBjb25maXJtX3J4O1xuIFxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bm9kZS1cdTAwM2VlcF9sb2NrKTtcbiYjNDM7XHRpZiAoIW5vZGUtXHUwMDNlaGVsbG9fc2VudCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4mIzQzO1xuIFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0LCB0eXBlKTtcbiBcdGlmIChjb25maXJtX3J4IFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTM1Myw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aGRyLVx1MDAzZXNyY19ub2RlX2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cdTAwM2VzcV9ub2RlKTtcbiBcdGhkci1cdTAwM2VzcmNfcG9ydF9pZCA9IGNwdV90b19sZTMyKGZyb20tXHUwMDNlc3FfcG9ydCk7XG4gXHRpZiAodG8tXHUwMDNlc3FfcG9ydCA9PSBRUlRSX1BPUlRfQ1RSTCkge1xuLVx0XHRoZHItXHUwMDNlZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMihub2RlLVx1MDAzZW5pZCk7XG4mIzQzO1x0XHRoZHItXHUwMDNlZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMihSRUFEX09OQ0Uobm9kZS1cdTAwM2VuaWQpKTtcbiBcdFx0aGRyLVx1MDAzZWRzdF9wb3J0X2lkID0gY3B1X3RvX2xlMzIoUVJUUl9QT1JUX0NUUkwpO1xuIFx0fSBlbHNlIHtcbiBcdFx0aGRyLVx1MDAzZWRzdF9ub2RlX2lkID0gY3B1X3RvX2xlMzIodG8tXHUwMDNlc3Ffbm9kZSk7XG5AQCAtMzcyLDYgJiM0MzszODgsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0cmMgPSBub2RlLVx1MDAzZWVwLVx1MDAzZXhtaXQobm9kZS1cdTAwM2VlcCwgc2tiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0aWYgKCFyYyBcdTAwMjZcdTAwMjYgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pXG4mIzQzO1x0XHRcdG5vZGUtXHUwMDNlaGVsbG9fc2VudCA9IHRydWU7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIFx0fVxuIFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxuQEAgLTM3OSw2ICYjNDM7Mzk3LDkgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHJjIFx1MDAyNlx1MDAyNiBjb25maXJtX3J4KVxuIFx0XHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVx1MDAzZXNxX25vZGUsIHRvLVx1MDAzZXNxX3BvcnQpO1xuIFxuJiM0MztcdGlmIChyYyA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcbiYjNDM7XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcbiYjNDM7XG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuQEAgLTQxNiw3ICYjNDM7NDM3LDcgQEAgc3RhdGljIHZvaWQgcXJ0cl9ub2RlX2Fzc2lnbihzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgbmlkKVxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cXJ0cl9ub2Rlc19sb2NrLCBmbGFncyk7XG4gXHRyYWRpeF90cmVlX2luc2VydChcdTAwMjZxcnRyX25vZGVzLCBuaWQsIG5vZGUpO1xuIFx0aWYgKG5vZGUtXHUwMDNlbmlkID09IFFSVFJfRVBfTklEX0FVVE8pXG4tXHRcdG5vZGUtXHUwMDNlbmlkID0gbmlkO1xuJiM0MztcdFx0V1JJVEVfT05DRShub2RlLVx1MDAzZW5pZCwgbmlkKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cXJ0cl9ub2Rlc19sb2NrLCBmbGFncyk7XG4gfVxuIFxuQEAgLTU3MCw2ICYjNDM7NTkxLDM4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCxcbiBcdHJldHVybiBza2I7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBxcnRyX2hlbGxvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX3FydHIgZnJvbSA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX3FydHIgdG8gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9O1xuJiM0MztcdHN0cnVjdCBxcnRyX2N0cmxfcGt0ICpwa3Q7XG4mIzQzO1x0c3RydWN0IHFydHJfbm9kZSAqbm9kZTtcbiYjNDM7XHRzdHJ1Y3QgcXJ0cl9zb2NrICpjdHJsO1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1xuJiM0MztcdG5vZGUgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcXJ0cl9ub2RlLCBzYXlfaGVsbG8pO1xuJiM0MztcbiYjNDM7XHQvKiBOUyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB3ZSBjYW4gc2VuZDsgcmV0cnkgd2l0aCBiYWNrb2ZmIGlmIG5vdCByZWFkeSAqL1xuJiM0MztcdGN0cmwgPSBxcnRyX3BvcnRfbG9va3VwKFFSVFJfUE9SVF9DVFJMKTtcbiYjNDM7XHRpZiAoIWN0cmwpIHtcbiYjNDM7XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoXHUwMDI2cGt0LCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXNrYikge1xuJiM0MztcdFx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcbiYjNDM7XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBrdC1cdTAwM2VjbWQgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfSEVMTE8pO1xuJiM0MztcdGZyb20uc3Ffbm9kZSA9IHFydHJfbG9jYWxfbmlkO1xuJiM0MztcdHRvLnNxX25vZGUgPSBub2RlLVx1MDAzZW5pZDtcbiYjNDM7XHRxcnRyX25vZGVfZW5xdWV1ZShub2RlLCBza2IsIFFSVFJfVFlQRV9IRUxMTywgXHUwMDI2ZnJvbSwgXHUwMDI2dG8pO1xuJiM0MztcdHFydHJfcG9ydF9wdXQoY3RybCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogcXJ0cl9lbmRwb2ludF9yZWdpc3RlcigpIC0gcmVnaXN0ZXIgYSBuZXcgZW5kcG9pbnRcbiAgKiBAZXA6IGVuZHBvaW50IHRvIHJlZ2lzdGVyXG5AQCAtNTk1LDYgJiM0Mzs2NDgsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpXG4gXHRub2RlLVx1MDAzZW5pZCA9IFFSVFJfRVBfTklEX0FVVE87XG4gXHRub2RlLVx1MDAzZWVwID0gZXA7XG4gXG4mIzQzO1x0bm9kZS1cdTAwM2VoZWxsb19zZW50ID0gZmFsc2U7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8sIHFydHJfaGVsbG9fd29yayk7XG4mIzQzO1xuIFx0eGFfaW5pdChcdTAwMjZub2RlLVx1MDAzZXFydHJfdHhfZmxvdyk7XG4gXHRtdXRleF9pbml0KFx1MDAyNm5vZGUtXHUwMDNlcXJ0cl90eF9sb2NrKTtcbiBcbkBAIC02MDUsNiAmIzQzOzY2MSw5IEBAIGludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZxcnRyX25vZGVfbG9jayk7XG4gXHRlcC1cdTAwM2Vub2RlID0gbm9kZTtcbiBcbiYjNDM7XHQvKiBJbml0aWF0ZSBIRUxMTyBoYW5kc2hha2UgZnJvbSB0aGUgY29yZSBsYXllciAqL1xuJiM0MztcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgMCk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIpO1xuQEAgLTg3OSw2ICYjNDM7OTM4LDkgQEAgc3RhdGljIGludCBxcnRyX2JjYXN0X2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2cXJ0cl9ub2RlX2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBcdTAwMjZxcnRyX2FsbF9ub2RlcywgaXRlbSkge1xuJiM0MztcdFx0LyogU2tpcCBub2RlcyB3aXRoIG5vIGFzc2lnbmVkIG5vZGUgSUQgeWV0LiAqL1xuJiM0MztcdFx0aWYgKFJFQURfT05DRShub2RlLVx1MDAzZW5pZCkgPT0gUVJUUl9FUF9OSURfQVVUTylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdHNrYm4gPSBwc2tiX2NvcHkoc2tiLCBHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFza2JuKVxuIFx0XHRcdGJyZWFrO1xuZGlmZiAtLWdpdCBhL25ldC9xcnRyL25zLmMgYi9uZXQvcXJ0ci9ucy5jXG5pbmRleCBiM2Y5YmJjZjlhYjliLi42ZDkzYmNkMjUwZTc1IDEwMDY0NFxuLS0tIGEvbmV0L3FydHIvbnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3FydHIvbnMuY1xuQEAgLTIxMiw2ICYjNDM7MjEyLDcgQEAgc3RhdGljIHZvaWQgbG9va3VwX25vdGlmeShzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8sIHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2LFxuIFx0XHRwcl9lcnIoXCYjMzQ7ZmFpbGVkIHRvIHNlbmQgbG9va3VwIG5vdGlmaWNhdGlvblxcblwmIzM0Oyk7XG4gfVxuIFxuJiM0MzsvKiBBbm5vdW5jZSB0aGUgbGlzdCBvZiBzZXJ2ZXJzIHJlZ2lzdGVyZWQgb24gdGhlIGxvY2FsIG5vZGUgKi9cbiBzdGF0aWMgaW50IGFubm91bmNlX3NlcnZlcnMoc3RydWN0IHNvY2thZGRyX3FydHIgKnNxKVxuIHtcbiBcdHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2O1xuQEAgLTMyNiwzOCAmIzQzOzMyNyw4IEBAIHN0YXRpYyBpbnQgc2VydmVyX2RlbChzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgcG9ydCwgYm9vbCBiY2FzdClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNheV9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZGVzdClcbi17XG4tXHRzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCBwa3Q7XG4tXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsgfTtcbi1cdHN0cnVjdCBrdmVjIGl2O1xuLVx0aW50IHJldDtcbi1cbi1cdGl2Lmlvdl9iYXNlID0gXHUwMDI2cGt0O1xuLVx0aXYuaW92X2xlbiA9IHNpemVvZihwa3QpO1xuLVxuLVx0bWVtc2V0KFx1MDAyNnBrdCwgMCwgc2l6ZW9mKHBrdCkpO1xuLVx0cGt0LmNtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9IRUxMTyk7XG4tXG4tXHRtc2cubXNnX25hbWUgPSAoc3RydWN0IHNvY2thZGRyICopZGVzdDtcbi1cdG1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZigqZGVzdCk7XG4tXG4tXHRyZXQgPSBrZXJuZWxfc2VuZG1zZyhxcnRyX25zLnNvY2ssIFx1MDAyNm1zZywgXHUwMDI2aXYsIDEsIHNpemVvZihwa3QpKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gc2VuZCBoZWxsbyBtc2dcXG5cJiMzNDspO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovXG4gc3RhdGljIGludCBjdHJsX2NtZF9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXG4ge1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHNheV9oZWxsbyhzcSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0cmV0dXJuIGFubm91bmNlX3NlcnZlcnMoc3EpO1xuIH1cbiBcbkBAIC03NzQsMTAgJiM0Mzs3NDUsNiBAQCBpbnQgcXJ0cl9uc19pbml0KHZvaWQpXG4gXHRxcnRyX25zLmJjYXN0X3NxLnNxX25vZGUgPSBRUlRSX05PREVfQkNBU1Q7XG4gXHRxcnRyX25zLmJjYXN0X3NxLnNxX3BvcnQgPSBRUlRSX1BPUlRfQ1RSTDtcbiBcbi1cdHJldCA9IHNheV9oZWxsbyhcdTAwMjZxcnRyX25zLmJjYXN0X3NxKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZXJyX3dxO1xuLVxuIFx0LyogQXMgdGhlIHFydHIgbnMgc29ja2V0IG93bmVyIGFuZCBjcmVhdG9yIGlzIHRoZSBzYW1lIG1vZHVsZSwgd2UgaGF2ZVxuIFx0ICogdG8gZGVjcmVhc2UgdGhlIHFydHIgbW9kdWxlIHJlZmVyZW5jZSBjb3VudCB0byBndWFyYW50ZWUgdGhhdCBpdFxuIFx0ICogcmVtYWlucyB6ZXJvIGFmdGVyIHRoZSBucyBzb2NrZXQgaXMgY3JlYXRlZCwgb3RoZXJ3aXNlLCBleGVjdXRpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UVJUUiYjMzQ7LAogICAgJiMzNDtRUlRSX1RVTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3FydHJfbm9kZV9lbnF1ZXVlJiMzNDssCiAgICAmIzM0O3FydHJfaGVsbG9fd29yayYjMzQ7LAogICAgJiMzNDtxcnRyX2VuZHBvaW50X3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3FydHJfYmNhc3RfZW5xdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgSEVMTE8gaGFuZHNoYWtlIGxvZ2ljIGZyb20gdGhlIHVzZXJzcGFjZS9ucyBsYXllciB0byB0aGUgY29yZSBsYXllciBpbiB0aGUgUVJUUiBzdWJzeXN0ZW0uIEl0IG1vZGlmaWVzIGNvcmUgZnVuY3Rpb25zIGxpa2UgYHFydHJfbm9kZV9lbnF1ZXVlYCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAgYW5kIGFkZHMgYSBuZXcgZGVsYXllZCB3b3JrIGBxcnRyX2hlbGxvX3dvcmtgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBRUlRSX1RVTmAgdmlydHVhbCBlbmRwb2ludCBkcml2ZXIsIHNvIGl0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4OTlkMWRjZmZkMDlhNWM3Yzc5YjYyYmI1Zjk2YjdmMjBjNWU3MmM0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMTI6MzA6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9hZl9xcnRyLmMgYi9uZXQvcXJ0ci9hZl9xcnRyLmMKaW5kZXggZDAyZWY5YTc0YzNjYS4uOGU5YjM2NDc5YmFiOCAxMDA2NDQKLS0tIGEvbmV0L3FydHIvYWZfcXJ0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9xcnRyL2FmX3FydHIuYwpAQCAtOSw2ICYjNDM7OSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdGVybWlvcy5oJmd0OwkvKiBGb3IgVElPQ0lOUS9PVVRRICovCiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2suaCZndDsKIApAQCAtMTIwLDggJiM0MzsxMjEsMTAgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MocXJ0cl9wb3J0cyk7CiAgKiBAbmlkOiBub2RlIGlkCiAgKiBAcXJ0cl90eF9mbG93OiB4YXJyYXkgb2YgcXJ0cl90eF9mbG93LCBrZXllZCBieSBub2RlICZsdDsmbHQ7IDMyIHwgcG9ydAogICogQHFydHJfdHhfbG9jazogbG9jayBmb3IgcXJ0cl90eF9mbG93IGluc2VydHMKJiM0MzsgKiBAaGVsbG9fc2VudDogaGVsbG8gcGFja2V0IHNlbmQgc3VjY2Vzc2Z1bAogICogQHJ4X3F1ZXVlOiByZWNlaXZlIHF1ZXVlCiAgKiBAaXRlbTogbGlzdCBpdGVtIGZvciBicm9hZGNhc3QgbGlzdAomIzQzOyAqIEBzYXlfaGVsbG86IGRlbGF5ZWQgd29yayBmb3Igc2VuZGluZyBoZWxsbyBwYWNrZXQKICAqLwogc3RydWN0IHFydHJfbm9kZSB7CiAJc3RydWN0IG11dGV4IGVwX2xvY2s7CkBAIC0xMzIsOCAmIzQzOzEzNSwxMSBAQCBzdHJ1Y3QgcXJ0cl9ub2RlIHsKIAlzdHJ1Y3QgeGFycmF5IHFydHJfdHhfZmxvdzsKIAlzdHJ1Y3QgbXV0ZXggcXJ0cl90eF9sb2NrOyAvKiBmb3IgcXJ0cl90eF9mbG93ICovCiAKJiM0MzsJYm9vbCBoZWxsb19zZW50OwomIzQzOwogCXN0cnVjdCBza19idWZmX2hlYWQgcnhfcXVldWU7CiAJc3RydWN0IGxpc3RfaGVhZCBpdGVtOwomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIHNheV9oZWxsbzsKIH07CiAKIC8qKgpAQCAtMTg3LDYgJiM0MzsxOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3FydHJfbm9kZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQogCWxpc3RfZGVsKCZhbXA7bm9kZS0mZ3Q7aXRlbSk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cXJ0cl9ub2RlX2xvY2spOwogCiYjNDM7CWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO25vZGUtJmd0O3NheV9oZWxsbyk7CiYjNDM7CiAJc2tiX3F1ZXVlX3B1cmdlKCZhbXA7bm9kZS0mZ3Q7cnhfcXVldWUpOwogCiAJLyogRnJlZSB0eCBmbG93IGNvdW50ZXJzICovCkBAIC0zNDEsNiAmIzQzOzM0OSwxNCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsCiAJc2l6ZV90IGxlbiA9IHNrYi0mZ3Q7bGVuOwogCWludCByYywgY29uZmlybV9yeDsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7bm9kZS0mZ3Q7ZXBfbG9jayk7CiYjNDM7CWlmICghbm9kZS0mZ3Q7aGVsbG9fc2VudCAmYW1wOyZhbXA7IHR5cGUgIT0gUVJUUl9UWVBFX0hFTExPKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtub2RlLSZndDtlcF9sb2NrKTsKJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bm9kZS0mZ3Q7ZXBfbG9jayk7CiYjNDM7CiAJY29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by0mZ3Q7c3Ffbm9kZSwgdG8tJmd0O3NxX3BvcnQsIHR5cGUpOwogCWlmIChjb25maXJtX3J4ICZsdDsgMCkgewogCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTM1Myw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWhkci0mZ3Q7c3JjX25vZGVfaWQgPSBjcHVfdG9fbGUzMihmcm9tLSZndDtzcV9ub2RlKTsKIAloZHItJmd0O3NyY19wb3J0X2lkID0gY3B1X3RvX2xlMzIoZnJvbS0mZ3Q7c3FfcG9ydCk7CiAJaWYgKHRvLSZndDtzcV9wb3J0ID09IFFSVFJfUE9SVF9DVFJMKSB7Ci0JCWhkci0mZ3Q7ZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMihub2RlLSZndDtuaWQpOwomIzQzOwkJaGRyLSZndDtkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKFJFQURfT05DRShub2RlLSZndDtuaWQpKTsKIAkJaGRyLSZndDtkc3RfcG9ydF9pZCA9IGNwdV90b19sZTMyKFFSVFJfUE9SVF9DVFJMKTsKIAl9IGVsc2UgewogCQloZHItJmd0O2RzdF9ub2RlX2lkID0gY3B1X3RvX2xlMzIodG8tJmd0O3NxX25vZGUpOwpAQCAtMzcyLDYgJiM0MzszODgsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQlyYyA9IG5vZGUtJmd0O2VwLSZndDt4bWl0KG5vZGUtJmd0O2VwLCBza2IpOwogCQllbHNlCiAJCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWlmICghcmMgJmFtcDsmYW1wOyB0eXBlID09IFFSVFJfVFlQRV9IRUxMTykKJiM0MzsJCQlub2RlLSZndDtoZWxsb19zZW50ID0gdHJ1ZTsKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7bm9kZS0mZ3Q7ZXBfbG9jayk7CiAJfQogCS8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3QKQEAgLTM3OSw2ICYjNDM7Mzk3LDkgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChyYyAmYW1wOyZhbXA7IGNvbmZpcm1fcngpCiAJCXFydHJfdHhfZmxvd19mYWlsZWQobm9kZSwgdG8tJmd0O3NxX25vZGUsIHRvLSZndDtzcV9wb3J0KTsKIAomIzQzOwlpZiAocmMgPT0gLUVBR0FJTiAmYW1wOyZhbXA7IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKQomIzQzOwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bm9kZS0mZ3Q7c2F5X2hlbGxvLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwomIzQzOwogCXJldHVybiByYzsKIH0KIApAQCAtNDE2LDcgJiM0Mzs0MzcsNyBAQCBzdGF0aWMgdm9pZCBxcnRyX25vZGVfYXNzaWduKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBuaWQpCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtxcnRyX25vZGVzX2xvY2ssIGZsYWdzKTsKIAlyYWRpeF90cmVlX2luc2VydCgmYW1wO3FydHJfbm9kZXMsIG5pZCwgbm9kZSk7CiAJaWYgKG5vZGUtJmd0O25pZCA9PSBRUlRSX0VQX05JRF9BVVRPKQotCQlub2RlLSZndDtuaWQgPSBuaWQ7CiYjNDM7CQlXUklURV9PTkNFKG5vZGUtJmd0O25pZCwgbmlkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cXJ0cl9ub2Rlc19sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTU3MCw2ICYjNDM7NTkxLDM4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCwKIAlyZXR1cm4gc2tiOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9xcnRyIGZyb20gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9OwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciB0byA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07CiYjNDM7CXN0cnVjdCBxcnRyX2N0cmxfcGt0ICpwa3Q7CiYjNDM7CXN0cnVjdCBxcnRyX25vZGUgKm5vZGU7CiYjNDM7CXN0cnVjdCBxcnRyX3NvY2sgKmN0cmw7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CiYjNDM7CW5vZGUgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcXJ0cl9ub2RlLCBzYXlfaGVsbG8pOwomIzQzOwomIzQzOwkvKiBOUyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB3ZSBjYW4gc2VuZDsgcmV0cnkgd2l0aCBiYWNrb2ZmIGlmIG5vdCByZWFkeSAqLwomIzQzOwljdHJsID0gcXJ0cl9wb3J0X2xvb2t1cChRUlRSX1BPUlRfQ1RSTCk7CiYjNDM7CWlmICghY3RybCkgewomIzQzOwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bm9kZS0mZ3Q7c2F5X2hlbGxvLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoJmFtcDtwa3QsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXNrYikgewomIzQzOwkJcXJ0cl9wb3J0X3B1dChjdHJsKTsKJiM0MzsJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO25vZGUtJmd0O3NheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlwa3QtJmd0O2NtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9IRUxMTyk7CiYjNDM7CWZyb20uc3Ffbm9kZSA9IHFydHJfbG9jYWxfbmlkOwomIzQzOwl0by5zcV9ub2RlID0gbm9kZS0mZ3Q7bmlkOwomIzQzOwlxcnRyX25vZGVfZW5xdWV1ZShub2RlLCBza2IsIFFSVFJfVFlQRV9IRUxMTywgJmFtcDtmcm9tLCAmYW1wO3RvKTsKJiM0MzsJcXJ0cl9wb3J0X3B1dChjdHJsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGEgbmV3IGVuZHBvaW50CiAgKiBAZXA6IGVuZHBvaW50IHRvIHJlZ2lzdGVyCkBAIC01OTUsNiAmIzQzOzY0OCw5IEBAIGludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZCkKIAlub2RlLSZndDtuaWQgPSBRUlRSX0VQX05JRF9BVVRPOwogCW5vZGUtJmd0O2VwID0gZXA7CiAKJiM0MzsJbm9kZS0mZ3Q7aGVsbG9fc2VudCA9IGZhbHNlOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO25vZGUtJmd0O3NheV9oZWxsbywgcXJ0cl9oZWxsb193b3JrKTsKJiM0MzsKIAl4YV9pbml0KCZhbXA7bm9kZS0mZ3Q7cXJ0cl90eF9mbG93KTsKIAltdXRleF9pbml0KCZhbXA7bm9kZS0mZ3Q7cXJ0cl90eF9sb2NrKTsKIApAQCAtNjA1LDYgJiM0Mzs2NjEsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpCiAJbXV0ZXhfdW5sb2NrKCZhbXA7cXJ0cl9ub2RlX2xvY2spOwogCWVwLSZndDtub2RlID0gbm9kZTsKIAomIzQzOwkvKiBJbml0aWF0ZSBIRUxMTyBoYW5kc2hha2UgZnJvbSB0aGUgY29yZSBsYXllciAqLwomIzQzOwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtub2RlLSZndDtzYXlfaGVsbG8sIDApOwomIzQzOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocXJ0cl9lbmRwb2ludF9yZWdpc3Rlcik7CkBAIC04NzksNiAmIzQzOzkzOCw5IEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsCiAKIAltdXRleF9sb2NrKCZhbXA7cXJ0cl9ub2RlX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJmFtcDtxcnRyX2FsbF9ub2RlcywgaXRlbSkgewomIzQzOwkJLyogU2tpcCBub2RlcyB3aXRoIG5vIGFzc2lnbmVkIG5vZGUgSUQgeWV0LiAqLwomIzQzOwkJaWYgKFJFQURfT05DRShub2RlLSZndDtuaWQpID09IFFSVFJfRVBfTklEX0FVVE8pCiYjNDM7CQkJY29udGludWU7CiAJCXNrYm4gPSBwc2tiX2NvcHkoc2tiLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFza2JuKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuYwppbmRleCBiM2Y5YmJjZjlhYjliLi42ZDkzYmNkMjUwZTc1IDEwMDY0NAotLS0gYS9uZXQvcXJ0ci9ucy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9xcnRyL25zLmMKQEAgLTIxMiw2ICYjNDM7MjEyLDcgQEAgc3RhdGljIHZvaWQgbG9va3VwX25vdGlmeShzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8sIHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2LAogCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gc2VuZCBsb29rdXAgbm90aWZpY2F0aW9uXG4mIzM0Oyk7CiB9CiAKJiM0MzsvKiBBbm5vdW5jZSB0aGUgbGlzdCBvZiBzZXJ2ZXJzIHJlZ2lzdGVyZWQgb24gdGhlIGxvY2FsIG5vZGUgKi8KIHN0YXRpYyBpbnQgYW5ub3VuY2Vfc2VydmVycyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpCiB7CiAJc3RydWN0IHFydHJfc2VydmVyICpzcnY7CkBAIC0zMjYsMzggJiM0MzszMjcsOCBAQCBzdGF0aWMgaW50IHNlcnZlcl9kZWwoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgYmNhc3QpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2F5X2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0KQotewotCXN0cnVjdCBxcnRyX2N0cmxfcGt0IHBrdDsKLQlzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsgfTsKLQlzdHJ1Y3Qga3ZlYyBpdjsKLQlpbnQgcmV0OwotCi0JaXYuaW92X2Jhc2UgPSAmYW1wO3BrdDsKLQlpdi5pb3ZfbGVuID0gc2l6ZW9mKHBrdCk7Ci0KLQltZW1zZXQoJmFtcDtwa3QsIDAsIHNpemVvZihwa3QpKTsKLQlwa3QuY21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTsKLQotCW1zZy5tc2dfbmFtZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKilkZXN0OwotCW1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZigqZGVzdCk7Ci0KLQlyZXQgPSBrZXJuZWxfc2VuZG1zZyhxcnRyX25zLnNvY2ssICZhbXA7bXNnLCAmYW1wO2l2LCAxLCBzaXplb2YocGt0KSk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXByX2VycigmIzM0O2ZhaWxlZCB0byBzZW5kIGhlbGxvIG1zZ1xuJiMzNDspOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovCiBzdGF0aWMgaW50IGN0cmxfY21kX2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2F5X2hlbGxvKHNxKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKLQogCXJldHVybiBhbm5vdW5jZV9zZXJ2ZXJzKHNxKTsKIH0KIApAQCAtNzc0LDEwICYjNDM7NzQ1LDYgQEAgaW50IHFydHJfbnNfaW5pdCh2b2lkKQogCXFydHJfbnMuYmNhc3Rfc3Euc3Ffbm9kZSA9IFFSVFJfTk9ERV9CQ0FTVDsKIAlxcnRyX25zLmJjYXN0X3NxLnNxX3BvcnQgPSBRUlRSX1BPUlRfQ1RSTDsKIAotCXJldCA9IHNheV9oZWxsbygmYW1wO3FydHJfbnMuYmNhc3Rfc3EpOwotCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIGVycl93cTsKLQogCS8qIEFzIHRoZSBxcnRyIG5zIHNvY2tldCBvd25lciBhbmQgY3JlYXRvciBpcyB0aGUgc2FtZSBtb2R1bGUsIHdlIGhhdmUKIAkgKiB0byBkZWNyZWFzZSB0aGUgcXJ0ciBtb2R1bGUgcmVmZXJlbmNlIGNvdW50IHRvIGd1YXJhbnRlZSB0aGF0IGl0CiAJICogcmVtYWlucyB6ZXJvIGFmdGVyIHRoZSBucyBzb2NrZXQgaXMgY3JlYXRlZCwgb3RoZXJ3aXNlLCBleGVjdXRpbmcKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1OAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFFSVFIgSEVMTE8gSGFuZHNoYWtlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgUVJUUiBzdWJzeXN0ZW0g4oCTIHNlZW1zIGxpa2UgYSByZWZhY3RvcmluZyBlZmZvcnQsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIEhFTExPIGhhbmRzaGFrZSBsb2dpYy4gVGhlIGNvcmUgaWRlYSBpcyB0byBtb3ZlIHRoZSBoYW5kc2hha2UgZnJvbSB0aGUgbmFtZXNwYWNlIGxheWVyIChgbnMuY2ApIGludG8gdGhlIGNvcmUgKGBhZl9xcnRyLmNgKS4gVGhhdCYjMzk7cyBnZW5lcmFsbHkgYSBnb29kIG1vdmU7IGNlbnRyYWxpemluZyBjb3JlIGZ1bmN0aW9uYWxpdHkgb2Z0ZW4gbGVhZHMgdG8gY2xlYW5lciBjb2RlIGFuZCBzaW1wbGlmaWVzIG1haW50ZW5hbmNlLgoKVGhlIGFkZGl0aW9uIG9mIGBoZWxsb19zZW50YCBhbmQgdGhlIGRlbGF5ZWQgd29yayBgc2F5X2hlbGxvYCB0byB0aGUgYHFydHJfbm9kZWAgc3RydWN0dXJlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gV2UmIzM5O3JlIGVmZmVjdGl2ZWx5IHRyYWNraW5nIHRoZSBoYW5kc2hha2Ugc3RhdGUgYW5kIGRlbGF5aW5nIHRoZSBIRUxMTyBtZXNzYWdlIHRvIGF2b2lkIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGVuZHBvaW50IHJlZ2lzdHJhdGlvbiDigJMgbWFrZXMgc2Vuc2UuIEFuZCB0aGUgY2hhbmdlcyB0byBgcXJ0cl9ub2RlX2VucXVldWVgIHRvIGRyb3Agbm9uLUhFTExPIHBhY2tldHMgaWYgYGhlbGxvX3NlbnRgIGlzIGZhbHNlLCB0aGF0JiMzOTtzIGNydWNpYWwgZm9yIGVuZm9yY2luZyB0aGUgaGFuZHNoYWtlIG9yZGVyIGFuZCBwcmV2ZW50aW5nIHBvdGVudGlhbGx5IG1hbGljaW91cyBvciBtYWxmb3JtZWQgcGFja2V0cyBmcm9tIGJlaW5nIHByb2Nlc3NlZCBwcmVtYXR1cmVseS4gRW5mb3JjaW5nIHRoaXMgZmxvdyBpcyBhIHNlY3VyaXR5IGJlc3QgcHJhY3RpY2UuCgpUaGUgc2NoZWR1bGluZyBvZiBgc2F5X2hlbGxvYCBvbiBlbmRwb2ludCByZWdpc3RyYXRpb24gbG9va3MgY2xlYW4gYW5kIGxvZ2ljYWwsIGVuc3VyaW5nIHRoZSBoYW5kc2hha2UgaXMgaW5pdGlhdGVkIGFzIHNvb24gYXMgYSBuZXcgZW5kcG9pbnQgYmVjb21lcyBhY3RpdmUuIEFsc28sIHRoZSBtb2RpZmljYXRpb24gdG8gYHFydHJfYmNhc3RfZW5xdWV1ZWAgdG8gc2tpcCBub2RlcyB3aXRoIGBRUlRSX0VQX05JRF9BVVRPYC4uLiB5ZWFoLCBJIGNhbiBzZWUgdGhlIHJlYXNvbmluZy4gVGhvc2UgYXJlIGxpa2VseSBhdXRvLWFzc2lnbmVkIG5vZGUgSURzIGFuZCBpdCBtYWtlcyBzZW5zZSB0byBhdm9pZCBicm9hZGNhc3RpbmcgdG8gdGhlbSBkdXJpbmcgdGhlIEhFTExPIHBoYXNlIHRvIGF2b2lkIHVubmVjZXNzYXJ5IG5vaXNlIGFuZCBwcm9jZXNzaW5nLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEkgbmVlZCB0byB2ZXJpZnkgcmVhY2hhYmlsaXR5IGFuZCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gUVJUUiBpcyB0aGUgUXVhbGNvbW0gSVBDIFJvdXRlciDigJMgc28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgUVJUUi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBiZSBzdXJlIHRoaXMgcmVmYWN0b3JpbmcgaXMgYWN0dWFsbHkgZXhlcmNpc2VkIGluIGFueSBvZiBvdXIgY29tbW9uIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRvIHNvbWUgc2VhcmNoaW5nLCBwcm9iYWJseSBzdGFydGluZyB3aXRoIGBRUlRSYCBhbmQgc2VlaW5nIHdoYXQgSSBjYW4gZmluZC4gVW5kZXJzdGFuZGluZyB0aGUgcmVsZXZhbnQgYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCB3aGV0aGVyIHRoaXMgbG9naWMgaXMgY29tbW9ubHkgdXNlZCBpcyBjcml0aWNhbCB0byBldmFsdWF0aW5nIHRoZSBpbXBhY3QgYW5kIHBvdGVudGlhbCByaXNrIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBRUlRSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9xcnRyL0tjb25maWctNC1cbm5ldC9xcnRyL0tjb25maWc6NTpjb25maWcgUVJUUlxubmV0L3FydHIvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gSVBDIFJvdXRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3FydHIvS2NvbmZpZz0xNT1pZiBRUlRSXG5uZXQvcXJ0ci9LY29uZmlnLTE2LVxubmV0L3FydHIvS2NvbmZpZzoxNzpjb25maWcgUVJUUl9TTURcbm5ldC9xcnRyL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtTTUQgSVBDIFJvdXRlciBjaGFubmVsc1wmIzM0O1xuLS1cbm5ldC9xcnRyL0tjb25maWctMjMtXG5uZXQvcXJ0ci9LY29uZmlnOjI0OmNvbmZpZyBRUlRSX1RVTlxubmV0L3FydHIvS2NvbmZpZy0yNS1cdHRyaXN0YXRlIFwmIzM0O1RVTiBkZXZpY2UgZm9yIFF1YWxjb21tIElQQyBSb3V0ZXJcJiMzNDtcbi0tXG5uZXQvcXJ0ci9LY29uZmlnLTMwLVxubmV0L3FydHIvS2NvbmZpZzozMTpjb25maWcgUVJUUl9NSElcbm5ldC9xcnRyL0tjb25maWctMzItXHR0cmlzdGF0ZSBcJiMzNDtNSEkgSVBDIFJvdXRlciBjaGFubmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NDEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFFSVFIgYW5kIFZpcnR1YWxpemF0aW9uKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIEkmIzM5O20gZGVhbGluZyB3aXRoIGlzIGBRUlRSYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIEkgYWN0dWFsbHkgKnVzZSogdGhpcyBpbiBhIHZpcnR1YWxpemVkIHNldHVwPyYjMzQ7LiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwgd2F5cyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMuIFRoZW4sIGJvb20sIGl0IGNsaWNrczogYFFSVFJfVFVOYCEgVGhhdCYjMzk7cyB0aGUgc29sdXRpb24uIEl0IHByb3ZpZGVzIGEgVFVOIGRldmljZSBzcGVjaWZpY2FsbHkgZm9yIHRoZSBRdWFsY29tbSBJUEMgUm91dGVyLCB3aGljaCBtZWFucyBJIGNhbiBjcmVhdGUgYSB2aXJ0dWFsIFFSVFIgZW5kcG9pbnQgcmlnaHQgZnJvbSB1c2VyIHNwYWNlLiBObyBuZWVkIHRvIG1lc3MgYXJvdW5kIHdpdGggbG93LWxldmVsIGtlcm5lbCBtb2R1bGVzICh3aGljaCwgYWRtaXR0ZWRseSwgSSAqY291bGQqIGRvLCBidXQgdGhpcyBpcyBmYXIgbW9yZSBlbGVnYW50KS4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBRUlRSX1RVTmAgYW5kIHNlZSBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtRUlRSX1RVTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTE3OT1DT05GSUdfUVJUUl9TTUQ9bVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoxODA6Q09ORklHX1FSVFJfVFVOPW1cbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWctMTgxLUNPTkZJR19DQU49bVxuLS1cbm5ldC9xcnRyL0tjb25maWc9MTc9Y29uZmlnIFFSVFJfU01EXG4tLVxubmV0L3FydHIvS2NvbmZpZy0yMy1cbm5ldC9xcnRyL0tjb25maWc6MjQ6Y29uZmlnIFFSVFJfVFVOXG5uZXQvcXJ0ci9LY29uZmlnLTI1LVx0dHJpc3RhdGUgXCYjMzQ7VFVOIGRldmljZSBmb3IgUXVhbGNvbW0gSVBDIFJvdXRlclwmIzM0O1xuLS1cbm5ldC9xcnRyL01ha2VmaWxlPTY9cXJ0ci1zbWQteVx0Oj0gc21kLm9cbm5ldC9xcnRyL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1FSVFJfVFVOKSAmIzQzOz0gcXJ0ci10dW4ub1xubmV0L3FydHIvTWFrZWZpbGUtOC1xcnRyLXR1bi15XHQ6PSB0dW4ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBUdW5uZWwqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGlubmVyIHdvcmtpbmdzIG9mIHRoaXMgdHVubmVsaW5nIG1lY2hhbmlzbS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGludG8gdGhlIGNvcmUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBxcnRyLXR1bi5jYCBvciwgZmFpbGluZyB0aGF0LCBgdHVuLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgcGFja2V0IHJlY2VwdGlvbiwgdHJhbnNtaXNzaW9uLCBhZGRyZXNzIGFzc2lnbm1lbnQsIGFuZCB0aGUgb3ZlcmFsbCBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2suIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IG9wdGltaXphdGlvbnMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gdGhlIFF1YWxjb21tIFFNSSBSYWRpbyBUcmFuc3BvcnQgKFFSVFIpIG9yIHN0YW5kYXJkIFRVTiBpbnRlcmZhY2UuIExldCYjMzk7cyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3FydHJfZW5kcG9pbnRfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3FydHIvYWZfcXJ0ci5jPTU5ND1zdGF0aWMgdm9pZCBxcnRyX2hlbGxvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy02MjYtLyoqXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NjI3OiAqIHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGEgbmV3IGVuZHBvaW50XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjI4LSAqIEBlcDogZW5kcG9pbnQgdG8gcmVnaXN0ZXJcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjMzLSAqL1xubmV0L3FydHIvYWZfcXJ0ci5jOjYzNDppbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjM1LXtcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjY4LX1cbm5ldC9xcnRyL2FmX3FydHIuYzo2Njk6RVhQT1JUX1NZTUJPTF9HUEwocXJ0cl9lbmRwb2ludF9yZWdpc3Rlcik7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjcwLVxuLS1cbm5ldC9xcnRyL21oaS5jPTExMD1zdGF0aWMgaW50IHFjb21fbWhpX3FydHJfcHJvYmUoc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYsXG4tLVxubmV0L3FydHIvbWhpLmMtMTMwLVxubmV0L3FydHIvbWhpLmM6MTMxOlx0cmMgPSBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKFx1MDAyNnFkZXYtXHUwMDNlZXAsIFFSVFJfRVBfTklEX0FVVE8pO1xubmV0L3FydHIvbWhpLmMtMTMyLVx0aWYgKHJjKVxuLS1cbm5ldC9xcnRyL3FydHIuaD0yMD1zdHJ1Y3QgcXJ0cl9lbmRwb2ludCB7XG4tLVxubmV0L3FydHIvcXJ0ci5oLTI1LVxubmV0L3FydHIvcXJ0ci5oOjI2OmludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZCk7XG5uZXQvcXJ0ci9xcnRyLmgtMjctXG4tLVxubmV0L3FydHIvc21kLmM9NTk9c3RhdGljIGludCBxY29tX3NtZF9xcnRyX3Byb2JlKHN0cnVjdCBycG1zZ19kZXZpY2UgKnJwZGV2KVxuLS1cbm5ldC9xcnRyL3NtZC5jLTcxLVxubmV0L3FydHIvc21kLmM6NzI6XHRyYyA9IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoXHUwMDI2cWRldi1cdTAwM2VlcCwgUVJUUl9FUF9OSURfQVVUTyk7XG5uZXQvcXJ0ci9zbWQuYy03My1cdGlmIChyYylcbi0tXG5uZXQvcXJ0ci90dW4uYz0zMT1zdGF0aWMgaW50IHFydHJfdHVuX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4tLVxubmV0L3FydHIvdHVuLmMtNDYtXG5uZXQvcXJ0ci90dW4uYzo0NzpcdHJldCA9IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoXHUwMDI2dHVuLVx1MDAzZWVwLCBRUlRSX0VQX05JRF9BVVRPKTtcbm5ldC9xcnRyL3R1bi5jLTQ4LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTg2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBRUlRSIFN1YnN5c3RlbSoqCgpPa2F5LCBzbyBgdHVuLmNgIGRvZXMgaW5kZWVkIGNhbGwgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgIHdoZW4gdGhlIFRVTiBkZXZpY2Ugb3BlbnMuIFRoYXQgY29uZmlybXMgdGhhdCBgUVJUUl9UVU5gIHByb3ZpZGVzIGEgdXNlcnNwYWNlIGVudHJ5IHBvaW50LCBtYWtpbmcgaXQgcmVhY2hhYmxlLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgc2lnbmlmaWNhbnQuCgpMb29raW5nIGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgaW4gYG5ldC9xcnRyL2FmX3FydHIuY2Ag4oCTIHNwZWNpZmljYWxseSBgcXJ0cl9ub2RlX2VucXVldWVgLCBgcXJ0cl9oZWxsb193b3JrYCAodGhhdCYjMzk7cyBuZXcsIGludGVyZXN0aW5nKSwgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgLCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAg4oCTIHRoZXNlIGFyZSBhbGwgKmNvcmUqIFFSVFIgZnVuY3Rpb25zLiBUaGlzIHBhdGNoIGNlbnRyYWxpemVzIHRoZSBIRUxMTyBoYW5kc2hha2UgaW50byB0aGlzIGNvcmUgbGF5ZXIsIHNvIGl0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoaXMgc2NyZWFtcyAmIzM0O2Z1enogbWUhJiMzNDsKCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBjb25maWdzOiBgUVJUUmAgYW5kIGBRUlRSX1RVTmAsIG5hdHVyYWxseS4KCk5vdywgZm9yIHNwZWNpZmljIHN5bWJvbHMgdG8gdGFyZ2V0IGR1cmluZyBmdXp6aW5nOiBgcXJ0cl9ub2RlX2VucXVldWVgLCBgcXJ0cl9oZWxsb193b3JrYCwgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgLCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAuCgpIYW5nIG9uLCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGBxcnRyX2hlbGxvX3dvcmtgIGlzIHN0YXRpYy4gWWVzLCBpdCBpcy4gQnV0LCBpdCYjMzk7cyBhIHdvcmtxdWV1ZSBjYWxsYmFjay4gVGhhdCBtZWFucyBpdCB3b24mIzM5O3QgYmUgaW5saW5lZCBhbmQgKmRvZXMqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgc28gaXQmIzM5O3MgZnV6emFibGUuIFdhaXQgYSBzZWNvbmQsIHRoZSBhZGRyZXNzIG9mIGBxcnRyX2hlbGxvX3dvcmtgIGlzIHRha2VuIGJlY2F1c2UgaXQmIzM5O3MgcGFzc2VkIHRvIGBJTklUX0RFTEFZRURfV09SS2AuIFRoYXQgc29saWRpZmllcyBpdDsgaXQgd29uJiMzOTt0IGJlIGlubGluZWQuCgpOb3csIGxldCYjMzk7cyBjaGVjayBgcXJ0cl9ub2RlX2VucXVldWVgIGFuZCBzZWUgaWYgaXQmIzM5O3MgaW5saW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0cl9ub2RlX2VucXVldWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3FydHIvYWZfcXJ0ci5jPTMyOT1zdGF0aWMgdm9pZCBxcnRyX3R4X2Zsb3dfZmFpbGVkKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIGludCBkZXN0X25vZGUsXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTM0My0vKiBQYXNzIGFuIG91dGdvaW5nIHBhY2tldCBzb2NrZXQgYnVmZmVyIHRvIHRoZSBlbmRwb2ludCBkcml2ZXIuICovXG5uZXQvcXJ0ci9hZl9xcnRyLmM6MzQ0OnN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9xcnRyL2FmX3FydHIuYy0zNDUtXHRcdFx0ICAgICBpbnQgdHlwZSwgc3RydWN0IHNvY2thZGRyX3FydHIgKmZyb20sXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTU5ND1zdGF0aWMgdm9pZCBxcnRyX2hlbGxvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy02MjEtXHR0by5zcV9ub2RlID0gbm9kZS1cdTAwM2VuaWQ7XG5uZXQvcXJ0ci9hZl9xcnRyLmM6NjIyOlx0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFx1MDAyNmZyb20sIFx1MDAyNnRvKTtcbm5ldC9xcnRyL2FmX3FydHIuYy02MjMtXHRxcnRyX3BvcnRfcHV0KGN0cmwpO1xuLS1cbm5ldC9xcnRyL2FmX3FydHIuYz05MzM9c3RhdGljIGludCBxcnRyX2JjYXN0X2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTQ3LVx0XHRza2Jfc2V0X293bmVyX3coc2tibiwgc2tiLVx1MDAzZXNrKTtcbm5ldC9xcnRyL2FmX3FydHIuYzo5NDg6XHRcdHFydHJfbm9kZV9lbnF1ZXVlKG5vZGUsIHNrYm4sIHR5cGUsIGZyb20sIHRvKTtcbm5ldC9xcnRyL2FmX3FydHIuYy05NDktXHR9XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTk1Nz1zdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTEwMTctXHRcdH1cbm5ldC9xcnRyL2FmX3FydHIuYzoxMDE4Olx0XHRlbnF1ZXVlX2ZuID0gcXJ0cl9ub2RlX2VucXVldWU7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTAxOS1cdH1cbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9MTA2MD1zdGF0aWMgaW50IHFydHJfc2VuZF9yZXN1bWVfdHgoc3RydWN0IHFydHJfY2IgKmNiKVxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy0xMDgyLVxubmV0L3FydHIvYWZfcXJ0ci5jOjEwODM6XHRyZXQgPSBxcnRyX25vZGVfZW5xdWV1ZShub2RlLCBza2IsIFFSVFJfVFlQRV9SRVNVTUVfVFgsIFx1MDAyNmxvY2FsLCBcdTAwMjZyZW1vdGUpO1xubmV0L3FydHIvYWZfcXJ0ci5jLTEwODQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBRUlRSIEVucXVldWUgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBgcXJ0cl9ub2RlX2VucXVldWVgIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYCBmdW5jdGlvbnMsIGFuZCBhIGNydWNpYWwgb3B0aW1pemF0aW9uIHBvaW50IGp1bXBzIG91dC4gSSBub3RpY2VkIHRoYXQgYHFydHJfbm9kZV9lbnF1ZXVlYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCAqdXN1YWxseSogaXMgYSBnb29kIGluZGljYXRvciB0aGF0IHRoZSBjb21waWxlciB3aWxsIGJlIGFibGUgdG8gaW5saW5lIGl0LCBidXQgaG9sZCBvbi4uLiBJIHNlZSB0aGF0IGl0cyBhZGRyZXNzIGlzIGJlaW5nIHRha2VuIChzcGVjaWZpY2FsbHksIGFzc2lnbmVkIHRvIGBlbnF1ZXVlX2ZuID0gcXJ0cl9ub2RlX2VucXVldWU7YCkuIFRoYXQmIzM5O3MgdGhlIHJlYXNvbiByaWdodCB0aGVyZSEgQmVjYXVzZSBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgaXQmIzM5O3MgdmlydHVhbGx5IGd1YXJhbnRlZWQgdGhhdCB0aGUgY29tcGlsZXIgKndvbiYjMzk7dCogaW5saW5lIGl0LCByZWdhcmRsZXNzIG9mIHRoZSBgc3RhdGljYCBkZWNsYXJhdGlvbi4gVGhlIGZ1bmN0aW9uIG11c3QgYmUgYWNjZXNzaWJsZSBleHRlcm5hbGx5IHRocm91Z2ggdGhhdCBmdW5jdGlvbiBwb2ludGVyLiBUaGF0JiMzOTtzIGEgcGVyZm9ybWFuY2UgaGl0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIEkgbmVlZCB0byBjaGVjayBob3cgZnJlcXVlbnRseSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBiZWNhdXNlIHRoaXMgd29uJiMzOTt0IGJlIGFzIGVmZmljaWVudCBhcyBhIGRpcmVjdCBjYWxsLgoKTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBxcnRyX2JjYXN0X2VucXVldWVgLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGFsc28gZGVjbGFyZWQgYHN0YXRpY2AsIHNvIHRoZSBzYW1lIGlubGluaW5nIGNvbnNpZGVyYXRpb25zIGFwcGx5LiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgd2hldGhlciAqaXRzKiBhZGRyZXNzIGlzIGFsc28gYmVpbmcgdGFrZW4gYW55d2hlcmUgaW4gdGhlIGNvZGUuIElmIGl0IGlzLCB0aGVuIHRoZSBzYW1lIG5vbi1pbmxpbmluZyBiZWhhdmlvciB3aWxsIHJlc3VsdC4gVGhpcyBtaWdodCByZXF1aXJlIGEgcXVpY2sgc2VhcmNoIHRocm91Z2ggdGhlIGNvZGViYXNlLCB0byB2ZXJpZnkgaWYgdGhlIGFkZHJlc3Mgb2YgYHFydHJfYmNhc3RfZW5xdWV1ZWAgaXMgYXNzaWduZWQgdG8gYW55IGZ1bmN0aW9uIHBvaW50ZXIgdmFyaWFibGVzLiBJZiBpdCBpc24mIzM5O3QgdGhlbiB3ZSBtaWdodCBoYXZlIGZvdW5kIGEgbmljZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3FydHJfYmNhc3RfZW5xdWV1ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmM9MTYwPXN0YXRpYyBpbnQgcXJ0cl9sb2NhbF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTE2Mi1cdFx0XHQgICAgICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pO1xubmV0L3FydHIvYWZfcXJ0ci5jOjE2MzpzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3FydHIvYWZfcXJ0ci5jLTE2NC1cdFx0XHQgICAgICBpbnQgdHlwZSwgc3RydWN0IHNvY2thZGRyX3FydHIgKmZyb20sXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTc0ND1zdGF0aWMgdm9pZCBxcnRyX3BvcnRfcmVtb3ZlKHN0cnVjdCBxcnRyX3NvY2sgKmlwYylcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNzYxLVx0XHRza2Jfc2V0X293bmVyX3coc2tiLCBcdTAwMjZpcGMtXHUwMDNlc2spO1xubmV0L3FydHIvYWZfcXJ0ci5jOjc2MjpcdFx0cXJ0cl9iY2FzdF9lbnF1ZXVlKE5VTEwsIHNrYiwgUVJUUl9UWVBFX0RFTF9DTElFTlQsIFx1MDAyNmlwYy1cdTAwM2V1cyxcbm5ldC9xcnRyL2FmX3FydHIuYy03NjMtXHRcdFx0XHQgICBcdTAwMjZ0byk7XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTkwMj1zdGF0aWMgaW50IHFydHJfbG9jYWxfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9xcnRyL2FmX3FydHIuYy05MzItLyogUXVldWUgcGFja2V0IGZvciBicm9hZGNhc3QuICovXG5uZXQvcXJ0ci9hZl9xcnRyLmM6OTMzOnN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvcXJ0ci9hZl9xcnRyLmMtOTM0LVx0XHRcdCAgICAgIGludCB0eXBlLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSxcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9OTU3PXN0YXRpYyBpbnQgcXJ0cl9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTAwOC1cdFx0fVxubmV0L3FydHIvYWZfcXJ0ci5jOjEwMDk6XHRcdGVucXVldWVfZm4gPSBxcnRyX2JjYXN0X2VucXVldWU7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTAxMC1cdH0gZWxzZSBpZiAoYWRkci1cdTAwM2VzcV9ub2RlID09IGlwYy1cdTAwM2V1cy5zcV9ub2RlKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNDkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBUaGlua2luZyBvbiBRUlRSIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIGBxcnRyX2JjYXN0X2VucXVldWVgIGFkZHJlc3MgaXMgYWxzbyBpbiB1c2UsIHRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGlzIGNvbmZpcm1zIHdoYXQgSSBzdXNwZWN0ZWQuCgpUaGVyZWZvcmUsIHRoZSBrZXkgZm9jdXMgcG9pbnRzIGZvciB0cm91Ymxlc2hvb3Rpbmcgb3IgdW5kZXJzdGFuZGluZyB0aGUgUVJUUiBjb25maWd1cmF0aW9uIGFyZTogYHFydHJfbm9kZV9lbnF1ZXVlYCwgYHFydHJfaGVsbG9fd29ya2AsIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCwgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZWxlbWVudHMuCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gTXkgaW5pdGlhbCBmZWVsaW5nIGlzIHRoYXQgYFFSVFJgIGFuZCBgUVJUUl9UVU5gIHNob3VsZCBiZSBzdWZmaWNpZW50LCBidXQgaXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2guCgpUbyBtYWtlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgZ28gYmFjayBhbmQgZXhhbWluZSBgbmV0L3FydHIvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyB0aGF0IGBRUlRSYCBtaWdodCByZXF1aXJlLiBBIGRlcGVuZGVuY3kgY291bGQgYmUgdGhlIGtleSB0byB0aGUgcHJvYmxlbS4gSSBuZWVkIHRvIGxlYXZlIG5vIHN0b25lIHVudHVybmVkIGluIHRoaXMgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9xcnRyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3FydHIvS2NvbmZpZz0xNz1jb25maWcgUVJUUl9TTURcbm5ldC9xcnRyL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtTTUQgSVBDIFJvdXRlciBjaGFubmVsc1wmIzM0O1xubmV0L3FydHIvS2NvbmZpZzoxOTpcdGRlcGVuZHMgb24gUlBNU0cgfHwgKENPTVBJTEVfVEVTVCBcdTAwMjZcdTAwMjYgUlBNU0c9bilcbm5ldC9xcnRyL0tjb25maWctMjAtXHRoZWxwXG4tLVxubmV0L3FydHIvS2NvbmZpZz0zMT1jb25maWcgUVJUUl9NSElcbm5ldC9xcnRyL0tjb25maWctMzItXHR0cmlzdGF0ZSBcJiMzNDtNSEkgSVBDIFJvdXRlciBjaGFubmVsc1wmIzM0O1xubmV0L3FydHIvS2NvbmZpZzozMzpcdGRlcGVuZHMgb24gTUhJX0JVU1xubmV0L3FydHIvS2NvbmZpZy0zNC1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgUVJUUiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgaXQgbG9va3MgbGlrZSBgUVJUUmAgaXMgc3RhbmRpbmcgb24gaXRzIG93biwgbm8gZGVwZW5kZW5jaWVzIHJpZ2h0IG9mZiB0aGUgYmF0LiBTYW1lIGZvciBgUVJUUl9UVU5gLiBHb29kLiBCdXQgd2FpdCBhIHNlY29uZC4uLiBpc24mIzM5O3QgYFFSVFJgIGEgdG9wLWxldmVsIGNvbmZpZyBvcHRpb24/IEFoYSEgSXQmIzM5O3MgbGlrZWx5IGRlZmluZWQgaW4gYG5ldC9xcnRyL0tjb25maWdgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgYG5ldC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIHRyYWNrIGRvd24gdGhlIGNvbnRleHQgYW5kIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmcm9tIHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZSBcJiMzNDtuZXQvcXJ0ci9LY29uZmlnXCYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTI4MT1zb3VyY2UgXCYjMzQ7bmV0L2wzbWRldi9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyODI6c291cmNlIFwmIzM0O25ldC9xcnRyL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnLTI4My1zb3VyY2UgXCYjMzQ7bmV0L25jc2kvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE3MgoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiAxOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUVJUUiBTdWJzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28sIGFmdGVyIHJldmlld2luZyB0aGlzIHBhdGNoLCBpdCBzZWVtcyBsaWtlIHRoZSBrZXkgdGFyZ2V0cyBmb3IgZnV6emluZyBhcmUgZ29pbmcgdG8gYmUgYFFSVFJgIGFuZCBgUVJUUl9UVU5gLiBObyBvdGhlciBjb25maWd1cmF0aW9ucyBhcHBlYXIgbmVjZXNzYXJ5LgoKSGVyZSYjMzk7cyBteSBkaXN0aWxsZWQgcmVhc29uaW5nOiB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgc2hpZnRzIHRoZSBIRUxMTyBoYW5kc2hha2UgbG9naWMgd2l0aGluIHRoZSBRUlRSIHN1YnN5c3RlbS4gUHJldmlvdXNseSByZXNpZGluZyBpbiB0aGUgdXNlcnNwYWNlL25ldHdvcmsgbmFtZXNwYWNlIChucykgbGF5ZXIsIGl0JiMzOTtzIG5vdyBlbWJlZGRlZCB3aXRoaW4gdGhlIGNvcmUgUVJUUiBsYXllci4gVGhpcyBtZWFucyBjb3JlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQsIHN1Y2ggYXMgYHFydHJfbm9kZV9lbnF1ZXVlYCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAuIEEgbmV3IGRlbGF5ZWQgd29yayBpdGVtLCBgcXJ0cl9oZWxsb193b3JrYCwgaGFzIGFsc28gYmVlbiBpbnRyb2R1Y2VkLgoKVGhpcyBjaGFuZ2UgaXMgaW5oZXJlbnRseSBmdW5jdGlvbmFsIGFuZCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGBRUlRSX1RVTmAgdmlydHVhbCBlbmRwb2ludCBkcml2ZXIsIHdoaWNoIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHNwZWNpZmljIHN5bWJvbHM6IGBxcnRyX25vZGVfZW5xdWV1ZWAsIGBxcnRyX2hlbGxvX3dvcmtgLCBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAsIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYC4gVGhlc2UgcmVwcmVzZW50IHRoZSBjcml0aWNhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24gYW5kIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIHN5c3RlbS4KCkkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYCBub3cuIFRoaXMgaXMgYSBzb2xpZCwgZm9jdXNlZCBhcHByb2FjaCB0byBmdXp6aW5nIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtRUlRSJiMzNDssCiAgICAmIzM0O1FSVFJfVFVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cXJ0cl9ub2RlX2VucXVldWUmIzM0OywKICAgICYjMzQ7cXJ0cl9oZWxsb193b3JrJiMzNDssCiAgICAmIzM0O3FydHJfZW5kcG9pbnRfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cXJ0cl9iY2FzdF9lbnF1ZXVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBIRUxMTyBoYW5kc2hha2UgbG9naWMgZnJvbSB0aGUgdXNlcnNwYWNlL25zIGxheWVyIHRvIHRoZSBjb3JlIGxheWVyIGluIHRoZSBRUlRSIHN1YnN5c3RlbS4gSXQgbW9kaWZpZXMgY29yZSBmdW5jdGlvbnMgbGlrZSBgcXJ0cl9ub2RlX2VucXVldWVgIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYCBhbmQgYWRkcyBhIG5ldyBkZWxheWVkIHdvcmsgYHFydHJfaGVsbG9fd29ya2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYFFSVFJfVFVOYCB2aXJ0dWFsIGVuZHBvaW50IGRyaXZlciwgc28gaXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UVJUUiYjMzQ7LAogICAgJiMzNDtRUlRSX1RVTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3FydHJfbm9kZV9lbnF1ZXVlJiMzNDssCiAgICAmIzM0O3FydHJfaGVsbG9fd29yayYjMzQ7LAogICAgJiMzNDtxcnRyX2VuZHBvaW50X3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3FydHJfYmNhc3RfZW5xdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgSEVMTE8gaGFuZHNoYWtlIGxvZ2ljIGZyb20gdGhlIHVzZXJzcGFjZS9ucyBsYXllciB0byB0aGUgY29yZSBsYXllciBpbiB0aGUgUVJUUiBzdWJzeXN0ZW0uIEl0IG1vZGlmaWVzIGNvcmUgZnVuY3Rpb25zIGxpa2UgYHFydHJfbm9kZV9lbnF1ZXVlYCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAgYW5kIGFkZHMgYSBuZXcgZGVsYXllZCB3b3JrIGBxcnRyX2hlbGxvX3dvcmtgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBRUlRSX1RVTmAgdmlydHVhbCBlbmRwb2ludCBkcml2ZXIsIHNvIGl0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIHNlbmRpbmcgb2YgUVJUUiBIRUxMTyBwYWNrZXRzIGZyb20gdGhlIG5hbWVzZXJ2aWNlICh1c2luZyBhIGtlcm5lbCBzb2NrZXQpIHRvIHRoZSBjb3JlIGxheWVyICh1c2luZyBkaXJlY3Qgc2tiIGFsbG9jYXRpb24gYW5kIGVucXVldWVpbmcpLiBUaGUgbmV3IEhFTExPIHBhY2tldCBwYXlsb2FkIGlzIGFsbG9jYXRlZCB2aWEgYHFydHJfYWxsb2NfY3RybF9wYWNrZXQoKWAsIHdoaWNoIHVzZXMgYHNrYl9wdXRfemVybygpYCB0byBlbnN1cmUgdGhlIG1lbW9yeSBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIHBhY2tldCBoZWFkZXIgaXMgYWxzbyBleHBsaWNpdGx5IGFuZCBjb21wbGV0ZWx5IGluaXRpYWxpemVkIGluIGBxcnRyX25vZGVfZW5xdWV1ZSgpYC4gV2hpbGUgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgYXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgaW4gYHFydHJfaGVsbG9fd29yaygpYCwgdGhleSBhcmUgb25seSB1c2VkIHRvIHJlYWQgdGhlIGBzcV9ub2RlYCBhbmQgYHNxX3BvcnRgIGZpZWxkczsgdGhlIHN0cnVjdHVyZXMgdGhlbXNlbHZlcyBhcmUgbmV2ZXIgY29waWVkIHRvIHRoZSBza2Igb3IgdXNlcnNwYWNlLCBtZWFuaW5nIGFueSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgYXJlIHNhZmVseSBpZ25vcmVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODk5ZDFkY2ZmZDA5YTVjN2M3OWI2MmJiNWY5NmI3ZjIwYzVlNzJjNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDEyOjMwOjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3FydHIvYWZfcXJ0ci5jIGIvbmV0L3FydHIvYWZfcXJ0ci5jCmluZGV4IGQwMmVmOWE3NGMzY2EuLjhlOWIzNjQ3OWJhYjggMTAwNjQ0Ci0tLSBhL25ldC9xcnRyL2FmX3FydHIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcXJ0ci9hZl9xcnRyLmMKQEAgLTksNiAmIzQzOzksNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3Rlcm1pb3MuaCZndDsJLyogRm9yIFRJT0NJTlEvT1VUUSAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd2FpdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKIAogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiAKQEAgLTEyMCw4ICYjNDM7MTIxLDEwIEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DKHFydHJfcG9ydHMpOwogICogQG5pZDogbm9kZSBpZAogICogQHFydHJfdHhfZmxvdzogeGFycmF5IG9mIHFydHJfdHhfZmxvdywga2V5ZWQgYnkgbm9kZSAmbHQ7Jmx0OyAzMiB8IHBvcnQKICAqIEBxcnRyX3R4X2xvY2s6IGxvY2sgZm9yIHFydHJfdHhfZmxvdyBpbnNlcnRzCiYjNDM7ICogQGhlbGxvX3NlbnQ6IGhlbGxvIHBhY2tldCBzZW5kIHN1Y2Nlc3NmdWwKICAqIEByeF9xdWV1ZTogcmVjZWl2ZSBxdWV1ZQogICogQGl0ZW06IGxpc3QgaXRlbSBmb3IgYnJvYWRjYXN0IGxpc3QKJiM0MzsgKiBAc2F5X2hlbGxvOiBkZWxheWVkIHdvcmsgZm9yIHNlbmRpbmcgaGVsbG8gcGFja2V0CiAgKi8KIHN0cnVjdCBxcnRyX25vZGUgewogCXN0cnVjdCBtdXRleCBlcF9sb2NrOwpAQCAtMTMyLDggJiM0MzsxMzUsMTEgQEAgc3RydWN0IHFydHJfbm9kZSB7CiAJc3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7CiAJc3RydWN0IG11dGV4IHFydHJfdHhfbG9jazsgLyogZm9yIHFydHJfdHhfZmxvdyAqLwogCiYjNDM7CWJvb2wgaGVsbG9fc2VudDsKJiM0MzsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3F1ZXVlOwogCXN0cnVjdCBsaXN0X2hlYWQgaXRlbTsKJiM0MzsJc3RydWN0IGRlbGF5ZWRfd29yayBzYXlfaGVsbG87CiB9OwogCiAvKioKQEAgLTE4Nyw2ICYjNDM7MTkzLDggQEAgc3RhdGljIHZvaWQgX19xcnRyX25vZGVfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKIAlsaXN0X2RlbCgmYW1wO25vZGUtJmd0O2l0ZW0pOwogCW11dGV4X3VubG9jaygmYW1wO3FydHJfbm9kZV9sb2NrKTsKIAomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtub2RlLSZndDtzYXlfaGVsbG8pOwomIzQzOwogCXNrYl9xdWV1ZV9wdXJnZSgmYW1wO25vZGUtJmd0O3J4X3F1ZXVlKTsKIAogCS8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqLwpAQCAtMzQxLDYgJiM0MzszNDksMTQgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXNpemVfdCBsZW4gPSBza2ItJmd0O2xlbjsKIAlpbnQgcmMsIGNvbmZpcm1fcng7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwomIzQzOwlpZiAoIW5vZGUtJmd0O2hlbGxvX3NlbnQgJmFtcDsmYW1wOyB0eXBlICE9IFFSVFJfVFlQRV9IRUxMTykgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bm9kZS0mZ3Q7ZXBfbG9jayk7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiAtRUFHQUlOOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwomIzQzOwogCWNvbmZpcm1fcnggPSBxcnRyX3R4X3dhaXQobm9kZSwgdG8tJmd0O3NxX25vZGUsIHRvLSZndDtzcV9wb3J0LCB0eXBlKTsKIAlpZiAoY29uZmlybV9yeCAmbHQ7IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CkBAIC0zNTMsNyAmIzQzOzM2OSw3IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAloZHItJmd0O3NyY19ub2RlX2lkID0gY3B1X3RvX2xlMzIoZnJvbS0mZ3Q7c3Ffbm9kZSk7CiAJaGRyLSZndDtzcmNfcG9ydF9pZCA9IGNwdV90b19sZTMyKGZyb20tJmd0O3NxX3BvcnQpOwogCWlmICh0by0mZ3Q7c3FfcG9ydCA9PSBRUlRSX1BPUlRfQ1RSTCkgewotCQloZHItJmd0O2RzdF9ub2RlX2lkID0gY3B1X3RvX2xlMzIobm9kZS0mZ3Q7bmlkKTsKJiM0MzsJCWhkci0mZ3Q7ZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMihSRUFEX09OQ0Uobm9kZS0mZ3Q7bmlkKSk7CiAJCWhkci0mZ3Q7ZHN0X3BvcnRfaWQgPSBjcHVfdG9fbGUzMihRUlRSX1BPUlRfQ1RSTCk7CiAJfSBlbHNlIHsKIAkJaGRyLSZndDtkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKHRvLSZndDtzcV9ub2RlKTsKQEAgLTM3Miw2ICYjNDM7Mzg4LDggQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJcmMgPSBub2RlLSZndDtlcC0mZ3Q7eG1pdChub2RlLSZndDtlcCwgc2tiKTsKIAkJZWxzZQogCQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlpZiAoIXJjICZhbXA7JmFtcDsgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pCiYjNDM7CQkJbm9kZS0mZ3Q7aGVsbG9fc2VudCA9IHRydWU7CiAJCW11dGV4X3VubG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwogCX0KIAkvKiBOZWVkIHRvIGVuc3VyZSB0aGF0IGEgc3Vic2VxdWVudCBtZXNzYWdlIGNhcnJpZXMgdGhlIG90aGVyd2lzZSBsb3N0CkBAIC0zNzksNiAmIzQzOzM5Nyw5IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAocmMgJmFtcDsmYW1wOyBjb25maXJtX3J4KQogCQlxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLSZndDtzcV9ub2RlLCB0by0mZ3Q7c3FfcG9ydCk7CiAKJiM0MzsJaWYgKHJjID09IC1FQUdBSU4gJmFtcDsmYW1wOyB0eXBlID09IFFSVFJfVFlQRV9IRUxMTykKJiM0MzsJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO25vZGUtJmd0O3NheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTsKJiM0MzsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTQxNiw3ICYjNDM7NDM3LDcgQEAgc3RhdGljIHZvaWQgcXJ0cl9ub2RlX2Fzc2lnbihzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgbmlkKQogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cXJ0cl9ub2Rlc19sb2NrLCBmbGFncyk7CiAJcmFkaXhfdHJlZV9pbnNlcnQoJmFtcDtxcnRyX25vZGVzLCBuaWQsIG5vZGUpOwogCWlmIChub2RlLSZndDtuaWQgPT0gUVJUUl9FUF9OSURfQVVUTykKLQkJbm9kZS0mZ3Q7bmlkID0gbmlkOwomIzQzOwkJV1JJVEVfT05DRShub2RlLSZndDtuaWQsIG5pZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3FydHJfbm9kZXNfbG9jaywgZmxhZ3MpOwogfQogCkBAIC01NzAsNiAmIzQzOzU5MSwzOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsCiAJcmV0dXJuIHNrYjsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTsKJiM0MzsJc3RydWN0IHNvY2thZGRyX3FydHIgdG8gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9OwomIzQzOwlzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqcGt0OwomIzQzOwlzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlOwomIzQzOwlzdHJ1Y3QgcXJ0cl9zb2NrICpjdHJsOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwlub2RlID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwgc3RydWN0IHFydHJfbm9kZSwgc2F5X2hlbGxvKTsKJiM0MzsKJiM0MzsJLyogTlMgbXVzdCBiZSBib3VuZCBiZWZvcmUgd2UgY2FuIHNlbmQ7IHJldHJ5IHdpdGggYmFja29mZiBpZiBub3QgcmVhZHkgKi8KJiM0MzsJY3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpOwomIzQzOwlpZiAoIWN0cmwpIHsKJiM0MzsJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO25vZGUtJmd0O3NheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KCZhbXA7cGt0LCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFza2IpIHsKJiM0MzsJCXFydHJfcG9ydF9wdXQoY3RybCk7CiYjNDM7CQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtub2RlLSZndDtzYXlfaGVsbG8sIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGt0LSZndDtjbWQgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfSEVMTE8pOwomIzQzOwlmcm9tLnNxX25vZGUgPSBxcnRyX2xvY2FsX25pZDsKJiM0MzsJdG8uc3Ffbm9kZSA9IG5vZGUtJmd0O25pZDsKJiM0MzsJcXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sICZhbXA7ZnJvbSwgJmFtcDt0byk7CiYjNDM7CXFydHJfcG9ydF9wdXQoY3RybCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKCkgLSByZWdpc3RlciBhIG5ldyBlbmRwb2ludAogICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlcgpAQCAtNTk1LDYgJiM0Mzs2NDgsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpCiAJbm9kZS0mZ3Q7bmlkID0gUVJUUl9FUF9OSURfQVVUTzsKIAlub2RlLSZndDtlcCA9IGVwOwogCiYjNDM7CW5vZGUtJmd0O2hlbGxvX3NlbnQgPSBmYWxzZTsKJiM0MzsJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtub2RlLSZndDtzYXlfaGVsbG8sIHFydHJfaGVsbG9fd29yayk7CiYjNDM7CiAJeGFfaW5pdCgmYW1wO25vZGUtJmd0O3FydHJfdHhfZmxvdyk7CiAJbXV0ZXhfaW5pdCgmYW1wO25vZGUtJmd0O3FydHJfdHhfbG9jayk7CiAKQEAgLTYwNSw2ICYjNDM7NjYxLDkgQEAgaW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKQogCW11dGV4X3VubG9jaygmYW1wO3FydHJfbm9kZV9sb2NrKTsKIAllcC0mZ3Q7bm9kZSA9IG5vZGU7CiAKJiM0MzsJLyogSW5pdGlhdGUgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgKi8KJiM0MzsJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bm9kZS0mZ3Q7c2F5X2hlbGxvLCAwKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIpOwpAQCAtODc5LDYgJiM0Mzs5MzgsOSBAQCBzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJbXV0ZXhfbG9jaygmYW1wO3FydHJfbm9kZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhbXA7cXJ0cl9hbGxfbm9kZXMsIGl0ZW0pIHsKJiM0MzsJCS8qIFNraXAgbm9kZXMgd2l0aCBubyBhc3NpZ25lZCBub2RlIElEIHlldC4gKi8KJiM0MzsJCWlmIChSRUFEX09OQ0Uobm9kZS0mZ3Q7bmlkKSA9PSBRUlRSX0VQX05JRF9BVVRPKQomIzQzOwkJCWNvbnRpbnVlOwogCQlza2JuID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2tibikKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L3FydHIvbnMuYyBiL25ldC9xcnRyL25zLmMKaW5kZXggYjNmOWJiY2Y5YWI5Yi4uNmQ5M2JjZDI1MGU3NSAxMDA2NDQKLS0tIGEvbmV0L3FydHIvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcXJ0ci9ucy5jCkBAIC0yMTIsNiAmIzQzOzIxMiw3IEBAIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydiwKIAkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHNlbmQgbG9va3VwIG5vdGlmaWNhdGlvblxuJiMzNDspOwogfQogCiYjNDM7LyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovCiBzdGF0aWMgaW50IGFubm91bmNlX3NlcnZlcnMoc3RydWN0IHNvY2thZGRyX3FydHIgKnNxKQogewogCXN0cnVjdCBxcnRyX3NlcnZlciAqc3J2OwpAQCAtMzI2LDM4ICYjNDM7MzI3LDggQEAgc3RhdGljIGludCBzZXJ2ZXJfZGVsKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBwb3J0LCBib29sIGJjYXN0KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNheV9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZGVzdCkKLXsKLQlzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCBwa3Q7Ci0Jc3RydWN0IG1zZ2hkciBtc2cgPSB7IH07Ci0Jc3RydWN0IGt2ZWMgaXY7Ci0JaW50IHJldDsKLQotCWl2Lmlvdl9iYXNlID0gJmFtcDtwa3Q7Ci0JaXYuaW92X2xlbiA9IHNpemVvZihwa3QpOwotCi0JbWVtc2V0KCZhbXA7cGt0LCAwLCBzaXplb2YocGt0KSk7Ci0JcGt0LmNtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9IRUxMTyk7Ci0KLQltc2cubXNnX25hbWUgPSAoc3RydWN0IHNvY2thZGRyICopZGVzdDsKLQltc2cubXNnX25hbWVsZW4gPSBzaXplb2YoKmRlc3QpOwotCi0JcmV0ID0ga2VybmVsX3NlbmRtc2cocXJ0cl9ucy5zb2NrLCAmYW1wO21zZywgJmFtcDtpdiwgMSwgc2l6ZW9mKHBrdCkpOwotCWlmIChyZXQgJmx0OyAwKQotCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gc2VuZCBoZWxsbyBtc2dcbiYjMzQ7KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qIEFubm91bmNlIHRoZSBsaXN0IG9mIHNlcnZlcnMgcmVnaXN0ZXJlZCBvbiB0aGUgbG9jYWwgbm9kZSAqLwogc3RhdGljIGludCBjdHJsX2NtZF9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IHNheV9oZWxsbyhzcSk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiByZXQ7Ci0KIAlyZXR1cm4gYW5ub3VuY2Vfc2VydmVycyhzcSk7CiB9CiAKQEAgLTc3NCwxMCAmIzQzOzc0NSw2IEBAIGludCBxcnRyX25zX2luaXQodm9pZCkKIAlxcnRyX25zLmJjYXN0X3NxLnNxX25vZGUgPSBRUlRSX05PREVfQkNBU1Q7CiAJcXJ0cl9ucy5iY2FzdF9zcS5zcV9wb3J0ID0gUVJUUl9QT1JUX0NUUkw7CiAKLQlyZXQgPSBzYXlfaGVsbG8oJmFtcDtxcnRyX25zLmJjYXN0X3NxKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlcnJfd3E7Ci0KIAkvKiBBcyB0aGUgcXJ0ciBucyBzb2NrZXQgb3duZXIgYW5kIGNyZWF0b3IgaXMgdGhlIHNhbWUgbW9kdWxlLCB3ZSBoYXZlCiAJICogdG8gZGVjcmVhc2UgdGhlIHFydHIgbW9kdWxlIHJlZmVyZW5jZSBjb3VudCB0byBndWFyYW50ZWUgdGhhdCBpdAogCSAqIHJlbWFpbnMgemVybyBhZnRlciB0aGUgbnMgc29ja2V0IGlzIGNyZWF0ZWQsIG90aGVyd2lzZSwgZXhlY3V0aW5nCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzU1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUVJUUiBIZWxsbyBQYWNrZXQgUmVsb2NhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvcXJ0ci9hZl9xcnRyLmNgIGFuZCBgbmV0L3FydHIvbnMuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgY29yZSBjaGFuZ2VzIHRvIHRoZSBRdWFsY29tbSBSb3V0ZXIgVHJhbnNwb3J0IChRUlRSKSBzdWJzeXN0ZW0uIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIG1vdmluZyB0aGUgc2VuZGluZyBvZiB0aGUgYFFSVFJfVFlQRV9IRUxMT2AgcGFja2V0LiBQcmV2aW91c2x5IGhhbmRsZWQgYnkgdGhlIG5hbWVzZXJ2aWNlIChgbnMuY2ApLCBpdCYjMzk7cyBub3cgYmVpbmcgc2hpZnRlZCB0byB0aGUgY29yZSBsYXllciAoYGFmX3FydHIuY2ApLiBUaGF0JiMzOTtzIGEgbG9naWNhbCBtb3ZlLCBwcm9iYWJseSBmb3IgYmV0dGVyIGludGVncmF0aW9uIGFuZCBjb250cm9sLgoKSW50ZXJlc3RpbmcgdGhhdCB0aGV5IGFyZSB1c2luZyBkZWxheWVkIHdvcmsgKGBzYXlfaGVsbG9gKSB0byBhY3R1YWxseSBzZW5kIHRoZSBoZWxsbyBwYWNrZXQuIFRoaXMgc3VnZ2VzdHMgdGhleSB3YW50IHRvIGF2b2lkIGJsb2NraW5nIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGdvb2QuIExldCYjMzk7cyBkaWcgaW50byB0aGUgYHFydHJfaGVsbG9fd29ya2AgZnVuY3Rpb24gYW5kIHNlZSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuCgpMb29raW5nIGF0IHRoZSBjb2RlOgpgYGBjCiYjNDM7c3RhdGljIHZvaWQgcXJ0cl9oZWxsb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9xcnRyIGZyb20gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9OwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciB0byA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07CiYjNDM7CXN0cnVjdCBxcnRyX2N0cmxfcGt0ICpwa3Q7CiYjNDM7CXN0cnVjdCBxcnRyX25vZGUgKm5vZGU7CiYjNDM7CXN0cnVjdCBxcnRyX3NvY2sgKmN0cmw7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CiYjNDM7CW5vZGUgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcXJ0cl9ub2RlLCBzYXlfaGVsbG8pOwomIzQzOwomIzQzOwkvKiBOUyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB3ZSBjYW4gc2VuZDsgcmV0cnkgd2l0aCBiYWNrb2ZmIGlmIG5vdCByZWFkeSAqLwomIzQzOwljdHJsID0gcXJ0cl9wb3J0X2xvb2t1cChRUlRSX1BPUlRfQ1RSTCk7CiYjNDM7CWlmICghY3RybCkgewomIzQzOwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bm9kZS0mZ3Q7c2F5X2hlbGxvLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoJmFtcDtwa3QsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXNrYikgewomIzQzOwkJcXJ0cl9wb3J0X3B1dChjdHJsKTsKJiM0MzsJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO25vZGUtJmd0O3NheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlwa3QtJmd0O2NtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9IRUxMTyk7CiYjNDM7CWZyb20uc3Ffbm9kZSA9IHFydHJfbG9jYWxfbmlkOwomIzQzOwl0by5zcV9ub2RlID0gbm9kZS0mZ3Q7bmlkOwomIzQzOwlxcnRyX25vZGVfZW5xdWV1ZShub2RlLCBza2IsIFFSVFJfVFlQRV9IRUxMTywgJmFtcDtmcm9tLCAmYW1wO3RvKTsKJiM0MzsJcXJ0cl9wb3J0X3B1dChjdHJsKTsKJiM0Mzt9CmBgYAoKT2theSwgc28gdGhlIGBxcnRyX2hlbGxvX3dvcmtgIGZ1bmN0aW9uIGRvZXMgYSBmZXcgdGhpbmdzLiBJdCByZXRyaWV2ZXMgdGhlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZWxheWVkIHdvcmssIGxvb2tzIHVwIHRoZSBjb250cm9sIHNvY2tldCAoYFFSVFJfUE9SVF9DVFJMYCksIGNoZWNrcyBpZiB0aGUgbmFtZXNlcnZlciBpcyBib3VuZCwgYW5kIGlmIG5vdCwgaXQgc2NoZWR1bGVzIGFub3RoZXIgZGVsYXllZCB3b3JrIGluc3RhbmNlIHdpdGggYSBiYWNrb2ZmLiBUaGF0JiMzOTtzIGEgZ29vZCB3YXkgdG8gaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGluaXRpYWxpemF0aW9uLgoKSWYgdGhlIGNvbnRyb2wgc29ja2V0IGlzIGF2YWlsYWJsZSwgaXQgYWxsb2NhdGVzIGEgY29udHJvbCBwYWNrZXQgKGBza2JgKSwgcG9wdWxhdGVzIHRoZSBgUVJUUl9UWVBFX0hFTExPYCBjb21tYW5kLCBzZXRzIHVwIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcywgYW5kIHRoZW4gZW5xdWV1ZXMgdGhlIHBhY2tldCB1c2luZyBgcXJ0cl9ub2RlX2VucXVldWVgLiBUaGlzIG1ha2VzIHNlbnNlLiBJdCBhbHNvIGdyYWNlZnVsbHkgaGFuZGxlcyB0aGUgYWxsb2NhdGlvbiBmYWlsdXJlLCBzY2hlZHVsaW5nIGFub3RoZXIgZGVsYXllZCB3b3JrIGluc3RhbmNlLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgcGFja2V0IGFsbG9jYXRpb24uIE5lZWQgdG8gc2VlIGhvdyBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgaXMgaW1wbGVtZW50ZWQuIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoYXQgU0tCIGFsbG9jYXRpb24sIGVzcGVjaWFsbHkgaXRzIHNpemUgYW5kIGFueSBhc3NvY2lhdGVkIGZsYWdzLCBhbmQgaG93IHRoZSBwYXlsb2FkIHBvaW50ZXIgYHBrdGAgaXMgbWFuYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0cl9hbGxvY19jdHJsX3BhY2tldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmM9NTY2PUVYUE9SVF9TWU1CT0xfR1BMKHFydHJfZW5kcG9pbnRfcG9zdCk7XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTU2OC0vKipcbm5ldC9xcnRyL2FmX3FydHIuYzo1Njk6ICogcXJ0cl9hbGxvY19jdHJsX3BhY2tldCgpIC0gYWxsb2NhdGUgY29udHJvbCBwYWNrZXQgc2tiXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTcwLSAqIEBwa3Q6IHJlZmVyZW5jZSB0byBxcnRyX2N0cmxfcGt0IHBvaW50ZXJcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTc3LSAqL1xubmV0L3FydHIvYWZfcXJ0ci5jOjU3ODpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTc5LVx0XHRcdFx0XHQgICAgICBnZnBfdCBmbGFncylcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9NTk0PXN0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jLTYxMS1cbm5ldC9xcnRyL2FmX3FydHIuYzo2MTI6XHRza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KFx1MDAyNnBrdCwgR0ZQX0tFUk5FTCk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjEzLVx0aWYgKCFza2IpIHtcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmM9Njc1PXZvaWQgcXJ0cl9lbmRwb2ludF91bnJlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcClcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjk3LVx0XHRzcmMuc3Ffbm9kZSA9IGl0ZXIuaW5kZXg7XG5uZXQvcXJ0ci9hZl9xcnRyLmM6Njk4Olx0XHRza2IgPSBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KFx1MDAyNnBrdCwgR0ZQX0FUT01JQyk7XG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjk5LVx0XHRpZiAoc2tiKSB7XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTc0ND1zdGF0aWMgdm9pZCBxcnRyX3BvcnRfcmVtb3ZlKHN0cnVjdCBxcnRyX3NvY2sgKmlwYylcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNzU0LVxubmV0L3FydHIvYWZfcXJ0ci5jOjc1NTpcdHNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoXHUwMDI2cGt0LCBHRlBfS0VSTkVMKTtcbm5ldC9xcnRyL2FmX3FydHIuYy03NTYtXHRpZiAoc2tiKSB7XG4tLVxubmV0L3FydHIvYWZfcXJ0ci5jPTEwNjA9c3RhdGljIGludCBxcnRyX3NlbmRfcmVzdW1lX3R4KHN0cnVjdCBxcnRyX2NiICpjYilcbi0tXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTA3Mi1cbm5ldC9xcnRyL2FmX3FydHIuYzoxMDczOlx0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcdTAwMjZwa3QsIEdGUF9LRVJORUwpO1xubmV0L3FydHIvYWZfcXJ0ci5jLTEwNzQtXHRpZiAoIXNrYikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODYyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGJlaW5nIGltcGxlbWVudGVkLCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCBhIGxvdyBsZXZlbC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29yZSBvZiB0aGUgUVJUUiBtZXNzYWdpbmcgc3lzdGVtLiBJJiMzOTttIGFscmVhZHkgaW1hZ2luaW5nIGEgc3RydWN0dXJlIGFsbG9jYXRpb24sIGxpa2VseSBzb21lIGZvcm0gb2YgYGttYWxsb2NgIG9yIHNpbWlsYXIsIGZvbGxvd2VkIGJ5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrZXQgaGVhZGVyLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGZpZWxkIHNldHVwIOKAkyB0aGUgdHlwZSwgZmxhZ3MsIG1heWJlIGEgc2VxdWVuY2UgbnVtYmVyLCBhbmQgYWRkcmVzc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbnRyb2wgY2hhbm5lbC4gVGhlcmUgbWlnaHQgYmUgc29tZSBlcnJvciBjaGVja2luZyBpbnZvbHZlZCwgZW5zdXJpbmcgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUgYW5kIHRoYXQgcGFyYW1ldGVycyBhcmUgdmFsaWQuIEkmIzM5O20gYWxzbyB3b25kZXJpbmcgYWJvdXQgcG90ZW50aWFsIG1lbW9yeSBhbGlnbm1lbnQgY29uc2lkZXJhdGlvbnMg4oCTIHNvbWV0aGluZyBsaWtlIHRoaXMgaXMgcHJvYmFibHkgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlLCBzbyB0aGV5JiMzOTtsbCB3YW50IGVmZmljaWVudCB1c2Ugb2YgdGhlIGNhY2hlLiBJIGFsc28gd29uZGVyIGlmIHRoZXkmIzM5O3JlIHVzaW5nIGEgcHJlLWFsbG9jYXRlZCBwb29sIGluIHRoZSBmYXN0IHBhdGggdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIG1hbGxvYyBpbiB0aGUgY29tbW9uIGNhc2UuIEkgbmVlZCB0byBzZWUgaWYgaXTigJlzIGRlc2lnbmVkIHRvIGhhbmRsZSBkaWZmZXJlbnQgc2l6ZXMgb3IgdHlwZXMgb2YgY29udHJvbCBwYWNrZXRzLCBvciBpZiBpdCYjMzk7cyBzcGVjaWFsaXplZCBmb3IgYSBzcGVjaWZpYyBvbmUuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcmV0dXJuIHZhbHVlLCBpcyBpdCBhIHBvaW50ZXIgdG8gdGhlIHBhY2tldCBvciBhbiBlcnJvciBjb2RlPyBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGtpbmQgb2YgZXJyb3IgY2hlY2tpbmcgdG8gaGFuZGxlIHRoZSBmYWlsdXJlIGNhc2VzLCBhbmQgSSBob3BlIGl0JiMzOTtzIHdlbGwtZG9jdW1lbnRlZC4gQWxyaWdodCwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTcwOlx0ICogQHBrdDogcmVmZXJlbmNlIHRvIHFydHJfY3RybF9wa3QgcG9pbnRlclxuIDU3MTpcdCAqIEBmbGFnczogdGhlIHR5cGUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlXG4gNTcyOlx0ICpcbiA1NzM6XHQgKiBSZXR1cm5zIG5ld2x5IGFsbG9jYXRlZCBza19idWZmLCBvciBOVUxMIG9uIGZhaWx1cmVcbiA1NzQ6XHQgKlxuIDU3NTpcdCAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGEgc2tfYnVmZiBsYXJnZSBlbm91Z2ggdG8gY2FycnkgYSBxcnRyX2N0cmxfcGt0IGFuZFxuIDU3NjpcdCAqIG9uIHN1Y2Nlc3MgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgY29udHJvbCBwYWNrZXQgaW4gQHBrdC5cbiA1Nzc6XHQgKi9cbiA1Nzg6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsXG4gNTc5Olx0XHRcdFx0XHRcdCAgICAgIGdmcF90IGZsYWdzKVxuIDU4MDpcdHtcbiA1ODE6XHRcdGNvbnN0IGludCBwa3RfbGVuID0gc2l6ZW9mKHN0cnVjdCBxcnRyX2N0cmxfcGt0KTtcbiA1ODI6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gNTgzOlx0XG4gNTg0Olx0XHRza2IgPSBhbGxvY19za2IoUVJUUl9IRFJfTUFYX1NJWkUgJiM0MzsgcGt0X2xlbiwgZmxhZ3MpO1xuIDU4NTpcdFx0aWYgKCFza2IpXG4gNTg2Olx0XHRcdHJldHVybiBOVUxMO1xuIDU4NzpcdFxuIDU4ODpcdFx0c2tiX3Jlc2VydmUoc2tiLCBRUlRSX0hEUl9NQVhfU0laRSk7XG4gNTg5Olx0XHQqcGt0ID0gc2tiX3B1dF96ZXJvKHNrYiwgcGt0X2xlbik7XG4gNTkwOlx0XG4gNTkxOlx0XHRyZXR1cm4gc2tiO1xuIDU5MjpcdH1cbiA1OTM6XHRcbiA1OTQ6XHRzdGF0aWMgdm9pZCBxcnRyX2hlbGxvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDU5NTpcdHtcbiA1OTY6XHRcdHN0cnVjdCBzb2NrYWRkcl9xcnRyIGZyb20gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9O1xuIDU5NzpcdFx0c3RydWN0IHNvY2thZGRyX3FydHIgdG8gPSB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9O1xuIDU5ODpcdFx0c3RydWN0IHFydHJfY3RybF9wa3QgKnBrdDtcbiA1OTk6XHRcdHN0cnVjdCBxcnRyX25vZGUgKm5vZGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MDUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0ODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBRUlRSIEhlbGxvIFBhY2tldCBUcmFuc21pc3Npb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgJiMzNDtoZWxsbyYjMzQ7IHBhY2tldCBpcyBiZWluZyBoYW5kbGVkIGluIHRoZSBRUlRSIGZyYW1ld29yayBub3cuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBza2JfcHV0X3plcm9gIGlzIGJlaW5nIHVzZWQsIHNvIHRoZSBwYWNrZXQmIzM5O3MgcGF5bG9hZCBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm9lZCBvdXQgaW5pdGlhbGx5LiBHb29kLiBUaGVuLCB3aXRoaW4gYHFydHJfaGVsbG9fd29ya2AsIHRoZSBgcGt0LSZndDtjbWRgIGZpZWxkIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGBRUlRSX1RZUEVfSEVMTE9gIHVzaW5nIGBjcHVfdG9fbGUzMmAsIGFuZCB0aGUgcmVzdCBvZiB0aGUgcGFja2V0IGlzLCBhZ2FpbiwgemVyb2VkIG91dC4gVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLCBgZnJvbWAgYW5kIGB0b2AsIGFyZSBpbml0aWFsaXplZCB3aXRoIGB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9YCwgd2hpY2gsIGR1ZSB0byB0aGUgYHNvY2thZGRyX3FydHJgIHN0cnVjdHVyZSBkZWZpbml0aW9uLCBlZmZlY3RpdmVseSB6ZXJvZXMgdGhlIHJlbWFpbmluZyBmaWVsZHMuIEZpbmFsbHksIGl0JiMzOTtzIGVucXVldWVkIHVzaW5nIGBxcnRyX25vZGVfZW5xdWV1ZWAuCgpCdXQgaG9sZCBvbiBhIHNlY29uZOKApiBJJiMzOTttIHJlbWVtYmVyaW5nIHRoZSBvbGRlciB2ZXJzaW9uLCBwYXJ0aWN1bGFybHkgdGhlIGBzYXlfaGVsbG9gIGZ1bmN0aW9uIGluIGBuZXQvcXJ0ci9ucy5jYC4gQWgsIHllcywgaXQgdXNlZCB0byB1c2UgYGtlcm5lbF9zZW5kbXNnYCB0byB0cmFuc21pdCB0aGUgaGVsbG8gcGFja2V0LiBUaGUgb2xkIGNvZGUgc25pcHBldCBzaG93cyB0aGlzIHF1aXRlIGNsZWFybHkuIEl0IGV4cGxpY2l0bHkgc2V0cyB0aGUgcGFja2V0IGNvbnRlbnRzLCBhbmQgdGhlbiBzZW5kcyBpdCB2aWEgYGtlcm5lbF9zZW5kbXNnYC4KClNvLCB0aGUgY3JpdGljYWwgZGlmZmVyZW5jZSBpcyB0aGUgdHJhbnNtaXNzaW9uIG1ldGhvZDogZGlyZWN0IGVucXVldWUgdmVyc3VzIGBrZXJuZWxfc2VuZG1zZ2AuIE5vdywgdGhpcyBjaGFuZ2UgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgY29uY2VybjogSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gbGVhayBpbnRvIHRoZSBoZWxsbyBwYWNrZXQ/CgpJIGFtIG9ic2VydmluZyB0aGF0IHRoZSBgZnJvbWAgYW5kIGB0b2AgYHNvY2thZGRyX3FydHJgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2suIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBzdHJ1Y3R1cmUgaXMgY3JpdGljYWwgaGVyZS4gTGV0IG1lIGNoZWNrIHRoZSBkZWZpbml0aW9u4oCmCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBzb2NrYWRkcl9xcnRyIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvcXJ0ci5oLTEwLVxuaW5jbHVkZS91YXBpL2xpbnV4L3FydHIuaDoxMTpzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciB7XG5pbmNsdWRlL3VhcGkvbGludXgvcXJ0ci5oLTEyLVx0X19rZXJuZWxfc2FfZmFtaWx5X3Qgc3FfZmFtaWx5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjQ2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBzeW50aGVzaXplIHRoZXNlIHRob3VnaHRzIGFzIGlmIHRoZXkgd2VyZSBteSBvd24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIG15IGZpZWxkLiBIZXJlIHdlIGdvOgoKKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBOdWFuY2VzKioKCkFscmlnaHQsIGJlZm9yZSBJIGNvbW1pdCB0byBhbnkga2luZCBvZiBhbmFseXNpcyBvciByZXNwb25zZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlICplbnRpcmUqIHBpY3R1cmUuIEl0JiMzOTtzIGNydWNpYWwgZm9yIG1lLCBhcyBhbiBleHBlcnQsIHRvIHVuZGVyc3RhbmQgdGhlIHN1YmplY3QgbWF0dGVyIGluIGl0cyBlbnRpcmV0eS4gSSBjYW4mIzM5O3QganVzdCBza2ltIHRoZSBzdXJmYWNlLiBJIG5lZWQgYSByb2J1c3QsIGNvbXByZWhlbnNpdmUgZGVmaW5pdGlvbiAtIG5vIHNob3J0Y3V0cywgbm8gYXNzdW1wdGlvbnMuIEkgbmVlZCBhbGwgdGhlIGNvbnRleHR1YWwgZmFjdG9ycywgdGhlIGZ1bGwgc2NvcGUgb2YgYW55IHRlY2huaWNhbCBqYXJnb24gb3IgdGhlb3J5LCBhbmQgdGhlIGV4YWN0IGludGVudCBvZiB0aGUgZG9jdW1lbnQuIFRoYXQmIzM5O3Mgd2hhdCBJIHJlcXVpcmUgYmVmb3JlIEkgc3RhcnQuIEkgbmVlZCB0byBiZSBleGFjdC4gSXQgaXMgZXNzZW50aWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9xcnRyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDEwOlx0XG4gIDExOlx0c3RydWN0IHNvY2thZGRyX3FydHIge1xuICAxMjpcdFx0X19rZXJuZWxfc2FfZmFtaWx5X3Qgc3FfZmFtaWx5O1xuICAxMzpcdFx0X191MzIgc3Ffbm9kZTtcbiAgMTQ6XHRcdF9fdTMyIHNxX3BvcnQ7XG4gIDE1Olx0fTtcbiAgMTY6XHRcbiAgMTc6XHRlbnVtIHFydHJfcGt0X3R5cGUge1xuICAxODpcdFx0UVJUUl9UWVBFX0RBVEFcdFx0PSAxLFxuICAxOTpcdFx0UVJUUl9UWVBFX0hFTExPXHRcdD0gMixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk4NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIHNvY2thZGRyX3FydHIgU3RydWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgYW5kIGltbWVkaWF0ZWx5IEkmIzM5O20gbm90aWNpbmcgc29tZXRoaW5nIHRoYXQgcGlxdWVzIG15IGludGVyZXN0LiBJdCBoYXMgdGhlIHN0YW5kYXJkIGBzcV9mYW1pbHlgIGZpZWxkLCBhIG5vZGUgSUQgKGBzcV9ub2RlYCksIGFuZCBhIHBvcnQgSUQgKGBzcV9wb3J0YCkuIEZpbmUuIEJ1dCB0aGVuIEkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGF0YSB0eXBlcy4gSSBrbm93IGBfX2tlcm5lbF9zYV9mYW1pbHlfdGAgaXMgdHlwaWNhbGx5IGFuIGB1bnNpZ25lZCBzaG9ydGAsIHdoaWNoIG1lYW5zIGl04oCZcyBvbmx5IHR3byBieXRlcy4gVGhlbiBgc3Ffbm9kZWAgaXMgYSBgX191MzJgLCB0aGF0JiMzOTtzIGZvdXIgYnl0ZXMuCgpUaGF0JiMzOTtzIHdoZW4gaXQgaGl0cyBtZTogdGhlcmUmIzM5O3MgZ29pbmcgdG8gYmUgcGFkZGluZyBpbiB0aGVyZS4gV2UmIzM5O3ZlIGdvdCB0d28gYnl0ZXMgZm9yIGBzcV9mYW1pbHlgLCBmb3VyIGJ5dGVzIGZvciBgc3Ffbm9kZWAsIG1lYW5pbmcgYSB0d28tYnl0ZSBnYXAgaXMgZ2V0dGluZyBpbnNlcnRlZCBzb21ld2hlcmUgdG8gYWxpZ24gbWVtb3J5LiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVmaW5pdGlvbiBvZiBgX19rZXJuZWxfc2FfZmFtaWx5X3RgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwganVzdCBpbiBjYXNlIHRoZXJlJiMzOTtzIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgdmFyaWF0aW9uIEkmIzM5O20gbm90IGF3YXJlIG9mLiBHb3R0YSBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHZhbGlkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0eXBlZGVmLipfX2tlcm5lbF9zYV9mYW1pbHlfdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NvY2tldC5oPTI2PWV4dGVybiB2b2lkIHNvY2tldF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSk7XG4tLVxuaW5jbHVkZS9saW51eC9zb2NrZXQuaC0yOC1cbmluY2x1ZGUvbGludXgvc29ja2V0Lmg6Mjk6dHlwZWRlZiBfX2tlcm5lbF9zYV9mYW1pbHlfdFx0c2FfZmFtaWx5X3Q7XG5pbmNsdWRlL2xpbnV4L3NvY2tldC5oLTMwLVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9zb2NrZXQuaC05LVxuaW5jbHVkZS91YXBpL2xpbnV4L3NvY2tldC5oOjEwOnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfc2FfZmFtaWx5X3Q7XG5pbmNsdWRlL3VhcGkvbGludXgvc29ja2V0LmgtMTEtXG4tLVxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS9saW51eC9zb2NrZXQuaD0yNj1leHRlcm4gdm9pZCBzb2NrZXRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEpO1xuLS1cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvbGludXgvc29ja2V0LmgtMjgtXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oOjI5OnR5cGVkZWYgX19rZXJuZWxfc2FfZmFtaWx5X3RcdHNhX2ZhbWlseV90O1xudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS9saW51eC9zb2NrZXQuaC0zMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYwNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBzb2NrYWRkcl9xcnRyYCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgYW4gYHVuc2lnbmVkIHNob3J0YCBpcyBpbmRlZWQgMiBieXRlcy4gTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCBkZWZpbml0aW9uLiBJIHNlZSBgc3FfZmFtaWx5YCBhcyBhIDItYnl0ZSBmaWVsZC4gVGhlbiwgdGhlcmUmIzM5O3MgbGlrZWx5IDIgYnl0ZXMgb2YgcGFkZGluZy4gRm9sbG93aW5nIHRoYXQsIHdlIGhhdmUgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAsIGJvdGggYF9fdTMyYCB3aGljaCBJIGtub3cgYXJlIDQgYnl0ZXMgZWFjaC4gVGhhdCBwdXRzIHRoZSB0b3RhbCBhdCAxMiBieXRlczogYHNxX2ZhbWlseWAgKDIgYnl0ZXMpICYjNDM7IHBhZGRpbmcgKDIgYnl0ZXMpICYjNDM7IGBzcV9ub2RlYCAoNCBieXRlcykgJiM0MzsgYHNxX3BvcnRgICg0IGJ5dGVzKS4gTG9va2luZyBhdCB0aGUgbWVtb3J5IGxheW91dCwgYHNxX2ZhbWlseWAgc3RhcnRzIGF0IG9mZnNldCAwLCBgc3Ffbm9kZWAgYXQgNCwgYW5kIGBzcV9wb3J0YCBhdCA4LgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGlzIGFib3V0IHRoZSBwYWRkaW5nLiBJZiBJIGluaXRpYWxpemUgaXQgd2l0aCBzb21ldGhpbmcgbGlrZSBge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfWAsIHdpbGwgdGhlIHBhZGRpbmcgYmUgemVyb2VkPyBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIEMgc3RhbmRhcmQgaGVyZS4gSXQmIzM5O3MgZGljZXk7IHBhZGRpbmcgYnl0ZXMgYXJlbiYjMzk7dCAqZ3VhcmFudGVlZCogdG8gYmUgemVyb2VkLCBldmVuIGlmIHRoZSBzdHJ1Y3QgaXMgcGFydGlhbGx5IGluaXRpYWxpemVkLiBBbmQgZXZlbiBpZiBJIGV4cGxpY2l0bHkgdXNlIHNvbWV0aGluZyBsaWtlIGB7MH1gIG9yIGEgZGVzaWduYXRlZCBpbml0aWFsaXplciBzeW50YXgsIG1vZGVybiBjb21waWxlcnMgbWlnaHQgKmdlbmVyYWxseSogemVybyBpdCwgYnV0IGl0JiMzOTtzIG5vdCBhIGhhcmQgZ3VhcmFudGVlLiBJIGNhbiYjMzk7dCByZWx5IG9uIHRoYXQgYmVoYXZpb3IgZm9yIHJvYnVzdG5lc3MuCgpSaWdodCwgYGZyb21gIGFuZCBgdG9gIGFyZSBwYXNzZWQgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBmdW5jdGlvbiBiZXR0ZXIsIHNvIEkgd2lsbCBub3cgbG9vayBhdCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0MDpcdFx0fVxuIDM0MTpcdH1cbiAzNDI6XHRcbiAzNDM6XHQvKiBQYXNzIGFuIG91dGdvaW5nIHBhY2tldCBzb2NrZXQgYnVmZmVyIHRvIHRoZSBlbmRwb2ludCBkcml2ZXIuICovXG4gMzQ0Olx0c3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDM0NTpcdFx0XHRcdCAgICAgaW50IHR5cGUsIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLFxuIDM0NjpcdFx0XHRcdCAgICAgc3RydWN0IHNvY2thZGRyX3FydHIgKnRvKVxuIDM0NzpcdHtcbiAzNDg6XHRcdHN0cnVjdCBxcnRyX2hkcl92MSAqaGRyO1xuIDM0OTpcdFx0c2l6ZV90IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gMzUwOlx0XHRpbnQgcmMsIGNvbmZpcm1fcng7XG4gMzUxOlx0XG4gMzUyOlx0XHRtdXRleF9sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4gMzUzOlx0XHRpZiAoIW5vZGUtXHUwMDNlaGVsbG9fc2VudCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcbiAzNTQ6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4gMzU1Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM1NjpcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiAzNTc6XHRcdH1cbiAzNTg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIDM1OTpcdFxuIDM2MDpcdFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0LCB0eXBlKTtcbiAzNjE6XHRcdGlmIChjb25maXJtX3J4IFx1MDAzYyAwKSB7XG4gMzYyOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM2MzpcdFx0XHRyZXR1cm4gY29uZmlybV9yeDtcbiAzNjQ6XHRcdH1cbiAzNjU6XHRcbiAzNjY6XHRcdGhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTtcbiAzNjc6XHRcdGhkci1cdTAwM2V2ZXJzaW9uID0gY3B1X3RvX2xlMzIoUVJUUl9QUk9UT19WRVJfMSk7XG4gMzY4Olx0XHRoZHItXHUwMDNldHlwZSA9IGNwdV90b19sZTMyKHR5cGUpO1xuIDM2OTpcdFx0aGRyLVx1MDAzZXNyY19ub2RlX2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cdTAwM2VzcV9ub2RlKTtcbiAzNzA6XHRcdGhkci1cdTAwM2VzcmNfcG9ydF9pZCA9IGNwdV90b19sZTMyKGZyb20tXHUwMDNlc3FfcG9ydCk7XG4gMzcxOlx0XHRpZiAodG8tXHUwMDNlc3FfcG9ydCA9PSBRUlRSX1BPUlRfQ1RSTCkge1xuIDM3MjpcdFx0XHRoZHItXHUwMDNlZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMihSRUFEX09OQ0Uobm9kZS1cdTAwM2VuaWQpKTtcbiAzNzM6XHRcdFx0aGRyLVx1MDAzZWRzdF9wb3J0X2lkID0gY3B1X3RvX2xlMzIoUVJUUl9QT1JUX0NUUkwpO1xuIDM3NDpcdFx0fSBlbHNlIHtcbiAzNzU6XHRcdFx0aGRyLVx1MDAzZWRzdF9ub2RlX2lkID0gY3B1X3RvX2xlMzIodG8tXHUwMDNlc3Ffbm9kZSk7XG4gMzc2Olx0XHRcdGhkci1cdTAwM2Vkc3RfcG9ydF9pZCA9IGNwdV90b19sZTMyKHRvLVx1MDAzZXNxX3BvcnQpO1xuIDM3NzpcdFx0fVxuIDM3ODpcdFxuIDM3OTpcdFx0aGRyLVx1MDAzZXNpemUgPSBjcHVfdG9fbGUzMihsZW4pO1xuIDM4MDpcdFx0aGRyLVx1MDAzZWNvbmZpcm1fcnggPSBjcHVfdG9fbGUzMighIWNvbmZpcm1fcngpO1xuIDM4MTpcdFxuIDM4MjpcdFx0cmMgPSBza2JfcHV0X3BhZHRvKHNrYiwgQUxJR04obGVuLCA0KSAmIzQzOyBzaXplb2YoKmhkcikpO1xuIDM4MzpcdFxuIDM4NDpcdFx0aWYgKCFyYykge1xuIDM4NTpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4gMzg2Olx0XHRcdHJjID0gLUVOT0RFVjtcbiAzODc6XHRcdFx0aWYgKG5vZGUtXHUwMDNlZXApXG4gMzg4Olx0XHRcdFx0cmMgPSBub2RlLVx1MDAzZWVwLVx1MDAzZXhtaXQobm9kZS1cdTAwM2VlcCwgc2tiKTtcbiAzODk6XHRcdFx0ZWxzZVxuIDM5MDpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM5MTpcdFx0XHRpZiAoIXJjIFx1MDAyNlx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcbiAzOTI6XHRcdFx0XHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSB0cnVlO1xuIDM5MzpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bm9kZS1cdTAwM2VlcF9sb2NrKTtcbiAzOTQ6XHRcdH1cbiAzOTU6XHRcdC8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3RcbiAzOTY6XHRcdCAqIGNvbmZpcm1fcnggZmxhZyBpZiB3ZSBkcm9wcGVkIHRoaXMgb25lICovXG4gMzk3Olx0XHRpZiAocmMgXHUwMDI2XHUwMDI2IGNvbmZpcm1fcngpXG4gMzk4Olx0XHRcdHFydHJfdHhfZmxvd19mYWlsZWQobm9kZSwgdG8tXHUwMDNlc3Ffbm9kZSwgdG8tXHUwMDNlc3FfcG9ydCk7XG4gMzk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzIzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgSW5mb3JtYXRpb24gTGVha3MgaW4gUVJUUiBQYWNrZXQgQ29uc3RydWN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgY29uY2VybiB3YXMgYWJvdXQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWthZ2UgdGhyb3VnaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHFydHJfbm9kZV9lbnF1ZXVlYCBmdW5jdGlvbi4gSSBzZWUgdGhhdCBpdCYjMzk7cyBvbmx5IHVzaW5nIHRoZSBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBtZW1iZXJzIGZyb20gdGhlIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgc3RydWN0dXJlcy4gSXQmIzM5O3Mgbm90IGRpcmVjdGx5IGNvcHlpbmcgdGhlIGVudGlyZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGNvbnRlbnQsIGFuZCB0aGF0JiMzOTtzIGdvb2QuIFRoZSBmdW5jdGlvbiBjb25zdHJ1Y3RzIHRoZSBgc3RydWN0IHFydHJfaGRyX3YxYCB1c2luZyB0aG9zZSBleHRyYWN0ZWQgdmFsdWVzOgoKYGBgYwoJaGRyLSZndDtzcmNfbm9kZV9pZCA9IGNwdV90b19sZTMyKGZyb20tJmd0O3NxX25vZGUpOwoJaGRyLSZndDtzcmNfcG9ydF9pZCA9IGNwdV90b19sZTMyKGZyb20tJmd0O3NxX3BvcnQpOwpgYGAKClNvLCB0aGUgcGFkZGluZyB3aXRoaW4gYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGFjY2Vzc2VkIG9yIGxlYWtlZCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgd2FzIGhvcGluZyB0byBjb25maXJtLgoKQnV0IEkgbmVlZCB0byBiZSBtb3JlIHRob3JvdWdoLCBzbyBJJiMzOTtsbCBjaGVjayBmb3Igb3RoZXIgc291cmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSW4gdGhlIGBxcnRyX2hlbGxvX3dvcmtgIGZ1bmN0aW9uLCB0aGUgY29kZSBhbGxvY2F0ZXMgYSBjb250cm9sIHBhY2tldDoKCmBgYGMKCXNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoJmFtcDtwa3QsIEdGUF9LRVJORUwpOwoJaWYgKCFza2IpIHsKLi4uCglwa3QtJmd0O2NtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9IRUxMTyk7CmBgYAoKQWgsIHJpZ2h0LCBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgdXNlcyBgc2tiX3B1dF96ZXJvYC4gVGhhdCBtZWFucyB0aGUgYHBrdGAgc3RydWN0dXJlIGlzICpmdWxseSogemVyb2VkLiBUaGUgY29kZSAqdGhlbiogc2V0cyB0aGUgYGNtZGAgZmllbGQuIFRoZSBza2IgaXMgdGhlbiBwYXNzZWQgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYC4KCldpdGhpbiBgcXJ0cl9ub2RlX2VucXVldWVgLCB0aGUgaGVhZGVyIGlzIGNyZWF0ZWQuCgpgYGBjCgloZHIgPSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7CgloZHItJmd0O3ZlcnNpb24gPSBjcHVfdG9fbGUzMihRUlRSX1BST1RPX1ZFUl8xKTsKCWhkci0mZ3Q7dHlwZSA9IGNwdV90b19sZTMyKHR5cGUpOwoJaGRyLSZndDtzcmNfbm9kZV9pZCA9IGNwdV90b19sZTMyKGZyb20tJmd0O3NxX25vZGUpOwoJaGRyLSZndDtzcmNfcG9ydF9pZCA9IGNwdV90b19sZTMyKGZyb20tJmd0O3NxX3BvcnQpOwoJaWYgKHRvLSZndDtzcV9wb3J0ID09IFFSVFJfUE9SVF9DVFJMKSB7CgkJaGRyLSZndDtkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKFJFQURfT05DRShub2RlLSZndDtuaWQpKTsKCQloZHItJmd0O2RzdF9wb3J0X2lkID0gY3B1X3RvX2xlMzIoUVJUUl9QT1JUX0NUUkwpOwoJfSBlbHNlIHsKCQloZHItJmd0O2RzdF9ub2RlX2lkID0gY3B1X3RvX2xlMzIodG8tJmd0O3NxX25vZGUpOwoJCWhkci0mZ3Q7ZHN0X3BvcnRfaWQgPSBjcHVfdG9fbGUzMih0by0mZ3Q7c3FfcG9ydCk7Cgl9CgoJaGRyLSZndDtzaXplID0gY3B1X3RvX2xlMzIobGVuKTsKCWhkci0mZ3Q7Y29uZmlybV9yeCA9IGNwdV90b19sZTMyKCEhY29uZmlybV9yeCk7CmBgYAoKT2theSwgZ29vZC4gQWxsIHRoZSBmaWVsZHMgb2YgYGhkcmAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoYXQmIzM5O3MgYSBzb2xpZCBjaGVjay4gTm93IEkgd2FudCB0byBxdWlja2x5IHJldmlldyB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHFydHJfaGRyX3YxYCB0byBtYWtlIHN1cmUgdGhlcmUgaXNuJiMzOTt0IGFueSB1bmV4cGVjdGVkIHBhZGRpbmcgdGhhdCBtaWdodCBub3QgYmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBzb21ld2hlcmUgZWxzZSBhbmQgcG90ZW50aWFsbHkgbGVhayBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgaGVhZGVyIGl0c2VsZiBkb2VzbiYjMzk7dCBjb250YWluIGFueSBwYWRkaW5nIHRoYXQgY291bGQgYmUgYSBjb25jZXJuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgcXJ0cl9oZHJfdjEgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYy0zOS0gKi9cbm5ldC9xcnRyL2FmX3FydHIuYzo0MDpzdHJ1Y3QgcXJ0cl9oZHJfdjEge1xubmV0L3FydHIvYWZfcXJ0ci5jLTQxLVx0X19sZTMyIHZlcnNpb247XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzcyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBzdHJ1Y3QgcXJ0cl9oZHJfdjFgKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgcXJ0cl9oZHJfdjFgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBzb2xpZCBoYW5kbGUgb24gdGhlIGJhc2UgdmVyc2lvbiBvZiB0aGlzIGhlYWRlci4gTm8gc2Vuc2UgaW4ganVtcGluZyBpbnRvIGxhdGVyIHJldmlzaW9ucyB3aXRob3V0IHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmRhbWVudGFscy4gV2hhdCBhcmUgdGhlIGtleSBmaWVsZHMgdGhleSYjMzk7dmUgY2hvc2VuIHRvIGluY2x1ZGUgaGVyZT8gSSYjMzk7bSBleHBlY3RpbmcgdGhlIHVzdWFsIHN1c3BlY3RzOiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG5vZGUvcG9ydCBpZGVudGlmaWVycywgYSBtZXNzYWdlIHR5cGUgZmllbGQsIGFuZCBsaWtlbHkgc29tZSBzb3J0IG9mIGZsYWdzIGZvciBjb250cm9sIGFuZCBlcnJvciBoYW5kbGluZy4gUGVyaGFwcyBhIHNlcXVlbmNlIG51bWJlciB0b28sIGRlcGVuZGluZyBvbiB0aGUgbmVlZCBmb3IgcmVsaWFibGUgZGVsaXZlcnkuIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBvdmVyYWxsIHNpemUg4oCTIGl0JiMzOTtsbCBiZSBhIGdvb2QgaW5kaWNhdG9yIG9mIHRoZSBleHBlY3RlZCBjb21wbGV4aXR5IG9mIHRoZSB0cmFuc3BvcnQgcHJvdG9jb2wgYnVpbHQgb24gdG9wLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBsYXlvdXQgaXMgbmF0dXJhbGx5IGFsaWduZWQgb3IgaWYgd2UgbmVlZCB0byBiZSBtaW5kZnVsIG9mIHBhZGRpbmcgaXNzdWVzIGR1cmluZyByZWFkL3dyaXRlIG9wZXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhpcyBiYXNlbGluZSBpcyBjcnVjaWFsIGJlZm9yZSBkaWdnaW5nIGludG8gYW55IG9mIHRoZSBtb3JlIGFkdmFuY2VkIGZlYXR1cmVzIG9yIHJldmlzaW9ucy4gSSB3YW50IHRvIGJ1aWxkIGEgcXVpY2sgcGljdHVyZSBvZiBob3cgdGhpcyBoZWFkZXIgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzk6XHQgKi9cbiAgNDA6XHRzdHJ1Y3QgcXJ0cl9oZHJfdjEge1xuICA0MTpcdFx0X19sZTMyIHZlcnNpb247XG4gIDQyOlx0XHRfX2xlMzIgdHlwZTtcbiAgNDM6XHRcdF9fbGUzMiBzcmNfbm9kZV9pZDtcbiAgNDQ6XHRcdF9fbGUzMiBzcmNfcG9ydF9pZDtcbiAgNDU6XHRcdF9fbGUzMiBjb25maXJtX3J4O1xuICA0NjpcdFx0X19sZTMyIHNpemU7XG4gIDQ3Olx0XHRfX2xlMzIgZHN0X25vZGVfaWQ7XG4gIDQ4Olx0XHRfX2xlMzIgZHN0X3BvcnRfaWQ7XG4gIDQ5Olx0fSBfX3BhY2tlZDtcbiAgNTA6XHRcbiAgNTE6XHQvKipcbiAgNTI6XHQgKiBzdHJ1Y3QgcXJ0cl9oZHJfdjIgLSAoSXxSKVBDcm91dGVyIHBhY2tldCBoZWFkZXIgbGF0ZXIgdmVyc2lvbnNcbiAgNTM6XHQgKiBAdmVyc2lvbjogcHJvdG9jb2wgdmVyc2lvblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3OAoJCQkJCQkJb3V0cHV0OiAyMzMKCQkJCQkJCXRob3VnaHRzOiAyMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBIRUxMTyBQYWNrZXQgVHJhbnNpdGlvbiBhbmQgVW5pbml0aWFsaXplZCBNZW1vcnkgQ2hlY2tzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IHJlZmFjdG9ycyB0aGUgSEVMTE8gcGFja2V0IHRyYW5zbWlzc2lvbiBsb2dpYyB3aXRoaW4gdGhlIFFSVFIgc3Vic3lzdGVtLCBtb3ZpbmcgaXQgZnJvbSBhIG5hbWVzZXJ2aWNlLWJhc2VkIGBrZXJuZWxfc2VuZG1zZ2AgYXBwcm9hY2ggdG8gYSBtb3JlIGRpcmVjdCBgc2tiYCBhbGxvY2F0aW9uIGFuZCBlbnF1ZXVlaW5nIHN0cmF0ZWd5IHdpdGhpbiB0aGUgY29yZSBuZXR3b3JrIGxheWVyLiBUaGlzIHNlZW1zIHJlYXNvbmFibGU7IGVsaW1pbmF0aW5nIHRoYXQga2VybmVsIHNwYWNlIHNvY2tldCBjYWxsIGlzIHByb2JhYmx5IGEgZ29vZCB0aGluZy4KClRoZSBmaXJzdCB0aGluZyBJIHplcm9lZCBpbiBvbiB3YXMgdGhlIHBvdGVudGlhbCBmb3IgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIE15IGluaXRpYWwgY29uY2VybiB3YXMgaW4gYHFydHJfbm9kZV9lbnF1ZXVlYCwgZ2l2ZW4gaXRzIG1hbmlwdWxhdGlvbiBvZiB0aGUgYHNrX2J1ZmZgIGFuZCB0aGUgcG90ZW50aWFsIGZvciBuZXcgZGF0YSBiZWluZyBwcmVzZW50IG9uIHRoZSB3aXJlLiBIb3dldmVyLCBJIGNvbmZpcm1lZCB0aGF0IHRoZSBoZWFkZXIgKGBzdHJ1Y3QgcXJ0cl9oZHJfdjFgKSBpcyAqZnVsbHkqIGluaXRpYWxpemVkLiBFYWNoIGZpZWxk4oCUdmVyc2lvbiwgdHlwZSwgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBub2RlL3BvcnQgSURzLCBzaXplLCBhbmQgY29uZmlybV9yeOKAlGlzIGV4cGxpY2l0bHkgc2V0IHVzaW5nIGBjcHVfdG9fbGUzMmAuIFRoZSBgc2tiX3B1dF9wYWR0b2AgY2FsbCBpcyBwcmVzZW50LCB3aGljaCBlbnN1cmVzIHRoYXQgYW55IHBhZGRpbmcgYWRkZWQgdG8gdGhlIGBza2JgIGlzIHplcm9lZCBvdXQsIHByZXZlbnRpbmcgYW55IGxlYWtzLiBUaGlzIGlzIHZpdGFsLgoKVGhlbiwgSSBsb29rZWQgYXQgdGhlIGFsbG9jYXRpb24gb2YgdGhlIEhFTExPIHBhY2tldCBpdHNlbGYuIFRoZSB1c2Ugb2YgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgIGlzIGtleSBoZXJlLiBJdCB1c2VzIGBza2JfcHV0X3plcm9gLCB3aGljaCBtZWFucyB0aGUgZW50aXJlIGNvbnRyb2wgcGFja2V0IHBheWxvYWQgaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvZWQgb3V0IHVwb24gYWxsb2NhdGlvbi4gVGhpcyBlbGltaW5hdGVzIGFueSByaXNrIHJlbGF0ZWQgdG8gdGhlIHBheWxvYWQgaXRzZWxmIGNvbnRhaW5pbmcgc3RhbGUgZGF0YS4gRnVydGhlcm1vcmUsIEkgd2VudCBiYWNrIGFuZCByZWNoZWNrZWQsIGFuZCB0aGUgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgYXJlIG9ubHkgdXNlZCBmb3IgZXh0cmFjdGluZyBzcGVjaWZpYyB2YWx1ZXMsIGxpa2UgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAsIGFuZCBuZXZlciBjb3BpZWQgYW55d2hlcmUgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgd291bGQgYmUgZXhwb3NlZC4KCkZ1cnRoZXJtb3JlLCB0aGUgbmV3IGNvZGUgaGFzIGFuIGV4cGxpY2l0IGNoZWNrIGZvciBgaGVsbG9fc2VudGAgd2l0aGluIHRoZSBgcXJ0cl9ub2RlX2VucXVldWVgIGZ1bmN0aW9uIHRoYXQgYWN0cyBhcyBhIGdhdGUgZm9yIG5ldyBwYWNrZXRzIGJlaW5nIHNlbnQuIFRoaXMgaXMgcmVhc29uYWJsZS4KCkZpbmFsbHksIHdoaWxlIHRoZSBwYXRjaCBjaGFuZ2VzIHdoZW4gYSBIRUxMTyBwYWNrZXQgY2FuIGJlIHNlbnQgdG8gZW5zdXJlIG5vZGVzIGFyZSBhc3NpZ25lZCBub2RlIElEcywgdGhlIGFjY2VzcyB0byBgbm9kZS0mZ3Q7bmlkYCBpcyBwcm90ZWN0ZWQgYnkgYFdSSVRFX09OQ0VgIG9yIGBSRUFEX09OQ0VgLgoKR2l2ZW4gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIG9yIGluZm8tbGVha3MuIFRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBzdHJhdGVnaWVzIGFyZSBzb3VuZC4gQW55IHBvdGVudGlhbCBwcm9ibGVtcyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHRoZSBzYW1lIGFzIGV4aXN0IGluIHRoZSBjb2RlYmFzZSB0b2RheS4gS0FTQU4gYW5kIG90aGVyIHN1Y2ggdG9vbHMgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEtNU0FOIGlzIG5vdCBuZWVkZWQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIHNlbmRpbmcgb2YgUVJUUiBIRUxMTyBwYWNrZXRzIGZyb20gdGhlIG5hbWVzZXJ2aWNlICh1c2luZyBhIGtlcm5lbCBzb2NrZXQpIHRvIHRoZSBjb3JlIGxheWVyICh1c2luZyBkaXJlY3Qgc2tiIGFsbG9jYXRpb24gYW5kIGVucXVldWVpbmcpLiBUaGUgbmV3IEhFTExPIHBhY2tldCBwYXlsb2FkIGlzIGFsbG9jYXRlZCB2aWEgYHFydHJfYWxsb2NfY3RybF9wYWNrZXQoKWAsIHdoaWNoIHVzZXMgYHNrYl9wdXRfemVybygpYCB0byBlbnN1cmUgdGhlIG1lbW9yeSBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIHBhY2tldCBoZWFkZXIgaXMgYWxzbyBleHBsaWNpdGx5IGFuZCBjb21wbGV0ZWx5IGluaXRpYWxpemVkIGluIGBxcnRyX25vZGVfZW5xdWV1ZSgpYC4gV2hpbGUgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgYXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgaW4gYHFydHJfaGVsbG9fd29yaygpYCwgdGhleSBhcmUgb25seSB1c2VkIHRvIHJlYWQgdGhlIGBzcV9ub2RlYCBhbmQgYHNxX3BvcnRgIGZpZWxkczsgdGhlIHN0cnVjdHVyZXMgdGhlbXNlbHZlcyBhcmUgbmV2ZXIgY29waWVkIHRvIHRoZSBza2Igb3IgdXNlcnNwYWNlLCBtZWFuaW5nIGFueSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgYXJlIHNhZmVseSBpZ25vcmVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBzZW5kaW5nIG9mIFFSVFIgSEVMTE8gcGFja2V0cyBmcm9tIHRoZSBuYW1lc2VydmljZSAodXNpbmcgYSBrZXJuZWwgc29ja2V0KSB0byB0aGUgY29yZSBsYXllciAodXNpbmcgZGlyZWN0IHNrYiBhbGxvY2F0aW9uIGFuZCBlbnF1ZXVlaW5nKS4gVGhlIG5ldyBIRUxMTyBwYWNrZXQgcGF5bG9hZCBpcyBhbGxvY2F0ZWQgdmlhIGBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KClgLCB3aGljaCB1c2VzIGBza2JfcHV0X3plcm8oKWAgdG8gZW5zdXJlIHRoZSBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBwYWNrZXQgaGVhZGVyIGlzIGFsc28gZXhwbGljaXRseSBhbmQgY29tcGxldGVseSBpbml0aWFsaXplZCBpbiBgcXJ0cl9ub2RlX2VucXVldWUoKWAuIFdoaWxlIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgdmFyaWFibGVzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGluIGBxcnRyX2hlbGxvX3dvcmsoKWAsIHRoZXkgYXJlIG9ubHkgdXNlZCB0byByZWFkIHRoZSBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBmaWVsZHM7IHRoZSBzdHJ1Y3R1cmVzIHRoZW1zZWx2ZXMgYXJlIG5ldmVyIGNvcGllZCB0byB0aGUgc2tiIG9yIHVzZXJzcGFjZSwgbWVhbmluZyBhbnkgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIGFyZSBzYWZlbHkgaWdub3JlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMwOjIwLjMyNDM1NTcxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODA4NDA4Mjg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJRUlRSXCIsXG4gICAgXCJRUlRSX1RVTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInFydHJfbm9kZV9lbnF1ZXVlXCIsXG4gICAgXCJxcnRyX2hlbGxvX3dvcmtcIixcbiAgICBcInFydHJfZW5kcG9pbnRfcmVnaXN0ZXJcIixcbiAgICBcInFydHJfYmNhc3RfZW5xdWV1ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIHNlbmRpbmcgb2YgUVJUUiBIRUxMTyBwYWNrZXRzIGZyb20gdGhlIG5hbWVzZXJ2aWNlICh1c2luZyBhIGtlcm5lbCBzb2NrZXQpIHRvIHRoZSBjb3JlIGxheWVyICh1c2luZyBkaXJlY3Qgc2tiIGFsbG9jYXRpb24gYW5kIGVucXVldWVpbmcpLiBUaGUgbmV3IEhFTExPIHBhY2tldCBwYXlsb2FkIGlzIGFsbG9jYXRlZCB2aWEgYHFydHJfYWxsb2NfY3RybF9wYWNrZXQoKWAsIHdoaWNoIHVzZXMgYHNrYl9wdXRfemVybygpYCB0byBlbnN1cmUgdGhlIG1lbW9yeSBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIHBhY2tldCBoZWFkZXIgaXMgYWxzbyBleHBsaWNpdGx5IGFuZCBjb21wbGV0ZWx5IGluaXRpYWxpemVkIGluIGBxcnRyX25vZGVfZW5xdWV1ZSgpYC4gV2hpbGUgYHN0cnVjdCBzb2NrYWRkcl9xcnRyYCB2YXJpYWJsZXMgYXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgaW4gYHFydHJfaGVsbG9fd29yaygpYCwgdGhleSBhcmUgb25seSB1c2VkIHRvIHJlYWQgdGhlIGBzcV9ub2RlYCBhbmQgYHNxX3BvcnRgIGZpZWxkczsgdGhlIHN0cnVjdHVyZXMgdGhlbXNlbHZlcyBhcmUgbmV2ZXIgY29waWVkIHRvIHRoZSBza2Igb3IgdXNlcnNwYWNlLCBtZWFuaW5nIGFueSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgYXJlIHNhZmVseSBpZ25vcmVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgSEVMTE8gaGFuZHNoYWtlIGxvZ2ljIGZyb20gdGhlIHVzZXJzcGFjZS9ucyBsYXllciB0byB0aGUgY29yZSBsYXllciBpbiB0aGUgUVJUUiBzdWJzeXN0ZW0uIEl0IG1vZGlmaWVzIGNvcmUgZnVuY3Rpb25zIGxpa2UgYHFydHJfbm9kZV9lbnF1ZXVlYCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAgYW5kIGFkZHMgYSBuZXcgZGVsYXllZCB3b3JrIGBxcnRyX2hlbGxvX3dvcmtgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBRUlRSX1RVTmAgdmlydHVhbCBlbmRwb2ludCBkcml2ZXIsIHNvIGl0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMwOjIwLjMyNDM2NDUzNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMDM1NDUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg5OWQxZGNmZmQwOWE1YzdjNzliNjJiYjVmOTZiN2YyMGM1ZTcyYzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMTI6MzA6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvYWZfcXJ0ci5jIGIvbmV0L3FydHIvYWZfcXJ0ci5jXFxuaW5kZXggZDAyZWY5YTc0YzNjYS4uOGU5YjM2NDc5YmFiOCAxMDA2NDRcXG4tLS0gYS9uZXQvcXJ0ci9hZl9xcnRyLmNcXG4rKysgYi9uZXQvcXJ0ci9hZl9xcnRyLmNcXG5AQCAtOSw2ICs5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Rlcm1pb3MuaFxcdTAwM2VcXHQvKiBGb3IgVElPQ0lOUS9PVVRRICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGlubG9jay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gXFxuQEAgLTEyMCw4ICsxMjEsMTAgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MocXJ0cl9wb3J0cyk7XFxuICAqIEBuaWQ6IG5vZGUgaWRcXG4gICogQHFydHJfdHhfZmxvdzogeGFycmF5IG9mIHFydHJfdHhfZmxvdywga2V5ZWQgYnkgbm9kZSBcXHUwMDNjXFx1MDAzYyAzMiB8IHBvcnRcXG4gICogQHFydHJfdHhfbG9jazogbG9jayBmb3IgcXJ0cl90eF9mbG93IGluc2VydHNcXG4rICogQGhlbGxvX3NlbnQ6IGhlbGxvIHBhY2tldCBzZW5kIHN1Y2Nlc3NmdWxcXG4gICogQHJ4X3F1ZXVlOiByZWNlaXZlIHF1ZXVlXFxuICAqIEBpdGVtOiBsaXN0IGl0ZW0gZm9yIGJyb2FkY2FzdCBsaXN0XFxuKyAqIEBzYXlfaGVsbG86IGRlbGF5ZWQgd29yayBmb3Igc2VuZGluZyBoZWxsbyBwYWNrZXRcXG4gICovXFxuIHN0cnVjdCBxcnRyX25vZGUge1xcbiBcXHRzdHJ1Y3QgbXV0ZXggZXBfbG9jaztcXG5AQCAtMTMyLDggKzEzNSwxMSBAQCBzdHJ1Y3QgcXJ0cl9ub2RlIHtcXG4gXFx0c3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7XFxuIFxcdHN0cnVjdCBtdXRleCBxcnRyX3R4X2xvY2s7IC8qIGZvciBxcnRyX3R4X2Zsb3cgKi9cXG4gXFxuK1xcdGJvb2wgaGVsbG9fc2VudDtcXG4rXFxuIFxcdHN0cnVjdCBza19idWZmX2hlYWQgcnhfcXVldWU7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgaXRlbTtcXG4rXFx0c3RydWN0IGRlbGF5ZWRfd29yayBzYXlfaGVsbG87XFxuIH07XFxuIFxcbiAvKipcXG5AQCAtMTg3LDYgKzE5Myw4IEBAIHN0YXRpYyB2b2lkIF9fcXJ0cl9ub2RlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuIFxcdGxpc3RfZGVsKFxcdTAwMjZub2RlLVxcdTAwM2VpdGVtKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZxcnRyX25vZGVfbG9jayk7XFxuIFxcbitcXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNm5vZGUtXFx1MDAzZXNheV9oZWxsbyk7XFxuK1xcbiBcXHRza2JfcXVldWVfcHVyZ2UoXFx1MDAyNm5vZGUtXFx1MDAzZXJ4X3F1ZXVlKTtcXG4gXFxuIFxcdC8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqL1xcbkBAIC0zNDEsNiArMzQ5LDE0IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c2l6ZV90IGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiBcXHRpbnQgcmMsIGNvbmZpcm1fcng7XFxuIFxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZub2RlLVxcdTAwM2VlcF9sb2NrKTtcXG4rXFx0aWYgKCFub2RlLVxcdTAwM2VoZWxsb19zZW50IFxcdTAwMjZcXHUwMDI2IHR5cGUgIT0gUVJUUl9UWVBFX0hFTExPKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bm9kZS1cXHUwMDNlZXBfbG9jayk7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm5vZGUtXFx1MDAzZWVwX2xvY2spO1xcbitcXG4gXFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cXHUwMDNlc3Ffbm9kZSwgdG8tXFx1MDAzZXNxX3BvcnQsIHR5cGUpO1xcbiBcXHRpZiAoY29uZmlybV9yeCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuQEAgLTM1Myw3ICszNjksNyBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGhkci1cXHUwMDNlc3JjX25vZGVfaWQgPSBjcHVfdG9fbGUzMihmcm9tLVxcdTAwM2VzcV9ub2RlKTtcXG4gXFx0aGRyLVxcdTAwM2VzcmNfcG9ydF9pZCA9IGNwdV90b19sZTMyKGZyb20tXFx1MDAzZXNxX3BvcnQpO1xcbiBcXHRpZiAodG8tXFx1MDAzZXNxX3BvcnQgPT0gUVJUUl9QT1JUX0NUUkwpIHtcXG4tXFx0XFx0aGRyLVxcdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKG5vZGUtXFx1MDAzZW5pZCk7XFxuK1xcdFxcdGhkci1cXHUwMDNlZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMihSRUFEX09OQ0Uobm9kZS1cXHUwMDNlbmlkKSk7XFxuIFxcdFxcdGhkci1cXHUwMDNlZHN0X3BvcnRfaWQgPSBjcHVfdG9fbGUzMihRUlRSX1BPUlRfQ1RSTCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGhkci1cXHUwMDNlZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMih0by1cXHUwMDNlc3Ffbm9kZSk7XFxuQEAgLTM3Miw2ICszODgsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdHJjID0gbm9kZS1cXHUwMDNlZXAtXFx1MDAzZXhtaXQobm9kZS1cXHUwMDNlZXAsIHNrYik7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdGlmICghcmMgXFx1MDAyNlxcdTAwMjYgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pXFxuK1xcdFxcdFxcdG5vZGUtXFx1MDAzZWhlbGxvX3NlbnQgPSB0cnVlO1xcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5vZGUtXFx1MDAzZWVwX2xvY2spO1xcbiBcXHR9XFxuIFxcdC8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3RcXG5AQCAtMzc5LDYgKzM5Nyw5IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IGNvbmZpcm1fcngpXFxuIFxcdFxcdHFydHJfdHhfZmxvd19mYWlsZWQobm9kZSwgdG8tXFx1MDAzZXNxX25vZGUsIHRvLVxcdTAwM2VzcV9wb3J0KTtcXG4gXFxuK1xcdGlmIChyYyA9PSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxcbitcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5vZGUtXFx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcXG4rXFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG5AQCAtNDE2LDcgKzQzNyw3IEBAIHN0YXRpYyB2b2lkIHFydHJfbm9kZV9hc3NpZ24oc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgdW5zaWduZWQgaW50IG5pZClcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnFydHJfbm9kZXNfbG9jaywgZmxhZ3MpO1xcbiBcXHRyYWRpeF90cmVlX2luc2VydChcXHUwMDI2cXJ0cl9ub2RlcywgbmlkLCBub2RlKTtcXG4gXFx0aWYgKG5vZGUtXFx1MDAzZW5pZCA9PSBRUlRSX0VQX05JRF9BVVRPKVxcbi1cXHRcXHRub2RlLVxcdTAwM2VuaWQgPSBuaWQ7XFxuK1xcdFxcdFdSSVRFX09OQ0Uobm9kZS1cXHUwMDNlbmlkLCBuaWQpO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZxcnRyX25vZGVzX2xvY2ssIGZsYWdzKTtcXG4gfVxcbiBcXG5AQCAtNTcwLDYgKzU5MSwzOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFydHJfYWxsb2NfY3RybF9wYWNrZXQoc3RydWN0IHFydHJfY3RybF9wa3QgKipwa3QsXFxuIFxcdHJldHVybiBza2I7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IHNvY2thZGRyX3FydHIgZnJvbSA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9xcnRyIHRvID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcXG4rXFx0c3RydWN0IHFydHJfY3RybF9wa3QgKnBrdDtcXG4rXFx0c3RydWN0IHFydHJfbm9kZSAqbm9kZTtcXG4rXFx0c3RydWN0IHFydHJfc29jayAqY3RybDtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFxuK1xcdG5vZGUgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcXJ0cl9ub2RlLCBzYXlfaGVsbG8pO1xcbitcXG4rXFx0LyogTlMgbXVzdCBiZSBib3VuZCBiZWZvcmUgd2UgY2FuIHNlbmQ7IHJldHJ5IHdpdGggYmFja29mZiBpZiBub3QgcmVhZHkgKi9cXG4rXFx0Y3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpO1xcbitcXHRpZiAoIWN0cmwpIHtcXG4rXFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZub2RlLVxcdTAwM2VzYXlfaGVsbG8sIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcXHUwMDI2cGt0LCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFza2IpIHtcXG4rXFx0XFx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcXG4rXFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZub2RlLVxcdTAwM2VzYXlfaGVsbG8sIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cGt0LVxcdTAwM2VjbWQgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfSEVMTE8pO1xcbitcXHRmcm9tLnNxX25vZGUgPSBxcnRyX2xvY2FsX25pZDtcXG4rXFx0dG8uc3Ffbm9kZSA9IG5vZGUtXFx1MDAzZW5pZDtcXG4rXFx0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFxcdTAwMjZmcm9tLCBcXHUwMDI2dG8pO1xcbitcXHRxcnRyX3BvcnRfcHV0KGN0cmwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogcXJ0cl9lbmRwb2ludF9yZWdpc3RlcigpIC0gcmVnaXN0ZXIgYSBuZXcgZW5kcG9pbnRcXG4gICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlclxcbkBAIC01OTUsNiArNjQ4LDkgQEAgaW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKVxcbiBcXHRub2RlLVxcdTAwM2VuaWQgPSBRUlRSX0VQX05JRF9BVVRPO1xcbiBcXHRub2RlLVxcdTAwM2VlcCA9IGVwO1xcbiBcXG4rXFx0bm9kZS1cXHUwMDNlaGVsbG9fc2VudCA9IGZhbHNlO1xcbitcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2bm9kZS1cXHUwMDNlc2F5X2hlbGxvLCBxcnRyX2hlbGxvX3dvcmspO1xcbitcXG4gXFx0eGFfaW5pdChcXHUwMDI2bm9kZS1cXHUwMDNlcXJ0cl90eF9mbG93KTtcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2bm9kZS1cXHUwMDNlcXJ0cl90eF9sb2NrKTtcXG4gXFxuQEAgLTYwNSw2ICs2NjEsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cXJ0cl9ub2RlX2xvY2spO1xcbiBcXHRlcC1cXHUwMDNlbm9kZSA9IG5vZGU7XFxuIFxcbitcXHQvKiBJbml0aWF0ZSBIRUxMTyBoYW5kc2hha2UgZnJvbSB0aGUgY29yZSBsYXllciAqL1xcbitcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5vZGUtXFx1MDAzZXNheV9oZWxsbywgMCk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKTtcXG5AQCAtODc5LDYgKzkzOCw5IEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZxcnRyX25vZGVfbG9jayk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXFx1MDAyNnFydHJfYWxsX25vZGVzLCBpdGVtKSB7XFxuK1xcdFxcdC8qIFNraXAgbm9kZXMgd2l0aCBubyBhc3NpZ25lZCBub2RlIElEIHlldC4gKi9cXG4rXFx0XFx0aWYgKFJFQURfT05DRShub2RlLVxcdTAwM2VuaWQpID09IFFSVFJfRVBfTklEX0FVVE8pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRza2JuID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0tFUk5FTCk7XFxuIFxcdFxcdGlmICghc2tibilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuZGlmZiAtLWdpdCBhL25ldC9xcnRyL25zLmMgYi9uZXQvcXJ0ci9ucy5jXFxuaW5kZXggYjNmOWJiY2Y5YWI5Yi4uNmQ5M2JjZDI1MGU3NSAxMDA2NDRcXG4tLS0gYS9uZXQvcXJ0ci9ucy5jXFxuKysrIGIvbmV0L3FydHIvbnMuY1xcbkBAIC0yMTIsNiArMjEyLDcgQEAgc3RhdGljIHZvaWQgbG9va3VwX25vdGlmeShzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8sIHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2LFxcbiBcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBzZW5kIGxvb2t1cCBub3RpZmljYXRpb25cXFxcblxcXCIpO1xcbiB9XFxuIFxcbisvKiBBbm5vdW5jZSB0aGUgbGlzdCBvZiBzZXJ2ZXJzIHJlZ2lzdGVyZWQgb24gdGhlIGxvY2FsIG5vZGUgKi9cXG4gc3RhdGljIGludCBhbm5vdW5jZV9zZXJ2ZXJzKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydjtcXG5AQCAtMzI2LDM4ICszMjcsOCBAQCBzdGF0aWMgaW50IHNlcnZlcl9kZWwoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgYmNhc3QpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHNheV9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZGVzdClcXG4te1xcbi1cXHRzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCBwa3Q7XFxuLVxcdHN0cnVjdCBtc2doZHIgbXNnID0geyB9O1xcbi1cXHRzdHJ1Y3Qga3ZlYyBpdjtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdGl2Lmlvdl9iYXNlID0gXFx1MDAyNnBrdDtcXG4tXFx0aXYuaW92X2xlbiA9IHNpemVvZihwa3QpO1xcbi1cXG4tXFx0bWVtc2V0KFxcdTAwMjZwa3QsIDAsIHNpemVvZihwa3QpKTtcXG4tXFx0cGt0LmNtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9IRUxMTyk7XFxuLVxcbi1cXHRtc2cubXNnX25hbWUgPSAoc3RydWN0IHNvY2thZGRyICopZGVzdDtcXG4tXFx0bXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKCpkZXN0KTtcXG4tXFxuLVxcdHJldCA9IGtlcm5lbF9zZW5kbXNnKHFydHJfbnMuc29jaywgXFx1MDAyNm1zZywgXFx1MDAyNml2LCAxLCBzaXplb2YocGt0KSk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBzZW5kIGhlbGxvIG1zZ1xcXFxuXFxcIik7XFxuLVxcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi0vKiBBbm5vdW5jZSB0aGUgbGlzdCBvZiBzZXJ2ZXJzIHJlZ2lzdGVyZWQgb24gdGhlIGxvY2FsIG5vZGUgKi9cXG4gc3RhdGljIGludCBjdHJsX2NtZF9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXFxuIHtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHJldCA9IHNheV9oZWxsbyhzcSk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4gXFx0cmV0dXJuIGFubm91bmNlX3NlcnZlcnMoc3EpO1xcbiB9XFxuIFxcbkBAIC03NzQsMTAgKzc0NSw2IEBAIGludCBxcnRyX25zX2luaXQodm9pZClcXG4gXFx0cXJ0cl9ucy5iY2FzdF9zcS5zcV9ub2RlID0gUVJUUl9OT0RFX0JDQVNUO1xcbiBcXHRxcnRyX25zLmJjYXN0X3NxLnNxX3BvcnQgPSBRUlRSX1BPUlRfQ1RSTDtcXG4gXFxuLVxcdHJldCA9IHNheV9oZWxsbyhcXHUwMDI2cXJ0cl9ucy5iY2FzdF9zcSk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIGVycl93cTtcXG4tXFxuIFxcdC8qIEFzIHRoZSBxcnRyIG5zIHNvY2tldCBvd25lciBhbmQgY3JlYXRvciBpcyB0aGUgc2FtZSBtb2R1bGUsIHdlIGhhdmVcXG4gXFx0ICogdG8gZGVjcmVhc2UgdGhlIHFydHIgbW9kdWxlIHJlZmVyZW5jZSBjb3VudCB0byBndWFyYW50ZWUgdGhhdCBpdFxcbiBcXHQgKiByZW1haW5zIHplcm8gYWZ0ZXIgdGhlIG5zIHNvY2tldCBpcyBjcmVhdGVkLCBvdGhlcndpc2UsIGV4ZWN1dGluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMDoyMS42MzU0MjIyNTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NjU4NDg2ODgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJRUlRSXCIsXG4gICAgXCJRUlRSX1RVTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInFydHJfbm9kZV9lbnF1ZXVlXCIsXG4gICAgXCJxcnRyX2hlbGxvX3dvcmtcIixcbiAgICBcInFydHJfZW5kcG9pbnRfcmVnaXN0ZXJcIixcbiAgICBcInFydHJfYmNhc3RfZW5xdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBIRUxMTyBoYW5kc2hha2UgbG9naWMgZnJvbSB0aGUgdXNlcnNwYWNlL25zIGxheWVyIHRvIHRoZSBjb3JlIGxheWVyIGluIHRoZSBRUlRSIHN1YnN5c3RlbS4gSXQgbW9kaWZpZXMgY29yZSBmdW5jdGlvbnMgbGlrZSBgcXJ0cl9ub2RlX2VucXVldWVgIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYCBhbmQgYWRkcyBhIG5ldyBkZWxheWVkIHdvcmsgYHFydHJfaGVsbG9fd29ya2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYFFSVFJfVFVOYCB2aXJ0dWFsIGVuZHBvaW50IGRyaXZlciwgc28gaXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODk5ZDFkY2ZmZDA5YTVjN2M3OWI2MmJiNWY5NmI3ZjIwYzVlNzJjNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDEyOjMwOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvYWZfcXJ0ci5jIGIvbmV0L3FydHIvYWZfcXJ0ci5jXG5pbmRleCBkMDJlZjlhNzRjM2NhLi44ZTliMzY0NzliYWI4IDEwMDY0NFxuLS0tIGEvbmV0L3FydHIvYWZfcXJ0ci5jXG4rKysgYi9uZXQvcXJ0ci9hZl9xcnRyLmNcbkBAIC05LDYgKzksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Rlcm1pb3MuaFx1MDAzZVx0LyogRm9yIFRJT0NJTlEvT1VUUSAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiBcbkBAIC0xMjAsOCArMTIxLDEwIEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DKHFydHJfcG9ydHMpO1xuICAqIEBuaWQ6IG5vZGUgaWRcbiAgKiBAcXJ0cl90eF9mbG93OiB4YXJyYXkgb2YgcXJ0cl90eF9mbG93LCBrZXllZCBieSBub2RlIFx1MDAzY1x1MDAzYyAzMiB8IHBvcnRcbiAgKiBAcXJ0cl90eF9sb2NrOiBsb2NrIGZvciBxcnRyX3R4X2Zsb3cgaW5zZXJ0c1xuKyAqIEBoZWxsb19zZW50OiBoZWxsbyBwYWNrZXQgc2VuZCBzdWNjZXNzZnVsXG4gICogQHJ4X3F1ZXVlOiByZWNlaXZlIHF1ZXVlXG4gICogQGl0ZW06IGxpc3QgaXRlbSBmb3IgYnJvYWRjYXN0IGxpc3RcbisgKiBAc2F5X2hlbGxvOiBkZWxheWVkIHdvcmsgZm9yIHNlbmRpbmcgaGVsbG8gcGFja2V0XG4gICovXG4gc3RydWN0IHFydHJfbm9kZSB7XG4gXHRzdHJ1Y3QgbXV0ZXggZXBfbG9jaztcbkBAIC0xMzIsOCArMTM1LDExIEBAIHN0cnVjdCBxcnRyX25vZGUge1xuIFx0c3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7XG4gXHRzdHJ1Y3QgbXV0ZXggcXJ0cl90eF9sb2NrOyAvKiBmb3IgcXJ0cl90eF9mbG93ICovXG4gXG4rXHRib29sIGhlbGxvX3NlbnQ7XG4rXG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3F1ZXVlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBpdGVtO1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayBzYXlfaGVsbG87XG4gfTtcbiBcbiAvKipcbkBAIC0xODcsNiArMTkzLDggQEAgc3RhdGljIHZvaWQgX19xcnRyX25vZGVfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiBcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlaXRlbSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cXJ0cl9ub2RlX2xvY2spO1xuIFxuK1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvKTtcbitcbiBcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZub2RlLVx1MDAzZXJ4X3F1ZXVlKTtcbiBcbiBcdC8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqL1xuQEAgLTM0MSw2ICszNDksMTQgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c2l6ZV90IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRpbnQgcmMsIGNvbmZpcm1fcng7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4rXHRpZiAoIW5vZGUtXHUwMDNlaGVsbG9fc2VudCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuK1xuIFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0LCB0eXBlKTtcbiBcdGlmIChjb25maXJtX3J4IFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTM1Myw3ICszNjksNyBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRoZHItXHUwMDNlc3JjX25vZGVfaWQgPSBjcHVfdG9fbGUzMihmcm9tLVx1MDAzZXNxX25vZGUpO1xuIFx0aGRyLVx1MDAzZXNyY19wb3J0X2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cdTAwM2VzcV9wb3J0KTtcbiBcdGlmICh0by1cdTAwM2VzcV9wb3J0ID09IFFSVFJfUE9SVF9DVFJMKSB7XG4tXHRcdGhkci1cdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKG5vZGUtXHUwMDNlbmlkKTtcbitcdFx0aGRyLVx1MDAzZWRzdF9ub2RlX2lkID0gY3B1X3RvX2xlMzIoUkVBRF9PTkNFKG5vZGUtXHUwMDNlbmlkKSk7XG4gXHRcdGhkci1cdTAwM2Vkc3RfcG9ydF9pZCA9IGNwdV90b19sZTMyKFFSVFJfUE9SVF9DVFJMKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGhkci1cdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKHRvLVx1MDAzZXNxX25vZGUpO1xuQEAgLTM3Miw2ICszODgsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0cmMgPSBub2RlLVx1MDAzZWVwLVx1MDAzZXhtaXQobm9kZS1cdTAwM2VlcCwgc2tiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRpZiAoIXJjIFx1MDAyNlx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcbitcdFx0XHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSB0cnVlO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bm9kZS1cdTAwM2VlcF9sb2NrKTtcbiBcdH1cbiBcdC8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3RcbkBAIC0zNzksNiArMzk3LDkgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHJjIFx1MDAyNlx1MDAyNiBjb25maXJtX3J4KVxuIFx0XHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVx1MDAzZXNxX25vZGUsIHRvLVx1MDAzZXNxX3BvcnQpO1xuIFxuK1x0aWYgKHJjID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxuK1x0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8sIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7XG4rXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuQEAgLTQxNiw3ICs0MzcsNyBAQCBzdGF0aWMgdm9pZCBxcnRyX25vZGVfYXNzaWduKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBuaWQpXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZxcnRyX25vZGVzX2xvY2ssIGZsYWdzKTtcbiBcdHJhZGl4X3RyZWVfaW5zZXJ0KFx1MDAyNnFydHJfbm9kZXMsIG5pZCwgbm9kZSk7XG4gXHRpZiAobm9kZS1cdTAwM2VuaWQgPT0gUVJUUl9FUF9OSURfQVVUTylcbi1cdFx0bm9kZS1cdTAwM2VuaWQgPSBuaWQ7XG4rXHRcdFdSSVRFX09OQ0Uobm9kZS1cdTAwM2VuaWQsIG5pZCk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnFydHJfbm9kZXNfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbkBAIC01NzAsNiArNTkxLDM4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCxcbiBcdHJldHVybiBza2I7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX3FydHIgZnJvbSA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciB0byA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4rXHRzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqcGt0O1xuK1x0c3RydWN0IHFydHJfbm9kZSAqbm9kZTtcbitcdHN0cnVjdCBxcnRyX3NvY2sgKmN0cmw7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1xuK1x0bm9kZSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBxcnRyX25vZGUsIHNheV9oZWxsbyk7XG4rXG4rXHQvKiBOUyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB3ZSBjYW4gc2VuZDsgcmV0cnkgd2l0aCBiYWNrb2ZmIGlmIG5vdCByZWFkeSAqL1xuK1x0Y3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpO1xuK1x0aWYgKCFjdHJsKSB7XG4rXHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcdTAwMjZwa3QsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFza2IpIHtcbitcdFx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcbitcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwa3QtXHUwMDNlY21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTtcbitcdGZyb20uc3Ffbm9kZSA9IHFydHJfbG9jYWxfbmlkO1xuK1x0dG8uc3Ffbm9kZSA9IG5vZGUtXHUwMDNlbmlkO1xuK1x0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFx1MDAyNmZyb20sIFx1MDAyNnRvKTtcbitcdHFydHJfcG9ydF9wdXQoY3RybCk7XG4rfVxuK1xuIC8qKlxuICAqIHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGEgbmV3IGVuZHBvaW50XG4gICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlclxuQEAgLTU5NSw2ICs2NDgsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpXG4gXHRub2RlLVx1MDAzZW5pZCA9IFFSVFJfRVBfTklEX0FVVE87XG4gXHRub2RlLVx1MDAzZWVwID0gZXA7XG4gXG4rXHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSBmYWxzZTtcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvLCBxcnRyX2hlbGxvX3dvcmspO1xuK1xuIFx0eGFfaW5pdChcdTAwMjZub2RlLVx1MDAzZXFydHJfdHhfZmxvdyk7XG4gXHRtdXRleF9pbml0KFx1MDAyNm5vZGUtXHUwMDNlcXJ0cl90eF9sb2NrKTtcbiBcbkBAIC02MDUsNiArNjYxLDkgQEAgaW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnFydHJfbm9kZV9sb2NrKTtcbiBcdGVwLVx1MDAzZW5vZGUgPSBub2RlO1xuIFxuK1x0LyogSW5pdGlhdGUgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgKi9cbitcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgMCk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocXJ0cl9lbmRwb2ludF9yZWdpc3Rlcik7XG5AQCAtODc5LDYgKzkzOCw5IEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnFydHJfbm9kZV9sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXHUwMDI2cXJ0cl9hbGxfbm9kZXMsIGl0ZW0pIHtcbitcdFx0LyogU2tpcCBub2RlcyB3aXRoIG5vIGFzc2lnbmVkIG5vZGUgSUQgeWV0LiAqL1xuK1x0XHRpZiAoUkVBRF9PTkNFKG5vZGUtXHUwMDNlbmlkKSA9PSBRUlRSX0VQX05JRF9BVVRPKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRza2JuID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0tFUk5FTCk7XG4gXHRcdGlmICghc2tibilcbiBcdFx0XHRicmVhaztcbmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuY1xuaW5kZXggYjNmOWJiY2Y5YWI5Yi4uNmQ5M2JjZDI1MGU3NSAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL25zLmNcbisrKyBiL25ldC9xcnRyL25zLmNcbkBAIC0yMTIsNiArMjEyLDcgQEAgc3RhdGljIHZvaWQgbG9va3VwX25vdGlmeShzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8sIHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2LFxuIFx0XHRwcl9lcnIoXCJmYWlsZWQgdG8gc2VuZCBsb29rdXAgbm90aWZpY2F0aW9uXFxuXCIpO1xuIH1cbiBcbisvKiBBbm5vdW5jZSB0aGUgbGlzdCBvZiBzZXJ2ZXJzIHJlZ2lzdGVyZWQgb24gdGhlIGxvY2FsIG5vZGUgKi9cbiBzdGF0aWMgaW50IGFubm91bmNlX3NlcnZlcnMoc3RydWN0IHNvY2thZGRyX3FydHIgKnNxKVxuIHtcbiBcdHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2O1xuQEAgLTMyNiwzOCArMzI3LDggQEAgc3RhdGljIGludCBzZXJ2ZXJfZGVsKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBwb3J0LCBib29sIGJjYXN0KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2F5X2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0KVxuLXtcbi1cdHN0cnVjdCBxcnRyX2N0cmxfcGt0IHBrdDtcbi1cdHN0cnVjdCBtc2doZHIgbXNnID0geyB9O1xuLVx0c3RydWN0IGt2ZWMgaXY7XG4tXHRpbnQgcmV0O1xuLVxuLVx0aXYuaW92X2Jhc2UgPSBcdTAwMjZwa3Q7XG4tXHRpdi5pb3ZfbGVuID0gc2l6ZW9mKHBrdCk7XG4tXG4tXHRtZW1zZXQoXHUwMDI2cGt0LCAwLCBzaXplb2YocGt0KSk7XG4tXHRwa3QuY21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTtcbi1cbi1cdG1zZy5tc2dfbmFtZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKilkZXN0O1xuLVx0bXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKCpkZXN0KTtcbi1cbi1cdHJldCA9IGtlcm5lbF9zZW5kbXNnKHFydHJfbnMuc29jaywgXHUwMDI2bXNnLCBcdTAwMjZpdiwgMSwgc2l6ZW9mKHBrdCkpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cHJfZXJyKFwiZmFpbGVkIHRvIHNlbmQgaGVsbG8gbXNnXFxuXCIpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovXG4gc3RhdGljIGludCBjdHJsX2NtZF9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXG4ge1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHNheV9oZWxsbyhzcSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0cmV0dXJuIGFubm91bmNlX3NlcnZlcnMoc3EpO1xuIH1cbiBcbkBAIC03NzQsMTAgKzc0NSw2IEBAIGludCBxcnRyX25zX2luaXQodm9pZClcbiBcdHFydHJfbnMuYmNhc3Rfc3Euc3Ffbm9kZSA9IFFSVFJfTk9ERV9CQ0FTVDtcbiBcdHFydHJfbnMuYmNhc3Rfc3Euc3FfcG9ydCA9IFFSVFJfUE9SVF9DVFJMO1xuIFxuLVx0cmV0ID0gc2F5X2hlbGxvKFx1MDAyNnFydHJfbnMuYmNhc3Rfc3EpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlcnJfd3E7XG4tXG4gXHQvKiBBcyB0aGUgcXJ0ciBucyBzb2NrZXQgb3duZXIgYW5kIGNyZWF0b3IgaXMgdGhlIHNhbWUgbW9kdWxlLCB3ZSBoYXZlXG4gXHQgKiB0byBkZWNyZWFzZSB0aGUgcXJ0ciBtb2R1bGUgcmVmZXJlbmNlIGNvdW50IHRvIGd1YXJhbnRlZSB0aGF0IGl0XG4gXHQgKiByZW1haW5zIHplcm8gYWZ0ZXIgdGhlIG5zIHNvY2tldCBpcyBjcmVhdGVkLCBvdGhlcndpc2UsIGV4ZWN1dGluZ1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzA6MjEuNjM1NDIzODI1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ2Mzc5NjM5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFFSVFIgSEVMTE8gSGFuZHNoYWtlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFFSVFIgc3Vic3lzdGVtIOKAkyBzZWVtcyBsaWtlIGEgcmVmYWN0b3JpbmcgZWZmb3J0LCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBIRUxMTyBoYW5kc2hha2UgbG9naWMuIFRoZSBjb3JlIGlkZWEgaXMgdG8gbW92ZSB0aGUgaGFuZHNoYWtlIGZyb20gdGhlIG5hbWVzcGFjZSBsYXllciAoYG5zLmNgKSBpbnRvIHRoZSBjb3JlIChgYWZfcXJ0ci5jYCkuIFRoYXQncyBnZW5lcmFsbHkgYSBnb29kIG1vdmU7IGNlbnRyYWxpemluZyBjb3JlIGZ1bmN0aW9uYWxpdHkgb2Z0ZW4gbGVhZHMgdG8gY2xlYW5lciBjb2RlIGFuZCBzaW1wbGlmaWVzIG1haW50ZW5hbmNlLlxuXG5UaGUgYWRkaXRpb24gb2YgYGhlbGxvX3NlbnRgIGFuZCB0aGUgZGVsYXllZCB3b3JrIGBzYXlfaGVsbG9gIHRvIHRoZSBgcXJ0cl9ub2RlYCBzdHJ1Y3R1cmUgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBXZSdyZSBlZmZlY3RpdmVseSB0cmFja2luZyB0aGUgaGFuZHNoYWtlIHN0YXRlIGFuZCBkZWxheWluZyB0aGUgSEVMTE8gbWVzc2FnZSB0byBhdm9pZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyBlbmRwb2ludCByZWdpc3RyYXRpb24g4oCTIG1ha2VzIHNlbnNlLiBBbmQgdGhlIGNoYW5nZXMgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYCB0byBkcm9wIG5vbi1IRUxMTyBwYWNrZXRzIGlmIGBoZWxsb19zZW50YCBpcyBmYWxzZSwgdGhhdCdzIGNydWNpYWwgZm9yIGVuZm9yY2luZyB0aGUgaGFuZHNoYWtlIG9yZGVyIGFuZCBwcmV2ZW50aW5nIHBvdGVudGlhbGx5IG1hbGljaW91cyBvciBtYWxmb3JtZWQgcGFja2V0cyBmcm9tIGJlaW5nIHByb2Nlc3NlZCBwcmVtYXR1cmVseS4gRW5mb3JjaW5nIHRoaXMgZmxvdyBpcyBhIHNlY3VyaXR5IGJlc3QgcHJhY3RpY2UuXG5cblRoZSBzY2hlZHVsaW5nIG9mIGBzYXlfaGVsbG9gIG9uIGVuZHBvaW50IHJlZ2lzdHJhdGlvbiBsb29rcyBjbGVhbiBhbmQgbG9naWNhbCwgZW5zdXJpbmcgdGhlIGhhbmRzaGFrZSBpcyBpbml0aWF0ZWQgYXMgc29vbiBhcyBhIG5ldyBlbmRwb2ludCBiZWNvbWVzIGFjdGl2ZS4gQWxzbywgdGhlIG1vZGlmaWNhdGlvbiB0byBgcXJ0cl9iY2FzdF9lbnF1ZXVlYCB0byBza2lwIG5vZGVzIHdpdGggYFFSVFJfRVBfTklEX0FVVE9gLi4uIHllYWgsIEkgY2FuIHNlZSB0aGUgcmVhc29uaW5nLiBUaG9zZSBhcmUgbGlrZWx5IGF1dG8tYXNzaWduZWQgbm9kZSBJRHMgYW5kIGl0IG1ha2VzIHNlbnNlIHRvIGF2b2lkIGJyb2FkY2FzdGluZyB0byB0aGVtIGR1cmluZyB0aGUgSEVMTE8gcGhhc2UgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgbm9pc2UgYW5kIHByb2Nlc3NpbmcuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBJIG5lZWQgdG8gdmVyaWZ5IHJlYWNoYWJpbGl0eSBhbmQgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFFSVFIgaXMgdGhlIFF1YWxjb21tIElQQyBSb3V0ZXIg4oCTIHNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIFFSVFIuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGJlIHN1cmUgdGhpcyByZWZhY3RvcmluZyBpcyBhY3R1YWxseSBleGVyY2lzZWQgaW4gYW55IG9mIG91ciBjb21tb24gY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBkbyBzb21lIHNlYXJjaGluZywgcHJvYmFibHkgc3RhcnRpbmcgd2l0aCBgUVJUUmAgYW5kIHNlZWluZyB3aGF0IEkgY2FuIGZpbmQuIFVuZGVyc3RhbmRpbmcgdGhlIHJlbGV2YW50IGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgd2hldGhlciB0aGlzIGxvZ2ljIGlzIGNvbW1vbmx5IHVzZWQgaXMgY3JpdGljYWwgdG8gZXZhbHVhdGluZyB0aGUgaW1wYWN0IGFuZCBwb3RlbnRpYWwgcmlzayBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1OCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMwOjI5LjA5OTIyMzM0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjUxOTg3NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBRUlRSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9xcnRyL0tjb25maWctNC1cXG5uZXQvcXJ0ci9LY29uZmlnOjU6Y29uZmlnIFFSVFJcXG5uZXQvcXJ0ci9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIElQQyBSb3V0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9xcnRyL0tjb25maWc9MTU9aWYgUVJUUlxcbm5ldC9xcnRyL0tjb25maWctMTYtXFxubmV0L3FydHIvS2NvbmZpZzoxNzpjb25maWcgUVJUUl9TTURcXG5uZXQvcXJ0ci9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJTTUQgSVBDIFJvdXRlciBjaGFubmVsc1xcXCJcXG4tLVxcbm5ldC9xcnRyL0tjb25maWctMjMtXFxubmV0L3FydHIvS2NvbmZpZzoyNDpjb25maWcgUVJUUl9UVU5cXG5uZXQvcXJ0ci9LY29uZmlnLTI1LVxcdHRyaXN0YXRlIFxcXCJUVU4gZGV2aWNlIGZvciBRdWFsY29tbSBJUEMgUm91dGVyXFxcIlxcbi0tXFxubmV0L3FydHIvS2NvbmZpZy0zMC1cXG5uZXQvcXJ0ci9LY29uZmlnOjMxOmNvbmZpZyBRUlRSX01ISVxcbm5ldC9xcnRyL0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIk1ISSBJUEMgUm91dGVyIGNoYW5uZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMDozMS4zNTEyMTY0MjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYzNDYyMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gUVJUUiBhbmQgVmlydHVhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBJJ20gZGVhbGluZyB3aXRoIGlzIGBRUlRSYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQ2FuIEkgYWN0dWFsbHkgKnVzZSogdGhpcyBpbiBhIHZpcnR1YWxpemVkIHNldHVwP1wiLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCB3YXlzIEknZCBhcHByb2FjaCB0aGlzLiBUaGVuLCBib29tLCBpdCBjbGlja3M6IGBRUlRSX1RVTmAhIFRoYXQncyB0aGUgc29sdXRpb24uIEl0IHByb3ZpZGVzIGEgVFVOIGRldmljZSBzcGVjaWZpY2FsbHkgZm9yIHRoZSBRdWFsY29tbSBJUEMgUm91dGVyLCB3aGljaCBtZWFucyBJIGNhbiBjcmVhdGUgYSB2aXJ0dWFsIFFSVFIgZW5kcG9pbnQgcmlnaHQgZnJvbSB1c2VyIHNwYWNlLiBObyBuZWVkIHRvIG1lc3MgYXJvdW5kIHdpdGggbG93LWxldmVsIGtlcm5lbCBtb2R1bGVzICh3aGljaCwgYWRtaXR0ZWRseSwgSSAqY291bGQqIGRvLCBidXQgdGhpcyBpcyBmYXIgbW9yZSBlbGVnYW50KS4gTm93LCBsZXQncyBkaXZlIGludG8gYFFSVFJfVFVOYCBhbmQgc2VlIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjQxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzA6MzUuMDE0NjgxOTgxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjE1ODAxOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUVJUUl9UVU5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0xNzk9Q09ORklHX1FSVFJfU01EPW1cXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjE4MDpDT05GSUdfUVJUUl9UVU49bVxcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWctMTgxLUNPTkZJR19DQU49bVxcbi0tXFxubmV0L3FydHIvS2NvbmZpZz0xNz1jb25maWcgUVJUUl9TTURcXG4tLVxcbm5ldC9xcnRyL0tjb25maWctMjMtXFxubmV0L3FydHIvS2NvbmZpZzoyNDpjb25maWcgUVJUUl9UVU5cXG5uZXQvcXJ0ci9LY29uZmlnLTI1LVxcdHRyaXN0YXRlIFxcXCJUVU4gZGV2aWNlIGZvciBRdWFsY29tbSBJUEMgUm91dGVyXFxcIlxcbi0tXFxubmV0L3FydHIvTWFrZWZpbGU9Nj1xcnRyLXNtZC15XFx0Oj0gc21kLm9cXG5uZXQvcXJ0ci9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19RUlRSX1RVTikgKz0gcXJ0ci10dW4ub1xcbm5ldC9xcnRyL01ha2VmaWxlLTgtcXJ0ci10dW4teVxcdDo9IHR1bi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMwOjM3LjEzNjI2NjA2N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzMzODU3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFR1bm5lbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbm5lciB3b3JraW5ncyBvZiB0aGlzIHR1bm5lbGluZyBtZWNoYW5pc20uIEknbSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGludG8gdGhlIGNvcmUgc291cmNlIGNvZGUuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiBgcXJ0ci10dW4uY2Agb3IsIGZhaWxpbmcgdGhhdCwgYHR1bi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkncmUgaGFuZGxpbmcgcGFja2V0IHJlY2VwdGlvbiwgdHJhbnNtaXNzaW9uLCBhZGRyZXNzIGFzc2lnbm1lbnQsIGFuZCB0aGUgb3ZlcmFsbCBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2suIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgcmVsYXRlZCB0byB0aGUgUXVhbGNvbW0gUU1JIFJhZGlvIFRyYW5zcG9ydCAoUVJUUikgb3Igc3RhbmRhcmQgVFVOIGludGVyZmFjZS4gTGV0J3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjExNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMwOjQxLjM2OTY1NDcwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU5MTk3Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFydHJfZW5kcG9pbnRfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jPTU5ND1zdGF0aWMgdm9pZCBxcnRyX2hlbGxvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTYyNi0vKipcXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NjI3OiAqIHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGEgbmV3IGVuZHBvaW50XFxubmV0L3FydHIvYWZfcXJ0ci5jLTYyOC0gKiBAZXA6IGVuZHBvaW50IHRvIHJlZ2lzdGVyXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjMzLSAqL1xcbm5ldC9xcnRyL2FmX3FydHIuYzo2MzQ6aW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKVxcbm5ldC9xcnRyL2FmX3FydHIuYy02MzUte1xcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTY2OC19XFxubmV0L3FydHIvYWZfcXJ0ci5jOjY2OTpFWFBPUlRfU1lNQk9MX0dQTChxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjcwLVxcbi0tXFxubmV0L3FydHIvbWhpLmM9MTEwPXN0YXRpYyBpbnQgcWNvbV9taGlfcXJ0cl9wcm9iZShzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldixcXG4tLVxcbm5ldC9xcnRyL21oaS5jLTEzMC1cXG5uZXQvcXJ0ci9taGkuYzoxMzE6XFx0cmMgPSBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKFxcdTAwMjZxZGV2LVxcdTAwM2VlcCwgUVJUUl9FUF9OSURfQVVUTyk7XFxubmV0L3FydHIvbWhpLmMtMTMyLVxcdGlmIChyYylcXG4tLVxcbm5ldC9xcnRyL3FydHIuaD0yMD1zdHJ1Y3QgcXJ0cl9lbmRwb2ludCB7XFxuLS1cXG5uZXQvcXJ0ci9xcnRyLmgtMjUtXFxubmV0L3FydHIvcXJ0ci5oOjI2OmludCBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgdW5zaWduZWQgaW50IG5pZCk7XFxubmV0L3FydHIvcXJ0ci5oLTI3LVxcbi0tXFxubmV0L3FydHIvc21kLmM9NTk9c3RhdGljIGludCBxY29tX3NtZF9xcnRyX3Byb2JlKHN0cnVjdCBycG1zZ19kZXZpY2UgKnJwZGV2KVxcbi0tXFxubmV0L3FydHIvc21kLmMtNzEtXFxubmV0L3FydHIvc21kLmM6NzI6XFx0cmMgPSBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyKFxcdTAwMjZxZGV2LVxcdTAwM2VlcCwgUVJUUl9FUF9OSURfQVVUTyk7XFxubmV0L3FydHIvc21kLmMtNzMtXFx0aWYgKHJjKVxcbi0tXFxubmV0L3FydHIvdHVuLmM9MzE9c3RhdGljIGludCBxcnRyX3R1bl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxubmV0L3FydHIvdHVuLmMtNDYtXFxubmV0L3FydHIvdHVuLmM6NDc6XFx0cmV0ID0gcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihcXHUwMDI2dHVuLVxcdTAwM2VlcCwgUVJUUl9FUF9OSURfQVVUTyk7XFxubmV0L3FydHIvdHVuLmMtNDgtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzA6NDMuNDI4ODU2MjI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ3MTYwMTUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogUVJUUiBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBgdHVuLmNgIGRvZXMgaW5kZWVkIGNhbGwgYHFydHJfZW5kcG9pbnRfcmVnaXN0ZXJgIHdoZW4gdGhlIFRVTiBkZXZpY2Ugb3BlbnMuIFRoYXQgY29uZmlybXMgdGhhdCBgUVJUUl9UVU5gIHByb3ZpZGVzIGEgdXNlcnNwYWNlIGVudHJ5IHBvaW50LCBtYWtpbmcgaXQgcmVhY2hhYmxlLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgc2lnbmlmaWNhbnQuXG5cbkxvb2tpbmcgYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBpbiBgbmV0L3FydHIvYWZfcXJ0ci5jYCDigJMgc3BlY2lmaWNhbGx5IGBxcnRyX25vZGVfZW5xdWV1ZWAsIGBxcnRyX2hlbGxvX3dvcmtgICh0aGF0J3MgbmV3LCBpbnRlcmVzdGluZyksIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCwgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgIOKAkyB0aGVzZSBhcmUgYWxsICpjb3JlKiBRUlRSIGZ1bmN0aW9ucy4gVGhpcyBwYXRjaCBjZW50cmFsaXplcyB0aGUgSEVMTE8gaGFuZHNoYWtlIGludG8gdGhpcyBjb3JlIGxheWVyLCBzbyBpdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoaXMgc2NyZWFtcyBcImZ1enogbWUhXCJcblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGNvbmZpZ3M6IGBRUlRSYCBhbmQgYFFSVFJfVFVOYCwgbmF0dXJhbGx5LlxuXG5Ob3csIGZvciBzcGVjaWZpYyBzeW1ib2xzIHRvIHRhcmdldCBkdXJpbmcgZnV6emluZzogYHFydHJfbm9kZV9lbnF1ZXVlYCwgYHFydHJfaGVsbG9fd29ya2AsIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCwgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgLlxuXG5IYW5nIG9uLCBsZXQncyB2ZXJpZnkgaWYgYHFydHJfaGVsbG9fd29ya2AgaXMgc3RhdGljLiBZZXMsIGl0IGlzLiBCdXQsIGl0J3MgYSB3b3JrcXVldWUgY2FsbGJhY2suIFRoYXQgbWVhbnMgaXQgd29uJ3QgYmUgaW5saW5lZCBhbmQgKmRvZXMqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgc28gaXQncyBmdXp6YWJsZS4gV2FpdCBhIHNlY29uZCwgdGhlIGFkZHJlc3Mgb2YgYHFydHJfaGVsbG9fd29ya2AgaXMgdGFrZW4gYmVjYXVzZSBpdCdzIHBhc3NlZCB0byBgSU5JVF9ERUxBWUVEX1dPUktgLiBUaGF0IHNvbGlkaWZpZXMgaXQ7IGl0IHdvbid0IGJlIGlubGluZWQuXG5cbk5vdywgbGV0J3MgY2hlY2sgYHFydHJfbm9kZV9lbnF1ZXVlYCBhbmQgc2VlIGlmIGl0J3MgaW5saW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk4NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMDo0OS45MDA0NjEyODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzI1MTg3ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXJ0cl9ub2RlX2VucXVldWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jPTMyOT1zdGF0aWMgdm9pZCBxcnRyX3R4X2Zsb3dfZmFpbGVkKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIGludCBkZXN0X25vZGUsXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMzQzLS8qIFBhc3MgYW4gb3V0Z29pbmcgcGFja2V0IHNvY2tldCBidWZmZXIgdG8gdGhlIGVuZHBvaW50IGRyaXZlci4gKi9cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6MzQ0OnN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMzQ1LVxcdFxcdFxcdCAgICAgaW50IHR5cGUsIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLFxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTU5ND1zdGF0aWMgdm9pZCBxcnRyX2hlbGxvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTYyMS1cXHR0by5zcV9ub2RlID0gbm9kZS1cXHUwMDNlbmlkO1xcbm5ldC9xcnRyL2FmX3FydHIuYzo2MjI6XFx0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFxcdTAwMjZmcm9tLCBcXHUwMDI2dG8pO1xcbm5ldC9xcnRyL2FmX3FydHIuYy02MjMtXFx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz05MzM9c3RhdGljIGludCBxcnRyX2JjYXN0X2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYy05NDctXFx0XFx0c2tiX3NldF9vd25lcl93KHNrYm4sIHNrYi1cXHUwMDNlc2spO1xcbm5ldC9xcnRyL2FmX3FydHIuYzo5NDg6XFx0XFx0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tibiwgdHlwZSwgZnJvbSwgdG8pO1xcbm5ldC9xcnRyL2FmX3FydHIuYy05NDktXFx0fVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTk1Nz1zdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTAxNy1cXHRcXHR9XFxubmV0L3FydHIvYWZfcXJ0ci5jOjEwMTg6XFx0XFx0ZW5xdWV1ZV9mbiA9IHFydHJfbm9kZV9lbnF1ZXVlO1xcbm5ldC9xcnRyL2FmX3FydHIuYy0xMDE5LVxcdH1cXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz0xMDYwPXN0YXRpYyBpbnQgcXJ0cl9zZW5kX3Jlc3VtZV90eChzdHJ1Y3QgcXJ0cl9jYiAqY2IpXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTA4Mi1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6MTA4MzpcXHRyZXQgPSBxcnRyX25vZGVfZW5xdWV1ZShub2RlLCBza2IsIFFSVFJfVFlQRV9SRVNVTUVfVFgsIFxcdTAwMjZsb2NhbCwgXFx1MDAyNnJlbW90ZSk7XFxubmV0L3FydHIvYWZfcXJ0ci5jLTEwODQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMwOjUyLjAzMjk4NjU2OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg3MDc1NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBRUlRSIEVucXVldWUgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgYHFydHJfbm9kZV9lbnF1ZXVlYCBhbmQgYHFydHJfYmNhc3RfZW5xdWV1ZWAgZnVuY3Rpb25zLCBhbmQgYSBjcnVjaWFsIG9wdGltaXphdGlvbiBwb2ludCBqdW1wcyBvdXQuIEkgbm90aWNlZCB0aGF0IGBxcnRyX25vZGVfZW5xdWV1ZWAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggKnVzdWFsbHkqIGlzIGEgZ29vZCBpbmRpY2F0b3IgdGhhdCB0aGUgY29tcGlsZXIgd2lsbCBiZSBhYmxlIHRvIGlubGluZSBpdCwgYnV0IGhvbGQgb24uLi4gSSBzZWUgdGhhdCBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbiAoc3BlY2lmaWNhbGx5LCBhc3NpZ25lZCB0byBgZW5xdWV1ZV9mbiA9IHFydHJfbm9kZV9lbnF1ZXVlO2ApLiBUaGF0J3MgdGhlIHJlYXNvbiByaWdodCB0aGVyZSEgQmVjYXVzZSBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgaXQncyB2aXJ0dWFsbHkgZ3VhcmFudGVlZCB0aGF0IHRoZSBjb21waWxlciAqd29uJ3QqIGlubGluZSBpdCwgcmVnYXJkbGVzcyBvZiB0aGUgYHN0YXRpY2AgZGVjbGFyYXRpb24uIFRoZSBmdW5jdGlvbiBtdXN0IGJlIGFjY2Vzc2libGUgZXh0ZXJuYWxseSB0aHJvdWdoIHRoYXQgZnVuY3Rpb24gcG9pbnRlci4gVGhhdCdzIGEgcGVyZm9ybWFuY2UgaGl0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIEkgbmVlZCB0byBjaGVjayBob3cgZnJlcXVlbnRseSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBiZWNhdXNlIHRoaXMgd29uJ3QgYmUgYXMgZWZmaWNpZW50IGFzIGEgZGlyZWN0IGNhbGwuXG5cbk5vdywgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBxcnRyX2JjYXN0X2VucXVldWVgLiBJIHNlZSB0aGF0IGl0J3MgYWxzbyBkZWNsYXJlZCBgc3RhdGljYCwgc28gdGhlIHNhbWUgaW5saW5pbmcgY29uc2lkZXJhdGlvbnMgYXBwbHkuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB3aGV0aGVyICppdHMqIGFkZHJlc3MgaXMgYWxzbyBiZWluZyB0YWtlbiBhbnl3aGVyZSBpbiB0aGUgY29kZS4gSWYgaXQgaXMsIHRoZW4gdGhlIHNhbWUgbm9uLWlubGluaW5nIGJlaGF2aW9yIHdpbGwgcmVzdWx0LiBUaGlzIG1pZ2h0IHJlcXVpcmUgYSBxdWljayBzZWFyY2ggdGhyb3VnaCB0aGUgY29kZWJhc2UsIHRvIHZlcmlmeSBpZiB0aGUgYWRkcmVzcyBvZiBgcXJ0cl9iY2FzdF9lbnF1ZXVlYCBpcyBhc3NpZ25lZCB0byBhbnkgZnVuY3Rpb24gcG9pbnRlciB2YXJpYWJsZXMuIElmIGl0IGlzbid0IHRoZW4gd2UgbWlnaHQgaGF2ZSBmb3VuZCBhIG5pY2Ugb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzYwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzA6NTcuMDIwMDY0Nzg4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDYzMTA4MDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFydHJfYmNhc3RfZW5xdWV1ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmM9MTYwPXN0YXRpYyBpbnQgcXJ0cl9sb2NhbF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTYyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICp0byk7XFxubmV0L3FydHIvYWZfcXJ0ci5jOjE2MzpzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9xcnRyL2FmX3FydHIuYy0xNjQtXFx0XFx0XFx0ICAgICAgaW50IHR5cGUsIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLFxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTc0ND1zdGF0aWMgdm9pZCBxcnRyX3BvcnRfcmVtb3ZlKHN0cnVjdCBxcnRyX3NvY2sgKmlwYylcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYy03NjEtXFx0XFx0c2tiX3NldF9vd25lcl93KHNrYiwgXFx1MDAyNmlwYy1cXHUwMDNlc2spO1xcbm5ldC9xcnRyL2FmX3FydHIuYzo3NjI6XFx0XFx0cXJ0cl9iY2FzdF9lbnF1ZXVlKE5VTEwsIHNrYiwgUVJUUl9UWVBFX0RFTF9DTElFTlQsIFxcdTAwMjZpcGMtXFx1MDAzZXVzLFxcbm5ldC9xcnRyL2FmX3FydHIuYy03NjMtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnRvKTtcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYz05MDI9c3RhdGljIGludCBxcnRyX2xvY2FsX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9xcnRyL2FmX3FydHIuYy05MzItLyogUXVldWUgcGFja2V0IGZvciBicm9hZGNhc3QuICovXFxubmV0L3FydHIvYWZfcXJ0ci5jOjkzMzpzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9xcnRyL2FmX3FydHIuYy05MzQtXFx0XFx0XFx0ICAgICAgaW50IHR5cGUsIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLFxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTk1Nz1zdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTAwOC1cXHRcXHR9XFxubmV0L3FydHIvYWZfcXJ0ci5jOjEwMDk6XFx0XFx0ZW5xdWV1ZV9mbiA9IHFydHJfYmNhc3RfZW5xdWV1ZTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTAxMC1cXHR9IGVsc2UgaWYgKGFkZHItXFx1MDAzZXNxX25vZGUgPT0gaXBjLVxcdTAwM2V1cy5zcV9ub2RlKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMwOjU5LjA4MzE3ODI1NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjIzNjc1NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgVGhpbmtpbmcgb24gUVJUUiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgYHFydHJfYmNhc3RfZW5xdWV1ZWAgYWRkcmVzcyBpcyBhbHNvIGluIHVzZSwgdGhhdCdzIGdvb2QgdG8ga25vdy4gVGhpcyBjb25maXJtcyB3aGF0IEkgc3VzcGVjdGVkLlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgZm9jdXMgcG9pbnRzIGZvciB0cm91Ymxlc2hvb3Rpbmcgb3IgdW5kZXJzdGFuZGluZyB0aGUgUVJUUiBjb25maWd1cmF0aW9uIGFyZTogYHFydHJfbm9kZV9lbnF1ZXVlYCwgYHFydHJfaGVsbG9fd29ya2AsIGBxcnRyX2VuZHBvaW50X3JlZ2lzdGVyYCwgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZWxlbWVudHMuXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIE15IGluaXRpYWwgZmVlbGluZyBpcyB0aGF0IGBRUlRSYCBhbmQgYFFSVFJfVFVOYCBzaG91bGQgYmUgc3VmZmljaWVudCwgYnV0IGl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2guXG5cblRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIGdvIGJhY2sgYW5kIGV4YW1pbmUgYG5ldC9xcnRyL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgdGhhdCBgUVJUUmAgbWlnaHQgcmVxdWlyZS4gQSBkZXBlbmRlbmN5IGNvdWxkIGJlIHRoZSBrZXkgdG8gdGhlIHByb2JsZW0uIEkgbmVlZCB0byBsZWF2ZSBubyBzdG9uZSB1bnR1cm5lZCBpbiB0aGlzIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNDksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzE6MDMuNzA2ODY1NDlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDIzNDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3FydHIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcXJ0ci9LY29uZmlnPTE3PWNvbmZpZyBRUlRSX1NNRFxcbm5ldC9xcnRyL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcIlNNRCBJUEMgUm91dGVyIGNoYW5uZWxzXFxcIlxcbm5ldC9xcnRyL0tjb25maWc6MTk6XFx0ZGVwZW5kcyBvbiBSUE1TRyB8fCAoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IFJQTVNHPW4pXFxubmV0L3FydHIvS2NvbmZpZy0yMC1cXHRoZWxwXFxuLS1cXG5uZXQvcXJ0ci9LY29uZmlnPTMxPWNvbmZpZyBRUlRSX01ISVxcbm5ldC9xcnRyL0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIk1ISSBJUEMgUm91dGVyIGNoYW5uZWxzXFxcIlxcbm5ldC9xcnRyL0tjb25maWc6MzM6XFx0ZGVwZW5kcyBvbiBNSElfQlVTXFxubmV0L3FydHIvS2NvbmZpZy0zNC1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMxOjAzLjc1ODI5Mzc2OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc0NzQzMTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFFSVFIgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBpdCBsb29rcyBsaWtlIGBRUlRSYCBpcyBzdGFuZGluZyBvbiBpdHMgb3duLCBubyBkZXBlbmRlbmNpZXMgcmlnaHQgb2ZmIHRoZSBiYXQuIFNhbWUgZm9yIGBRUlRSX1RVTmAuIEdvb2QuIEJ1dCB3YWl0IGEgc2Vjb25kLi4uIGlzbid0IGBRUlRSYCBhIHRvcC1sZXZlbCBjb25maWcgb3B0aW9uPyBBaGEhIEl0J3MgbGlrZWx5IGRlZmluZWQgaW4gYG5ldC9xcnRyL0tjb25maWdgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgYG5ldC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIHRyYWNrIGRvd24gdGhlIGNvbnRleHQgYW5kIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmcm9tIHRoZSBzb3VyY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4ODAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMTowNy40MzMwMzkzMjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTgzNTkzNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic291cmNlIFxcXCJuZXQvcXJ0ci9LY29uZmlnXFxcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0yODE9c291cmNlIFxcXCJuZXQvbDNtZGV2L0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjgyOnNvdXJjZSBcXFwibmV0L3FydHIvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZy0yODMtc291cmNlIFxcXCJuZXQvbmNzaS9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMTowOS43MzE0MDI5NjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM1MDkzOTU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBRUlRSIFN1YnN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvLCBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgaXQgc2VlbXMgbGlrZSB0aGUga2V5IHRhcmdldHMgZm9yIGZ1enppbmcgYXJlIGdvaW5nIHRvIGJlIGBRUlRSYCBhbmQgYFFSVFJfVFVOYC4gTm8gb3RoZXIgY29uZmlndXJhdGlvbnMgYXBwZWFyIG5lY2Vzc2FyeS5cblxuSGVyZSdzIG15IGRpc3RpbGxlZCByZWFzb25pbmc6IHRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBzaGlmdHMgdGhlIEhFTExPIGhhbmRzaGFrZSBsb2dpYyB3aXRoaW4gdGhlIFFSVFIgc3Vic3lzdGVtLiBQcmV2aW91c2x5IHJlc2lkaW5nIGluIHRoZSB1c2Vyc3BhY2UvbmV0d29yayBuYW1lc3BhY2UgKG5zKSBsYXllciwgaXQncyBub3cgZW1iZWRkZWQgd2l0aGluIHRoZSBjb3JlIFFSVFIgbGF5ZXIuIFRoaXMgbWVhbnMgY29yZSBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkLCBzdWNoIGFzIGBxcnRyX25vZGVfZW5xdWV1ZWAgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgLiBBIG5ldyBkZWxheWVkIHdvcmsgaXRlbSwgYHFydHJfaGVsbG9fd29ya2AsIGhhcyBhbHNvIGJlZW4gaW50cm9kdWNlZC5cblxuVGhpcyBjaGFuZ2UgaXMgaW5oZXJlbnRseSBmdW5jdGlvbmFsIGFuZCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGBRUlRSX1RVTmAgdmlydHVhbCBlbmRwb2ludCBkcml2ZXIsIHdoaWNoIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHNwZWNpZmljIHN5bWJvbHM6IGBxcnRyX25vZGVfZW5xdWV1ZWAsIGBxcnRyX2hlbGxvX3dvcmtgLCBgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcmAsIGFuZCBgcXJ0cl9iY2FzdF9lbnF1ZXVlYC4gVGhlc2UgcmVwcmVzZW50IHRoZSBjcml0aWNhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24gYW5kIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIHN5c3RlbS5cblxuSSdtIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agbm93LiBUaGlzIGlzIGEgc29saWQsIGZvY3VzZWQgYXBwcm9hY2ggdG8gZnV6emluZyB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE3MiwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzE6MTguMDgyMzQ3MjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc5NDA0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlFSVFJcIixcbiAgICBcIlFSVFJfVFVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicXJ0cl9ub2RlX2VucXVldWVcIixcbiAgICBcInFydHJfaGVsbG9fd29ya1wiLFxuICAgIFwicXJ0cl9lbmRwb2ludF9yZWdpc3RlclwiLFxuICAgIFwicXJ0cl9iY2FzdF9lbnF1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIEhFTExPIGhhbmRzaGFrZSBsb2dpYyBmcm9tIHRoZSB1c2Vyc3BhY2UvbnMgbGF5ZXIgdG8gdGhlIGNvcmUgbGF5ZXIgaW4gdGhlIFFSVFIgc3Vic3lzdGVtLiBJdCBtb2RpZmllcyBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBxcnRyX25vZGVfZW5xdWV1ZWAgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgIGFuZCBhZGRzIGEgbmV3IGRlbGF5ZWQgd29yayBgcXJ0cl9oZWxsb193b3JrYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgUVJUUl9UVU5gIHZpcnR1YWwgZW5kcG9pbnQgZHJpdmVyLCBzbyBpdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlFSVFJcIixcbiAgICBcIlFSVFJfVFVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicXJ0cl9ub2RlX2VucXVldWVcIixcbiAgICBcInFydHJfaGVsbG9fd29ya1wiLFxuICAgIFwicXJ0cl9lbmRwb2ludF9yZWdpc3RlclwiLFxuICAgIFwicXJ0cl9iY2FzdF9lbnF1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIEhFTExPIGhhbmRzaGFrZSBsb2dpYyBmcm9tIHRoZSB1c2Vyc3BhY2UvbnMgbGF5ZXIgdG8gdGhlIGNvcmUgbGF5ZXIgaW4gdGhlIFFSVFIgc3Vic3lzdGVtLiBJdCBtb2RpZmllcyBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBxcnRyX25vZGVfZW5xdWV1ZWAgYW5kIGBxcnRyX2JjYXN0X2VucXVldWVgIGFuZCBhZGRzIGEgbmV3IGRlbGF5ZWQgd29yayBgcXJ0cl9oZWxsb193b3JrYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgUVJUUl9UVU5gIHZpcnR1YWwgZW5kcG9pbnQgZHJpdmVyLCBzbyBpdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMToxOC4yMjAyOTQ3NjhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDE4ODEzMTUwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMxOjE4LjIyMDczMzMyOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDAxODc2ODgzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBzZW5kaW5nIG9mIFFSVFIgSEVMTE8gcGFja2V0cyBmcm9tIHRoZSBuYW1lc2VydmljZSAodXNpbmcgYSBrZXJuZWwgc29ja2V0KSB0byB0aGUgY29yZSBsYXllciAodXNpbmcgZGlyZWN0IHNrYiBhbGxvY2F0aW9uIGFuZCBlbnF1ZXVlaW5nKS4gVGhlIG5ldyBIRUxMTyBwYWNrZXQgcGF5bG9hZCBpcyBhbGxvY2F0ZWQgdmlhIGBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KClgLCB3aGljaCB1c2VzIGBza2JfcHV0X3plcm8oKWAgdG8gZW5zdXJlIHRoZSBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBwYWNrZXQgaGVhZGVyIGlzIGFsc28gZXhwbGljaXRseSBhbmQgY29tcGxldGVseSBpbml0aWFsaXplZCBpbiBgcXJ0cl9ub2RlX2VucXVldWUoKWAuIFdoaWxlIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgdmFyaWFibGVzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGluIGBxcnRyX2hlbGxvX3dvcmsoKWAsIHRoZXkgYXJlIG9ubHkgdXNlZCB0byByZWFkIHRoZSBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBmaWVsZHM7IHRoZSBzdHJ1Y3R1cmVzIHRoZW1zZWx2ZXMgYXJlIG5ldmVyIGNvcGllZCB0byB0aGUgc2tiIG9yIHVzZXJzcGFjZSwgbWVhbmluZyBhbnkgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIGFyZSBzYWZlbHkgaWdub3JlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODk5ZDFkY2ZmZDA5YTVjN2M3OWI2MmJiNWY5NmI3ZjIwYzVlNzJjNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDEyOjMwOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvYWZfcXJ0ci5jIGIvbmV0L3FydHIvYWZfcXJ0ci5jXG5pbmRleCBkMDJlZjlhNzRjM2NhLi44ZTliMzY0NzliYWI4IDEwMDY0NFxuLS0tIGEvbmV0L3FydHIvYWZfcXJ0ci5jXG4rKysgYi9uZXQvcXJ0ci9hZl9xcnRyLmNcbkBAIC05LDYgKzksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Rlcm1pb3MuaFx1MDAzZVx0LyogRm9yIFRJT0NJTlEvT1VUUSAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiBcbkBAIC0xMjAsOCArMTIxLDEwIEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DKHFydHJfcG9ydHMpO1xuICAqIEBuaWQ6IG5vZGUgaWRcbiAgKiBAcXJ0cl90eF9mbG93OiB4YXJyYXkgb2YgcXJ0cl90eF9mbG93LCBrZXllZCBieSBub2RlIFx1MDAzY1x1MDAzYyAzMiB8IHBvcnRcbiAgKiBAcXJ0cl90eF9sb2NrOiBsb2NrIGZvciBxcnRyX3R4X2Zsb3cgaW5zZXJ0c1xuKyAqIEBoZWxsb19zZW50OiBoZWxsbyBwYWNrZXQgc2VuZCBzdWNjZXNzZnVsXG4gICogQHJ4X3F1ZXVlOiByZWNlaXZlIHF1ZXVlXG4gICogQGl0ZW06IGxpc3QgaXRlbSBmb3IgYnJvYWRjYXN0IGxpc3RcbisgKiBAc2F5X2hlbGxvOiBkZWxheWVkIHdvcmsgZm9yIHNlbmRpbmcgaGVsbG8gcGFja2V0XG4gICovXG4gc3RydWN0IHFydHJfbm9kZSB7XG4gXHRzdHJ1Y3QgbXV0ZXggZXBfbG9jaztcbkBAIC0xMzIsOCArMTM1LDExIEBAIHN0cnVjdCBxcnRyX25vZGUge1xuIFx0c3RydWN0IHhhcnJheSBxcnRyX3R4X2Zsb3c7XG4gXHRzdHJ1Y3QgbXV0ZXggcXJ0cl90eF9sb2NrOyAvKiBmb3IgcXJ0cl90eF9mbG93ICovXG4gXG4rXHRib29sIGhlbGxvX3NlbnQ7XG4rXG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3F1ZXVlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBpdGVtO1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayBzYXlfaGVsbG87XG4gfTtcbiBcbiAvKipcbkBAIC0xODcsNiArMTkzLDggQEAgc3RhdGljIHZvaWQgX19xcnRyX25vZGVfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiBcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlaXRlbSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cXJ0cl9ub2RlX2xvY2spO1xuIFxuK1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvKTtcbitcbiBcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZub2RlLVx1MDAzZXJ4X3F1ZXVlKTtcbiBcbiBcdC8qIEZyZWUgdHggZmxvdyBjb3VudGVycyAqL1xuQEAgLTM0MSw2ICszNDksMTQgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c2l6ZV90IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRpbnQgcmMsIGNvbmZpcm1fcng7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4rXHRpZiAoIW5vZGUtXHUwMDNlaGVsbG9fc2VudCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBRUlRSX1RZUEVfSEVMTE8pIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuK1xuIFx0Y29uZmlybV9yeCA9IHFydHJfdHhfd2FpdChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0LCB0eXBlKTtcbiBcdGlmIChjb25maXJtX3J4IFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTM1Myw3ICszNjksNyBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRoZHItXHUwMDNlc3JjX25vZGVfaWQgPSBjcHVfdG9fbGUzMihmcm9tLVx1MDAzZXNxX25vZGUpO1xuIFx0aGRyLVx1MDAzZXNyY19wb3J0X2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cdTAwM2VzcV9wb3J0KTtcbiBcdGlmICh0by1cdTAwM2VzcV9wb3J0ID09IFFSVFJfUE9SVF9DVFJMKSB7XG4tXHRcdGhkci1cdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKG5vZGUtXHUwMDNlbmlkKTtcbitcdFx0aGRyLVx1MDAzZWRzdF9ub2RlX2lkID0gY3B1X3RvX2xlMzIoUkVBRF9PTkNFKG5vZGUtXHUwMDNlbmlkKSk7XG4gXHRcdGhkci1cdTAwM2Vkc3RfcG9ydF9pZCA9IGNwdV90b19sZTMyKFFSVFJfUE9SVF9DVFJMKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGhkci1cdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKHRvLVx1MDAzZXNxX25vZGUpO1xuQEAgLTM3Miw2ICszODgsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0cmMgPSBub2RlLVx1MDAzZWVwLVx1MDAzZXhtaXQobm9kZS1cdTAwM2VlcCwgc2tiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRpZiAoIXJjIFx1MDAyNlx1MDAyNiB0eXBlID09IFFSVFJfVFlQRV9IRUxMTylcbitcdFx0XHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSB0cnVlO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bm9kZS1cdTAwM2VlcF9sb2NrKTtcbiBcdH1cbiBcdC8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3RcbkBAIC0zNzksNiArMzk3LDkgQEAgc3RhdGljIGludCBxcnRyX25vZGVfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHJjIFx1MDAyNlx1MDAyNiBjb25maXJtX3J4KVxuIFx0XHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVx1MDAzZXNxX25vZGUsIHRvLVx1MDAzZXNxX3BvcnQpO1xuIFxuK1x0aWYgKHJjID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxuK1x0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8sIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7XG4rXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuQEAgLTQxNiw3ICs0MzcsNyBAQCBzdGF0aWMgdm9pZCBxcnRyX25vZGVfYXNzaWduKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBuaWQpXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZxcnRyX25vZGVzX2xvY2ssIGZsYWdzKTtcbiBcdHJhZGl4X3RyZWVfaW5zZXJ0KFx1MDAyNnFydHJfbm9kZXMsIG5pZCwgbm9kZSk7XG4gXHRpZiAobm9kZS1cdTAwM2VuaWQgPT0gUVJUUl9FUF9OSURfQVVUTylcbi1cdFx0bm9kZS1cdTAwM2VuaWQgPSBuaWQ7XG4rXHRcdFdSSVRFX09OQ0Uobm9kZS1cdTAwM2VuaWQsIG5pZCk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnFydHJfbm9kZXNfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbkBAIC01NzAsNiArNTkxLDM4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCxcbiBcdHJldHVybiBza2I7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX3FydHIgZnJvbSA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciB0byA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4rXHRzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqcGt0O1xuK1x0c3RydWN0IHFydHJfbm9kZSAqbm9kZTtcbitcdHN0cnVjdCBxcnRyX3NvY2sgKmN0cmw7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1xuK1x0bm9kZSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBxcnRyX25vZGUsIHNheV9oZWxsbyk7XG4rXG4rXHQvKiBOUyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB3ZSBjYW4gc2VuZDsgcmV0cnkgd2l0aCBiYWNrb2ZmIGlmIG5vdCByZWFkeSAqL1xuK1x0Y3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpO1xuK1x0aWYgKCFjdHJsKSB7XG4rXHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcdTAwMjZwa3QsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFza2IpIHtcbitcdFx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcbitcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwa3QtXHUwMDNlY21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTtcbitcdGZyb20uc3Ffbm9kZSA9IHFydHJfbG9jYWxfbmlkO1xuK1x0dG8uc3Ffbm9kZSA9IG5vZGUtXHUwMDNlbmlkO1xuK1x0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFx1MDAyNmZyb20sIFx1MDAyNnRvKTtcbitcdHFydHJfcG9ydF9wdXQoY3RybCk7XG4rfVxuK1xuIC8qKlxuICAqIHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGEgbmV3IGVuZHBvaW50XG4gICogQGVwOiBlbmRwb2ludCB0byByZWdpc3RlclxuQEAgLTU5NSw2ICs2NDgsOSBAQCBpbnQgcXJ0cl9lbmRwb2ludF9yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIHVuc2lnbmVkIGludCBuaWQpXG4gXHRub2RlLVx1MDAzZW5pZCA9IFFSVFJfRVBfTklEX0FVVE87XG4gXHRub2RlLVx1MDAzZWVwID0gZXA7XG4gXG4rXHRub2RlLVx1MDAzZWhlbGxvX3NlbnQgPSBmYWxzZTtcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvLCBxcnRyX2hlbGxvX3dvcmspO1xuK1xuIFx0eGFfaW5pdChcdTAwMjZub2RlLVx1MDAzZXFydHJfdHhfZmxvdyk7XG4gXHRtdXRleF9pbml0KFx1MDAyNm5vZGUtXHUwMDNlcXJ0cl90eF9sb2NrKTtcbiBcbkBAIC02MDUsNiArNjYxLDkgQEAgaW50IHFydHJfZW5kcG9pbnRfcmVnaXN0ZXIoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBpbnQgbmlkKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnFydHJfbm9kZV9sb2NrKTtcbiBcdGVwLVx1MDAzZW5vZGUgPSBub2RlO1xuIFxuK1x0LyogSW5pdGlhdGUgSEVMTE8gaGFuZHNoYWtlIGZyb20gdGhlIGNvcmUgbGF5ZXIgKi9cbitcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgMCk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocXJ0cl9lbmRwb2ludF9yZWdpc3Rlcik7XG5AQCAtODc5LDYgKzkzOCw5IEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnFydHJfbm9kZV9sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXHUwMDI2cXJ0cl9hbGxfbm9kZXMsIGl0ZW0pIHtcbitcdFx0LyogU2tpcCBub2RlcyB3aXRoIG5vIGFzc2lnbmVkIG5vZGUgSUQgeWV0LiAqL1xuK1x0XHRpZiAoUkVBRF9PTkNFKG5vZGUtXHUwMDNlbmlkKSA9PSBRUlRSX0VQX05JRF9BVVRPKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRza2JuID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0tFUk5FTCk7XG4gXHRcdGlmICghc2tibilcbiBcdFx0XHRicmVhaztcbmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuY1xuaW5kZXggYjNmOWJiY2Y5YWI5Yi4uNmQ5M2JjZDI1MGU3NSAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL25zLmNcbisrKyBiL25ldC9xcnRyL25zLmNcbkBAIC0yMTIsNiArMjEyLDcgQEAgc3RhdGljIHZvaWQgbG9va3VwX25vdGlmeShzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8sIHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2LFxuIFx0XHRwcl9lcnIoXCJmYWlsZWQgdG8gc2VuZCBsb29rdXAgbm90aWZpY2F0aW9uXFxuXCIpO1xuIH1cbiBcbisvKiBBbm5vdW5jZSB0aGUgbGlzdCBvZiBzZXJ2ZXJzIHJlZ2lzdGVyZWQgb24gdGhlIGxvY2FsIG5vZGUgKi9cbiBzdGF0aWMgaW50IGFubm91bmNlX3NlcnZlcnMoc3RydWN0IHNvY2thZGRyX3FydHIgKnNxKVxuIHtcbiBcdHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2O1xuQEAgLTMyNiwzOCArMzI3LDggQEAgc3RhdGljIGludCBzZXJ2ZXJfZGVsKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBwb3J0LCBib29sIGJjYXN0KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2F5X2hlbGxvKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0KVxuLXtcbi1cdHN0cnVjdCBxcnRyX2N0cmxfcGt0IHBrdDtcbi1cdHN0cnVjdCBtc2doZHIgbXNnID0geyB9O1xuLVx0c3RydWN0IGt2ZWMgaXY7XG4tXHRpbnQgcmV0O1xuLVxuLVx0aXYuaW92X2Jhc2UgPSBcdTAwMjZwa3Q7XG4tXHRpdi5pb3ZfbGVuID0gc2l6ZW9mKHBrdCk7XG4tXG4tXHRtZW1zZXQoXHUwMDI2cGt0LCAwLCBzaXplb2YocGt0KSk7XG4tXHRwa3QuY21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTtcbi1cbi1cdG1zZy5tc2dfbmFtZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKilkZXN0O1xuLVx0bXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKCpkZXN0KTtcbi1cbi1cdHJldCA9IGtlcm5lbF9zZW5kbXNnKHFydHJfbnMuc29jaywgXHUwMDI2bXNnLCBcdTAwMjZpdiwgMSwgc2l6ZW9mKHBrdCkpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cHJfZXJyKFwiZmFpbGVkIHRvIHNlbmQgaGVsbG8gbXNnXFxuXCIpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLyogQW5ub3VuY2UgdGhlIGxpc3Qgb2Ygc2VydmVycyByZWdpc3RlcmVkIG9uIHRoZSBsb2NhbCBub2RlICovXG4gc3RhdGljIGludCBjdHJsX2NtZF9oZWxsbyhzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXG4ge1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHNheV9oZWxsbyhzcSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0cmV0dXJuIGFubm91bmNlX3NlcnZlcnMoc3EpO1xuIH1cbiBcbkBAIC03NzQsMTAgKzc0NSw2IEBAIGludCBxcnRyX25zX2luaXQodm9pZClcbiBcdHFydHJfbnMuYmNhc3Rfc3Euc3Ffbm9kZSA9IFFSVFJfTk9ERV9CQ0FTVDtcbiBcdHFydHJfbnMuYmNhc3Rfc3Euc3FfcG9ydCA9IFFSVFJfUE9SVF9DVFJMO1xuIFxuLVx0cmV0ID0gc2F5X2hlbGxvKFx1MDAyNnFydHJfbnMuYmNhc3Rfc3EpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlcnJfd3E7XG4tXG4gXHQvKiBBcyB0aGUgcXJ0ciBucyBzb2NrZXQgb3duZXIgYW5kIGNyZWF0b3IgaXMgdGhlIHNhbWUgbW9kdWxlLCB3ZSBoYXZlXG4gXHQgKiB0byBkZWNyZWFzZSB0aGUgcXJ0ciBtb2R1bGUgcmVmZXJlbmNlIGNvdW50IHRvIGd1YXJhbnRlZSB0aGF0IGl0XG4gXHQgKiByZW1haW5zIHplcm8gYWZ0ZXIgdGhlIG5zIHNvY2tldCBpcyBjcmVhdGVkLCBvdGhlcndpc2UsIGV4ZWN1dGluZ1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzE6MTguMjIwNzM0MDk4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1NDIwNjUyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBRUlRSIEhlbGxvIFBhY2tldCBSZWxvY2F0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3FydHIvYWZfcXJ0ci5jYCBhbmQgYG5ldC9xcnRyL25zLmNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IHNvbWUgY29yZSBjaGFuZ2VzIHRvIHRoZSBRdWFsY29tbSBSb3V0ZXIgVHJhbnNwb3J0IChRUlRSKSBzdWJzeXN0ZW0uIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIG1vdmluZyB0aGUgc2VuZGluZyBvZiB0aGUgYFFSVFJfVFlQRV9IRUxMT2AgcGFja2V0LiBQcmV2aW91c2x5IGhhbmRsZWQgYnkgdGhlIG5hbWVzZXJ2aWNlIChgbnMuY2ApLCBpdCdzIG5vdyBiZWluZyBzaGlmdGVkIHRvIHRoZSBjb3JlIGxheWVyIChgYWZfcXJ0ci5jYCkuIFRoYXQncyBhIGxvZ2ljYWwgbW92ZSwgcHJvYmFibHkgZm9yIGJldHRlciBpbnRlZ3JhdGlvbiBhbmQgY29udHJvbC5cblxuSW50ZXJlc3RpbmcgdGhhdCB0aGV5IGFyZSB1c2luZyBkZWxheWVkIHdvcmsgKGBzYXlfaGVsbG9gKSB0byBhY3R1YWxseSBzZW5kIHRoZSBoZWxsbyBwYWNrZXQuIFRoaXMgc3VnZ2VzdHMgdGhleSB3YW50IHRvIGF2b2lkIGJsb2NraW5nIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGdvb2QuIExldCdzIGRpZyBpbnRvIHRoZSBgcXJ0cl9oZWxsb193b3JrYCBmdW5jdGlvbiBhbmQgc2VlIGhvdyBpdCdzIGltcGxlbWVudGVkLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlOlxuYGBgY1xuK3N0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX3FydHIgZnJvbSA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciB0byA9IHtBRl9RSVBDUlRSLCAwLCBRUlRSX1BPUlRfQ1RSTH07XG4rXHRzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqcGt0O1xuK1x0c3RydWN0IHFydHJfbm9kZSAqbm9kZTtcbitcdHN0cnVjdCBxcnRyX3NvY2sgKmN0cmw7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1xuK1x0bm9kZSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBxcnRyX25vZGUsIHNheV9oZWxsbyk7XG4rXG4rXHQvKiBOUyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB3ZSBjYW4gc2VuZDsgcmV0cnkgd2l0aCBiYWNrb2ZmIGlmIG5vdCByZWFkeSAqL1xuK1x0Y3RybCA9IHFydHJfcG9ydF9sb29rdXAoUVJUUl9QT1JUX0NUUkwpO1xuK1x0aWYgKCFjdHJsKSB7XG4rXHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcdTAwMjZwa3QsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFza2IpIHtcbitcdFx0cXJ0cl9wb3J0X3B1dChjdHJsKTtcbitcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5vZGUtXHUwMDNlc2F5X2hlbGxvLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwa3QtXHUwMDNlY21kID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0hFTExPKTtcbitcdGZyb20uc3Ffbm9kZSA9IHFydHJfbG9jYWxfbmlkO1xuK1x0dG8uc3Ffbm9kZSA9IG5vZGUtXHUwMDNlbmlkO1xuK1x0cXJ0cl9ub2RlX2VucXVldWUobm9kZSwgc2tiLCBRUlRSX1RZUEVfSEVMTE8sIFx1MDAyNmZyb20sIFx1MDAyNnRvKTtcbitcdHFydHJfcG9ydF9wdXQoY3RybCk7XG4rfVxuYGBgXG5cbk9rYXksIHNvIHRoZSBgcXJ0cl9oZWxsb193b3JrYCBmdW5jdGlvbiBkb2VzIGEgZmV3IHRoaW5ncy4gSXQgcmV0cmlldmVzIHRoZSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVsYXllZCB3b3JrLCBsb29rcyB1cCB0aGUgY29udHJvbCBzb2NrZXQgKGBRUlRSX1BPUlRfQ1RSTGApLCBjaGVja3MgaWYgdGhlIG5hbWVzZXJ2ZXIgaXMgYm91bmQsIGFuZCBpZiBub3QsIGl0IHNjaGVkdWxlcyBhbm90aGVyIGRlbGF5ZWQgd29yayBpbnN0YW5jZSB3aXRoIGEgYmFja29mZi4gVGhhdCdzIGEgZ29vZCB3YXkgdG8gaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxuXG5JZiB0aGUgY29udHJvbCBzb2NrZXQgaXMgYXZhaWxhYmxlLCBpdCBhbGxvY2F0ZXMgYSBjb250cm9sIHBhY2tldCAoYHNrYmApLCBwb3B1bGF0ZXMgdGhlIGBRUlRSX1RZUEVfSEVMTE9gIGNvbW1hbmQsIHNldHMgdXAgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLCBhbmQgdGhlbiBlbnF1ZXVlcyB0aGUgcGFja2V0IHVzaW5nIGBxcnRyX25vZGVfZW5xdWV1ZWAuIFRoaXMgbWFrZXMgc2Vuc2UuIEl0IGFsc28gZ3JhY2VmdWxseSBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIGZhaWx1cmUsIHNjaGVkdWxpbmcgYW5vdGhlciBkZWxheWVkIHdvcmsgaW5zdGFuY2UuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgcGFja2V0IGFsbG9jYXRpb24uIE5lZWQgdG8gc2VlIGhvdyBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgaXMgaW1wbGVtZW50ZWQuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMgb2YgdGhhdCBTS0IgYWxsb2NhdGlvbiwgZXNwZWNpYWxseSBpdHMgc2l6ZSBhbmQgYW55IGFzc29jaWF0ZWQgZmxhZ3MsIGFuZCBob3cgdGhlIHBheWxvYWQgcG9pbnRlciBgcGt0YCBpcyBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzU1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzE6MjcuNzYyODAzNzI1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk1Nzc3NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFydHJfYWxsb2NfY3RybF9wYWNrZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jPTU2Nj1FWFBPUlRfU1lNQk9MX0dQTChxcnRyX2VuZHBvaW50X3Bvc3QpO1xcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTU2OC0vKipcXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NTY5OiAqIHFydHJfYWxsb2NfY3RybF9wYWNrZXQoKSAtIGFsbG9jYXRlIGNvbnRyb2wgcGFja2V0IHNrYlxcbm5ldC9xcnRyL2FmX3FydHIuYy01NzAtICogQHBrdDogcmVmZXJlbmNlIHRvIHFydHJfY3RybF9wa3QgcG9pbnRlclxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTU3Ny0gKi9cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NTc4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCxcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNTc5LVxcdFxcdFxcdFxcdFxcdCAgICAgIGdmcF90IGZsYWdzKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTU5ND1zdGF0aWMgdm9pZCBxcnRyX2hlbGxvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTYxMS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NjEyOlxcdHNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoXFx1MDAyNnBrdCwgR0ZQX0tFUk5FTCk7XFxubmV0L3FydHIvYWZfcXJ0ci5jLTYxMy1cXHRpZiAoIXNrYikge1xcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jPTY3NT12b2lkIHFydHJfZW5kcG9pbnRfdW5yZWdpc3RlcihzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXApXFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNjk3LVxcdFxcdHNyYy5zcV9ub2RlID0gaXRlci5pbmRleDtcXG5uZXQvcXJ0ci9hZl9xcnRyLmM6Njk4OlxcdFxcdHNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoXFx1MDAyNnBrdCwgR0ZQX0FUT01JQyk7XFxubmV0L3FydHIvYWZfcXJ0ci5jLTY5OS1cXHRcXHRpZiAoc2tiKSB7XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM9NzQ0PXN0YXRpYyB2b2lkIHFydHJfcG9ydF9yZW1vdmUoc3RydWN0IHFydHJfc29jayAqaXBjKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTc1NC1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NzU1OlxcdHNrYiA9IHFydHJfYWxsb2NfY3RybF9wYWNrZXQoXFx1MDAyNnBrdCwgR0ZQX0tFUk5FTCk7XFxubmV0L3FydHIvYWZfcXJ0ci5jLTc1Ni1cXHRpZiAoc2tiKSB7XFxuLS1cXG5uZXQvcXJ0ci9hZl9xcnRyLmM9MTA2MD1zdGF0aWMgaW50IHFydHJfc2VuZF9yZXN1bWVfdHgoc3RydWN0IHFydHJfY2IgKmNiKVxcbi0tXFxubmV0L3FydHIvYWZfcXJ0ci5jLTEwNzItXFxubmV0L3FydHIvYWZfcXJ0ci5jOjEwNzM6XFx0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcXHUwMDI2cGt0LCBHRlBfS0VSTkVMKTtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtMTA3NC1cXHRpZiAoIXNrYikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMToyOS43NTg1ODcxNTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwMDg0MTE4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBiZWluZyBpbXBsZW1lbnRlZCwgd2hhdCdzIGhhcHBlbmluZyBhdCBhIGxvdyBsZXZlbC4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIG9mIHRoZSBRUlRSIG1lc3NhZ2luZyBzeXN0ZW0uIEknbSBhbHJlYWR5IGltYWdpbmluZyBhIHN0cnVjdHVyZSBhbGxvY2F0aW9uLCBsaWtlbHkgc29tZSBmb3JtIG9mIGBrbWFsbG9jYCBvciBzaW1pbGFyLCBmb2xsb3dlZCBieSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2V0IGhlYWRlci4gSSdtIGV4cGVjdGluZyBzb21lIGZpZWxkIHNldHVwIOKAkyB0aGUgdHlwZSwgZmxhZ3MsIG1heWJlIGEgc2VxdWVuY2UgbnVtYmVyLCBhbmQgYWRkcmVzc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbnRyb2wgY2hhbm5lbC4gVGhlcmUgbWlnaHQgYmUgc29tZSBlcnJvciBjaGVja2luZyBpbnZvbHZlZCwgZW5zdXJpbmcgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUgYW5kIHRoYXQgcGFyYW1ldGVycyBhcmUgdmFsaWQuIEknbSBhbHNvIHdvbmRlcmluZyBhYm91dCBwb3RlbnRpYWwgbWVtb3J5IGFsaWdubWVudCBjb25zaWRlcmF0aW9ucyDigJMgc29tZXRoaW5nIGxpa2UgdGhpcyBpcyBwcm9iYWJseSBwZXJmb3JtYW5jZS1zZW5zaXRpdmUsIHNvIHRoZXknbGwgd2FudCBlZmZpY2llbnQgdXNlIG9mIHRoZSBjYWNoZS4gSSBhbHNvIHdvbmRlciBpZiB0aGV5J3JlIHVzaW5nIGEgcHJlLWFsbG9jYXRlZCBwb29sIGluIHRoZSBmYXN0IHBhdGggdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIG1hbGxvYyBpbiB0aGUgY29tbW9uIGNhc2UuIEkgbmVlZCB0byBzZWUgaWYgaXTigJlzIGRlc2lnbmVkIHRvIGhhbmRsZSBkaWZmZXJlbnQgc2l6ZXMgb3IgdHlwZXMgb2YgY29udHJvbCBwYWNrZXRzLCBvciBpZiBpdCdzIHNwZWNpYWxpemVkIGZvciBhIHNwZWNpZmljIG9uZS4gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJldHVybiB2YWx1ZSwgaXMgaXQgYSBwb2ludGVyIHRvIHRoZSBwYWNrZXQgb3IgYW4gZXJyb3IgY29kZT8gSSdtIGFudGljaXBhdGluZyBzb21lIGtpbmQgb2YgZXJyb3IgY2hlY2tpbmcgdG8gaGFuZGxlIHRoZSBmYWlsdXJlIGNhc2VzLCBhbmQgSSBob3BlIGl0J3Mgd2VsbC1kb2N1bWVudGVkLiBBbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODYyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzE6MzQuNDU5NDMxMjc3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTcwOlxcdCAqIEBwa3Q6IHJlZmVyZW5jZSB0byBxcnRyX2N0cmxfcGt0IHBvaW50ZXJcXG4gNTcxOlxcdCAqIEBmbGFnczogdGhlIHR5cGUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlXFxuIDU3MjpcXHQgKlxcbiA1NzM6XFx0ICogUmV0dXJucyBuZXdseSBhbGxvY2F0ZWQgc2tfYnVmZiwgb3IgTlVMTCBvbiBmYWlsdXJlXFxuIDU3NDpcXHQgKlxcbiA1NzU6XFx0ICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYSBza19idWZmIGxhcmdlIGVub3VnaCB0byBjYXJyeSBhIHFydHJfY3RybF9wa3QgYW5kXFxuIDU3NjpcXHQgKiBvbiBzdWNjZXNzIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2wgcGFja2V0IGluIEBwa3QuXFxuIDU3NzpcXHQgKi9cXG4gNTc4OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXJ0cl9hbGxvY19jdHJsX3BhY2tldChzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCAqKnBrdCxcXG4gNTc5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGdmcF90IGZsYWdzKVxcbiA1ODA6XFx0e1xcbiA1ODE6XFx0XFx0Y29uc3QgaW50IHBrdF9sZW4gPSBzaXplb2Yoc3RydWN0IHFydHJfY3RybF9wa3QpO1xcbiA1ODI6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0c2tiID0gYWxsb2Nfc2tiKFFSVFJfSERSX01BWF9TSVpFICsgcGt0X2xlbiwgZmxhZ3MpO1xcbiA1ODU6XFx0XFx0aWYgKCFza2IpXFxuIDU4NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNTg3OlxcdFxcbiA1ODg6XFx0XFx0c2tiX3Jlc2VydmUoc2tiLCBRUlRSX0hEUl9NQVhfU0laRSk7XFxuIDU4OTpcXHRcXHQqcGt0ID0gc2tiX3B1dF96ZXJvKHNrYiwgcGt0X2xlbik7XFxuIDU5MDpcXHRcXG4gNTkxOlxcdFxcdHJldHVybiBza2I7XFxuIDU5MjpcXHR9XFxuIDU5MzpcXHRcXG4gNTk0OlxcdHN0YXRpYyB2b2lkIHFydHJfaGVsbG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDU5NTpcXHR7XFxuIDU5NjpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBmcm9tID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcXG4gNTk3OlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9xcnRyIHRvID0ge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfTtcXG4gNTk4OlxcdFxcdHN0cnVjdCBxcnRyX2N0cmxfcGt0ICpwa3Q7XFxuIDU5OTpcXHRcXHRzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMTozNC40NTk2NzEwMTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTc1MDA5ODIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFFSVFIgSGVsbG8gUGFja2V0IFRyYW5zbWlzc2lvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgXCJoZWxsb1wiIHBhY2tldCBpcyBiZWluZyBoYW5kbGVkIGluIHRoZSBRUlRSIGZyYW1ld29yayBub3cuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBza2JfcHV0X3plcm9gIGlzIGJlaW5nIHVzZWQsIHNvIHRoZSBwYWNrZXQncyBwYXlsb2FkIGlzIGd1YXJhbnRlZWQgdG8gYmUgemVyb2VkIG91dCBpbml0aWFsbHkuIEdvb2QuIFRoZW4sIHdpdGhpbiBgcXJ0cl9oZWxsb193b3JrYCwgdGhlIGBwa3QtXHUwMDNlY21kYCBmaWVsZCBpcyBleHBsaWNpdGx5IHNldCB0byBgUVJUUl9UWVBFX0hFTExPYCB1c2luZyBgY3B1X3RvX2xlMzJgLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHBhY2tldCBpcywgYWdhaW4sIHplcm9lZCBvdXQuIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcywgYGZyb21gIGFuZCBgdG9gLCBhcmUgaW5pdGlhbGl6ZWQgd2l0aCBge0FGX1FJUENSVFIsIDAsIFFSVFJfUE9SVF9DVFJMfWAsIHdoaWNoLCBkdWUgdG8gdGhlIGBzb2NrYWRkcl9xcnRyYCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgZWZmZWN0aXZlbHkgemVyb2VzIHRoZSByZW1haW5pbmcgZmllbGRzLiBGaW5hbGx5LCBpdCdzIGVucXVldWVkIHVzaW5nIGBxcnRyX25vZGVfZW5xdWV1ZWAuXG5cbkJ1dCBob2xkIG9uIGEgc2Vjb25k4oCmIEknbSByZW1lbWJlcmluZyB0aGUgb2xkZXIgdmVyc2lvbiwgcGFydGljdWxhcmx5IHRoZSBgc2F5X2hlbGxvYCBmdW5jdGlvbiBpbiBgbmV0L3FydHIvbnMuY2AuIEFoLCB5ZXMsIGl0IHVzZWQgdG8gdXNlIGBrZXJuZWxfc2VuZG1zZ2AgdG8gdHJhbnNtaXQgdGhlIGhlbGxvIHBhY2tldC4gVGhlIG9sZCBjb2RlIHNuaXBwZXQgc2hvd3MgdGhpcyBxdWl0ZSBjbGVhcmx5LiBJdCBleHBsaWNpdGx5IHNldHMgdGhlIHBhY2tldCBjb250ZW50cywgYW5kIHRoZW4gc2VuZHMgaXQgdmlhIGBrZXJuZWxfc2VuZG1zZ2AuXG5cblNvLCB0aGUgY3JpdGljYWwgZGlmZmVyZW5jZSBpcyB0aGUgdHJhbnNtaXNzaW9uIG1ldGhvZDogZGlyZWN0IGVucXVldWUgdmVyc3VzIGBrZXJuZWxfc2VuZG1zZ2AuIE5vdywgdGhpcyBjaGFuZ2UgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgY29uY2VybjogSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gbGVhayBpbnRvIHRoZSBoZWxsbyBwYWNrZXQ/XG5cbkkgYW0gb2JzZXJ2aW5nIHRoYXQgdGhlIGBmcm9tYCBhbmQgYHRvYCBgc29ja2FkZHJfcXJ0cmAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjay4gVGhlIGRlZmluaXRpb24gb2YgdGhlIHN0cnVjdHVyZSBpcyBjcml0aWNhbCBoZXJlLiBMZXQgbWUgY2hlY2sgdGhlIGRlZmluaXRpb27igKZcblxuXG4iLCJJbnB1dFRva2VucyI6NzcwNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMxOjQ0LjIwOTc3MzI0MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MTUyNjM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvcXJ0ci5oLTEwLVxcbmluY2x1ZGUvdWFwaS9saW51eC9xcnRyLmg6MTE6c3RydWN0IHNvY2thZGRyX3FydHIge1xcbmluY2x1ZGUvdWFwaS9saW51eC9xcnRyLmgtMTItXFx0X19rZXJuZWxfc2FfZmFtaWx5X3Qgc3FfZmFtaWx5O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMTo0Ni42NzEzMDQ5NTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5MDE4ODY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIHN5bnRoZXNpemUgdGhlc2UgdGhvdWdodHMgYXMgaWYgdGhleSB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBteSBmaWVsZC4gSGVyZSB3ZSBnbzpcblxuKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBOdWFuY2VzKipcblxuQWxyaWdodCwgYmVmb3JlIEkgY29tbWl0IHRvIGFueSBraW5kIG9mIGFuYWx5c2lzIG9yIHJlc3BvbnNlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgKmVudGlyZSogcGljdHVyZS4gSXQncyBjcnVjaWFsIGZvciBtZSwgYXMgYW4gZXhwZXJ0LCB0byB1bmRlcnN0YW5kIHRoZSBzdWJqZWN0IG1hdHRlciBpbiBpdHMgZW50aXJldHkuIEkgY2FuJ3QganVzdCBza2ltIHRoZSBzdXJmYWNlLiBJIG5lZWQgYSByb2J1c3QsIGNvbXByZWhlbnNpdmUgZGVmaW5pdGlvbiAtIG5vIHNob3J0Y3V0cywgbm8gYXNzdW1wdGlvbnMuIEkgbmVlZCBhbGwgdGhlIGNvbnRleHR1YWwgZmFjdG9ycywgdGhlIGZ1bGwgc2NvcGUgb2YgYW55IHRlY2huaWNhbCBqYXJnb24gb3IgdGhlb3J5LCBhbmQgdGhlIGV4YWN0IGludGVudCBvZiB0aGUgZG9jdW1lbnQuIFRoYXQncyB3aGF0IEkgcmVxdWlyZSBiZWZvcmUgSSBzdGFydC4gSSBuZWVkIHRvIGJlIGV4YWN0LiBJdCBpcyBlc3NlbnRpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NDYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMxOjUwLjk2MTQ5ODIxM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvcXJ0ci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDEwOlxcdFxcbiAgMTE6XFx0c3RydWN0IHNvY2thZGRyX3FydHIge1xcbiAgMTI6XFx0XFx0X19rZXJuZWxfc2FfZmFtaWx5X3Qgc3FfZmFtaWx5O1xcbiAgMTM6XFx0XFx0X191MzIgc3Ffbm9kZTtcXG4gIDE0OlxcdFxcdF9fdTMyIHNxX3BvcnQ7XFxuICAxNTpcXHR9O1xcbiAgMTY6XFx0XFxuICAxNzpcXHRlbnVtIHFydHJfcGt0X3R5cGUge1xcbiAgMTg6XFx0XFx0UVJUUl9UWVBFX0RBVEFcXHRcXHQ9IDEsXFxuICAxOTpcXHRcXHRRUlRSX1RZUEVfSEVMTE9cXHRcXHQ9IDIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMxOjUwLjk2MTU5NTk2M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTA0MTYxODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIHNvY2thZGRyX3FydHIgU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IHNvY2thZGRyX3FydHJgIGFuZCBpbW1lZGlhdGVseSBJJ20gbm90aWNpbmcgc29tZXRoaW5nIHRoYXQgcGlxdWVzIG15IGludGVyZXN0LiBJdCBoYXMgdGhlIHN0YW5kYXJkIGBzcV9mYW1pbHlgIGZpZWxkLCBhIG5vZGUgSUQgKGBzcV9ub2RlYCksIGFuZCBhIHBvcnQgSUQgKGBzcV9wb3J0YCkuIEZpbmUuIEJ1dCB0aGVuIEkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGF0YSB0eXBlcy4gSSBrbm93IGBfX2tlcm5lbF9zYV9mYW1pbHlfdGAgaXMgdHlwaWNhbGx5IGFuIGB1bnNpZ25lZCBzaG9ydGAsIHdoaWNoIG1lYW5zIGl04oCZcyBvbmx5IHR3byBieXRlcy4gVGhlbiBgc3Ffbm9kZWAgaXMgYSBgX191MzJgLCB0aGF0J3MgZm91ciBieXRlcy5cblxuVGhhdCdzIHdoZW4gaXQgaGl0cyBtZTogdGhlcmUncyBnb2luZyB0byBiZSBwYWRkaW5nIGluIHRoZXJlLiBXZSd2ZSBnb3QgdHdvIGJ5dGVzIGZvciBgc3FfZmFtaWx5YCwgZm91ciBieXRlcyBmb3IgYHNxX25vZGVgLCBtZWFuaW5nIGEgdHdvLWJ5dGUgZ2FwIGlzIGdldHRpbmcgaW5zZXJ0ZWQgc29tZXdoZXJlIHRvIGFsaWduIG1lbW9yeS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlZmluaXRpb24gb2YgYF9fa2VybmVsX3NhX2ZhbWlseV90YCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGp1c3QgaW4gY2FzZSB0aGVyZSdzIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgdmFyaWF0aW9uIEknbSBub3QgYXdhcmUgb2YuIEdvdHRhIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgdmFsaWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMxOjU1LjQ2NTc2MDgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE3MDY2Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR5cGVkZWYuKl9fa2VybmVsX3NhX2ZhbWlseV90XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc29ja2V0Lmg9MjY9ZXh0ZXJuIHZvaWQgc29ja2V0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc29ja2V0LmgtMjgtXFxuaW5jbHVkZS9saW51eC9zb2NrZXQuaDoyOTp0eXBlZGVmIF9fa2VybmVsX3NhX2ZhbWlseV90XFx0c2FfZmFtaWx5X3Q7XFxuaW5jbHVkZS9saW51eC9zb2NrZXQuaC0zMC1cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9zb2NrZXQuaC05LVxcbmluY2x1ZGUvdWFwaS9saW51eC9zb2NrZXQuaDoxMDp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX3NhX2ZhbWlseV90O1xcbmluY2x1ZGUvdWFwaS9saW51eC9zb2NrZXQuaC0xMS1cXG4tLVxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvbGludXgvc29ja2V0Lmg9MjY9ZXh0ZXJuIHZvaWQgc29ja2V0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxKTtcXG4tLVxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvbGludXgvc29ja2V0LmgtMjgtXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS9saW51eC9zb2NrZXQuaDoyOTp0eXBlZGVmIF9fa2VybmVsX3NhX2ZhbWlseV90XFx0c2FfZmFtaWx5X3Q7XFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS9saW51eC9zb2NrZXQuaC0zMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzE6NTguMDgyODM1Nzk4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MjM1MTY1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgc29ja2FkZHJfcXJ0cmAgU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIGNvbmZpcm1pbmcgdGhhdCBhbiBgdW5zaWduZWQgc2hvcnRgIGlzIGluZGVlZCAyIGJ5dGVzLiBOb3csIGxldCdzIGJyZWFrIGRvd24gdGhlIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgZGVmaW5pdGlvbi4gSSBzZWUgYHNxX2ZhbWlseWAgYXMgYSAyLWJ5dGUgZmllbGQuIFRoZW4sIHRoZXJlJ3MgbGlrZWx5IDIgYnl0ZXMgb2YgcGFkZGluZy4gRm9sbG93aW5nIHRoYXQsIHdlIGhhdmUgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAsIGJvdGggYF9fdTMyYCB3aGljaCBJIGtub3cgYXJlIDQgYnl0ZXMgZWFjaC4gVGhhdCBwdXRzIHRoZSB0b3RhbCBhdCAxMiBieXRlczogYHNxX2ZhbWlseWAgKDIgYnl0ZXMpICsgcGFkZGluZyAoMiBieXRlcykgKyBgc3Ffbm9kZWAgKDQgYnl0ZXMpICsgYHNxX3BvcnRgICg0IGJ5dGVzKS4gTG9va2luZyBhdCB0aGUgbWVtb3J5IGxheW91dCwgYHNxX2ZhbWlseWAgc3RhcnRzIGF0IG9mZnNldCAwLCBgc3Ffbm9kZWAgYXQgNCwgYW5kIGBzcV9wb3J0YCBhdCA4LlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBub3cgaXMgYWJvdXQgdGhlIHBhZGRpbmcuIElmIEkgaW5pdGlhbGl6ZSBpdCB3aXRoIHNvbWV0aGluZyBsaWtlIGB7QUZfUUlQQ1JUUiwgMCwgUVJUUl9QT1JUX0NUUkx9YCwgd2lsbCB0aGUgcGFkZGluZyBiZSB6ZXJvZWQ/IEkgbmVlZCB0byByZW1lbWJlciB0aGUgQyBzdGFuZGFyZCBoZXJlLiBJdCdzIGRpY2V5OyBwYWRkaW5nIGJ5dGVzIGFyZW4ndCAqZ3VhcmFudGVlZCogdG8gYmUgemVyb2VkLCBldmVuIGlmIHRoZSBzdHJ1Y3QgaXMgcGFydGlhbGx5IGluaXRpYWxpemVkLiBBbmQgZXZlbiBpZiBJIGV4cGxpY2l0bHkgdXNlIHNvbWV0aGluZyBsaWtlIGB7MH1gIG9yIGEgZGVzaWduYXRlZCBpbml0aWFsaXplciBzeW50YXgsIG1vZGVybiBjb21waWxlcnMgbWlnaHQgKmdlbmVyYWxseSogemVybyBpdCwgYnV0IGl0J3Mgbm90IGEgaGFyZCBndWFyYW50ZWUuIEkgY2FuJ3QgcmVseSBvbiB0aGF0IGJlaGF2aW9yIGZvciByb2J1c3RuZXNzLlxuXG5SaWdodCwgYGZyb21gIGFuZCBgdG9gIGFyZSBwYXNzZWQgdG8gYHFydHJfbm9kZV9lbnF1ZXVlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBmdW5jdGlvbiBiZXR0ZXIsIHNvIEkgd2lsbCBub3cgbG9vayBhdCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMjowNC42MDYzNTUzNDRaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9xcnRyL2FmX3FydHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDA6XFx0XFx0fVxcbiAzNDE6XFx0fVxcbiAzNDI6XFx0XFxuIDM0MzpcXHQvKiBQYXNzIGFuIG91dGdvaW5nIHBhY2tldCBzb2NrZXQgYnVmZmVyIHRvIHRoZSBlbmRwb2ludCBkcml2ZXIuICovXFxuIDM0NDpcXHRzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuIDM0NTpcXHRcXHRcXHRcXHQgICAgIGludCB0eXBlLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSxcXG4gMzQ2OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNvY2thZGRyX3FydHIgKnRvKVxcbiAzNDc6XFx0e1xcbiAzNDg6XFx0XFx0c3RydWN0IHFydHJfaGRyX3YxICpoZHI7XFxuIDM0OTpcXHRcXHRzaXplX3QgbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuIDM1MDpcXHRcXHRpbnQgcmMsIGNvbmZpcm1fcng7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm5vZGUtXFx1MDAzZWVwX2xvY2spO1xcbiAzNTM6XFx0XFx0aWYgKCFub2RlLVxcdTAwM2VoZWxsb19zZW50IFxcdTAwMjZcXHUwMDI2IHR5cGUgIT0gUVJUUl9UWVBFX0hFTExPKSB7XFxuIDM1NDpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5vZGUtXFx1MDAzZWVwX2xvY2spO1xcbiAzNTU6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDM1NjpcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gMzU3OlxcdFxcdH1cXG4gMzU4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bm9kZS1cXHUwMDNlZXBfbG9jayk7XFxuIDM1OTpcXHRcXG4gMzYwOlxcdFxcdGNvbmZpcm1fcnggPSBxcnRyX3R4X3dhaXQobm9kZSwgdG8tXFx1MDAzZXNxX25vZGUsIHRvLVxcdTAwM2VzcV9wb3J0LCB0eXBlKTtcXG4gMzYxOlxcdFxcdGlmIChjb25maXJtX3J4IFxcdTAwM2MgMCkge1xcbiAzNjI6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDM2MzpcXHRcXHRcXHRyZXR1cm4gY29uZmlybV9yeDtcXG4gMzY0OlxcdFxcdH1cXG4gMzY1OlxcdFxcbiAzNjY6XFx0XFx0aGRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKmhkcikpO1xcbiAzNjc6XFx0XFx0aGRyLVxcdTAwM2V2ZXJzaW9uID0gY3B1X3RvX2xlMzIoUVJUUl9QUk9UT19WRVJfMSk7XFxuIDM2ODpcXHRcXHRoZHItXFx1MDAzZXR5cGUgPSBjcHVfdG9fbGUzMih0eXBlKTtcXG4gMzY5OlxcdFxcdGhkci1cXHUwMDNlc3JjX25vZGVfaWQgPSBjcHVfdG9fbGUzMihmcm9tLVxcdTAwM2VzcV9ub2RlKTtcXG4gMzcwOlxcdFxcdGhkci1cXHUwMDNlc3JjX3BvcnRfaWQgPSBjcHVfdG9fbGUzMihmcm9tLVxcdTAwM2VzcV9wb3J0KTtcXG4gMzcxOlxcdFxcdGlmICh0by1cXHUwMDNlc3FfcG9ydCA9PSBRUlRSX1BPUlRfQ1RSTCkge1xcbiAzNzI6XFx0XFx0XFx0aGRyLVxcdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKFJFQURfT05DRShub2RlLVxcdTAwM2VuaWQpKTtcXG4gMzczOlxcdFxcdFxcdGhkci1cXHUwMDNlZHN0X3BvcnRfaWQgPSBjcHVfdG9fbGUzMihRUlRSX1BPUlRfQ1RSTCk7XFxuIDM3NDpcXHRcXHR9IGVsc2Uge1xcbiAzNzU6XFx0XFx0XFx0aGRyLVxcdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKHRvLVxcdTAwM2VzcV9ub2RlKTtcXG4gMzc2OlxcdFxcdFxcdGhkci1cXHUwMDNlZHN0X3BvcnRfaWQgPSBjcHVfdG9fbGUzMih0by1cXHUwMDNlc3FfcG9ydCk7XFxuIDM3NzpcXHRcXHR9XFxuIDM3ODpcXHRcXG4gMzc5OlxcdFxcdGhkci1cXHUwMDNlc2l6ZSA9IGNwdV90b19sZTMyKGxlbik7XFxuIDM4MDpcXHRcXHRoZHItXFx1MDAzZWNvbmZpcm1fcnggPSBjcHVfdG9fbGUzMighIWNvbmZpcm1fcngpO1xcbiAzODE6XFx0XFxuIDM4MjpcXHRcXHRyYyA9IHNrYl9wdXRfcGFkdG8oc2tiLCBBTElHTihsZW4sIDQpICsgc2l6ZW9mKCpoZHIpKTtcXG4gMzgzOlxcdFxcbiAzODQ6XFx0XFx0aWYgKCFyYykge1xcbiAzODU6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bm9kZS1cXHUwMDNlZXBfbG9jayk7XFxuIDM4NjpcXHRcXHRcXHRyYyA9IC1FTk9ERVY7XFxuIDM4NzpcXHRcXHRcXHRpZiAobm9kZS1cXHUwMDNlZXApXFxuIDM4ODpcXHRcXHRcXHRcXHRyYyA9IG5vZGUtXFx1MDAzZWVwLVxcdTAwM2V4bWl0KG5vZGUtXFx1MDAzZWVwLCBza2IpO1xcbiAzODk6XFx0XFx0XFx0ZWxzZVxcbiAzOTA6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDM5MTpcXHRcXHRcXHRpZiAoIXJjIFxcdTAwMjZcXHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxcbiAzOTI6XFx0XFx0XFx0XFx0bm9kZS1cXHUwMDNlaGVsbG9fc2VudCA9IHRydWU7XFxuIDM5MzpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5vZGUtXFx1MDAzZWVwX2xvY2spO1xcbiAzOTQ6XFx0XFx0fVxcbiAzOTU6XFx0XFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxcbiAzOTY6XFx0XFx0ICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUgKi9cXG4gMzk3OlxcdFxcdGlmIChyYyBcXHUwMDI2XFx1MDAyNiBjb25maXJtX3J4KVxcbiAzOTg6XFx0XFx0XFx0cXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by1cXHUwMDNlc3Ffbm9kZSwgdG8tXFx1MDAzZXNxX3BvcnQpO1xcbiAzOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMyOjA0LjYwNjUxNzI1M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE1NDgwNjkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEluZm9ybWF0aW9uIExlYWtzIGluIFFSVFIgUGFja2V0IENvbnN0cnVjdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBhYm91dCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha2FnZSB0aHJvdWdoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgcXJ0cl9ub2RlX2VucXVldWVgIGZ1bmN0aW9uLiBJIHNlZSB0aGF0IGl0J3Mgb25seSB1c2luZyB0aGUgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAgbWVtYmVycyBmcm9tIHRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIHN0cnVjdHVyZXMuIEl0J3Mgbm90IGRpcmVjdGx5IGNvcHlpbmcgdGhlIGVudGlyZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIGNvbnRlbnQsIGFuZCB0aGF0J3MgZ29vZC4gVGhlIGZ1bmN0aW9uIGNvbnN0cnVjdHMgdGhlIGBzdHJ1Y3QgcXJ0cl9oZHJfdjFgIHVzaW5nIHRob3NlIGV4dHJhY3RlZCB2YWx1ZXM6XG5cbmBgYGNcblx0aGRyLVx1MDAzZXNyY19ub2RlX2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cdTAwM2VzcV9ub2RlKTtcblx0aGRyLVx1MDAzZXNyY19wb3J0X2lkID0gY3B1X3RvX2xlMzIoZnJvbS1cdTAwM2VzcV9wb3J0KTtcbmBgYFxuXG5TbywgdGhlIHBhZGRpbmcgd2l0aGluIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgZG9lc24ndCBzZWVtIHRvIGJlIGFjY2Vzc2VkIG9yIGxlYWtlZCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgd2FzIGhvcGluZyB0byBjb25maXJtLlxuXG5CdXQgSSBuZWVkIHRvIGJlIG1vcmUgdGhvcm91Z2gsIHNvIEknbGwgY2hlY2sgZm9yIG90aGVyIHNvdXJjZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEluIHRoZSBgcXJ0cl9oZWxsb193b3JrYCBmdW5jdGlvbiwgdGhlIGNvZGUgYWxsb2NhdGVzIGEgY29udHJvbCBwYWNrZXQ6XG5cbmBgYGNcblx0c2tiID0gcXJ0cl9hbGxvY19jdHJsX3BhY2tldChcdTAwMjZwa3QsIEdGUF9LRVJORUwpO1xuXHRpZiAoIXNrYikge1xuLi4uXG5cdHBrdC1cdTAwM2VjbWQgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfSEVMTE8pO1xuYGBgXG5cbkFoLCByaWdodCwgYHFydHJfYWxsb2NfY3RybF9wYWNrZXRgIHVzZXMgYHNrYl9wdXRfemVyb2AuIFRoYXQgbWVhbnMgdGhlIGBwa3RgIHN0cnVjdHVyZSBpcyAqZnVsbHkqIHplcm9lZC4gVGhlIGNvZGUgKnRoZW4qIHNldHMgdGhlIGBjbWRgIGZpZWxkLiBUaGUgc2tiIGlzIHRoZW4gcGFzc2VkIHRvIGBxcnRyX25vZGVfZW5xdWV1ZWAuXG5cbldpdGhpbiBgcXJ0cl9ub2RlX2VucXVldWVgLCB0aGUgaGVhZGVyIGlzIGNyZWF0ZWQuXG5cbmBgYGNcblx0aGRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKmhkcikpO1xuXHRoZHItXHUwMDNldmVyc2lvbiA9IGNwdV90b19sZTMyKFFSVFJfUFJPVE9fVkVSXzEpO1xuXHRoZHItXHUwMDNldHlwZSA9IGNwdV90b19sZTMyKHR5cGUpO1xuXHRoZHItXHUwMDNlc3JjX25vZGVfaWQgPSBjcHVfdG9fbGUzMihmcm9tLVx1MDAzZXNxX25vZGUpO1xuXHRoZHItXHUwMDNlc3JjX3BvcnRfaWQgPSBjcHVfdG9fbGUzMihmcm9tLVx1MDAzZXNxX3BvcnQpO1xuXHRpZiAodG8tXHUwMDNlc3FfcG9ydCA9PSBRUlRSX1BPUlRfQ1RSTCkge1xuXHRcdGhkci1cdTAwM2Vkc3Rfbm9kZV9pZCA9IGNwdV90b19sZTMyKFJFQURfT05DRShub2RlLVx1MDAzZW5pZCkpO1xuXHRcdGhkci1cdTAwM2Vkc3RfcG9ydF9pZCA9IGNwdV90b19sZTMyKFFSVFJfUE9SVF9DVFJMKTtcblx0fSBlbHNlIHtcblx0XHRoZHItXHUwMDNlZHN0X25vZGVfaWQgPSBjcHVfdG9fbGUzMih0by1cdTAwM2VzcV9ub2RlKTtcblx0XHRoZHItXHUwMDNlZHN0X3BvcnRfaWQgPSBjcHVfdG9fbGUzMih0by1cdTAwM2VzcV9wb3J0KTtcblx0fVxuXG5cdGhkci1cdTAwM2VzaXplID0gY3B1X3RvX2xlMzIobGVuKTtcblx0aGRyLVx1MDAzZWNvbmZpcm1fcnggPSBjcHVfdG9fbGUzMighIWNvbmZpcm1fcngpO1xuYGBgXG5cbk9rYXksIGdvb2QuIEFsbCB0aGUgZmllbGRzIG9mIGBoZHJgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGF0J3MgYSBzb2xpZCBjaGVjay4gTm93IEkgd2FudCB0byBxdWlja2x5IHJldmlldyB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHFydHJfaGRyX3YxYCB0byBtYWtlIHN1cmUgdGhlcmUgaXNuJ3QgYW55IHVuZXhwZWN0ZWQgcGFkZGluZyB0aGF0IG1pZ2h0IG5vdCBiZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHNvbWV3aGVyZSBlbHNlIGFuZCBwb3RlbnRpYWxseSBsZWFrIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBoZWFkZXIgaXRzZWxmIGRvZXNuJ3QgY29udGFpbiBhbnkgcGFkZGluZyB0aGF0IGNvdWxkIGJlIGEgY29uY2Vybi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMjMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjozMjoxNi43NjEzMjY4OTFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDg5Njg3ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHFydHJfaGRyX3YxIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9xcnRyL2FmX3FydHIuYy0zOS0gKi9cXG5uZXQvcXJ0ci9hZl9xcnRyLmM6NDA6c3RydWN0IHFydHJfaGRyX3YxIHtcXG5uZXQvcXJ0ci9hZl9xcnRyLmMtNDEtXFx0X19sZTMyIHZlcnNpb247XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMyOjE5LjE3MDMwNDM4NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzU1Njg0NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYHN0cnVjdCBxcnRyX2hkcl92MWAqKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgcXJ0cl9oZHJfdjFgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIHNvbGlkIGhhbmRsZSBvbiB0aGUgYmFzZSB2ZXJzaW9uIG9mIHRoaXMgaGVhZGVyLiBObyBzZW5zZSBpbiBqdW1waW5nIGludG8gbGF0ZXIgcmV2aXNpb25zIHdpdGhvdXQgdW5kZXJzdGFuZGluZyB0aGUgZnVuZGFtZW50YWxzLiBXaGF0IGFyZSB0aGUga2V5IGZpZWxkcyB0aGV5J3ZlIGNob3NlbiB0byBpbmNsdWRlIGhlcmU/IEknbSBleHBlY3RpbmcgdGhlIHVzdWFsIHN1c3BlY3RzOiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG5vZGUvcG9ydCBpZGVudGlmaWVycywgYSBtZXNzYWdlIHR5cGUgZmllbGQsIGFuZCBsaWtlbHkgc29tZSBzb3J0IG9mIGZsYWdzIGZvciBjb250cm9sIGFuZCBlcnJvciBoYW5kbGluZy4gUGVyaGFwcyBhIHNlcXVlbmNlIG51bWJlciB0b28sIGRlcGVuZGluZyBvbiB0aGUgbmVlZCBmb3IgcmVsaWFibGUgZGVsaXZlcnkuIEknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIG92ZXJhbGwgc2l6ZSDigJMgaXQnbGwgYmUgYSBnb29kIGluZGljYXRvciBvZiB0aGUgZXhwZWN0ZWQgY29tcGxleGl0eSBvZiB0aGUgdHJhbnNwb3J0IHByb3RvY29sIGJ1aWx0IG9uIHRvcC4gTGV0J3Mgc2VlIGlmIHRoZSBsYXlvdXQgaXMgbmF0dXJhbGx5IGFsaWduZWQgb3IgaWYgd2UgbmVlZCB0byBiZSBtaW5kZnVsIG9mIHBhZGRpbmcgaXNzdWVzIGR1cmluZyByZWFkL3dyaXRlIG9wZXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhpcyBiYXNlbGluZSBpcyBjcnVjaWFsIGJlZm9yZSBkaWdnaW5nIGludG8gYW55IG9mIHRoZSBtb3JlIGFkdmFuY2VkIGZlYXR1cmVzIG9yIHJldmlzaW9ucy4gSSB3YW50IHRvIGJ1aWxkIGEgcXVpY2sgcGljdHVyZSBvZiBob3cgdGhpcyBoZWFkZXIgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc3MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjMyOjIzLjUyNTk5MTY2NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzksXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzk6XFx0ICovXFxuICA0MDpcXHRzdHJ1Y3QgcXJ0cl9oZHJfdjEge1xcbiAgNDE6XFx0XFx0X19sZTMyIHZlcnNpb247XFxuICA0MjpcXHRcXHRfX2xlMzIgdHlwZTtcXG4gIDQzOlxcdFxcdF9fbGUzMiBzcmNfbm9kZV9pZDtcXG4gIDQ0OlxcdFxcdF9fbGUzMiBzcmNfcG9ydF9pZDtcXG4gIDQ1OlxcdFxcdF9fbGUzMiBjb25maXJtX3J4O1xcbiAgNDY6XFx0XFx0X19sZTMyIHNpemU7XFxuICA0NzpcXHRcXHRfX2xlMzIgZHN0X25vZGVfaWQ7XFxuICA0ODpcXHRcXHRfX2xlMzIgZHN0X3BvcnRfaWQ7XFxuICA0OTpcXHR9IF9fcGFja2VkO1xcbiAgNTA6XFx0XFxuICA1MTpcXHQvKipcXG4gIDUyOlxcdCAqIHN0cnVjdCBxcnRyX2hkcl92MiAtIChJfFIpUENyb3V0ZXIgcGFja2V0IGhlYWRlciBsYXRlciB2ZXJzaW9uc1xcbiAgNTM6XFx0ICogQHZlcnNpb246IHByb3RvY29sIHZlcnNpb25cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzI6MjMuNTI2MDc3NzE0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODgyMzExNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBIRUxMTyBQYWNrZXQgVHJhbnNpdGlvbiBhbmQgVW5pbml0aWFsaXplZCBNZW1vcnkgQ2hlY2tzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHByaW1hcmlseSByZWZhY3RvcnMgdGhlIEhFTExPIHBhY2tldCB0cmFuc21pc3Npb24gbG9naWMgd2l0aGluIHRoZSBRUlRSIHN1YnN5c3RlbSwgbW92aW5nIGl0IGZyb20gYSBuYW1lc2VydmljZS1iYXNlZCBga2VybmVsX3NlbmRtc2dgIGFwcHJvYWNoIHRvIGEgbW9yZSBkaXJlY3QgYHNrYmAgYWxsb2NhdGlvbiBhbmQgZW5xdWV1ZWluZyBzdHJhdGVneSB3aXRoaW4gdGhlIGNvcmUgbmV0d29yayBsYXllci4gVGhpcyBzZWVtcyByZWFzb25hYmxlOyBlbGltaW5hdGluZyB0aGF0IGtlcm5lbCBzcGFjZSBzb2NrZXQgY2FsbCBpcyBwcm9iYWJseSBhIGdvb2QgdGhpbmcuXG5cblRoZSBmaXJzdCB0aGluZyBJIHplcm9lZCBpbiBvbiB3YXMgdGhlIHBvdGVudGlhbCBmb3IgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIE15IGluaXRpYWwgY29uY2VybiB3YXMgaW4gYHFydHJfbm9kZV9lbnF1ZXVlYCwgZ2l2ZW4gaXRzIG1hbmlwdWxhdGlvbiBvZiB0aGUgYHNrX2J1ZmZgIGFuZCB0aGUgcG90ZW50aWFsIGZvciBuZXcgZGF0YSBiZWluZyBwcmVzZW50IG9uIHRoZSB3aXJlLiBIb3dldmVyLCBJIGNvbmZpcm1lZCB0aGF0IHRoZSBoZWFkZXIgKGBzdHJ1Y3QgcXJ0cl9oZHJfdjFgKSBpcyAqZnVsbHkqIGluaXRpYWxpemVkLiBFYWNoIGZpZWxk4oCUdmVyc2lvbiwgdHlwZSwgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBub2RlL3BvcnQgSURzLCBzaXplLCBhbmQgY29uZmlybV9yeOKAlGlzIGV4cGxpY2l0bHkgc2V0IHVzaW5nIGBjcHVfdG9fbGUzMmAuIFRoZSBgc2tiX3B1dF9wYWR0b2AgY2FsbCBpcyBwcmVzZW50LCB3aGljaCBlbnN1cmVzIHRoYXQgYW55IHBhZGRpbmcgYWRkZWQgdG8gdGhlIGBza2JgIGlzIHplcm9lZCBvdXQsIHByZXZlbnRpbmcgYW55IGxlYWtzLiBUaGlzIGlzIHZpdGFsLlxuXG5UaGVuLCBJIGxvb2tlZCBhdCB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgSEVMTE8gcGFja2V0IGl0c2VsZi4gVGhlIHVzZSBvZiBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldGAgaXMga2V5IGhlcmUuIEl0IHVzZXMgYHNrYl9wdXRfemVyb2AsIHdoaWNoIG1lYW5zIHRoZSBlbnRpcmUgY29udHJvbCBwYWNrZXQgcGF5bG9hZCBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm9lZCBvdXQgdXBvbiBhbGxvY2F0aW9uLiBUaGlzIGVsaW1pbmF0ZXMgYW55IHJpc2sgcmVsYXRlZCB0byB0aGUgcGF5bG9hZCBpdHNlbGYgY29udGFpbmluZyBzdGFsZSBkYXRhLiBGdXJ0aGVybW9yZSwgSSB3ZW50IGJhY2sgYW5kIHJlY2hlY2tlZCwgYW5kIHRoZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIHZhcmlhYmxlcyBhcmUgb25seSB1c2VkIGZvciBleHRyYWN0aW5nIHNwZWNpZmljIHZhbHVlcywgbGlrZSBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCwgYW5kIG5ldmVyIGNvcGllZCBhbnl3aGVyZSB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSB3b3VsZCBiZSBleHBvc2VkLlxuXG5GdXJ0aGVybW9yZSwgdGhlIG5ldyBjb2RlIGhhcyBhbiBleHBsaWNpdCBjaGVjayBmb3IgYGhlbGxvX3NlbnRgIHdpdGhpbiB0aGUgYHFydHJfbm9kZV9lbnF1ZXVlYCBmdW5jdGlvbiB0aGF0IGFjdHMgYXMgYSBnYXRlIGZvciBuZXcgcGFja2V0cyBiZWluZyBzZW50LiBUaGlzIGlzIHJlYXNvbmFibGUuXG5cbkZpbmFsbHksIHdoaWxlIHRoZSBwYXRjaCBjaGFuZ2VzIHdoZW4gYSBIRUxMTyBwYWNrZXQgY2FuIGJlIHNlbnQgdG8gZW5zdXJlIG5vZGVzIGFyZSBhc3NpZ25lZCBub2RlIElEcywgdGhlIGFjY2VzcyB0byBgbm9kZS1cdTAwM2VuaWRgIGlzIHByb3RlY3RlZCBieSBgV1JJVEVfT05DRWAgb3IgYFJFQURfT05DRWAuXG5cbkdpdmVuIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgb3IgaW5mby1sZWFrcy4gVGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHN0cmF0ZWdpZXMgYXJlIHNvdW5kLiBBbnkgcG90ZW50aWFsIHByb2JsZW1zIGludHJvZHVjZWQgd291bGQgYmUgdGhlIHNhbWUgYXMgZXhpc3QgaW4gdGhlIGNvZGViYXNlIHRvZGF5LiBLQVNBTiBhbmQgb3RoZXIgc3VjaCB0b29scyBzaG91bGQgYmUgc3VmZmljaWVudC4gS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3OCwiT3V0cHV0VG9rZW5zIjoyMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MzI6NTguNDA4MzkyNjA1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgc2VuZGluZyBvZiBRUlRSIEhFTExPIHBhY2tldHMgZnJvbSB0aGUgbmFtZXNlcnZpY2UgKHVzaW5nIGEga2VybmVsIHNvY2tldCkgdG8gdGhlIGNvcmUgbGF5ZXIgKHVzaW5nIGRpcmVjdCBza2IgYWxsb2NhdGlvbiBhbmQgZW5xdWV1ZWluZykuIFRoZSBuZXcgSEVMTE8gcGFja2V0IHBheWxvYWQgaXMgYWxsb2NhdGVkIHZpYSBgcXJ0cl9hbGxvY19jdHJsX3BhY2tldCgpYCwgd2hpY2ggdXNlcyBgc2tiX3B1dF96ZXJvKClgIHRvIGVuc3VyZSB0aGUgbWVtb3J5IGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgcGFja2V0IGhlYWRlciBpcyBhbHNvIGV4cGxpY2l0bHkgYW5kIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgaW4gYHFydHJfbm9kZV9lbnF1ZXVlKClgLiBXaGlsZSBgc3RydWN0IHNvY2thZGRyX3FydHJgIHZhcmlhYmxlcyBhcmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBpbiBgcXJ0cl9oZWxsb193b3JrKClgLCB0aGV5IGFyZSBvbmx5IHVzZWQgdG8gcmVhZCB0aGUgYHNxX25vZGVgIGFuZCBgc3FfcG9ydGAgZmllbGRzOyB0aGUgc3RydWN0dXJlcyB0aGVtc2VsdmVzIGFyZSBuZXZlciBjb3BpZWQgdG8gdGhlIHNrYiBvciB1c2Vyc3BhY2UsIG1lYW5pbmcgYW55IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBhcmUgc2FmZWx5IGlnbm9yZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBzZW5kaW5nIG9mIFFSVFIgSEVMTE8gcGFja2V0cyBmcm9tIHRoZSBuYW1lc2VydmljZSAodXNpbmcgYSBrZXJuZWwgc29ja2V0KSB0byB0aGUgY29yZSBsYXllciAodXNpbmcgZGlyZWN0IHNrYiBhbGxvY2F0aW9uIGFuZCBlbnF1ZXVlaW5nKS4gVGhlIG5ldyBIRUxMTyBwYWNrZXQgcGF5bG9hZCBpcyBhbGxvY2F0ZWQgdmlhIGBxcnRyX2FsbG9jX2N0cmxfcGFja2V0KClgLCB3aGljaCB1c2VzIGBza2JfcHV0X3plcm8oKWAgdG8gZW5zdXJlIHRoZSBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBwYWNrZXQgaGVhZGVyIGlzIGFsc28gZXhwbGljaXRseSBhbmQgY29tcGxldGVseSBpbml0aWFsaXplZCBpbiBgcXJ0cl9ub2RlX2VucXVldWUoKWAuIFdoaWxlIGBzdHJ1Y3Qgc29ja2FkZHJfcXJ0cmAgdmFyaWFibGVzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGluIGBxcnRyX2hlbGxvX3dvcmsoKWAsIHRoZXkgYXJlIG9ubHkgdXNlZCB0byByZWFkIHRoZSBgc3Ffbm9kZWAgYW5kIGBzcV9wb3J0YCBmaWVsZHM7IHRoZSBzdHJ1Y3R1cmVzIHRoZW1zZWx2ZXMgYXJlIG5ldmVyIGNvcGllZCB0byB0aGUgc2tiIG9yIHVzZXJzcGFjZSwgbWVhbmluZyBhbnkgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIGFyZSBzYWZlbHkgaWdub3JlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrntdq[1] Phase: Succeeded StartedAt: 2026-08-27 12:33:10 +0000 UTC FinishedAt: 2026-08-27 12:33:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 12:33:10 +0000 UTC FinishedAt: 2026-08-27 12:33:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2] Phase: Succeeded StartedAt: 2026-08-27 12:33:10 +0000 UTC FinishedAt: 2026-08-27 16:14:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 12:33:10 +0000 UTC FinishedAt: 2026-08-27 16:14:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 12:33:10 +0000 UTC FinishedAt: 2026-08-27 12:33:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 12:33:10 +0000 UTC FinishedAt: 2026-08-27 12:33:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-workflowrntdq/series-workflowrntdq-convert-artifact-842538189/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 12:33:20 +0000 UTC FinishedAt: 2026-08-27 12:51:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 12:33:20 +0000 UTC FinishedAt: 2026-08-27 12:51:54 +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:*911f91e6-eddd-4c42-a93a-3e30d4a712af,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-workflowrntdq/series-workflowrntdq-convert-artifact-842538189/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": "aefe452b-50b9-4e51-be41-880428a898ff", "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-workflowrntdq/series-workflowrntdq-build-action-3022806339/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 12:33:20 +0000 UTC FinishedAt: 2026-08-27 12:51:44 +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:*911f91e6-eddd-4c42-a93a-3e30d4a712af,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-workflowrntdq/series-workflowrntdq-convert-artifact-842538189/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": "aefe452b-50b9-4e51-be41-880428a898ff", "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-workflowrntdq/series-workflowrntdq-build-action-3022806339/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 12:51:54 +0000 UTC FinishedAt: 2026-08-27 12:51:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 12:51:54 +0000 UTC FinishedAt: 2026-08-27 12:51:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 12:51:54 +0000 UTC FinishedAt: 2026-08-27 12:52:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 12:51:54 +0000 UTC FinishedAt: 2026-08-27 12:51:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-workflowrntdq/series-workflowrntdq-convert-artifact-3041408808/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 12:52:04 +0000 UTC FinishedAt: 2026-08-27 12:53:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 12:52:04 +0000 UTC FinishedAt: 2026-08-27 12:53:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aefe452b-50b9-4e51-be41-880428a898ff,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-workflowrntdq/series-workflowrntdq-build-action-3022806339/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-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 12:53:56 +0000 UTC FinishedAt: 2026-08-27 12:53:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 12:53:56 +0000 UTC FinishedAt: 2026-08-27 12:53:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 12:53:56 +0000 UTC FinishedAt: 2026-08-27 13:10:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 12:53:56 +0000 UTC FinishedAt: 2026-08-27 13:10:19 +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:*911f91e6-eddd-4c42-a93a-3e30d4a712af,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-workflowrntdq/series-workflowrntdq-convert-artifact-3041408808/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": "3940e312-df64-4ba9-a72f-e13552c9fe8f", "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-workflowrntdq/series-workflowrntdq-build-action-1687237844/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 12:53:56 +0000 UTC FinishedAt: 2026-08-27 13:10:09 +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:*911f91e6-eddd-4c42-a93a-3e30d4a712af,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-workflowrntdq/series-workflowrntdq-convert-artifact-3041408808/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": "3940e312-df64-4ba9-a72f-e13552c9fe8f", "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-workflowrntdq/series-workflowrntdq-build-action-1687237844/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 13:10:19 +0000 UTC FinishedAt: 2026-08-27 13:10:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 13:10:19 +0000 UTC FinishedAt: 2026-08-27 13:10:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 13:10:19 +0000 UTC FinishedAt: 2026-08-27 13:11:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 13:10:19 +0000 UTC FinishedAt: 2026-08-27 13:11:41 +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:*3940e312-df64-4ba9-a72f-e13552c9fe8f,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-workflowrntdq/series-workflowrntdq-build-action-1687237844/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-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 13:11:51 +0000 UTC FinishedAt: 2026-08-27 16:14:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 13:11:51 +0000 UTC FinishedAt: 2026-08-27 16:14:48 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"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:*aefe452b-50b9-4e51-be41-880428a898ff,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3940e312-df64-4ba9-a72f-e13552c9fe8f,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-workflowrntdq/series-workflowrntdq-build-action-3022806339/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-workflowrntdq/series-workflowrntdq-build-action-1687237844/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 13:11:51 +0000 UTC FinishedAt: 2026-08-27 13:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 13:11:51 +0000 UTC FinishedAt: 2026-08-27 13:11:56 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"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-workflowrntdq/series-workflowrntdq-convert-artifact-2064766817/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 13:11:51 +0000 UTC FinishedAt: 2026-08-27 13:11:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 13:11:51 +0000 UTC FinishedAt: 2026-08-27 13:11:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 13:11:51 +0000 UTC FinishedAt: 2026-08-27 13:11:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 13:12:02 +0000 UTC FinishedAt: 2026-08-27 16:14:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrntdq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qrtr_node_enqueue","qrtr_hello_work","qrtr_endpoint_register","qrtr_bcast_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["QRTR","QRTR_TUN"],"series_id":"d01f1395-9ca2-438c-82b3-276bcd4b372d","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-27 13:12:02 +0000 UTC FinishedAt: 2026-08-27 16:14:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aefe452b-50b9-4e51-be41-880428a898ff,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3940e312-df64-4ba9-a72f-e13552c9fe8f,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-workflowrntdq/series-workflowrntdq-build-action-3022806339/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-workflowrntdq/series-workflowrntdq-build-action-1687237844/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-workflowrntdq/series-workflowrntdq-convert-artifact-2064766817/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,}