Name: series-workflow88q6x Phase: Succeeded StartedAt: 2026-09-03 23:08:47 +0000 UTC FinishedAt: 2026-09-04 00:05:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[0] Phase: Succeeded StartedAt: 2026-09-03 23:08:47 +0000 UTC FinishedAt: 2026-09-03 23:28:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 23:08:47 +0000 UTC FinishedAt: 2026-09-03 23:28:22 +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": "c300d74d44c27064768a8dea90e67684b00681de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c300d74d44c27064768a8dea90e67684b00681de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "NET" ], "series_id": "5783d4c2-0547-49b9-b4fa-9434ee1276bc" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_recv", "io_recvmsg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgbGVuZ3RoIGFjY291bnRpbmcgaW4gaW9fdXJpbmcmIzM5O3MgcmVjdiBhbmQgcmVjdm1zZyBwYXRocyB3aGVuIE1TR19UUlVOQyBpcyB1c2VkLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSAmIzM5O2NvbnN1bWVkJiMzOTsgdmFyaWFibGUgdG8gZW5zdXJlIHRoYXQgYnVmZmVyIHJpbmcgY29tbWl0dGluZyBhbmQgYnVuZGxlIGJ1ZmZlciBjb3VudGluZyAoaW9fYnVuZGxlX25idWZzKSBvbmx5IGNvbnN1bWUgdXAgdG8gdGhlIGFjdHVhbCBidWZmZXIgY2FwYWNpdHkgKCYjMzk7bGVuJiMzOTspIHJhdGhlciB0aGFuIHRoZSB0cnVuY2F0ZWQgdG90YWwgcGFja2V0IGxlbmd0aCAoJiMzOTtyZXQmIzM5OykuXG5cbkFsbCBuZXcgYW5kIG1vZGlmaWVkIHZhcmlhYmxlcyAoJiMzOTtsZW4mIzM5OywgJiMzOTtjb25zdW1lZCYjMzk7KSBhcmUgc3RyaWN0bHkgaW5pdGlhbGl6ZWQgYW5kIGFzc2lnbmVkIGJlZm9yZSB1c2UuIFRoZSBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgbGVhayB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXJzcGFjZS4gQW55IHJpc2tzIHJlbGF0ZWQgdG8gYnVmZmVyIG92ZXItY29uc3VtcHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpdGVyIGluZGV4aW5nIGluIGlvX2J1bmRsZV9uYnVmcyBmYWxsIHVuZGVyIGJvdW5kcy1jaGVja2luZyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW9fdXJpbmcgcmVjZWl2ZSBoYW5kbGluZyAoaW9fcmVjdiwgaW9fcmVjdm1zZywgaW9fcmVjdl9idWZfc2VsZWN0LCBpb19yZWN2X2ZpbmlzaCkgdG8gcHJvcGVybHkgdHJhY2sgYW5kIGNhcCBjb25zdW1lZCBidWZmZXIgbGVuZ3RoIHdoZW4gTVNHX1RSVU5DIGlzIHVzZWQgb3IgYnVmZmVyIHNpemVzIGRpZmZlciBmcm9tIHJldHVybmVkIHBhY2tldCBsZW5ndGhzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSB2aWEgc3RhbmRhcmQgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjNjZjZjZmI2MWM4ODdiY2UwMzExYmRlMGFhZmE3YTNjZjZiODZmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjM6Mjc6MDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbmV0LmMgYi9pb191cmluZy9uZXQuY1xuaW5kZXggZmJlNzE5ZDg2YzQ2My4uZjgxMTBkYzlmODYwNiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL25ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9uZXQuY1xuQEAgLTg1Myw3ICYjNDM7ODUzLDcgQEAgaW50IGlvX3JlY3Ztc2dfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdFx0XHRcdCAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbiBcdFx0XHRcdCAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCBib29sIG1zaG90X2ZpbmlzaGVkLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBpc3N1ZV9mbGFncylcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBzaXplX3QgY29uc3VtZWQpXG4ge1xuIFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcbiBcdHVuc2lnbmVkIGludCBjZmxhZ3MgPSAwO1xuQEAgLTg3Nyw3ICYjNDM7ODc3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFx0aWYgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XG4gXHRcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cdTAwM2V2YWwgLSBzci1cdTAwM2Vkb25lX2lvO1xuIFxuLVx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7XG4mIzQzO1x0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgY29uc3VtZWQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIGNvbnN1bWVkKSk7XG4gXHRcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXG4gXHRcdFx0Y2ZsYWdzID0gcmVxLVx1MDAzZWNxZS5mbGFncyB8IChjZmxhZ3MgXHUwMDI2IENRRV9GX01BU0spO1xuIFx0XHRpZiAoc3ItXHUwMDNlbXNob3RfbGVuIFx1MDAyNlx1MDAyNiBzZWwtXHUwMDNldmFsIFx1MDAzZT0gc3ItXHUwMDNlbXNob3RfbGVuKVxuQEAgLTg5OSw3ICYjNDM7ODk5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0KTtcbiYjNDM7XHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIGNvbnN1bWVkLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuIFx0fVxuIFxuIFx0LypcbkBAIC0xMDI3LDYgJiM0MzsxMDI3LDcgQEAgaW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiBcdGludCByZXQsIG1pbl9yZXQgPSAwO1xuIFx0Ym9vbCBmb3JjZV9ub25ibG9jayA9IGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xuIFx0Ym9vbCBtc2hvdF9maW5pc2hlZCA9IHRydWU7XG4mIzQzO1x0c2l6ZV90IGxlbiwgY29uc3VtZWQgPSAwO1xuIFxuIFx0c29jayA9IHNvY2tfZnJvbV9maWxlKHJlcS1cdTAwM2VmaWxlKTtcbiBcdGlmICh1bmxpa2VseSghc29jaykpXG5AQCAtMTA0Miw5ICYjNDM7MTA0Myw4IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXG4gcmV0cnlfbXVsdGlzaG90OlxuIFx0c2VsLmJ1Zl9saXN0ID0gTlVMTDtcbiYjNDM7XHRsZW4gPSBzci1cdTAwM2VsZW47XG4gXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XG4tXHRcdHNpemVfdCBsZW4gPSBzci1cdTAwM2VsZW47XG4tXG4gXHRcdHNlbCA9IGlvX2J1ZmZlcl9zZWxlY3QocmVxLCBcdTAwMjZsZW4sIHNyLVx1MDAzZWJ1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpO1xuIFx0XHRpZiAoIXNlbC5hZGRyKVxuIFx0XHRcdHJldHVybiAtRU5PQlVGUztcbkBAIC0xMDY1LDYgJiM0MzsxMDY1LDcgQEAgaW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiBcdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkge1xuIFx0XHRyZXQgPSBpb19yZWN2bXNnX211bHRpc2hvdChzb2NrLCBzciwga21zZywgZmxhZ3MsXG4gXHRcdFx0XHRcdCAgIFx1MDAyNm1zaG90X2ZpbmlzaGVkKTtcbiYjNDM7XHRcdGNvbnN1bWVkID0gcmV0O1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogZGlzYWJsZSBwYXJ0aWFsIHJldHJ5IGZvciByZWN2bXNnIHdpdGggY21zZyBhdHRhY2hlZCAqL1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19XQUlUQUxMIFx1MDAyNlx1MDAyNiAha21zZy1cdTAwM2Vtc2cubXNnX2NvbnRyb2xsZW4pXG5AQCAtMTA3Miw2ICYjNDM7MTA3MywxNSBAQCBpbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFxuIFx0XHRyZXQgPSBfX3N5c19yZWN2bXNnX3NvY2soc29jaywgXHUwMDI2a21zZy1cdTAwM2Vtc2csIHNyLVx1MDAzZXVtc2csXG4gXHRcdFx0XHRcdCBrbXNnLVx1MDAzZXVhZGRyLCBmbGFncyk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogV2l0aCBNU0dfVFJVTkMsIHRoZSBuZXQgbGF5ZXIgd2lsbCByZXR1cm4gdGhlIGZ1bGwgc2l6ZSBvZlxuJiM0MztcdFx0ICogdGhlIHBhY2tldCwgZXZlbiBpZiB3ZSBvbmx5IGZpbGxlZCBwYXJ0IG9mIGl0IGluIHRoZSBidWZmZXJzLlxuJiM0MztcdFx0ICogQWRqdXN0IHRoZSByZXR1cm5lZCBzaXplIHRvIGNvbnN1bWUgb25seSB0aGUgcmVhbCBwYXJ0IG9mIHRoZVxuJiM0MztcdFx0ICogYnVmZmVyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjb25zdW1lZCA9IHJldDtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlIGxlbilcbiYjNDM7XHRcdFx0Y29uc3VtZWQgPSBsZW47XG4gXHR9XG4gXG4gXHRpZiAocmV0IFx1MDAzYyBtaW5fcmV0KSB7XG5AQCAtMTA5OCw3ICYjNDM7MTEwOCw3IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXHRcdGlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpO1xuIFxuIFx0c2VsLnZhbCA9IHJldDtcbi1cdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpXG4mIzQzO1x0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzLCBjb25zdW1lZCkpXG4gXHRcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xuIFxuIFx0cmV0dXJuIHNlbC52YWw7XG5AQCAtMTEwOCw2ICYjNDM7MTExOCw3IEBAIHN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnXG4gXHRcdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcbiYjNDM7XHRzaXplX3QgbGVuO1xuIFx0aW50IHJldDtcbiBcbiBcdC8qXG5AQCAtMTE1MywxMyAmIzQzOzExNjQsMTQgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2dcbiBcdFx0Lyogc3BlY2lhbCBjYXNlIDEgdmVjLCBjYW4gYmUgYSBmYXN0IHBhdGggKi9cbiBcdFx0aWYgKHJldCA9PSAxKSB7XG4gXHRcdFx0c3ItXHUwMDNlYnVmID0gYXJnLmlvdnNbMF0uaW92X2Jhc2U7XG4tXHRcdFx0c3ItXHUwMDNlbGVuID0gYXJnLmlvdnNbMF0uaW92X2xlbjtcbiYjNDM7XHRcdFx0bGVuID0gc3ItXHUwMDNlbGVuID0gYXJnLmlvdnNbMF0uaW92X2xlbjtcbiBcdFx0XHRnb3RvIG1hcF91YnVmO1xuIFx0XHR9XG4gXHRcdGlvdl9pdGVyX2luaXQoXHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIsIElURVJfREVTVCwgYXJnLmlvdnMsIHJldCxcbi1cdFx0XHRcdGFyZy5vdXRfbGVuKTtcbiYjNDM7XHRcdFx0ICAgICAgYXJnLm91dF9sZW4pO1xuJiM0MztcdFx0bGVuID0gYXJnLm91dF9sZW47XG4gXHR9IGVsc2Uge1xuLVx0XHRzaXplX3QgbGVuID0gc2VsLVx1MDAzZXZhbDtcbiYjNDM7XHRcdGxlbiA9IHNlbC1cdTAwM2V2YWw7XG4gXG4gXHRcdCpzZWwgPSBpb19idWZmZXJfc2VsZWN0KHJlcSwgXHUwMDI2bGVuLCBzci1cdTAwM2VidWZfZ3JvdXAsIGlzc3VlX2ZsYWdzKTtcbiBcdFx0aWYgKCFzZWwtXHUwMDNlYWRkcilcbkBAIC0xMTczLDcgJiM0MzsxMTg1LDcgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2dcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGxlbjtcbiB9XG4gXG4gaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbkBAIC0xMTg0LDYgJiM0MzsxMTk2LDcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4gXHR1bnNpZ25lZCBmbGFncztcbiBcdGludCByZXQsIG1pbl9yZXQgPSAwO1xuJiM0MztcdHNpemVfdCBjb25zdW1lZCA9IDAsIGxlbiA9IDA7XG4gXHRib29sIGZvcmNlX25vbmJsb2NrID0gaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XG4gXHRib29sIG1zaG90X2ZpbmlzaGVkO1xuIFxuQEAgLTEyMTMsNiAmIzQzOzEyMjYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFxuIHJldHJ5X211bHRpc2hvdDpcbiBcdHNlbC5idWZfbGlzdCA9IE5VTEw7XG4mIzQzO1x0bGVuID0gc3ItXHUwMDNlbGVuO1xuIFx0aWYgKGlvX2RvX2J1ZmZlcl9zZWxlY3QocmVxKSkge1xuIFx0XHRzZWwudmFsID0gc3ItXHUwMDNlbGVuO1xuIFx0XHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcdTAwMjZzZWwsIGlzc3VlX2ZsYWdzKTtcbkBAIC0xMjIwLDYgJiM0MzsxMjM0LDcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiBcdFx0XHRrbXNnLVx1MDAzZW1zZy5tc2dfaW5xID0gLTE7XG4gXHRcdFx0Z290byBvdXRfZnJlZTtcbiBcdFx0fVxuJiM0MztcdFx0bGVuID0gcmV0O1xuIFx0XHRzci1cdTAwM2VidWYgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTEyNTAsNiAmIzQzOzEyNjUsMTcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiBcdH1cbiBcbiBcdG1zaG90X2ZpbmlzaGVkID0gcmV0IFx1MDAzYz0gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaXRoIE1TR19UUlVOQywgdGhlIG5ldCBsYXllciB3aWxsIHJldHVybiB0aGUgZnVsbCBzaXplIG9mXG4mIzQzO1x0ICogdGhlIHBhY2tldCwgZXZlbiBpZiB3ZSBvbmx5IGZpbGxlZCBwYXJ0IG9mIGl0IGluIHRoZSBidWZmZXJzLlxuJiM0MztcdCAqIEFkanVzdCB0aGUgcmV0dXJuZWQgc2l6ZSB0byBjb25zdW1lIG9ubHkgdGhlIHJlYWwgcGFydCBvZiB0aGVcbiYjNDM7XHQgKiBidWZmZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y29uc3VtZWQgPSByZXQ7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2UgbGVuKVxuJiM0MztcdFx0Y29uc3VtZWQgPSBsZW47XG4mIzQzO1xuIFx0aWYgKHJldCBcdTAwM2UgMClcbiBcdFx0cmV0ICYjNDM7PSBzci1cdTAwM2Vkb25lX2lvO1xuIFx0ZWxzZSBpZiAoc3ItXHUwMDNlZG9uZV9pbylcbkBAIC0xMjU4LDcgJiM0MzsxMjg0LDcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiBcdFx0aW9fa2J1Zl9yZWN5Y2xlKHJlcSwgc2VsLmJ1Zl9saXN0LCBpc3N1ZV9mbGFncyk7XG4gXG4gXHRzZWwudmFsID0gcmV0O1xuLVx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSlcbiYjNDM7XHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MsIGNvbnN1bWVkKSlcbiBcdFx0Z290byByZXRyeV9tdWx0aXNob3Q7XG4gXG4gXHRyZXR1cm4gc2VsLnZhbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19yZWN2JiMzNDssCiAgICAmIzM0O2lvX3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW9fdXJpbmcgcmVjZWl2ZSBoYW5kbGluZyAoaW9fcmVjdiwgaW9fcmVjdm1zZywgaW9fcmVjdl9idWZfc2VsZWN0LCBpb19yZWN2X2ZpbmlzaCkgdG8gcHJvcGVybHkgdHJhY2sgYW5kIGNhcCBjb25zdW1lZCBidWZmZXIgbGVuZ3RoIHdoZW4gTVNHX1RSVU5DIGlzIHVzZWQgb3IgYnVmZmVyIHNpemVzIGRpZmZlciBmcm9tIHJldHVybmVkIHBhY2tldCBsZW5ndGhzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSB2aWEgc3RhbmRhcmQgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjNjZjZjZmI2MWM4ODdiY2UwMzExYmRlMGFhZmE3YTNjZjZiODZmOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMjM6Mjc6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy9uZXQuYyBiL2lvX3VyaW5nL25ldC5jCmluZGV4IGZiZTcxOWQ4NmM0NjMuLmY4MTEwZGM5Zjg2MDYgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL25ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL25ldC5jCkBAIC04NTMsNyAmIzQzOzg1Myw3IEBAIGludCBpb19yZWN2bXNnX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwKIAkJCQkgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csCiAJCQkJICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIGJvb2wgbXNob3RfZmluaXNoZWQsCi0JCQkJICB1bnNpZ25lZCBpc3N1ZV9mbGFncykKJiM0MzsJCQkJICB1bnNpZ25lZCBpc3N1ZV9mbGFncywgc2l6ZV90IGNvbnN1bWVkKQogewogCXN0cnVjdCBpb19zcl9tc2cgKnNyID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7CiAJdW5zaWduZWQgaW50IGNmbGFncyA9IDA7CkBAIC04NzcsNyAmIzQzOzg3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwKIAlpZiAoc3ItJmd0O2ZsYWdzICZhbXA7IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHsKIAkJc2l6ZV90IHRoaXNfcmV0ID0gc2VsLSZndDt2YWwgLSBzci0mZ3Q7ZG9uZV9pbzsKIAotCQljZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC0mZ3Q7YnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCB0aGlzX3JldCkpOwomIzQzOwkJY2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIGNvbnN1bWVkLCBzZWwtJmd0O2J1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgY29uc3VtZWQpKTsKIAkJaWYgKHNyLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfUkVDVl9SRVRSWSkKIAkJCWNmbGFncyA9IHJlcS0mZ3Q7Y3FlLmZsYWdzIHwgKGNmbGFncyAmYW1wOyBDUUVfRl9NQVNLKTsKIAkJaWYgKHNyLSZndDttc2hvdF9sZW4gJmFtcDsmYW1wOyBzZWwtJmd0O3ZhbCAmZ3Q7PSBzci0mZ3Q7bXNob3RfbGVuKQpAQCAtODk5LDcgJiM0Mzs4OTksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsCiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAl9IGVsc2UgewotCQljZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBzZWwtJmd0O3ZhbCwgc2VsLSZndDtidWZfbGlzdCk7CiYjNDM7CQljZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBjb25zdW1lZCwgc2VsLSZndDtidWZfbGlzdCk7CiAJfQogCiAJLyoKQEAgLTEwMjcsNiAmIzQzOzEwMjcsNyBAQCBpbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQogCWludCByZXQsIG1pbl9yZXQgPSAwOwogCWJvb2wgZm9yY2Vfbm9uYmxvY2sgPSBpc3N1ZV9mbGFncyAmYW1wOyBJT19VUklOR19GX05PTkJMT0NLOwogCWJvb2wgbXNob3RfZmluaXNoZWQgPSB0cnVlOwomIzQzOwlzaXplX3QgbGVuLCBjb25zdW1lZCA9IDA7CiAKIAlzb2NrID0gc29ja19mcm9tX2ZpbGUocmVxLSZndDtmaWxlKTsKIAlpZiAodW5saWtlbHkoIXNvY2spKQpAQCAtMTA0Miw5ICYjNDM7MTA0Myw4IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiAKIHJldHJ5X211bHRpc2hvdDoKIAlzZWwuYnVmX2xpc3QgPSBOVUxMOwomIzQzOwlsZW4gPSBzci0mZ3Q7bGVuOwogCWlmIChpb19kb19idWZmZXJfc2VsZWN0KHJlcSkpIHsKLQkJc2l6ZV90IGxlbiA9IHNyLSZndDtsZW47Ci0KIAkJc2VsID0gaW9fYnVmZmVyX3NlbGVjdChyZXEsICZhbXA7bGVuLCBzci0mZ3Q7YnVmX2dyb3VwLCBpc3N1ZV9mbGFncyk7CiAJCWlmICghc2VsLmFkZHIpCiAJCQlyZXR1cm4gLUVOT0JVRlM7CkBAIC0xMDY1LDYgJiM0MzsxMDY1LDcgQEAgaW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAlpZiAocmVxLSZndDtmbGFncyAmYW1wOyBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpIHsKIAkJcmV0ID0gaW9fcmVjdm1zZ19tdWx0aXNob3Qoc29jaywgc3IsIGttc2csIGZsYWdzLAogCQkJCQkgICAmYW1wO21zaG90X2ZpbmlzaGVkKTsKJiM0MzsJCWNvbnN1bWVkID0gcmV0OwogCX0gZWxzZSB7CiAJCS8qIGRpc2FibGUgcGFydGlhbCByZXRyeSBmb3IgcmVjdm1zZyB3aXRoIGNtc2cgYXR0YWNoZWQgKi8KIAkJaWYgKGZsYWdzICZhbXA7IE1TR19XQUlUQUxMICZhbXA7JmFtcDsgIWttc2ctJmd0O21zZy5tc2dfY29udHJvbGxlbikKQEAgLTEwNzIsNiAmIzQzOzEwNzMsMTUgQEAgaW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAogCQlyZXQgPSBfX3N5c19yZWN2bXNnX3NvY2soc29jaywgJmFtcDtrbXNnLSZndDttc2csIHNyLSZndDt1bXNnLAogCQkJCQkga21zZy0mZ3Q7dWFkZHIsIGZsYWdzKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBXaXRoIE1TR19UUlVOQywgdGhlIG5ldCBsYXllciB3aWxsIHJldHVybiB0aGUgZnVsbCBzaXplIG9mCiYjNDM7CQkgKiB0aGUgcGFja2V0LCBldmVuIGlmIHdlIG9ubHkgZmlsbGVkIHBhcnQgb2YgaXQgaW4gdGhlIGJ1ZmZlcnMuCiYjNDM7CQkgKiBBZGp1c3QgdGhlIHJldHVybmVkIHNpemUgdG8gY29uc3VtZSBvbmx5IHRoZSByZWFsIHBhcnQgb2YgdGhlCiYjNDM7CQkgKiBidWZmZXIuCiYjNDM7CQkgKi8KJiM0MzsJCWNvbnN1bWVkID0gcmV0OwomIzQzOwkJaWYgKHJldCAmZ3Q7IGxlbikKJiM0MzsJCQljb25zdW1lZCA9IGxlbjsKIAl9CiAKIAlpZiAocmV0ICZsdDsgbWluX3JldCkgewpAQCAtMTA5OCw3ICYjNDM7MTEwOCw3IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiAJCWlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpOwogCiAJc2VsLnZhbCA9IHJldDsKLQlpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgJmFtcDtzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpCiYjNDM7CWlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCAmYW1wO3NlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzLCBjb25zdW1lZCkpCiAJCWdvdG8gcmV0cnlfbXVsdGlzaG90OwogCiAJcmV0dXJuIHNlbC52YWw7CkBAIC0xMTA4LDYgJiM0MzsxMTE4LDcgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2cKIAkJCSAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQogewogCXN0cnVjdCBpb19zcl9tc2cgKnNyID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7CiYjNDM7CXNpemVfdCBsZW47CiAJaW50IHJldDsKIAogCS8qCkBAIC0xMTUzLDEzICYjNDM7MTE2NCwxNCBAQCBzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZwogCQkvKiBzcGVjaWFsIGNhc2UgMSB2ZWMsIGNhbiBiZSBhIGZhc3QgcGF0aCAqLwogCQlpZiAocmV0ID09IDEpIHsKIAkJCXNyLSZndDtidWYgPSBhcmcuaW92c1swXS5pb3ZfYmFzZTsKLQkJCXNyLSZndDtsZW4gPSBhcmcuaW92c1swXS5pb3ZfbGVuOwomIzQzOwkJCWxlbiA9IHNyLSZndDtsZW4gPSBhcmcuaW92c1swXS5pb3ZfbGVuOwogCQkJZ290byBtYXBfdWJ1ZjsKIAkJfQogCQlpb3ZfaXRlcl9pbml0KCZhbXA7a21zZy0mZ3Q7bXNnLm1zZ19pdGVyLCBJVEVSX0RFU1QsIGFyZy5pb3ZzLCByZXQsCi0JCQkJYXJnLm91dF9sZW4pOwomIzQzOwkJCSAgICAgIGFyZy5vdXRfbGVuKTsKJiM0MzsJCWxlbiA9IGFyZy5vdXRfbGVuOwogCX0gZWxzZSB7Ci0JCXNpemVfdCBsZW4gPSBzZWwtJmd0O3ZhbDsKJiM0MzsJCWxlbiA9IHNlbC0mZ3Q7dmFsOwogCiAJCSpzZWwgPSBpb19idWZmZXJfc2VsZWN0KHJlcSwgJmFtcDtsZW4sIHNyLSZndDtidWZfZ3JvdXAsIGlzc3VlX2ZsYWdzKTsKIAkJaWYgKCFzZWwtJmd0O2FkZHIpCkBAIC0xMTczLDcgJiM0MzsxMTg1LDcgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2cKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBsZW47CiB9CiAKIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCkBAIC0xMTg0LDYgJiM0MzsxMTk2LDcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwogCXVuc2lnbmVkIGZsYWdzOwogCWludCByZXQsIG1pbl9yZXQgPSAwOwomIzQzOwlzaXplX3QgY29uc3VtZWQgPSAwLCBsZW4gPSAwOwogCWJvb2wgZm9yY2Vfbm9uYmxvY2sgPSBpc3N1ZV9mbGFncyAmYW1wOyBJT19VUklOR19GX05PTkJMT0NLOwogCWJvb2wgbXNob3RfZmluaXNoZWQ7CiAKQEAgLTEyMTMsNiAmIzQzOzEyMjYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQogCiByZXRyeV9tdWx0aXNob3Q6CiAJc2VsLmJ1Zl9saXN0ID0gTlVMTDsKJiM0MzsJbGVuID0gc3ItJmd0O2xlbjsKIAlpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7CiAJCXNlbC52YWwgPSBzci0mZ3Q7bGVuOwogCQlyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCAmYW1wO3NlbCwgaXNzdWVfZmxhZ3MpOwpAQCAtMTIyMCw2ICYjNDM7MTIzNCw3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiAJCQlrbXNnLSZndDttc2cubXNnX2lucSA9IC0xOwogCQkJZ290byBvdXRfZnJlZTsKIAkJfQomIzQzOwkJbGVuID0gcmV0OwogCQlzci0mZ3Q7YnVmID0gTlVMTDsKIAl9CiAKQEAgLTEyNTAsNiAmIzQzOzEyNjUsMTcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAl9CiAKIAltc2hvdF9maW5pc2hlZCA9IHJldCAmbHQ7PSAwOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXaXRoIE1TR19UUlVOQywgdGhlIG5ldCBsYXllciB3aWxsIHJldHVybiB0aGUgZnVsbCBzaXplIG9mCiYjNDM7CSAqIHRoZSBwYWNrZXQsIGV2ZW4gaWYgd2Ugb25seSBmaWxsZWQgcGFydCBvZiBpdCBpbiB0aGUgYnVmZmVycy4KJiM0MzsJICogQWRqdXN0IHRoZSByZXR1cm5lZCBzaXplIHRvIGNvbnN1bWUgb25seSB0aGUgcmVhbCBwYXJ0IG9mIHRoZQomIzQzOwkgKiBidWZmZXIuCiYjNDM7CSAqLwomIzQzOwljb25zdW1lZCA9IHJldDsKJiM0MzsJaWYgKHJldCAmZ3Q7IGxlbikKJiM0MzsJCWNvbnN1bWVkID0gbGVuOwomIzQzOwogCWlmIChyZXQgJmd0OyAwKQogCQlyZXQgJiM0Mzs9IHNyLSZndDtkb25lX2lvOwogCWVsc2UgaWYgKHNyLSZndDtkb25lX2lvKQpAQCAtMTI1OCw3ICYjNDM7MTI4NCw3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiAJCWlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpOwogCiAJc2VsLnZhbCA9IHJldDsKLQlpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgJmFtcDtzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpCiYjNDM7CWlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCAmYW1wO3NlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzLCBjb25zdW1lZCkpCiAJCWdvdG8gcmV0cnlfbXVsdGlzaG90OwogCiAJcmV0dXJuIHNlbC52YWw7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMDQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgS2VybmVsIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGFza2VkIHRvIHRha2UgYSBsb29rIGF0IGEgcGF0Y2ggc2VyaWVzIGp1c3QgYXBwbGllZCB0byB0aGUga2VybmVsIHJlcG9zaXRvcnksIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYGlvX3VyaW5nL25ldC5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRpZmYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouCgpUaGUgZGlmZiBpdHNlbGYgcG9pbnRzIHRvIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBpb19yZWN2X2ZpbmlzaGAsIGBpb19yZWN2bXNnYCwgYGlvX3JlY3ZfYnVmX3NlbGVjdGAsIGFuZCBgaW9fcmVjdmAuIEFoLCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYE1TR19UUlVOQ2Ag4oCTIHRoYXQmIzM5O3MgdGhlIGZsYWcgd2hlcmUgdGhlIG5ldHdvcmsgbGF5ZXIgcmVwb3J0cyB0aGUgZnVsbCBwYWNrZXQgc2l6ZSBldmVuIGlmIHRoZSByZWNlaXZlIGJ1ZmZlcnMgYXJlbiYjMzk7dCBjb21wbGV0ZWx5IGZpbGxlZC4gVGhpcyBpcyBhIGNvbW1vbiBzaXR1YXRpb24sIHNvIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBob3cgdGhleSBhcmUgaGFuZGxpbmcgdGhpcyBlZGdlIGNhc2UuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGNhbGN1bGF0ZXMgYGNvbnN1bWVkYCBkYXRhLCBhbmQgY29ycmVjdGx5IHBhc3NlcyB0aGlzIGluZm9ybWF0aW9uIHRvIGBpb19wdXRfa2J1ZnNgIC8gYGlvX3B1dF9rYnVmYCB0aHJvdWdoIHRoZSBgaW9fcmVjdl9maW5pc2hgIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGltcHJvdmVtZW50IGluIGhhbmRsaW5nIHBhcnRpYWxseSByZWNlaXZlZCBwYWNrZXRzLiBHb29kLgoKTm93LCBjb250ZXh0IGlzIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBmaXJzdCBzdGVwIGZvciBtZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb24gYGlvX3VyaW5nYCBpdHNlbGYgYW5kIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIGBpb191cmluZy9uZXQuY2AuIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcXVpY2tseSBicmluZyB0aGUgY29udGV4dCBpbnRvIHZpZXcuIEtub3dpbmcgdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gZm9ybSBhIGZ1bGx5IGluZm9ybWVkIG9waW5pb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcmVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9uZXQuYz05Mz1lbnVtIHNyX3JldHJ5X2ZsYWdzIHtcbi0tXG5pb191cmluZy9uZXQuYy0xMTEtXG5pb191cmluZy9uZXQuYzoxMTI6c3RydWN0IGlvX3JlY3Z6YyB7XG5pb191cmluZy9uZXQuYy0xMTMtXHRzdHJ1Y3QgZmlsZVx0XHRcdCpmaWxlO1xuLS1cbmlvX3VyaW5nL25ldC5jPTYyNj1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTcwMi1cbmlvX3VyaW5nL25ldC5jOjcwMzpzdGF0aWMgaW50IGlvX3JlY3Ztc2dfbXNob3RfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL25ldC5jLTcwNC1cdFx0XHRcdCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICppb21zZyxcbi0tXG5pb191cmluZy9uZXQuYy03MjYtXG5pb191cmluZy9uZXQuYzo3Mjc6c3RhdGljIGludCBpb19yZWN2bXNnX2NvcHlfaGRyKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvbmV0LmMtNzI4LVx0XHRcdCAgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICppb21zZylcbi0tXG5pb191cmluZy9uZXQuYy03NDItXHR9XG5pb191cmluZy9uZXQuYzo3NDM6XHRyZXR1cm4gaW9fcmVjdm1zZ19tc2hvdF9wcmVwKHJlcSwgaW9tc2csIG1zZy5tc2dfbmFtZWxlbixcbmlvX3VyaW5nL25ldC5jLTc0NC1cdFx0XHRcdFx0bXNnLm1zZ19jb250cm9sbGVuKTtcbi0tXG5pb191cmluZy9uZXQuYy03NDYtXG5pb191cmluZy9uZXQuYzo3NDc6c3RhdGljIGludCBpb19yZWN2bXNnX3ByZXBfc2V0dXAoc3RydWN0IGlvX2tpb2NiICpyZXEpXG5pb191cmluZy9uZXQuYy03NDgte1xuLS1cbmlvX3VyaW5nL25ldC5jLTc3NC1cbmlvX3VyaW5nL25ldC5jOjc3NTpcdHJldHVybiBpb19yZWN2bXNnX2NvcHlfaGRyKHJlcSwga21zZyk7XG5pb191cmluZy9uZXQuYy03NzYtfVxuLS1cbmlvX3VyaW5nL25ldC5jLTc4MC1cbmlvX3VyaW5nL25ldC5jOjc4MTppbnQgaW9fcmVjdm1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9uZXQuYy03ODIte1xuLS1cbmlvX3VyaW5nL25ldC5jLTgzOS1cdHNyLVx1MDAzZW5yX211bHRpc2hvdF9sb29wcyA9IDA7XG5pb191cmluZy9uZXQuYzo4NDA6XHRyZXR1cm4gaW9fcmVjdm1zZ19wcmVwX3NldHVwKHJlcSk7XG5pb191cmluZy9uZXQuYy04NDEtfVxuLS1cbmlvX3VyaW5nL25ldC5jLTg0Ny0vKlxuaW9fdXJpbmcvbmV0LmM6ODQ4OiAqIEZpbmlzaGVzIGlvX3JlY3YgYW5kIGlvX3JlY3Ztc2cuXG5pb191cmluZy9uZXQuYy04NDktICpcbi0tXG5pb191cmluZy9uZXQuYy04NTItICovXG5pb191cmluZy9uZXQuYzo4NTM6c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvbmV0LmMtODU0LVx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jLTkzNS1cbmlvX3VyaW5nL25ldC5jOjkzNjpzdGF0aWMgaW50IGlvX3JlY3Ztc2dfcHJlcF9tdWx0aXNob3Qoc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbmlvX3VyaW5nL25ldC5jLTkzNy1cdFx0XHRcdCAgICAgc3RydWN0IGlvX3NyX21zZyAqc3IsIHZvaWQgX191c2VyICoqYnVmLFxuLS1cbmlvX3VyaW5nL25ldC5jLTk2MC1cbmlvX3VyaW5nL25ldC5jOjk2MTpzdHJ1Y3QgaW9fcmVjdm1zZ19tdWx0aXNob3RfaGRyIHtcbmlvX3VyaW5nL25ldC5jLTk2Mi1cdHN0cnVjdCBpb191cmluZ19yZWN2bXNnX291dCBtc2c7XG4tLVxuaW9fdXJpbmcvbmV0LmMtOTY1LVxuaW9fdXJpbmcvbmV0LmM6OTY2OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19tdWx0aXNob3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlvX3NyX21zZyAqaW8sXG5pb191cmluZy9uZXQuYy05NjctXHRcdFx0XHRzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jLTk3MS1cdGludCBjb3B5X2xlbjtcbmlvX3VyaW5nL25ldC5jOjk3MjpcdHN0cnVjdCBpb19yZWN2bXNnX211bHRpc2hvdF9oZHIgaGRyO1xuaW9fdXJpbmcvbmV0LmMtOTczLVxuLS1cbmlvX3VyaW5nL25ldC5jLTEwMDgtXHQvKiBlbnN1cmUgdGhhdCB0aGVyZSBpcyBubyBnYXAgYmV0d2VlbiBoZHIgYW5kIHNvY2thZGRyX3N0b3JhZ2UgKi9cbmlvX3VyaW5nL25ldC5jOjEwMDk6XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGlvX3JlY3Ztc2dfbXVsdGlzaG90X2hkciwgYWRkcikgIT1cbmlvX3VyaW5nL25ldC5jLTEwMTAtXHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBpb191cmluZ19yZWN2bXNnX291dCkpO1xuLS1cbmlvX3VyaW5nL25ldC5jLTEwMTktXG5pb191cmluZy9uZXQuYzoxMDIwOmludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5pb191cmluZy9uZXQuYy0xMDIxLXtcbi0tXG5pb191cmluZy9uZXQuYy0xMDUyLVx0XHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpIHtcbmlvX3VyaW5nL25ldC5jOjEwNTM6XHRcdFx0cmV0ID0gaW9fcmVjdm1zZ19wcmVwX211bHRpc2hvdChrbXNnLCBzciwgXHUwMDI2c2VsLmFkZHIsIFx1MDAyNmxlbik7XG5pb191cmluZy9uZXQuYy0xMDU0LVx0XHRcdGlmIChyZXQpIHtcbi0tXG5pb191cmluZy9uZXQuYy0xMDY1LVx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQVBPTExfTVVMVElTSE9UKSB7XG5pb191cmluZy9uZXQuYzoxMDY2Olx0XHRyZXQgPSBpb19yZWN2bXNnX211bHRpc2hvdChzb2NrLCBzciwga21zZywgZmxhZ3MsXG5pb191cmluZy9uZXQuYy0xMDY3LVx0XHRcdFx0XHQgICBcdTAwMjZtc2hvdF9maW5pc2hlZCk7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTExMC1cdHNlbC52YWwgPSByZXQ7XG5pb191cmluZy9uZXQuYzoxMTExOlx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzLCBjb25zdW1lZCkpXG5pb191cmluZy9uZXQuYy0xMTEyLVx0XHRnb3RvIHJldHJ5X211bHRpc2hvdDtcbi0tXG5pb191cmluZy9uZXQuYy0xMTE2LVxuaW9fdXJpbmcvbmV0LmM6MTExNzpzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbmlvX3VyaW5nL25ldC5jLTExMTgtXHRcdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTE5MC1cbmlvX3VyaW5nL25ldC5jOjExOTE6aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL25ldC5jLTExOTIte1xuLS1cbmlvX3VyaW5nL25ldC5jLTEyMzEtXHRcdHNlbC52YWwgPSBzci1cdTAwM2VsZW47XG5pb191cmluZy9uZXQuYzoxMjMyOlx0XHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcdTAwMjZzZWwsIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5jLTEyMzMtXHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKSB7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTI4Ni1cdHNlbC52YWwgPSByZXQ7XG5pb191cmluZy9uZXQuYzoxMjg3Olx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzLCBjb25zdW1lZCkpXG5pb191cmluZy9uZXQuYy0xMjg4LVx0XHRnb3RvIHJldHJ5X211bHRpc2hvdDtcbi0tXG5pb191cmluZy9uZXQuYy0xMjkyLVxuaW9fdXJpbmcvbmV0LmM6MTI5MzppbnQgaW9fcmVjdnpjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbmlvX3VyaW5nL25ldC5jLTEyOTQte1xuaW9fdXJpbmcvbmV0LmM6MTI5NTpcdHN0cnVjdCBpb19yZWN2emMgKnpjID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3JlY3Z6Yyk7XG5pb191cmluZy9uZXQuYy0xMjk2LVx0dW5zaWduZWQgaWZxX2lkeDtcbi0tXG5pb191cmluZy9uZXQuYy0xMzIwLVxuaW9fdXJpbmcvbmV0LmM6MTMyMTppbnQgaW9fcmVjdnpjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5pb191cmluZy9uZXQuYy0xMzIyLXtcbmlvX3VyaW5nL25ldC5jOjEzMjM6XHRzdHJ1Y3QgaW9fcmVjdnpjICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19yZWN2emMpO1xuaW9fdXJpbmcvbmV0LmMtMTMyNC1cdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4tLVxuaW9fdXJpbmcvbmV0Lmg9MzU9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9uZXQuaC0zNi1cbmlvX3VyaW5nL25ldC5oOjM3OmludCBpb19yZWN2bXNnX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XG5pb191cmluZy9uZXQuaDozODppbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5oOjM5OmludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvbmV0LmgtNDAtXG4tLVxuaW9fdXJpbmcvb3BkZWYuYz01ND1jb25zdCBzdHJ1Y3QgaW9faXNzdWVfZGVmIGlvX2lzc3VlX2RlZnNbXSA9IHtcbi0tXG5pb191cmluZy9vcGRlZi5jLTE1OC1cdFx0LmFzeW5jX3NpemVcdFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXG5pb191cmluZy9vcGRlZi5jOjE1OTpcdFx0LnByZXBcdFx0XHQ9IGlvX3JlY3Ztc2dfcHJlcCxcbmlvX3VyaW5nL29wZGVmLmM6MTYwOlx0XHQuaXNzdWVcdFx0XHQ9IGlvX3JlY3Ztc2csXG5pb191cmluZy9vcGRlZi5jLTE2MS0jZWxzZVxuLS1cbmlvX3VyaW5nL29wZGVmLmMtMzAyLVx0XHQuYXN5bmNfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyKSxcbmlvX3VyaW5nL29wZGVmLmM6MzAzOlx0XHQucHJlcFx0XHRcdD0gaW9fcmVjdm1zZ19wcmVwLFxuaW9fdXJpbmcvb3BkZWYuYzozMDQ6XHRcdC5pc3N1ZVx0XHRcdD0gaW9fcmVjdixcbmlvX3VyaW5nL29wZGVmLmMtMzA1LSNlbHNlXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy01MjgtI2lmIGRlZmluZWQoQ09ORklHX05FVClcbmlvX3VyaW5nL29wZGVmLmM6NTI5Olx0XHQucHJlcFx0XHRcdD0gaW9fcmVjdnpjX3ByZXAsXG5pb191cmluZy9vcGRlZi5jOjUzMDpcdFx0Lmlzc3VlXHRcdFx0PSBpb19yZWN2emMsXG5pb191cmluZy9vcGRlZi5jLTUzMS0jZWxzZVxuLS1cbmlvX3VyaW5nL3pjcnguaD0xMzA9c3RhdGljIGlubGluZSBpbnQgaW9femNyeF9jdHJsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3pjcnguaC0xMzYtXG5pb191cmluZy96Y3J4Lmg6MTM3OmludCBpb19yZWN2emMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy96Y3J4Lmg6MTM4OmludCBpb19yZWN2emNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcbmlvX3VyaW5nL3pjcnguaC0xMzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgaW9fdXJpbmcvbmV0LmMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSBkaWN0YXRpbmcgdGhlIGJlaGF2aW9yIG9mIGBpb191cmluZy9uZXQuY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZpbGVzLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBgaW9fdXJpbmcvTWFrZWZpbGVgIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYXMgaXQgc2hvdWxkIGRldGFpbCBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbGx5IGZsYWcgc29tZSBjb25maWd1cmF0aW9uIGJpdHMuIEZhaWxpbmcgdGhhdCwgYGlvX3VyaW5nL0tjb25maWdgIGlzIGFsbW9zdCBjZXJ0YWlubHkgd2hlcmUgdGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCBhbmQgZG9jdW1lbnRlZC4gSSYjMzk7bSBiZXR0aW5nIG9uZSBvZiB0aG9zZSB3aWxsIGxlYWQgbWUgZGlyZWN0bHkgdG8gdGhlIHJlbGV2YW50IGtub2JzIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX05FVF9SWF9CVVNZX1BPTEwpXHQmIzQzOz0gbmFwaS5vXG5pb191cmluZy9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTkVUKSAmIzQzOz0gbmV0Lm8gY21kX25ldC5vXG5pb191cmluZy9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IGZkaW5mby5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYxNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGlvX3VyaW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBgaW9fdXJpbmdgIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoaXMga2VybmVsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludHMgYXJlIGBpb191cmluZy9LY29uZmlnYCwgdGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0aGUgY29yZSBkZWZpbml0aW9ucyBmb3IgaW9fdXJpbmcgaXRzZWxmIHRvIGJlLCBhbmQgdGhlbiBgaW5pdC9LY29uZmlnYC4gYGluaXQvS2NvbmZpZ2Agb2Z0ZW4gY29udGFpbnMgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgcG90ZW50aWFsbHkgcmVmZXJlbmNlcyBvdGhlciBLY29uZmlnIGZpbGVzIHRoYXQgYXJlIHRoZW4gaW5jbHVkZWQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlc2UgdHdvIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgcG9pbnRzIGZvciBlbmFibGluZywgZGlzYWJsaW5nLCBhbmQgcG9zc2libHkgY3VzdG9taXppbmcgYGlvX3VyaW5nYCBpbiB0aGlzIHBhcnRpY3VsYXIga2VybmVsIGJ1aWxkLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBhbGwgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGZsYWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lPX1VSSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTUyPWNvbmZpZyBBSU9cbi0tXG5pbml0L0tjb25maWctMTk1OS1cbmluaXQvS2NvbmZpZzoxOTYwOmNvbmZpZyBJT19VUklOR1xuaW5pdC9LY29uZmlnLTE5NjEtXHRib29sIFwmIzM0O0VuYWJsZSBJTyB1cmluZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZz0xOTY5PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbmluaXQvS2NvbmZpZy0xOTcwLVx0Ym9vbCBcJiMzNDtFbmFibGUgR0NPViBwcm9maWxpbmcgb24gdGhlIGlvX3VyaW5nIHN1YnN5c3RlbVwmIzM0O1xuaW5pdC9LY29uZmlnOjE5NzE6XHRkZXBlbmRzIG9uIElPX1VSSU5HIFx1MDAyNlx1MDAyNiBHQ09WX0tFUk5FTFxuaW5pdC9LY29uZmlnLTE5NzItXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnLTE5ODEtXG5pbml0L0tjb25maWc6MTk4Mjpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTk4My1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuaW5pdC9LY29uZmlnLTE5ODQtXHRkZWZhdWx0IG5cbmluaXQvS2NvbmZpZzoxOTg1Olx0ZGVwZW5kcyBvbiBJT19VUklOR1xuaW5pdC9LY29uZmlnLTE5ODYtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIEkvTyB3aXRoIGlvX3VyaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMgaW4gdGhpcyBgaW9fdXJpbmcvbmV0LmNgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gcGlucG9pbnQgdGhlIGFyZWFzIHdoZXJlIHRoZXkmIzM5O3ZlIG1hZGUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGVzZSBmdW5jdGlvbnM6IGBpb19yZWN2X2ZpbmlzaGAgKHdoaWNoIGlzIGEgc3RhdGljIGlubGluZSwgc28gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kKSwgYGlvX3JlY3Ztc2dgLCBgaW9fcmVjdl9idWZfc2VsZWN0YCAoYW5vdGhlciBzdGF0aWMgb25lKSwgYW5kIGBpb19yZWN2YC4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBpb19yZWN2X2ZpbmlzaGAsIGBpb19yZWN2bXNnYCwgYW5kIGBpb19yZWN2YCBhbmQgc2VlIGhvdyB0aGUgY2hhbmdlcyBoYXZlIGFmZmVjdGVkIHRoZSBmbG93IGFyb3VuZCB0aGVtLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2h5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NTA6XHQgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgYWN0dWFsbHkgZmluaXNoZWQsIG9yIGZhbHNlIGlmIGl0IHNob3VsZCBydW5cbiA4NTE6XHQgKiBhZ2FpbiAoZm9yIG11bHRpc2hvdCkuXG4gODUyOlx0ICovXG4gODUzOlx0c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIDg1NDpcdFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuIDg1NTpcdFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIGJvb2wgbXNob3RfZmluaXNoZWQsXG4gODU2Olx0XHRcdFx0XHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBzaXplX3QgY29uc3VtZWQpXG4gODU3Olx0e1xuIDg1ODpcdFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcbiA4NTk6XHRcdHVuc2lnbmVkIGludCBjZmxhZ3MgPSAwO1xuIDg2MDpcdFxuIDg2MTpcdFx0aWYgKGttc2ctXHUwMDNlbXNnLm1zZ19pbnEgXHUwMDNlIDApXG4gODYyOlx0XHRcdGNmbGFncyB8PSBJT1JJTkdfQ1FFX0ZfU09DS19OT05FTVBUWTtcbiA4NjM6XHRcbiA4NjQ6XHRcdGlmIChzZWwtXHUwMDNldmFsIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfTVNIT1RfTElNKSB7XG4gODY1Olx0XHRcdC8qXG4gODY2Olx0XHRcdCAqIElmIHNyLVx1MDAzZWxlbiBoaXRzIHplcm8sIHRoZSBsaW1pdCBoYXMgYmVlbiByZWFjaGVkLiBNYXJrXG4gODY3Olx0XHRcdCAqIG1zaG90IGFzIGZpbmlzaGVkLCBhbmQgZmxhZyBNU0hPVF9ET05FIGFzIHdlbGwgdG8gcHJldmVudFxuIDg2ODpcdFx0XHQgKiBhIHBvdGVudGlhbCBidW5kbGUgZnJvbSBiZWluZyByZXRyaWVkLlxuIDg2OTpcdFx0XHQgKi9cbiA4NzA6XHRcdFx0c3ItXHUwMDNlbXNob3RfdG90YWxfbGVuIC09IG1pbl90KGludCwgc2VsLVx1MDAzZXZhbCwgc3ItXHUwMDNlbXNob3RfdG90YWxfbGVuKTtcbiA4NzE6XHRcdFx0aWYgKCFzci1cdTAwM2Vtc2hvdF90b3RhbF9sZW4pIHtcbiA4NzI6XHRcdFx0XHRzci1cdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9NU0hPVF9ET05FO1xuIDg3MzpcdFx0XHRcdG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcbiA4NzQ6XHRcdFx0fVxuIDg3NTpcdFx0fVxuIDg3NjpcdFxuIDg3NzpcdFx0aWYgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XG4gODc4Olx0XHRcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cdTAwM2V2YWwgLSBzci1cdTAwM2Vkb25lX2lvO1xuIDg3OTpcdFxuIDg4MDpcdFx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgY29uc3VtZWQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIGNvbnN1bWVkKSk7XG4gODgxOlx0XHRcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXG4gODgyOlx0XHRcdFx0Y2ZsYWdzID0gcmVxLVx1MDAzZWNxZS5mbGFncyB8IChjZmxhZ3MgXHUwMDI2IENRRV9GX01BU0spO1xuIDg4MzpcdFx0XHRpZiAoc3ItXHUwMDNlbXNob3RfbGVuIFx1MDAyNlx1MDAyNiBzZWwtXHUwMDNldmFsIFx1MDAzZT0gc3ItXHUwMDNlbXNob3RfbGVuKVxuIDg4NDpcdFx0XHRcdHNyLVx1MDAzZWZsYWdzIHw9IElPUklOR19SRUNWX01TSE9UX0NBUDtcbiA4ODU6XHRcdFx0LyogYnVuZGxlIHdpdGggbm8gbW9yZSBpbW1lZGlhdGUgYnVmZmVycywgd2UmIzM5O3JlIGRvbmUgKi9cbiA4ODY6XHRcdFx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQkxfRU1QVFkpXG4gODg3Olx0XHRcdFx0Z290byBmaW5pc2g7XG4gODg4Olx0XHRcdC8qXG4gODg5Olx0XHRcdCAqIElmIG1vcmUgaXMgYXZhaWxhYmxlIEFORCBpdCB3YXMgYSBmdWxsIHRyYW5zZmVyLCByZXRyeSBhbmRcbiA4OTA6XHRcdFx0ICogYXBwZW5kIHRvIHRoaXMgb25lXG4gODkxOlx0XHRcdCAqL1xuIDg5MjpcdFx0XHRpZiAoIShzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfTk9fUkVUUlkpIFx1MDAyNlx1MDAyNlxuIDg5MzpcdFx0XHQgICAga21zZy1cdTAwM2Vtc2cubXNnX2lucSBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgdGhpc19yZXQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4gODk0Olx0XHRcdCAgICAhaW92X2l0ZXJfY291bnQoXHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIpKSB7XG4gODk1Olx0XHRcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyA9IGNmbGFncyBcdTAwMjYgfkNRRV9GX01BU0s7XG4gODk2Olx0XHRcdFx0c3ItXHUwMDNlbGVuID0ga21zZy1cdTAwM2Vtc2cubXNnX2lucTtcbiA4OTc6XHRcdFx0XHRzci1cdTAwM2Vkb25lX2lvICYjNDM7PSB0aGlzX3JldDtcbiA4OTg6XHRcdFx0XHRzci1cdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9SRVRSWTtcbiA4OTk6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gOTAwOlx0XHRcdH1cbiA5MDE6XHRcdH0gZWxzZSB7XG4gOTAyOlx0XHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIGNvbnN1bWVkLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuIDkwMzpcdFx0fVxuIDkwNDpcdFxuIDkwNTpcdFx0LypcbiA5MDY6XHRcdCAqIEZpbGwgQ1FFIGZvciB0aGlzIHJlY2VpdmUgYW5kIHNlZSBpZiB3ZSBzaG91bGQga2VlcCB0cnlpbmcgdG9cbiA5MDc6XHRcdCAqIHJlY2VpdmUgZnJvbSB0aGlzIHNvY2tldC5cbiA5MDg6XHRcdCAqL1xuIDkwOTpcdFx0aWYgKChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkgXHUwMDI2XHUwMDI2ICFtc2hvdF9maW5pc2hlZCBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MDcKCQkJCQkJCW91dHB1dDogMTI0CgkJCQkJCQl0aG91Z2h0czogNTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgTmV0d29yayBQYXRjaDogQSBGdXp6aW5nIFBlcnNwZWN0aXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gYSBmdXp6aW5nIHN0YW5kcG9pbnQsIHRoaXMgcGF0Y2ggbG9va3MgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSBsb29raW5nIGF0IGNoYW5nZXMgaW4gYGlvX3VyaW5nL25ldC5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IGJ1ZmZlcnMgYXJlIGhhbmRsZWQgZHVyaW5nIGBpb19yZWN2YCBhbmQgYGlvX3JlY3Ztc2dgIG9wZXJhdGlvbnMsIHBhcnRpY3VsYXJseSB3aGVuIGBNU0dfVFJVTkNgIGlzIHVzZWQgb3IgcGFydGlhbCBmaWxscyBvY2N1ci4gVGhlIGtleSBpcyBwcmV2ZW50aW5nIG92ZXItY29uc3VtcHRpb24gb2YgYnVmZmVyIGxlbmd0aHMgaW4gYGlvX3B1dF9rYnVmYCBhbmQgYGlvX3B1dF9rYnVmc2AuIEdpdmVuIHRoZSByZWFjaGFiaWxpdHkgb2YgYElPUklOR19PUF9SRUNWYCBhbmQgYElPUklOR19PUF9SRUNWTVNHYCBhcyBzdGFuZGFyZCBpb191cmluZyBvcGVyYXRpb25zLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vay4gSXQgZGlyZWN0bHkgdG91Y2hlcyB0aGUgY29yZSBuZXR3b3JrIG9wY29kZSBleGVjdXRpb24gbG9naWMgYW5kIGJ1ZmZlciBtYW5hZ2VtZW50LCBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSBhcmUgdGhlIGVudHJ5IHBvaW50czogYGlvX3JlY3ZgIGFuZCBgaW9fcmVjdm1zZ2AuIFRob3VnaCBgaW9fcmVjdl9idWZfc2VsZWN0YCBpcyBpbiB0aGUgbWl4LCBsZXQmIzM5O3MgcHJpb3JpdGl6ZSB0aGUgbm9uLXN0YXRpYyBlbnRyeXBvaW50cyBmaXJzdC4gQW5kIG9mIGNvdXJzZSwgdGhlIHN0YXRpYyBpbmxpbmUgYGlvX3JlY3ZfZmluaXNoYCBpcyBub3QgYW4gZXhwbGljaXQgc3ltYm9sLiBNeSB0aGlua2luZyBpcyB0aGF0IHRoZSByZWxldmFudCBjb2RlIHdpbGwgYmUgYWNjZXNzZWQgYnkgZW50cnlwb2ludHMsIHNvIGxldCYjMzk7cyBrZWVwIGl0IHNpbXBsZS4KCkNvbmZpZ3VyYXRpb24td2lzZSwgaXQgaGluZ2VzIG9uIGBJT19VUklOR2AgYW5kIGBORVRgLCB3aGljaCBpcyBleHBlY3RlZCBnaXZlbiB0aGUgc3Vic3lzdGVtLiBUaGUgYGlvX3VyaW5nL01ha2VmaWxlYCBjb25maXJtcyB0aGUgZGVwZW5kZW5jeSBvbiBgQ09ORklHX05FVGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBubyBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4KClNvLCB0byBzdW1tYXJpemU6Ci0gICAqKldvcnRoRnV6emluZzoqKiBUcnVlCi0gICAqKkZvY3VzU3ltYm9sczoqKiBgaW9fcmVjdmAsIGBpb19yZWN2bXNnYAotICAgKipFbmFibGVDb25maWdzOioqIGBJT19VUklOR2AsIGBORVRgCgpOb3csIGxldCYjMzk7cyBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpb191cmluZyByZWNlaXZlIGhhbmRsaW5nIChpb19yZWN2LCBpb19yZWN2bXNnLCBpb19yZWN2X2J1Zl9zZWxlY3QsIGlvX3JlY3ZfZmluaXNoKSB0byBwcm9wZXJseSB0cmFjayBhbmQgY2FwIGNvbnN1bWVkIGJ1ZmZlciBsZW5ndGggd2hlbiBNU0dfVFJVTkMgaXMgdXNlZCBvciBidWZmZXIgc2l6ZXMgZGlmZmVyIGZyb20gcmV0dXJuZWQgcGFja2V0IGxlbmd0aHMuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIHZpYSBzdGFuZGFyZCBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpb191cmluZyByZWNlaXZlIGhhbmRsaW5nIChpb19yZWN2LCBpb19yZWN2bXNnLCBpb19yZWN2X2J1Zl9zZWxlY3QsIGlvX3JlY3ZfZmluaXNoKSB0byBwcm9wZXJseSB0cmFjayBhbmQgY2FwIGNvbnN1bWVkIGJ1ZmZlciBsZW5ndGggd2hlbiBNU0dfVFJVTkMgaXMgdXNlZCBvciBidWZmZXIgc2l6ZXMgZGlmZmVyIGZyb20gcmV0dXJuZWQgcGFja2V0IGxlbmd0aHMuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIHZpYSBzdGFuZGFyZCBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYnVmZmVyIGxlbmd0aCBhY2NvdW50aW5nIGluIGlvX3VyaW5nJiMzOTtzIHJlY3YgYW5kIHJlY3Ztc2cgcGF0aHMgd2hlbiBNU0dfVFJVTkMgaXMgdXNlZC4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgJiMzOTtjb25zdW1lZCYjMzk7IHZhcmlhYmxlIHRvIGVuc3VyZSB0aGF0IGJ1ZmZlciByaW5nIGNvbW1pdHRpbmcgYW5kIGJ1bmRsZSBidWZmZXIgY291bnRpbmcgKGlvX2J1bmRsZV9uYnVmcykgb25seSBjb25zdW1lIHVwIHRvIHRoZSBhY3R1YWwgYnVmZmVyIGNhcGFjaXR5ICgmIzM5O2xlbiYjMzk7KSByYXRoZXIgdGhhbiB0aGUgdHJ1bmNhdGVkIHRvdGFsIHBhY2tldCBsZW5ndGggKCYjMzk7cmV0JiMzOTspLlxuXG5BbGwgbmV3IGFuZCBtb2RpZmllZCB2YXJpYWJsZXMgKCYjMzk7bGVuJiMzOTssICYjMzk7Y29uc3VtZWQmIzM5OykgYXJlIHN0cmljdGx5IGluaXRpYWxpemVkIGFuZCBhc3NpZ25lZCBiZWZvcmUgdXNlLiBUaGUgbG9naWMgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIGxlYWsgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2Vyc3BhY2UuIEFueSByaXNrcyByZWxhdGVkIHRvIGJ1ZmZlciBvdmVyLWNvbnN1bXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXRlciBpbmRleGluZyBpbiBpb19idW5kbGVfbmJ1ZnMgZmFsbCB1bmRlciBib3VuZHMtY2hlY2tpbmcgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiM2NmNmNmYjYxYzg4N2JjZTAzMTFiZGUwYWFmYTdhM2NmNmI4NmY5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAyMzoyNzowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL25ldC5jIGIvaW9fdXJpbmcvbmV0LmMKaW5kZXggZmJlNzE5ZDg2YzQ2My4uZjgxMTBkYzlmODYwNiAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvbmV0LmMKQEAgLTg1Myw3ICYjNDM7ODUzLDcgQEAgaW50IGlvX3JlY3Ztc2dfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKQogc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLAogCQkJCSAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywKIAkJCQkgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgYm9vbCBtc2hvdF9maW5pc2hlZCwKLQkJCQkgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKQomIzQzOwkJCQkgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBzaXplX3QgY29uc3VtZWQpCiB7CiAJc3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTsKIAl1bnNpZ25lZCBpbnQgY2ZsYWdzID0gMDsKQEAgLTg3Nyw3ICYjNDM7ODc3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLAogCWlmIChzci0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkgewogCQlzaXplX3QgdGhpc19yZXQgPSBzZWwtJmd0O3ZhbCAtIHNyLSZndDtkb25lX2lvOwogCi0JCWNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLSZndDtidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7CiYjNDM7CQljZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgY29uc3VtZWQsIHNlbC0mZ3Q7YnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBjb25zdW1lZCkpOwogCQlpZiAoc3ItJmd0O2ZsYWdzICZhbXA7IElPUklOR19SRUNWX1JFVFJZKQogCQkJY2ZsYWdzID0gcmVxLSZndDtjcWUuZmxhZ3MgfCAoY2ZsYWdzICZhbXA7IENRRV9GX01BU0spOwogCQlpZiAoc3ItJmd0O21zaG90X2xlbiAmYW1wOyZhbXA7IHNlbC0mZ3Q7dmFsICZndDs9IHNyLSZndDttc2hvdF9sZW4pCkBAIC04OTksNyAmIzQzOzg5OSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCX0gZWxzZSB7Ci0JCWNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIHNlbC0mZ3Q7dmFsLCBzZWwtJmd0O2J1Zl9saXN0KTsKJiM0MzsJCWNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIGNvbnN1bWVkLCBzZWwtJmd0O2J1Zl9saXN0KTsKIAl9CiAKIAkvKgpAQCAtMTAyNyw2ICYjNDM7MTAyNyw3IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiAJaW50IHJldCwgbWluX3JldCA9IDA7CiAJYm9vbCBmb3JjZV9ub25ibG9jayA9IGlzc3VlX2ZsYWdzICZhbXA7IElPX1VSSU5HX0ZfTk9OQkxPQ0s7CiAJYm9vbCBtc2hvdF9maW5pc2hlZCA9IHRydWU7CiYjNDM7CXNpemVfdCBsZW4sIGNvbnN1bWVkID0gMDsKIAogCXNvY2sgPSBzb2NrX2Zyb21fZmlsZShyZXEtJmd0O2ZpbGUpOwogCWlmICh1bmxpa2VseSghc29jaykpCkBAIC0xMDQyLDkgJiM0MzsxMDQzLDggQEAgaW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAogcmV0cnlfbXVsdGlzaG90OgogCXNlbC5idWZfbGlzdCA9IE5VTEw7CiYjNDM7CWxlbiA9IHNyLSZndDtsZW47CiAJaWYgKGlvX2RvX2J1ZmZlcl9zZWxlY3QocmVxKSkgewotCQlzaXplX3QgbGVuID0gc3ItJmd0O2xlbjsKLQogCQlzZWwgPSBpb19idWZmZXJfc2VsZWN0KHJlcSwgJmFtcDtsZW4sIHNyLSZndDtidWZfZ3JvdXAsIGlzc3VlX2ZsYWdzKTsKIAkJaWYgKCFzZWwuYWRkcikKIAkJCXJldHVybiAtRU5PQlVGUzsKQEAgLTEwNjUsNiAmIzQzOzEwNjUsNyBAQCBpbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQogCWlmIChyZXEtJmd0O2ZsYWdzICZhbXA7IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkgewogCQlyZXQgPSBpb19yZWN2bXNnX211bHRpc2hvdChzb2NrLCBzciwga21zZywgZmxhZ3MsCiAJCQkJCSAgICZhbXA7bXNob3RfZmluaXNoZWQpOwomIzQzOwkJY29uc3VtZWQgPSByZXQ7CiAJfSBlbHNlIHsKIAkJLyogZGlzYWJsZSBwYXJ0aWFsIHJldHJ5IGZvciByZWN2bXNnIHdpdGggY21zZyBhdHRhY2hlZCAqLwogCQlpZiAoZmxhZ3MgJmFtcDsgTVNHX1dBSVRBTEwgJmFtcDsmYW1wOyAha21zZy0mZ3Q7bXNnLm1zZ19jb250cm9sbGVuKQpAQCAtMTA3Miw2ICYjNDM7MTA3MywxNSBAQCBpbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQogCiAJCXJldCA9IF9fc3lzX3JlY3Ztc2dfc29jayhzb2NrLCAmYW1wO2ttc2ctJmd0O21zZywgc3ItJmd0O3Vtc2csCiAJCQkJCSBrbXNnLSZndDt1YWRkciwgZmxhZ3MpOwomIzQzOwkJLyoKJiM0MzsJCSAqIFdpdGggTVNHX1RSVU5DLCB0aGUgbmV0IGxheWVyIHdpbGwgcmV0dXJuIHRoZSBmdWxsIHNpemUgb2YKJiM0MzsJCSAqIHRoZSBwYWNrZXQsIGV2ZW4gaWYgd2Ugb25seSBmaWxsZWQgcGFydCBvZiBpdCBpbiB0aGUgYnVmZmVycy4KJiM0MzsJCSAqIEFkanVzdCB0aGUgcmV0dXJuZWQgc2l6ZSB0byBjb25zdW1lIG9ubHkgdGhlIHJlYWwgcGFydCBvZiB0aGUKJiM0MzsJCSAqIGJ1ZmZlci4KJiM0MzsJCSAqLwomIzQzOwkJY29uc3VtZWQgPSByZXQ7CiYjNDM7CQlpZiAocmV0ICZndDsgbGVuKQomIzQzOwkJCWNvbnN1bWVkID0gbGVuOwogCX0KIAogCWlmIChyZXQgJmx0OyBtaW5fcmV0KSB7CkBAIC0xMDk4LDcgJiM0MzsxMTA4LDcgQEAgaW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAkJaW9fa2J1Zl9yZWN5Y2xlKHJlcSwgc2VsLmJ1Zl9saXN0LCBpc3N1ZV9mbGFncyk7CiAKIAlzZWwudmFsID0gcmV0OwotCWlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCAmYW1wO3NlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSkKJiM0MzsJaWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csICZhbXA7c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MsIGNvbnN1bWVkKSkKIAkJZ290byByZXRyeV9tdWx0aXNob3Q7CiAKIAlyZXR1cm4gc2VsLnZhbDsKQEAgLTExMDgsNiAmIzQzOzExMTgsNyBAQCBzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZwogCQkJICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiB7CiAJc3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTsKJiM0MzsJc2l6ZV90IGxlbjsKIAlpbnQgcmV0OwogCiAJLyoKQEAgLTExNTMsMTMgJiM0MzsxMTY0LDE0IEBAIHN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnCiAJCS8qIHNwZWNpYWwgY2FzZSAxIHZlYywgY2FuIGJlIGEgZmFzdCBwYXRoICovCiAJCWlmIChyZXQgPT0gMSkgewogCQkJc3ItJmd0O2J1ZiA9IGFyZy5pb3ZzWzBdLmlvdl9iYXNlOwotCQkJc3ItJmd0O2xlbiA9IGFyZy5pb3ZzWzBdLmlvdl9sZW47CiYjNDM7CQkJbGVuID0gc3ItJmd0O2xlbiA9IGFyZy5pb3ZzWzBdLmlvdl9sZW47CiAJCQlnb3RvIG1hcF91YnVmOwogCQl9CiAJCWlvdl9pdGVyX2luaXQoJmFtcDtrbXNnLSZndDttc2cubXNnX2l0ZXIsIElURVJfREVTVCwgYXJnLmlvdnMsIHJldCwKLQkJCQlhcmcub3V0X2xlbik7CiYjNDM7CQkJICAgICAgYXJnLm91dF9sZW4pOwomIzQzOwkJbGVuID0gYXJnLm91dF9sZW47CiAJfSBlbHNlIHsKLQkJc2l6ZV90IGxlbiA9IHNlbC0mZ3Q7dmFsOwomIzQzOwkJbGVuID0gc2VsLSZndDt2YWw7CiAKIAkJKnNlbCA9IGlvX2J1ZmZlcl9zZWxlY3QocmVxLCAmYW1wO2xlbiwgc3ItJmd0O2J1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpOwogCQlpZiAoIXNlbC0mZ3Q7YWRkcikKQEAgLTExNzMsNyAmIzQzOzExODUsNyBAQCBzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZwogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIGxlbjsKIH0KIAogaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKQEAgLTExODQsNiAmIzQzOzExOTYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQogCXN0cnVjdCBzb2NrZXQgKnNvY2s7CiAJdW5zaWduZWQgZmxhZ3M7CiAJaW50IHJldCwgbWluX3JldCA9IDA7CiYjNDM7CXNpemVfdCBjb25zdW1lZCA9IDAsIGxlbiA9IDA7CiAJYm9vbCBmb3JjZV9ub25ibG9jayA9IGlzc3VlX2ZsYWdzICZhbXA7IElPX1VSSU5HX0ZfTk9OQkxPQ0s7CiAJYm9vbCBtc2hvdF9maW5pc2hlZDsKIApAQCAtMTIxMyw2ICYjNDM7MTIyNiw3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiAKIHJldHJ5X211bHRpc2hvdDoKIAlzZWwuYnVmX2xpc3QgPSBOVUxMOwomIzQzOwlsZW4gPSBzci0mZ3Q7bGVuOwogCWlmIChpb19kb19idWZmZXJfc2VsZWN0KHJlcSkpIHsKIAkJc2VsLnZhbCA9IHNyLSZndDtsZW47CiAJCXJldCA9IGlvX3JlY3ZfYnVmX3NlbGVjdChyZXEsIGttc2csICZhbXA7c2VsLCBpc3N1ZV9mbGFncyk7CkBAIC0xMjIwLDYgJiM0MzsxMjM0LDcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAkJCWttc2ctJmd0O21zZy5tc2dfaW5xID0gLTE7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CiYjNDM7CQlsZW4gPSByZXQ7CiAJCXNyLSZndDtidWYgPSBOVUxMOwogCX0KIApAQCAtMTI1MCw2ICYjNDM7MTI2NSwxNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQogCX0KIAogCW1zaG90X2ZpbmlzaGVkID0gcmV0ICZsdDs9IDA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFdpdGggTVNHX1RSVU5DLCB0aGUgbmV0IGxheWVyIHdpbGwgcmV0dXJuIHRoZSBmdWxsIHNpemUgb2YKJiM0MzsJICogdGhlIHBhY2tldCwgZXZlbiBpZiB3ZSBvbmx5IGZpbGxlZCBwYXJ0IG9mIGl0IGluIHRoZSBidWZmZXJzLgomIzQzOwkgKiBBZGp1c3QgdGhlIHJldHVybmVkIHNpemUgdG8gY29uc3VtZSBvbmx5IHRoZSByZWFsIHBhcnQgb2YgdGhlCiYjNDM7CSAqIGJ1ZmZlci4KJiM0MzsJICovCiYjNDM7CWNvbnN1bWVkID0gcmV0OwomIzQzOwlpZiAocmV0ICZndDsgbGVuKQomIzQzOwkJY29uc3VtZWQgPSBsZW47CiYjNDM7CiAJaWYgKHJldCAmZ3Q7IDApCiAJCXJldCAmIzQzOz0gc3ItJmd0O2RvbmVfaW87CiAJZWxzZSBpZiAoc3ItJmd0O2RvbmVfaW8pCkBAIC0xMjU4LDcgJiM0MzsxMjg0LDcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAkJaW9fa2J1Zl9yZWN5Y2xlKHJlcSwgc2VsLmJ1Zl9saXN0LCBpc3N1ZV9mbGFncyk7CiAKIAlzZWwudmFsID0gcmV0OwotCWlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCAmYW1wO3NlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSkKJiM0MzsJaWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csICZhbXA7c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MsIGNvbnN1bWVkKSkKIAkJZ290byByZXRyeV9tdWx0aXNob3Q7CiAKIAlyZXR1cm4gc2VsLnZhbDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipLTVNBTiBGdXp6aW5nIERlY2lzaW9uOiBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgS01TQU4gZnV6emluZyBpcyB3YXJyYW50ZWQgZm9yIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgZmlyc3QuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgKndoYXQqIHRoaXMgcGF0Y2ggaXMgdHJ5aW5nIHRvIGRvIGFuZCAqd2h5KiBpdCYjMzk7cyBiZWVuIHByb3Bvc2VkLgoKVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBsb2NhdGVkIGluIGBpb191cmluZy9uZXQuY2AgaXMgdGhlIGZpcnN0IGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBjb25zaWRlcmFibHkuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGF0IHNwZWNpZmljIGZpbGUuIEkmIzM5O2xsIHByb2JhYmx5IGZpcmUgdXAgZ3JlcHBlciBvciBqdXN0IHJlYWQgdGhlIGZpbGUgZGlyZWN0bHksIGRlcGVuZGluZyBvbiBob3cgZmFtaWxpYXIgSSBhbSB3aXRoIHRoaXMgYXJlYSBvZiB0aGUgY29kZS4gVGhlIGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCB0aGUgYWZmZWN0ZWQgZnVuY3Rpb25zIHdpdGhpbiBgaW9fdXJpbmcvbmV0LmNgLCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZWlyIGxvZ2ljLCBpZGVudGlmeSBwb3RlbnRpYWwgZGF0YSByYWNlcywgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIG90aGVyIHZ1bG5lcmFiaWxpdGllcyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQuIFdpdGggYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBwYXRjaCBhbmQgaXRzIGNvbnRleHQsIEkgY2FuIG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgdGhlIG5lY2Vzc2l0eSBvZiBLTVNBTiBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NTA6XHQgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgYWN0dWFsbHkgZmluaXNoZWQsIG9yIGZhbHNlIGlmIGl0IHNob3VsZCBydW5cbiA4NTE6XHQgKiBhZ2FpbiAoZm9yIG11bHRpc2hvdCkuXG4gODUyOlx0ICovXG4gODUzOlx0c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIDg1NDpcdFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuIDg1NTpcdFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIGJvb2wgbXNob3RfZmluaXNoZWQsXG4gODU2Olx0XHRcdFx0XHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBzaXplX3QgY29uc3VtZWQpXG4gODU3Olx0e1xuIDg1ODpcdFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcbiA4NTk6XHRcdHVuc2lnbmVkIGludCBjZmxhZ3MgPSAwO1xuIDg2MDpcdFxuIDg2MTpcdFx0aWYgKGttc2ctXHUwMDNlbXNnLm1zZ19pbnEgXHUwMDNlIDApXG4gODYyOlx0XHRcdGNmbGFncyB8PSBJT1JJTkdfQ1FFX0ZfU09DS19OT05FTVBUWTtcbiA4NjM6XHRcbiA4NjQ6XHRcdGlmIChzZWwtXHUwMDNldmFsIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfTVNIT1RfTElNKSB7XG4gODY1Olx0XHRcdC8qXG4gODY2Olx0XHRcdCAqIElmIHNyLVx1MDAzZWxlbiBoaXRzIHplcm8sIHRoZSBsaW1pdCBoYXMgYmVlbiByZWFjaGVkLiBNYXJrXG4gODY3Olx0XHRcdCAqIG1zaG90IGFzIGZpbmlzaGVkLCBhbmQgZmxhZyBNU0hPVF9ET05FIGFzIHdlbGwgdG8gcHJldmVudFxuIDg2ODpcdFx0XHQgKiBhIHBvdGVudGlhbCBidW5kbGUgZnJvbSBiZWluZyByZXRyaWVkLlxuIDg2OTpcdFx0XHQgKi9cbiA4NzA6XHRcdFx0c3ItXHUwMDNlbXNob3RfdG90YWxfbGVuIC09IG1pbl90KGludCwgc2VsLVx1MDAzZXZhbCwgc3ItXHUwMDNlbXNob3RfdG90YWxfbGVuKTtcbiA4NzE6XHRcdFx0aWYgKCFzci1cdTAwM2Vtc2hvdF90b3RhbF9sZW4pIHtcbiA4NzI6XHRcdFx0XHRzci1cdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9NU0hPVF9ET05FO1xuIDg3MzpcdFx0XHRcdG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcbiA4NzQ6XHRcdFx0fVxuIDg3NTpcdFx0fVxuIDg3NjpcdFxuIDg3NzpcdFx0aWYgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XG4gODc4Olx0XHRcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cdTAwM2V2YWwgLSBzci1cdTAwM2Vkb25lX2lvO1xuIDg3OTpcdFxuIDg4MDpcdFx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgY29uc3VtZWQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIGNvbnN1bWVkKSk7XG4gODgxOlx0XHRcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXG4gODgyOlx0XHRcdFx0Y2ZsYWdzID0gcmVxLVx1MDAzZWNxZS5mbGFncyB8IChjZmxhZ3MgXHUwMDI2IENRRV9GX01BU0spO1xuIDg4MzpcdFx0XHRpZiAoc3ItXHUwMDNlbXNob3RfbGVuIFx1MDAyNlx1MDAyNiBzZWwtXHUwMDNldmFsIFx1MDAzZT0gc3ItXHUwMDNlbXNob3RfbGVuKVxuIDg4NDpcdFx0XHRcdHNyLVx1MDAzZWZsYWdzIHw9IElPUklOR19SRUNWX01TSE9UX0NBUDtcbiA4ODU6XHRcdFx0LyogYnVuZGxlIHdpdGggbm8gbW9yZSBpbW1lZGlhdGUgYnVmZmVycywgd2UmIzM5O3JlIGRvbmUgKi9cbiA4ODY6XHRcdFx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQkxfRU1QVFkpXG4gODg3Olx0XHRcdFx0Z290byBmaW5pc2g7XG4gODg4Olx0XHRcdC8qXG4gODg5Olx0XHRcdCAqIElmIG1vcmUgaXMgYXZhaWxhYmxlIEFORCBpdCB3YXMgYSBmdWxsIHRyYW5zZmVyLCByZXRyeSBhbmRcbiA4OTA6XHRcdFx0ICogYXBwZW5kIHRvIHRoaXMgb25lXG4gODkxOlx0XHRcdCAqL1xuIDg5MjpcdFx0XHRpZiAoIShzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfTk9fUkVUUlkpIFx1MDAyNlx1MDAyNlxuIDg5MzpcdFx0XHQgICAga21zZy1cdTAwM2Vtc2cubXNnX2lucSBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgdGhpc19yZXQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4gODk0Olx0XHRcdCAgICAhaW92X2l0ZXJfY291bnQoXHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIpKSB7XG4gODk1Olx0XHRcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyA9IGNmbGFncyBcdTAwMjYgfkNRRV9GX01BU0s7XG4gODk2Olx0XHRcdFx0c3ItXHUwMDNlbGVuID0ga21zZy1cdTAwM2Vtc2cubXNnX2lucTtcbiA4OTc6XHRcdFx0XHRzci1cdTAwM2Vkb25lX2lvICYjNDM7PSB0aGlzX3JldDtcbiA4OTg6XHRcdFx0XHRzci1cdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9SRVRSWTtcbiA4OTk6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gOTAwOlx0XHRcdH1cbiA5MDE6XHRcdH0gZWxzZSB7XG4gOTAyOlx0XHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIGNvbnN1bWVkLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuIDkwMzpcdFx0fVxuIDkwNDpcdFxuIDkwNTpcdFx0LypcbiA5MDY6XHRcdCAqIEZpbGwgQ1FFIGZvciB0aGlzIHJlY2VpdmUgYW5kIHNlZSBpZiB3ZSBzaG91bGQga2VlcCB0cnlpbmcgdG9cbiA5MDc6XHRcdCAqIHJlY2VpdmUgZnJvbSB0aGlzIHNvY2tldC5cbiA5MDg6XHRcdCAqL1xuIDkwOTpcdFx0aWYgKChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkgXHUwMDI2XHUwMDI2ICFtc2hvdF9maW5pc2hlZCBcdTAwMjZcdTAwMjZcbiA5MTA6XHRcdCAgICBpb19yZXFfcG9zdF9jcWUocmVxLCBzZWwtXHUwMDNldmFsLCBjZmxhZ3MgfCBJT1JJTkdfQ1FFX0ZfTU9SRSkpIHtcbiA5MTE6XHRcdFx0c2VsLVx1MDAzZXZhbCA9IElPVV9SRVRSWTtcbiA5MTI6XHRcdFx0aW9fbXNob3RfcHJlcF9yZXRyeShyZXEsIGttc2cpO1xuIDkxMzpcdFx0XHQvKiBLbm93biBub3QtZW1wdHkgb3IgdW5rbm93biBzdGF0ZSwgcmV0cnkgKi9cbiA5MTQ6XHRcdFx0aWYgKGNmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GX1NPQ0tfTk9ORU1QVFkgfHwga21zZy1cdTAwM2Vtc2cubXNnX2lucSBcdTAwM2MgMCkge1xuIDkxNTpcdFx0XHRcdGlmIChzci1cdTAwM2Vucl9tdWx0aXNob3RfbG9vcHMmIzQzOyYjNDM7IFx1MDAzYyBNVUxUSVNIT1RfTUFYX1JFVFJZIFx1MDAyNlx1MDAyNlxuIDkxNjpcdFx0XHRcdCAgICAhKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVl9NU0hPVF9DQVApKSB7XG4gOTE3Olx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gOTE4Olx0XHRcdFx0fVxuIDkxOTpcdFx0XHRcdC8qIG1zaG90IHJldHJpZXMgZXhjZWVkZWQsIGZvcmNlIGEgcmVxdWV1ZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTc3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGZvY3VzaW5nIG9uIHRoZSBjb3JlIHByb2JsZW06CgoqKkRlbHZpbmcgaW50byBgaW9fcHV0X2tidWZzYCBhbmQgaXRzIFZhcmlhdGlvbnMqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgaW9fcHV0X2tidWZzYCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIHNpbXBsZXIgYGlvX3B1dF9rYnVmYCB2YXJpYW50cyBoYW5kbGUgdGhhdCBzZWNvbmQgYXJndW1lbnQuIEl0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBidWZmZXIgbWFuYWdlbWVudCBhbmQgcmVzb3VyY2UgaGFuZGxpbmcgaW4gdGhpcyBjb250ZXh0LiBJJiMzOTttIHNlZWluZyBgY29uc3VtZWRgLCBgc2VsLSZndDt2YWxgLCBhbmQgYHRoaXNfcmV0YCBmbG9hdGluZyBhcm91bmQgYXMgcG9zc2liaWxpdGllcyBmb3IgdGhhdCBzZWNvbmQgYXJndW1lbnQsIGFuZCB0aGF04oCZcyB3aGVyZSB0aGUgZGV0YWlsIGlzIGxpa2VseSBoaWRkZW4uIEkgaW1tZWRpYXRlbHkgd2FudCB0byBkaWZmZXJlbnRpYXRlIHdoYXQgZWFjaCBvZiB0aG9zZSB2YXJpYWJsZXMgbWVhbnMgdG8gdGhlIG92ZXJhbGwgYmVoYXZpb3Igb2YgdGhlIGZ1bmN0aW9uLCBhbmQgSSYjMzk7bSBndWVzc2luZyB0aGF0IHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBmdW5jdGlvbnMgYXJlIHByb2JhYmx5IGp1c3QgdGhhdCBzZWNvbmQgYXJndW1lbnQsIG9yIGF0IGxlYXN0IHRoZXkmIzM5O3JlIGtleS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgcmVwcmVzZW50cyBieXRlcyAqY29uc3VtZWQqLCBzb21lIGtpbmQgb2YgKnNlbGVjdGlvbiB2YWx1ZSosIG9yIGEgKnJldHVybiB2YWx1ZSogdGhhdCYjMzk7cyBiZWVuIHBhcnRpYWxseSBoYW5kbGVkLiBUaGUgaW1wbGljYXRpb25zIGZvciB0aGUgYnVmZmVyIGxpZmVjeWNsZSBhbmQgcmVzb3VyY2UgZGVhbGxvY2F0aW9uIGFyZSBzdWJzdGFudGlhbCBkZXBlbmRpbmcgb24gd2hpY2ggaXQgaXMhIFRoaXMgYW5hbHlzaXMgaXMgY3J1Y2lhbCB0byBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHByZWNpc2UgbWVtb3J5IG1hbmFnZW1lbnQgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3B1dF9rYnVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmM9OTQ4PXZvaWQgaW9fcmVxX2RlZmVyX2ZhaWxlZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgczMyIHJlcylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTk1NS1cdHJlcV9zZXRfZmFpbChyZXEpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzo5NTY6XHRpb19yZXFfc2V0X3JlcyhyZXEsIHJlcywgaW9fcHV0X2tidWYocmVxLCByZXMsIE5VTEwpKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTU3LVx0aWYgKGRlZi1cdTAwM2VmYWlsKVxuLS1cbmlvX3VyaW5nL2tidWYuYz0zODE9aW50IGlvX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTQwNi1cbmlvX3VyaW5nL2tidWYuYzo0MDc6c3RhdGljIGlubGluZSBib29sIF9faW9fcHV0X2tidWZfcmluZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL2tidWYuYy00MDgtXHRcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbGVuLCBpbnQgbnIpXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTQyMC1cbmlvX3VyaW5nL2tidWYuYzo0MjE6dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuaW9fdXJpbmcva2J1Zi5jLTQyMi1cdFx0XHQgICAgaW50IGxlbiwgaW50IG5idWZzKVxuLS1cbmlvX3VyaW5nL2tidWYuYy00MzItXG5pb191cmluZy9rYnVmLmM6NDMzOlx0aWYgKCFfX2lvX3B1dF9rYnVmX3JpbmcocmVxLCBibCwgbGVuLCBuYnVmcykpXG5pb191cmluZy9rYnVmLmMtNDM0LVx0XHRyZXQgfD0gSU9SSU5HX0NRRV9GX0JVRl9NT1JFO1xuLS1cbmlvX3VyaW5nL2tidWYuaD04Nz12b2lkIGlvX2tidWZfZHJvcF9sZWdhY3koc3RydWN0IGlvX2tpb2NiICpyZXEpO1xuaW9fdXJpbmcva2J1Zi5oLTg4LVxuaW9fdXJpbmcva2J1Zi5oOjg5OnVuc2lnbmVkIGludCBfX2lvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbmlvX3VyaW5nL2tidWYuaC05MC1cdFx0XHQgICAgaW50IGxlbiwgaW50IG5idWZzKTtcbi0tXG5pb191cmluZy9rYnVmLmg9MTE0PXN0YXRpYyBpbmxpbmUgYm9vbCBpb19rYnVmX3JlY3ljbGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXG4tLVxuaW9fdXJpbmcva2J1Zi5oLTEyNS1cbmlvX3VyaW5nL2tidWYuaDoxMjY6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fcHV0X2tidWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBsZW4sXG5pb191cmluZy9rYnVmLmgtMTI3LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwpXG4tLVxuaW9fdXJpbmcva2J1Zi5oLTEzMC1cdFx0cmV0dXJuIDA7XG5pb191cmluZy9rYnVmLmg6MTMxOlx0cmV0dXJuIF9faW9fcHV0X2tidWZzKHJlcSwgYmwsIGxlbiwgMSk7XG5pb191cmluZy9rYnVmLmgtMTMyLX1cbmlvX3VyaW5nL2tidWYuaC0xMzMtXG5pb191cmluZy9rYnVmLmg6MTM0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IGxlbixcbmlvX3VyaW5nL2tidWYuaC0xMzUtXHRcdFx0XHRcdHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBuYnVmcylcbi0tXG5pb191cmluZy9rYnVmLmgtMTM4LVx0XHRyZXR1cm4gMDtcbmlvX3VyaW5nL2tidWYuaDoxMzk6XHRyZXR1cm4gX19pb19wdXRfa2J1ZnMocmVxLCBibCwgbGVuLCBuYnVmcyk7XG5pb191cmluZy9rYnVmLmgtMTQwLX1cbi0tXG5pb191cmluZy9uZXQuYz00OTE9c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLS1cbmlvX3VyaW5nL25ldC5jLTQ5OS1cdGlmICghKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSkge1xuaW9fdXJpbmcvbmV0LmM6NTAwOlx0XHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHNlbC1cdTAwM2V2YWwsIHNlbC1cdTAwM2VidWZfbGlzdCk7XG5pb191cmluZy9uZXQuYy01MDEtXHRcdGdvdG8gZmluaXNoO1xuLS1cbmlvX3VyaW5nL25ldC5jLTUwMy1cbmlvX3VyaW5nL25ldC5jOjUwNDpcdGNmbGFncyA9IGlvX3B1dF9rYnVmcyhyZXEsIHNlbC1cdTAwM2V2YWwsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHNlbC1cdTAwM2V2YWwpKTtcbmlvX3VyaW5nL25ldC5jLTUwNS1cbi0tXG5pb191cmluZy9uZXQuYz04NTM9c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLS1cbmlvX3VyaW5nL25ldC5jLTg3OS1cbmlvX3VyaW5nL25ldC5jOjg4MDpcdFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIGNvbnN1bWVkLCBzZWwtXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBjb25zdW1lZCkpO1xuaW9fdXJpbmcvbmV0LmMtODgxLVx0XHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxuLS1cbmlvX3VyaW5nL25ldC5jLTkwMS1cdH0gZWxzZSB7XG5pb191cmluZy9uZXQuYzo5MDI6XHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIGNvbnN1bWVkLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuaW9fdXJpbmcvbmV0LmMtOTAzLVx0fVxuLS1cbmlvX3VyaW5nL3J3LmM9NTYyPXZvaWQgaW9fcmVxX3J3X2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuLS1cbmlvX3VyaW5nL3J3LmMtNTY4LVx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgKFJFUV9GX0JVRkZFUl9TRUxFQ1RFRHxSRVFfRl9CVUZGRVJfUklORykpXG5pb191cmluZy9ydy5jOjU2OTpcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuaW9fdXJpbmcvcncuYy01NzAtXG4tLVxuaW9fdXJpbmcvcncuYz02NDA9c3RhdGljIGludCBraW9jYl9kb25lKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzc2l6ZV90IHJldCxcbi0tXG5pb191cmluZy9ydy5jLTY1Ny1cdFx0aWYgKHNlbClcbmlvX3VyaW5nL3J3LmM6NjU4Olx0XHRcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgcmV0LCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuaW9fdXJpbmcvcncuYy02NTktXHRcdGlvX3JlcV9zZXRfcmVzKHJlcSwgZmluYWxfcmV0LCBjZmxhZ3MpO1xuLS1cbmlvX3VyaW5nL3J3LmM9MTAzMj1pbnQgaW9fcmVhZF9tc2hvdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL3J3LmMtMTA2Ny1cdH0gZWxzZSBpZiAoIShyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkpIHtcbmlvX3VyaW5nL3J3LmM6MTA2ODpcdFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCByZXQsIHNlbC5idWZfbGlzdCk7XG5pb191cmluZy9ydy5jLTEwNjktXHR9IGVsc2Uge1xuLS1cbmlvX3VyaW5nL3J3LmMtMTA3NS1cdFx0ICovXG5pb191cmluZy9ydy5jOjEwNzY6XHRcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgcmV0LCBzZWwuYnVmX2xpc3QpO1xuaW9fdXJpbmcvcncuYy0xMDc3LVx0XHRydy1cdTAwM2VsZW4gPSAwOyAvKiBzaW1pbGFybHkgdG8gYWJvdmUsIHJlc2V0IGxlbiB0byAwICovXG4tLVxuaW9fdXJpbmcvcncuYz0xMzE5PWludCBpb19kb19pb3BvbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgZm9yY2Vfbm9uc3Bpbilcbi0tXG5pb191cmluZy9ydy5jLTEzNzUtXHRcdG5yX2V2ZW50cyYjNDM7JiM0Mzs7XG5pb191cmluZy9ydy5jOjEzNzY6XHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuaW9fdXJpbmcvcncuYy0xMzc3LVx0XHRpZiAoIWlvX2lzX3VyaW5nX2NtZChyZXEpKVxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jPTM4Nz1ib29sIGlvX3VyaW5nX21zaG90X2NtZF9wb3N0X2NxZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzk2LVx0aWYgKHNlbC1cdTAwM2V2YWwgXHUwMDNlIDApIHtcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjM5NzpcdFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBzZWwtXHUwMDNldmFsLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzk4LVx0XHRpZiAoaW9fcmVxX3Bvc3RfY3FlKHJlcSwgc2VsLVx1MDAzZXZhbCwgY2ZsYWdzIHwgSU9SSU5HX0NRRV9GX01PUkUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzM0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGFuYWx5c2lzLCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gaW9fdXJpbmcva2J1Zi5jKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Uga2VybmVsIGJ1ZmZlcnMgYXJlIG1hbmFnZWQgd2l0aGluIGBpb191cmluZ2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0d28gZnVuY3Rpb25zOiBgX19pb19wdXRfa2J1Zl9yaW5nYCBhbmQgYF9faW9fcHV0X2tidWZzYC4gSSBzdXNwZWN0IHRoZXNlIGFyZSBjcml0aWNhbCBmb3IgYnVmZmVyIHJlbGVhc2UgYW5kIHJldXNlLCB3aGljaCBpcyBhbHdheXMgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGluIEkvTyBzeXN0ZW1zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgcmluZyBidWZmZXIgaW50ZXJhY3Rpb24gd29ya3MgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgbG9ja2luZyBjb250ZW50aW9uIHBvaW50cyBvciBpbmVmZmljaWVuY2llcyBpbiBgX19pb19wdXRfa2J1ZnNgLiBJ4oCZbSBleHBlY3RpbmcgdGhlc2UgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgbGlmZXRpbWUgb2YgdGhlIGtidWZzIGFuZCB0cmFjayB0aGVpciBhdmFpbGFiaWxpdHkgaW4gdGhlIHN5c3RlbS4gVGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzIGhlcmUsIHNvIGxldCYjMzk7cyBzdGFydCBkaWdnaW5nIGFuZCBzZWUgd2hhdCBvcHRpbWl6YXRpb25zIG9yIHBvdGVudGlhbCBpc3N1ZXMgbWlnaHQgYmUgaGlkaW5nIGluIHRoZXJlLiBHb3R0YSBjaGVjayBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggdGhlIG92ZXJhbGwgc3VibWlzc2lvbiBxdWV1ZSBwcm9jZXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDA1Olx0fVxuIDQwNjpcdFxuIDQwNzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBfX2lvX3B1dF9rYnVmX3Jpbmcoc3RydWN0IGlvX2tpb2NiICpyZXEsXG4gNDA4Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbGVuLCBpbnQgbnIpXG4gNDA5Olx0e1xuIDQxMDpcdFx0Ym9vbCByZXQgPSB0cnVlO1xuIDQxMTpcdFxuIDQxMjpcdFx0aWYgKGJsKVxuIDQxMzpcdFx0XHRyZXQgPSBpb19rYnVmX2NvbW1pdChyZXEsIGJsLCBsZW4sIG5yKTtcbiA0MTQ6XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0JVRl9NT1JFKSlcbiA0MTU6XHRcdFx0cmV0ID0gZmFsc2U7XG4gNDE2Olx0XG4gNDE3Olx0XHRyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+KFJFUV9GX0JVRkZFUl9SSU5HIHwgUkVRX0ZfQlVGX01PUkUpO1xuIDQxODpcdFx0cmV0dXJuIHJldDtcbiA0MTk6XHR9XG4gNDIwOlx0XG4gNDIxOlx0dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuIDQyMjpcdFx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpXG4gNDIzOlx0e1xuIDQyNDpcdFx0dW5zaWduZWQgaW50IHJldDtcbiA0MjU6XHRcbiA0MjY6XHRcdHJldCA9IElPUklOR19DUUVfRl9CVUZGRVIgfCAocmVxLVx1MDAzZWJ1Zl9pbmRleCBcdTAwM2NcdTAwM2MgSU9SSU5HX0NRRV9CVUZGRVJfU0hJRlQpO1xuIDQyNzpcdFxuIDQyODpcdFx0aWYgKHVubGlrZWx5KCEocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9CVUZGRVJfUklORykpKSB7XG4gNDI5Olx0XHRcdGlvX2tidWZfZHJvcF9sZWdhY3kocmVxKTtcbiA0MzA6XHRcdFx0cmV0dXJuIHJldDtcbiA0MzE6XHRcdH1cbiA0MzI6XHRcbiA0MzM6XHRcdGlmICghX19pb19wdXRfa2J1Zl9yaW5nKHJlcSwgYmwsIGxlbiwgbmJ1ZnMpKVxuIDQzNDpcdFx0XHRyZXQgfD0gSU9SSU5HX0NRRV9GX0JVRl9NT1JFO1xuIDQzNTpcdFx0cmV0dXJuIHJldDtcbiA0MzY6XHR9XG4gNDM3Olx0XG4gNDM4Olx0c3RhdGljIGludCBpb19yZW1vdmVfYnVmZmVyc19sZWdhY3koc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gNDM5Olx0XHRcdFx0XHQgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbiA0NDA6XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5idWZzKVxuIDQ0MTpcdHtcbiA0NDI6XHRcdHVuc2lnbmVkIGxvbmcgaSA9IDA7XG4gNDQzOlx0XHRzdHJ1Y3QgaW9fYnVmZmVyICpueHQ7XG4gNDQ0Olx0XG4gNDQ1Olx0XHQvKiBwcm90ZWN0cyBpb19idWZmZXJzX2NhY2hlICovXG4gNDQ2Olx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKTtcbiA0NDc6XHRcdFdBUk5fT05fT05DRShibC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9CVUZfUklORyk7XG4gNDQ4Olx0XG4gNDQ5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYnVmcyBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2YmwtXHUwMDNlYnVmX2xpc3QpOyBpJiM0MzsmIzQzOykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzI2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSBwZXJzcGVjdGl2ZSBvbiBgaW9fa2J1Zl9jb21taXRgOgoKKipNeSBJbnRlcnByZXRhdGlvbiBvZiBgaW9fa2J1Zl9jb21taXRgKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBpb19rYnVmX2NvbW1pdGAsIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGp1bXBzIHRvIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIGtlcm5lbCBmb3IgSS9PIG9wZXJhdGlvbnMsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IGhhbmRsZSBwYWNrZXQgYnVmZmVycy4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBmaW5hbGl6aW5nIG9yICYjMzQ7Y29tbWl0dGluZyYjMzQ7IGRhdGEgaW50byBhbiBgaW9fa2J1ZmAsIGxpa2VseSBtZWFuaW5nIHdlJiMzOTtyZSB0YWtpbmcgZGF0YSB0aGF0JiMzOTtzIGJlZW4gYXNzZW1ibGVkLCBwZXJoYXBzIGZyb20gbXVsdGlwbGUgc291cmNlcywgYW5kIG1ha2luZyBpdCBvZmZpY2lhbGx5IGF2YWlsYWJsZSBmb3IgZnVydGhlciBwcm9jZXNzaW5nLCB0cmFuc21pc3Npb24sIG9yIHN0b3JhZ2UuCgpUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBrZXJuZWwtbGV2ZWwgYnVmZmVyIG1hbmFnZW1lbnQuIEkgZXhwZWN0IGEgZmV3IGNyaXRpY2FsIGFzcGVjdHMgd2lsbCBiZSBpbiBwbGF5IGhlcmUuIEZpcnN0LCBob3cgYXJlIHdlIGhhbmRsaW5nIHRoZSBkYXRhIHBvaW50ZXJzPyBBcmUgd2UgY29uc29saWRhdGluZyBmcmFnbWVudGVkIGJ1ZmZlcnMsIG9yIG1lcmVseSBtYXJraW5nIHRoZSBlbmQgb2YgdGhlIHZhbGlkIGRhdGE/IFNlY29uZCwgZXJyb3IgaGFuZGxpbmcgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50LiBEb2VzIHRoaXMgZnVuY3Rpb24gcmV0dXJuIHN0YXR1cyBjb2RlcyB0byBpbmRpY2F0ZSBzdWNjZXNzIG9yIGZhaWx1cmUsIGFuZCB3aGF0IGFyZSB0aGUgcG9zc2libGUgZmFpbHVyZSBzY2VuYXJpb3MgKGJ1ZmZlciBvdmVyZmxvd3MsIGludmFsaWQgcG9pbnRlcnMsIGV0Yy4pPyBUaGlyZCwgYW55IG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucyBhcmUgZ29pbmcgdG8gYmUga2V5LiBJcyB0aGlzIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHVwIGFueSBhbGxvY2F0ZWQgYnVmZmVycz8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIHJlZmVyZW5jZSBjb3VudGluZz8KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgdG9vLiBJcyB0aGlzIGEgY3JpdGljYWwgcGF0aCBmdW5jdGlvbiB0aGF0IGlzIGdvaW5nIHRvIGJlIGludm9rZWQgZnJlcXVlbnRseSwgZXNwZWNpYWxseSBpbiBoaWdoLXRocm91Z2hwdXQgbmV0d29yayBzY2VuYXJpb3M/IElmIHNvLCBldmVyeSBpbnN0cnVjdGlvbiBjb3VudHMuIEl0JiMzOTtsbCBiZSBpbXBvcnRhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3B0aW1pemF0aW9ucyBpbiBwbGFjZSB0byBtaW5pbWl6ZSBvdmVyaGVhZC4gSSYjMzk7ZCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBpbmxpbmUgYXNzZW1ibHksIGNhcmVmdWwgcG9pbnRlciBhcml0aG1ldGljLCBvciBwZXJoYXBzIGxvY2stZnJlZSB0ZWNobmlxdWVzIGlmIHRoZXJlJiMzOTtzIGFueSBjb25jdXJyZW50IGFjY2VzcyBpbnZvbHZlZC4KCkZpbmFsbHksIHdoYXQmIzM5O3MgdGhlIGJyb2FkZXIgY29udGV4dD8gV2hhdCBpcyB0aGUgY2FsbGluZyBmdW5jdGlvbiBhbmQgd2hhdCBhcmUgdGhlIHN1YnNlcXVlbnQgZnVuY3Rpb24gY2FsbHM/IFVuZGVyc3RhbmRpbmcgdGhlIGJpZ2dlciBwaWN0dXJlIHdpbGwgaGVscCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGlvX2tidWZgIGlzIGFjdHVhbGx5IHVzZWQgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19rYnVmX2NvbW1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9rYnVmLmM9MzY9c3RhdGljIGJvb2wgaW9fa2J1Zl9pbmNfY29tbWl0KHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBsZW4pXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTYyLVxuaW9fdXJpbmcva2J1Zi5jOjYzOmJvb2wgaW9fa2J1Zl9jb21taXQoc3RydWN0IGlvX2tpb2NiICpyZXEsXG5pb191cmluZy9rYnVmLmMtNjQtXHRcdCAgICBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbGVuLCBpbnQgbnIpXG4tLVxuaW9fdXJpbmcva2J1Zi5jPTE5Mz1zdGF0aWMgc3RydWN0IGlvX2JyX3NlbCBpb19yaW5nX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNpemVfdCAqbGVuLFxuLS1cbmlvX3VyaW5nL2tidWYuYy0yMjMtXHRpZiAoaW9fc2hvdWxkX2NvbW1pdChyZXEsIGlzc3VlX2ZsYWdzKSkge1xuaW9fdXJpbmcva2J1Zi5jOjIyNDpcdFx0aWYgKCFpb19rYnVmX2NvbW1pdChyZXEsIHNlbC5idWZfbGlzdCwgKmxlbiwgMSkpXG5pb191cmluZy9rYnVmLmMtMjI1LVx0XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CVUZfTU9SRTtcbi0tXG5pb191cmluZy9rYnVmLmM9MzQ1PWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTM2Ni1cdFx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQlVGRkVSU19DT01NSVQgfCBSRVFfRl9CTF9OT19SRUNZQ0xFO1xuaW9fdXJpbmcva2J1Zi5jOjM2NzpcdFx0XHRpZiAoIWlvX2tidWZfY29tbWl0KHJlcSwgc2VsLVx1MDAzZWJ1Zl9saXN0LCBhcmctXHUwMDNlb3V0X2xlbiwgcmV0KSlcbmlvX3VyaW5nL2tidWYuYy0zNjgtXHRcdFx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQlVGX01PUkU7XG4tLVxuaW9fdXJpbmcva2J1Zi5jPTQwNz1zdGF0aWMgaW5saW5lIGJvb2wgX19pb19wdXRfa2J1Zl9yaW5nKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLS1cbmlvX3VyaW5nL2tidWYuYy00MTItXHRpZiAoYmwpXG5pb191cmluZy9rYnVmLmM6NDEzOlx0XHRyZXQgPSBpb19rYnVmX2NvbW1pdChyZXEsIGJsLCBsZW4sIG5yKTtcbmlvX3VyaW5nL2tidWYuYy00MTQtXHRpZiAocmV0IFx1MDAyNlx1MDAyNiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9CVUZfTU9SRSkpXG4tLVxuaW9fdXJpbmcva2J1Zi5oPTg5PXVuc2lnbmVkIGludCBfX2lvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbmlvX3VyaW5nL2tidWYuaC05MC1cdFx0XHQgICAgaW50IGxlbiwgaW50IG5idWZzKTtcbmlvX3VyaW5nL2tidWYuaDo5MTpib29sIGlvX2tidWZfY29tbWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcva2J1Zi5oLTkyLVx0XHQgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IGxlbiwgaW50IG5yKTtcbi0tXG5pb191cmluZy9uZXQuYz00ODI9c3RhdGljIGludCBpb19uZXRfa2J1Zl9yZWN5bGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNDg2LVx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpXG5pb191cmluZy9uZXQuYzo0ODc6XHRcdGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpO1xuaW9fdXJpbmcvbmV0LmMtNDg4LVx0cmV0dXJuIElPVV9SRVRSWTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBpb19rYnVmX2NvbW1pdCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gYGlvX2tidWZfY29tbWl0YCB3aXRoaW4gYGlvX3VyaW5nL2tidWYuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8mIzM0OyBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgZ2VuZXJpYyBjb21taXQgZnVuY3Rpb247IGl0JiMzOTtzIHNwZWNpZmljIHRvIHRoZSBrZXJuZWwgYnVmZmVyIG1hbmFnZW1lbnQgd2l0aGluIGlvX3VyaW5nLCBhbmQgdGhhdCBoYXMgYWxsIHNvcnRzIG9mIGltcGxpY2F0aW9ucyByZWdhcmRpbmcgcGVyZm9ybWFuY2UsIGNvbmN1cnJlbmN5LCBhbmQgZXJyb3IgaGFuZGxpbmcgdGhhdCBhcmUgY3J1Y2lhbCB0byB1bnBhY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29tbWl0cyBhcmUgYmVpbmcgb3JjaGVzdHJhdGVkLCB3aG8gY2FsbHMgaXQsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIHdvcmtmbG93IGxvb2tzIGxpa2UgYXJvdW5kIHRoaXMgZnVuY3Rpb24uIEFyZSB3ZSB0YWxraW5nIGFib3V0IHB1c2hpbmcgZGF0YSBmcm9tIGEgdXNlci1zcGFjZSBidWZmZXIgaW50byBhIGtlcm5lbCBrYnVmPyBPciBtYXliZSBpdCYjMzk7cyB0aGUgb3Bwb3NpdGU/IFVuZGVyc3RhbmRpbmcgdGhlIGRpcmVjdGlvbiBhbmQgcHVycG9zZSBvZiB0aGUgZGF0YSBtb3ZlbWVudCBpcyBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsIGZvciB0aGUgcmVzdCBvZiBteSBpbnZlc3RpZ2F0aW9uLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyB0aGlzIGZ1bmN0aW9uIHdvcmtzIHdpdGg/IEnigJltIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYW55IEkvTyBzdWJtaXNzaW9uIHF1ZXVlcywgY29tcGxldGlvbiBxdWV1ZXMsIG9yIGFueSBzb3J0IG9mIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBsb2NraW5nLCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBhbmQgd2hhdCB0aGUgc3VjY2Vzcy9mYWlsdXJlIHBhdGhzIGFyZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgaGlnaC1wZXJmb3JtYW5jZSBkZW1hbmRzIG9mIGlvX3VyaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRcbiAgMzY6XHRzdGF0aWMgYm9vbCBpb19rYnVmX2luY19jb21taXQoc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IGxlbilcbiAgMzc6XHR7XG4gIDM4Olx0XHQvKiBObyBkYXRhIGNvbnN1bWVkLCByZXR1cm4gZmFsc2UgZWFybHkgdG8gYXZvaWQgY29uc3VtaW5nIHRoZSBidWZmZXIgKi9cbiAgMzk6XHRcdGlmICghbGVuKVxuICA0MDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gIDQxOlx0XG4gIDQyOlx0XHR3aGlsZSAobGVuKSB7XG4gIDQzOlx0XHRcdHN0cnVjdCBpb191cmluZ19idWYgKmJ1ZjtcbiAgNDQ6XHRcdFx0dTMyIGJ1Zl9sZW4sIHRoaXNfbGVuO1xuICA0NTpcdFxuICA0NjpcdFx0XHRidWYgPSBpb19yaW5nX2hlYWRfdG9fYnVmKGJsLVx1MDAzZWJ1Zl9yaW5nLCBibC1cdTAwM2VoZWFkLCBibC1cdTAwM2VtYXNrKTtcbiAgNDc6XHRcdFx0YnVmX2xlbiA9IFJFQURfT05DRShidWYtXHUwMDNlbGVuKTtcbiAgNDg6XHRcdFx0dGhpc19sZW4gPSBtaW5fdCh1MzIsIGxlbiwgYnVmX2xlbik7XG4gIDQ5Olx0XHRcdGJ1Zl9sZW4gLT0gdGhpc19sZW47XG4gIDUwOlx0XHRcdC8qIFN0b3AgbG9vcGluZyBmb3IgaW52YWxpZCBidWZmZXIgbGVuZ3RoIG9mIDAgKi9cbiAgNTE6XHRcdFx0aWYgKGJ1Zl9sZW4gXHUwMDNlIGJsLVx1MDAzZW1pbl9sZWZ0X3N1Yl9vbmUgfHwgIXRoaXNfbGVuKSB7XG4gIDUyOlx0XHRcdFx0V1JJVEVfT05DRShidWYtXHUwMDNlYWRkciwgUkVBRF9PTkNFKGJ1Zi1cdTAwM2VhZGRyKSAmIzQzOyB0aGlzX2xlbik7XG4gIDUzOlx0XHRcdFx0V1JJVEVfT05DRShidWYtXHUwMDNlbGVuLCBidWZfbGVuKTtcbiAgNTQ6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gIDU1Olx0XHRcdH1cbiAgNTY6XHRcdFx0V1JJVEVfT05DRShidWYtXHUwMDNlbGVuLCAwKTtcbiAgNTc6XHRcdFx0YmwtXHUwMDNlaGVhZCYjNDM7JiM0Mzs7XG4gIDU4Olx0XHRcdGxlbiAtPSB0aGlzX2xlbjtcbiAgNTk6XHRcdH1cbiAgNjA6XHRcdHJldHVybiB0cnVlO1xuICA2MTpcdH1cbiAgNjI6XHRcbiAgNjM6XHRib29sIGlvX2tidWZfY29tbWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLFxuICA2NDpcdFx0XHQgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IGxlbiwgaW50IG5yKVxuICA2NTpcdHtcbiAgNjY6XHRcdGlmICh1bmxpa2VseSghKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpKSlcbiAgNjc6XHRcdFx0cmV0dXJuIHRydWU7XG4gIDY4Olx0XG4gIDY5Olx0XHRyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UkVRX0ZfQlVGRkVSU19DT01NSVQ7XG4gIDcwOlx0XG4gIDcxOlx0XHRpZiAodW5saWtlbHkobGVuIFx1MDAzYyAwKSlcbiAgNzI6XHRcdFx0cmV0dXJuIHRydWU7XG4gIDczOlx0XHRpZiAoYmwtXHUwMDNlZmxhZ3MgXHUwMDI2IElPQkxfSU5DKVxuICA3NDpcdFx0XHRyZXR1cm4gaW9fa2J1Zl9pbmNfY29tbWl0KGJsLCBsZW4pO1xuICA3NTpcdFx0YmwtXHUwMDNlaGVhZCAmIzQzOz0gbnI7XG4gIDc2Olx0XHRyZXR1cm4gdHJ1ZTtcbiAgNzc6XHR9XG4gIDc4Olx0XG4gIDc5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmlvX2J1ZmZlcl9nZXRfbGlzdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbiAgODA6XHRcdFx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBiZ2lkKVxuICA4MTpcdHtcbiAgODI6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2Y3R4LVx1MDAzZXVyaW5nX2xvY2spO1xuICA4MzpcdFxuICA4NDpcdFx0cmV0dXJuIHhhX2xvYWQoXHUwMDI2Y3R4LVx1MDAzZWlvX2JsX3hhLCBiZ2lkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQnVmZmVyIE92ZXJmbG93IFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGlvX3JlY3ZgIGFuZCBgaW9fcmVjdm1zZ2AsIGlmIHdlJiMzOTtyZSB1c2luZyBidWZmZXIgcmluZyBzZWxlY3Rpb24sIHBhcnRpY3VsYXJseSB3aXRoIHRob3NlIGluY3JlbWVudGFsIGJ1ZmZlcnMgb3IgYnVuZGxlcywgdGhlIHZhcmlhYmxlIGBsZW5gIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlciBhdmFpbGFibGUuIEJ1dCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IHdoZW4gYE1TR19UUlVOQ2AgaXMgdXNlZCwgYHJlY3Ztc2dgIG9yIGByZWN2YCBnaXZlcyBtZSBiYWNrIHRoZSAqdG90YWwqIHBhY2tldCBzaXplLCB3aGljaCBjb3VsZCBiZSBiaWdnZXIgdGhhbiBgbGVuYC4KCk5vdywgdGhlIGNvZGUgd2FzIGNhbGxpbmcgYGlvX3JlY3ZfZmluaXNoYCB3aXRoIGBzZWwtJmd0O3ZhbGAsIHdoaWNoIGlzIHRoZSByZXR1cm4gdmFsdWUsIGByZXRgLiBBbmQgYHJldGAgaXMgdGhhdCB0cnVuY2F0ZWQgcGFja2V0IHNpemUg4oCTIHRoZSBsYXJnZXIgdmFsdWUhIFNvLCBgaW9fcHV0X2tidWZgIG9yIGBpb19wdXRfa2J1ZnNgIHdhcyBnZXR0aW5nIGByZXRgIGFzIGl0cyBgbGVuYCBhcmd1bWVudC4gVGhhdCBtZWFucyBpdCB3YXMgcG90ZW50aWFsbHkgY29tbWl0dGluZyBvciBjYWxjdWxhdGluZyB0aGUgYnVmZmVyIGNvdW50IGJhc2VkIG9uIGEgbGVuZ3RoICpsYXJnZXIqIHRoYW4gd2hhdCB3YXMgYWN0dWFsbHkgaW4gdGhlIHJpbmcgYnVmZmVyISBUaGF0JiMzOTtzIGEgY2xhc3NpYyBvdmVyZmxvdyBpbiB0aGUgbWFraW5nLgoKU3BlY2lmaWNhbGx5LCBpdCB3YXMgZG9pbmc6Ci0gYGNvbnN1bWVkID0gbWluKHJldCwgbGVuKWAuIElmIGByZXRgIHdhcyBiaWdnZXIgdGhhbiBgbGVuYCwgYGNvbnN1bWVkYCBnZXRzIHNldCB0byBgbGVuYCwgd2hpY2ggaXMgZ29vZC4KLSBUaGVuLCBgY29uc3VtZWRgIGlzIHBhc3NlZCB0byBgaW9fcmVjdl9maW5pc2hgIC0mZ3Q7IGBpb19wdXRfa2J1ZmAgLyBgaW9fcHV0X2tidWZzYC4KLSBBbmQgdGhlbiBgaW9fYnVuZGxlX25idWZzKGttc2csIGNvbnN1bWVkKWAgY2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgYmFzZWQgb24gYGNvbnN1bWVkYC4KCkhtbSwgdGhpcyBgY29uc3VtZWRgIGxvZ2ljIGxvb2tzIGxpa2UgaXQgd2FzIGF0dGVtcHRpbmcgdG8gY29ycmVjdCB0aGlzLCBidXQuLi4gaXQmIzM5O3MgYSBiaXQgb2YgYSBjb2RlIHNtZWxsLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIGBpb19idW5kbGVfbmJ1ZnNgIHRvIGNvbmZpcm0gdGhlIGZpeCwgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBvc3NpYmxlIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fYnVuZGxlX25idWZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTQzNz1zdGF0aWMgdm9pZCBpb19yZXFfbXNnX2NsZWFudXAoc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNDUwLSAqL1xuaW9fdXJpbmcvbmV0LmM6NDUxOnN0YXRpYyBpbnQgaW9fYnVuZGxlX25idWZzKHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCByZXQpXG5pb191cmluZy9uZXQuYy00NTIte1xuLS1cbmlvX3VyaW5nL25ldC5jPTQ4Mj1zdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbi0tXG5pb191cmluZy9uZXQuYy00ODYtXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9CVUZGRVJTX0NPTU1JVClcbmlvX3VyaW5nL25ldC5jOjQ4NzpcdFx0aW9fa2J1Zl9jb21taXQocmVxLCBibCwgbGVuLCBpb19idW5kbGVfbmJ1ZnMoa21zZywgbGVuKSk7XG5pb191cmluZy9uZXQuYy00ODgtXHRyZXR1cm4gSU9VX1JFVFJZO1xuLS1cbmlvX3VyaW5nL25ldC5jPTQ5MT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNTAzLVxuaW9fdXJpbmcvbmV0LmM6NTA0Olx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVx1MDAzZXZhbCkpO1xuaW9fdXJpbmcvbmV0LmMtNTA1LVxuLS1cbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtODc5LVxuaW9fdXJpbmcvbmV0LmM6ODgwOlx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgY29uc3VtZWQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIGNvbnN1bWVkKSk7XG5pb191cmluZy9uZXQuYy04ODEtXHRcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTttIHRoaW5raW5nLCBiYXNlZCBvbiB0aGUgcHJvbXB0OgoKKipBbmFseXppbmcgdGhlIGBpb19idW5kbGVfbmJ1ZnNgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgaW9fYnVuZGxlX25idWZzYCBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZ2VhcmVkIHRvd2FyZHMgdW5kZXJzdGFuZGluZyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIEkmIzM5O20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3Iga2V5IGFzcGVjdHM6CgoqICAgKipXaGF0IGlzIGl0IHN1cHBvc2VkIHRvIGRvPyoqIFdoYXQgaXMgdGhlIG92ZXJhcmNoaW5nIG9iamVjdGl2ZSBvZiB0aGlzIGZ1bmN0aW9uIG9yIG1vZHVsZT8gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIGJ1ZmZlciBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gSS9PIG9wZXJhdGlvbnMsIHByb2JhYmx5IGludm9sdmluZyBub24tYmxvY2tpbmcgKE5CKSBmdW5jdGlvbmFsaXR5LiBUaGUgJiMzOTtidW5kbGUmIzM5OyBhc3BlY3Qgc3VnZ2VzdHMgaXQmIzM5O3MgaGFuZGxpbmcgbXVsdGlwbGUgYnVmZmVycyBvciBhIGdyb3VwIG9mIHJlbGF0ZWQgYnVmZmVycy4KKiAgICoqV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXM/KiogV2hhdCBhcmUgdGhlIG1ham9yIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgYW5kIGhvdyBkbyB0aGV5IHdvcmsgdG9nZXRoZXI/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoZXJlIGNvdWxkIGJlIHNvbWUga2luZCBvZiBkZXNjcmlwdG9yIG9yIGNvbnRyb2wgc3RydWN0dXJlLiBJIHdpbGwgYmUgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSB0eXBlcyBhbmQgbWVhbmluZ3Mgb2YgdGhlIGFyZ3VtZW50cyBwYXNzZWQsIGFuZCBsb2NhbCB2YXJpYWJsZXMgdXNlZC4KKiAgICoqV2hhdCYjMzk7cyB0aGUgb3ZlcmFsbCB3b3JrZmxvdz8qKiBJIHdhbnQgdG8gdHJhY2UgdGhlIGZsb3csIGlkZW50aWZ5aW5nIHRoZSBjb250cm9sIGZsb3c6IHN0YXJ0IHRvIGZpbmlzaC4KKiAgICoqQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgY29uY3VycmVuY3kgY29uY2VybnM/KiogU2luY2UgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBJL08sIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIGlzc3VlcywgY3JpdGljYWwgc2VjdGlvbnMsIG9yIGluZWZmaWNpZW50IGJ1ZmZlciBoYW5kbGluZyBzdHJhdGVnaWVzLgoqICAgKipXaGF0IGVycm9yIGhhbmRsaW5nIGlzIHByZXNlbnQ/KiogSG93IGRvZXMgaXQgZGVhbCB3aXRoIGZhaWx1cmVzPyBJJiMzOTttIGxvb2tpbmcgZm9yIHJvYnVzdCBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZy4KCkkmIzM5O20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzdGFydCBkaXNzZWN0aW5nIGVhY2ggcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGVhY2ggb2YgdGhlIHBvaW50cyBhYm92ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9uZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDQ1Olx0ICogQSBidW5kbGUgY291bGQgYmUgdXNpbmcgYSBzaW5nbGUgSVRFUl9VQlVGIGlmIHRoYXQmIzM5O3MgYWxsIHdlIG1hcHBlZCwgb3IgaXRcbiA0NDY6XHQgKiBjb3VsZCBiZSB1c2luZyBhbiBJVEVSX0lPVkVDLiBJZiB0aGUgbGF0dGVyLCB0aGVuIGlmIHdlIGNvbnN1bWVkIGFsbCBvZlxuIDQ0NzpcdCAqIHRoZSBzZWdtZW50cywgdGhlbiBpdCYjMzk7cyBhIHRyaXZpYWwgcXVlc3Rpb250IG8gYW5zd2VyLiBJZiB3ZSBoYXZlIHJlc2lkdWFsXG4gNDQ4Olx0ICogZGF0YSBpbiB0aGUgaXRlciwgdGhlbiBsb29wIHRoZSBzZWdtZW50cyB0byBmaWd1cmUgb3V0IGhvdyBtdWNoIHdlXG4gNDQ5Olx0ICogdHJhbnNmZXJyZWQuXG4gNDUwOlx0ICovXG4gNDUxOlx0c3RhdGljIGludCBpb19idW5kbGVfbmJ1ZnMoc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IHJldClcbiA0NTI6XHR7XG4gNDUzOlx0XHRzdHJ1Y3QgaW92ZWMgKmlvdjtcbiA0NTQ6XHRcdGludCBuYnVmcztcbiA0NTU6XHRcbiA0NTY6XHRcdC8qIG5vIGRhdGEgaXMgYWx3YXlzIHplcm8gc2VnbWVudHMsIGFuZCBhIHVidWYgaXMgYWx3YXlzIDEgc2VnbWVudCAqL1xuIDQ1NzpcdFx0aWYgKHJldCBcdTAwM2M9IDApXG4gNDU4Olx0XHRcdHJldHVybiAwO1xuIDQ1OTpcdFx0aWYgKGl0ZXJfaXNfdWJ1ZihcdTAwMjZrbXNnLVx1MDAzZW1zZy5tc2dfaXRlcikpXG4gNDYwOlx0XHRcdHJldHVybiAxO1xuIDQ2MTpcdFxuIDQ2MjpcdFx0aW92ID0ga21zZy1cdTAwM2V2ZWMuaW92ZWM7XG4gNDYzOlx0XHRpZiAoIWlvdilcbiA0NjQ6XHRcdFx0aW92ID0gXHUwMDI2a21zZy1cdTAwM2VmYXN0X2lvdjtcbiA0NjU6XHRcbiA0NjY6XHRcdC8qIGlmIGFsbCBkYXRhIHdhcyB0cmFuc2ZlcnJlZCwgaXQmIzM5O3MgYmFzaWMgcG9pbnRlciBtYXRoICovXG4gNDY3Olx0XHRpZiAoIWlvdl9pdGVyX2NvdW50KFx1MDAyNmttc2ctXHUwMDNlbXNnLm1zZ19pdGVyKSlcbiA0Njg6XHRcdFx0cmV0dXJuIGl0ZXJfaW92KFx1MDAyNmttc2ctXHUwMDNlbXNnLm1zZ19pdGVyKSAtIGlvdjtcbiA0Njk6XHRcbiA0NzA6XHRcdC8qIHNob3J0IHRyYW5zZmVyLCBjb3VudCBzZWdtZW50cyAqL1xuIDQ3MTpcdFx0bmJ1ZnMgPSAwO1xuIDQ3MjpcdFx0ZG8ge1xuIDQ3MzpcdFx0XHRpbnQgdGhpc19sZW4gPSBtaW5fdChpbnQsIGlvdltuYnVmc10uaW92X2xlbiwgcmV0KTtcbiA0NzQ6XHRcbiA0NzU6XHRcdFx0bmJ1ZnMmIzQzOyYjNDM7O1xuIDQ3NjpcdFx0XHRyZXQgLT0gdGhpc19sZW47XG4gNDc3Olx0XHR9IHdoaWxlIChyZXQpO1xuIDQ3ODpcdFxuIDQ3OTpcdFx0cmV0dXJuIG5idWZzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc0NwoJCQkJCQkJb3V0cHV0OiAyMDYKCQkJCQkJCXRob3VnaHRzOiAxNDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIERldGVjdGVkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgaXNzdWVzIGluIGBpb19idW5kbGVfbmJ1ZnNgIGlmIHRoZSBgcmV0YCB2YWx1ZSwgdGhlIHJlc3VsdCBvZiBhIHJlY2VpdmUgb3BlcmF0aW9uLCBleGNlZWRlZCB0aGUgYnVmZmVyIGxlbmd0aC4gU3BlY2lmaWNhbGx5LCB0aGUgbG9vcCBjb3VsZCBwb3RlbnRpYWxseSBhY2Nlc3MgbWVtb3J5IGJleW9uZCB0aGUgYGlvdmAgYXJyYXkgYm91bmRzLCBvciBjYXVzZSBpc3N1ZXMgd2l0aCBidWZmZXIgcmluZyBhZHZhbmNlbWVudC4gVGhlc2UgYXJlIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyBwcm9ibGVtcyB0aGF0IHNob3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc2ltcGxlIGFzc2VydGlvbnMuCgpOb3csIGxldCYjMzk7cyBzeXN0ZW1hdGljYWxseSBnbyB0aHJvdWdoIHRoZSBLTVNBTiBxdWVzdGlvbnMuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFdlIG5lZWQgdG8gYmUgY29uZmlkZW50IHRoYXQgbm90aGluZyB1bmluaXRpYWxpemVkIGlzIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBlaXRoZXIgdGhyb3VnaCBkaXJlY3QgY29waWVzIG9yIGluZGlyZWN0bHkgdGhyb3VnaCBjYWxjdWxhdGlvbnMuCgpJJiMzOTt2ZSBleGFtaW5lZCB0aGUgY29kZSBwYXRocyBpbnZvbHZlZCwgZm9jdXNpbmcgb24gYGlvX3JlY3ZfZmluaXNoYCwgYGlvX3JlY3Ztc2dgIGFuZCBgaW9fcmVjdmAuIEluIGBpb19yZWN2X2ZpbmlzaGAsIHRoZSB2YWx1ZXMgZ29pbmcgdG8gdGhlIGNvbXBsZXRpb24gcXVldWUgZW50cnkgYXJlIHRoZSByZXR1cm4gY29kZSAoYHNlbC0mZ3Q7dmFsYCkgYW5kIGZsYWdzIChgY2ZsYWdzYCksIHdpdGggdGhlIG51bWJlciBvZiBieXRlcyBgY29uc3VtZWRgLCB3aGljaCBpcyBhbHdheXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFuZCBjYXBwZWQsIGJhc2VkIG9uIGByZXRgIGFuZCBgbGVuYC4KCkluIGBpb19yZWN2bXNnYCwgdGhlIHJlbGV2YW50IHZhcmlhYmxlcywgYGxlbmAgYW5kIGBjb25zdW1lZGAsIGFyZSBhbHdheXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZWl0aGVyIGRpcmVjdGx5IGZyb20gYHNyLSZndDtsZW5gIG9yIGZyb20gdGhlIHJlc3VsdHMgb2YgYGlvX2J1ZmZlcl9zZWxlY3RgIGFuZCBpdHMgc3Vic2lkaWFyeSwgYGlvX3JlY3ZfYnVmX3NlbGVjdGAuIGBpb19yZWN2X2J1Zl9zZWxlY3RgIGFsc28gaW5pdGlhbGl6ZXMgaXRzIGxvY2FsIGBsZW5gIHZhcmlhYmxlIGJhc2VkIG9uIHNldmVyYWwgZmFjdG9ycywgYWxsIG9mIHdoaWNoIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBhcyB3ZWxsLiBTaW1pbGFybHksIGluIGBpb19yZWN2YCwgZXZlcnl0aGluZyBzZWVtcyB3ZWxsIGluaXRpYWxpemVkLgoKUmVnYXJkaW5nIHBvdGVudGlhbCBpbmZvIGxlYWtzIHZpYSBuZXR3b3JrIHJlY2VpdmUsIHRoZSBuZXQgbGF5ZXIgaXMgZmlsbGluZyB0aGUgdXNlciBidWZmZXIgZGlyZWN0bHksIGFuZCBgTVNHX1RSVU5DYCBpcyBoYW5kbGVkIGNvcnJlY3RseS4gYE1TR19UUlVOQ2AgbWVhbnMgdGhhdCB0aGUgdXNlciBpcyByZXF1ZXN0aW5nIHRoZSB0cnVuY2F0ZWQgcGFja2V0IGxlbmd0aCBpbiB0aGUgQ1FFIHJlc3VsdCwgd2hpY2ggaXMgd2hhdCB0aGV5IGdldC4gVGhlIG5ldCBsYXllciBoYXMgaGFuZGxlZCB0aGUgYnVmZmVyIHNpemUgYW5kIHRydW5jYXRpb24gY29ycmVjdGx5LgoKVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0LCBvciBwYWRkaW5nIGxlYWtzIGluIHRoZXNlIGZ1bmN0aW9ucy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuCgpUaGUgcGF0Y2ggaXRzZWxmIGFwcGVhcnMgdG8gYWRkcmVzcyBhbiBpc3N1ZSB3aGVyZSBidWZmZXIgYWNjb3VudGluZyAoc3BlY2lmaWNhbGx5LCBob3cgbWFueSBieXRlcyBoYXZlIGJlZW4gcmVjZWl2ZWQgaW4gdGhlIGJ1ZmZlciByaW5nKSBjb3VsZCBvdmVyc2hvb3QgdGhlIGFjdHVhbCBidWZmZXIgbGVuZ3RoIGlmIGBNU0dfVFJVTkNgIHdhcyByZXR1cm5lZC4gUHJldmlvdXNseSwgdGhlIGNvZGUgdXNlZCB0aGUgcmF3IGByZXRgIHZhbHVlICh3aGljaCBjb3VsZCBiZSBsYXJnZXIgdGhhbiB0aGUgYnVmZmVyIHNpemUgYGxlbmApIGluc3RlYWQgb2YgYGxlbmAgZm9yIGJ1ZmZlciByaW5nIG1hbmFnZW1lbnQgKGluIGBpb19wdXRfa2J1ZmAgLyBgaW9fcHV0X2tidWZzYCkuIFRoaXMgbGVkIHRvIG91dC1vZi1ib3VuZHMgY29uc3VtcHRpb24gb2YgcmluZyBidWZmZXIgZW50cmllcyBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBgaW9fYnVuZGxlX25idWZzYC4gVGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGlzIGxlbmd0aCBpcyBjb3JyZWN0bHkgYm91bmRlZCBieSB0aGUgYnVmZmVyIHNpemUsIHByZXZlbnRpbmcgc3VjaCBlcnJvcnMuIFRoaXMgaXMgYSBidWZmZXIgbWFuYWdlbWVudCBhbmQgYm91bmRzIGlzc3VlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCBLQVNBTiBhbmQgYXNzZXJ0aW9ucyBhcmUgZGVzaWduZWQgdG8gY2F0Y2gsIGFuZCBub3QgYW4gaXNzdWUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLgoKSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQ6IG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9uLCBubyBwYWRkaW5nIGxlYWtzLCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLgoKSSYjMzk7bSBjb25maWRlbnQgd2UgY2FuIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuIEl0JiMzOTtzIGEgYnVmZmVyIG1hbmFnZW1lbnQgcHJvYmxlbSwgbm90IGEgS01TQU4gaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgbGVuZ3RoIGFjY291bnRpbmcgaW4gaW9fdXJpbmcmIzM5O3MgcmVjdiBhbmQgcmVjdm1zZyBwYXRocyB3aGVuIE1TR19UUlVOQyBpcyB1c2VkLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSAmIzM5O2NvbnN1bWVkJiMzOTsgdmFyaWFibGUgdG8gZW5zdXJlIHRoYXQgYnVmZmVyIHJpbmcgY29tbWl0dGluZyBhbmQgYnVuZGxlIGJ1ZmZlciBjb3VudGluZyAoaW9fYnVuZGxlX25idWZzKSBvbmx5IGNvbnN1bWUgdXAgdG8gdGhlIGFjdHVhbCBidWZmZXIgY2FwYWNpdHkgKCYjMzk7bGVuJiMzOTspIHJhdGhlciB0aGFuIHRoZSB0cnVuY2F0ZWQgdG90YWwgcGFja2V0IGxlbmd0aCAoJiMzOTtyZXQmIzM5OykuXG5cbkFsbCBuZXcgYW5kIG1vZGlmaWVkIHZhcmlhYmxlcyAoJiMzOTtsZW4mIzM5OywgJiMzOTtjb25zdW1lZCYjMzk7KSBhcmUgc3RyaWN0bHkgaW5pdGlhbGl6ZWQgYW5kIGFzc2lnbmVkIGJlZm9yZSB1c2UuIFRoZSBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgbGVhayB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXJzcGFjZS4gQW55IHJpc2tzIHJlbGF0ZWQgdG8gYnVmZmVyIG92ZXItY29uc3VtcHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpdGVyIGluZGV4aW5nIGluIGlvX2J1bmRsZV9uYnVmcyBmYWxsIHVuZGVyIGJvdW5kcy1jaGVja2luZyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgbGVuZ3RoIGFjY291bnRpbmcgaW4gaW9fdXJpbmcmIzM5O3MgcmVjdiBhbmQgcmVjdm1zZyBwYXRocyB3aGVuIE1TR19UUlVOQyBpcyB1c2VkLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSAmIzM5O2NvbnN1bWVkJiMzOTsgdmFyaWFibGUgdG8gZW5zdXJlIHRoYXQgYnVmZmVyIHJpbmcgY29tbWl0dGluZyBhbmQgYnVuZGxlIGJ1ZmZlciBjb3VudGluZyAoaW9fYnVuZGxlX25idWZzKSBvbmx5IGNvbnN1bWUgdXAgdG8gdGhlIGFjdHVhbCBidWZmZXIgY2FwYWNpdHkgKCYjMzk7bGVuJiMzOTspIHJhdGhlciB0aGFuIHRoZSB0cnVuY2F0ZWQgdG90YWwgcGFja2V0IGxlbmd0aCAoJiMzOTtyZXQmIzM5OykuXG5cbkFsbCBuZXcgYW5kIG1vZGlmaWVkIHZhcmlhYmxlcyAoJiMzOTtsZW4mIzM5OywgJiMzOTtjb25zdW1lZCYjMzk7KSBhcmUgc3RyaWN0bHkgaW5pdGlhbGl6ZWQgYW5kIGFzc2lnbmVkIGJlZm9yZSB1c2UuIFRoZSBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgbGVhayB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXJzcGFjZS4gQW55IHJpc2tzIHJlbGF0ZWQgdG8gYnVmZmVyIG92ZXItY29uc3VtcHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpdGVyIGluZGV4aW5nIGluIGlvX2J1bmRsZV9uYnVmcyBmYWxsIHVuZGVyIGJvdW5kcy1jaGVja2luZyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjc6MDkuNjQzNzk0NDcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA5OTcwNTU2NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX3JlY3Ztc2dcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgbGVuZ3RoIGFjY291bnRpbmcgaW4gaW9fdXJpbmcncyByZWN2IGFuZCByZWN2bXNnIHBhdGhzIHdoZW4gTVNHX1RSVU5DIGlzIHVzZWQuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhICdjb25zdW1lZCcgdmFyaWFibGUgdG8gZW5zdXJlIHRoYXQgYnVmZmVyIHJpbmcgY29tbWl0dGluZyBhbmQgYnVuZGxlIGJ1ZmZlciBjb3VudGluZyAoaW9fYnVuZGxlX25idWZzKSBvbmx5IGNvbnN1bWUgdXAgdG8gdGhlIGFjdHVhbCBidWZmZXIgY2FwYWNpdHkgKCdsZW4nKSByYXRoZXIgdGhhbiB0aGUgdHJ1bmNhdGVkIHRvdGFsIHBhY2tldCBsZW5ndGggKCdyZXQnKS5cXG5cXG5BbGwgbmV3IGFuZCBtb2RpZmllZCB2YXJpYWJsZXMgKCdsZW4nLCAnY29uc3VtZWQnKSBhcmUgc3RyaWN0bHkgaW5pdGlhbGl6ZWQgYW5kIGFzc2lnbmVkIGJlZm9yZSB1c2UuIFRoZSBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgbGVhayB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXJzcGFjZS4gQW55IHJpc2tzIHJlbGF0ZWQgdG8gYnVmZmVyIG92ZXItY29uc3VtcHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpdGVyIGluZGV4aW5nIGluIGlvX2J1bmRsZV9uYnVmcyBmYWxsIHVuZGVyIGJvdW5kcy1jaGVja2luZyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpb191cmluZyByZWNlaXZlIGhhbmRsaW5nIChpb19yZWN2LCBpb19yZWN2bXNnLCBpb19yZWN2X2J1Zl9zZWxlY3QsIGlvX3JlY3ZfZmluaXNoKSB0byBwcm9wZXJseSB0cmFjayBhbmQgY2FwIGNvbnN1bWVkIGJ1ZmZlciBsZW5ndGggd2hlbiBNU0dfVFJVTkMgaXMgdXNlZCBvciBidWZmZXIgc2l6ZXMgZGlmZmVyIGZyb20gcmV0dXJuZWQgcGFja2V0IGxlbmd0aHMuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIHZpYSBzdGFuZGFyZCBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjA5LjY0Mzc5OTM3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkyNjA1NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjNjZjZjZmI2MWM4ODdiY2UwMzExYmRlMGFhZmE3YTNjZjZiODZmOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDIzOjI3OjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL25ldC5jIGIvaW9fdXJpbmcvbmV0LmNcXG5pbmRleCBmYmU3MTlkODZjNDYzLi5mODExMGRjOWY4NjA2IDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL25ldC5jXFxuKysrIGIvaW9fdXJpbmcvbmV0LmNcXG5AQCAtODUzLDcgKzg1Myw3IEBAIGludCBpb19yZWN2bXNnX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG4gc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCBib29sIG1zaG90X2ZpbmlzaGVkLFxcbi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxcbitcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBzaXplX3QgY29uc3VtZWQpXFxuIHtcXG4gXFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcXG4gXFx0dW5zaWduZWQgaW50IGNmbGFncyA9IDA7XFxuQEAgLTg3Nyw3ICs4NzcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuIFxcdGlmIChzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XFxuIFxcdFxcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cXHUwMDNldmFsIC0gc3ItXFx1MDAzZWRvbmVfaW87XFxuIFxcbi1cXHRcXHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCB0aGlzX3JldCkpO1xcbitcXHRcXHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgY29uc3VtZWQsIHNlbC1cXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBjb25zdW1lZCkpO1xcbiBcXHRcXHRpZiAoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXFxuIFxcdFxcdFxcdGNmbGFncyA9IHJlcS1cXHUwMDNlY3FlLmZsYWdzIHwgKGNmbGFncyBcXHUwMDI2IENRRV9GX01BU0spO1xcbiBcXHRcXHRpZiAoc3ItXFx1MDAzZW1zaG90X2xlbiBcXHUwMDI2XFx1MDAyNiBzZWwtXFx1MDAzZXZhbCBcXHUwMDNlPSBzci1cXHUwMDNlbXNob3RfbGVuKVxcbkBAIC04OTksNyArODk5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QpO1xcbitcXHRcXHRjZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBjb25zdW1lZCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuQEAgLTEwMjcsNiArMTAyNyw3IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIFxcdGludCByZXQsIG1pbl9yZXQgPSAwO1xcbiBcXHRib29sIGZvcmNlX25vbmJsb2NrID0gaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xcbiBcXHRib29sIG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcXG4rXFx0c2l6ZV90IGxlbiwgY29uc3VtZWQgPSAwO1xcbiBcXG4gXFx0c29jayA9IHNvY2tfZnJvbV9maWxlKHJlcS1cXHUwMDNlZmlsZSk7XFxuIFxcdGlmICh1bmxpa2VseSghc29jaykpXFxuQEAgLTEwNDIsOSArMTA0Myw4IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIFxcbiByZXRyeV9tdWx0aXNob3Q6XFxuIFxcdHNlbC5idWZfbGlzdCA9IE5VTEw7XFxuK1xcdGxlbiA9IHNyLVxcdTAwM2VsZW47XFxuIFxcdGlmIChpb19kb19idWZmZXJfc2VsZWN0KHJlcSkpIHtcXG4tXFx0XFx0c2l6ZV90IGxlbiA9IHNyLVxcdTAwM2VsZW47XFxuLVxcbiBcXHRcXHRzZWwgPSBpb19idWZmZXJfc2VsZWN0KHJlcSwgXFx1MDAyNmxlbiwgc3ItXFx1MDAzZWJ1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpO1xcbiBcXHRcXHRpZiAoIXNlbC5hZGRyKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuQEAgLTEwNjUsNiArMTA2NSw3IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIFxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQVBPTExfTVVMVElTSE9UKSB7XFxuIFxcdFxcdHJldCA9IGlvX3JlY3Ztc2dfbXVsdGlzaG90KHNvY2ssIHNyLCBrbXNnLCBmbGFncyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNm1zaG90X2ZpbmlzaGVkKTtcXG4rXFx0XFx0Y29uc3VtZWQgPSByZXQ7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qIGRpc2FibGUgcGFydGlhbCByZXRyeSBmb3IgcmVjdm1zZyB3aXRoIGNtc2cgYXR0YWNoZWQgKi9cXG4gXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTVNHX1dBSVRBTEwgXFx1MDAyNlxcdTAwMjYgIWttc2ctXFx1MDAzZW1zZy5tc2dfY29udHJvbGxlbilcXG5AQCAtMTA3Miw2ICsxMDczLDE1IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIFxcbiBcXHRcXHRyZXQgPSBfX3N5c19yZWN2bXNnX3NvY2soc29jaywgXFx1MDAyNmttc2ctXFx1MDAzZW1zZywgc3ItXFx1MDAzZXVtc2csXFxuIFxcdFxcdFxcdFxcdFxcdCBrbXNnLVxcdTAwM2V1YWRkciwgZmxhZ3MpO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBXaXRoIE1TR19UUlVOQywgdGhlIG5ldCBsYXllciB3aWxsIHJldHVybiB0aGUgZnVsbCBzaXplIG9mXFxuK1xcdFxcdCAqIHRoZSBwYWNrZXQsIGV2ZW4gaWYgd2Ugb25seSBmaWxsZWQgcGFydCBvZiBpdCBpbiB0aGUgYnVmZmVycy5cXG4rXFx0XFx0ICogQWRqdXN0IHRoZSByZXR1cm5lZCBzaXplIHRvIGNvbnN1bWUgb25seSB0aGUgcmVhbCBwYXJ0IG9mIHRoZVxcbitcXHRcXHQgKiBidWZmZXIuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjb25zdW1lZCA9IHJldDtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlIGxlbilcXG4rXFx0XFx0XFx0Y29uc3VtZWQgPSBsZW47XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChyZXQgXFx1MDAzYyBtaW5fcmV0KSB7XFxuQEAgLTEwOTgsNyArMTEwOCw3IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIFxcdFxcdGlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpO1xcbiBcXG4gXFx0c2VsLnZhbCA9IHJldDtcXG4tXFx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFxcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpXFxuK1xcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MsIGNvbnN1bWVkKSlcXG4gXFx0XFx0Z290byByZXRyeV9tdWx0aXNob3Q7XFxuIFxcbiBcXHRyZXR1cm4gc2VsLnZhbDtcXG5AQCAtMTEwOCw2ICsxMTE4LDcgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2dcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcXG4rXFx0c2l6ZV90IGxlbjtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdC8qXFxuQEAgLTExNTMsMTMgKzExNjQsMTQgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2dcXG4gXFx0XFx0Lyogc3BlY2lhbCBjYXNlIDEgdmVjLCBjYW4gYmUgYSBmYXN0IHBhdGggKi9cXG4gXFx0XFx0aWYgKHJldCA9PSAxKSB7XFxuIFxcdFxcdFxcdHNyLVxcdTAwM2VidWYgPSBhcmcuaW92c1swXS5pb3ZfYmFzZTtcXG4tXFx0XFx0XFx0c3ItXFx1MDAzZWxlbiA9IGFyZy5pb3ZzWzBdLmlvdl9sZW47XFxuK1xcdFxcdFxcdGxlbiA9IHNyLVxcdTAwM2VsZW4gPSBhcmcuaW92c1swXS5pb3ZfbGVuO1xcbiBcXHRcXHRcXHRnb3RvIG1hcF91YnVmO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlvdl9pdGVyX2luaXQoXFx1MDAyNmttc2ctXFx1MDAzZW1zZy5tc2dfaXRlciwgSVRFUl9ERVNULCBhcmcuaW92cywgcmV0LFxcbi1cXHRcXHRcXHRcXHRhcmcub3V0X2xlbik7XFxuK1xcdFxcdFxcdCAgICAgIGFyZy5vdXRfbGVuKTtcXG4rXFx0XFx0bGVuID0gYXJnLm91dF9sZW47XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHNpemVfdCBsZW4gPSBzZWwtXFx1MDAzZXZhbDtcXG4rXFx0XFx0bGVuID0gc2VsLVxcdTAwM2V2YWw7XFxuIFxcbiBcXHRcXHQqc2VsID0gaW9fYnVmZmVyX3NlbGVjdChyZXEsIFxcdTAwMjZsZW4sIHNyLVxcdTAwM2VidWZfZ3JvdXAsIGlzc3VlX2ZsYWdzKTtcXG4gXFx0XFx0aWYgKCFzZWwtXFx1MDAzZWFkZHIpXFxuQEAgLTExNzMsNyArMTE4NSw3IEBAIHN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gbGVuO1xcbiB9XFxuIFxcbiBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbkBAIC0xMTg0LDYgKzExOTYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbiBcXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xcbiBcXHR1bnNpZ25lZCBmbGFncztcXG4gXFx0aW50IHJldCwgbWluX3JldCA9IDA7XFxuK1xcdHNpemVfdCBjb25zdW1lZCA9IDAsIGxlbiA9IDA7XFxuIFxcdGJvb2wgZm9yY2Vfbm9uYmxvY2sgPSBpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XFxuIFxcdGJvb2wgbXNob3RfZmluaXNoZWQ7XFxuIFxcbkBAIC0xMjEzLDYgKzEyMjYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbiBcXG4gcmV0cnlfbXVsdGlzaG90OlxcbiBcXHRzZWwuYnVmX2xpc3QgPSBOVUxMO1xcbitcXHRsZW4gPSBzci1cXHUwMDNlbGVuO1xcbiBcXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XFxuIFxcdFxcdHNlbC52YWwgPSBzci1cXHUwMDNlbGVuO1xcbiBcXHRcXHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBpc3N1ZV9mbGFncyk7XFxuQEAgLTEyMjAsNiArMTIzNCw3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIFxcdFxcdFxcdGttc2ctXFx1MDAzZW1zZy5tc2dfaW5xID0gLTE7XFxuIFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuIFxcdFxcdH1cXG4rXFx0XFx0bGVuID0gcmV0O1xcbiBcXHRcXHRzci1cXHUwMDNlYnVmID0gTlVMTDtcXG4gXFx0fVxcbiBcXG5AQCAtMTI1MCw2ICsxMjY1LDE3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIFxcdH1cXG4gXFxuIFxcdG1zaG90X2ZpbmlzaGVkID0gcmV0IFxcdTAwM2M9IDA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXaXRoIE1TR19UUlVOQywgdGhlIG5ldCBsYXllciB3aWxsIHJldHVybiB0aGUgZnVsbCBzaXplIG9mXFxuK1xcdCAqIHRoZSBwYWNrZXQsIGV2ZW4gaWYgd2Ugb25seSBmaWxsZWQgcGFydCBvZiBpdCBpbiB0aGUgYnVmZmVycy5cXG4rXFx0ICogQWRqdXN0IHRoZSByZXR1cm5lZCBzaXplIHRvIGNvbnN1bWUgb25seSB0aGUgcmVhbCBwYXJ0IG9mIHRoZVxcbitcXHQgKiBidWZmZXIuXFxuK1xcdCAqL1xcbitcXHRjb25zdW1lZCA9IHJldDtcXG4rXFx0aWYgKHJldCBcXHUwMDNlIGxlbilcXG4rXFx0XFx0Y29uc3VtZWQgPSBsZW47XFxuK1xcbiBcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4gXFx0XFx0cmV0ICs9IHNyLVxcdTAwM2Vkb25lX2lvO1xcbiBcXHRlbHNlIGlmIChzci1cXHUwMDNlZG9uZV9pbylcXG5AQCAtMTI1OCw3ICsxMjg0LDcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4gXFx0XFx0aW9fa2J1Zl9yZWN5Y2xlKHJlcSwgc2VsLmJ1Zl9saXN0LCBpc3N1ZV9mbGFncyk7XFxuIFxcbiBcXHRzZWwudmFsID0gcmV0O1xcbi1cXHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSlcXG4rXFx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFxcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncywgY29uc3VtZWQpKVxcbiBcXHRcXHRnb3RvIHJldHJ5X211bHRpc2hvdDtcXG4gXFxuIFxcdHJldHVybiBzZWwudmFsO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzoyNzoxMC4wMzcyNTA4MTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE4OTI3ODc3NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19yZWN2XCIsXG4gICAgXCJpb19yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW9fdXJpbmcgcmVjZWl2ZSBoYW5kbGluZyAoaW9fcmVjdiwgaW9fcmVjdm1zZywgaW9fcmVjdl9idWZfc2VsZWN0LCBpb19yZWN2X2ZpbmlzaCkgdG8gcHJvcGVybHkgdHJhY2sgYW5kIGNhcCBjb25zdW1lZCBidWZmZXIgbGVuZ3RoIHdoZW4gTVNHX1RSVU5DIGlzIHVzZWQgb3IgYnVmZmVyIHNpemVzIGRpZmZlciBmcm9tIHJldHVybmVkIHBhY2tldCBsZW5ndGhzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSB2aWEgc3RhbmRhcmQgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzY2Y2Y2ZiNjFjODg3YmNlMDMxMWJkZTBhYWZhN2EzY2Y2Yjg2ZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDIzOjI3OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbmV0LmMgYi9pb191cmluZy9uZXQuY1xuaW5kZXggZmJlNzE5ZDg2YzQ2My4uZjgxMTBkYzlmODYwNiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL25ldC5jXG4rKysgYi9pb191cmluZy9uZXQuY1xuQEAgLTg1Myw3ICs4NTMsNyBAQCBpbnQgaW9fcmVjdm1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG4gc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIGJvb2wgbXNob3RfZmluaXNoZWQsXG4tXHRcdFx0XHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuK1x0XHRcdFx0ICB1bnNpZ25lZCBpc3N1ZV9mbGFncywgc2l6ZV90IGNvbnN1bWVkKVxuIHtcbiBcdHN0cnVjdCBpb19zcl9tc2cgKnNyID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7XG4gXHR1bnNpZ25lZCBpbnQgY2ZsYWdzID0gMDtcbkBAIC04NzcsNyArODc3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFx0aWYgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XG4gXHRcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cdTAwM2V2YWwgLSBzci1cdTAwM2Vkb25lX2lvO1xuIFxuLVx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7XG4rXHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCBjb25zdW1lZCwgc2VsLVx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgY29uc3VtZWQpKTtcbiBcdFx0aWYgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVl9SRVRSWSlcbiBcdFx0XHRjZmxhZ3MgPSByZXEtXHUwMDNlY3FlLmZsYWdzIHwgKGNmbGFncyBcdTAwMjYgQ1FFX0ZfTUFTSyk7XG4gXHRcdGlmIChzci1cdTAwM2Vtc2hvdF9sZW4gXHUwMDI2XHUwMDI2IHNlbC1cdTAwM2V2YWwgXHUwMDNlPSBzci1cdTAwM2Vtc2hvdF9sZW4pXG5AQCAtODk5LDcgKzg5OSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIHNlbC1cdTAwM2V2YWwsIHNlbC1cdTAwM2VidWZfbGlzdCk7XG4rXHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIGNvbnN1bWVkLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuIFx0fVxuIFxuIFx0LypcbkBAIC0xMDI3LDYgKzEwMjcsNyBAQCBpbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0aW50IHJldCwgbWluX3JldCA9IDA7XG4gXHRib29sIGZvcmNlX25vbmJsb2NrID0gaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XG4gXHRib29sIG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcbitcdHNpemVfdCBsZW4sIGNvbnN1bWVkID0gMDtcbiBcbiBcdHNvY2sgPSBzb2NrX2Zyb21fZmlsZShyZXEtXHUwMDNlZmlsZSk7XG4gXHRpZiAodW5saWtlbHkoIXNvY2spKVxuQEAgLTEwNDIsOSArMTA0Myw4IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXG4gcmV0cnlfbXVsdGlzaG90OlxuIFx0c2VsLmJ1Zl9saXN0ID0gTlVMTDtcbitcdGxlbiA9IHNyLVx1MDAzZWxlbjtcbiBcdGlmIChpb19kb19idWZmZXJfc2VsZWN0KHJlcSkpIHtcbi1cdFx0c2l6ZV90IGxlbiA9IHNyLVx1MDAzZWxlbjtcbi1cbiBcdFx0c2VsID0gaW9fYnVmZmVyX3NlbGVjdChyZXEsIFx1MDAyNmxlbiwgc3ItXHUwMDNlYnVmX2dyb3VwLCBpc3N1ZV9mbGFncyk7XG4gXHRcdGlmICghc2VsLmFkZHIpXG4gXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuQEAgLTEwNjUsNiArMTA2NSw3IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpIHtcbiBcdFx0cmV0ID0gaW9fcmVjdm1zZ19tdWx0aXNob3Qoc29jaywgc3IsIGttc2csIGZsYWdzLFxuIFx0XHRcdFx0XHQgICBcdTAwMjZtc2hvdF9maW5pc2hlZCk7XG4rXHRcdGNvbnN1bWVkID0gcmV0O1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogZGlzYWJsZSBwYXJ0aWFsIHJldHJ5IGZvciByZWN2bXNnIHdpdGggY21zZyBhdHRhY2hlZCAqL1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19XQUlUQUxMIFx1MDAyNlx1MDAyNiAha21zZy1cdTAwM2Vtc2cubXNnX2NvbnRyb2xsZW4pXG5AQCAtMTA3Miw2ICsxMDczLDE1IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXG4gXHRcdHJldCA9IF9fc3lzX3JlY3Ztc2dfc29jayhzb2NrLCBcdTAwMjZrbXNnLVx1MDAzZW1zZywgc3ItXHUwMDNldW1zZyxcbiBcdFx0XHRcdFx0IGttc2ctXHUwMDNldWFkZHIsIGZsYWdzKTtcbitcdFx0LypcbitcdFx0ICogV2l0aCBNU0dfVFJVTkMsIHRoZSBuZXQgbGF5ZXIgd2lsbCByZXR1cm4gdGhlIGZ1bGwgc2l6ZSBvZlxuK1x0XHQgKiB0aGUgcGFja2V0LCBldmVuIGlmIHdlIG9ubHkgZmlsbGVkIHBhcnQgb2YgaXQgaW4gdGhlIGJ1ZmZlcnMuXG4rXHRcdCAqIEFkanVzdCB0aGUgcmV0dXJuZWQgc2l6ZSB0byBjb25zdW1lIG9ubHkgdGhlIHJlYWwgcGFydCBvZiB0aGVcbitcdFx0ICogYnVmZmVyLlxuK1x0XHQgKi9cbitcdFx0Y29uc3VtZWQgPSByZXQ7XG4rXHRcdGlmIChyZXQgXHUwMDNlIGxlbilcbitcdFx0XHRjb25zdW1lZCA9IGxlbjtcbiBcdH1cbiBcbiBcdGlmIChyZXQgXHUwMDNjIG1pbl9yZXQpIHtcbkBAIC0xMDk4LDcgKzExMDgsNyBAQCBpbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0XHRpb19rYnVmX3JlY3ljbGUocmVxLCBzZWwuYnVmX2xpc3QsIGlzc3VlX2ZsYWdzKTtcbiBcbiBcdHNlbC52YWwgPSByZXQ7XG4tXHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MpKVxuK1x0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzLCBjb25zdW1lZCkpXG4gXHRcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xuIFxuIFx0cmV0dXJuIHNlbC52YWw7XG5AQCAtMTEwOCw2ICsxMTE4LDcgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2dcbiBcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xuK1x0c2l6ZV90IGxlbjtcbiBcdGludCByZXQ7XG4gXG4gXHQvKlxuQEAgLTExNTMsMTMgKzExNjQsMTQgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2dcbiBcdFx0Lyogc3BlY2lhbCBjYXNlIDEgdmVjLCBjYW4gYmUgYSBmYXN0IHBhdGggKi9cbiBcdFx0aWYgKHJldCA9PSAxKSB7XG4gXHRcdFx0c3ItXHUwMDNlYnVmID0gYXJnLmlvdnNbMF0uaW92X2Jhc2U7XG4tXHRcdFx0c3ItXHUwMDNlbGVuID0gYXJnLmlvdnNbMF0uaW92X2xlbjtcbitcdFx0XHRsZW4gPSBzci1cdTAwM2VsZW4gPSBhcmcuaW92c1swXS5pb3ZfbGVuO1xuIFx0XHRcdGdvdG8gbWFwX3VidWY7XG4gXHRcdH1cbiBcdFx0aW92X2l0ZXJfaW5pdChcdTAwMjZrbXNnLVx1MDAzZW1zZy5tc2dfaXRlciwgSVRFUl9ERVNULCBhcmcuaW92cywgcmV0LFxuLVx0XHRcdFx0YXJnLm91dF9sZW4pO1xuK1x0XHRcdCAgICAgIGFyZy5vdXRfbGVuKTtcbitcdFx0bGVuID0gYXJnLm91dF9sZW47XG4gXHR9IGVsc2Uge1xuLVx0XHRzaXplX3QgbGVuID0gc2VsLVx1MDAzZXZhbDtcbitcdFx0bGVuID0gc2VsLVx1MDAzZXZhbDtcbiBcbiBcdFx0KnNlbCA9IGlvX2J1ZmZlcl9zZWxlY3QocmVxLCBcdTAwMjZsZW4sIHNyLVx1MDAzZWJ1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpO1xuIFx0XHRpZiAoIXNlbC1cdTAwM2VhZGRyKVxuQEAgLTExNzMsNyArMTE4NSw3IEBAIHN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIGxlbjtcbiB9XG4gXG4gaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbkBAIC0xMTg0LDYgKzExOTYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbiBcdHVuc2lnbmVkIGZsYWdzO1xuIFx0aW50IHJldCwgbWluX3JldCA9IDA7XG4rXHRzaXplX3QgY29uc3VtZWQgPSAwLCBsZW4gPSAwO1xuIFx0Ym9vbCBmb3JjZV9ub25ibG9jayA9IGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xuIFx0Ym9vbCBtc2hvdF9maW5pc2hlZDtcbiBcbkBAIC0xMjEzLDYgKzEyMjYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFxuIHJldHJ5X211bHRpc2hvdDpcbiBcdHNlbC5idWZfbGlzdCA9IE5VTEw7XG4rXHRsZW4gPSBzci1cdTAwM2VsZW47XG4gXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XG4gXHRcdHNlbC52YWwgPSBzci1cdTAwM2VsZW47XG4gXHRcdHJldCA9IGlvX3JlY3ZfYnVmX3NlbGVjdChyZXEsIGttc2csIFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xuQEAgLTEyMjAsNiArMTIzNCw3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXHRcdFx0a21zZy1cdTAwM2Vtc2cubXNnX2lucSA9IC0xO1xuIFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHRcdH1cbitcdFx0bGVuID0gcmV0O1xuIFx0XHRzci1cdTAwM2VidWYgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTEyNTAsNiArMTI2NSwxNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0fVxuIFxuIFx0bXNob3RfZmluaXNoZWQgPSByZXQgXHUwMDNjPSAwO1xuK1xuK1x0LypcbitcdCAqIFdpdGggTVNHX1RSVU5DLCB0aGUgbmV0IGxheWVyIHdpbGwgcmV0dXJuIHRoZSBmdWxsIHNpemUgb2ZcbitcdCAqIHRoZSBwYWNrZXQsIGV2ZW4gaWYgd2Ugb25seSBmaWxsZWQgcGFydCBvZiBpdCBpbiB0aGUgYnVmZmVycy5cbitcdCAqIEFkanVzdCB0aGUgcmV0dXJuZWQgc2l6ZSB0byBjb25zdW1lIG9ubHkgdGhlIHJlYWwgcGFydCBvZiB0aGVcbitcdCAqIGJ1ZmZlci5cbitcdCAqL1xuK1x0Y29uc3VtZWQgPSByZXQ7XG4rXHRpZiAocmV0IFx1MDAzZSBsZW4pXG4rXHRcdGNvbnN1bWVkID0gbGVuO1xuK1xuIFx0aWYgKHJldCBcdTAwM2UgMClcbiBcdFx0cmV0ICs9IHNyLVx1MDAzZWRvbmVfaW87XG4gXHRlbHNlIGlmIChzci1cdTAwM2Vkb25lX2lvKVxuQEAgLTEyNTgsNyArMTI4NCw3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXHRcdGlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpO1xuIFxuIFx0c2VsLnZhbCA9IHJldDtcbi1cdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpXG4rXHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MsIGNvbnN1bWVkKSlcbiBcdFx0Z290byByZXRyeV9tdWx0aXNob3Q7XG4gXG4gXHRyZXR1cm4gc2VsLnZhbDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjEwLjAzNzI1MjU0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2NzUyNTY3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgS2VybmVsIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBhc2tlZCB0byB0YWtlIGEgbG9vayBhdCBhIHBhdGNoIHNlcmllcyBqdXN0IGFwcGxpZWQgdG8gdGhlIGtlcm5lbCByZXBvc2l0b3J5LCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBpb191cmluZy9uZXQuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBkaXZlIGludG8gdGhlIGRpZmYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGNoYW5nZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki5cblxuVGhlIGRpZmYgaXRzZWxmIHBvaW50cyB0byBtb2RpZmljYXRpb25zIHdpdGhpbiBgaW9fcmVjdl9maW5pc2hgLCBgaW9fcmVjdm1zZ2AsIGBpb19yZWN2X2J1Zl9zZWxlY3RgLCBhbmQgYGlvX3JlY3ZgLiBBaCwgaXQncyBkZWFsaW5nIHdpdGggYE1TR19UUlVOQ2Ag4oCTIHRoYXQncyB0aGUgZmxhZyB3aGVyZSB0aGUgbmV0d29yayBsYXllciByZXBvcnRzIHRoZSBmdWxsIHBhY2tldCBzaXplIGV2ZW4gaWYgdGhlIHJlY2VpdmUgYnVmZmVycyBhcmVuJ3QgY29tcGxldGVseSBmaWxsZWQuIFRoaXMgaXMgYSBjb21tb24gc2l0dWF0aW9uLCBzbyBJJ20gaW50ZXJlc3RlZCBpbiBob3cgdGhleSBhcmUgaGFuZGxpbmcgdGhpcyBlZGdlIGNhc2UuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGNhbGN1bGF0ZXMgYGNvbnN1bWVkYCBkYXRhLCBhbmQgY29ycmVjdGx5IHBhc3NlcyB0aGlzIGluZm9ybWF0aW9uIHRvIGBpb19wdXRfa2J1ZnNgIC8gYGlvX3B1dF9rYnVmYCB0aHJvdWdoIHRoZSBgaW9fcmVjdl9maW5pc2hgIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGltcHJvdmVtZW50IGluIGhhbmRsaW5nIHBhcnRpYWxseSByZWNlaXZlZCBwYWNrZXRzLiBHb29kLlxuXG5Ob3csIGNvbnRleHQgaXMga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGZpcnN0IHN0ZXAgZm9yIG1lIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvbiBgaW9fdXJpbmdgIGl0c2VsZiBhbmQgaWYgdGhlcmUgYXJlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgYGlvX3VyaW5nL25ldC5jYC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHF1aWNrbHkgYnJpbmcgdGhlIGNvbnRleHQgaW50byB2aWV3LiBLbm93aW5nIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIGZvcm0gYSBmdWxseSBpbmZvcm1lZCBvcGluaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTA0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjc6MTYuNzEyNTExNzYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTAzMDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTkzPWVudW0gc3JfcmV0cnlfZmxhZ3Mge1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTExLVxcbmlvX3VyaW5nL25ldC5jOjExMjpzdHJ1Y3QgaW9fcmVjdnpjIHtcXG5pb191cmluZy9uZXQuYy0xMTMtXFx0c3RydWN0IGZpbGVcXHRcXHRcXHQqZmlsZTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTYyNj1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNzAyLVxcbmlvX3VyaW5nL25ldC5jOjcwMzpzdGF0aWMgaW50IGlvX3JlY3Ztc2dfbXNob3RfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG5pb191cmluZy9uZXQuYy03MDQtXFx0XFx0XFx0XFx0IHN0cnVjdCBpb19hc3luY19tc2doZHIgKmlvbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNzI2LVxcbmlvX3VyaW5nL25ldC5jOjcyNzpzdGF0aWMgaW50IGlvX3JlY3Ztc2dfY29weV9oZHIoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvbmV0LmMtNzI4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICppb21zZylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTc0Mi1cXHR9XFxuaW9fdXJpbmcvbmV0LmM6NzQzOlxcdHJldHVybiBpb19yZWN2bXNnX21zaG90X3ByZXAocmVxLCBpb21zZywgbXNnLm1zZ19uYW1lbGVuLFxcbmlvX3VyaW5nL25ldC5jLTc0NC1cXHRcXHRcXHRcXHRcXHRtc2cubXNnX2NvbnRyb2xsZW4pO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNzQ2LVxcbmlvX3VyaW5nL25ldC5jOjc0NzpzdGF0aWMgaW50IGlvX3JlY3Ztc2dfcHJlcF9zZXR1cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG5pb191cmluZy9uZXQuYy03NDgte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNzc0LVxcbmlvX3VyaW5nL25ldC5jOjc3NTpcXHRyZXR1cm4gaW9fcmVjdm1zZ19jb3B5X2hkcihyZXEsIGttc2cpO1xcbmlvX3VyaW5nL25ldC5jLTc3Ni19XFxuLS1cXG5pb191cmluZy9uZXQuYy03ODAtXFxuaW9fdXJpbmcvbmV0LmM6NzgxOmludCBpb19yZWN2bXNnX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG5pb191cmluZy9uZXQuYy03ODIte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtODM5LVxcdHNyLVxcdTAwM2Vucl9tdWx0aXNob3RfbG9vcHMgPSAwO1xcbmlvX3VyaW5nL25ldC5jOjg0MDpcXHRyZXR1cm4gaW9fcmVjdm1zZ19wcmVwX3NldHVwKHJlcSk7XFxuaW9fdXJpbmcvbmV0LmMtODQxLX1cXG4tLVxcbmlvX3VyaW5nL25ldC5jLTg0Ny0vKlxcbmlvX3VyaW5nL25ldC5jOjg0ODogKiBGaW5pc2hlcyBpb19yZWN2IGFuZCBpb19yZWN2bXNnLlxcbmlvX3VyaW5nL25ldC5jLTg0OS0gKlxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtODUyLSAqL1xcbmlvX3VyaW5nL25ldC5jOjg1MzpzdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvbmV0LmMtODU0LVxcdFxcdFxcdFxcdCAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTkzNS1cXG5pb191cmluZy9uZXQuYzo5MzY6c3RhdGljIGludCBpb19yZWN2bXNnX3ByZXBfbXVsdGlzaG90KHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuaW9fdXJpbmcvbmV0LmMtOTM3LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGlvX3NyX21zZyAqc3IsIHZvaWQgX191c2VyICoqYnVmLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtOTYwLVxcbmlvX3VyaW5nL25ldC5jOjk2MTpzdHJ1Y3QgaW9fcmVjdm1zZ19tdWx0aXNob3RfaGRyIHtcXG5pb191cmluZy9uZXQuYy05NjItXFx0c3RydWN0IGlvX3VyaW5nX3JlY3Ztc2dfb3V0IG1zZztcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTk2NS1cXG5pb191cmluZy9uZXQuYzo5NjY6c3RhdGljIGludCBpb19yZWN2bXNnX211bHRpc2hvdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgaW9fc3JfbXNnICppbyxcXG5pb191cmluZy9uZXQuYy05NjctXFx0XFx0XFx0XFx0c3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTk3MS1cXHRpbnQgY29weV9sZW47XFxuaW9fdXJpbmcvbmV0LmM6OTcyOlxcdHN0cnVjdCBpb19yZWN2bXNnX211bHRpc2hvdF9oZHIgaGRyO1xcbmlvX3VyaW5nL25ldC5jLTk3My1cXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEwMDgtXFx0LyogZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gZ2FwIGJldHdlZW4gaGRyIGFuZCBzb2NrYWRkcl9zdG9yYWdlICovXFxuaW9fdXJpbmcvbmV0LmM6MTAwOTpcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGlvX3JlY3Ztc2dfbXVsdGlzaG90X2hkciwgYWRkcikgIT1cXG5pb191cmluZy9uZXQuYy0xMDEwLVxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCBpb191cmluZ19yZWN2bXNnX291dCkpO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTAxOS1cXG5pb191cmluZy9uZXQuYzoxMDIwOmludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvbmV0LmMtMTAyMS17XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMDUyLVxcdFxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQVBPTExfTVVMVElTSE9UKSB7XFxuaW9fdXJpbmcvbmV0LmM6MTA1MzpcXHRcXHRcXHRyZXQgPSBpb19yZWN2bXNnX3ByZXBfbXVsdGlzaG90KGttc2csIHNyLCBcXHUwMDI2c2VsLmFkZHIsIFxcdTAwMjZsZW4pO1xcbmlvX3VyaW5nL25ldC5jLTEwNTQtXFx0XFx0XFx0aWYgKHJldCkge1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTA2NS1cXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkge1xcbmlvX3VyaW5nL25ldC5jOjEwNjY6XFx0XFx0cmV0ID0gaW9fcmVjdm1zZ19tdWx0aXNob3Qoc29jaywgc3IsIGttc2csIGZsYWdzLFxcbmlvX3VyaW5nL25ldC5jLTEwNjctXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNm1zaG90X2ZpbmlzaGVkKTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTExMTAtXFx0c2VsLnZhbCA9IHJldDtcXG5pb191cmluZy9uZXQuYzoxMTExOlxcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MsIGNvbnN1bWVkKSlcXG5pb191cmluZy9uZXQuYy0xMTEyLVxcdFxcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTExNi1cXG5pb191cmluZy9uZXQuYzoxMTE3OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbmlvX3VyaW5nL25ldC5jLTExMTgtXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTkwLVxcbmlvX3VyaW5nL25ldC5jOjExOTE6aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9uZXQuYy0xMTkyLXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyMzEtXFx0XFx0c2VsLnZhbCA9IHNyLVxcdTAwM2VsZW47XFxuaW9fdXJpbmcvbmV0LmM6MTIzMjpcXHRcXHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmMtMTIzMy1cXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyODYtXFx0c2VsLnZhbCA9IHJldDtcXG5pb191cmluZy9uZXQuYzoxMjg3OlxcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MsIGNvbnN1bWVkKSlcXG5pb191cmluZy9uZXQuYy0xMjg4LVxcdFxcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTI5Mi1cXG5pb191cmluZy9uZXQuYzoxMjkzOmludCBpb19yZWN2emNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbmlvX3VyaW5nL25ldC5jLTEyOTQte1xcbmlvX3VyaW5nL25ldC5jOjEyOTU6XFx0c3RydWN0IGlvX3JlY3Z6YyAqemMgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fcmVjdnpjKTtcXG5pb191cmluZy9uZXQuYy0xMjk2LVxcdHVuc2lnbmVkIGlmcV9pZHg7XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMzIwLVxcbmlvX3VyaW5nL25ldC5jOjEzMjE6aW50IGlvX3JlY3Z6YyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbmlvX3VyaW5nL25ldC5jLTEzMjIte1xcbmlvX3VyaW5nL25ldC5jOjEzMjM6XFx0c3RydWN0IGlvX3JlY3Z6YyAqemMgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fcmVjdnpjKTtcXG5pb191cmluZy9uZXQuYy0xMzI0LVxcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XFxuLS1cXG5pb191cmluZy9uZXQuaD0zNT1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9uZXQuaC0zNi1cXG5pb191cmluZy9uZXQuaDozNzppbnQgaW9fcmVjdm1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xcbmlvX3VyaW5nL25ldC5oOjM4OmludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL25ldC5oOjM5OmludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL25ldC5oLTQwLVxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYz01ND1jb25zdCBzdHJ1Y3QgaW9faXNzdWVfZGVmIGlvX2lzc3VlX2RlZnNbXSA9IHtcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtMTU4LVxcdFxcdC5hc3luY19zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXFxuaW9fdXJpbmcvb3BkZWYuYzoxNTk6XFx0XFx0LnByZXBcXHRcXHRcXHQ9IGlvX3JlY3Ztc2dfcHJlcCxcXG5pb191cmluZy9vcGRlZi5jOjE2MDpcXHRcXHQuaXNzdWVcXHRcXHRcXHQ9IGlvX3JlY3Ztc2csXFxuaW9fdXJpbmcvb3BkZWYuYy0xNjEtI2Vsc2VcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtMzAyLVxcdFxcdC5hc3luY19zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXFxuaW9fdXJpbmcvb3BkZWYuYzozMDM6XFx0XFx0LnByZXBcXHRcXHRcXHQ9IGlvX3JlY3Ztc2dfcHJlcCxcXG5pb191cmluZy9vcGRlZi5jOjMwNDpcXHRcXHQuaXNzdWVcXHRcXHRcXHQ9IGlvX3JlY3YsXFxuaW9fdXJpbmcvb3BkZWYuYy0zMDUtI2Vsc2VcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtNTI4LSNpZiBkZWZpbmVkKENPTkZJR19ORVQpXFxuaW9fdXJpbmcvb3BkZWYuYzo1Mjk6XFx0XFx0LnByZXBcXHRcXHRcXHQ9IGlvX3JlY3Z6Y19wcmVwLFxcbmlvX3VyaW5nL29wZGVmLmM6NTMwOlxcdFxcdC5pc3N1ZVxcdFxcdFxcdD0gaW9fcmVjdnpjLFxcbmlvX3VyaW5nL29wZGVmLmMtNTMxLSNlbHNlXFxuLS1cXG5pb191cmluZy96Y3J4Lmg9MTMwPXN0YXRpYyBpbmxpbmUgaW50IGlvX3pjcnhfY3RybChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3pjcnguaC0xMzYtXFxuaW9fdXJpbmcvemNyeC5oOjEzNzppbnQgaW9fcmVjdnpjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL3pjcnguaDoxMzg6aW50IGlvX3JlY3Z6Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xcbmlvX3VyaW5nL3pjcnguaC0xMzktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjE2Ljc2NDQyMzQ3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg1NjY3MTM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGlvX3VyaW5nL25ldC5jIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSBkaWN0YXRpbmcgdGhlIGJlaGF2aW9yIG9mIGBpb191cmluZy9uZXQuY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZpbGVzLiBMZXQncyBzZWUuLi4gdGhlIGBpb191cmluZy9NYWtlZmlsZWAgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBhcyBpdCBzaG91bGQgZGV0YWlsIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsbHkgZmxhZyBzb21lIGNvbmZpZ3VyYXRpb24gYml0cy4gRmFpbGluZyB0aGF0LCBgaW9fdXJpbmcvS2NvbmZpZ2AgaXMgYWxtb3N0IGNlcnRhaW5seSB3aGVyZSB0aGVzZSBvcHRpb25zIGFyZSBkZWZpbmVkIGFuZCBkb2N1bWVudGVkLiBJJ20gYmV0dGluZyBvbmUgb2YgdGhvc2Ugd2lsbCBsZWFkIG1lIGRpcmVjdGx5IHRvIHRoZSByZWxldmFudCBrbm9icyBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzI3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjc6MTguNjIxMDk2ODMxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTM2Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX05FVF9SWF9CVVNZX1BPTEwpXFx0Kz0gbmFwaS5vXFxuaW9fdXJpbmcvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX05FVCkgKz0gbmV0Lm8gY21kX25ldC5vXFxuaW9fdXJpbmcvTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX1BST0NfRlMpICs9IGZkaW5mby5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjE4LjY2NzI0MDk0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2NDg2NzYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgaW9fdXJpbmcgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYGlvX3VyaW5nYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGlzIGtlcm5lbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnRzIGFyZSBgaW9fdXJpbmcvS2NvbmZpZ2AsIHRoYXQncyB3aGVyZSBJIGV4cGVjdCB0aGUgY29yZSBkZWZpbml0aW9ucyBmb3IgaW9fdXJpbmcgaXRzZWxmIHRvIGJlLCBhbmQgdGhlbiBgaW5pdC9LY29uZmlnYC4gYGluaXQvS2NvbmZpZ2Agb2Z0ZW4gY29udGFpbnMgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgcG90ZW50aWFsbHkgcmVmZXJlbmNlcyBvdGhlciBLY29uZmlnIGZpbGVzIHRoYXQgYXJlIHRoZW4gaW5jbHVkZWQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlc2UgdHdvIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgcG9pbnRzIGZvciBlbmFibGluZywgZGlzYWJsaW5nLCBhbmQgcG9zc2libHkgY3VzdG9taXppbmcgYGlvX3VyaW5nYCBpbiB0aGlzIHBhcnRpY3VsYXIga2VybmVsIGJ1aWxkLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBhbGwgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGZsYWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjE1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjc6MjEuNTMyMTEwODk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjQ2MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklPX1VSSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTk1Mj1jb25maWcgQUlPXFxuLS1cXG5pbml0L0tjb25maWctMTk1OS1cXG5pbml0L0tjb25maWc6MTk2MDpjb25maWcgSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTk2MS1cXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWc9MTk2OT1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5NzAtXFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIHRoZSBpb191cmluZyBzdWJzeXN0ZW1cXFwiXFxuaW5pdC9LY29uZmlnOjE5NzE6XFx0ZGVwZW5kcyBvbiBJT19VUklORyBcXHUwMDI2XFx1MDAyNiBHQ09WX0tFUk5FTFxcbmluaXQvS2NvbmZpZy0xOTcyLVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTgxLVxcbmluaXQvS2NvbmZpZzoxOTgyOmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcXG5pbml0L0tjb25maWctMTk4My1cXHR0cmlzdGF0ZSBcXFwiRW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcXFwiIGlmIEVYUEVSVFxcbmluaXQvS2NvbmZpZy0xOTg0LVxcdGRlZmF1bHQgblxcbmluaXQvS2NvbmZpZzoxOTg1OlxcdGRlcGVuZHMgb24gSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTk4Ni1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjIxLjU3OTM2Mjg2NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxOTk2NzQzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgSS9PIHdpdGggaW9fdXJpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMgaW4gdGhpcyBgaW9fdXJpbmcvbmV0LmNgIGZpbGUuIEknbSBnb2luZyB0byBwaW5wb2ludCB0aGUgYXJlYXMgd2hlcmUgdGhleSd2ZSBtYWRlIGNoYW5nZXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zOiBgaW9fcmVjdl9maW5pc2hgICh3aGljaCBpcyBhIHN0YXRpYyBpbmxpbmUsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCksIGBpb19yZWN2bXNnYCwgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgKGFub3RoZXIgc3RhdGljIG9uZSksIGFuZCBgaW9fcmVjdmAuIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBpb19yZWN2X2ZpbmlzaGAsIGBpb19yZWN2bXNnYCwgYW5kIGBpb19yZWN2YCBhbmQgc2VlIGhvdyB0aGUgY2hhbmdlcyBoYXZlIGFmZmVjdGVkIHRoZSBmbG93IGFyb3VuZCB0aGVtLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBjaGFuZ2VkIGFuZCB3aHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzoyNzoyMy43NzkwNDAxMDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL25ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHQgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgYWN0dWFsbHkgZmluaXNoZWQsIG9yIGZhbHNlIGlmIGl0IHNob3VsZCBydW5cXG4gODUxOlxcdCAqIGFnYWluIChmb3IgbXVsdGlzaG90KS5cXG4gODUyOlxcdCAqL1xcbiA4NTM6XFx0c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbiA4NTQ6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbiA4NTU6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIGJvb2wgbXNob3RfZmluaXNoZWQsXFxuIDg1NjpcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBzaXplX3QgY29uc3VtZWQpXFxuIDg1NzpcXHR7XFxuIDg1ODpcXHRcXHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xcbiA4NTk6XFx0XFx0dW5zaWduZWQgaW50IGNmbGFncyA9IDA7XFxuIDg2MDpcXHRcXG4gODYxOlxcdFxcdGlmIChrbXNnLVxcdTAwM2Vtc2cubXNnX2lucSBcXHUwMDNlIDApXFxuIDg2MjpcXHRcXHRcXHRjZmxhZ3MgfD0gSU9SSU5HX0NRRV9GX1NPQ0tfTk9ORU1QVFk7XFxuIDg2MzpcXHRcXG4gODY0OlxcdFxcdGlmIChzZWwtXFx1MDAzZXZhbCBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZfTVNIT1RfTElNKSB7XFxuIDg2NTpcXHRcXHRcXHQvKlxcbiA4NjY6XFx0XFx0XFx0ICogSWYgc3ItXFx1MDAzZWxlbiBoaXRzIHplcm8sIHRoZSBsaW1pdCBoYXMgYmVlbiByZWFjaGVkLiBNYXJrXFxuIDg2NzpcXHRcXHRcXHQgKiBtc2hvdCBhcyBmaW5pc2hlZCwgYW5kIGZsYWcgTVNIT1RfRE9ORSBhcyB3ZWxsIHRvIHByZXZlbnRcXG4gODY4OlxcdFxcdFxcdCAqIGEgcG90ZW50aWFsIGJ1bmRsZSBmcm9tIGJlaW5nIHJldHJpZWQuXFxuIDg2OTpcXHRcXHRcXHQgKi9cXG4gODcwOlxcdFxcdFxcdHNyLVxcdTAwM2Vtc2hvdF90b3RhbF9sZW4gLT0gbWluX3QoaW50LCBzZWwtXFx1MDAzZXZhbCwgc3ItXFx1MDAzZW1zaG90X3RvdGFsX2xlbik7XFxuIDg3MTpcXHRcXHRcXHRpZiAoIXNyLVxcdTAwM2Vtc2hvdF90b3RhbF9sZW4pIHtcXG4gODcyOlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9NU0hPVF9ET05FO1xcbiA4NzM6XFx0XFx0XFx0XFx0bXNob3RfZmluaXNoZWQgPSB0cnVlO1xcbiA4NzQ6XFx0XFx0XFx0fVxcbiA4NzU6XFx0XFx0fVxcbiA4NzY6XFx0XFxuIDg3NzpcXHRcXHRpZiAoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkge1xcbiA4Nzg6XFx0XFx0XFx0c2l6ZV90IHRoaXNfcmV0ID0gc2VsLVxcdTAwM2V2YWwgLSBzci1cXHUwMDNlZG9uZV9pbztcXG4gODc5OlxcdFxcbiA4ODA6XFx0XFx0XFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIGNvbnN1bWVkLCBzZWwtXFx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgY29uc3VtZWQpKTtcXG4gODgxOlxcdFxcdFxcdGlmIChzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVl9SRVRSWSlcXG4gODgyOlxcdFxcdFxcdFxcdGNmbGFncyA9IHJlcS1cXHUwMDNlY3FlLmZsYWdzIHwgKGNmbGFncyBcXHUwMDI2IENRRV9GX01BU0spO1xcbiA4ODM6XFx0XFx0XFx0aWYgKHNyLVxcdTAwM2Vtc2hvdF9sZW4gXFx1MDAyNlxcdTAwMjYgc2VsLVxcdTAwM2V2YWwgXFx1MDAzZT0gc3ItXFx1MDAzZW1zaG90X2xlbilcXG4gODg0OlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9NU0hPVF9DQVA7XFxuIDg4NTpcXHRcXHRcXHQvKiBidW5kbGUgd2l0aCBubyBtb3JlIGltbWVkaWF0ZSBidWZmZXJzLCB3ZSdyZSBkb25lICovXFxuIDg4NjpcXHRcXHRcXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0JMX0VNUFRZKVxcbiA4ODc6XFx0XFx0XFx0XFx0Z290byBmaW5pc2g7XFxuIDg4ODpcXHRcXHRcXHQvKlxcbiA4ODk6XFx0XFx0XFx0ICogSWYgbW9yZSBpcyBhdmFpbGFibGUgQU5EIGl0IHdhcyBhIGZ1bGwgdHJhbnNmZXIsIHJldHJ5IGFuZFxcbiA4OTA6XFx0XFx0XFx0ICogYXBwZW5kIHRvIHRoaXMgb25lXFxuIDg5MTpcXHRcXHRcXHQgKi9cXG4gODkyOlxcdFxcdFxcdGlmICghKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWX05PX1JFVFJZKSBcXHUwMDI2XFx1MDAyNlxcbiA4OTM6XFx0XFx0XFx0ICAgIGttc2ctXFx1MDAzZW1zZy5tc2dfaW5xIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiB0aGlzX3JldCBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4gODk0OlxcdFxcdFxcdCAgICAhaW92X2l0ZXJfY291bnQoXFx1MDAyNmttc2ctXFx1MDAzZW1zZy5tc2dfaXRlcikpIHtcXG4gODk1OlxcdFxcdFxcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzID0gY2ZsYWdzIFxcdTAwMjYgfkNRRV9GX01BU0s7XFxuIDg5NjpcXHRcXHRcXHRcXHRzci1cXHUwMDNlbGVuID0ga21zZy1cXHUwMDNlbXNnLm1zZ19pbnE7XFxuIDg5NzpcXHRcXHRcXHRcXHRzci1cXHUwMDNlZG9uZV9pbyArPSB0aGlzX3JldDtcXG4gODk4OlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9SRVRSWTtcXG4gODk5OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gOTAwOlxcdFxcdFxcdH1cXG4gOTAxOlxcdFxcdH0gZWxzZSB7XFxuIDkwMjpcXHRcXHRcXHRjZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBjb25zdW1lZCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuIDkwMzpcXHRcXHR9XFxuIDkwNDpcXHRcXG4gOTA1OlxcdFxcdC8qXFxuIDkwNjpcXHRcXHQgKiBGaWxsIENRRSBmb3IgdGhpcyByZWNlaXZlIGFuZCBzZWUgaWYgd2Ugc2hvdWxkIGtlZXAgdHJ5aW5nIHRvXFxuIDkwNzpcXHRcXHQgKiByZWNlaXZlIGZyb20gdGhpcyBzb2NrZXQuXFxuIDkwODpcXHRcXHQgKi9cXG4gOTA5OlxcdFxcdGlmICgocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkgXFx1MDAyNlxcdTAwMjYgIW1zaG90X2ZpbmlzaGVkIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjIzLjc3OTE1MzM3MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTA5OTg5NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgTmV0d29yayBQYXRjaDogQSBGdXp6aW5nIFBlcnNwZWN0aXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgZnV6emluZyBzdGFuZHBvaW50LCB0aGlzIHBhdGNoIGxvb2tzIGludGVyZXN0aW5nLiBXZSdyZSBsb29raW5nIGF0IGNoYW5nZXMgaW4gYGlvX3VyaW5nL25ldC5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IGJ1ZmZlcnMgYXJlIGhhbmRsZWQgZHVyaW5nIGBpb19yZWN2YCBhbmQgYGlvX3JlY3Ztc2dgIG9wZXJhdGlvbnMsIHBhcnRpY3VsYXJseSB3aGVuIGBNU0dfVFJVTkNgIGlzIHVzZWQgb3IgcGFydGlhbCBmaWxscyBvY2N1ci4gVGhlIGtleSBpcyBwcmV2ZW50aW5nIG92ZXItY29uc3VtcHRpb24gb2YgYnVmZmVyIGxlbmd0aHMgaW4gYGlvX3B1dF9rYnVmYCBhbmQgYGlvX3B1dF9rYnVmc2AuIEdpdmVuIHRoZSByZWFjaGFiaWxpdHkgb2YgYElPUklOR19PUF9SRUNWYCBhbmQgYElPUklOR19PUF9SRUNWTVNHYCBhcyBzdGFuZGFyZCBpb191cmluZyBvcGVyYXRpb25zLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vay4gSXQgZGlyZWN0bHkgdG91Y2hlcyB0aGUgY29yZSBuZXR3b3JrIG9wY29kZSBleGVjdXRpb24gbG9naWMgYW5kIGJ1ZmZlciBtYW5hZ2VtZW50LCBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBoZXJlIGFyZSB0aGUgZW50cnkgcG9pbnRzOiBgaW9fcmVjdmAgYW5kIGBpb19yZWN2bXNnYC4gVGhvdWdoIGBpb19yZWN2X2J1Zl9zZWxlY3RgIGlzIGluIHRoZSBtaXgsIGxldCdzIHByaW9yaXRpemUgdGhlIG5vbi1zdGF0aWMgZW50cnlwb2ludHMgZmlyc3QuIEFuZCBvZiBjb3Vyc2UsIHRoZSBzdGF0aWMgaW5saW5lIGBpb19yZWN2X2ZpbmlzaGAgaXMgbm90IGFuIGV4cGxpY2l0IHN5bWJvbC4gTXkgdGhpbmtpbmcgaXMgdGhhdCB0aGUgcmVsZXZhbnQgY29kZSB3aWxsIGJlIGFjY2Vzc2VkIGJ5IGVudHJ5cG9pbnRzLCBzbyBsZXQncyBrZWVwIGl0IHNpbXBsZS5cblxuQ29uZmlndXJhdGlvbi13aXNlLCBpdCBoaW5nZXMgb24gYElPX1VSSU5HYCBhbmQgYE5FVGAsIHdoaWNoIGlzIGV4cGVjdGVkIGdpdmVuIHRoZSBzdWJzeXN0ZW0uIFRoZSBgaW9fdXJpbmcvTWFrZWZpbGVgIGNvbmZpcm1zIHRoZSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIG5vIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLlxuXG5TbywgdG8gc3VtbWFyaXplOlxuLSAgICoqV29ydGhGdXp6aW5nOioqIFRydWVcbi0gICAqKkZvY3VzU3ltYm9sczoqKiBgaW9fcmVjdmAsIGBpb19yZWN2bXNnYFxuLSAgICoqRW5hYmxlQ29uZmlnczoqKiBgSU9fVVJJTkdgLCBgTkVUYFxuXG5Ob3csIGxldCdzIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUwNywiT3V0cHV0VG9rZW5zIjoxMjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzoyNzoyOC44ODkxNDYyMzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTk3OTIxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpb191cmluZyByZWNlaXZlIGhhbmRsaW5nIChpb19yZWN2LCBpb19yZWN2bXNnLCBpb19yZWN2X2J1Zl9zZWxlY3QsIGlvX3JlY3ZfZmluaXNoKSB0byBwcm9wZXJseSB0cmFjayBhbmQgY2FwIGNvbnN1bWVkIGJ1ZmZlciBsZW5ndGggd2hlbiBNU0dfVFJVTkMgaXMgdXNlZCBvciBidWZmZXIgc2l6ZXMgZGlmZmVyIGZyb20gcmV0dXJuZWQgcGFja2V0IGxlbmd0aHMuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIHZpYSBzdGFuZGFyZCBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpb191cmluZyByZWNlaXZlIGhhbmRsaW5nIChpb19yZWN2LCBpb19yZWN2bXNnLCBpb19yZWN2X2J1Zl9zZWxlY3QsIGlvX3JlY3ZfZmluaXNoKSB0byBwcm9wZXJseSB0cmFjayBhbmQgY2FwIGNvbnN1bWVkIGJ1ZmZlciBsZW5ndGggd2hlbiBNU0dfVFJVTkMgaXMgdXNlZCBvciBidWZmZXIgc2l6ZXMgZGlmZmVyIGZyb20gcmV0dXJuZWQgcGFja2V0IGxlbmd0aHMuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIHZpYSBzdGFuZGFyZCBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjI4Ljk2NTEzMjY2MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2NzU3MDYzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzoyNzoyOC45NjU1ODIxMTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MTY3NTI1MjUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGJ1ZmZlciBsZW5ndGggYWNjb3VudGluZyBpbiBpb191cmluZydzIHJlY3YgYW5kIHJlY3Ztc2cgcGF0aHMgd2hlbiBNU0dfVFJVTkMgaXMgdXNlZC4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgJ2NvbnN1bWVkJyB2YXJpYWJsZSB0byBlbnN1cmUgdGhhdCBidWZmZXIgcmluZyBjb21taXR0aW5nIGFuZCBidW5kbGUgYnVmZmVyIGNvdW50aW5nIChpb19idW5kbGVfbmJ1ZnMpIG9ubHkgY29uc3VtZSB1cCB0byB0aGUgYWN0dWFsIGJ1ZmZlciBjYXBhY2l0eSAoJ2xlbicpIHJhdGhlciB0aGFuIHRoZSB0cnVuY2F0ZWQgdG90YWwgcGFja2V0IGxlbmd0aCAoJ3JldCcpLlxcblxcbkFsbCBuZXcgYW5kIG1vZGlmaWVkIHZhcmlhYmxlcyAoJ2xlbicsICdjb25zdW1lZCcpIGFyZSBzdHJpY3RseSBpbml0aWFsaXplZCBhbmQgYXNzaWduZWQgYmVmb3JlIHVzZS4gVGhlIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBsZWFrIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgdG8gdXNlcnNwYWNlLiBBbnkgcmlza3MgcmVsYXRlZCB0byBidWZmZXIgb3Zlci1jb25zdW1wdGlvbiBvciBvdXQtb2YtYm91bmRzIGl0ZXIgaW5kZXhpbmcgaW4gaW9fYnVuZGxlX25idWZzIGZhbGwgdW5kZXIgYm91bmRzLWNoZWNraW5nIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzY2Y2Y2ZiNjFjODg3YmNlMDMxMWJkZTBhYWZhN2EzY2Y2Yjg2ZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDIzOjI3OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbmV0LmMgYi9pb191cmluZy9uZXQuY1xuaW5kZXggZmJlNzE5ZDg2YzQ2My4uZjgxMTBkYzlmODYwNiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL25ldC5jXG4rKysgYi9pb191cmluZy9uZXQuY1xuQEAgLTg1Myw3ICs4NTMsNyBAQCBpbnQgaW9fcmVjdm1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG4gc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIGJvb2wgbXNob3RfZmluaXNoZWQsXG4tXHRcdFx0XHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuK1x0XHRcdFx0ICB1bnNpZ25lZCBpc3N1ZV9mbGFncywgc2l6ZV90IGNvbnN1bWVkKVxuIHtcbiBcdHN0cnVjdCBpb19zcl9tc2cgKnNyID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7XG4gXHR1bnNpZ25lZCBpbnQgY2ZsYWdzID0gMDtcbkBAIC04NzcsNyArODc3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFx0aWYgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XG4gXHRcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cdTAwM2V2YWwgLSBzci1cdTAwM2Vkb25lX2lvO1xuIFxuLVx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7XG4rXHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCBjb25zdW1lZCwgc2VsLVx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgY29uc3VtZWQpKTtcbiBcdFx0aWYgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVl9SRVRSWSlcbiBcdFx0XHRjZmxhZ3MgPSByZXEtXHUwMDNlY3FlLmZsYWdzIHwgKGNmbGFncyBcdTAwMjYgQ1FFX0ZfTUFTSyk7XG4gXHRcdGlmIChzci1cdTAwM2Vtc2hvdF9sZW4gXHUwMDI2XHUwMDI2IHNlbC1cdTAwM2V2YWwgXHUwMDNlPSBzci1cdTAwM2Vtc2hvdF9sZW4pXG5AQCAtODk5LDcgKzg5OSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIHNlbC1cdTAwM2V2YWwsIHNlbC1cdTAwM2VidWZfbGlzdCk7XG4rXHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIGNvbnN1bWVkLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuIFx0fVxuIFxuIFx0LypcbkBAIC0xMDI3LDYgKzEwMjcsNyBAQCBpbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0aW50IHJldCwgbWluX3JldCA9IDA7XG4gXHRib29sIGZvcmNlX25vbmJsb2NrID0gaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XG4gXHRib29sIG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcbitcdHNpemVfdCBsZW4sIGNvbnN1bWVkID0gMDtcbiBcbiBcdHNvY2sgPSBzb2NrX2Zyb21fZmlsZShyZXEtXHUwMDNlZmlsZSk7XG4gXHRpZiAodW5saWtlbHkoIXNvY2spKVxuQEAgLTEwNDIsOSArMTA0Myw4IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXG4gcmV0cnlfbXVsdGlzaG90OlxuIFx0c2VsLmJ1Zl9saXN0ID0gTlVMTDtcbitcdGxlbiA9IHNyLVx1MDAzZWxlbjtcbiBcdGlmIChpb19kb19idWZmZXJfc2VsZWN0KHJlcSkpIHtcbi1cdFx0c2l6ZV90IGxlbiA9IHNyLVx1MDAzZWxlbjtcbi1cbiBcdFx0c2VsID0gaW9fYnVmZmVyX3NlbGVjdChyZXEsIFx1MDAyNmxlbiwgc3ItXHUwMDNlYnVmX2dyb3VwLCBpc3N1ZV9mbGFncyk7XG4gXHRcdGlmICghc2VsLmFkZHIpXG4gXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuQEAgLTEwNjUsNiArMTA2NSw3IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpIHtcbiBcdFx0cmV0ID0gaW9fcmVjdm1zZ19tdWx0aXNob3Qoc29jaywgc3IsIGttc2csIGZsYWdzLFxuIFx0XHRcdFx0XHQgICBcdTAwMjZtc2hvdF9maW5pc2hlZCk7XG4rXHRcdGNvbnN1bWVkID0gcmV0O1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogZGlzYWJsZSBwYXJ0aWFsIHJldHJ5IGZvciByZWN2bXNnIHdpdGggY21zZyBhdHRhY2hlZCAqL1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19XQUlUQUxMIFx1MDAyNlx1MDAyNiAha21zZy1cdTAwM2Vtc2cubXNnX2NvbnRyb2xsZW4pXG5AQCAtMTA3Miw2ICsxMDczLDE1IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXG4gXHRcdHJldCA9IF9fc3lzX3JlY3Ztc2dfc29jayhzb2NrLCBcdTAwMjZrbXNnLVx1MDAzZW1zZywgc3ItXHUwMDNldW1zZyxcbiBcdFx0XHRcdFx0IGttc2ctXHUwMDNldWFkZHIsIGZsYWdzKTtcbitcdFx0LypcbitcdFx0ICogV2l0aCBNU0dfVFJVTkMsIHRoZSBuZXQgbGF5ZXIgd2lsbCByZXR1cm4gdGhlIGZ1bGwgc2l6ZSBvZlxuK1x0XHQgKiB0aGUgcGFja2V0LCBldmVuIGlmIHdlIG9ubHkgZmlsbGVkIHBhcnQgb2YgaXQgaW4gdGhlIGJ1ZmZlcnMuXG4rXHRcdCAqIEFkanVzdCB0aGUgcmV0dXJuZWQgc2l6ZSB0byBjb25zdW1lIG9ubHkgdGhlIHJlYWwgcGFydCBvZiB0aGVcbitcdFx0ICogYnVmZmVyLlxuK1x0XHQgKi9cbitcdFx0Y29uc3VtZWQgPSByZXQ7XG4rXHRcdGlmIChyZXQgXHUwMDNlIGxlbilcbitcdFx0XHRjb25zdW1lZCA9IGxlbjtcbiBcdH1cbiBcbiBcdGlmIChyZXQgXHUwMDNjIG1pbl9yZXQpIHtcbkBAIC0xMDk4LDcgKzExMDgsNyBAQCBpbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0XHRpb19rYnVmX3JlY3ljbGUocmVxLCBzZWwuYnVmX2xpc3QsIGlzc3VlX2ZsYWdzKTtcbiBcbiBcdHNlbC52YWwgPSByZXQ7XG4tXHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MpKVxuK1x0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzLCBjb25zdW1lZCkpXG4gXHRcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xuIFxuIFx0cmV0dXJuIHNlbC52YWw7XG5AQCAtMTEwOCw2ICsxMTE4LDcgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2dcbiBcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xuK1x0c2l6ZV90IGxlbjtcbiBcdGludCByZXQ7XG4gXG4gXHQvKlxuQEAgLTExNTMsMTMgKzExNjQsMTQgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2dcbiBcdFx0Lyogc3BlY2lhbCBjYXNlIDEgdmVjLCBjYW4gYmUgYSBmYXN0IHBhdGggKi9cbiBcdFx0aWYgKHJldCA9PSAxKSB7XG4gXHRcdFx0c3ItXHUwMDNlYnVmID0gYXJnLmlvdnNbMF0uaW92X2Jhc2U7XG4tXHRcdFx0c3ItXHUwMDNlbGVuID0gYXJnLmlvdnNbMF0uaW92X2xlbjtcbitcdFx0XHRsZW4gPSBzci1cdTAwM2VsZW4gPSBhcmcuaW92c1swXS5pb3ZfbGVuO1xuIFx0XHRcdGdvdG8gbWFwX3VidWY7XG4gXHRcdH1cbiBcdFx0aW92X2l0ZXJfaW5pdChcdTAwMjZrbXNnLVx1MDAzZW1zZy5tc2dfaXRlciwgSVRFUl9ERVNULCBhcmcuaW92cywgcmV0LFxuLVx0XHRcdFx0YXJnLm91dF9sZW4pO1xuK1x0XHRcdCAgICAgIGFyZy5vdXRfbGVuKTtcbitcdFx0bGVuID0gYXJnLm91dF9sZW47XG4gXHR9IGVsc2Uge1xuLVx0XHRzaXplX3QgbGVuID0gc2VsLVx1MDAzZXZhbDtcbitcdFx0bGVuID0gc2VsLVx1MDAzZXZhbDtcbiBcbiBcdFx0KnNlbCA9IGlvX2J1ZmZlcl9zZWxlY3QocmVxLCBcdTAwMjZsZW4sIHNyLVx1MDAzZWJ1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpO1xuIFx0XHRpZiAoIXNlbC1cdTAwM2VhZGRyKVxuQEAgLTExNzMsNyArMTE4NSw3IEBAIHN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIGxlbjtcbiB9XG4gXG4gaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbkBAIC0xMTg0LDYgKzExOTYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbiBcdHVuc2lnbmVkIGZsYWdzO1xuIFx0aW50IHJldCwgbWluX3JldCA9IDA7XG4rXHRzaXplX3QgY29uc3VtZWQgPSAwLCBsZW4gPSAwO1xuIFx0Ym9vbCBmb3JjZV9ub25ibG9jayA9IGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xuIFx0Ym9vbCBtc2hvdF9maW5pc2hlZDtcbiBcbkBAIC0xMjEzLDYgKzEyMjYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFxuIHJldHJ5X211bHRpc2hvdDpcbiBcdHNlbC5idWZfbGlzdCA9IE5VTEw7XG4rXHRsZW4gPSBzci1cdTAwM2VsZW47XG4gXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XG4gXHRcdHNlbC52YWwgPSBzci1cdTAwM2VsZW47XG4gXHRcdHJldCA9IGlvX3JlY3ZfYnVmX3NlbGVjdChyZXEsIGttc2csIFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xuQEAgLTEyMjAsNiArMTIzNCw3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXHRcdFx0a21zZy1cdTAwM2Vtc2cubXNnX2lucSA9IC0xO1xuIFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHRcdH1cbitcdFx0bGVuID0gcmV0O1xuIFx0XHRzci1cdTAwM2VidWYgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTEyNTAsNiArMTI2NSwxNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0fVxuIFxuIFx0bXNob3RfZmluaXNoZWQgPSByZXQgXHUwMDNjPSAwO1xuK1xuK1x0LypcbitcdCAqIFdpdGggTVNHX1RSVU5DLCB0aGUgbmV0IGxheWVyIHdpbGwgcmV0dXJuIHRoZSBmdWxsIHNpemUgb2ZcbitcdCAqIHRoZSBwYWNrZXQsIGV2ZW4gaWYgd2Ugb25seSBmaWxsZWQgcGFydCBvZiBpdCBpbiB0aGUgYnVmZmVycy5cbitcdCAqIEFkanVzdCB0aGUgcmV0dXJuZWQgc2l6ZSB0byBjb25zdW1lIG9ubHkgdGhlIHJlYWwgcGFydCBvZiB0aGVcbitcdCAqIGJ1ZmZlci5cbitcdCAqL1xuK1x0Y29uc3VtZWQgPSByZXQ7XG4rXHRpZiAocmV0IFx1MDAzZSBsZW4pXG4rXHRcdGNvbnN1bWVkID0gbGVuO1xuK1xuIFx0aWYgKHJldCBcdTAwM2UgMClcbiBcdFx0cmV0ICs9IHNyLVx1MDAzZWRvbmVfaW87XG4gXHRlbHNlIGlmIChzci1cdTAwM2Vkb25lX2lvKVxuQEAgLTEyNTgsNyArMTI4NCw3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXHRcdGlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpO1xuIFxuIFx0c2VsLnZhbCA9IHJldDtcbi1cdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpXG4rXHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MsIGNvbnN1bWVkKSlcbiBcdFx0Z290byByZXRyeV9tdWx0aXNob3Q7XG4gXG4gXHRyZXR1cm4gc2VsLnZhbDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjI4Ljk2NTU4NDM2MloiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDc4MjYxNjc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqS01TQU4gRnV6emluZyBEZWNpc2lvbjogSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiBLTVNBTiBmdXp6aW5nIGlzIHdhcnJhbnRlZCBmb3IgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBmaXJzdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyAqd2hhdCogdGhpcyBwYXRjaCBpcyB0cnlpbmcgdG8gZG8gYW5kICp3aHkqIGl0J3MgYmVlbiBwcm9wb3NlZC5cblxuVGhlIGZhY3QgdGhhdCBpdCdzIGxvY2F0ZWQgaW4gYGlvX3VyaW5nL25ldC5jYCBpcyB0aGUgZmlyc3Qga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGF0IG5hcnJvd3MgdGhlIGZvY3VzIGNvbnNpZGVyYWJseS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoYXQgc3BlY2lmaWMgZmlsZS4gSSdsbCBwcm9iYWJseSBmaXJlIHVwIGdyZXBwZXIgb3IganVzdCByZWFkIHRoZSBmaWxlIGRpcmVjdGx5LCBkZXBlbmRpbmcgb24gaG93IGZhbWlsaWFyIEkgYW0gd2l0aCB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuIFRoZSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucyB3aXRoaW4gYGlvX3VyaW5nL25ldC5jYCwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGVpciBsb2dpYywgaWRlbnRpZnkgcG90ZW50aWFsIGRhdGEgcmFjZXMsIG1lbW9yeSBjb3JydXB0aW9uLCBvciBvdGhlciB2dWxuZXJhYmlsaXRpZXMgdGhhdCBjb3VsZCBiZSBleHBvc2VkLiBXaXRoIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcGF0Y2ggYW5kIGl0cyBjb250ZXh0LCBJIGNhbiBtYWtlIGFuIGluZm9ybWVkIGRlY2lzaW9uIGFib3V0IHRoZSBuZWNlc3NpdHkgb2YgS01TQU4gZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMxNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjc6MzkuNzQ4MjA1NjU0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9uZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NTA6XFx0ICogUmV0dXJucyB0cnVlIGlmIGl0IGlzIGFjdHVhbGx5IGZpbmlzaGVkLCBvciBmYWxzZSBpZiBpdCBzaG91bGQgcnVuXFxuIDg1MTpcXHQgKiBhZ2FpbiAoZm9yIG11bHRpc2hvdCkuXFxuIDg1MjpcXHQgKi9cXG4gODUzOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4gODU0OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcXG4gODU1OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCBib29sIG1zaG90X2ZpbmlzaGVkLFxcbiA4NTY6XFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpc3N1ZV9mbGFncywgc2l6ZV90IGNvbnN1bWVkKVxcbiA4NTc6XFx0e1xcbiA4NTg6XFx0XFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcXG4gODU5OlxcdFxcdHVuc2lnbmVkIGludCBjZmxhZ3MgPSAwO1xcbiA4NjA6XFx0XFxuIDg2MTpcXHRcXHRpZiAoa21zZy1cXHUwMDNlbXNnLm1zZ19pbnEgXFx1MDAzZSAwKVxcbiA4NjI6XFx0XFx0XFx0Y2ZsYWdzIHw9IElPUklOR19DUUVfRl9TT0NLX05PTkVNUFRZO1xcbiA4NjM6XFx0XFxuIDg2NDpcXHRcXHRpZiAoc2VsLVxcdTAwM2V2YWwgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWX01TSE9UX0xJTSkge1xcbiA4NjU6XFx0XFx0XFx0LypcXG4gODY2OlxcdFxcdFxcdCAqIElmIHNyLVxcdTAwM2VsZW4gaGl0cyB6ZXJvLCB0aGUgbGltaXQgaGFzIGJlZW4gcmVhY2hlZC4gTWFya1xcbiA4Njc6XFx0XFx0XFx0ICogbXNob3QgYXMgZmluaXNoZWQsIGFuZCBmbGFnIE1TSE9UX0RPTkUgYXMgd2VsbCB0byBwcmV2ZW50XFxuIDg2ODpcXHRcXHRcXHQgKiBhIHBvdGVudGlhbCBidW5kbGUgZnJvbSBiZWluZyByZXRyaWVkLlxcbiA4Njk6XFx0XFx0XFx0ICovXFxuIDg3MDpcXHRcXHRcXHRzci1cXHUwMDNlbXNob3RfdG90YWxfbGVuIC09IG1pbl90KGludCwgc2VsLVxcdTAwM2V2YWwsIHNyLVxcdTAwM2Vtc2hvdF90b3RhbF9sZW4pO1xcbiA4NzE6XFx0XFx0XFx0aWYgKCFzci1cXHUwMDNlbXNob3RfdG90YWxfbGVuKSB7XFxuIDg3MjpcXHRcXHRcXHRcXHRzci1cXHUwMDNlZmxhZ3MgfD0gSU9SSU5HX1JFQ1ZfTVNIT1RfRE9ORTtcXG4gODczOlxcdFxcdFxcdFxcdG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcXG4gODc0OlxcdFxcdFxcdH1cXG4gODc1OlxcdFxcdH1cXG4gODc2OlxcdFxcbiA4Nzc6XFx0XFx0aWYgKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHtcXG4gODc4OlxcdFxcdFxcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cXHUwMDNldmFsIC0gc3ItXFx1MDAzZWRvbmVfaW87XFxuIDg3OTpcXHRcXG4gODgwOlxcdFxcdFxcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCBjb25zdW1lZCwgc2VsLVxcdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIGNvbnN1bWVkKSk7XFxuIDg4MTpcXHRcXHRcXHRpZiAoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXFxuIDg4MjpcXHRcXHRcXHRcXHRjZmxhZ3MgPSByZXEtXFx1MDAzZWNxZS5mbGFncyB8IChjZmxhZ3MgXFx1MDAyNiBDUUVfRl9NQVNLKTtcXG4gODgzOlxcdFxcdFxcdGlmIChzci1cXHUwMDNlbXNob3RfbGVuIFxcdTAwMjZcXHUwMDI2IHNlbC1cXHUwMDNldmFsIFxcdTAwM2U9IHNyLVxcdTAwM2Vtc2hvdF9sZW4pXFxuIDg4NDpcXHRcXHRcXHRcXHRzci1cXHUwMDNlZmxhZ3MgfD0gSU9SSU5HX1JFQ1ZfTVNIT1RfQ0FQO1xcbiA4ODU6XFx0XFx0XFx0LyogYnVuZGxlIHdpdGggbm8gbW9yZSBpbW1lZGlhdGUgYnVmZmVycywgd2UncmUgZG9uZSAqL1xcbiA4ODY6XFx0XFx0XFx0aWYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9CTF9FTVBUWSlcXG4gODg3OlxcdFxcdFxcdFxcdGdvdG8gZmluaXNoO1xcbiA4ODg6XFx0XFx0XFx0LypcXG4gODg5OlxcdFxcdFxcdCAqIElmIG1vcmUgaXMgYXZhaWxhYmxlIEFORCBpdCB3YXMgYSBmdWxsIHRyYW5zZmVyLCByZXRyeSBhbmRcXG4gODkwOlxcdFxcdFxcdCAqIGFwcGVuZCB0byB0aGlzIG9uZVxcbiA4OTE6XFx0XFx0XFx0ICovXFxuIDg5MjpcXHRcXHRcXHRpZiAoIShzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVl9OT19SRVRSWSkgXFx1MDAyNlxcdTAwMjZcXG4gODkzOlxcdFxcdFxcdCAgICBrbXNnLVxcdTAwM2Vtc2cubXNnX2lucSBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgdGhpc19yZXQgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuIDg5NDpcXHRcXHRcXHQgICAgIWlvdl9pdGVyX2NvdW50KFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIpKSB7XFxuIDg5NTpcXHRcXHRcXHRcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyA9IGNmbGFncyBcXHUwMDI2IH5DUUVfRl9NQVNLO1xcbiA4OTY6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWxlbiA9IGttc2ctXFx1MDAzZW1zZy5tc2dfaW5xO1xcbiA4OTc6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWRvbmVfaW8gKz0gdGhpc19yZXQ7XFxuIDg5ODpcXHRcXHRcXHRcXHRzci1cXHUwMDNlZmxhZ3MgfD0gSU9SSU5HX1JFQ1ZfUkVUUlk7XFxuIDg5OTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDkwMDpcXHRcXHRcXHR9XFxuIDkwMTpcXHRcXHR9IGVsc2Uge1xcbiA5MDI6XFx0XFx0XFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgY29uc3VtZWQsIHNlbC1cXHUwMDNlYnVmX2xpc3QpO1xcbiA5MDM6XFx0XFx0fVxcbiA5MDQ6XFx0XFxuIDkwNTpcXHRcXHQvKlxcbiA5MDY6XFx0XFx0ICogRmlsbCBDUUUgZm9yIHRoaXMgcmVjZWl2ZSBhbmQgc2VlIGlmIHdlIHNob3VsZCBrZWVwIHRyeWluZyB0b1xcbiA5MDc6XFx0XFx0ICogcmVjZWl2ZSBmcm9tIHRoaXMgc29ja2V0LlxcbiA5MDg6XFx0XFx0ICovXFxuIDkwOTpcXHRcXHRpZiAoKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpIFxcdTAwMjZcXHUwMDI2ICFtc2hvdF9maW5pc2hlZCBcXHUwMDI2XFx1MDAyNlxcbiA5MTA6XFx0XFx0ICAgIGlvX3JlcV9wb3N0X2NxZShyZXEsIHNlbC1cXHUwMDNldmFsLCBjZmxhZ3MgfCBJT1JJTkdfQ1FFX0ZfTU9SRSkpIHtcXG4gOTExOlxcdFxcdFxcdHNlbC1cXHUwMDNldmFsID0gSU9VX1JFVFJZO1xcbiA5MTI6XFx0XFx0XFx0aW9fbXNob3RfcHJlcF9yZXRyeShyZXEsIGttc2cpO1xcbiA5MTM6XFx0XFx0XFx0LyogS25vd24gbm90LWVtcHR5IG9yIHVua25vd24gc3RhdGUsIHJldHJ5ICovXFxuIDkxNDpcXHRcXHRcXHRpZiAoY2ZsYWdzIFxcdTAwMjYgSU9SSU5HX0NRRV9GX1NPQ0tfTk9ORU1QVFkgfHwga21zZy1cXHUwMDNlbXNnLm1zZ19pbnEgXFx1MDAzYyAwKSB7XFxuIDkxNTpcXHRcXHRcXHRcXHRpZiAoc3ItXFx1MDAzZW5yX211bHRpc2hvdF9sb29wcysrIFxcdTAwM2MgTVVMVElTSE9UX01BWF9SRVRSWSBcXHUwMDI2XFx1MDAyNlxcbiA5MTY6XFx0XFx0XFx0XFx0ICAgICEoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZfTVNIT1RfQ0FQKSkge1xcbiA5MTc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5MTg6XFx0XFx0XFx0XFx0fVxcbiA5MTk6XFx0XFx0XFx0XFx0LyogbXNob3QgcmV0cmllcyBleGNlZWRlZCwgZm9yY2UgYSByZXF1ZXVlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjM5Ljc0ODM5Nzc5NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDE2MTk3NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGZvY3VzaW5nIG9uIHRoZSBjb3JlIHByb2JsZW06XG5cbioqRGVsdmluZyBpbnRvIGBpb19wdXRfa2J1ZnNgIGFuZCBpdHMgVmFyaWF0aW9ucyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgaW9fcHV0X2tidWZzYCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIHNpbXBsZXIgYGlvX3B1dF9rYnVmYCB2YXJpYW50cyBoYW5kbGUgdGhhdCBzZWNvbmQgYXJndW1lbnQuIEl0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGJ1ZmZlciBtYW5hZ2VtZW50IGFuZCByZXNvdXJjZSBoYW5kbGluZyBpbiB0aGlzIGNvbnRleHQuIEknbSBzZWVpbmcgYGNvbnN1bWVkYCwgYHNlbC1cdTAwM2V2YWxgLCBhbmQgYHRoaXNfcmV0YCBmbG9hdGluZyBhcm91bmQgYXMgcG9zc2liaWxpdGllcyBmb3IgdGhhdCBzZWNvbmQgYXJndW1lbnQsIGFuZCB0aGF04oCZcyB3aGVyZSB0aGUgZGV0YWlsIGlzIGxpa2VseSBoaWRkZW4uIEkgaW1tZWRpYXRlbHkgd2FudCB0byBkaWZmZXJlbnRpYXRlIHdoYXQgZWFjaCBvZiB0aG9zZSB2YXJpYWJsZXMgbWVhbnMgdG8gdGhlIG92ZXJhbGwgYmVoYXZpb3Igb2YgdGhlIGZ1bmN0aW9uLCBhbmQgSSdtIGd1ZXNzaW5nIHRoYXQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGZ1bmN0aW9ucyBhcmUgcHJvYmFibHkganVzdCB0aGF0IHNlY29uZCBhcmd1bWVudCwgb3IgYXQgbGVhc3QgdGhleSdyZSBrZXkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IHJlcHJlc2VudHMgYnl0ZXMgKmNvbnN1bWVkKiwgc29tZSBraW5kIG9mICpzZWxlY3Rpb24gdmFsdWUqLCBvciBhICpyZXR1cm4gdmFsdWUqIHRoYXQncyBiZWVuIHBhcnRpYWxseSBoYW5kbGVkLiBUaGUgaW1wbGljYXRpb25zIGZvciB0aGUgYnVmZmVyIGxpZmVjeWNsZSBhbmQgcmVzb3VyY2UgZGVhbGxvY2F0aW9uIGFyZSBzdWJzdGFudGlhbCBkZXBlbmRpbmcgb24gd2hpY2ggaXQgaXMhIFRoaXMgYW5hbHlzaXMgaXMgY3J1Y2lhbCB0byBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHByZWNpc2UgbWVtb3J5IG1hbmFnZW1lbnQgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjQyLjc2NDU5OTE5NloiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0MDg2MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcHV0X2tidWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2lvX3VyaW5nLmM9OTQ4PXZvaWQgaW9fcmVxX2RlZmVyX2ZhaWxlZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgczMyIHJlcylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTU1LVxcdHJlcV9zZXRfZmFpbChyZXEpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6OTU2OlxcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmVzLCBpb19wdXRfa2J1ZihyZXEsIHJlcywgTlVMTCkpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTU3LVxcdGlmIChkZWYtXFx1MDAzZWZhaWwpXFxuLS1cXG5pb191cmluZy9rYnVmLmM9MzgxPWludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTQwNi1cXG5pb191cmluZy9rYnVmLmM6NDA3OnN0YXRpYyBpbmxpbmUgYm9vbCBfX2lvX3B1dF9rYnVmX3Jpbmcoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcva2J1Zi5jLTQwOC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbGVuLCBpbnQgbnIpXFxuLS1cXG5pb191cmluZy9rYnVmLmMtNDIwLVxcbmlvX3VyaW5nL2tidWYuYzo0MjE6dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbmlvX3VyaW5nL2tidWYuYy00MjItXFx0XFx0XFx0ICAgIGludCBsZW4sIGludCBuYnVmcylcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy00MzItXFxuaW9fdXJpbmcva2J1Zi5jOjQzMzpcXHRpZiAoIV9faW9fcHV0X2tidWZfcmluZyhyZXEsIGJsLCBsZW4sIG5idWZzKSlcXG5pb191cmluZy9rYnVmLmMtNDM0LVxcdFxcdHJldCB8PSBJT1JJTkdfQ1FFX0ZfQlVGX01PUkU7XFxuLS1cXG5pb191cmluZy9rYnVmLmg9ODc9dm9pZCBpb19rYnVmX2Ryb3BfbGVnYWN5KHN0cnVjdCBpb19raW9jYiAqcmVxKTtcXG5pb191cmluZy9rYnVmLmgtODgtXFxuaW9fdXJpbmcva2J1Zi5oOjg5OnVuc2lnbmVkIGludCBfX2lvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG5pb191cmluZy9rYnVmLmgtOTAtXFx0XFx0XFx0ICAgIGludCBsZW4sIGludCBuYnVmcyk7XFxuLS1cXG5pb191cmluZy9rYnVmLmg9MTE0PXN0YXRpYyBpbmxpbmUgYm9vbCBpb19rYnVmX3JlY3ljbGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXFxuLS1cXG5pb191cmluZy9rYnVmLmgtMTI1LVxcbmlvX3VyaW5nL2tidWYuaDoxMjY6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fcHV0X2tidWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBsZW4sXFxuaW9fdXJpbmcva2J1Zi5oLTEyNy1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibClcXG4tLVxcbmlvX3VyaW5nL2tidWYuaC0xMzAtXFx0XFx0cmV0dXJuIDA7XFxuaW9fdXJpbmcva2J1Zi5oOjEzMTpcXHRyZXR1cm4gX19pb19wdXRfa2J1ZnMocmVxLCBibCwgbGVuLCAxKTtcXG5pb191cmluZy9rYnVmLmgtMTMyLX1cXG5pb191cmluZy9rYnVmLmgtMTMzLVxcbmlvX3VyaW5nL2tidWYuaDoxMzQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbGVuLFxcbmlvX3VyaW5nL2tidWYuaC0xMzUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IG5idWZzKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5oLTEzOC1cXHRcXHRyZXR1cm4gMDtcXG5pb191cmluZy9rYnVmLmg6MTM5OlxcdHJldHVybiBfX2lvX3B1dF9rYnVmcyhyZXEsIGJsLCBsZW4sIG5idWZzKTtcXG5pb191cmluZy9rYnVmLmgtMTQwLX1cXG4tLVxcbmlvX3VyaW5nL25ldC5jPTQ5MT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9uZXQuYy00OTktXFx0aWYgKCEoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkpIHtcXG5pb191cmluZy9uZXQuYzo1MDA6XFx0XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBzZWwtXFx1MDAzZXZhbCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuaW9fdXJpbmcvbmV0LmMtNTAxLVxcdFxcdGdvdG8gZmluaXNoO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNTAzLVxcbmlvX3VyaW5nL25ldC5jOjUwNDpcXHRjZmxhZ3MgPSBpb19wdXRfa2J1ZnMocmVxLCBzZWwtXFx1MDAzZXZhbCwgc2VsLVxcdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHNlbC1cXHUwMDNldmFsKSk7XFxuaW9fdXJpbmcvbmV0LmMtNTA1LVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9ODUzPXN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTg3OS1cXG5pb191cmluZy9uZXQuYzo4ODA6XFx0XFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIGNvbnN1bWVkLCBzZWwtXFx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgY29uc3VtZWQpKTtcXG5pb191cmluZy9uZXQuYy04ODEtXFx0XFx0aWYgKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtOTAxLVxcdH0gZWxzZSB7XFxuaW9fdXJpbmcvbmV0LmM6OTAyOlxcdFxcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIGNvbnN1bWVkLCBzZWwtXFx1MDAzZWJ1Zl9saXN0KTtcXG5pb191cmluZy9uZXQuYy05MDMtXFx0fVxcbi0tXFxuaW9fdXJpbmcvcncuYz01NjI9dm9pZCBpb19yZXFfcndfY29tcGxldGUoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuLS1cXG5pb191cmluZy9ydy5jLTU2OC1cXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IChSRVFfRl9CVUZGRVJfU0VMRUNURUR8UkVRX0ZfQlVGRkVSX1JJTkcpKVxcbmlvX3VyaW5nL3J3LmM6NTY5OlxcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xcbmlvX3VyaW5nL3J3LmMtNTcwLVxcbi0tXFxuaW9fdXJpbmcvcncuYz02NDA9c3RhdGljIGludCBraW9jYl9kb25lKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzc2l6ZV90IHJldCxcXG4tLVxcbmlvX3VyaW5nL3J3LmMtNjU3LVxcdFxcdGlmIChzZWwpXFxuaW9fdXJpbmcvcncuYzo2NTg6XFx0XFx0XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCByZXQsIHNlbC1cXHUwMDNlYnVmX2xpc3QpO1xcbmlvX3VyaW5nL3J3LmMtNjU5LVxcdFxcdGlvX3JlcV9zZXRfcmVzKHJlcSwgZmluYWxfcmV0LCBjZmxhZ3MpO1xcbi0tXFxuaW9fdXJpbmcvcncuYz0xMDMyPWludCBpb19yZWFkX21zaG90KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9ydy5jLTEwNjctXFx0fSBlbHNlIGlmICghKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpKSB7XFxuaW9fdXJpbmcvcncuYzoxMDY4OlxcdFxcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgcmV0LCBzZWwuYnVmX2xpc3QpO1xcbmlvX3VyaW5nL3J3LmMtMTA2OS1cXHR9IGVsc2Uge1xcbi0tXFxuaW9fdXJpbmcvcncuYy0xMDc1LVxcdFxcdCAqL1xcbmlvX3VyaW5nL3J3LmM6MTA3NjpcXHRcXHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHJldCwgc2VsLmJ1Zl9saXN0KTtcXG5pb191cmluZy9ydy5jLTEwNzctXFx0XFx0cnctXFx1MDAzZWxlbiA9IDA7IC8qIHNpbWlsYXJseSB0byBhYm92ZSwgcmVzZXQgbGVuIHRvIDAgKi9cXG4tLVxcbmlvX3VyaW5nL3J3LmM9MTMxOT1pbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pXFxuLS1cXG5pb191cmluZy9ydy5jLTEzNzUtXFx0XFx0bnJfZXZlbnRzKys7XFxuaW9fdXJpbmcvcncuYzoxMzc2OlxcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVxcdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XFxuaW9fdXJpbmcvcncuYy0xMzc3LVxcdFxcdGlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpXFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYz0zODc9Ym9vbCBpb191cmluZ19tc2hvdF9jbWRfcG9zdF9jcWUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzk2LVxcdGlmIChzZWwtXFx1MDAzZXZhbCBcXHUwMDNlIDApIHtcXG5pb191cmluZy91cmluZ19jbWQuYzozOTc6XFx0XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBzZWwtXFx1MDAzZXZhbCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzk4LVxcdFxcdGlmIChpb19yZXFfcG9zdF9jcWUocmVxLCBzZWwtXFx1MDAzZXZhbCwgY2ZsYWdzIHwgSU9SSU5HX0NRRV9GX01PUkUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzoyNzo0Mi44MTcwMjg0NTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUwMTY0NzQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQgYW5hbHlzaXMsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGlvX3VyaW5nL2tidWYuYyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Uga2VybmVsIGJ1ZmZlcnMgYXJlIG1hbmFnZWQgd2l0aGluIGBpb191cmluZ2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHR3byBmdW5jdGlvbnM6IGBfX2lvX3B1dF9rYnVmX3JpbmdgIGFuZCBgX19pb19wdXRfa2J1ZnNgLiBJIHN1c3BlY3QgdGhlc2UgYXJlIGNyaXRpY2FsIGZvciBidWZmZXIgcmVsZWFzZSBhbmQgcmV1c2UsIHdoaWNoIGlzIGFsd2F5cyBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgaW4gSS9PIHN5c3RlbXMuIEkgd2FudCB0byBzZWUgaG93IHRoZSByaW5nIGJ1ZmZlciBpbnRlcmFjdGlvbiB3b3JrcyBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBsb2NraW5nIGNvbnRlbnRpb24gcG9pbnRzIG9yIGluZWZmaWNpZW5jaWVzIGluIGBfX2lvX3B1dF9rYnVmc2AuIEnigJltIGV4cGVjdGluZyB0aGVzZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBsaWZldGltZSBvZiB0aGUga2J1ZnMgYW5kIHRyYWNrIHRoZWlyIGF2YWlsYWJpbGl0eSBpbiB0aGUgc3lzdGVtLiBUaGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMgaGVyZSwgc28gbGV0J3Mgc3RhcnQgZGlnZ2luZyBhbmQgc2VlIHdoYXQgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgaXNzdWVzIG1pZ2h0IGJlIGhpZGluZyBpbiB0aGVyZS4gR290dGEgY2hlY2sgaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIHN1Ym1pc3Npb24gcXVldWUgcHJvY2Vzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMzNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjQ1LjMxODY3ODMzN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9rYnVmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDA1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDA1OlxcdH1cXG4gNDA2OlxcdFxcbiA0MDc6XFx0c3RhdGljIGlubGluZSBib29sIF9faW9fcHV0X2tidWZfcmluZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4gNDA4OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBsZW4sIGludCBucilcXG4gNDA5OlxcdHtcXG4gNDEwOlxcdFxcdGJvb2wgcmV0ID0gdHJ1ZTtcXG4gNDExOlxcdFxcbiA0MTI6XFx0XFx0aWYgKGJsKVxcbiA0MTM6XFx0XFx0XFx0cmV0ID0gaW9fa2J1Zl9jb21taXQocmVxLCBibCwgbGVuLCBucik7XFxuIDQxNDpcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQlVGX01PUkUpKVxcbiA0MTU6XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxuIDQxNjpcXHRcXG4gNDE3OlxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfihSRVFfRl9CVUZGRVJfUklORyB8IFJFUV9GX0JVRl9NT1JFKTtcXG4gNDE4OlxcdFxcdHJldHVybiByZXQ7XFxuIDQxOTpcXHR9XFxuIDQyMDpcXHRcXG4gNDIxOlxcdHVuc2lnbmVkIGludCBfX2lvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG4gNDIyOlxcdFxcdFxcdFxcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpXFxuIDQyMzpcXHR7XFxuIDQyNDpcXHRcXHR1bnNpZ25lZCBpbnQgcmV0O1xcbiA0MjU6XFx0XFxuIDQyNjpcXHRcXHRyZXQgPSBJT1JJTkdfQ1FFX0ZfQlVGRkVSIHwgKHJlcS1cXHUwMDNlYnVmX2luZGV4IFxcdTAwM2NcXHUwMDNjIElPUklOR19DUUVfQlVGRkVSX1NISUZUKTtcXG4gNDI3OlxcdFxcbiA0Mjg6XFx0XFx0aWYgKHVubGlrZWx5KCEocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0JVRkZFUl9SSU5HKSkpIHtcXG4gNDI5OlxcdFxcdFxcdGlvX2tidWZfZHJvcF9sZWdhY3kocmVxKTtcXG4gNDMwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDQzMTpcXHRcXHR9XFxuIDQzMjpcXHRcXG4gNDMzOlxcdFxcdGlmICghX19pb19wdXRfa2J1Zl9yaW5nKHJlcSwgYmwsIGxlbiwgbmJ1ZnMpKVxcbiA0MzQ6XFx0XFx0XFx0cmV0IHw9IElPUklOR19DUUVfRl9CVUZfTU9SRTtcXG4gNDM1OlxcdFxcdHJldHVybiByZXQ7XFxuIDQzNjpcXHR9XFxuIDQzNzpcXHRcXG4gNDM4OlxcdHN0YXRpYyBpbnQgaW9fcmVtb3ZlX2J1ZmZlcnNfbGVnYWN5KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbiA0Mzk6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXFxuIDQ0MDpcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBuYnVmcylcXG4gNDQxOlxcdHtcXG4gNDQyOlxcdFxcdHVuc2lnbmVkIGxvbmcgaSA9IDA7XFxuIDQ0MzpcXHRcXHRzdHJ1Y3QgaW9fYnVmZmVyICpueHQ7XFxuIDQ0NDpcXHRcXG4gNDQ1OlxcdFxcdC8qIHByb3RlY3RzIGlvX2J1ZmZlcnNfY2FjaGUgKi9cXG4gNDQ2OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmN0eC1cXHUwMDNldXJpbmdfbG9jayk7XFxuIDQ0NzpcXHRcXHRXQVJOX09OX09OQ0UoYmwtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9CTF9CVUZfUklORyk7XFxuIDQ0ODpcXHRcXG4gNDQ5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuYnVmcyBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShcXHUwMDI2YmwtXFx1MDAzZWJ1Zl9saXN0KTsgaSsrKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjQ1LjMxODc3NzIzN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODE0NDIxNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHBlcnNwZWN0aXZlIG9uIGBpb19rYnVmX2NvbW1pdGA6XG5cbioqTXkgSW50ZXJwcmV0YXRpb24gb2YgYGlvX2tidWZfY29tbWl0YCoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYGlvX2tidWZfY29tbWl0YCwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gZGF0YSBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUga2VybmVsIGZvciBJL08gb3BlcmF0aW9ucywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgaGFuZGxlIHBhY2tldCBidWZmZXJzLiBJJ20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZmluYWxpemluZyBvciBcImNvbW1pdHRpbmdcIiBkYXRhIGludG8gYW4gYGlvX2tidWZgLCBsaWtlbHkgbWVhbmluZyB3ZSdyZSB0YWtpbmcgZGF0YSB0aGF0J3MgYmVlbiBhc3NlbWJsZWQsIHBlcmhhcHMgZnJvbSBtdWx0aXBsZSBzb3VyY2VzLCBhbmQgbWFraW5nIGl0IG9mZmljaWFsbHkgYXZhaWxhYmxlIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcsIHRyYW5zbWlzc2lvbiwgb3Igc3RvcmFnZS5cblxuVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBrZXJuZWwtbGV2ZWwgYnVmZmVyIG1hbmFnZW1lbnQuIEkgZXhwZWN0IGEgZmV3IGNyaXRpY2FsIGFzcGVjdHMgd2lsbCBiZSBpbiBwbGF5IGhlcmUuIEZpcnN0LCBob3cgYXJlIHdlIGhhbmRsaW5nIHRoZSBkYXRhIHBvaW50ZXJzPyBBcmUgd2UgY29uc29saWRhdGluZyBmcmFnbWVudGVkIGJ1ZmZlcnMsIG9yIG1lcmVseSBtYXJraW5nIHRoZSBlbmQgb2YgdGhlIHZhbGlkIGRhdGE/IFNlY29uZCwgZXJyb3IgaGFuZGxpbmcgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50LiBEb2VzIHRoaXMgZnVuY3Rpb24gcmV0dXJuIHN0YXR1cyBjb2RlcyB0byBpbmRpY2F0ZSBzdWNjZXNzIG9yIGZhaWx1cmUsIGFuZCB3aGF0IGFyZSB0aGUgcG9zc2libGUgZmFpbHVyZSBzY2VuYXJpb3MgKGJ1ZmZlciBvdmVyZmxvd3MsIGludmFsaWQgcG9pbnRlcnMsIGV0Yy4pPyBUaGlyZCwgYW55IG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucyBhcmUgZ29pbmcgdG8gYmUga2V5LiBJcyB0aGlzIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHVwIGFueSBhbGxvY2F0ZWQgYnVmZmVycz8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIHJlZmVyZW5jZSBjb3VudGluZz9cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHRvby4gSXMgdGhpcyBhIGNyaXRpY2FsIHBhdGggZnVuY3Rpb24gdGhhdCBpcyBnb2luZyB0byBiZSBpbnZva2VkIGZyZXF1ZW50bHksIGVzcGVjaWFsbHkgaW4gaGlnaC10aHJvdWdocHV0IG5ldHdvcmsgc2NlbmFyaW9zPyBJZiBzbywgZXZlcnkgaW5zdHJ1Y3Rpb24gY291bnRzLiBJdCdsbCBiZSBpbXBvcnRhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3B0aW1pemF0aW9ucyBpbiBwbGFjZSB0byBtaW5pbWl6ZSBvdmVyaGVhZC4gSSdkIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGlubGluZSBhc3NlbWJseSwgY2FyZWZ1bCBwb2ludGVyIGFyaXRobWV0aWMsIG9yIHBlcmhhcHMgbG9jay1mcmVlIHRlY2huaXF1ZXMgaWYgdGhlcmUncyBhbnkgY29uY3VycmVudCBhY2Nlc3MgaW52b2x2ZWQuXG5cbkZpbmFsbHksIHdoYXQncyB0aGUgYnJvYWRlciBjb250ZXh0PyBXaGF0IGlzIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGFuZCB3aGF0IGFyZSB0aGUgc3Vic2VxdWVudCBmdW5jdGlvbiBjYWxscz8gVW5kZXJzdGFuZGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUgd2lsbCBoZWxwIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgaW9fa2J1ZmAgaXMgYWN0dWFsbHkgdXNlZCBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjUwLjEzMzIwMTk5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4NzkyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fa2J1Zl9jb21taXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2tidWYuYz0zNj1zdGF0aWMgYm9vbCBpb19rYnVmX2luY19jb21taXQoc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IGxlbilcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy02Mi1cXG5pb191cmluZy9rYnVmLmM6NjM6Ym9vbCBpb19rYnVmX2NvbW1pdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG5pb191cmluZy9rYnVmLmMtNjQtXFx0XFx0ICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBsZW4sIGludCBucilcXG4tLVxcbmlvX3VyaW5nL2tidWYuYz0xOTM9c3RhdGljIHN0cnVjdCBpb19icl9zZWwgaW9fcmluZ19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy0yMjMtXFx0aWYgKGlvX3Nob3VsZF9jb21taXQocmVxLCBpc3N1ZV9mbGFncykpIHtcXG5pb191cmluZy9rYnVmLmM6MjI0OlxcdFxcdGlmICghaW9fa2J1Zl9jb21taXQocmVxLCBzZWwuYnVmX2xpc3QsICpsZW4sIDEpKVxcbmlvX3VyaW5nL2tidWYuYy0yMjUtXFx0XFx0XFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9CVUZfTU9SRTtcXG4tLVxcbmlvX3VyaW5nL2tidWYuYz0zNDU9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy0zNjYtXFx0XFx0XFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9CVUZGRVJTX0NPTU1JVCB8IFJFUV9GX0JMX05PX1JFQ1lDTEU7XFxuaW9fdXJpbmcva2J1Zi5jOjM2NzpcXHRcXHRcXHRpZiAoIWlvX2tidWZfY29tbWl0KHJlcSwgc2VsLVxcdTAwM2VidWZfbGlzdCwgYXJnLVxcdTAwM2VvdXRfbGVuLCByZXQpKVxcbmlvX3VyaW5nL2tidWYuYy0zNjgtXFx0XFx0XFx0XFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9CVUZfTU9SRTtcXG4tLVxcbmlvX3VyaW5nL2tidWYuYz00MDc9c3RhdGljIGlubGluZSBib29sIF9faW9fcHV0X2tidWZfcmluZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy00MTItXFx0aWYgKGJsKVxcbmlvX3VyaW5nL2tidWYuYzo0MTM6XFx0XFx0cmV0ID0gaW9fa2J1Zl9jb21taXQocmVxLCBibCwgbGVuLCBucik7XFxuaW9fdXJpbmcva2J1Zi5jLTQxNC1cXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQlVGX01PUkUpKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5oPTg5PXVuc2lnbmVkIGludCBfX2lvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG5pb191cmluZy9rYnVmLmgtOTAtXFx0XFx0XFx0ICAgIGludCBsZW4sIGludCBuYnVmcyk7XFxuaW9fdXJpbmcva2J1Zi5oOjkxOmJvb2wgaW9fa2J1Zl9jb21taXQoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcva2J1Zi5oLTkyLVxcdFxcdCAgICBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbGVuLCBpbnQgbnIpO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NDgyPXN0YXRpYyBpbnQgaW9fbmV0X2tidWZfcmVjeWxlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNDg2LVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpXFxuaW9fdXJpbmcvbmV0LmM6NDg3OlxcdFxcdGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpO1xcbmlvX3VyaW5nL25ldC5jLTQ4OC1cXHRyZXR1cm4gSU9VX1JFVFJZO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzoyNzo1MC4xODEwODc2MTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY2ODY4Njc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gaW9fa2J1Zl9jb21taXQqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGZvY3VzaW5nIGluIG9uIGBpb19rYnVmX2NvbW1pdGAgd2l0aGluIGBpb191cmluZy9rYnVmLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT9cIiBUaGlzIGlzbid0IGp1c3QgYSBnZW5lcmljIGNvbW1pdCBmdW5jdGlvbjsgaXQncyBzcGVjaWZpYyB0byB0aGUga2VybmVsIGJ1ZmZlciBtYW5hZ2VtZW50IHdpdGhpbiBpb191cmluZywgYW5kIHRoYXQgaGFzIGFsbCBzb3J0cyBvZiBpbXBsaWNhdGlvbnMgcmVnYXJkaW5nIHBlcmZvcm1hbmNlLCBjb25jdXJyZW5jeSwgYW5kIGVycm9yIGhhbmRsaW5nIHRoYXQgYXJlIGNydWNpYWwgdG8gdW5wYWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbW1pdHMgYXJlIGJlaW5nIG9yY2hlc3RyYXRlZCwgd2hvIGNhbGxzIGl0LCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCB3b3JrZmxvdyBsb29rcyBsaWtlIGFyb3VuZCB0aGlzIGZ1bmN0aW9uLiBBcmUgd2UgdGFsa2luZyBhYm91dCBwdXNoaW5nIGRhdGEgZnJvbSBhIHVzZXItc3BhY2UgYnVmZmVyIGludG8gYSBrZXJuZWwga2J1Zj8gT3IgbWF5YmUgaXQncyB0aGUgb3Bwb3NpdGU/IFVuZGVyc3RhbmRpbmcgdGhlIGRpcmVjdGlvbiBhbmQgcHVycG9zZSBvZiB0aGUgZGF0YSBtb3ZlbWVudCBpcyBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsIGZvciB0aGUgcmVzdCBvZiBteSBpbnZlc3RpZ2F0aW9uLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyB0aGlzIGZ1bmN0aW9uIHdvcmtzIHdpdGg/IEnigJltIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYW55IEkvTyBzdWJtaXNzaW9uIHF1ZXVlcywgY29tcGxldGlvbiBxdWV1ZXMsIG9yIGFueSBzb3J0IG9mIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIGxvY2tpbmcsIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24sIGFuZCB3aGF0IHRoZSBzdWNjZXNzL2ZhaWx1cmUgcGF0aHMgYXJlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRoZSBoaWdoLXBlcmZvcm1hbmNlIGRlbWFuZHMgb2YgaW9fdXJpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjc6NTMuODQ5Nzc3NjY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2tidWYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzNTpcXHRcXG4gIDM2OlxcdHN0YXRpYyBib29sIGlvX2tidWZfaW5jX2NvbW1pdChzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbGVuKVxcbiAgMzc6XFx0e1xcbiAgMzg6XFx0XFx0LyogTm8gZGF0YSBjb25zdW1lZCwgcmV0dXJuIGZhbHNlIGVhcmx5IHRvIGF2b2lkIGNvbnN1bWluZyB0aGUgYnVmZmVyICovXFxuICAzOTpcXHRcXHRpZiAoIWxlbilcXG4gIDQwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0d2hpbGUgKGxlbikge1xcbiAgNDM6XFx0XFx0XFx0c3RydWN0IGlvX3VyaW5nX2J1ZiAqYnVmO1xcbiAgNDQ6XFx0XFx0XFx0dTMyIGJ1Zl9sZW4sIHRoaXNfbGVuO1xcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHRcXHRidWYgPSBpb19yaW5nX2hlYWRfdG9fYnVmKGJsLVxcdTAwM2VidWZfcmluZywgYmwtXFx1MDAzZWhlYWQsIGJsLVxcdTAwM2VtYXNrKTtcXG4gIDQ3OlxcdFxcdFxcdGJ1Zl9sZW4gPSBSRUFEX09OQ0UoYnVmLVxcdTAwM2VsZW4pO1xcbiAgNDg6XFx0XFx0XFx0dGhpc19sZW4gPSBtaW5fdCh1MzIsIGxlbiwgYnVmX2xlbik7XFxuICA0OTpcXHRcXHRcXHRidWZfbGVuIC09IHRoaXNfbGVuO1xcbiAgNTA6XFx0XFx0XFx0LyogU3RvcCBsb29waW5nIGZvciBpbnZhbGlkIGJ1ZmZlciBsZW5ndGggb2YgMCAqL1xcbiAgNTE6XFx0XFx0XFx0aWYgKGJ1Zl9sZW4gXFx1MDAzZSBibC1cXHUwMDNlbWluX2xlZnRfc3ViX29uZSB8fCAhdGhpc19sZW4pIHtcXG4gIDUyOlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UoYnVmLVxcdTAwM2VhZGRyLCBSRUFEX09OQ0UoYnVmLVxcdTAwM2VhZGRyKSArIHRoaXNfbGVuKTtcXG4gIDUzOlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UoYnVmLVxcdTAwM2VsZW4sIGJ1Zl9sZW4pO1xcbiAgNTQ6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNTU6XFx0XFx0XFx0fVxcbiAgNTY6XFx0XFx0XFx0V1JJVEVfT05DRShidWYtXFx1MDAzZWxlbiwgMCk7XFxuICA1NzpcXHRcXHRcXHRibC1cXHUwMDNlaGVhZCsrO1xcbiAgNTg6XFx0XFx0XFx0bGVuIC09IHRoaXNfbGVuO1xcbiAgNTk6XFx0XFx0fVxcbiAgNjA6XFx0XFx0cmV0dXJuIHRydWU7XFxuICA2MTpcXHR9XFxuICA2MjpcXHRcXG4gIDYzOlxcdGJvb2wgaW9fa2J1Zl9jb21taXQoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuICA2NDpcXHRcXHRcXHQgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IGxlbiwgaW50IG5yKVxcbiAgNjU6XFx0e1xcbiAgNjY6XFx0XFx0aWYgKHVubGlrZWx5KCEocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0JVRkZFUlNfQ09NTUlUKSkpXFxuICA2NzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0cmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+UkVRX0ZfQlVGRkVSU19DT01NSVQ7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdGlmICh1bmxpa2VseShsZW4gXFx1MDAzYyAwKSlcXG4gIDcyOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAgNzM6XFx0XFx0aWYgKGJsLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPQkxfSU5DKVxcbiAgNzQ6XFx0XFx0XFx0cmV0dXJuIGlvX2tidWZfaW5jX2NvbW1pdChibCwgbGVuKTtcXG4gIDc1OlxcdFxcdGJsLVxcdTAwM2VoZWFkICs9IG5yO1xcbiAgNzY6XFx0XFx0cmV0dXJuIHRydWU7XFxuICA3NzpcXHR9XFxuICA3ODpcXHRcXG4gIDc5OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICppb19idWZmZXJfZ2V0X2xpc3Qoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuICA4MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYmdpZClcXG4gIDgxOlxcdHtcXG4gIDgyOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmN0eC1cXHUwMDNldXJpbmdfbG9jayk7XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdHJldHVybiB4YV9sb2FkKFxcdTAwMjZjdHgtXFx1MDAzZWlvX2JsX3hhLCBiZ2lkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjc6NTMuODQ5ODY3NTU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MTkwNjkxMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQnVmZmVyIE92ZXJmbG93IFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIGBpb19yZWN2YCBhbmQgYGlvX3JlY3Ztc2dgLCBpZiB3ZSdyZSB1c2luZyBidWZmZXIgcmluZyBzZWxlY3Rpb24sIHBhcnRpY3VsYXJseSB3aXRoIHRob3NlIGluY3JlbWVudGFsIGJ1ZmZlcnMgb3IgYnVuZGxlcywgdGhlIHZhcmlhYmxlIGBsZW5gIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlciBhdmFpbGFibGUuIEJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogd2hlbiBgTVNHX1RSVU5DYCBpcyB1c2VkLCBgcmVjdm1zZ2Agb3IgYHJlY3ZgIGdpdmVzIG1lIGJhY2sgdGhlICp0b3RhbCogcGFja2V0IHNpemUsIHdoaWNoIGNvdWxkIGJlIGJpZ2dlciB0aGFuIGBsZW5gLlxuXG5Ob3csIHRoZSBjb2RlIHdhcyBjYWxsaW5nIGBpb19yZWN2X2ZpbmlzaGAgd2l0aCBgc2VsLVx1MDAzZXZhbGAsIHdoaWNoIGlzIHRoZSByZXR1cm4gdmFsdWUsIGByZXRgLiBBbmQgYHJldGAgaXMgdGhhdCB0cnVuY2F0ZWQgcGFja2V0IHNpemUg4oCTIHRoZSBsYXJnZXIgdmFsdWUhIFNvLCBgaW9fcHV0X2tidWZgIG9yIGBpb19wdXRfa2J1ZnNgIHdhcyBnZXR0aW5nIGByZXRgIGFzIGl0cyBgbGVuYCBhcmd1bWVudC4gVGhhdCBtZWFucyBpdCB3YXMgcG90ZW50aWFsbHkgY29tbWl0dGluZyBvciBjYWxjdWxhdGluZyB0aGUgYnVmZmVyIGNvdW50IGJhc2VkIG9uIGEgbGVuZ3RoICpsYXJnZXIqIHRoYW4gd2hhdCB3YXMgYWN0dWFsbHkgaW4gdGhlIHJpbmcgYnVmZmVyISBUaGF0J3MgYSBjbGFzc2ljIG92ZXJmbG93IGluIHRoZSBtYWtpbmcuXG5cblNwZWNpZmljYWxseSwgaXQgd2FzIGRvaW5nOlxuLSBgY29uc3VtZWQgPSBtaW4ocmV0LCBsZW4pYC4gSWYgYHJldGAgd2FzIGJpZ2dlciB0aGFuIGBsZW5gLCBgY29uc3VtZWRgIGdldHMgc2V0IHRvIGBsZW5gLCB3aGljaCBpcyBnb29kLlxuLSBUaGVuLCBgY29uc3VtZWRgIGlzIHBhc3NlZCB0byBgaW9fcmVjdl9maW5pc2hgIC1cdTAwM2UgYGlvX3B1dF9rYnVmYCAvIGBpb19wdXRfa2J1ZnNgLlxuLSBBbmQgdGhlbiBgaW9fYnVuZGxlX25idWZzKGttc2csIGNvbnN1bWVkKWAgY2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgYmFzZWQgb24gYGNvbnN1bWVkYC5cblxuSG1tLCB0aGlzIGBjb25zdW1lZGAgbG9naWMgbG9va3MgbGlrZSBpdCB3YXMgYXR0ZW1wdGluZyB0byBjb3JyZWN0IHRoaXMsIGJ1dC4uLiBpdCdzIGEgYml0IG9mIGEgY29kZSBzbWVsbC4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIGBpb19idW5kbGVfbmJ1ZnNgIHRvIGNvbmZpcm0gdGhlIGZpeCwgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBvc3NpYmxlIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzoyNzo1OC4yNjg5Mzk3MThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDg2Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2J1bmRsZV9uYnVmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9NDM3PXN0YXRpYyB2b2lkIGlvX3JlcV9tc2dfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTQ1MC0gKi9cXG5pb191cmluZy9uZXQuYzo0NTE6c3RhdGljIGludCBpb19idW5kbGVfbmJ1ZnMoc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IHJldClcXG5pb191cmluZy9uZXQuYy00NTIte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NDgyPXN0YXRpYyBpbnQgaW9fbmV0X2tidWZfcmVjeWxlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNDg2LVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpXFxuaW9fdXJpbmcvbmV0LmM6NDg3OlxcdFxcdGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpO1xcbmlvX3VyaW5nL25ldC5jLTQ4OC1cXHRyZXR1cm4gSU9VX1JFVFJZO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NDkxPXN0YXRpYyBpbmxpbmUgYm9vbCBpb19zZW5kX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTUwMy1cXG5pb191cmluZy9uZXQuYzo1MDQ6XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXFx1MDAzZXZhbCkpO1xcbmlvX3VyaW5nL25ldC5jLTUwNS1cXG4tLVxcbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9uZXQuYy04NzktXFxuaW9fdXJpbmcvbmV0LmM6ODgwOlxcdFxcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCBjb25zdW1lZCwgc2VsLVxcdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIGNvbnN1bWVkKSk7XFxuaW9fdXJpbmcvbmV0LmMtODgxLVxcdFxcdGlmIChzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVl9SRVRSWSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjc6NTguMzIxMDMxNjY2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMzk4ODUxNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiB3aGF0IEknbSB0aGlua2luZywgYmFzZWQgb24gdGhlIHByb21wdDpcblxuKipBbmFseXppbmcgdGhlIGBpb19idW5kbGVfbmJ1ZnNgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGlvX2J1bmRsZV9uYnVmc2AgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGdlYXJlZCB0b3dhcmRzIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3Iga2V5IGFzcGVjdHM6XG5cbiogICAqKldoYXQgaXMgaXQgc3VwcG9zZWQgdG8gZG8/KiogV2hhdCBpcyB0aGUgb3ZlcmFyY2hpbmcgb2JqZWN0aXZlIG9mIHRoaXMgZnVuY3Rpb24gb3IgbW9kdWxlPyBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBidWZmZXIgbWFuYWdlbWVudCByZWxhdGVkIHRvIEkvTyBvcGVyYXRpb25zLCBwcm9iYWJseSBpbnZvbHZpbmcgbm9uLWJsb2NraW5nIChOQikgZnVuY3Rpb25hbGl0eS4gVGhlICdidW5kbGUnIGFzcGVjdCBzdWdnZXN0cyBpdCdzIGhhbmRsaW5nIG11bHRpcGxlIGJ1ZmZlcnMgb3IgYSBncm91cCBvZiByZWxhdGVkIGJ1ZmZlcnMuXG4qICAgKipXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcz8qKiBXaGF0IGFyZSB0aGUgbWFqb3IgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgaG93IGRvIHRoZXkgd29yayB0b2dldGhlcj8gSSdtIGFudGljaXBhdGluZyB0aGVyZSBjb3VsZCBiZSBzb21lIGtpbmQgb2YgZGVzY3JpcHRvciBvciBjb250cm9sIHN0cnVjdHVyZS4gSSB3aWxsIGJlIGxvb2tpbmcgdG8gdW5kZXJzdGFuZCB0aGUgdHlwZXMgYW5kIG1lYW5pbmdzIG9mIHRoZSBhcmd1bWVudHMgcGFzc2VkLCBhbmQgbG9jYWwgdmFyaWFibGVzIHVzZWQuXG4qICAgKipXaGF0J3MgdGhlIG92ZXJhbGwgd29ya2Zsb3c/KiogSSB3YW50IHRvIHRyYWNlIHRoZSBmbG93LCBpZGVudGlmeWluZyB0aGUgY29udHJvbCBmbG93OiBzdGFydCB0byBmaW5pc2guXG4qICAgKipBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBjb25jdXJyZW5jeSBjb25jZXJucz8qKiBTaW5jZSB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIEkvTywgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIGNyaXRpY2FsIHNlY3Rpb25zLCBvciBpbmVmZmljaWVudCBidWZmZXIgaGFuZGxpbmcgc3RyYXRlZ2llcy5cbiogICAqKldoYXQgZXJyb3IgaGFuZGxpbmcgaXMgcHJlc2VudD8qKiBIb3cgZG9lcyBpdCBkZWFsIHdpdGggZmFpbHVyZXM/IEknbSBsb29raW5nIGZvciByb2J1c3QgZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcuXG5cbkknbSByZWFkeSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHN0YXJ0IGRpc3NlY3RpbmcgZWFjaCBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBlYWNoIG9mIHRoZSBwb2ludHMgYWJvdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzk2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjg6MDEuNjYwOTE5OTQzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9uZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDU6XFx0ICogQSBidW5kbGUgY291bGQgYmUgdXNpbmcgYSBzaW5nbGUgSVRFUl9VQlVGIGlmIHRoYXQncyBhbGwgd2UgbWFwcGVkLCBvciBpdFxcbiA0NDY6XFx0ICogY291bGQgYmUgdXNpbmcgYW4gSVRFUl9JT1ZFQy4gSWYgdGhlIGxhdHRlciwgdGhlbiBpZiB3ZSBjb25zdW1lZCBhbGwgb2ZcXG4gNDQ3OlxcdCAqIHRoZSBzZWdtZW50cywgdGhlbiBpdCdzIGEgdHJpdmlhbCBxdWVzdGlvbnQgbyBhbnN3ZXIuIElmIHdlIGhhdmUgcmVzaWR1YWxcXG4gNDQ4OlxcdCAqIGRhdGEgaW4gdGhlIGl0ZXIsIHRoZW4gbG9vcCB0aGUgc2VnbWVudHMgdG8gZmlndXJlIG91dCBob3cgbXVjaCB3ZVxcbiA0NDk6XFx0ICogdHJhbnNmZXJyZWQuXFxuIDQ1MDpcXHQgKi9cXG4gNDUxOlxcdHN0YXRpYyBpbnQgaW9fYnVuZGxlX25idWZzKHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCByZXQpXFxuIDQ1MjpcXHR7XFxuIDQ1MzpcXHRcXHRzdHJ1Y3QgaW92ZWMgKmlvdjtcXG4gNDU0OlxcdFxcdGludCBuYnVmcztcXG4gNDU1OlxcdFxcbiA0NTY6XFx0XFx0Lyogbm8gZGF0YSBpcyBhbHdheXMgemVybyBzZWdtZW50cywgYW5kIGEgdWJ1ZiBpcyBhbHdheXMgMSBzZWdtZW50ICovXFxuIDQ1NzpcXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuIDQ1ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDU5OlxcdFxcdGlmIChpdGVyX2lzX3VidWYoXFx1MDAyNmttc2ctXFx1MDAzZW1zZy5tc2dfaXRlcikpXFxuIDQ2MDpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gNDYxOlxcdFxcbiA0NjI6XFx0XFx0aW92ID0ga21zZy1cXHUwMDNldmVjLmlvdmVjO1xcbiA0NjM6XFx0XFx0aWYgKCFpb3YpXFxuIDQ2NDpcXHRcXHRcXHRpb3YgPSBcXHUwMDI2a21zZy1cXHUwMDNlZmFzdF9pb3Y7XFxuIDQ2NTpcXHRcXG4gNDY2OlxcdFxcdC8qIGlmIGFsbCBkYXRhIHdhcyB0cmFuc2ZlcnJlZCwgaXQncyBiYXNpYyBwb2ludGVyIG1hdGggKi9cXG4gNDY3OlxcdFxcdGlmICghaW92X2l0ZXJfY291bnQoXFx1MDAyNmttc2ctXFx1MDAzZW1zZy5tc2dfaXRlcikpXFxuIDQ2ODpcXHRcXHRcXHRyZXR1cm4gaXRlcl9pb3YoXFx1MDAyNmttc2ctXFx1MDAzZW1zZy5tc2dfaXRlcikgLSBpb3Y7XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdFxcdC8qIHNob3J0IHRyYW5zZmVyLCBjb3VudCBzZWdtZW50cyAqL1xcbiA0NzE6XFx0XFx0bmJ1ZnMgPSAwO1xcbiA0NzI6XFx0XFx0ZG8ge1xcbiA0NzM6XFx0XFx0XFx0aW50IHRoaXNfbGVuID0gbWluX3QoaW50LCBpb3ZbbmJ1ZnNdLmlvdl9sZW4sIHJldCk7XFxuIDQ3NDpcXHRcXG4gNDc1OlxcdFxcdFxcdG5idWZzKys7XFxuIDQ3NjpcXHRcXHRcXHRyZXQgLT0gdGhpc19sZW47XFxuIDQ3NzpcXHRcXHR9IHdoaWxlIChyZXQpO1xcbiA0Nzg6XFx0XFxuIDQ3OTpcXHRcXHRyZXR1cm4gbmJ1ZnM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI4OjAxLjY2MTAyOTU2M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTc5NzgwMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIERldGVjdGVkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGlzc3VlcyBpbiBgaW9fYnVuZGxlX25idWZzYCBpZiB0aGUgYHJldGAgdmFsdWUsIHRoZSByZXN1bHQgb2YgYSByZWNlaXZlIG9wZXJhdGlvbiwgZXhjZWVkZWQgdGhlIGJ1ZmZlciBsZW5ndGguIFNwZWNpZmljYWxseSwgdGhlIGxvb3AgY291bGQgcG90ZW50aWFsbHkgYWNjZXNzIG1lbW9yeSBiZXlvbmQgdGhlIGBpb3ZgIGFycmF5IGJvdW5kcywgb3IgY2F1c2UgaXNzdWVzIHdpdGggYnVmZmVyIHJpbmcgYWR2YW5jZW1lbnQuIFRoZXNlIGFyZSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcHJvYmxlbXMgdGhhdCBzaG91bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHNpbXBsZSBhc3NlcnRpb25zLlxuXG5Ob3csIGxldCdzIHN5c3RlbWF0aWNhbGx5IGdvIHRocm91Z2ggdGhlIEtNU0FOIHF1ZXN0aW9ucy4gVGhlIHByaW1hcnkgY29uY2VybiBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UgbmVlZCB0byBiZSBjb25maWRlbnQgdGhhdCBub3RoaW5nIHVuaW5pdGlhbGl6ZWQgaXMgbGVha2VkIHRvIHVzZXIgc3BhY2UsIGVpdGhlciB0aHJvdWdoIGRpcmVjdCBjb3BpZXMgb3IgaW5kaXJlY3RseSB0aHJvdWdoIGNhbGN1bGF0aW9ucy5cblxuSSd2ZSBleGFtaW5lZCB0aGUgY29kZSBwYXRocyBpbnZvbHZlZCwgZm9jdXNpbmcgb24gYGlvX3JlY3ZfZmluaXNoYCwgYGlvX3JlY3Ztc2dgIGFuZCBgaW9fcmVjdmAuIEluIGBpb19yZWN2X2ZpbmlzaGAsIHRoZSB2YWx1ZXMgZ29pbmcgdG8gdGhlIGNvbXBsZXRpb24gcXVldWUgZW50cnkgYXJlIHRoZSByZXR1cm4gY29kZSAoYHNlbC1cdTAwM2V2YWxgKSBhbmQgZmxhZ3MgKGBjZmxhZ3NgKSwgd2l0aCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGBjb25zdW1lZGAsIHdoaWNoIGlzIGFsd2F5cyBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIGNhcHBlZCwgYmFzZWQgb24gYHJldGAgYW5kIGBsZW5gLlxuXG5JbiBgaW9fcmVjdm1zZ2AsIHRoZSByZWxldmFudCB2YXJpYWJsZXMsIGBsZW5gIGFuZCBgY29uc3VtZWRgLCBhcmUgYWx3YXlzIHByb3Blcmx5IGluaXRpYWxpemVkIGVpdGhlciBkaXJlY3RseSBmcm9tIGBzci1cdTAwM2VsZW5gIG9yIGZyb20gdGhlIHJlc3VsdHMgb2YgYGlvX2J1ZmZlcl9zZWxlY3RgIGFuZCBpdHMgc3Vic2lkaWFyeSwgYGlvX3JlY3ZfYnVmX3NlbGVjdGAuIGBpb19yZWN2X2J1Zl9zZWxlY3RgIGFsc28gaW5pdGlhbGl6ZXMgaXRzIGxvY2FsIGBsZW5gIHZhcmlhYmxlIGJhc2VkIG9uIHNldmVyYWwgZmFjdG9ycywgYWxsIG9mIHdoaWNoIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBhcyB3ZWxsLiBTaW1pbGFybHksIGluIGBpb19yZWN2YCwgZXZlcnl0aGluZyBzZWVtcyB3ZWxsIGluaXRpYWxpemVkLlxuXG5SZWdhcmRpbmcgcG90ZW50aWFsIGluZm8gbGVha3MgdmlhIG5ldHdvcmsgcmVjZWl2ZSwgdGhlIG5ldCBsYXllciBpcyBmaWxsaW5nIHRoZSB1c2VyIGJ1ZmZlciBkaXJlY3RseSwgYW5kIGBNU0dfVFJVTkNgIGlzIGhhbmRsZWQgY29ycmVjdGx5LiBgTVNHX1RSVU5DYCBtZWFucyB0aGF0IHRoZSB1c2VyIGlzIHJlcXVlc3RpbmcgdGhlIHRydW5jYXRlZCBwYWNrZXQgbGVuZ3RoIGluIHRoZSBDUUUgcmVzdWx0LCB3aGljaCBpcyB3aGF0IHRoZXkgZ2V0LiBUaGUgbmV0IGxheWVyIGhhcyBoYW5kbGVkIHRoZSBidWZmZXIgc2l6ZSBhbmQgdHJ1bmNhdGlvbiBjb3JyZWN0bHkuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCB0aGF0IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0LCBvciBwYWRkaW5nIGxlYWtzIGluIHRoZXNlIGZ1bmN0aW9ucy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuXG5cblRoZSBwYXRjaCBpdHNlbGYgYXBwZWFycyB0byBhZGRyZXNzIGFuIGlzc3VlIHdoZXJlIGJ1ZmZlciBhY2NvdW50aW5nIChzcGVjaWZpY2FsbHksIGhvdyBtYW55IGJ5dGVzIGhhdmUgYmVlbiByZWNlaXZlZCBpbiB0aGUgYnVmZmVyIHJpbmcpIGNvdWxkIG92ZXJzaG9vdCB0aGUgYWN0dWFsIGJ1ZmZlciBsZW5ndGggaWYgYE1TR19UUlVOQ2Agd2FzIHJldHVybmVkLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIHRoZSByYXcgYHJldGAgdmFsdWUgKHdoaWNoIGNvdWxkIGJlIGxhcmdlciB0aGFuIHRoZSBidWZmZXIgc2l6ZSBgbGVuYCkgaW5zdGVhZCBvZiBgbGVuYCBmb3IgYnVmZmVyIHJpbmcgbWFuYWdlbWVudCAoaW4gYGlvX3B1dF9rYnVmYCAvIGBpb19wdXRfa2J1ZnNgKS4gVGhpcyBsZWQgdG8gb3V0LW9mLWJvdW5kcyBjb25zdW1wdGlvbiBvZiByaW5nIGJ1ZmZlciBlbnRyaWVzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGluIGBpb19idW5kbGVfbmJ1ZnNgLiBUaGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoaXMgbGVuZ3RoIGlzIGNvcnJlY3RseSBib3VuZGVkIGJ5IHRoZSBidWZmZXIgc2l6ZSwgcHJldmVudGluZyBzdWNoIGVycm9ycy4gVGhpcyBpcyBhIGJ1ZmZlciBtYW5hZ2VtZW50IGFuZCBib3VuZHMgaXNzdWUsIHdoaWNoIGlzIHByZWNpc2VseSB3aGF0IEtBU0FOIGFuZCBhc3NlcnRpb25zIGFyZSBkZXNpZ25lZCB0byBjYXRjaCwgYW5kIG5vdCBhbiBpc3N1ZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuXG5cbkkndmUgZG91YmxlLWNoZWNrZWQ6IG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9uLCBubyBwYWRkaW5nIGxlYWtzLCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLlxuXG5JJ20gY29uZmlkZW50IHdlIGNhbiBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLiBJdCdzIGEgYnVmZmVyIG1hbmFnZW1lbnQgcHJvYmxlbSwgbm90IGEgS01TQU4gaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzQ3LCJPdXRwdXRUb2tlbnMiOjIwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzoyODoxMC42NDA4MTMwNTJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgbGVuZ3RoIGFjY291bnRpbmcgaW4gaW9fdXJpbmcncyByZWN2IGFuZCByZWN2bXNnIHBhdGhzIHdoZW4gTVNHX1RSVU5DIGlzIHVzZWQuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhICdjb25zdW1lZCcgdmFyaWFibGUgdG8gZW5zdXJlIHRoYXQgYnVmZmVyIHJpbmcgY29tbWl0dGluZyBhbmQgYnVuZGxlIGJ1ZmZlciBjb3VudGluZyAoaW9fYnVuZGxlX25idWZzKSBvbmx5IGNvbnN1bWUgdXAgdG8gdGhlIGFjdHVhbCBidWZmZXIgY2FwYWNpdHkgKCdsZW4nKSByYXRoZXIgdGhhbiB0aGUgdHJ1bmNhdGVkIHRvdGFsIHBhY2tldCBsZW5ndGggKCdyZXQnKS5cXG5cXG5BbGwgbmV3IGFuZCBtb2RpZmllZCB2YXJpYWJsZXMgKCdsZW4nLCAnY29uc3VtZWQnKSBhcmUgc3RyaWN0bHkgaW5pdGlhbGl6ZWQgYW5kIGFzc2lnbmVkIGJlZm9yZSB1c2UuIFRoZSBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgbGVhayB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXJzcGFjZS4gQW55IHJpc2tzIHJlbGF0ZWQgdG8gYnVmZmVyIG92ZXItY29uc3VtcHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpdGVyIGluZGV4aW5nIGluIGlvX2J1bmRsZV9uYnVmcyBmYWxsIHVuZGVyIGJvdW5kcy1jaGVja2luZyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYnVmZmVyIGxlbmd0aCBhY2NvdW50aW5nIGluIGlvX3VyaW5nJ3MgcmVjdiBhbmQgcmVjdm1zZyBwYXRocyB3aGVuIE1TR19UUlVOQyBpcyB1c2VkLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSAnY29uc3VtZWQnIHZhcmlhYmxlIHRvIGVuc3VyZSB0aGF0IGJ1ZmZlciByaW5nIGNvbW1pdHRpbmcgYW5kIGJ1bmRsZSBidWZmZXIgY291bnRpbmcgKGlvX2J1bmRsZV9uYnVmcykgb25seSBjb25zdW1lIHVwIHRvIHRoZSBhY3R1YWwgYnVmZmVyIGNhcGFjaXR5ICgnbGVuJykgcmF0aGVyIHRoYW4gdGhlIHRydW5jYXRlZCB0b3RhbCBwYWNrZXQgbGVuZ3RoICgncmV0JykuXFxuXFxuQWxsIG5ldyBhbmQgbW9kaWZpZWQgdmFyaWFibGVzICgnbGVuJywgJ2NvbnN1bWVkJykgYXJlIHN0cmljdGx5IGluaXRpYWxpemVkIGFuZCBhc3NpZ25lZCBiZWZvcmUgdXNlLiBUaGUgbG9naWMgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIGxlYWsgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2Vyc3BhY2UuIEFueSByaXNrcyByZWxhdGVkIHRvIGJ1ZmZlciBvdmVyLWNvbnN1bXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXRlciBpbmRleGluZyBpbiBpb19idW5kbGVfbmJ1ZnMgZmFsbCB1bmRlciBib3VuZHMtY2hlY2tpbmcgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow88q6x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 23:08:47 +0000 UTC FinishedAt: 2026-09-03 23:28:12 +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": "c300d74d44c27064768a8dea90e67684b00681de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c300d74d44c27064768a8dea90e67684b00681de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "NET" ], "series_id": "5783d4c2-0547-49b9-b4fa-9434ee1276bc" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_recv", "io_recvmsg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgbGVuZ3RoIGFjY291bnRpbmcgaW4gaW9fdXJpbmcmIzM5O3MgcmVjdiBhbmQgcmVjdm1zZyBwYXRocyB3aGVuIE1TR19UUlVOQyBpcyB1c2VkLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSAmIzM5O2NvbnN1bWVkJiMzOTsgdmFyaWFibGUgdG8gZW5zdXJlIHRoYXQgYnVmZmVyIHJpbmcgY29tbWl0dGluZyBhbmQgYnVuZGxlIGJ1ZmZlciBjb3VudGluZyAoaW9fYnVuZGxlX25idWZzKSBvbmx5IGNvbnN1bWUgdXAgdG8gdGhlIGFjdHVhbCBidWZmZXIgY2FwYWNpdHkgKCYjMzk7bGVuJiMzOTspIHJhdGhlciB0aGFuIHRoZSB0cnVuY2F0ZWQgdG90YWwgcGFja2V0IGxlbmd0aCAoJiMzOTtyZXQmIzM5OykuXG5cbkFsbCBuZXcgYW5kIG1vZGlmaWVkIHZhcmlhYmxlcyAoJiMzOTtsZW4mIzM5OywgJiMzOTtjb25zdW1lZCYjMzk7KSBhcmUgc3RyaWN0bHkgaW5pdGlhbGl6ZWQgYW5kIGFzc2lnbmVkIGJlZm9yZSB1c2UuIFRoZSBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgbGVhayB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXJzcGFjZS4gQW55IHJpc2tzIHJlbGF0ZWQgdG8gYnVmZmVyIG92ZXItY29uc3VtcHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpdGVyIGluZGV4aW5nIGluIGlvX2J1bmRsZV9uYnVmcyBmYWxsIHVuZGVyIGJvdW5kcy1jaGVja2luZyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW9fdXJpbmcgcmVjZWl2ZSBoYW5kbGluZyAoaW9fcmVjdiwgaW9fcmVjdm1zZywgaW9fcmVjdl9idWZfc2VsZWN0LCBpb19yZWN2X2ZpbmlzaCkgdG8gcHJvcGVybHkgdHJhY2sgYW5kIGNhcCBjb25zdW1lZCBidWZmZXIgbGVuZ3RoIHdoZW4gTVNHX1RSVU5DIGlzIHVzZWQgb3IgYnVmZmVyIHNpemVzIGRpZmZlciBmcm9tIHJldHVybmVkIHBhY2tldCBsZW5ndGhzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSB2aWEgc3RhbmRhcmQgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjNjZjZjZmI2MWM4ODdiY2UwMzExYmRlMGFhZmE3YTNjZjZiODZmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjM6Mjc6MDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbmV0LmMgYi9pb191cmluZy9uZXQuY1xuaW5kZXggZmJlNzE5ZDg2YzQ2My4uZjgxMTBkYzlmODYwNiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL25ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9uZXQuY1xuQEAgLTg1Myw3ICYjNDM7ODUzLDcgQEAgaW50IGlvX3JlY3Ztc2dfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdFx0XHRcdCAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbiBcdFx0XHRcdCAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCBib29sIG1zaG90X2ZpbmlzaGVkLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBpc3N1ZV9mbGFncylcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBzaXplX3QgY29uc3VtZWQpXG4ge1xuIFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcbiBcdHVuc2lnbmVkIGludCBjZmxhZ3MgPSAwO1xuQEAgLTg3Nyw3ICYjNDM7ODc3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFx0aWYgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XG4gXHRcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cdTAwM2V2YWwgLSBzci1cdTAwM2Vkb25lX2lvO1xuIFxuLVx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7XG4mIzQzO1x0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgY29uc3VtZWQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIGNvbnN1bWVkKSk7XG4gXHRcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXG4gXHRcdFx0Y2ZsYWdzID0gcmVxLVx1MDAzZWNxZS5mbGFncyB8IChjZmxhZ3MgXHUwMDI2IENRRV9GX01BU0spO1xuIFx0XHRpZiAoc3ItXHUwMDNlbXNob3RfbGVuIFx1MDAyNlx1MDAyNiBzZWwtXHUwMDNldmFsIFx1MDAzZT0gc3ItXHUwMDNlbXNob3RfbGVuKVxuQEAgLTg5OSw3ICYjNDM7ODk5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0KTtcbiYjNDM7XHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIGNvbnN1bWVkLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuIFx0fVxuIFxuIFx0LypcbkBAIC0xMDI3LDYgJiM0MzsxMDI3LDcgQEAgaW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiBcdGludCByZXQsIG1pbl9yZXQgPSAwO1xuIFx0Ym9vbCBmb3JjZV9ub25ibG9jayA9IGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xuIFx0Ym9vbCBtc2hvdF9maW5pc2hlZCA9IHRydWU7XG4mIzQzO1x0c2l6ZV90IGxlbiwgY29uc3VtZWQgPSAwO1xuIFxuIFx0c29jayA9IHNvY2tfZnJvbV9maWxlKHJlcS1cdTAwM2VmaWxlKTtcbiBcdGlmICh1bmxpa2VseSghc29jaykpXG5AQCAtMTA0Miw5ICYjNDM7MTA0Myw4IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXG4gcmV0cnlfbXVsdGlzaG90OlxuIFx0c2VsLmJ1Zl9saXN0ID0gTlVMTDtcbiYjNDM7XHRsZW4gPSBzci1cdTAwM2VsZW47XG4gXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XG4tXHRcdHNpemVfdCBsZW4gPSBzci1cdTAwM2VsZW47XG4tXG4gXHRcdHNlbCA9IGlvX2J1ZmZlcl9zZWxlY3QocmVxLCBcdTAwMjZsZW4sIHNyLVx1MDAzZWJ1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpO1xuIFx0XHRpZiAoIXNlbC5hZGRyKVxuIFx0XHRcdHJldHVybiAtRU5PQlVGUztcbkBAIC0xMDY1LDYgJiM0MzsxMDY1LDcgQEAgaW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiBcdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkge1xuIFx0XHRyZXQgPSBpb19yZWN2bXNnX211bHRpc2hvdChzb2NrLCBzciwga21zZywgZmxhZ3MsXG4gXHRcdFx0XHRcdCAgIFx1MDAyNm1zaG90X2ZpbmlzaGVkKTtcbiYjNDM7XHRcdGNvbnN1bWVkID0gcmV0O1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogZGlzYWJsZSBwYXJ0aWFsIHJldHJ5IGZvciByZWN2bXNnIHdpdGggY21zZyBhdHRhY2hlZCAqL1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19XQUlUQUxMIFx1MDAyNlx1MDAyNiAha21zZy1cdTAwM2Vtc2cubXNnX2NvbnRyb2xsZW4pXG5AQCAtMTA3Miw2ICYjNDM7MTA3MywxNSBAQCBpbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFxuIFx0XHRyZXQgPSBfX3N5c19yZWN2bXNnX3NvY2soc29jaywgXHUwMDI2a21zZy1cdTAwM2Vtc2csIHNyLVx1MDAzZXVtc2csXG4gXHRcdFx0XHRcdCBrbXNnLVx1MDAzZXVhZGRyLCBmbGFncyk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogV2l0aCBNU0dfVFJVTkMsIHRoZSBuZXQgbGF5ZXIgd2lsbCByZXR1cm4gdGhlIGZ1bGwgc2l6ZSBvZlxuJiM0MztcdFx0ICogdGhlIHBhY2tldCwgZXZlbiBpZiB3ZSBvbmx5IGZpbGxlZCBwYXJ0IG9mIGl0IGluIHRoZSBidWZmZXJzLlxuJiM0MztcdFx0ICogQWRqdXN0IHRoZSByZXR1cm5lZCBzaXplIHRvIGNvbnN1bWUgb25seSB0aGUgcmVhbCBwYXJ0IG9mIHRoZVxuJiM0MztcdFx0ICogYnVmZmVyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjb25zdW1lZCA9IHJldDtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlIGxlbilcbiYjNDM7XHRcdFx0Y29uc3VtZWQgPSBsZW47XG4gXHR9XG4gXG4gXHRpZiAocmV0IFx1MDAzYyBtaW5fcmV0KSB7XG5AQCAtMTA5OCw3ICYjNDM7MTEwOCw3IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXHRcdGlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpO1xuIFxuIFx0c2VsLnZhbCA9IHJldDtcbi1cdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpXG4mIzQzO1x0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzLCBjb25zdW1lZCkpXG4gXHRcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xuIFxuIFx0cmV0dXJuIHNlbC52YWw7XG5AQCAtMTEwOCw2ICYjNDM7MTExOCw3IEBAIHN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnXG4gXHRcdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcbiYjNDM7XHRzaXplX3QgbGVuO1xuIFx0aW50IHJldDtcbiBcbiBcdC8qXG5AQCAtMTE1MywxMyAmIzQzOzExNjQsMTQgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2dcbiBcdFx0Lyogc3BlY2lhbCBjYXNlIDEgdmVjLCBjYW4gYmUgYSBmYXN0IHBhdGggKi9cbiBcdFx0aWYgKHJldCA9PSAxKSB7XG4gXHRcdFx0c3ItXHUwMDNlYnVmID0gYXJnLmlvdnNbMF0uaW92X2Jhc2U7XG4tXHRcdFx0c3ItXHUwMDNlbGVuID0gYXJnLmlvdnNbMF0uaW92X2xlbjtcbiYjNDM7XHRcdFx0bGVuID0gc3ItXHUwMDNlbGVuID0gYXJnLmlvdnNbMF0uaW92X2xlbjtcbiBcdFx0XHRnb3RvIG1hcF91YnVmO1xuIFx0XHR9XG4gXHRcdGlvdl9pdGVyX2luaXQoXHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIsIElURVJfREVTVCwgYXJnLmlvdnMsIHJldCxcbi1cdFx0XHRcdGFyZy5vdXRfbGVuKTtcbiYjNDM7XHRcdFx0ICAgICAgYXJnLm91dF9sZW4pO1xuJiM0MztcdFx0bGVuID0gYXJnLm91dF9sZW47XG4gXHR9IGVsc2Uge1xuLVx0XHRzaXplX3QgbGVuID0gc2VsLVx1MDAzZXZhbDtcbiYjNDM7XHRcdGxlbiA9IHNlbC1cdTAwM2V2YWw7XG4gXG4gXHRcdCpzZWwgPSBpb19idWZmZXJfc2VsZWN0KHJlcSwgXHUwMDI2bGVuLCBzci1cdTAwM2VidWZfZ3JvdXAsIGlzc3VlX2ZsYWdzKTtcbiBcdFx0aWYgKCFzZWwtXHUwMDNlYWRkcilcbkBAIC0xMTczLDcgJiM0MzsxMTg1LDcgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2dcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGxlbjtcbiB9XG4gXG4gaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbkBAIC0xMTg0LDYgJiM0MzsxMTk2LDcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4gXHR1bnNpZ25lZCBmbGFncztcbiBcdGludCByZXQsIG1pbl9yZXQgPSAwO1xuJiM0MztcdHNpemVfdCBjb25zdW1lZCA9IDAsIGxlbiA9IDA7XG4gXHRib29sIGZvcmNlX25vbmJsb2NrID0gaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XG4gXHRib29sIG1zaG90X2ZpbmlzaGVkO1xuIFxuQEAgLTEyMTMsNiAmIzQzOzEyMjYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFxuIHJldHJ5X211bHRpc2hvdDpcbiBcdHNlbC5idWZfbGlzdCA9IE5VTEw7XG4mIzQzO1x0bGVuID0gc3ItXHUwMDNlbGVuO1xuIFx0aWYgKGlvX2RvX2J1ZmZlcl9zZWxlY3QocmVxKSkge1xuIFx0XHRzZWwudmFsID0gc3ItXHUwMDNlbGVuO1xuIFx0XHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcdTAwMjZzZWwsIGlzc3VlX2ZsYWdzKTtcbkBAIC0xMjIwLDYgJiM0MzsxMjM0LDcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiBcdFx0XHRrbXNnLVx1MDAzZW1zZy5tc2dfaW5xID0gLTE7XG4gXHRcdFx0Z290byBvdXRfZnJlZTtcbiBcdFx0fVxuJiM0MztcdFx0bGVuID0gcmV0O1xuIFx0XHRzci1cdTAwM2VidWYgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTEyNTAsNiAmIzQzOzEyNjUsMTcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiBcdH1cbiBcbiBcdG1zaG90X2ZpbmlzaGVkID0gcmV0IFx1MDAzYz0gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaXRoIE1TR19UUlVOQywgdGhlIG5ldCBsYXllciB3aWxsIHJldHVybiB0aGUgZnVsbCBzaXplIG9mXG4mIzQzO1x0ICogdGhlIHBhY2tldCwgZXZlbiBpZiB3ZSBvbmx5IGZpbGxlZCBwYXJ0IG9mIGl0IGluIHRoZSBidWZmZXJzLlxuJiM0MztcdCAqIEFkanVzdCB0aGUgcmV0dXJuZWQgc2l6ZSB0byBjb25zdW1lIG9ubHkgdGhlIHJlYWwgcGFydCBvZiB0aGVcbiYjNDM7XHQgKiBidWZmZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y29uc3VtZWQgPSByZXQ7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2UgbGVuKVxuJiM0MztcdFx0Y29uc3VtZWQgPSBsZW47XG4mIzQzO1xuIFx0aWYgKHJldCBcdTAwM2UgMClcbiBcdFx0cmV0ICYjNDM7PSBzci1cdTAwM2Vkb25lX2lvO1xuIFx0ZWxzZSBpZiAoc3ItXHUwMDNlZG9uZV9pbylcbkBAIC0xMjU4LDcgJiM0MzsxMjg0LDcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiBcdFx0aW9fa2J1Zl9yZWN5Y2xlKHJlcSwgc2VsLmJ1Zl9saXN0LCBpc3N1ZV9mbGFncyk7XG4gXG4gXHRzZWwudmFsID0gcmV0O1xuLVx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSlcbiYjNDM7XHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MsIGNvbnN1bWVkKSlcbiBcdFx0Z290byByZXRyeV9tdWx0aXNob3Q7XG4gXG4gXHRyZXR1cm4gc2VsLnZhbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19yZWN2JiMzNDssCiAgICAmIzM0O2lvX3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW9fdXJpbmcgcmVjZWl2ZSBoYW5kbGluZyAoaW9fcmVjdiwgaW9fcmVjdm1zZywgaW9fcmVjdl9idWZfc2VsZWN0LCBpb19yZWN2X2ZpbmlzaCkgdG8gcHJvcGVybHkgdHJhY2sgYW5kIGNhcCBjb25zdW1lZCBidWZmZXIgbGVuZ3RoIHdoZW4gTVNHX1RSVU5DIGlzIHVzZWQgb3IgYnVmZmVyIHNpemVzIGRpZmZlciBmcm9tIHJldHVybmVkIHBhY2tldCBsZW5ndGhzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSB2aWEgc3RhbmRhcmQgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjNjZjZjZmI2MWM4ODdiY2UwMzExYmRlMGFhZmE3YTNjZjZiODZmOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMjM6Mjc6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy9uZXQuYyBiL2lvX3VyaW5nL25ldC5jCmluZGV4IGZiZTcxOWQ4NmM0NjMuLmY4MTEwZGM5Zjg2MDYgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL25ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL25ldC5jCkBAIC04NTMsNyAmIzQzOzg1Myw3IEBAIGludCBpb19yZWN2bXNnX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwKIAkJCQkgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csCiAJCQkJICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIGJvb2wgbXNob3RfZmluaXNoZWQsCi0JCQkJICB1bnNpZ25lZCBpc3N1ZV9mbGFncykKJiM0MzsJCQkJICB1bnNpZ25lZCBpc3N1ZV9mbGFncywgc2l6ZV90IGNvbnN1bWVkKQogewogCXN0cnVjdCBpb19zcl9tc2cgKnNyID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7CiAJdW5zaWduZWQgaW50IGNmbGFncyA9IDA7CkBAIC04NzcsNyAmIzQzOzg3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwKIAlpZiAoc3ItJmd0O2ZsYWdzICZhbXA7IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHsKIAkJc2l6ZV90IHRoaXNfcmV0ID0gc2VsLSZndDt2YWwgLSBzci0mZ3Q7ZG9uZV9pbzsKIAotCQljZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC0mZ3Q7YnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCB0aGlzX3JldCkpOwomIzQzOwkJY2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIGNvbnN1bWVkLCBzZWwtJmd0O2J1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgY29uc3VtZWQpKTsKIAkJaWYgKHNyLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfUkVDVl9SRVRSWSkKIAkJCWNmbGFncyA9IHJlcS0mZ3Q7Y3FlLmZsYWdzIHwgKGNmbGFncyAmYW1wOyBDUUVfRl9NQVNLKTsKIAkJaWYgKHNyLSZndDttc2hvdF9sZW4gJmFtcDsmYW1wOyBzZWwtJmd0O3ZhbCAmZ3Q7PSBzci0mZ3Q7bXNob3RfbGVuKQpAQCAtODk5LDcgJiM0Mzs4OTksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsCiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAl9IGVsc2UgewotCQljZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBzZWwtJmd0O3ZhbCwgc2VsLSZndDtidWZfbGlzdCk7CiYjNDM7CQljZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBjb25zdW1lZCwgc2VsLSZndDtidWZfbGlzdCk7CiAJfQogCiAJLyoKQEAgLTEwMjcsNiAmIzQzOzEwMjcsNyBAQCBpbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQogCWludCByZXQsIG1pbl9yZXQgPSAwOwogCWJvb2wgZm9yY2Vfbm9uYmxvY2sgPSBpc3N1ZV9mbGFncyAmYW1wOyBJT19VUklOR19GX05PTkJMT0NLOwogCWJvb2wgbXNob3RfZmluaXNoZWQgPSB0cnVlOwomIzQzOwlzaXplX3QgbGVuLCBjb25zdW1lZCA9IDA7CiAKIAlzb2NrID0gc29ja19mcm9tX2ZpbGUocmVxLSZndDtmaWxlKTsKIAlpZiAodW5saWtlbHkoIXNvY2spKQpAQCAtMTA0Miw5ICYjNDM7MTA0Myw4IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiAKIHJldHJ5X211bHRpc2hvdDoKIAlzZWwuYnVmX2xpc3QgPSBOVUxMOwomIzQzOwlsZW4gPSBzci0mZ3Q7bGVuOwogCWlmIChpb19kb19idWZmZXJfc2VsZWN0KHJlcSkpIHsKLQkJc2l6ZV90IGxlbiA9IHNyLSZndDtsZW47Ci0KIAkJc2VsID0gaW9fYnVmZmVyX3NlbGVjdChyZXEsICZhbXA7bGVuLCBzci0mZ3Q7YnVmX2dyb3VwLCBpc3N1ZV9mbGFncyk7CiAJCWlmICghc2VsLmFkZHIpCiAJCQlyZXR1cm4gLUVOT0JVRlM7CkBAIC0xMDY1LDYgJiM0MzsxMDY1LDcgQEAgaW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAlpZiAocmVxLSZndDtmbGFncyAmYW1wOyBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpIHsKIAkJcmV0ID0gaW9fcmVjdm1zZ19tdWx0aXNob3Qoc29jaywgc3IsIGttc2csIGZsYWdzLAogCQkJCQkgICAmYW1wO21zaG90X2ZpbmlzaGVkKTsKJiM0MzsJCWNvbnN1bWVkID0gcmV0OwogCX0gZWxzZSB7CiAJCS8qIGRpc2FibGUgcGFydGlhbCByZXRyeSBmb3IgcmVjdm1zZyB3aXRoIGNtc2cgYXR0YWNoZWQgKi8KIAkJaWYgKGZsYWdzICZhbXA7IE1TR19XQUlUQUxMICZhbXA7JmFtcDsgIWttc2ctJmd0O21zZy5tc2dfY29udHJvbGxlbikKQEAgLTEwNzIsNiAmIzQzOzEwNzMsMTUgQEAgaW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAogCQlyZXQgPSBfX3N5c19yZWN2bXNnX3NvY2soc29jaywgJmFtcDtrbXNnLSZndDttc2csIHNyLSZndDt1bXNnLAogCQkJCQkga21zZy0mZ3Q7dWFkZHIsIGZsYWdzKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBXaXRoIE1TR19UUlVOQywgdGhlIG5ldCBsYXllciB3aWxsIHJldHVybiB0aGUgZnVsbCBzaXplIG9mCiYjNDM7CQkgKiB0aGUgcGFja2V0LCBldmVuIGlmIHdlIG9ubHkgZmlsbGVkIHBhcnQgb2YgaXQgaW4gdGhlIGJ1ZmZlcnMuCiYjNDM7CQkgKiBBZGp1c3QgdGhlIHJldHVybmVkIHNpemUgdG8gY29uc3VtZSBvbmx5IHRoZSByZWFsIHBhcnQgb2YgdGhlCiYjNDM7CQkgKiBidWZmZXIuCiYjNDM7CQkgKi8KJiM0MzsJCWNvbnN1bWVkID0gcmV0OwomIzQzOwkJaWYgKHJldCAmZ3Q7IGxlbikKJiM0MzsJCQljb25zdW1lZCA9IGxlbjsKIAl9CiAKIAlpZiAocmV0ICZsdDsgbWluX3JldCkgewpAQCAtMTA5OCw3ICYjNDM7MTEwOCw3IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiAJCWlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpOwogCiAJc2VsLnZhbCA9IHJldDsKLQlpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgJmFtcDtzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpCiYjNDM7CWlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCAmYW1wO3NlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzLCBjb25zdW1lZCkpCiAJCWdvdG8gcmV0cnlfbXVsdGlzaG90OwogCiAJcmV0dXJuIHNlbC52YWw7CkBAIC0xMTA4LDYgJiM0MzsxMTE4LDcgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2cKIAkJCSAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQogewogCXN0cnVjdCBpb19zcl9tc2cgKnNyID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7CiYjNDM7CXNpemVfdCBsZW47CiAJaW50IHJldDsKIAogCS8qCkBAIC0xMTUzLDEzICYjNDM7MTE2NCwxNCBAQCBzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZwogCQkvKiBzcGVjaWFsIGNhc2UgMSB2ZWMsIGNhbiBiZSBhIGZhc3QgcGF0aCAqLwogCQlpZiAocmV0ID09IDEpIHsKIAkJCXNyLSZndDtidWYgPSBhcmcuaW92c1swXS5pb3ZfYmFzZTsKLQkJCXNyLSZndDtsZW4gPSBhcmcuaW92c1swXS5pb3ZfbGVuOwomIzQzOwkJCWxlbiA9IHNyLSZndDtsZW4gPSBhcmcuaW92c1swXS5pb3ZfbGVuOwogCQkJZ290byBtYXBfdWJ1ZjsKIAkJfQogCQlpb3ZfaXRlcl9pbml0KCZhbXA7a21zZy0mZ3Q7bXNnLm1zZ19pdGVyLCBJVEVSX0RFU1QsIGFyZy5pb3ZzLCByZXQsCi0JCQkJYXJnLm91dF9sZW4pOwomIzQzOwkJCSAgICAgIGFyZy5vdXRfbGVuKTsKJiM0MzsJCWxlbiA9IGFyZy5vdXRfbGVuOwogCX0gZWxzZSB7Ci0JCXNpemVfdCBsZW4gPSBzZWwtJmd0O3ZhbDsKJiM0MzsJCWxlbiA9IHNlbC0mZ3Q7dmFsOwogCiAJCSpzZWwgPSBpb19idWZmZXJfc2VsZWN0KHJlcSwgJmFtcDtsZW4sIHNyLSZndDtidWZfZ3JvdXAsIGlzc3VlX2ZsYWdzKTsKIAkJaWYgKCFzZWwtJmd0O2FkZHIpCkBAIC0xMTczLDcgJiM0MzsxMTg1LDcgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2cKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBsZW47CiB9CiAKIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCkBAIC0xMTg0LDYgJiM0MzsxMTk2LDcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwogCXVuc2lnbmVkIGZsYWdzOwogCWludCByZXQsIG1pbl9yZXQgPSAwOwomIzQzOwlzaXplX3QgY29uc3VtZWQgPSAwLCBsZW4gPSAwOwogCWJvb2wgZm9yY2Vfbm9uYmxvY2sgPSBpc3N1ZV9mbGFncyAmYW1wOyBJT19VUklOR19GX05PTkJMT0NLOwogCWJvb2wgbXNob3RfZmluaXNoZWQ7CiAKQEAgLTEyMTMsNiAmIzQzOzEyMjYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQogCiByZXRyeV9tdWx0aXNob3Q6CiAJc2VsLmJ1Zl9saXN0ID0gTlVMTDsKJiM0MzsJbGVuID0gc3ItJmd0O2xlbjsKIAlpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7CiAJCXNlbC52YWwgPSBzci0mZ3Q7bGVuOwogCQlyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCAmYW1wO3NlbCwgaXNzdWVfZmxhZ3MpOwpAQCAtMTIyMCw2ICYjNDM7MTIzNCw3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiAJCQlrbXNnLSZndDttc2cubXNnX2lucSA9IC0xOwogCQkJZ290byBvdXRfZnJlZTsKIAkJfQomIzQzOwkJbGVuID0gcmV0OwogCQlzci0mZ3Q7YnVmID0gTlVMTDsKIAl9CiAKQEAgLTEyNTAsNiAmIzQzOzEyNjUsMTcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAl9CiAKIAltc2hvdF9maW5pc2hlZCA9IHJldCAmbHQ7PSAwOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXaXRoIE1TR19UUlVOQywgdGhlIG5ldCBsYXllciB3aWxsIHJldHVybiB0aGUgZnVsbCBzaXplIG9mCiYjNDM7CSAqIHRoZSBwYWNrZXQsIGV2ZW4gaWYgd2Ugb25seSBmaWxsZWQgcGFydCBvZiBpdCBpbiB0aGUgYnVmZmVycy4KJiM0MzsJICogQWRqdXN0IHRoZSByZXR1cm5lZCBzaXplIHRvIGNvbnN1bWUgb25seSB0aGUgcmVhbCBwYXJ0IG9mIHRoZQomIzQzOwkgKiBidWZmZXIuCiYjNDM7CSAqLwomIzQzOwljb25zdW1lZCA9IHJldDsKJiM0MzsJaWYgKHJldCAmZ3Q7IGxlbikKJiM0MzsJCWNvbnN1bWVkID0gbGVuOwomIzQzOwogCWlmIChyZXQgJmd0OyAwKQogCQlyZXQgJiM0Mzs9IHNyLSZndDtkb25lX2lvOwogCWVsc2UgaWYgKHNyLSZndDtkb25lX2lvKQpAQCAtMTI1OCw3ICYjNDM7MTI4NCw3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiAJCWlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpOwogCiAJc2VsLnZhbCA9IHJldDsKLQlpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgJmFtcDtzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpCiYjNDM7CWlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCAmYW1wO3NlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzLCBjb25zdW1lZCkpCiAJCWdvdG8gcmV0cnlfbXVsdGlzaG90OwogCiAJcmV0dXJuIHNlbC52YWw7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMDQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgS2VybmVsIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGFza2VkIHRvIHRha2UgYSBsb29rIGF0IGEgcGF0Y2ggc2VyaWVzIGp1c3QgYXBwbGllZCB0byB0aGUga2VybmVsIHJlcG9zaXRvcnksIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYGlvX3VyaW5nL25ldC5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRpZmYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouCgpUaGUgZGlmZiBpdHNlbGYgcG9pbnRzIHRvIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBpb19yZWN2X2ZpbmlzaGAsIGBpb19yZWN2bXNnYCwgYGlvX3JlY3ZfYnVmX3NlbGVjdGAsIGFuZCBgaW9fcmVjdmAuIEFoLCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYE1TR19UUlVOQ2Ag4oCTIHRoYXQmIzM5O3MgdGhlIGZsYWcgd2hlcmUgdGhlIG5ldHdvcmsgbGF5ZXIgcmVwb3J0cyB0aGUgZnVsbCBwYWNrZXQgc2l6ZSBldmVuIGlmIHRoZSByZWNlaXZlIGJ1ZmZlcnMgYXJlbiYjMzk7dCBjb21wbGV0ZWx5IGZpbGxlZC4gVGhpcyBpcyBhIGNvbW1vbiBzaXR1YXRpb24sIHNvIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBob3cgdGhleSBhcmUgaGFuZGxpbmcgdGhpcyBlZGdlIGNhc2UuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGNhbGN1bGF0ZXMgYGNvbnN1bWVkYCBkYXRhLCBhbmQgY29ycmVjdGx5IHBhc3NlcyB0aGlzIGluZm9ybWF0aW9uIHRvIGBpb19wdXRfa2J1ZnNgIC8gYGlvX3B1dF9rYnVmYCB0aHJvdWdoIHRoZSBgaW9fcmVjdl9maW5pc2hgIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGltcHJvdmVtZW50IGluIGhhbmRsaW5nIHBhcnRpYWxseSByZWNlaXZlZCBwYWNrZXRzLiBHb29kLgoKTm93LCBjb250ZXh0IGlzIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBmaXJzdCBzdGVwIGZvciBtZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb24gYGlvX3VyaW5nYCBpdHNlbGYgYW5kIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIGBpb191cmluZy9uZXQuY2AuIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcXVpY2tseSBicmluZyB0aGUgY29udGV4dCBpbnRvIHZpZXcuIEtub3dpbmcgdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gZm9ybSBhIGZ1bGx5IGluZm9ybWVkIG9waW5pb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcmVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9uZXQuYz05Mz1lbnVtIHNyX3JldHJ5X2ZsYWdzIHtcbi0tXG5pb191cmluZy9uZXQuYy0xMTEtXG5pb191cmluZy9uZXQuYzoxMTI6c3RydWN0IGlvX3JlY3Z6YyB7XG5pb191cmluZy9uZXQuYy0xMTMtXHRzdHJ1Y3QgZmlsZVx0XHRcdCpmaWxlO1xuLS1cbmlvX3VyaW5nL25ldC5jPTYyNj1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTcwMi1cbmlvX3VyaW5nL25ldC5jOjcwMzpzdGF0aWMgaW50IGlvX3JlY3Ztc2dfbXNob3RfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL25ldC5jLTcwNC1cdFx0XHRcdCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICppb21zZyxcbi0tXG5pb191cmluZy9uZXQuYy03MjYtXG5pb191cmluZy9uZXQuYzo3Mjc6c3RhdGljIGludCBpb19yZWN2bXNnX2NvcHlfaGRyKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvbmV0LmMtNzI4LVx0XHRcdCAgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICppb21zZylcbi0tXG5pb191cmluZy9uZXQuYy03NDItXHR9XG5pb191cmluZy9uZXQuYzo3NDM6XHRyZXR1cm4gaW9fcmVjdm1zZ19tc2hvdF9wcmVwKHJlcSwgaW9tc2csIG1zZy5tc2dfbmFtZWxlbixcbmlvX3VyaW5nL25ldC5jLTc0NC1cdFx0XHRcdFx0bXNnLm1zZ19jb250cm9sbGVuKTtcbi0tXG5pb191cmluZy9uZXQuYy03NDYtXG5pb191cmluZy9uZXQuYzo3NDc6c3RhdGljIGludCBpb19yZWN2bXNnX3ByZXBfc2V0dXAoc3RydWN0IGlvX2tpb2NiICpyZXEpXG5pb191cmluZy9uZXQuYy03NDgte1xuLS1cbmlvX3VyaW5nL25ldC5jLTc3NC1cbmlvX3VyaW5nL25ldC5jOjc3NTpcdHJldHVybiBpb19yZWN2bXNnX2NvcHlfaGRyKHJlcSwga21zZyk7XG5pb191cmluZy9uZXQuYy03NzYtfVxuLS1cbmlvX3VyaW5nL25ldC5jLTc4MC1cbmlvX3VyaW5nL25ldC5jOjc4MTppbnQgaW9fcmVjdm1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9uZXQuYy03ODIte1xuLS1cbmlvX3VyaW5nL25ldC5jLTgzOS1cdHNyLVx1MDAzZW5yX211bHRpc2hvdF9sb29wcyA9IDA7XG5pb191cmluZy9uZXQuYzo4NDA6XHRyZXR1cm4gaW9fcmVjdm1zZ19wcmVwX3NldHVwKHJlcSk7XG5pb191cmluZy9uZXQuYy04NDEtfVxuLS1cbmlvX3VyaW5nL25ldC5jLTg0Ny0vKlxuaW9fdXJpbmcvbmV0LmM6ODQ4OiAqIEZpbmlzaGVzIGlvX3JlY3YgYW5kIGlvX3JlY3Ztc2cuXG5pb191cmluZy9uZXQuYy04NDktICpcbi0tXG5pb191cmluZy9uZXQuYy04NTItICovXG5pb191cmluZy9uZXQuYzo4NTM6c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvbmV0LmMtODU0LVx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jLTkzNS1cbmlvX3VyaW5nL25ldC5jOjkzNjpzdGF0aWMgaW50IGlvX3JlY3Ztc2dfcHJlcF9tdWx0aXNob3Qoc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbmlvX3VyaW5nL25ldC5jLTkzNy1cdFx0XHRcdCAgICAgc3RydWN0IGlvX3NyX21zZyAqc3IsIHZvaWQgX191c2VyICoqYnVmLFxuLS1cbmlvX3VyaW5nL25ldC5jLTk2MC1cbmlvX3VyaW5nL25ldC5jOjk2MTpzdHJ1Y3QgaW9fcmVjdm1zZ19tdWx0aXNob3RfaGRyIHtcbmlvX3VyaW5nL25ldC5jLTk2Mi1cdHN0cnVjdCBpb191cmluZ19yZWN2bXNnX291dCBtc2c7XG4tLVxuaW9fdXJpbmcvbmV0LmMtOTY1LVxuaW9fdXJpbmcvbmV0LmM6OTY2OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19tdWx0aXNob3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlvX3NyX21zZyAqaW8sXG5pb191cmluZy9uZXQuYy05NjctXHRcdFx0XHRzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jLTk3MS1cdGludCBjb3B5X2xlbjtcbmlvX3VyaW5nL25ldC5jOjk3MjpcdHN0cnVjdCBpb19yZWN2bXNnX211bHRpc2hvdF9oZHIgaGRyO1xuaW9fdXJpbmcvbmV0LmMtOTczLVxuLS1cbmlvX3VyaW5nL25ldC5jLTEwMDgtXHQvKiBlbnN1cmUgdGhhdCB0aGVyZSBpcyBubyBnYXAgYmV0d2VlbiBoZHIgYW5kIHNvY2thZGRyX3N0b3JhZ2UgKi9cbmlvX3VyaW5nL25ldC5jOjEwMDk6XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGlvX3JlY3Ztc2dfbXVsdGlzaG90X2hkciwgYWRkcikgIT1cbmlvX3VyaW5nL25ldC5jLTEwMTAtXHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBpb191cmluZ19yZWN2bXNnX291dCkpO1xuLS1cbmlvX3VyaW5nL25ldC5jLTEwMTktXG5pb191cmluZy9uZXQuYzoxMDIwOmludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5pb191cmluZy9uZXQuYy0xMDIxLXtcbi0tXG5pb191cmluZy9uZXQuYy0xMDUyLVx0XHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpIHtcbmlvX3VyaW5nL25ldC5jOjEwNTM6XHRcdFx0cmV0ID0gaW9fcmVjdm1zZ19wcmVwX211bHRpc2hvdChrbXNnLCBzciwgXHUwMDI2c2VsLmFkZHIsIFx1MDAyNmxlbik7XG5pb191cmluZy9uZXQuYy0xMDU0LVx0XHRcdGlmIChyZXQpIHtcbi0tXG5pb191cmluZy9uZXQuYy0xMDY1LVx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQVBPTExfTVVMVElTSE9UKSB7XG5pb191cmluZy9uZXQuYzoxMDY2Olx0XHRyZXQgPSBpb19yZWN2bXNnX211bHRpc2hvdChzb2NrLCBzciwga21zZywgZmxhZ3MsXG5pb191cmluZy9uZXQuYy0xMDY3LVx0XHRcdFx0XHQgICBcdTAwMjZtc2hvdF9maW5pc2hlZCk7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTExMC1cdHNlbC52YWwgPSByZXQ7XG5pb191cmluZy9uZXQuYzoxMTExOlx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzLCBjb25zdW1lZCkpXG5pb191cmluZy9uZXQuYy0xMTEyLVx0XHRnb3RvIHJldHJ5X211bHRpc2hvdDtcbi0tXG5pb191cmluZy9uZXQuYy0xMTE2LVxuaW9fdXJpbmcvbmV0LmM6MTExNzpzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbmlvX3VyaW5nL25ldC5jLTExMTgtXHRcdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTE5MC1cbmlvX3VyaW5nL25ldC5jOjExOTE6aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL25ldC5jLTExOTIte1xuLS1cbmlvX3VyaW5nL25ldC5jLTEyMzEtXHRcdHNlbC52YWwgPSBzci1cdTAwM2VsZW47XG5pb191cmluZy9uZXQuYzoxMjMyOlx0XHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcdTAwMjZzZWwsIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5jLTEyMzMtXHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKSB7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTI4Ni1cdHNlbC52YWwgPSByZXQ7XG5pb191cmluZy9uZXQuYzoxMjg3Olx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzLCBjb25zdW1lZCkpXG5pb191cmluZy9uZXQuYy0xMjg4LVx0XHRnb3RvIHJldHJ5X211bHRpc2hvdDtcbi0tXG5pb191cmluZy9uZXQuYy0xMjkyLVxuaW9fdXJpbmcvbmV0LmM6MTI5MzppbnQgaW9fcmVjdnpjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbmlvX3VyaW5nL25ldC5jLTEyOTQte1xuaW9fdXJpbmcvbmV0LmM6MTI5NTpcdHN0cnVjdCBpb19yZWN2emMgKnpjID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3JlY3Z6Yyk7XG5pb191cmluZy9uZXQuYy0xMjk2LVx0dW5zaWduZWQgaWZxX2lkeDtcbi0tXG5pb191cmluZy9uZXQuYy0xMzIwLVxuaW9fdXJpbmcvbmV0LmM6MTMyMTppbnQgaW9fcmVjdnpjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5pb191cmluZy9uZXQuYy0xMzIyLXtcbmlvX3VyaW5nL25ldC5jOjEzMjM6XHRzdHJ1Y3QgaW9fcmVjdnpjICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19yZWN2emMpO1xuaW9fdXJpbmcvbmV0LmMtMTMyNC1cdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4tLVxuaW9fdXJpbmcvbmV0Lmg9MzU9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9uZXQuaC0zNi1cbmlvX3VyaW5nL25ldC5oOjM3OmludCBpb19yZWN2bXNnX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XG5pb191cmluZy9uZXQuaDozODppbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5oOjM5OmludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvbmV0LmgtNDAtXG4tLVxuaW9fdXJpbmcvb3BkZWYuYz01ND1jb25zdCBzdHJ1Y3QgaW9faXNzdWVfZGVmIGlvX2lzc3VlX2RlZnNbXSA9IHtcbi0tXG5pb191cmluZy9vcGRlZi5jLTE1OC1cdFx0LmFzeW5jX3NpemVcdFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXG5pb191cmluZy9vcGRlZi5jOjE1OTpcdFx0LnByZXBcdFx0XHQ9IGlvX3JlY3Ztc2dfcHJlcCxcbmlvX3VyaW5nL29wZGVmLmM6MTYwOlx0XHQuaXNzdWVcdFx0XHQ9IGlvX3JlY3Ztc2csXG5pb191cmluZy9vcGRlZi5jLTE2MS0jZWxzZVxuLS1cbmlvX3VyaW5nL29wZGVmLmMtMzAyLVx0XHQuYXN5bmNfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyKSxcbmlvX3VyaW5nL29wZGVmLmM6MzAzOlx0XHQucHJlcFx0XHRcdD0gaW9fcmVjdm1zZ19wcmVwLFxuaW9fdXJpbmcvb3BkZWYuYzozMDQ6XHRcdC5pc3N1ZVx0XHRcdD0gaW9fcmVjdixcbmlvX3VyaW5nL29wZGVmLmMtMzA1LSNlbHNlXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy01MjgtI2lmIGRlZmluZWQoQ09ORklHX05FVClcbmlvX3VyaW5nL29wZGVmLmM6NTI5Olx0XHQucHJlcFx0XHRcdD0gaW9fcmVjdnpjX3ByZXAsXG5pb191cmluZy9vcGRlZi5jOjUzMDpcdFx0Lmlzc3VlXHRcdFx0PSBpb19yZWN2emMsXG5pb191cmluZy9vcGRlZi5jLTUzMS0jZWxzZVxuLS1cbmlvX3VyaW5nL3pjcnguaD0xMzA9c3RhdGljIGlubGluZSBpbnQgaW9femNyeF9jdHJsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3pjcnguaC0xMzYtXG5pb191cmluZy96Y3J4Lmg6MTM3OmludCBpb19yZWN2emMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy96Y3J4Lmg6MTM4OmludCBpb19yZWN2emNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcbmlvX3VyaW5nL3pjcnguaC0xMzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgaW9fdXJpbmcvbmV0LmMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSBkaWN0YXRpbmcgdGhlIGJlaGF2aW9yIG9mIGBpb191cmluZy9uZXQuY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZpbGVzLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBgaW9fdXJpbmcvTWFrZWZpbGVgIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYXMgaXQgc2hvdWxkIGRldGFpbCBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbGx5IGZsYWcgc29tZSBjb25maWd1cmF0aW9uIGJpdHMuIEZhaWxpbmcgdGhhdCwgYGlvX3VyaW5nL0tjb25maWdgIGlzIGFsbW9zdCBjZXJ0YWlubHkgd2hlcmUgdGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCBhbmQgZG9jdW1lbnRlZC4gSSYjMzk7bSBiZXR0aW5nIG9uZSBvZiB0aG9zZSB3aWxsIGxlYWQgbWUgZGlyZWN0bHkgdG8gdGhlIHJlbGV2YW50IGtub2JzIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX05FVF9SWF9CVVNZX1BPTEwpXHQmIzQzOz0gbmFwaS5vXG5pb191cmluZy9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTkVUKSAmIzQzOz0gbmV0Lm8gY21kX25ldC5vXG5pb191cmluZy9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IGZkaW5mby5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYxNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGlvX3VyaW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBgaW9fdXJpbmdgIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoaXMga2VybmVsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludHMgYXJlIGBpb191cmluZy9LY29uZmlnYCwgdGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0aGUgY29yZSBkZWZpbml0aW9ucyBmb3IgaW9fdXJpbmcgaXRzZWxmIHRvIGJlLCBhbmQgdGhlbiBgaW5pdC9LY29uZmlnYC4gYGluaXQvS2NvbmZpZ2Agb2Z0ZW4gY29udGFpbnMgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgcG90ZW50aWFsbHkgcmVmZXJlbmNlcyBvdGhlciBLY29uZmlnIGZpbGVzIHRoYXQgYXJlIHRoZW4gaW5jbHVkZWQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlc2UgdHdvIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgcG9pbnRzIGZvciBlbmFibGluZywgZGlzYWJsaW5nLCBhbmQgcG9zc2libHkgY3VzdG9taXppbmcgYGlvX3VyaW5nYCBpbiB0aGlzIHBhcnRpY3VsYXIga2VybmVsIGJ1aWxkLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBhbGwgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGZsYWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lPX1VSSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTUyPWNvbmZpZyBBSU9cbi0tXG5pbml0L0tjb25maWctMTk1OS1cbmluaXQvS2NvbmZpZzoxOTYwOmNvbmZpZyBJT19VUklOR1xuaW5pdC9LY29uZmlnLTE5NjEtXHRib29sIFwmIzM0O0VuYWJsZSBJTyB1cmluZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZz0xOTY5PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbmluaXQvS2NvbmZpZy0xOTcwLVx0Ym9vbCBcJiMzNDtFbmFibGUgR0NPViBwcm9maWxpbmcgb24gdGhlIGlvX3VyaW5nIHN1YnN5c3RlbVwmIzM0O1xuaW5pdC9LY29uZmlnOjE5NzE6XHRkZXBlbmRzIG9uIElPX1VSSU5HIFx1MDAyNlx1MDAyNiBHQ09WX0tFUk5FTFxuaW5pdC9LY29uZmlnLTE5NzItXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnLTE5ODEtXG5pbml0L0tjb25maWc6MTk4Mjpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTk4My1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuaW5pdC9LY29uZmlnLTE5ODQtXHRkZWZhdWx0IG5cbmluaXQvS2NvbmZpZzoxOTg1Olx0ZGVwZW5kcyBvbiBJT19VUklOR1xuaW5pdC9LY29uZmlnLTE5ODYtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIEkvTyB3aXRoIGlvX3VyaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMgaW4gdGhpcyBgaW9fdXJpbmcvbmV0LmNgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gcGlucG9pbnQgdGhlIGFyZWFzIHdoZXJlIHRoZXkmIzM5O3ZlIG1hZGUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGVzZSBmdW5jdGlvbnM6IGBpb19yZWN2X2ZpbmlzaGAgKHdoaWNoIGlzIGEgc3RhdGljIGlubGluZSwgc28gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kKSwgYGlvX3JlY3Ztc2dgLCBgaW9fcmVjdl9idWZfc2VsZWN0YCAoYW5vdGhlciBzdGF0aWMgb25lKSwgYW5kIGBpb19yZWN2YC4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBpb19yZWN2X2ZpbmlzaGAsIGBpb19yZWN2bXNnYCwgYW5kIGBpb19yZWN2YCBhbmQgc2VlIGhvdyB0aGUgY2hhbmdlcyBoYXZlIGFmZmVjdGVkIHRoZSBmbG93IGFyb3VuZCB0aGVtLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2h5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NTA6XHQgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgYWN0dWFsbHkgZmluaXNoZWQsIG9yIGZhbHNlIGlmIGl0IHNob3VsZCBydW5cbiA4NTE6XHQgKiBhZ2FpbiAoZm9yIG11bHRpc2hvdCkuXG4gODUyOlx0ICovXG4gODUzOlx0c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIDg1NDpcdFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuIDg1NTpcdFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIGJvb2wgbXNob3RfZmluaXNoZWQsXG4gODU2Olx0XHRcdFx0XHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBzaXplX3QgY29uc3VtZWQpXG4gODU3Olx0e1xuIDg1ODpcdFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcbiA4NTk6XHRcdHVuc2lnbmVkIGludCBjZmxhZ3MgPSAwO1xuIDg2MDpcdFxuIDg2MTpcdFx0aWYgKGttc2ctXHUwMDNlbXNnLm1zZ19pbnEgXHUwMDNlIDApXG4gODYyOlx0XHRcdGNmbGFncyB8PSBJT1JJTkdfQ1FFX0ZfU09DS19OT05FTVBUWTtcbiA4NjM6XHRcbiA4NjQ6XHRcdGlmIChzZWwtXHUwMDNldmFsIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfTVNIT1RfTElNKSB7XG4gODY1Olx0XHRcdC8qXG4gODY2Olx0XHRcdCAqIElmIHNyLVx1MDAzZWxlbiBoaXRzIHplcm8sIHRoZSBsaW1pdCBoYXMgYmVlbiByZWFjaGVkLiBNYXJrXG4gODY3Olx0XHRcdCAqIG1zaG90IGFzIGZpbmlzaGVkLCBhbmQgZmxhZyBNU0hPVF9ET05FIGFzIHdlbGwgdG8gcHJldmVudFxuIDg2ODpcdFx0XHQgKiBhIHBvdGVudGlhbCBidW5kbGUgZnJvbSBiZWluZyByZXRyaWVkLlxuIDg2OTpcdFx0XHQgKi9cbiA4NzA6XHRcdFx0c3ItXHUwMDNlbXNob3RfdG90YWxfbGVuIC09IG1pbl90KGludCwgc2VsLVx1MDAzZXZhbCwgc3ItXHUwMDNlbXNob3RfdG90YWxfbGVuKTtcbiA4NzE6XHRcdFx0aWYgKCFzci1cdTAwM2Vtc2hvdF90b3RhbF9sZW4pIHtcbiA4NzI6XHRcdFx0XHRzci1cdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9NU0hPVF9ET05FO1xuIDg3MzpcdFx0XHRcdG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcbiA4NzQ6XHRcdFx0fVxuIDg3NTpcdFx0fVxuIDg3NjpcdFxuIDg3NzpcdFx0aWYgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XG4gODc4Olx0XHRcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cdTAwM2V2YWwgLSBzci1cdTAwM2Vkb25lX2lvO1xuIDg3OTpcdFxuIDg4MDpcdFx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgY29uc3VtZWQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIGNvbnN1bWVkKSk7XG4gODgxOlx0XHRcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXG4gODgyOlx0XHRcdFx0Y2ZsYWdzID0gcmVxLVx1MDAzZWNxZS5mbGFncyB8IChjZmxhZ3MgXHUwMDI2IENRRV9GX01BU0spO1xuIDg4MzpcdFx0XHRpZiAoc3ItXHUwMDNlbXNob3RfbGVuIFx1MDAyNlx1MDAyNiBzZWwtXHUwMDNldmFsIFx1MDAzZT0gc3ItXHUwMDNlbXNob3RfbGVuKVxuIDg4NDpcdFx0XHRcdHNyLVx1MDAzZWZsYWdzIHw9IElPUklOR19SRUNWX01TSE9UX0NBUDtcbiA4ODU6XHRcdFx0LyogYnVuZGxlIHdpdGggbm8gbW9yZSBpbW1lZGlhdGUgYnVmZmVycywgd2UmIzM5O3JlIGRvbmUgKi9cbiA4ODY6XHRcdFx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQkxfRU1QVFkpXG4gODg3Olx0XHRcdFx0Z290byBmaW5pc2g7XG4gODg4Olx0XHRcdC8qXG4gODg5Olx0XHRcdCAqIElmIG1vcmUgaXMgYXZhaWxhYmxlIEFORCBpdCB3YXMgYSBmdWxsIHRyYW5zZmVyLCByZXRyeSBhbmRcbiA4OTA6XHRcdFx0ICogYXBwZW5kIHRvIHRoaXMgb25lXG4gODkxOlx0XHRcdCAqL1xuIDg5MjpcdFx0XHRpZiAoIShzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfTk9fUkVUUlkpIFx1MDAyNlx1MDAyNlxuIDg5MzpcdFx0XHQgICAga21zZy1cdTAwM2Vtc2cubXNnX2lucSBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgdGhpc19yZXQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4gODk0Olx0XHRcdCAgICAhaW92X2l0ZXJfY291bnQoXHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIpKSB7XG4gODk1Olx0XHRcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyA9IGNmbGFncyBcdTAwMjYgfkNRRV9GX01BU0s7XG4gODk2Olx0XHRcdFx0c3ItXHUwMDNlbGVuID0ga21zZy1cdTAwM2Vtc2cubXNnX2lucTtcbiA4OTc6XHRcdFx0XHRzci1cdTAwM2Vkb25lX2lvICYjNDM7PSB0aGlzX3JldDtcbiA4OTg6XHRcdFx0XHRzci1cdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9SRVRSWTtcbiA4OTk6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gOTAwOlx0XHRcdH1cbiA5MDE6XHRcdH0gZWxzZSB7XG4gOTAyOlx0XHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIGNvbnN1bWVkLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuIDkwMzpcdFx0fVxuIDkwNDpcdFxuIDkwNTpcdFx0LypcbiA5MDY6XHRcdCAqIEZpbGwgQ1FFIGZvciB0aGlzIHJlY2VpdmUgYW5kIHNlZSBpZiB3ZSBzaG91bGQga2VlcCB0cnlpbmcgdG9cbiA5MDc6XHRcdCAqIHJlY2VpdmUgZnJvbSB0aGlzIHNvY2tldC5cbiA5MDg6XHRcdCAqL1xuIDkwOTpcdFx0aWYgKChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkgXHUwMDI2XHUwMDI2ICFtc2hvdF9maW5pc2hlZCBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MDcKCQkJCQkJCW91dHB1dDogMTI0CgkJCQkJCQl0aG91Z2h0czogNTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgTmV0d29yayBQYXRjaDogQSBGdXp6aW5nIFBlcnNwZWN0aXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gYSBmdXp6aW5nIHN0YW5kcG9pbnQsIHRoaXMgcGF0Y2ggbG9va3MgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSBsb29raW5nIGF0IGNoYW5nZXMgaW4gYGlvX3VyaW5nL25ldC5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IGJ1ZmZlcnMgYXJlIGhhbmRsZWQgZHVyaW5nIGBpb19yZWN2YCBhbmQgYGlvX3JlY3Ztc2dgIG9wZXJhdGlvbnMsIHBhcnRpY3VsYXJseSB3aGVuIGBNU0dfVFJVTkNgIGlzIHVzZWQgb3IgcGFydGlhbCBmaWxscyBvY2N1ci4gVGhlIGtleSBpcyBwcmV2ZW50aW5nIG92ZXItY29uc3VtcHRpb24gb2YgYnVmZmVyIGxlbmd0aHMgaW4gYGlvX3B1dF9rYnVmYCBhbmQgYGlvX3B1dF9rYnVmc2AuIEdpdmVuIHRoZSByZWFjaGFiaWxpdHkgb2YgYElPUklOR19PUF9SRUNWYCBhbmQgYElPUklOR19PUF9SRUNWTVNHYCBhcyBzdGFuZGFyZCBpb191cmluZyBvcGVyYXRpb25zLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vay4gSXQgZGlyZWN0bHkgdG91Y2hlcyB0aGUgY29yZSBuZXR3b3JrIG9wY29kZSBleGVjdXRpb24gbG9naWMgYW5kIGJ1ZmZlciBtYW5hZ2VtZW50LCBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSBhcmUgdGhlIGVudHJ5IHBvaW50czogYGlvX3JlY3ZgIGFuZCBgaW9fcmVjdm1zZ2AuIFRob3VnaCBgaW9fcmVjdl9idWZfc2VsZWN0YCBpcyBpbiB0aGUgbWl4LCBsZXQmIzM5O3MgcHJpb3JpdGl6ZSB0aGUgbm9uLXN0YXRpYyBlbnRyeXBvaW50cyBmaXJzdC4gQW5kIG9mIGNvdXJzZSwgdGhlIHN0YXRpYyBpbmxpbmUgYGlvX3JlY3ZfZmluaXNoYCBpcyBub3QgYW4gZXhwbGljaXQgc3ltYm9sLiBNeSB0aGlua2luZyBpcyB0aGF0IHRoZSByZWxldmFudCBjb2RlIHdpbGwgYmUgYWNjZXNzZWQgYnkgZW50cnlwb2ludHMsIHNvIGxldCYjMzk7cyBrZWVwIGl0IHNpbXBsZS4KCkNvbmZpZ3VyYXRpb24td2lzZSwgaXQgaGluZ2VzIG9uIGBJT19VUklOR2AgYW5kIGBORVRgLCB3aGljaCBpcyBleHBlY3RlZCBnaXZlbiB0aGUgc3Vic3lzdGVtLiBUaGUgYGlvX3VyaW5nL01ha2VmaWxlYCBjb25maXJtcyB0aGUgZGVwZW5kZW5jeSBvbiBgQ09ORklHX05FVGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBubyBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4KClNvLCB0byBzdW1tYXJpemU6Ci0gICAqKldvcnRoRnV6emluZzoqKiBUcnVlCi0gICAqKkZvY3VzU3ltYm9sczoqKiBgaW9fcmVjdmAsIGBpb19yZWN2bXNnYAotICAgKipFbmFibGVDb25maWdzOioqIGBJT19VUklOR2AsIGBORVRgCgpOb3csIGxldCYjMzk7cyBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpb191cmluZyByZWNlaXZlIGhhbmRsaW5nIChpb19yZWN2LCBpb19yZWN2bXNnLCBpb19yZWN2X2J1Zl9zZWxlY3QsIGlvX3JlY3ZfZmluaXNoKSB0byBwcm9wZXJseSB0cmFjayBhbmQgY2FwIGNvbnN1bWVkIGJ1ZmZlciBsZW5ndGggd2hlbiBNU0dfVFJVTkMgaXMgdXNlZCBvciBidWZmZXIgc2l6ZXMgZGlmZmVyIGZyb20gcmV0dXJuZWQgcGFja2V0IGxlbmd0aHMuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIHZpYSBzdGFuZGFyZCBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpb191cmluZyByZWNlaXZlIGhhbmRsaW5nIChpb19yZWN2LCBpb19yZWN2bXNnLCBpb19yZWN2X2J1Zl9zZWxlY3QsIGlvX3JlY3ZfZmluaXNoKSB0byBwcm9wZXJseSB0cmFjayBhbmQgY2FwIGNvbnN1bWVkIGJ1ZmZlciBsZW5ndGggd2hlbiBNU0dfVFJVTkMgaXMgdXNlZCBvciBidWZmZXIgc2l6ZXMgZGlmZmVyIGZyb20gcmV0dXJuZWQgcGFja2V0IGxlbmd0aHMuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIHZpYSBzdGFuZGFyZCBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYnVmZmVyIGxlbmd0aCBhY2NvdW50aW5nIGluIGlvX3VyaW5nJiMzOTtzIHJlY3YgYW5kIHJlY3Ztc2cgcGF0aHMgd2hlbiBNU0dfVFJVTkMgaXMgdXNlZC4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgJiMzOTtjb25zdW1lZCYjMzk7IHZhcmlhYmxlIHRvIGVuc3VyZSB0aGF0IGJ1ZmZlciByaW5nIGNvbW1pdHRpbmcgYW5kIGJ1bmRsZSBidWZmZXIgY291bnRpbmcgKGlvX2J1bmRsZV9uYnVmcykgb25seSBjb25zdW1lIHVwIHRvIHRoZSBhY3R1YWwgYnVmZmVyIGNhcGFjaXR5ICgmIzM5O2xlbiYjMzk7KSByYXRoZXIgdGhhbiB0aGUgdHJ1bmNhdGVkIHRvdGFsIHBhY2tldCBsZW5ndGggKCYjMzk7cmV0JiMzOTspLlxuXG5BbGwgbmV3IGFuZCBtb2RpZmllZCB2YXJpYWJsZXMgKCYjMzk7bGVuJiMzOTssICYjMzk7Y29uc3VtZWQmIzM5OykgYXJlIHN0cmljdGx5IGluaXRpYWxpemVkIGFuZCBhc3NpZ25lZCBiZWZvcmUgdXNlLiBUaGUgbG9naWMgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIGxlYWsgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2Vyc3BhY2UuIEFueSByaXNrcyByZWxhdGVkIHRvIGJ1ZmZlciBvdmVyLWNvbnN1bXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXRlciBpbmRleGluZyBpbiBpb19idW5kbGVfbmJ1ZnMgZmFsbCB1bmRlciBib3VuZHMtY2hlY2tpbmcgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiM2NmNmNmYjYxYzg4N2JjZTAzMTFiZGUwYWFmYTdhM2NmNmI4NmY5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAyMzoyNzowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL25ldC5jIGIvaW9fdXJpbmcvbmV0LmMKaW5kZXggZmJlNzE5ZDg2YzQ2My4uZjgxMTBkYzlmODYwNiAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvbmV0LmMKQEAgLTg1Myw3ICYjNDM7ODUzLDcgQEAgaW50IGlvX3JlY3Ztc2dfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKQogc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLAogCQkJCSAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywKIAkJCQkgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgYm9vbCBtc2hvdF9maW5pc2hlZCwKLQkJCQkgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKQomIzQzOwkJCQkgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBzaXplX3QgY29uc3VtZWQpCiB7CiAJc3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTsKIAl1bnNpZ25lZCBpbnQgY2ZsYWdzID0gMDsKQEAgLTg3Nyw3ICYjNDM7ODc3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLAogCWlmIChzci0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkgewogCQlzaXplX3QgdGhpc19yZXQgPSBzZWwtJmd0O3ZhbCAtIHNyLSZndDtkb25lX2lvOwogCi0JCWNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLSZndDtidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7CiYjNDM7CQljZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgY29uc3VtZWQsIHNlbC0mZ3Q7YnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBjb25zdW1lZCkpOwogCQlpZiAoc3ItJmd0O2ZsYWdzICZhbXA7IElPUklOR19SRUNWX1JFVFJZKQogCQkJY2ZsYWdzID0gcmVxLSZndDtjcWUuZmxhZ3MgfCAoY2ZsYWdzICZhbXA7IENRRV9GX01BU0spOwogCQlpZiAoc3ItJmd0O21zaG90X2xlbiAmYW1wOyZhbXA7IHNlbC0mZ3Q7dmFsICZndDs9IHNyLSZndDttc2hvdF9sZW4pCkBAIC04OTksNyAmIzQzOzg5OSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCX0gZWxzZSB7Ci0JCWNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIHNlbC0mZ3Q7dmFsLCBzZWwtJmd0O2J1Zl9saXN0KTsKJiM0MzsJCWNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIGNvbnN1bWVkLCBzZWwtJmd0O2J1Zl9saXN0KTsKIAl9CiAKIAkvKgpAQCAtMTAyNyw2ICYjNDM7MTAyNyw3IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiAJaW50IHJldCwgbWluX3JldCA9IDA7CiAJYm9vbCBmb3JjZV9ub25ibG9jayA9IGlzc3VlX2ZsYWdzICZhbXA7IElPX1VSSU5HX0ZfTk9OQkxPQ0s7CiAJYm9vbCBtc2hvdF9maW5pc2hlZCA9IHRydWU7CiYjNDM7CXNpemVfdCBsZW4sIGNvbnN1bWVkID0gMDsKIAogCXNvY2sgPSBzb2NrX2Zyb21fZmlsZShyZXEtJmd0O2ZpbGUpOwogCWlmICh1bmxpa2VseSghc29jaykpCkBAIC0xMDQyLDkgJiM0MzsxMDQzLDggQEAgaW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAogcmV0cnlfbXVsdGlzaG90OgogCXNlbC5idWZfbGlzdCA9IE5VTEw7CiYjNDM7CWxlbiA9IHNyLSZndDtsZW47CiAJaWYgKGlvX2RvX2J1ZmZlcl9zZWxlY3QocmVxKSkgewotCQlzaXplX3QgbGVuID0gc3ItJmd0O2xlbjsKLQogCQlzZWwgPSBpb19idWZmZXJfc2VsZWN0KHJlcSwgJmFtcDtsZW4sIHNyLSZndDtidWZfZ3JvdXAsIGlzc3VlX2ZsYWdzKTsKIAkJaWYgKCFzZWwuYWRkcikKIAkJCXJldHVybiAtRU5PQlVGUzsKQEAgLTEwNjUsNiAmIzQzOzEwNjUsNyBAQCBpbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQogCWlmIChyZXEtJmd0O2ZsYWdzICZhbXA7IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkgewogCQlyZXQgPSBpb19yZWN2bXNnX211bHRpc2hvdChzb2NrLCBzciwga21zZywgZmxhZ3MsCiAJCQkJCSAgICZhbXA7bXNob3RfZmluaXNoZWQpOwomIzQzOwkJY29uc3VtZWQgPSByZXQ7CiAJfSBlbHNlIHsKIAkJLyogZGlzYWJsZSBwYXJ0aWFsIHJldHJ5IGZvciByZWN2bXNnIHdpdGggY21zZyBhdHRhY2hlZCAqLwogCQlpZiAoZmxhZ3MgJmFtcDsgTVNHX1dBSVRBTEwgJmFtcDsmYW1wOyAha21zZy0mZ3Q7bXNnLm1zZ19jb250cm9sbGVuKQpAQCAtMTA3Miw2ICYjNDM7MTA3MywxNSBAQCBpbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQogCiAJCXJldCA9IF9fc3lzX3JlY3Ztc2dfc29jayhzb2NrLCAmYW1wO2ttc2ctJmd0O21zZywgc3ItJmd0O3Vtc2csCiAJCQkJCSBrbXNnLSZndDt1YWRkciwgZmxhZ3MpOwomIzQzOwkJLyoKJiM0MzsJCSAqIFdpdGggTVNHX1RSVU5DLCB0aGUgbmV0IGxheWVyIHdpbGwgcmV0dXJuIHRoZSBmdWxsIHNpemUgb2YKJiM0MzsJCSAqIHRoZSBwYWNrZXQsIGV2ZW4gaWYgd2Ugb25seSBmaWxsZWQgcGFydCBvZiBpdCBpbiB0aGUgYnVmZmVycy4KJiM0MzsJCSAqIEFkanVzdCB0aGUgcmV0dXJuZWQgc2l6ZSB0byBjb25zdW1lIG9ubHkgdGhlIHJlYWwgcGFydCBvZiB0aGUKJiM0MzsJCSAqIGJ1ZmZlci4KJiM0MzsJCSAqLwomIzQzOwkJY29uc3VtZWQgPSByZXQ7CiYjNDM7CQlpZiAocmV0ICZndDsgbGVuKQomIzQzOwkJCWNvbnN1bWVkID0gbGVuOwogCX0KIAogCWlmIChyZXQgJmx0OyBtaW5fcmV0KSB7CkBAIC0xMDk4LDcgJiM0MzsxMTA4LDcgQEAgaW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAkJaW9fa2J1Zl9yZWN5Y2xlKHJlcSwgc2VsLmJ1Zl9saXN0LCBpc3N1ZV9mbGFncyk7CiAKIAlzZWwudmFsID0gcmV0OwotCWlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCAmYW1wO3NlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSkKJiM0MzsJaWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csICZhbXA7c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MsIGNvbnN1bWVkKSkKIAkJZ290byByZXRyeV9tdWx0aXNob3Q7CiAKIAlyZXR1cm4gc2VsLnZhbDsKQEAgLTExMDgsNiAmIzQzOzExMTgsNyBAQCBzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZwogCQkJICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiB7CiAJc3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTsKJiM0MzsJc2l6ZV90IGxlbjsKIAlpbnQgcmV0OwogCiAJLyoKQEAgLTExNTMsMTMgJiM0MzsxMTY0LDE0IEBAIHN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnCiAJCS8qIHNwZWNpYWwgY2FzZSAxIHZlYywgY2FuIGJlIGEgZmFzdCBwYXRoICovCiAJCWlmIChyZXQgPT0gMSkgewogCQkJc3ItJmd0O2J1ZiA9IGFyZy5pb3ZzWzBdLmlvdl9iYXNlOwotCQkJc3ItJmd0O2xlbiA9IGFyZy5pb3ZzWzBdLmlvdl9sZW47CiYjNDM7CQkJbGVuID0gc3ItJmd0O2xlbiA9IGFyZy5pb3ZzWzBdLmlvdl9sZW47CiAJCQlnb3RvIG1hcF91YnVmOwogCQl9CiAJCWlvdl9pdGVyX2luaXQoJmFtcDtrbXNnLSZndDttc2cubXNnX2l0ZXIsIElURVJfREVTVCwgYXJnLmlvdnMsIHJldCwKLQkJCQlhcmcub3V0X2xlbik7CiYjNDM7CQkJICAgICAgYXJnLm91dF9sZW4pOwomIzQzOwkJbGVuID0gYXJnLm91dF9sZW47CiAJfSBlbHNlIHsKLQkJc2l6ZV90IGxlbiA9IHNlbC0mZ3Q7dmFsOwomIzQzOwkJbGVuID0gc2VsLSZndDt2YWw7CiAKIAkJKnNlbCA9IGlvX2J1ZmZlcl9zZWxlY3QocmVxLCAmYW1wO2xlbiwgc3ItJmd0O2J1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpOwogCQlpZiAoIXNlbC0mZ3Q7YWRkcikKQEAgLTExNzMsNyAmIzQzOzExODUsNyBAQCBzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZwogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIGxlbjsKIH0KIAogaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKQEAgLTExODQsNiAmIzQzOzExOTYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQogCXN0cnVjdCBzb2NrZXQgKnNvY2s7CiAJdW5zaWduZWQgZmxhZ3M7CiAJaW50IHJldCwgbWluX3JldCA9IDA7CiYjNDM7CXNpemVfdCBjb25zdW1lZCA9IDAsIGxlbiA9IDA7CiAJYm9vbCBmb3JjZV9ub25ibG9jayA9IGlzc3VlX2ZsYWdzICZhbXA7IElPX1VSSU5HX0ZfTk9OQkxPQ0s7CiAJYm9vbCBtc2hvdF9maW5pc2hlZDsKIApAQCAtMTIxMyw2ICYjNDM7MTIyNiw3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiAKIHJldHJ5X211bHRpc2hvdDoKIAlzZWwuYnVmX2xpc3QgPSBOVUxMOwomIzQzOwlsZW4gPSBzci0mZ3Q7bGVuOwogCWlmIChpb19kb19idWZmZXJfc2VsZWN0KHJlcSkpIHsKIAkJc2VsLnZhbCA9IHNyLSZndDtsZW47CiAJCXJldCA9IGlvX3JlY3ZfYnVmX3NlbGVjdChyZXEsIGttc2csICZhbXA7c2VsLCBpc3N1ZV9mbGFncyk7CkBAIC0xMjIwLDYgJiM0MzsxMjM0LDcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAkJCWttc2ctJmd0O21zZy5tc2dfaW5xID0gLTE7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CiYjNDM7CQlsZW4gPSByZXQ7CiAJCXNyLSZndDtidWYgPSBOVUxMOwogCX0KIApAQCAtMTI1MCw2ICYjNDM7MTI2NSwxNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQogCX0KIAogCW1zaG90X2ZpbmlzaGVkID0gcmV0ICZsdDs9IDA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFdpdGggTVNHX1RSVU5DLCB0aGUgbmV0IGxheWVyIHdpbGwgcmV0dXJuIHRoZSBmdWxsIHNpemUgb2YKJiM0MzsJICogdGhlIHBhY2tldCwgZXZlbiBpZiB3ZSBvbmx5IGZpbGxlZCBwYXJ0IG9mIGl0IGluIHRoZSBidWZmZXJzLgomIzQzOwkgKiBBZGp1c3QgdGhlIHJldHVybmVkIHNpemUgdG8gY29uc3VtZSBvbmx5IHRoZSByZWFsIHBhcnQgb2YgdGhlCiYjNDM7CSAqIGJ1ZmZlci4KJiM0MzsJICovCiYjNDM7CWNvbnN1bWVkID0gcmV0OwomIzQzOwlpZiAocmV0ICZndDsgbGVuKQomIzQzOwkJY29uc3VtZWQgPSBsZW47CiYjNDM7CiAJaWYgKHJldCAmZ3Q7IDApCiAJCXJldCAmIzQzOz0gc3ItJmd0O2RvbmVfaW87CiAJZWxzZSBpZiAoc3ItJmd0O2RvbmVfaW8pCkBAIC0xMjU4LDcgJiM0MzsxMjg0LDcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAkJaW9fa2J1Zl9yZWN5Y2xlKHJlcSwgc2VsLmJ1Zl9saXN0LCBpc3N1ZV9mbGFncyk7CiAKIAlzZWwudmFsID0gcmV0OwotCWlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCAmYW1wO3NlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSkKJiM0MzsJaWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csICZhbXA7c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MsIGNvbnN1bWVkKSkKIAkJZ290byByZXRyeV9tdWx0aXNob3Q7CiAKIAlyZXR1cm4gc2VsLnZhbDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipLTVNBTiBGdXp6aW5nIERlY2lzaW9uOiBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgS01TQU4gZnV6emluZyBpcyB3YXJyYW50ZWQgZm9yIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgZmlyc3QuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgKndoYXQqIHRoaXMgcGF0Y2ggaXMgdHJ5aW5nIHRvIGRvIGFuZCAqd2h5KiBpdCYjMzk7cyBiZWVuIHByb3Bvc2VkLgoKVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBsb2NhdGVkIGluIGBpb191cmluZy9uZXQuY2AgaXMgdGhlIGZpcnN0IGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBjb25zaWRlcmFibHkuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGF0IHNwZWNpZmljIGZpbGUuIEkmIzM5O2xsIHByb2JhYmx5IGZpcmUgdXAgZ3JlcHBlciBvciBqdXN0IHJlYWQgdGhlIGZpbGUgZGlyZWN0bHksIGRlcGVuZGluZyBvbiBob3cgZmFtaWxpYXIgSSBhbSB3aXRoIHRoaXMgYXJlYSBvZiB0aGUgY29kZS4gVGhlIGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCB0aGUgYWZmZWN0ZWQgZnVuY3Rpb25zIHdpdGhpbiBgaW9fdXJpbmcvbmV0LmNgLCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZWlyIGxvZ2ljLCBpZGVudGlmeSBwb3RlbnRpYWwgZGF0YSByYWNlcywgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIG90aGVyIHZ1bG5lcmFiaWxpdGllcyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQuIFdpdGggYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBwYXRjaCBhbmQgaXRzIGNvbnRleHQsIEkgY2FuIG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgdGhlIG5lY2Vzc2l0eSBvZiBLTVNBTiBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NTA6XHQgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgYWN0dWFsbHkgZmluaXNoZWQsIG9yIGZhbHNlIGlmIGl0IHNob3VsZCBydW5cbiA4NTE6XHQgKiBhZ2FpbiAoZm9yIG11bHRpc2hvdCkuXG4gODUyOlx0ICovXG4gODUzOlx0c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIDg1NDpcdFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuIDg1NTpcdFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIGJvb2wgbXNob3RfZmluaXNoZWQsXG4gODU2Olx0XHRcdFx0XHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBzaXplX3QgY29uc3VtZWQpXG4gODU3Olx0e1xuIDg1ODpcdFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcbiA4NTk6XHRcdHVuc2lnbmVkIGludCBjZmxhZ3MgPSAwO1xuIDg2MDpcdFxuIDg2MTpcdFx0aWYgKGttc2ctXHUwMDNlbXNnLm1zZ19pbnEgXHUwMDNlIDApXG4gODYyOlx0XHRcdGNmbGFncyB8PSBJT1JJTkdfQ1FFX0ZfU09DS19OT05FTVBUWTtcbiA4NjM6XHRcbiA4NjQ6XHRcdGlmIChzZWwtXHUwMDNldmFsIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfTVNIT1RfTElNKSB7XG4gODY1Olx0XHRcdC8qXG4gODY2Olx0XHRcdCAqIElmIHNyLVx1MDAzZWxlbiBoaXRzIHplcm8sIHRoZSBsaW1pdCBoYXMgYmVlbiByZWFjaGVkLiBNYXJrXG4gODY3Olx0XHRcdCAqIG1zaG90IGFzIGZpbmlzaGVkLCBhbmQgZmxhZyBNU0hPVF9ET05FIGFzIHdlbGwgdG8gcHJldmVudFxuIDg2ODpcdFx0XHQgKiBhIHBvdGVudGlhbCBidW5kbGUgZnJvbSBiZWluZyByZXRyaWVkLlxuIDg2OTpcdFx0XHQgKi9cbiA4NzA6XHRcdFx0c3ItXHUwMDNlbXNob3RfdG90YWxfbGVuIC09IG1pbl90KGludCwgc2VsLVx1MDAzZXZhbCwgc3ItXHUwMDNlbXNob3RfdG90YWxfbGVuKTtcbiA4NzE6XHRcdFx0aWYgKCFzci1cdTAwM2Vtc2hvdF90b3RhbF9sZW4pIHtcbiA4NzI6XHRcdFx0XHRzci1cdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9NU0hPVF9ET05FO1xuIDg3MzpcdFx0XHRcdG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcbiA4NzQ6XHRcdFx0fVxuIDg3NTpcdFx0fVxuIDg3NjpcdFxuIDg3NzpcdFx0aWYgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XG4gODc4Olx0XHRcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cdTAwM2V2YWwgLSBzci1cdTAwM2Vkb25lX2lvO1xuIDg3OTpcdFxuIDg4MDpcdFx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgY29uc3VtZWQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIGNvbnN1bWVkKSk7XG4gODgxOlx0XHRcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXG4gODgyOlx0XHRcdFx0Y2ZsYWdzID0gcmVxLVx1MDAzZWNxZS5mbGFncyB8IChjZmxhZ3MgXHUwMDI2IENRRV9GX01BU0spO1xuIDg4MzpcdFx0XHRpZiAoc3ItXHUwMDNlbXNob3RfbGVuIFx1MDAyNlx1MDAyNiBzZWwtXHUwMDNldmFsIFx1MDAzZT0gc3ItXHUwMDNlbXNob3RfbGVuKVxuIDg4NDpcdFx0XHRcdHNyLVx1MDAzZWZsYWdzIHw9IElPUklOR19SRUNWX01TSE9UX0NBUDtcbiA4ODU6XHRcdFx0LyogYnVuZGxlIHdpdGggbm8gbW9yZSBpbW1lZGlhdGUgYnVmZmVycywgd2UmIzM5O3JlIGRvbmUgKi9cbiA4ODY6XHRcdFx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQkxfRU1QVFkpXG4gODg3Olx0XHRcdFx0Z290byBmaW5pc2g7XG4gODg4Olx0XHRcdC8qXG4gODg5Olx0XHRcdCAqIElmIG1vcmUgaXMgYXZhaWxhYmxlIEFORCBpdCB3YXMgYSBmdWxsIHRyYW5zZmVyLCByZXRyeSBhbmRcbiA4OTA6XHRcdFx0ICogYXBwZW5kIHRvIHRoaXMgb25lXG4gODkxOlx0XHRcdCAqL1xuIDg5MjpcdFx0XHRpZiAoIShzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfTk9fUkVUUlkpIFx1MDAyNlx1MDAyNlxuIDg5MzpcdFx0XHQgICAga21zZy1cdTAwM2Vtc2cubXNnX2lucSBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgdGhpc19yZXQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4gODk0Olx0XHRcdCAgICAhaW92X2l0ZXJfY291bnQoXHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIpKSB7XG4gODk1Olx0XHRcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyA9IGNmbGFncyBcdTAwMjYgfkNRRV9GX01BU0s7XG4gODk2Olx0XHRcdFx0c3ItXHUwMDNlbGVuID0ga21zZy1cdTAwM2Vtc2cubXNnX2lucTtcbiA4OTc6XHRcdFx0XHRzci1cdTAwM2Vkb25lX2lvICYjNDM7PSB0aGlzX3JldDtcbiA4OTg6XHRcdFx0XHRzci1cdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9SRVRSWTtcbiA4OTk6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gOTAwOlx0XHRcdH1cbiA5MDE6XHRcdH0gZWxzZSB7XG4gOTAyOlx0XHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIGNvbnN1bWVkLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuIDkwMzpcdFx0fVxuIDkwNDpcdFxuIDkwNTpcdFx0LypcbiA5MDY6XHRcdCAqIEZpbGwgQ1FFIGZvciB0aGlzIHJlY2VpdmUgYW5kIHNlZSBpZiB3ZSBzaG91bGQga2VlcCB0cnlpbmcgdG9cbiA5MDc6XHRcdCAqIHJlY2VpdmUgZnJvbSB0aGlzIHNvY2tldC5cbiA5MDg6XHRcdCAqL1xuIDkwOTpcdFx0aWYgKChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkgXHUwMDI2XHUwMDI2ICFtc2hvdF9maW5pc2hlZCBcdTAwMjZcdTAwMjZcbiA5MTA6XHRcdCAgICBpb19yZXFfcG9zdF9jcWUocmVxLCBzZWwtXHUwMDNldmFsLCBjZmxhZ3MgfCBJT1JJTkdfQ1FFX0ZfTU9SRSkpIHtcbiA5MTE6XHRcdFx0c2VsLVx1MDAzZXZhbCA9IElPVV9SRVRSWTtcbiA5MTI6XHRcdFx0aW9fbXNob3RfcHJlcF9yZXRyeShyZXEsIGttc2cpO1xuIDkxMzpcdFx0XHQvKiBLbm93biBub3QtZW1wdHkgb3IgdW5rbm93biBzdGF0ZSwgcmV0cnkgKi9cbiA5MTQ6XHRcdFx0aWYgKGNmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GX1NPQ0tfTk9ORU1QVFkgfHwga21zZy1cdTAwM2Vtc2cubXNnX2lucSBcdTAwM2MgMCkge1xuIDkxNTpcdFx0XHRcdGlmIChzci1cdTAwM2Vucl9tdWx0aXNob3RfbG9vcHMmIzQzOyYjNDM7IFx1MDAzYyBNVUxUSVNIT1RfTUFYX1JFVFJZIFx1MDAyNlx1MDAyNlxuIDkxNjpcdFx0XHRcdCAgICAhKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVl9NU0hPVF9DQVApKSB7XG4gOTE3Olx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gOTE4Olx0XHRcdFx0fVxuIDkxOTpcdFx0XHRcdC8qIG1zaG90IHJldHJpZXMgZXhjZWVkZWQsIGZvcmNlIGEgcmVxdWV1ZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTc3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGZvY3VzaW5nIG9uIHRoZSBjb3JlIHByb2JsZW06CgoqKkRlbHZpbmcgaW50byBgaW9fcHV0X2tidWZzYCBhbmQgaXRzIFZhcmlhdGlvbnMqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgaW9fcHV0X2tidWZzYCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIHNpbXBsZXIgYGlvX3B1dF9rYnVmYCB2YXJpYW50cyBoYW5kbGUgdGhhdCBzZWNvbmQgYXJndW1lbnQuIEl0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBidWZmZXIgbWFuYWdlbWVudCBhbmQgcmVzb3VyY2UgaGFuZGxpbmcgaW4gdGhpcyBjb250ZXh0LiBJJiMzOTttIHNlZWluZyBgY29uc3VtZWRgLCBgc2VsLSZndDt2YWxgLCBhbmQgYHRoaXNfcmV0YCBmbG9hdGluZyBhcm91bmQgYXMgcG9zc2liaWxpdGllcyBmb3IgdGhhdCBzZWNvbmQgYXJndW1lbnQsIGFuZCB0aGF04oCZcyB3aGVyZSB0aGUgZGV0YWlsIGlzIGxpa2VseSBoaWRkZW4uIEkgaW1tZWRpYXRlbHkgd2FudCB0byBkaWZmZXJlbnRpYXRlIHdoYXQgZWFjaCBvZiB0aG9zZSB2YXJpYWJsZXMgbWVhbnMgdG8gdGhlIG92ZXJhbGwgYmVoYXZpb3Igb2YgdGhlIGZ1bmN0aW9uLCBhbmQgSSYjMzk7bSBndWVzc2luZyB0aGF0IHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBmdW5jdGlvbnMgYXJlIHByb2JhYmx5IGp1c3QgdGhhdCBzZWNvbmQgYXJndW1lbnQsIG9yIGF0IGxlYXN0IHRoZXkmIzM5O3JlIGtleS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgcmVwcmVzZW50cyBieXRlcyAqY29uc3VtZWQqLCBzb21lIGtpbmQgb2YgKnNlbGVjdGlvbiB2YWx1ZSosIG9yIGEgKnJldHVybiB2YWx1ZSogdGhhdCYjMzk7cyBiZWVuIHBhcnRpYWxseSBoYW5kbGVkLiBUaGUgaW1wbGljYXRpb25zIGZvciB0aGUgYnVmZmVyIGxpZmVjeWNsZSBhbmQgcmVzb3VyY2UgZGVhbGxvY2F0aW9uIGFyZSBzdWJzdGFudGlhbCBkZXBlbmRpbmcgb24gd2hpY2ggaXQgaXMhIFRoaXMgYW5hbHlzaXMgaXMgY3J1Y2lhbCB0byBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHByZWNpc2UgbWVtb3J5IG1hbmFnZW1lbnQgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3B1dF9rYnVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmM9OTQ4PXZvaWQgaW9fcmVxX2RlZmVyX2ZhaWxlZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgczMyIHJlcylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTk1NS1cdHJlcV9zZXRfZmFpbChyZXEpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzo5NTY6XHRpb19yZXFfc2V0X3JlcyhyZXEsIHJlcywgaW9fcHV0X2tidWYocmVxLCByZXMsIE5VTEwpKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTU3LVx0aWYgKGRlZi1cdTAwM2VmYWlsKVxuLS1cbmlvX3VyaW5nL2tidWYuYz0zODE9aW50IGlvX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTQwNi1cbmlvX3VyaW5nL2tidWYuYzo0MDc6c3RhdGljIGlubGluZSBib29sIF9faW9fcHV0X2tidWZfcmluZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL2tidWYuYy00MDgtXHRcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbGVuLCBpbnQgbnIpXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTQyMC1cbmlvX3VyaW5nL2tidWYuYzo0MjE6dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuaW9fdXJpbmcva2J1Zi5jLTQyMi1cdFx0XHQgICAgaW50IGxlbiwgaW50IG5idWZzKVxuLS1cbmlvX3VyaW5nL2tidWYuYy00MzItXG5pb191cmluZy9rYnVmLmM6NDMzOlx0aWYgKCFfX2lvX3B1dF9rYnVmX3JpbmcocmVxLCBibCwgbGVuLCBuYnVmcykpXG5pb191cmluZy9rYnVmLmMtNDM0LVx0XHRyZXQgfD0gSU9SSU5HX0NRRV9GX0JVRl9NT1JFO1xuLS1cbmlvX3VyaW5nL2tidWYuaD04Nz12b2lkIGlvX2tidWZfZHJvcF9sZWdhY3koc3RydWN0IGlvX2tpb2NiICpyZXEpO1xuaW9fdXJpbmcva2J1Zi5oLTg4LVxuaW9fdXJpbmcva2J1Zi5oOjg5OnVuc2lnbmVkIGludCBfX2lvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbmlvX3VyaW5nL2tidWYuaC05MC1cdFx0XHQgICAgaW50IGxlbiwgaW50IG5idWZzKTtcbi0tXG5pb191cmluZy9rYnVmLmg9MTE0PXN0YXRpYyBpbmxpbmUgYm9vbCBpb19rYnVmX3JlY3ljbGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXG4tLVxuaW9fdXJpbmcva2J1Zi5oLTEyNS1cbmlvX3VyaW5nL2tidWYuaDoxMjY6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fcHV0X2tidWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBsZW4sXG5pb191cmluZy9rYnVmLmgtMTI3LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwpXG4tLVxuaW9fdXJpbmcva2J1Zi5oLTEzMC1cdFx0cmV0dXJuIDA7XG5pb191cmluZy9rYnVmLmg6MTMxOlx0cmV0dXJuIF9faW9fcHV0X2tidWZzKHJlcSwgYmwsIGxlbiwgMSk7XG5pb191cmluZy9rYnVmLmgtMTMyLX1cbmlvX3VyaW5nL2tidWYuaC0xMzMtXG5pb191cmluZy9rYnVmLmg6MTM0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IGxlbixcbmlvX3VyaW5nL2tidWYuaC0xMzUtXHRcdFx0XHRcdHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBuYnVmcylcbi0tXG5pb191cmluZy9rYnVmLmgtMTM4LVx0XHRyZXR1cm4gMDtcbmlvX3VyaW5nL2tidWYuaDoxMzk6XHRyZXR1cm4gX19pb19wdXRfa2J1ZnMocmVxLCBibCwgbGVuLCBuYnVmcyk7XG5pb191cmluZy9rYnVmLmgtMTQwLX1cbi0tXG5pb191cmluZy9uZXQuYz00OTE9c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLS1cbmlvX3VyaW5nL25ldC5jLTQ5OS1cdGlmICghKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSkge1xuaW9fdXJpbmcvbmV0LmM6NTAwOlx0XHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHNlbC1cdTAwM2V2YWwsIHNlbC1cdTAwM2VidWZfbGlzdCk7XG5pb191cmluZy9uZXQuYy01MDEtXHRcdGdvdG8gZmluaXNoO1xuLS1cbmlvX3VyaW5nL25ldC5jLTUwMy1cbmlvX3VyaW5nL25ldC5jOjUwNDpcdGNmbGFncyA9IGlvX3B1dF9rYnVmcyhyZXEsIHNlbC1cdTAwM2V2YWwsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHNlbC1cdTAwM2V2YWwpKTtcbmlvX3VyaW5nL25ldC5jLTUwNS1cbi0tXG5pb191cmluZy9uZXQuYz04NTM9c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLS1cbmlvX3VyaW5nL25ldC5jLTg3OS1cbmlvX3VyaW5nL25ldC5jOjg4MDpcdFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIGNvbnN1bWVkLCBzZWwtXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBjb25zdW1lZCkpO1xuaW9fdXJpbmcvbmV0LmMtODgxLVx0XHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxuLS1cbmlvX3VyaW5nL25ldC5jLTkwMS1cdH0gZWxzZSB7XG5pb191cmluZy9uZXQuYzo5MDI6XHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIGNvbnN1bWVkLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuaW9fdXJpbmcvbmV0LmMtOTAzLVx0fVxuLS1cbmlvX3VyaW5nL3J3LmM9NTYyPXZvaWQgaW9fcmVxX3J3X2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuLS1cbmlvX3VyaW5nL3J3LmMtNTY4LVx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgKFJFUV9GX0JVRkZFUl9TRUxFQ1RFRHxSRVFfRl9CVUZGRVJfUklORykpXG5pb191cmluZy9ydy5jOjU2OTpcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuaW9fdXJpbmcvcncuYy01NzAtXG4tLVxuaW9fdXJpbmcvcncuYz02NDA9c3RhdGljIGludCBraW9jYl9kb25lKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzc2l6ZV90IHJldCxcbi0tXG5pb191cmluZy9ydy5jLTY1Ny1cdFx0aWYgKHNlbClcbmlvX3VyaW5nL3J3LmM6NjU4Olx0XHRcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgcmV0LCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuaW9fdXJpbmcvcncuYy02NTktXHRcdGlvX3JlcV9zZXRfcmVzKHJlcSwgZmluYWxfcmV0LCBjZmxhZ3MpO1xuLS1cbmlvX3VyaW5nL3J3LmM9MTAzMj1pbnQgaW9fcmVhZF9tc2hvdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL3J3LmMtMTA2Ny1cdH0gZWxzZSBpZiAoIShyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkpIHtcbmlvX3VyaW5nL3J3LmM6MTA2ODpcdFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCByZXQsIHNlbC5idWZfbGlzdCk7XG5pb191cmluZy9ydy5jLTEwNjktXHR9IGVsc2Uge1xuLS1cbmlvX3VyaW5nL3J3LmMtMTA3NS1cdFx0ICovXG5pb191cmluZy9ydy5jOjEwNzY6XHRcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgcmV0LCBzZWwuYnVmX2xpc3QpO1xuaW9fdXJpbmcvcncuYy0xMDc3LVx0XHRydy1cdTAwM2VsZW4gPSAwOyAvKiBzaW1pbGFybHkgdG8gYWJvdmUsIHJlc2V0IGxlbiB0byAwICovXG4tLVxuaW9fdXJpbmcvcncuYz0xMzE5PWludCBpb19kb19pb3BvbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgZm9yY2Vfbm9uc3Bpbilcbi0tXG5pb191cmluZy9ydy5jLTEzNzUtXHRcdG5yX2V2ZW50cyYjNDM7JiM0Mzs7XG5pb191cmluZy9ydy5jOjEzNzY6XHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIG1heChyZXEtXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xuaW9fdXJpbmcvcncuYy0xMzc3LVx0XHRpZiAoIWlvX2lzX3VyaW5nX2NtZChyZXEpKVxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jPTM4Nz1ib29sIGlvX3VyaW5nX21zaG90X2NtZF9wb3N0X2NxZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzk2LVx0aWYgKHNlbC1cdTAwM2V2YWwgXHUwMDNlIDApIHtcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjM5NzpcdFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBzZWwtXHUwMDNldmFsLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzk4LVx0XHRpZiAoaW9fcmVxX3Bvc3RfY3FlKHJlcSwgc2VsLVx1MDAzZXZhbCwgY2ZsYWdzIHwgSU9SSU5HX0NRRV9GX01PUkUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzM0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGFuYWx5c2lzLCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gaW9fdXJpbmcva2J1Zi5jKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Uga2VybmVsIGJ1ZmZlcnMgYXJlIG1hbmFnZWQgd2l0aGluIGBpb191cmluZ2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0d28gZnVuY3Rpb25zOiBgX19pb19wdXRfa2J1Zl9yaW5nYCBhbmQgYF9faW9fcHV0X2tidWZzYC4gSSBzdXNwZWN0IHRoZXNlIGFyZSBjcml0aWNhbCBmb3IgYnVmZmVyIHJlbGVhc2UgYW5kIHJldXNlLCB3aGljaCBpcyBhbHdheXMgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGluIEkvTyBzeXN0ZW1zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgcmluZyBidWZmZXIgaW50ZXJhY3Rpb24gd29ya3MgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgbG9ja2luZyBjb250ZW50aW9uIHBvaW50cyBvciBpbmVmZmljaWVuY2llcyBpbiBgX19pb19wdXRfa2J1ZnNgLiBJ4oCZbSBleHBlY3RpbmcgdGhlc2UgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgbGlmZXRpbWUgb2YgdGhlIGtidWZzIGFuZCB0cmFjayB0aGVpciBhdmFpbGFiaWxpdHkgaW4gdGhlIHN5c3RlbS4gVGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzIGhlcmUsIHNvIGxldCYjMzk7cyBzdGFydCBkaWdnaW5nIGFuZCBzZWUgd2hhdCBvcHRpbWl6YXRpb25zIG9yIHBvdGVudGlhbCBpc3N1ZXMgbWlnaHQgYmUgaGlkaW5nIGluIHRoZXJlLiBHb3R0YSBjaGVjayBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggdGhlIG92ZXJhbGwgc3VibWlzc2lvbiBxdWV1ZSBwcm9jZXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDA1Olx0fVxuIDQwNjpcdFxuIDQwNzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBfX2lvX3B1dF9rYnVmX3Jpbmcoc3RydWN0IGlvX2tpb2NiICpyZXEsXG4gNDA4Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbGVuLCBpbnQgbnIpXG4gNDA5Olx0e1xuIDQxMDpcdFx0Ym9vbCByZXQgPSB0cnVlO1xuIDQxMTpcdFxuIDQxMjpcdFx0aWYgKGJsKVxuIDQxMzpcdFx0XHRyZXQgPSBpb19rYnVmX2NvbW1pdChyZXEsIGJsLCBsZW4sIG5yKTtcbiA0MTQ6XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0JVRl9NT1JFKSlcbiA0MTU6XHRcdFx0cmV0ID0gZmFsc2U7XG4gNDE2Olx0XG4gNDE3Olx0XHRyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+KFJFUV9GX0JVRkZFUl9SSU5HIHwgUkVRX0ZfQlVGX01PUkUpO1xuIDQxODpcdFx0cmV0dXJuIHJldDtcbiA0MTk6XHR9XG4gNDIwOlx0XG4gNDIxOlx0dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuIDQyMjpcdFx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpXG4gNDIzOlx0e1xuIDQyNDpcdFx0dW5zaWduZWQgaW50IHJldDtcbiA0MjU6XHRcbiA0MjY6XHRcdHJldCA9IElPUklOR19DUUVfRl9CVUZGRVIgfCAocmVxLVx1MDAzZWJ1Zl9pbmRleCBcdTAwM2NcdTAwM2MgSU9SSU5HX0NRRV9CVUZGRVJfU0hJRlQpO1xuIDQyNzpcdFxuIDQyODpcdFx0aWYgKHVubGlrZWx5KCEocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9CVUZGRVJfUklORykpKSB7XG4gNDI5Olx0XHRcdGlvX2tidWZfZHJvcF9sZWdhY3kocmVxKTtcbiA0MzA6XHRcdFx0cmV0dXJuIHJldDtcbiA0MzE6XHRcdH1cbiA0MzI6XHRcbiA0MzM6XHRcdGlmICghX19pb19wdXRfa2J1Zl9yaW5nKHJlcSwgYmwsIGxlbiwgbmJ1ZnMpKVxuIDQzNDpcdFx0XHRyZXQgfD0gSU9SSU5HX0NRRV9GX0JVRl9NT1JFO1xuIDQzNTpcdFx0cmV0dXJuIHJldDtcbiA0MzY6XHR9XG4gNDM3Olx0XG4gNDM4Olx0c3RhdGljIGludCBpb19yZW1vdmVfYnVmZmVyc19sZWdhY3koc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gNDM5Olx0XHRcdFx0XHQgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbiA0NDA6XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5idWZzKVxuIDQ0MTpcdHtcbiA0NDI6XHRcdHVuc2lnbmVkIGxvbmcgaSA9IDA7XG4gNDQzOlx0XHRzdHJ1Y3QgaW9fYnVmZmVyICpueHQ7XG4gNDQ0Olx0XG4gNDQ1Olx0XHQvKiBwcm90ZWN0cyBpb19idWZmZXJzX2NhY2hlICovXG4gNDQ2Olx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKTtcbiA0NDc6XHRcdFdBUk5fT05fT05DRShibC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9CVUZfUklORyk7XG4gNDQ4Olx0XG4gNDQ5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYnVmcyBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2YmwtXHUwMDNlYnVmX2xpc3QpOyBpJiM0MzsmIzQzOykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzI2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSBwZXJzcGVjdGl2ZSBvbiBgaW9fa2J1Zl9jb21taXRgOgoKKipNeSBJbnRlcnByZXRhdGlvbiBvZiBgaW9fa2J1Zl9jb21taXRgKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBpb19rYnVmX2NvbW1pdGAsIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGp1bXBzIHRvIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIGtlcm5lbCBmb3IgSS9PIG9wZXJhdGlvbnMsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IGhhbmRsZSBwYWNrZXQgYnVmZmVycy4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBmaW5hbGl6aW5nIG9yICYjMzQ7Y29tbWl0dGluZyYjMzQ7IGRhdGEgaW50byBhbiBgaW9fa2J1ZmAsIGxpa2VseSBtZWFuaW5nIHdlJiMzOTtyZSB0YWtpbmcgZGF0YSB0aGF0JiMzOTtzIGJlZW4gYXNzZW1ibGVkLCBwZXJoYXBzIGZyb20gbXVsdGlwbGUgc291cmNlcywgYW5kIG1ha2luZyBpdCBvZmZpY2lhbGx5IGF2YWlsYWJsZSBmb3IgZnVydGhlciBwcm9jZXNzaW5nLCB0cmFuc21pc3Npb24sIG9yIHN0b3JhZ2UuCgpUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBrZXJuZWwtbGV2ZWwgYnVmZmVyIG1hbmFnZW1lbnQuIEkgZXhwZWN0IGEgZmV3IGNyaXRpY2FsIGFzcGVjdHMgd2lsbCBiZSBpbiBwbGF5IGhlcmUuIEZpcnN0LCBob3cgYXJlIHdlIGhhbmRsaW5nIHRoZSBkYXRhIHBvaW50ZXJzPyBBcmUgd2UgY29uc29saWRhdGluZyBmcmFnbWVudGVkIGJ1ZmZlcnMsIG9yIG1lcmVseSBtYXJraW5nIHRoZSBlbmQgb2YgdGhlIHZhbGlkIGRhdGE/IFNlY29uZCwgZXJyb3IgaGFuZGxpbmcgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50LiBEb2VzIHRoaXMgZnVuY3Rpb24gcmV0dXJuIHN0YXR1cyBjb2RlcyB0byBpbmRpY2F0ZSBzdWNjZXNzIG9yIGZhaWx1cmUsIGFuZCB3aGF0IGFyZSB0aGUgcG9zc2libGUgZmFpbHVyZSBzY2VuYXJpb3MgKGJ1ZmZlciBvdmVyZmxvd3MsIGludmFsaWQgcG9pbnRlcnMsIGV0Yy4pPyBUaGlyZCwgYW55IG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucyBhcmUgZ29pbmcgdG8gYmUga2V5LiBJcyB0aGlzIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHVwIGFueSBhbGxvY2F0ZWQgYnVmZmVycz8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIHJlZmVyZW5jZSBjb3VudGluZz8KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgdG9vLiBJcyB0aGlzIGEgY3JpdGljYWwgcGF0aCBmdW5jdGlvbiB0aGF0IGlzIGdvaW5nIHRvIGJlIGludm9rZWQgZnJlcXVlbnRseSwgZXNwZWNpYWxseSBpbiBoaWdoLXRocm91Z2hwdXQgbmV0d29yayBzY2VuYXJpb3M/IElmIHNvLCBldmVyeSBpbnN0cnVjdGlvbiBjb3VudHMuIEl0JiMzOTtsbCBiZSBpbXBvcnRhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3B0aW1pemF0aW9ucyBpbiBwbGFjZSB0byBtaW5pbWl6ZSBvdmVyaGVhZC4gSSYjMzk7ZCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBpbmxpbmUgYXNzZW1ibHksIGNhcmVmdWwgcG9pbnRlciBhcml0aG1ldGljLCBvciBwZXJoYXBzIGxvY2stZnJlZSB0ZWNobmlxdWVzIGlmIHRoZXJlJiMzOTtzIGFueSBjb25jdXJyZW50IGFjY2VzcyBpbnZvbHZlZC4KCkZpbmFsbHksIHdoYXQmIzM5O3MgdGhlIGJyb2FkZXIgY29udGV4dD8gV2hhdCBpcyB0aGUgY2FsbGluZyBmdW5jdGlvbiBhbmQgd2hhdCBhcmUgdGhlIHN1YnNlcXVlbnQgZnVuY3Rpb24gY2FsbHM/IFVuZGVyc3RhbmRpbmcgdGhlIGJpZ2dlciBwaWN0dXJlIHdpbGwgaGVscCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGlvX2tidWZgIGlzIGFjdHVhbGx5IHVzZWQgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19rYnVmX2NvbW1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9rYnVmLmM9MzY9c3RhdGljIGJvb2wgaW9fa2J1Zl9pbmNfY29tbWl0KHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBsZW4pXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTYyLVxuaW9fdXJpbmcva2J1Zi5jOjYzOmJvb2wgaW9fa2J1Zl9jb21taXQoc3RydWN0IGlvX2tpb2NiICpyZXEsXG5pb191cmluZy9rYnVmLmMtNjQtXHRcdCAgICBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbGVuLCBpbnQgbnIpXG4tLVxuaW9fdXJpbmcva2J1Zi5jPTE5Mz1zdGF0aWMgc3RydWN0IGlvX2JyX3NlbCBpb19yaW5nX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNpemVfdCAqbGVuLFxuLS1cbmlvX3VyaW5nL2tidWYuYy0yMjMtXHRpZiAoaW9fc2hvdWxkX2NvbW1pdChyZXEsIGlzc3VlX2ZsYWdzKSkge1xuaW9fdXJpbmcva2J1Zi5jOjIyNDpcdFx0aWYgKCFpb19rYnVmX2NvbW1pdChyZXEsIHNlbC5idWZfbGlzdCwgKmxlbiwgMSkpXG5pb191cmluZy9rYnVmLmMtMjI1LVx0XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CVUZfTU9SRTtcbi0tXG5pb191cmluZy9rYnVmLmM9MzQ1PWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTM2Ni1cdFx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQlVGRkVSU19DT01NSVQgfCBSRVFfRl9CTF9OT19SRUNZQ0xFO1xuaW9fdXJpbmcva2J1Zi5jOjM2NzpcdFx0XHRpZiAoIWlvX2tidWZfY29tbWl0KHJlcSwgc2VsLVx1MDAzZWJ1Zl9saXN0LCBhcmctXHUwMDNlb3V0X2xlbiwgcmV0KSlcbmlvX3VyaW5nL2tidWYuYy0zNjgtXHRcdFx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQlVGX01PUkU7XG4tLVxuaW9fdXJpbmcva2J1Zi5jPTQwNz1zdGF0aWMgaW5saW5lIGJvb2wgX19pb19wdXRfa2J1Zl9yaW5nKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLS1cbmlvX3VyaW5nL2tidWYuYy00MTItXHRpZiAoYmwpXG5pb191cmluZy9rYnVmLmM6NDEzOlx0XHRyZXQgPSBpb19rYnVmX2NvbW1pdChyZXEsIGJsLCBsZW4sIG5yKTtcbmlvX3VyaW5nL2tidWYuYy00MTQtXHRpZiAocmV0IFx1MDAyNlx1MDAyNiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9CVUZfTU9SRSkpXG4tLVxuaW9fdXJpbmcva2J1Zi5oPTg5PXVuc2lnbmVkIGludCBfX2lvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbmlvX3VyaW5nL2tidWYuaC05MC1cdFx0XHQgICAgaW50IGxlbiwgaW50IG5idWZzKTtcbmlvX3VyaW5nL2tidWYuaDo5MTpib29sIGlvX2tidWZfY29tbWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcva2J1Zi5oLTkyLVx0XHQgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IGxlbiwgaW50IG5yKTtcbi0tXG5pb191cmluZy9uZXQuYz00ODI9c3RhdGljIGludCBpb19uZXRfa2J1Zl9yZWN5bGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNDg2LVx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpXG5pb191cmluZy9uZXQuYzo0ODc6XHRcdGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpO1xuaW9fdXJpbmcvbmV0LmMtNDg4LVx0cmV0dXJuIElPVV9SRVRSWTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBpb19rYnVmX2NvbW1pdCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gYGlvX2tidWZfY29tbWl0YCB3aXRoaW4gYGlvX3VyaW5nL2tidWYuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8mIzM0OyBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgZ2VuZXJpYyBjb21taXQgZnVuY3Rpb247IGl0JiMzOTtzIHNwZWNpZmljIHRvIHRoZSBrZXJuZWwgYnVmZmVyIG1hbmFnZW1lbnQgd2l0aGluIGlvX3VyaW5nLCBhbmQgdGhhdCBoYXMgYWxsIHNvcnRzIG9mIGltcGxpY2F0aW9ucyByZWdhcmRpbmcgcGVyZm9ybWFuY2UsIGNvbmN1cnJlbmN5LCBhbmQgZXJyb3IgaGFuZGxpbmcgdGhhdCBhcmUgY3J1Y2lhbCB0byB1bnBhY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29tbWl0cyBhcmUgYmVpbmcgb3JjaGVzdHJhdGVkLCB3aG8gY2FsbHMgaXQsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIHdvcmtmbG93IGxvb2tzIGxpa2UgYXJvdW5kIHRoaXMgZnVuY3Rpb24uIEFyZSB3ZSB0YWxraW5nIGFib3V0IHB1c2hpbmcgZGF0YSBmcm9tIGEgdXNlci1zcGFjZSBidWZmZXIgaW50byBhIGtlcm5lbCBrYnVmPyBPciBtYXliZSBpdCYjMzk7cyB0aGUgb3Bwb3NpdGU/IFVuZGVyc3RhbmRpbmcgdGhlIGRpcmVjdGlvbiBhbmQgcHVycG9zZSBvZiB0aGUgZGF0YSBtb3ZlbWVudCBpcyBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsIGZvciB0aGUgcmVzdCBvZiBteSBpbnZlc3RpZ2F0aW9uLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyB0aGlzIGZ1bmN0aW9uIHdvcmtzIHdpdGg/IEnigJltIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYW55IEkvTyBzdWJtaXNzaW9uIHF1ZXVlcywgY29tcGxldGlvbiBxdWV1ZXMsIG9yIGFueSBzb3J0IG9mIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBsb2NraW5nLCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBhbmQgd2hhdCB0aGUgc3VjY2Vzcy9mYWlsdXJlIHBhdGhzIGFyZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgaGlnaC1wZXJmb3JtYW5jZSBkZW1hbmRzIG9mIGlvX3VyaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRcbiAgMzY6XHRzdGF0aWMgYm9vbCBpb19rYnVmX2luY19jb21taXQoc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IGxlbilcbiAgMzc6XHR7XG4gIDM4Olx0XHQvKiBObyBkYXRhIGNvbnN1bWVkLCByZXR1cm4gZmFsc2UgZWFybHkgdG8gYXZvaWQgY29uc3VtaW5nIHRoZSBidWZmZXIgKi9cbiAgMzk6XHRcdGlmICghbGVuKVxuICA0MDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gIDQxOlx0XG4gIDQyOlx0XHR3aGlsZSAobGVuKSB7XG4gIDQzOlx0XHRcdHN0cnVjdCBpb191cmluZ19idWYgKmJ1ZjtcbiAgNDQ6XHRcdFx0dTMyIGJ1Zl9sZW4sIHRoaXNfbGVuO1xuICA0NTpcdFxuICA0NjpcdFx0XHRidWYgPSBpb19yaW5nX2hlYWRfdG9fYnVmKGJsLVx1MDAzZWJ1Zl9yaW5nLCBibC1cdTAwM2VoZWFkLCBibC1cdTAwM2VtYXNrKTtcbiAgNDc6XHRcdFx0YnVmX2xlbiA9IFJFQURfT05DRShidWYtXHUwMDNlbGVuKTtcbiAgNDg6XHRcdFx0dGhpc19sZW4gPSBtaW5fdCh1MzIsIGxlbiwgYnVmX2xlbik7XG4gIDQ5Olx0XHRcdGJ1Zl9sZW4gLT0gdGhpc19sZW47XG4gIDUwOlx0XHRcdC8qIFN0b3AgbG9vcGluZyBmb3IgaW52YWxpZCBidWZmZXIgbGVuZ3RoIG9mIDAgKi9cbiAgNTE6XHRcdFx0aWYgKGJ1Zl9sZW4gXHUwMDNlIGJsLVx1MDAzZW1pbl9sZWZ0X3N1Yl9vbmUgfHwgIXRoaXNfbGVuKSB7XG4gIDUyOlx0XHRcdFx0V1JJVEVfT05DRShidWYtXHUwMDNlYWRkciwgUkVBRF9PTkNFKGJ1Zi1cdTAwM2VhZGRyKSAmIzQzOyB0aGlzX2xlbik7XG4gIDUzOlx0XHRcdFx0V1JJVEVfT05DRShidWYtXHUwMDNlbGVuLCBidWZfbGVuKTtcbiAgNTQ6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gIDU1Olx0XHRcdH1cbiAgNTY6XHRcdFx0V1JJVEVfT05DRShidWYtXHUwMDNlbGVuLCAwKTtcbiAgNTc6XHRcdFx0YmwtXHUwMDNlaGVhZCYjNDM7JiM0Mzs7XG4gIDU4Olx0XHRcdGxlbiAtPSB0aGlzX2xlbjtcbiAgNTk6XHRcdH1cbiAgNjA6XHRcdHJldHVybiB0cnVlO1xuICA2MTpcdH1cbiAgNjI6XHRcbiAgNjM6XHRib29sIGlvX2tidWZfY29tbWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLFxuICA2NDpcdFx0XHQgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IGxlbiwgaW50IG5yKVxuICA2NTpcdHtcbiAgNjY6XHRcdGlmICh1bmxpa2VseSghKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpKSlcbiAgNjc6XHRcdFx0cmV0dXJuIHRydWU7XG4gIDY4Olx0XG4gIDY5Olx0XHRyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UkVRX0ZfQlVGRkVSU19DT01NSVQ7XG4gIDcwOlx0XG4gIDcxOlx0XHRpZiAodW5saWtlbHkobGVuIFx1MDAzYyAwKSlcbiAgNzI6XHRcdFx0cmV0dXJuIHRydWU7XG4gIDczOlx0XHRpZiAoYmwtXHUwMDNlZmxhZ3MgXHUwMDI2IElPQkxfSU5DKVxuICA3NDpcdFx0XHRyZXR1cm4gaW9fa2J1Zl9pbmNfY29tbWl0KGJsLCBsZW4pO1xuICA3NTpcdFx0YmwtXHUwMDNlaGVhZCAmIzQzOz0gbnI7XG4gIDc2Olx0XHRyZXR1cm4gdHJ1ZTtcbiAgNzc6XHR9XG4gIDc4Olx0XG4gIDc5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmlvX2J1ZmZlcl9nZXRfbGlzdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbiAgODA6XHRcdFx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBiZ2lkKVxuICA4MTpcdHtcbiAgODI6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2Y3R4LVx1MDAzZXVyaW5nX2xvY2spO1xuICA4MzpcdFxuICA4NDpcdFx0cmV0dXJuIHhhX2xvYWQoXHUwMDI2Y3R4LVx1MDAzZWlvX2JsX3hhLCBiZ2lkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQnVmZmVyIE92ZXJmbG93IFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGlvX3JlY3ZgIGFuZCBgaW9fcmVjdm1zZ2AsIGlmIHdlJiMzOTtyZSB1c2luZyBidWZmZXIgcmluZyBzZWxlY3Rpb24sIHBhcnRpY3VsYXJseSB3aXRoIHRob3NlIGluY3JlbWVudGFsIGJ1ZmZlcnMgb3IgYnVuZGxlcywgdGhlIHZhcmlhYmxlIGBsZW5gIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlciBhdmFpbGFibGUuIEJ1dCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IHdoZW4gYE1TR19UUlVOQ2AgaXMgdXNlZCwgYHJlY3Ztc2dgIG9yIGByZWN2YCBnaXZlcyBtZSBiYWNrIHRoZSAqdG90YWwqIHBhY2tldCBzaXplLCB3aGljaCBjb3VsZCBiZSBiaWdnZXIgdGhhbiBgbGVuYC4KCk5vdywgdGhlIGNvZGUgd2FzIGNhbGxpbmcgYGlvX3JlY3ZfZmluaXNoYCB3aXRoIGBzZWwtJmd0O3ZhbGAsIHdoaWNoIGlzIHRoZSByZXR1cm4gdmFsdWUsIGByZXRgLiBBbmQgYHJldGAgaXMgdGhhdCB0cnVuY2F0ZWQgcGFja2V0IHNpemUg4oCTIHRoZSBsYXJnZXIgdmFsdWUhIFNvLCBgaW9fcHV0X2tidWZgIG9yIGBpb19wdXRfa2J1ZnNgIHdhcyBnZXR0aW5nIGByZXRgIGFzIGl0cyBgbGVuYCBhcmd1bWVudC4gVGhhdCBtZWFucyBpdCB3YXMgcG90ZW50aWFsbHkgY29tbWl0dGluZyBvciBjYWxjdWxhdGluZyB0aGUgYnVmZmVyIGNvdW50IGJhc2VkIG9uIGEgbGVuZ3RoICpsYXJnZXIqIHRoYW4gd2hhdCB3YXMgYWN0dWFsbHkgaW4gdGhlIHJpbmcgYnVmZmVyISBUaGF0JiMzOTtzIGEgY2xhc3NpYyBvdmVyZmxvdyBpbiB0aGUgbWFraW5nLgoKU3BlY2lmaWNhbGx5LCBpdCB3YXMgZG9pbmc6Ci0gYGNvbnN1bWVkID0gbWluKHJldCwgbGVuKWAuIElmIGByZXRgIHdhcyBiaWdnZXIgdGhhbiBgbGVuYCwgYGNvbnN1bWVkYCBnZXRzIHNldCB0byBgbGVuYCwgd2hpY2ggaXMgZ29vZC4KLSBUaGVuLCBgY29uc3VtZWRgIGlzIHBhc3NlZCB0byBgaW9fcmVjdl9maW5pc2hgIC0mZ3Q7IGBpb19wdXRfa2J1ZmAgLyBgaW9fcHV0X2tidWZzYC4KLSBBbmQgdGhlbiBgaW9fYnVuZGxlX25idWZzKGttc2csIGNvbnN1bWVkKWAgY2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgYmFzZWQgb24gYGNvbnN1bWVkYC4KCkhtbSwgdGhpcyBgY29uc3VtZWRgIGxvZ2ljIGxvb2tzIGxpa2UgaXQgd2FzIGF0dGVtcHRpbmcgdG8gY29ycmVjdCB0aGlzLCBidXQuLi4gaXQmIzM5O3MgYSBiaXQgb2YgYSBjb2RlIHNtZWxsLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIGBpb19idW5kbGVfbmJ1ZnNgIHRvIGNvbmZpcm0gdGhlIGZpeCwgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBvc3NpYmxlIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fYnVuZGxlX25idWZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTQzNz1zdGF0aWMgdm9pZCBpb19yZXFfbXNnX2NsZWFudXAoc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNDUwLSAqL1xuaW9fdXJpbmcvbmV0LmM6NDUxOnN0YXRpYyBpbnQgaW9fYnVuZGxlX25idWZzKHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCByZXQpXG5pb191cmluZy9uZXQuYy00NTIte1xuLS1cbmlvX3VyaW5nL25ldC5jPTQ4Mj1zdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbi0tXG5pb191cmluZy9uZXQuYy00ODYtXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9CVUZGRVJTX0NPTU1JVClcbmlvX3VyaW5nL25ldC5jOjQ4NzpcdFx0aW9fa2J1Zl9jb21taXQocmVxLCBibCwgbGVuLCBpb19idW5kbGVfbmJ1ZnMoa21zZywgbGVuKSk7XG5pb191cmluZy9uZXQuYy00ODgtXHRyZXR1cm4gSU9VX1JFVFJZO1xuLS1cbmlvX3VyaW5nL25ldC5jPTQ5MT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNTAzLVxuaW9fdXJpbmcvbmV0LmM6NTA0Olx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVx1MDAzZXZhbCkpO1xuaW9fdXJpbmcvbmV0LmMtNTA1LVxuLS1cbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvbmV0LmMtODc5LVxuaW9fdXJpbmcvbmV0LmM6ODgwOlx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgY29uc3VtZWQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIGNvbnN1bWVkKSk7XG5pb191cmluZy9uZXQuYy04ODEtXHRcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTttIHRoaW5raW5nLCBiYXNlZCBvbiB0aGUgcHJvbXB0OgoKKipBbmFseXppbmcgdGhlIGBpb19idW5kbGVfbmJ1ZnNgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgaW9fYnVuZGxlX25idWZzYCBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZ2VhcmVkIHRvd2FyZHMgdW5kZXJzdGFuZGluZyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIEkmIzM5O20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3Iga2V5IGFzcGVjdHM6CgoqICAgKipXaGF0IGlzIGl0IHN1cHBvc2VkIHRvIGRvPyoqIFdoYXQgaXMgdGhlIG92ZXJhcmNoaW5nIG9iamVjdGl2ZSBvZiB0aGlzIGZ1bmN0aW9uIG9yIG1vZHVsZT8gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIGJ1ZmZlciBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gSS9PIG9wZXJhdGlvbnMsIHByb2JhYmx5IGludm9sdmluZyBub24tYmxvY2tpbmcgKE5CKSBmdW5jdGlvbmFsaXR5LiBUaGUgJiMzOTtidW5kbGUmIzM5OyBhc3BlY3Qgc3VnZ2VzdHMgaXQmIzM5O3MgaGFuZGxpbmcgbXVsdGlwbGUgYnVmZmVycyBvciBhIGdyb3VwIG9mIHJlbGF0ZWQgYnVmZmVycy4KKiAgICoqV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXM/KiogV2hhdCBhcmUgdGhlIG1ham9yIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgYW5kIGhvdyBkbyB0aGV5IHdvcmsgdG9nZXRoZXI/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoZXJlIGNvdWxkIGJlIHNvbWUga2luZCBvZiBkZXNjcmlwdG9yIG9yIGNvbnRyb2wgc3RydWN0dXJlLiBJIHdpbGwgYmUgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSB0eXBlcyBhbmQgbWVhbmluZ3Mgb2YgdGhlIGFyZ3VtZW50cyBwYXNzZWQsIGFuZCBsb2NhbCB2YXJpYWJsZXMgdXNlZC4KKiAgICoqV2hhdCYjMzk7cyB0aGUgb3ZlcmFsbCB3b3JrZmxvdz8qKiBJIHdhbnQgdG8gdHJhY2UgdGhlIGZsb3csIGlkZW50aWZ5aW5nIHRoZSBjb250cm9sIGZsb3c6IHN0YXJ0IHRvIGZpbmlzaC4KKiAgICoqQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgY29uY3VycmVuY3kgY29uY2VybnM/KiogU2luY2UgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBJL08sIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIGlzc3VlcywgY3JpdGljYWwgc2VjdGlvbnMsIG9yIGluZWZmaWNpZW50IGJ1ZmZlciBoYW5kbGluZyBzdHJhdGVnaWVzLgoqICAgKipXaGF0IGVycm9yIGhhbmRsaW5nIGlzIHByZXNlbnQ/KiogSG93IGRvZXMgaXQgZGVhbCB3aXRoIGZhaWx1cmVzPyBJJiMzOTttIGxvb2tpbmcgZm9yIHJvYnVzdCBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZy4KCkkmIzM5O20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzdGFydCBkaXNzZWN0aW5nIGVhY2ggcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGVhY2ggb2YgdGhlIHBvaW50cyBhYm92ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9uZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDQ1Olx0ICogQSBidW5kbGUgY291bGQgYmUgdXNpbmcgYSBzaW5nbGUgSVRFUl9VQlVGIGlmIHRoYXQmIzM5O3MgYWxsIHdlIG1hcHBlZCwgb3IgaXRcbiA0NDY6XHQgKiBjb3VsZCBiZSB1c2luZyBhbiBJVEVSX0lPVkVDLiBJZiB0aGUgbGF0dGVyLCB0aGVuIGlmIHdlIGNvbnN1bWVkIGFsbCBvZlxuIDQ0NzpcdCAqIHRoZSBzZWdtZW50cywgdGhlbiBpdCYjMzk7cyBhIHRyaXZpYWwgcXVlc3Rpb250IG8gYW5zd2VyLiBJZiB3ZSBoYXZlIHJlc2lkdWFsXG4gNDQ4Olx0ICogZGF0YSBpbiB0aGUgaXRlciwgdGhlbiBsb29wIHRoZSBzZWdtZW50cyB0byBmaWd1cmUgb3V0IGhvdyBtdWNoIHdlXG4gNDQ5Olx0ICogdHJhbnNmZXJyZWQuXG4gNDUwOlx0ICovXG4gNDUxOlx0c3RhdGljIGludCBpb19idW5kbGVfbmJ1ZnMoc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IHJldClcbiA0NTI6XHR7XG4gNDUzOlx0XHRzdHJ1Y3QgaW92ZWMgKmlvdjtcbiA0NTQ6XHRcdGludCBuYnVmcztcbiA0NTU6XHRcbiA0NTY6XHRcdC8qIG5vIGRhdGEgaXMgYWx3YXlzIHplcm8gc2VnbWVudHMsIGFuZCBhIHVidWYgaXMgYWx3YXlzIDEgc2VnbWVudCAqL1xuIDQ1NzpcdFx0aWYgKHJldCBcdTAwM2M9IDApXG4gNDU4Olx0XHRcdHJldHVybiAwO1xuIDQ1OTpcdFx0aWYgKGl0ZXJfaXNfdWJ1ZihcdTAwMjZrbXNnLVx1MDAzZW1zZy5tc2dfaXRlcikpXG4gNDYwOlx0XHRcdHJldHVybiAxO1xuIDQ2MTpcdFxuIDQ2MjpcdFx0aW92ID0ga21zZy1cdTAwM2V2ZWMuaW92ZWM7XG4gNDYzOlx0XHRpZiAoIWlvdilcbiA0NjQ6XHRcdFx0aW92ID0gXHUwMDI2a21zZy1cdTAwM2VmYXN0X2lvdjtcbiA0NjU6XHRcbiA0NjY6XHRcdC8qIGlmIGFsbCBkYXRhIHdhcyB0cmFuc2ZlcnJlZCwgaXQmIzM5O3MgYmFzaWMgcG9pbnRlciBtYXRoICovXG4gNDY3Olx0XHRpZiAoIWlvdl9pdGVyX2NvdW50KFx1MDAyNmttc2ctXHUwMDNlbXNnLm1zZ19pdGVyKSlcbiA0Njg6XHRcdFx0cmV0dXJuIGl0ZXJfaW92KFx1MDAyNmttc2ctXHUwMDNlbXNnLm1zZ19pdGVyKSAtIGlvdjtcbiA0Njk6XHRcbiA0NzA6XHRcdC8qIHNob3J0IHRyYW5zZmVyLCBjb3VudCBzZWdtZW50cyAqL1xuIDQ3MTpcdFx0bmJ1ZnMgPSAwO1xuIDQ3MjpcdFx0ZG8ge1xuIDQ3MzpcdFx0XHRpbnQgdGhpc19sZW4gPSBtaW5fdChpbnQsIGlvdltuYnVmc10uaW92X2xlbiwgcmV0KTtcbiA0NzQ6XHRcbiA0NzU6XHRcdFx0bmJ1ZnMmIzQzOyYjNDM7O1xuIDQ3NjpcdFx0XHRyZXQgLT0gdGhpc19sZW47XG4gNDc3Olx0XHR9IHdoaWxlIChyZXQpO1xuIDQ3ODpcdFxuIDQ3OTpcdFx0cmV0dXJuIG5idWZzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc0NwoJCQkJCQkJb3V0cHV0OiAyMDYKCQkJCQkJCXRob3VnaHRzOiAxNDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIERldGVjdGVkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgaXNzdWVzIGluIGBpb19idW5kbGVfbmJ1ZnNgIGlmIHRoZSBgcmV0YCB2YWx1ZSwgdGhlIHJlc3VsdCBvZiBhIHJlY2VpdmUgb3BlcmF0aW9uLCBleGNlZWRlZCB0aGUgYnVmZmVyIGxlbmd0aC4gU3BlY2lmaWNhbGx5LCB0aGUgbG9vcCBjb3VsZCBwb3RlbnRpYWxseSBhY2Nlc3MgbWVtb3J5IGJleW9uZCB0aGUgYGlvdmAgYXJyYXkgYm91bmRzLCBvciBjYXVzZSBpc3N1ZXMgd2l0aCBidWZmZXIgcmluZyBhZHZhbmNlbWVudC4gVGhlc2UgYXJlIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyBwcm9ibGVtcyB0aGF0IHNob3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc2ltcGxlIGFzc2VydGlvbnMuCgpOb3csIGxldCYjMzk7cyBzeXN0ZW1hdGljYWxseSBnbyB0aHJvdWdoIHRoZSBLTVNBTiBxdWVzdGlvbnMuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFdlIG5lZWQgdG8gYmUgY29uZmlkZW50IHRoYXQgbm90aGluZyB1bmluaXRpYWxpemVkIGlzIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBlaXRoZXIgdGhyb3VnaCBkaXJlY3QgY29waWVzIG9yIGluZGlyZWN0bHkgdGhyb3VnaCBjYWxjdWxhdGlvbnMuCgpJJiMzOTt2ZSBleGFtaW5lZCB0aGUgY29kZSBwYXRocyBpbnZvbHZlZCwgZm9jdXNpbmcgb24gYGlvX3JlY3ZfZmluaXNoYCwgYGlvX3JlY3Ztc2dgIGFuZCBgaW9fcmVjdmAuIEluIGBpb19yZWN2X2ZpbmlzaGAsIHRoZSB2YWx1ZXMgZ29pbmcgdG8gdGhlIGNvbXBsZXRpb24gcXVldWUgZW50cnkgYXJlIHRoZSByZXR1cm4gY29kZSAoYHNlbC0mZ3Q7dmFsYCkgYW5kIGZsYWdzIChgY2ZsYWdzYCksIHdpdGggdGhlIG51bWJlciBvZiBieXRlcyBgY29uc3VtZWRgLCB3aGljaCBpcyBhbHdheXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFuZCBjYXBwZWQsIGJhc2VkIG9uIGByZXRgIGFuZCBgbGVuYC4KCkluIGBpb19yZWN2bXNnYCwgdGhlIHJlbGV2YW50IHZhcmlhYmxlcywgYGxlbmAgYW5kIGBjb25zdW1lZGAsIGFyZSBhbHdheXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZWl0aGVyIGRpcmVjdGx5IGZyb20gYHNyLSZndDtsZW5gIG9yIGZyb20gdGhlIHJlc3VsdHMgb2YgYGlvX2J1ZmZlcl9zZWxlY3RgIGFuZCBpdHMgc3Vic2lkaWFyeSwgYGlvX3JlY3ZfYnVmX3NlbGVjdGAuIGBpb19yZWN2X2J1Zl9zZWxlY3RgIGFsc28gaW5pdGlhbGl6ZXMgaXRzIGxvY2FsIGBsZW5gIHZhcmlhYmxlIGJhc2VkIG9uIHNldmVyYWwgZmFjdG9ycywgYWxsIG9mIHdoaWNoIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBhcyB3ZWxsLiBTaW1pbGFybHksIGluIGBpb19yZWN2YCwgZXZlcnl0aGluZyBzZWVtcyB3ZWxsIGluaXRpYWxpemVkLgoKUmVnYXJkaW5nIHBvdGVudGlhbCBpbmZvIGxlYWtzIHZpYSBuZXR3b3JrIHJlY2VpdmUsIHRoZSBuZXQgbGF5ZXIgaXMgZmlsbGluZyB0aGUgdXNlciBidWZmZXIgZGlyZWN0bHksIGFuZCBgTVNHX1RSVU5DYCBpcyBoYW5kbGVkIGNvcnJlY3RseS4gYE1TR19UUlVOQ2AgbWVhbnMgdGhhdCB0aGUgdXNlciBpcyByZXF1ZXN0aW5nIHRoZSB0cnVuY2F0ZWQgcGFja2V0IGxlbmd0aCBpbiB0aGUgQ1FFIHJlc3VsdCwgd2hpY2ggaXMgd2hhdCB0aGV5IGdldC4gVGhlIG5ldCBsYXllciBoYXMgaGFuZGxlZCB0aGUgYnVmZmVyIHNpemUgYW5kIHRydW5jYXRpb24gY29ycmVjdGx5LgoKVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0LCBvciBwYWRkaW5nIGxlYWtzIGluIHRoZXNlIGZ1bmN0aW9ucy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuCgpUaGUgcGF0Y2ggaXRzZWxmIGFwcGVhcnMgdG8gYWRkcmVzcyBhbiBpc3N1ZSB3aGVyZSBidWZmZXIgYWNjb3VudGluZyAoc3BlY2lmaWNhbGx5LCBob3cgbWFueSBieXRlcyBoYXZlIGJlZW4gcmVjZWl2ZWQgaW4gdGhlIGJ1ZmZlciByaW5nKSBjb3VsZCBvdmVyc2hvb3QgdGhlIGFjdHVhbCBidWZmZXIgbGVuZ3RoIGlmIGBNU0dfVFJVTkNgIHdhcyByZXR1cm5lZC4gUHJldmlvdXNseSwgdGhlIGNvZGUgdXNlZCB0aGUgcmF3IGByZXRgIHZhbHVlICh3aGljaCBjb3VsZCBiZSBsYXJnZXIgdGhhbiB0aGUgYnVmZmVyIHNpemUgYGxlbmApIGluc3RlYWQgb2YgYGxlbmAgZm9yIGJ1ZmZlciByaW5nIG1hbmFnZW1lbnQgKGluIGBpb19wdXRfa2J1ZmAgLyBgaW9fcHV0X2tidWZzYCkuIFRoaXMgbGVkIHRvIG91dC1vZi1ib3VuZHMgY29uc3VtcHRpb24gb2YgcmluZyBidWZmZXIgZW50cmllcyBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiBgaW9fYnVuZGxlX25idWZzYC4gVGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGlzIGxlbmd0aCBpcyBjb3JyZWN0bHkgYm91bmRlZCBieSB0aGUgYnVmZmVyIHNpemUsIHByZXZlbnRpbmcgc3VjaCBlcnJvcnMuIFRoaXMgaXMgYSBidWZmZXIgbWFuYWdlbWVudCBhbmQgYm91bmRzIGlzc3VlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCBLQVNBTiBhbmQgYXNzZXJ0aW9ucyBhcmUgZGVzaWduZWQgdG8gY2F0Y2gsIGFuZCBub3QgYW4gaXNzdWUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLgoKSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQ6IG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9uLCBubyBwYWRkaW5nIGxlYWtzLCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLgoKSSYjMzk7bSBjb25maWRlbnQgd2UgY2FuIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuIEl0JiMzOTtzIGEgYnVmZmVyIG1hbmFnZW1lbnQgcHJvYmxlbSwgbm90IGEgS01TQU4gaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgbGVuZ3RoIGFjY291bnRpbmcgaW4gaW9fdXJpbmcmIzM5O3MgcmVjdiBhbmQgcmVjdm1zZyBwYXRocyB3aGVuIE1TR19UUlVOQyBpcyB1c2VkLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSAmIzM5O2NvbnN1bWVkJiMzOTsgdmFyaWFibGUgdG8gZW5zdXJlIHRoYXQgYnVmZmVyIHJpbmcgY29tbWl0dGluZyBhbmQgYnVuZGxlIGJ1ZmZlciBjb3VudGluZyAoaW9fYnVuZGxlX25idWZzKSBvbmx5IGNvbnN1bWUgdXAgdG8gdGhlIGFjdHVhbCBidWZmZXIgY2FwYWNpdHkgKCYjMzk7bGVuJiMzOTspIHJhdGhlciB0aGFuIHRoZSB0cnVuY2F0ZWQgdG90YWwgcGFja2V0IGxlbmd0aCAoJiMzOTtyZXQmIzM5OykuXG5cbkFsbCBuZXcgYW5kIG1vZGlmaWVkIHZhcmlhYmxlcyAoJiMzOTtsZW4mIzM5OywgJiMzOTtjb25zdW1lZCYjMzk7KSBhcmUgc3RyaWN0bHkgaW5pdGlhbGl6ZWQgYW5kIGFzc2lnbmVkIGJlZm9yZSB1c2UuIFRoZSBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgbGVhayB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXJzcGFjZS4gQW55IHJpc2tzIHJlbGF0ZWQgdG8gYnVmZmVyIG92ZXItY29uc3VtcHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpdGVyIGluZGV4aW5nIGluIGlvX2J1bmRsZV9uYnVmcyBmYWxsIHVuZGVyIGJvdW5kcy1jaGVja2luZyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgbGVuZ3RoIGFjY291bnRpbmcgaW4gaW9fdXJpbmcmIzM5O3MgcmVjdiBhbmQgcmVjdm1zZyBwYXRocyB3aGVuIE1TR19UUlVOQyBpcyB1c2VkLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSAmIzM5O2NvbnN1bWVkJiMzOTsgdmFyaWFibGUgdG8gZW5zdXJlIHRoYXQgYnVmZmVyIHJpbmcgY29tbWl0dGluZyBhbmQgYnVuZGxlIGJ1ZmZlciBjb3VudGluZyAoaW9fYnVuZGxlX25idWZzKSBvbmx5IGNvbnN1bWUgdXAgdG8gdGhlIGFjdHVhbCBidWZmZXIgY2FwYWNpdHkgKCYjMzk7bGVuJiMzOTspIHJhdGhlciB0aGFuIHRoZSB0cnVuY2F0ZWQgdG90YWwgcGFja2V0IGxlbmd0aCAoJiMzOTtyZXQmIzM5OykuXG5cbkFsbCBuZXcgYW5kIG1vZGlmaWVkIHZhcmlhYmxlcyAoJiMzOTtsZW4mIzM5OywgJiMzOTtjb25zdW1lZCYjMzk7KSBhcmUgc3RyaWN0bHkgaW5pdGlhbGl6ZWQgYW5kIGFzc2lnbmVkIGJlZm9yZSB1c2UuIFRoZSBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgbGVhayB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXJzcGFjZS4gQW55IHJpc2tzIHJlbGF0ZWQgdG8gYnVmZmVyIG92ZXItY29uc3VtcHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpdGVyIGluZGV4aW5nIGluIGlvX2J1bmRsZV9uYnVmcyBmYWxsIHVuZGVyIGJvdW5kcy1jaGVja2luZyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjc6MDkuNjQzNzk0NDcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA5OTcwNTU2NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX3JlY3Ztc2dcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgbGVuZ3RoIGFjY291bnRpbmcgaW4gaW9fdXJpbmcncyByZWN2IGFuZCByZWN2bXNnIHBhdGhzIHdoZW4gTVNHX1RSVU5DIGlzIHVzZWQuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhICdjb25zdW1lZCcgdmFyaWFibGUgdG8gZW5zdXJlIHRoYXQgYnVmZmVyIHJpbmcgY29tbWl0dGluZyBhbmQgYnVuZGxlIGJ1ZmZlciBjb3VudGluZyAoaW9fYnVuZGxlX25idWZzKSBvbmx5IGNvbnN1bWUgdXAgdG8gdGhlIGFjdHVhbCBidWZmZXIgY2FwYWNpdHkgKCdsZW4nKSByYXRoZXIgdGhhbiB0aGUgdHJ1bmNhdGVkIHRvdGFsIHBhY2tldCBsZW5ndGggKCdyZXQnKS5cXG5cXG5BbGwgbmV3IGFuZCBtb2RpZmllZCB2YXJpYWJsZXMgKCdsZW4nLCAnY29uc3VtZWQnKSBhcmUgc3RyaWN0bHkgaW5pdGlhbGl6ZWQgYW5kIGFzc2lnbmVkIGJlZm9yZSB1c2UuIFRoZSBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgbGVhayB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXJzcGFjZS4gQW55IHJpc2tzIHJlbGF0ZWQgdG8gYnVmZmVyIG92ZXItY29uc3VtcHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpdGVyIGluZGV4aW5nIGluIGlvX2J1bmRsZV9uYnVmcyBmYWxsIHVuZGVyIGJvdW5kcy1jaGVja2luZyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpb191cmluZyByZWNlaXZlIGhhbmRsaW5nIChpb19yZWN2LCBpb19yZWN2bXNnLCBpb19yZWN2X2J1Zl9zZWxlY3QsIGlvX3JlY3ZfZmluaXNoKSB0byBwcm9wZXJseSB0cmFjayBhbmQgY2FwIGNvbnN1bWVkIGJ1ZmZlciBsZW5ndGggd2hlbiBNU0dfVFJVTkMgaXMgdXNlZCBvciBidWZmZXIgc2l6ZXMgZGlmZmVyIGZyb20gcmV0dXJuZWQgcGFja2V0IGxlbmd0aHMuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIHZpYSBzdGFuZGFyZCBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjA5LjY0Mzc5OTM3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkyNjA1NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjNjZjZjZmI2MWM4ODdiY2UwMzExYmRlMGFhZmE3YTNjZjZiODZmOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDIzOjI3OjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL25ldC5jIGIvaW9fdXJpbmcvbmV0LmNcXG5pbmRleCBmYmU3MTlkODZjNDYzLi5mODExMGRjOWY4NjA2IDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL25ldC5jXFxuKysrIGIvaW9fdXJpbmcvbmV0LmNcXG5AQCAtODUzLDcgKzg1Myw3IEBAIGludCBpb19yZWN2bXNnX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG4gc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCBib29sIG1zaG90X2ZpbmlzaGVkLFxcbi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxcbitcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBzaXplX3QgY29uc3VtZWQpXFxuIHtcXG4gXFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcXG4gXFx0dW5zaWduZWQgaW50IGNmbGFncyA9IDA7XFxuQEAgLTg3Nyw3ICs4NzcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuIFxcdGlmIChzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XFxuIFxcdFxcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cXHUwMDNldmFsIC0gc3ItXFx1MDAzZWRvbmVfaW87XFxuIFxcbi1cXHRcXHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCB0aGlzX3JldCkpO1xcbitcXHRcXHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgY29uc3VtZWQsIHNlbC1cXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBjb25zdW1lZCkpO1xcbiBcXHRcXHRpZiAoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXFxuIFxcdFxcdFxcdGNmbGFncyA9IHJlcS1cXHUwMDNlY3FlLmZsYWdzIHwgKGNmbGFncyBcXHUwMDI2IENRRV9GX01BU0spO1xcbiBcXHRcXHRpZiAoc3ItXFx1MDAzZW1zaG90X2xlbiBcXHUwMDI2XFx1MDAyNiBzZWwtXFx1MDAzZXZhbCBcXHUwMDNlPSBzci1cXHUwMDNlbXNob3RfbGVuKVxcbkBAIC04OTksNyArODk5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QpO1xcbitcXHRcXHRjZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBjb25zdW1lZCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuQEAgLTEwMjcsNiArMTAyNyw3IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIFxcdGludCByZXQsIG1pbl9yZXQgPSAwO1xcbiBcXHRib29sIGZvcmNlX25vbmJsb2NrID0gaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xcbiBcXHRib29sIG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcXG4rXFx0c2l6ZV90IGxlbiwgY29uc3VtZWQgPSAwO1xcbiBcXG4gXFx0c29jayA9IHNvY2tfZnJvbV9maWxlKHJlcS1cXHUwMDNlZmlsZSk7XFxuIFxcdGlmICh1bmxpa2VseSghc29jaykpXFxuQEAgLTEwNDIsOSArMTA0Myw4IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIFxcbiByZXRyeV9tdWx0aXNob3Q6XFxuIFxcdHNlbC5idWZfbGlzdCA9IE5VTEw7XFxuK1xcdGxlbiA9IHNyLVxcdTAwM2VsZW47XFxuIFxcdGlmIChpb19kb19idWZmZXJfc2VsZWN0KHJlcSkpIHtcXG4tXFx0XFx0c2l6ZV90IGxlbiA9IHNyLVxcdTAwM2VsZW47XFxuLVxcbiBcXHRcXHRzZWwgPSBpb19idWZmZXJfc2VsZWN0KHJlcSwgXFx1MDAyNmxlbiwgc3ItXFx1MDAzZWJ1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpO1xcbiBcXHRcXHRpZiAoIXNlbC5hZGRyKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuQEAgLTEwNjUsNiArMTA2NSw3IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIFxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQVBPTExfTVVMVElTSE9UKSB7XFxuIFxcdFxcdHJldCA9IGlvX3JlY3Ztc2dfbXVsdGlzaG90KHNvY2ssIHNyLCBrbXNnLCBmbGFncyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNm1zaG90X2ZpbmlzaGVkKTtcXG4rXFx0XFx0Y29uc3VtZWQgPSByZXQ7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qIGRpc2FibGUgcGFydGlhbCByZXRyeSBmb3IgcmVjdm1zZyB3aXRoIGNtc2cgYXR0YWNoZWQgKi9cXG4gXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTVNHX1dBSVRBTEwgXFx1MDAyNlxcdTAwMjYgIWttc2ctXFx1MDAzZW1zZy5tc2dfY29udHJvbGxlbilcXG5AQCAtMTA3Miw2ICsxMDczLDE1IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIFxcbiBcXHRcXHRyZXQgPSBfX3N5c19yZWN2bXNnX3NvY2soc29jaywgXFx1MDAyNmttc2ctXFx1MDAzZW1zZywgc3ItXFx1MDAzZXVtc2csXFxuIFxcdFxcdFxcdFxcdFxcdCBrbXNnLVxcdTAwM2V1YWRkciwgZmxhZ3MpO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBXaXRoIE1TR19UUlVOQywgdGhlIG5ldCBsYXllciB3aWxsIHJldHVybiB0aGUgZnVsbCBzaXplIG9mXFxuK1xcdFxcdCAqIHRoZSBwYWNrZXQsIGV2ZW4gaWYgd2Ugb25seSBmaWxsZWQgcGFydCBvZiBpdCBpbiB0aGUgYnVmZmVycy5cXG4rXFx0XFx0ICogQWRqdXN0IHRoZSByZXR1cm5lZCBzaXplIHRvIGNvbnN1bWUgb25seSB0aGUgcmVhbCBwYXJ0IG9mIHRoZVxcbitcXHRcXHQgKiBidWZmZXIuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjb25zdW1lZCA9IHJldDtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlIGxlbilcXG4rXFx0XFx0XFx0Y29uc3VtZWQgPSBsZW47XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChyZXQgXFx1MDAzYyBtaW5fcmV0KSB7XFxuQEAgLTEwOTgsNyArMTEwOCw3IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIFxcdFxcdGlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpO1xcbiBcXG4gXFx0c2VsLnZhbCA9IHJldDtcXG4tXFx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFxcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpXFxuK1xcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MsIGNvbnN1bWVkKSlcXG4gXFx0XFx0Z290byByZXRyeV9tdWx0aXNob3Q7XFxuIFxcbiBcXHRyZXR1cm4gc2VsLnZhbDtcXG5AQCAtMTEwOCw2ICsxMTE4LDcgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2dcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcXG4rXFx0c2l6ZV90IGxlbjtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdC8qXFxuQEAgLTExNTMsMTMgKzExNjQsMTQgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2dcXG4gXFx0XFx0Lyogc3BlY2lhbCBjYXNlIDEgdmVjLCBjYW4gYmUgYSBmYXN0IHBhdGggKi9cXG4gXFx0XFx0aWYgKHJldCA9PSAxKSB7XFxuIFxcdFxcdFxcdHNyLVxcdTAwM2VidWYgPSBhcmcuaW92c1swXS5pb3ZfYmFzZTtcXG4tXFx0XFx0XFx0c3ItXFx1MDAzZWxlbiA9IGFyZy5pb3ZzWzBdLmlvdl9sZW47XFxuK1xcdFxcdFxcdGxlbiA9IHNyLVxcdTAwM2VsZW4gPSBhcmcuaW92c1swXS5pb3ZfbGVuO1xcbiBcXHRcXHRcXHRnb3RvIG1hcF91YnVmO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlvdl9pdGVyX2luaXQoXFx1MDAyNmttc2ctXFx1MDAzZW1zZy5tc2dfaXRlciwgSVRFUl9ERVNULCBhcmcuaW92cywgcmV0LFxcbi1cXHRcXHRcXHRcXHRhcmcub3V0X2xlbik7XFxuK1xcdFxcdFxcdCAgICAgIGFyZy5vdXRfbGVuKTtcXG4rXFx0XFx0bGVuID0gYXJnLm91dF9sZW47XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHNpemVfdCBsZW4gPSBzZWwtXFx1MDAzZXZhbDtcXG4rXFx0XFx0bGVuID0gc2VsLVxcdTAwM2V2YWw7XFxuIFxcbiBcXHRcXHQqc2VsID0gaW9fYnVmZmVyX3NlbGVjdChyZXEsIFxcdTAwMjZsZW4sIHNyLVxcdTAwM2VidWZfZ3JvdXAsIGlzc3VlX2ZsYWdzKTtcXG4gXFx0XFx0aWYgKCFzZWwtXFx1MDAzZWFkZHIpXFxuQEAgLTExNzMsNyArMTE4NSw3IEBAIHN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gbGVuO1xcbiB9XFxuIFxcbiBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbkBAIC0xMTg0LDYgKzExOTYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbiBcXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xcbiBcXHR1bnNpZ25lZCBmbGFncztcXG4gXFx0aW50IHJldCwgbWluX3JldCA9IDA7XFxuK1xcdHNpemVfdCBjb25zdW1lZCA9IDAsIGxlbiA9IDA7XFxuIFxcdGJvb2wgZm9yY2Vfbm9uYmxvY2sgPSBpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XFxuIFxcdGJvb2wgbXNob3RfZmluaXNoZWQ7XFxuIFxcbkBAIC0xMjEzLDYgKzEyMjYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbiBcXG4gcmV0cnlfbXVsdGlzaG90OlxcbiBcXHRzZWwuYnVmX2xpc3QgPSBOVUxMO1xcbitcXHRsZW4gPSBzci1cXHUwMDNlbGVuO1xcbiBcXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XFxuIFxcdFxcdHNlbC52YWwgPSBzci1cXHUwMDNlbGVuO1xcbiBcXHRcXHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBpc3N1ZV9mbGFncyk7XFxuQEAgLTEyMjAsNiArMTIzNCw3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIFxcdFxcdFxcdGttc2ctXFx1MDAzZW1zZy5tc2dfaW5xID0gLTE7XFxuIFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuIFxcdFxcdH1cXG4rXFx0XFx0bGVuID0gcmV0O1xcbiBcXHRcXHRzci1cXHUwMDNlYnVmID0gTlVMTDtcXG4gXFx0fVxcbiBcXG5AQCAtMTI1MCw2ICsxMjY1LDE3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIFxcdH1cXG4gXFxuIFxcdG1zaG90X2ZpbmlzaGVkID0gcmV0IFxcdTAwM2M9IDA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXaXRoIE1TR19UUlVOQywgdGhlIG5ldCBsYXllciB3aWxsIHJldHVybiB0aGUgZnVsbCBzaXplIG9mXFxuK1xcdCAqIHRoZSBwYWNrZXQsIGV2ZW4gaWYgd2Ugb25seSBmaWxsZWQgcGFydCBvZiBpdCBpbiB0aGUgYnVmZmVycy5cXG4rXFx0ICogQWRqdXN0IHRoZSByZXR1cm5lZCBzaXplIHRvIGNvbnN1bWUgb25seSB0aGUgcmVhbCBwYXJ0IG9mIHRoZVxcbitcXHQgKiBidWZmZXIuXFxuK1xcdCAqL1xcbitcXHRjb25zdW1lZCA9IHJldDtcXG4rXFx0aWYgKHJldCBcXHUwMDNlIGxlbilcXG4rXFx0XFx0Y29uc3VtZWQgPSBsZW47XFxuK1xcbiBcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4gXFx0XFx0cmV0ICs9IHNyLVxcdTAwM2Vkb25lX2lvO1xcbiBcXHRlbHNlIGlmIChzci1cXHUwMDNlZG9uZV9pbylcXG5AQCAtMTI1OCw3ICsxMjg0LDcgQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4gXFx0XFx0aW9fa2J1Zl9yZWN5Y2xlKHJlcSwgc2VsLmJ1Zl9saXN0LCBpc3N1ZV9mbGFncyk7XFxuIFxcbiBcXHRzZWwudmFsID0gcmV0O1xcbi1cXHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSlcXG4rXFx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFxcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncywgY29uc3VtZWQpKVxcbiBcXHRcXHRnb3RvIHJldHJ5X211bHRpc2hvdDtcXG4gXFxuIFxcdHJldHVybiBzZWwudmFsO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzoyNzoxMC4wMzcyNTA4MTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE4OTI3ODc3NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19yZWN2XCIsXG4gICAgXCJpb19yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW9fdXJpbmcgcmVjZWl2ZSBoYW5kbGluZyAoaW9fcmVjdiwgaW9fcmVjdm1zZywgaW9fcmVjdl9idWZfc2VsZWN0LCBpb19yZWN2X2ZpbmlzaCkgdG8gcHJvcGVybHkgdHJhY2sgYW5kIGNhcCBjb25zdW1lZCBidWZmZXIgbGVuZ3RoIHdoZW4gTVNHX1RSVU5DIGlzIHVzZWQgb3IgYnVmZmVyIHNpemVzIGRpZmZlciBmcm9tIHJldHVybmVkIHBhY2tldCBsZW5ndGhzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSB2aWEgc3RhbmRhcmQgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzY2Y2Y2ZiNjFjODg3YmNlMDMxMWJkZTBhYWZhN2EzY2Y2Yjg2ZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDIzOjI3OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbmV0LmMgYi9pb191cmluZy9uZXQuY1xuaW5kZXggZmJlNzE5ZDg2YzQ2My4uZjgxMTBkYzlmODYwNiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL25ldC5jXG4rKysgYi9pb191cmluZy9uZXQuY1xuQEAgLTg1Myw3ICs4NTMsNyBAQCBpbnQgaW9fcmVjdm1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG4gc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIGJvb2wgbXNob3RfZmluaXNoZWQsXG4tXHRcdFx0XHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuK1x0XHRcdFx0ICB1bnNpZ25lZCBpc3N1ZV9mbGFncywgc2l6ZV90IGNvbnN1bWVkKVxuIHtcbiBcdHN0cnVjdCBpb19zcl9tc2cgKnNyID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7XG4gXHR1bnNpZ25lZCBpbnQgY2ZsYWdzID0gMDtcbkBAIC04NzcsNyArODc3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFx0aWYgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XG4gXHRcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cdTAwM2V2YWwgLSBzci1cdTAwM2Vkb25lX2lvO1xuIFxuLVx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7XG4rXHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCBjb25zdW1lZCwgc2VsLVx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgY29uc3VtZWQpKTtcbiBcdFx0aWYgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVl9SRVRSWSlcbiBcdFx0XHRjZmxhZ3MgPSByZXEtXHUwMDNlY3FlLmZsYWdzIHwgKGNmbGFncyBcdTAwMjYgQ1FFX0ZfTUFTSyk7XG4gXHRcdGlmIChzci1cdTAwM2Vtc2hvdF9sZW4gXHUwMDI2XHUwMDI2IHNlbC1cdTAwM2V2YWwgXHUwMDNlPSBzci1cdTAwM2Vtc2hvdF9sZW4pXG5AQCAtODk5LDcgKzg5OSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIHNlbC1cdTAwM2V2YWwsIHNlbC1cdTAwM2VidWZfbGlzdCk7XG4rXHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIGNvbnN1bWVkLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuIFx0fVxuIFxuIFx0LypcbkBAIC0xMDI3LDYgKzEwMjcsNyBAQCBpbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0aW50IHJldCwgbWluX3JldCA9IDA7XG4gXHRib29sIGZvcmNlX25vbmJsb2NrID0gaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XG4gXHRib29sIG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcbitcdHNpemVfdCBsZW4sIGNvbnN1bWVkID0gMDtcbiBcbiBcdHNvY2sgPSBzb2NrX2Zyb21fZmlsZShyZXEtXHUwMDNlZmlsZSk7XG4gXHRpZiAodW5saWtlbHkoIXNvY2spKVxuQEAgLTEwNDIsOSArMTA0Myw4IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXG4gcmV0cnlfbXVsdGlzaG90OlxuIFx0c2VsLmJ1Zl9saXN0ID0gTlVMTDtcbitcdGxlbiA9IHNyLVx1MDAzZWxlbjtcbiBcdGlmIChpb19kb19idWZmZXJfc2VsZWN0KHJlcSkpIHtcbi1cdFx0c2l6ZV90IGxlbiA9IHNyLVx1MDAzZWxlbjtcbi1cbiBcdFx0c2VsID0gaW9fYnVmZmVyX3NlbGVjdChyZXEsIFx1MDAyNmxlbiwgc3ItXHUwMDNlYnVmX2dyb3VwLCBpc3N1ZV9mbGFncyk7XG4gXHRcdGlmICghc2VsLmFkZHIpXG4gXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuQEAgLTEwNjUsNiArMTA2NSw3IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpIHtcbiBcdFx0cmV0ID0gaW9fcmVjdm1zZ19tdWx0aXNob3Qoc29jaywgc3IsIGttc2csIGZsYWdzLFxuIFx0XHRcdFx0XHQgICBcdTAwMjZtc2hvdF9maW5pc2hlZCk7XG4rXHRcdGNvbnN1bWVkID0gcmV0O1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogZGlzYWJsZSBwYXJ0aWFsIHJldHJ5IGZvciByZWN2bXNnIHdpdGggY21zZyBhdHRhY2hlZCAqL1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19XQUlUQUxMIFx1MDAyNlx1MDAyNiAha21zZy1cdTAwM2Vtc2cubXNnX2NvbnRyb2xsZW4pXG5AQCAtMTA3Miw2ICsxMDczLDE1IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXG4gXHRcdHJldCA9IF9fc3lzX3JlY3Ztc2dfc29jayhzb2NrLCBcdTAwMjZrbXNnLVx1MDAzZW1zZywgc3ItXHUwMDNldW1zZyxcbiBcdFx0XHRcdFx0IGttc2ctXHUwMDNldWFkZHIsIGZsYWdzKTtcbitcdFx0LypcbitcdFx0ICogV2l0aCBNU0dfVFJVTkMsIHRoZSBuZXQgbGF5ZXIgd2lsbCByZXR1cm4gdGhlIGZ1bGwgc2l6ZSBvZlxuK1x0XHQgKiB0aGUgcGFja2V0LCBldmVuIGlmIHdlIG9ubHkgZmlsbGVkIHBhcnQgb2YgaXQgaW4gdGhlIGJ1ZmZlcnMuXG4rXHRcdCAqIEFkanVzdCB0aGUgcmV0dXJuZWQgc2l6ZSB0byBjb25zdW1lIG9ubHkgdGhlIHJlYWwgcGFydCBvZiB0aGVcbitcdFx0ICogYnVmZmVyLlxuK1x0XHQgKi9cbitcdFx0Y29uc3VtZWQgPSByZXQ7XG4rXHRcdGlmIChyZXQgXHUwMDNlIGxlbilcbitcdFx0XHRjb25zdW1lZCA9IGxlbjtcbiBcdH1cbiBcbiBcdGlmIChyZXQgXHUwMDNjIG1pbl9yZXQpIHtcbkBAIC0xMDk4LDcgKzExMDgsNyBAQCBpbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0XHRpb19rYnVmX3JlY3ljbGUocmVxLCBzZWwuYnVmX2xpc3QsIGlzc3VlX2ZsYWdzKTtcbiBcbiBcdHNlbC52YWwgPSByZXQ7XG4tXHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MpKVxuK1x0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzLCBjb25zdW1lZCkpXG4gXHRcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xuIFxuIFx0cmV0dXJuIHNlbC52YWw7XG5AQCAtMTEwOCw2ICsxMTE4LDcgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2dcbiBcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xuK1x0c2l6ZV90IGxlbjtcbiBcdGludCByZXQ7XG4gXG4gXHQvKlxuQEAgLTExNTMsMTMgKzExNjQsMTQgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2dcbiBcdFx0Lyogc3BlY2lhbCBjYXNlIDEgdmVjLCBjYW4gYmUgYSBmYXN0IHBhdGggKi9cbiBcdFx0aWYgKHJldCA9PSAxKSB7XG4gXHRcdFx0c3ItXHUwMDNlYnVmID0gYXJnLmlvdnNbMF0uaW92X2Jhc2U7XG4tXHRcdFx0c3ItXHUwMDNlbGVuID0gYXJnLmlvdnNbMF0uaW92X2xlbjtcbitcdFx0XHRsZW4gPSBzci1cdTAwM2VsZW4gPSBhcmcuaW92c1swXS5pb3ZfbGVuO1xuIFx0XHRcdGdvdG8gbWFwX3VidWY7XG4gXHRcdH1cbiBcdFx0aW92X2l0ZXJfaW5pdChcdTAwMjZrbXNnLVx1MDAzZW1zZy5tc2dfaXRlciwgSVRFUl9ERVNULCBhcmcuaW92cywgcmV0LFxuLVx0XHRcdFx0YXJnLm91dF9sZW4pO1xuK1x0XHRcdCAgICAgIGFyZy5vdXRfbGVuKTtcbitcdFx0bGVuID0gYXJnLm91dF9sZW47XG4gXHR9IGVsc2Uge1xuLVx0XHRzaXplX3QgbGVuID0gc2VsLVx1MDAzZXZhbDtcbitcdFx0bGVuID0gc2VsLVx1MDAzZXZhbDtcbiBcbiBcdFx0KnNlbCA9IGlvX2J1ZmZlcl9zZWxlY3QocmVxLCBcdTAwMjZsZW4sIHNyLVx1MDAzZWJ1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpO1xuIFx0XHRpZiAoIXNlbC1cdTAwM2VhZGRyKVxuQEAgLTExNzMsNyArMTE4NSw3IEBAIHN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIGxlbjtcbiB9XG4gXG4gaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbkBAIC0xMTg0LDYgKzExOTYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbiBcdHVuc2lnbmVkIGZsYWdzO1xuIFx0aW50IHJldCwgbWluX3JldCA9IDA7XG4rXHRzaXplX3QgY29uc3VtZWQgPSAwLCBsZW4gPSAwO1xuIFx0Ym9vbCBmb3JjZV9ub25ibG9jayA9IGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xuIFx0Ym9vbCBtc2hvdF9maW5pc2hlZDtcbiBcbkBAIC0xMjEzLDYgKzEyMjYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFxuIHJldHJ5X211bHRpc2hvdDpcbiBcdHNlbC5idWZfbGlzdCA9IE5VTEw7XG4rXHRsZW4gPSBzci1cdTAwM2VsZW47XG4gXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XG4gXHRcdHNlbC52YWwgPSBzci1cdTAwM2VsZW47XG4gXHRcdHJldCA9IGlvX3JlY3ZfYnVmX3NlbGVjdChyZXEsIGttc2csIFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xuQEAgLTEyMjAsNiArMTIzNCw3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXHRcdFx0a21zZy1cdTAwM2Vtc2cubXNnX2lucSA9IC0xO1xuIFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHRcdH1cbitcdFx0bGVuID0gcmV0O1xuIFx0XHRzci1cdTAwM2VidWYgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTEyNTAsNiArMTI2NSwxNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0fVxuIFxuIFx0bXNob3RfZmluaXNoZWQgPSByZXQgXHUwMDNjPSAwO1xuK1xuK1x0LypcbitcdCAqIFdpdGggTVNHX1RSVU5DLCB0aGUgbmV0IGxheWVyIHdpbGwgcmV0dXJuIHRoZSBmdWxsIHNpemUgb2ZcbitcdCAqIHRoZSBwYWNrZXQsIGV2ZW4gaWYgd2Ugb25seSBmaWxsZWQgcGFydCBvZiBpdCBpbiB0aGUgYnVmZmVycy5cbitcdCAqIEFkanVzdCB0aGUgcmV0dXJuZWQgc2l6ZSB0byBjb25zdW1lIG9ubHkgdGhlIHJlYWwgcGFydCBvZiB0aGVcbitcdCAqIGJ1ZmZlci5cbitcdCAqL1xuK1x0Y29uc3VtZWQgPSByZXQ7XG4rXHRpZiAocmV0IFx1MDAzZSBsZW4pXG4rXHRcdGNvbnN1bWVkID0gbGVuO1xuK1xuIFx0aWYgKHJldCBcdTAwM2UgMClcbiBcdFx0cmV0ICs9IHNyLVx1MDAzZWRvbmVfaW87XG4gXHRlbHNlIGlmIChzci1cdTAwM2Vkb25lX2lvKVxuQEAgLTEyNTgsNyArMTI4NCw3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXHRcdGlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpO1xuIFxuIFx0c2VsLnZhbCA9IHJldDtcbi1cdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpXG4rXHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MsIGNvbnN1bWVkKSlcbiBcdFx0Z290byByZXRyeV9tdWx0aXNob3Q7XG4gXG4gXHRyZXR1cm4gc2VsLnZhbDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjEwLjAzNzI1MjU0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2NzUyNTY3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgS2VybmVsIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBhc2tlZCB0byB0YWtlIGEgbG9vayBhdCBhIHBhdGNoIHNlcmllcyBqdXN0IGFwcGxpZWQgdG8gdGhlIGtlcm5lbCByZXBvc2l0b3J5LCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBpb191cmluZy9uZXQuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBkaXZlIGludG8gdGhlIGRpZmYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGNoYW5nZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki5cblxuVGhlIGRpZmYgaXRzZWxmIHBvaW50cyB0byBtb2RpZmljYXRpb25zIHdpdGhpbiBgaW9fcmVjdl9maW5pc2hgLCBgaW9fcmVjdm1zZ2AsIGBpb19yZWN2X2J1Zl9zZWxlY3RgLCBhbmQgYGlvX3JlY3ZgLiBBaCwgaXQncyBkZWFsaW5nIHdpdGggYE1TR19UUlVOQ2Ag4oCTIHRoYXQncyB0aGUgZmxhZyB3aGVyZSB0aGUgbmV0d29yayBsYXllciByZXBvcnRzIHRoZSBmdWxsIHBhY2tldCBzaXplIGV2ZW4gaWYgdGhlIHJlY2VpdmUgYnVmZmVycyBhcmVuJ3QgY29tcGxldGVseSBmaWxsZWQuIFRoaXMgaXMgYSBjb21tb24gc2l0dWF0aW9uLCBzbyBJJ20gaW50ZXJlc3RlZCBpbiBob3cgdGhleSBhcmUgaGFuZGxpbmcgdGhpcyBlZGdlIGNhc2UuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGNhbGN1bGF0ZXMgYGNvbnN1bWVkYCBkYXRhLCBhbmQgY29ycmVjdGx5IHBhc3NlcyB0aGlzIGluZm9ybWF0aW9uIHRvIGBpb19wdXRfa2J1ZnNgIC8gYGlvX3B1dF9rYnVmYCB0aHJvdWdoIHRoZSBgaW9fcmVjdl9maW5pc2hgIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGltcHJvdmVtZW50IGluIGhhbmRsaW5nIHBhcnRpYWxseSByZWNlaXZlZCBwYWNrZXRzLiBHb29kLlxuXG5Ob3csIGNvbnRleHQgaXMga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGZpcnN0IHN0ZXAgZm9yIG1lIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvbiBgaW9fdXJpbmdgIGl0c2VsZiBhbmQgaWYgdGhlcmUgYXJlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgYGlvX3VyaW5nL25ldC5jYC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHF1aWNrbHkgYnJpbmcgdGhlIGNvbnRleHQgaW50byB2aWV3LiBLbm93aW5nIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIGZvcm0gYSBmdWxseSBpbmZvcm1lZCBvcGluaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTA0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjc6MTYuNzEyNTExNzYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTAzMDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTkzPWVudW0gc3JfcmV0cnlfZmxhZ3Mge1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTExLVxcbmlvX3VyaW5nL25ldC5jOjExMjpzdHJ1Y3QgaW9fcmVjdnpjIHtcXG5pb191cmluZy9uZXQuYy0xMTMtXFx0c3RydWN0IGZpbGVcXHRcXHRcXHQqZmlsZTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTYyNj1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNzAyLVxcbmlvX3VyaW5nL25ldC5jOjcwMzpzdGF0aWMgaW50IGlvX3JlY3Ztc2dfbXNob3RfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG5pb191cmluZy9uZXQuYy03MDQtXFx0XFx0XFx0XFx0IHN0cnVjdCBpb19hc3luY19tc2doZHIgKmlvbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNzI2LVxcbmlvX3VyaW5nL25ldC5jOjcyNzpzdGF0aWMgaW50IGlvX3JlY3Ztc2dfY29weV9oZHIoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvbmV0LmMtNzI4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICppb21zZylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTc0Mi1cXHR9XFxuaW9fdXJpbmcvbmV0LmM6NzQzOlxcdHJldHVybiBpb19yZWN2bXNnX21zaG90X3ByZXAocmVxLCBpb21zZywgbXNnLm1zZ19uYW1lbGVuLFxcbmlvX3VyaW5nL25ldC5jLTc0NC1cXHRcXHRcXHRcXHRcXHRtc2cubXNnX2NvbnRyb2xsZW4pO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNzQ2LVxcbmlvX3VyaW5nL25ldC5jOjc0NzpzdGF0aWMgaW50IGlvX3JlY3Ztc2dfcHJlcF9zZXR1cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG5pb191cmluZy9uZXQuYy03NDgte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNzc0LVxcbmlvX3VyaW5nL25ldC5jOjc3NTpcXHRyZXR1cm4gaW9fcmVjdm1zZ19jb3B5X2hkcihyZXEsIGttc2cpO1xcbmlvX3VyaW5nL25ldC5jLTc3Ni19XFxuLS1cXG5pb191cmluZy9uZXQuYy03ODAtXFxuaW9fdXJpbmcvbmV0LmM6NzgxOmludCBpb19yZWN2bXNnX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG5pb191cmluZy9uZXQuYy03ODIte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtODM5LVxcdHNyLVxcdTAwM2Vucl9tdWx0aXNob3RfbG9vcHMgPSAwO1xcbmlvX3VyaW5nL25ldC5jOjg0MDpcXHRyZXR1cm4gaW9fcmVjdm1zZ19wcmVwX3NldHVwKHJlcSk7XFxuaW9fdXJpbmcvbmV0LmMtODQxLX1cXG4tLVxcbmlvX3VyaW5nL25ldC5jLTg0Ny0vKlxcbmlvX3VyaW5nL25ldC5jOjg0ODogKiBGaW5pc2hlcyBpb19yZWN2IGFuZCBpb19yZWN2bXNnLlxcbmlvX3VyaW5nL25ldC5jLTg0OS0gKlxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtODUyLSAqL1xcbmlvX3VyaW5nL25ldC5jOjg1MzpzdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvbmV0LmMtODU0LVxcdFxcdFxcdFxcdCAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTkzNS1cXG5pb191cmluZy9uZXQuYzo5MzY6c3RhdGljIGludCBpb19yZWN2bXNnX3ByZXBfbXVsdGlzaG90KHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuaW9fdXJpbmcvbmV0LmMtOTM3LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGlvX3NyX21zZyAqc3IsIHZvaWQgX191c2VyICoqYnVmLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtOTYwLVxcbmlvX3VyaW5nL25ldC5jOjk2MTpzdHJ1Y3QgaW9fcmVjdm1zZ19tdWx0aXNob3RfaGRyIHtcXG5pb191cmluZy9uZXQuYy05NjItXFx0c3RydWN0IGlvX3VyaW5nX3JlY3Ztc2dfb3V0IG1zZztcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTk2NS1cXG5pb191cmluZy9uZXQuYzo5NjY6c3RhdGljIGludCBpb19yZWN2bXNnX211bHRpc2hvdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgaW9fc3JfbXNnICppbyxcXG5pb191cmluZy9uZXQuYy05NjctXFx0XFx0XFx0XFx0c3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTk3MS1cXHRpbnQgY29weV9sZW47XFxuaW9fdXJpbmcvbmV0LmM6OTcyOlxcdHN0cnVjdCBpb19yZWN2bXNnX211bHRpc2hvdF9oZHIgaGRyO1xcbmlvX3VyaW5nL25ldC5jLTk3My1cXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEwMDgtXFx0LyogZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gZ2FwIGJldHdlZW4gaGRyIGFuZCBzb2NrYWRkcl9zdG9yYWdlICovXFxuaW9fdXJpbmcvbmV0LmM6MTAwOTpcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGlvX3JlY3Ztc2dfbXVsdGlzaG90X2hkciwgYWRkcikgIT1cXG5pb191cmluZy9uZXQuYy0xMDEwLVxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCBpb191cmluZ19yZWN2bXNnX291dCkpO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTAxOS1cXG5pb191cmluZy9uZXQuYzoxMDIwOmludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvbmV0LmMtMTAyMS17XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMDUyLVxcdFxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQVBPTExfTVVMVElTSE9UKSB7XFxuaW9fdXJpbmcvbmV0LmM6MTA1MzpcXHRcXHRcXHRyZXQgPSBpb19yZWN2bXNnX3ByZXBfbXVsdGlzaG90KGttc2csIHNyLCBcXHUwMDI2c2VsLmFkZHIsIFxcdTAwMjZsZW4pO1xcbmlvX3VyaW5nL25ldC5jLTEwNTQtXFx0XFx0XFx0aWYgKHJldCkge1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTA2NS1cXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkge1xcbmlvX3VyaW5nL25ldC5jOjEwNjY6XFx0XFx0cmV0ID0gaW9fcmVjdm1zZ19tdWx0aXNob3Qoc29jaywgc3IsIGttc2csIGZsYWdzLFxcbmlvX3VyaW5nL25ldC5jLTEwNjctXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNm1zaG90X2ZpbmlzaGVkKTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTExMTAtXFx0c2VsLnZhbCA9IHJldDtcXG5pb191cmluZy9uZXQuYzoxMTExOlxcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MsIGNvbnN1bWVkKSlcXG5pb191cmluZy9uZXQuYy0xMTEyLVxcdFxcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTExNi1cXG5pb191cmluZy9uZXQuYzoxMTE3OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbmlvX3VyaW5nL25ldC5jLTExMTgtXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTkwLVxcbmlvX3VyaW5nL25ldC5jOjExOTE6aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9uZXQuYy0xMTkyLXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyMzEtXFx0XFx0c2VsLnZhbCA9IHNyLVxcdTAwM2VsZW47XFxuaW9fdXJpbmcvbmV0LmM6MTIzMjpcXHRcXHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmMtMTIzMy1cXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyODYtXFx0c2VsLnZhbCA9IHJldDtcXG5pb191cmluZy9uZXQuYzoxMjg3OlxcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MsIGNvbnN1bWVkKSlcXG5pb191cmluZy9uZXQuYy0xMjg4LVxcdFxcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTI5Mi1cXG5pb191cmluZy9uZXQuYzoxMjkzOmludCBpb19yZWN2emNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbmlvX3VyaW5nL25ldC5jLTEyOTQte1xcbmlvX3VyaW5nL25ldC5jOjEyOTU6XFx0c3RydWN0IGlvX3JlY3Z6YyAqemMgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fcmVjdnpjKTtcXG5pb191cmluZy9uZXQuYy0xMjk2LVxcdHVuc2lnbmVkIGlmcV9pZHg7XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMzIwLVxcbmlvX3VyaW5nL25ldC5jOjEzMjE6aW50IGlvX3JlY3Z6YyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbmlvX3VyaW5nL25ldC5jLTEzMjIte1xcbmlvX3VyaW5nL25ldC5jOjEzMjM6XFx0c3RydWN0IGlvX3JlY3Z6YyAqemMgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fcmVjdnpjKTtcXG5pb191cmluZy9uZXQuYy0xMzI0LVxcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XFxuLS1cXG5pb191cmluZy9uZXQuaD0zNT1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9uZXQuaC0zNi1cXG5pb191cmluZy9uZXQuaDozNzppbnQgaW9fcmVjdm1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xcbmlvX3VyaW5nL25ldC5oOjM4OmludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL25ldC5oOjM5OmludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL25ldC5oLTQwLVxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYz01ND1jb25zdCBzdHJ1Y3QgaW9faXNzdWVfZGVmIGlvX2lzc3VlX2RlZnNbXSA9IHtcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtMTU4LVxcdFxcdC5hc3luY19zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXFxuaW9fdXJpbmcvb3BkZWYuYzoxNTk6XFx0XFx0LnByZXBcXHRcXHRcXHQ9IGlvX3JlY3Ztc2dfcHJlcCxcXG5pb191cmluZy9vcGRlZi5jOjE2MDpcXHRcXHQuaXNzdWVcXHRcXHRcXHQ9IGlvX3JlY3Ztc2csXFxuaW9fdXJpbmcvb3BkZWYuYy0xNjEtI2Vsc2VcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtMzAyLVxcdFxcdC5hc3luY19zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXFxuaW9fdXJpbmcvb3BkZWYuYzozMDM6XFx0XFx0LnByZXBcXHRcXHRcXHQ9IGlvX3JlY3Ztc2dfcHJlcCxcXG5pb191cmluZy9vcGRlZi5jOjMwNDpcXHRcXHQuaXNzdWVcXHRcXHRcXHQ9IGlvX3JlY3YsXFxuaW9fdXJpbmcvb3BkZWYuYy0zMDUtI2Vsc2VcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtNTI4LSNpZiBkZWZpbmVkKENPTkZJR19ORVQpXFxuaW9fdXJpbmcvb3BkZWYuYzo1Mjk6XFx0XFx0LnByZXBcXHRcXHRcXHQ9IGlvX3JlY3Z6Y19wcmVwLFxcbmlvX3VyaW5nL29wZGVmLmM6NTMwOlxcdFxcdC5pc3N1ZVxcdFxcdFxcdD0gaW9fcmVjdnpjLFxcbmlvX3VyaW5nL29wZGVmLmMtNTMxLSNlbHNlXFxuLS1cXG5pb191cmluZy96Y3J4Lmg9MTMwPXN0YXRpYyBpbmxpbmUgaW50IGlvX3pjcnhfY3RybChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3pjcnguaC0xMzYtXFxuaW9fdXJpbmcvemNyeC5oOjEzNzppbnQgaW9fcmVjdnpjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL3pjcnguaDoxMzg6aW50IGlvX3JlY3Z6Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xcbmlvX3VyaW5nL3pjcnguaC0xMzktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjE2Ljc2NDQyMzQ3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg1NjY3MTM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGlvX3VyaW5nL25ldC5jIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSBkaWN0YXRpbmcgdGhlIGJlaGF2aW9yIG9mIGBpb191cmluZy9uZXQuY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZpbGVzLiBMZXQncyBzZWUuLi4gdGhlIGBpb191cmluZy9NYWtlZmlsZWAgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBhcyBpdCBzaG91bGQgZGV0YWlsIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsbHkgZmxhZyBzb21lIGNvbmZpZ3VyYXRpb24gYml0cy4gRmFpbGluZyB0aGF0LCBgaW9fdXJpbmcvS2NvbmZpZ2AgaXMgYWxtb3N0IGNlcnRhaW5seSB3aGVyZSB0aGVzZSBvcHRpb25zIGFyZSBkZWZpbmVkIGFuZCBkb2N1bWVudGVkLiBJJ20gYmV0dGluZyBvbmUgb2YgdGhvc2Ugd2lsbCBsZWFkIG1lIGRpcmVjdGx5IHRvIHRoZSByZWxldmFudCBrbm9icyBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzI3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjc6MTguNjIxMDk2ODMxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTM2Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX05FVF9SWF9CVVNZX1BPTEwpXFx0Kz0gbmFwaS5vXFxuaW9fdXJpbmcvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX05FVCkgKz0gbmV0Lm8gY21kX25ldC5vXFxuaW9fdXJpbmcvTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX1BST0NfRlMpICs9IGZkaW5mby5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjE4LjY2NzI0MDk0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2NDg2NzYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgaW9fdXJpbmcgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYGlvX3VyaW5nYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGlzIGtlcm5lbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnRzIGFyZSBgaW9fdXJpbmcvS2NvbmZpZ2AsIHRoYXQncyB3aGVyZSBJIGV4cGVjdCB0aGUgY29yZSBkZWZpbml0aW9ucyBmb3IgaW9fdXJpbmcgaXRzZWxmIHRvIGJlLCBhbmQgdGhlbiBgaW5pdC9LY29uZmlnYC4gYGluaXQvS2NvbmZpZ2Agb2Z0ZW4gY29udGFpbnMgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgcG90ZW50aWFsbHkgcmVmZXJlbmNlcyBvdGhlciBLY29uZmlnIGZpbGVzIHRoYXQgYXJlIHRoZW4gaW5jbHVkZWQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlc2UgdHdvIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgcG9pbnRzIGZvciBlbmFibGluZywgZGlzYWJsaW5nLCBhbmQgcG9zc2libHkgY3VzdG9taXppbmcgYGlvX3VyaW5nYCBpbiB0aGlzIHBhcnRpY3VsYXIga2VybmVsIGJ1aWxkLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBhbGwgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGZsYWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjE1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjc6MjEuNTMyMTEwODk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjQ2MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklPX1VSSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTk1Mj1jb25maWcgQUlPXFxuLS1cXG5pbml0L0tjb25maWctMTk1OS1cXG5pbml0L0tjb25maWc6MTk2MDpjb25maWcgSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTk2MS1cXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWc9MTk2OT1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5NzAtXFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIHRoZSBpb191cmluZyBzdWJzeXN0ZW1cXFwiXFxuaW5pdC9LY29uZmlnOjE5NzE6XFx0ZGVwZW5kcyBvbiBJT19VUklORyBcXHUwMDI2XFx1MDAyNiBHQ09WX0tFUk5FTFxcbmluaXQvS2NvbmZpZy0xOTcyLVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTgxLVxcbmluaXQvS2NvbmZpZzoxOTgyOmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcXG5pbml0L0tjb25maWctMTk4My1cXHR0cmlzdGF0ZSBcXFwiRW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcXFwiIGlmIEVYUEVSVFxcbmluaXQvS2NvbmZpZy0xOTg0LVxcdGRlZmF1bHQgblxcbmluaXQvS2NvbmZpZzoxOTg1OlxcdGRlcGVuZHMgb24gSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTk4Ni1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjIxLjU3OTM2Mjg2NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxOTk2NzQzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgSS9PIHdpdGggaW9fdXJpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMgaW4gdGhpcyBgaW9fdXJpbmcvbmV0LmNgIGZpbGUuIEknbSBnb2luZyB0byBwaW5wb2ludCB0aGUgYXJlYXMgd2hlcmUgdGhleSd2ZSBtYWRlIGNoYW5nZXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zOiBgaW9fcmVjdl9maW5pc2hgICh3aGljaCBpcyBhIHN0YXRpYyBpbmxpbmUsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCksIGBpb19yZWN2bXNnYCwgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgKGFub3RoZXIgc3RhdGljIG9uZSksIGFuZCBgaW9fcmVjdmAuIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBpb19yZWN2X2ZpbmlzaGAsIGBpb19yZWN2bXNnYCwgYW5kIGBpb19yZWN2YCBhbmQgc2VlIGhvdyB0aGUgY2hhbmdlcyBoYXZlIGFmZmVjdGVkIHRoZSBmbG93IGFyb3VuZCB0aGVtLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBjaGFuZ2VkIGFuZCB3aHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzoyNzoyMy43NzkwNDAxMDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL25ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHQgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgYWN0dWFsbHkgZmluaXNoZWQsIG9yIGZhbHNlIGlmIGl0IHNob3VsZCBydW5cXG4gODUxOlxcdCAqIGFnYWluIChmb3IgbXVsdGlzaG90KS5cXG4gODUyOlxcdCAqL1xcbiA4NTM6XFx0c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbiA4NTQ6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbiA4NTU6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIGJvb2wgbXNob3RfZmluaXNoZWQsXFxuIDg1NjpcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBzaXplX3QgY29uc3VtZWQpXFxuIDg1NzpcXHR7XFxuIDg1ODpcXHRcXHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xcbiA4NTk6XFx0XFx0dW5zaWduZWQgaW50IGNmbGFncyA9IDA7XFxuIDg2MDpcXHRcXG4gODYxOlxcdFxcdGlmIChrbXNnLVxcdTAwM2Vtc2cubXNnX2lucSBcXHUwMDNlIDApXFxuIDg2MjpcXHRcXHRcXHRjZmxhZ3MgfD0gSU9SSU5HX0NRRV9GX1NPQ0tfTk9ORU1QVFk7XFxuIDg2MzpcXHRcXG4gODY0OlxcdFxcdGlmIChzZWwtXFx1MDAzZXZhbCBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZfTVNIT1RfTElNKSB7XFxuIDg2NTpcXHRcXHRcXHQvKlxcbiA4NjY6XFx0XFx0XFx0ICogSWYgc3ItXFx1MDAzZWxlbiBoaXRzIHplcm8sIHRoZSBsaW1pdCBoYXMgYmVlbiByZWFjaGVkLiBNYXJrXFxuIDg2NzpcXHRcXHRcXHQgKiBtc2hvdCBhcyBmaW5pc2hlZCwgYW5kIGZsYWcgTVNIT1RfRE9ORSBhcyB3ZWxsIHRvIHByZXZlbnRcXG4gODY4OlxcdFxcdFxcdCAqIGEgcG90ZW50aWFsIGJ1bmRsZSBmcm9tIGJlaW5nIHJldHJpZWQuXFxuIDg2OTpcXHRcXHRcXHQgKi9cXG4gODcwOlxcdFxcdFxcdHNyLVxcdTAwM2Vtc2hvdF90b3RhbF9sZW4gLT0gbWluX3QoaW50LCBzZWwtXFx1MDAzZXZhbCwgc3ItXFx1MDAzZW1zaG90X3RvdGFsX2xlbik7XFxuIDg3MTpcXHRcXHRcXHRpZiAoIXNyLVxcdTAwM2Vtc2hvdF90b3RhbF9sZW4pIHtcXG4gODcyOlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9NU0hPVF9ET05FO1xcbiA4NzM6XFx0XFx0XFx0XFx0bXNob3RfZmluaXNoZWQgPSB0cnVlO1xcbiA4NzQ6XFx0XFx0XFx0fVxcbiA4NzU6XFx0XFx0fVxcbiA4NzY6XFx0XFxuIDg3NzpcXHRcXHRpZiAoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkge1xcbiA4Nzg6XFx0XFx0XFx0c2l6ZV90IHRoaXNfcmV0ID0gc2VsLVxcdTAwM2V2YWwgLSBzci1cXHUwMDNlZG9uZV9pbztcXG4gODc5OlxcdFxcbiA4ODA6XFx0XFx0XFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIGNvbnN1bWVkLCBzZWwtXFx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgY29uc3VtZWQpKTtcXG4gODgxOlxcdFxcdFxcdGlmIChzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVl9SRVRSWSlcXG4gODgyOlxcdFxcdFxcdFxcdGNmbGFncyA9IHJlcS1cXHUwMDNlY3FlLmZsYWdzIHwgKGNmbGFncyBcXHUwMDI2IENRRV9GX01BU0spO1xcbiA4ODM6XFx0XFx0XFx0aWYgKHNyLVxcdTAwM2Vtc2hvdF9sZW4gXFx1MDAyNlxcdTAwMjYgc2VsLVxcdTAwM2V2YWwgXFx1MDAzZT0gc3ItXFx1MDAzZW1zaG90X2xlbilcXG4gODg0OlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9NU0hPVF9DQVA7XFxuIDg4NTpcXHRcXHRcXHQvKiBidW5kbGUgd2l0aCBubyBtb3JlIGltbWVkaWF0ZSBidWZmZXJzLCB3ZSdyZSBkb25lICovXFxuIDg4NjpcXHRcXHRcXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0JMX0VNUFRZKVxcbiA4ODc6XFx0XFx0XFx0XFx0Z290byBmaW5pc2g7XFxuIDg4ODpcXHRcXHRcXHQvKlxcbiA4ODk6XFx0XFx0XFx0ICogSWYgbW9yZSBpcyBhdmFpbGFibGUgQU5EIGl0IHdhcyBhIGZ1bGwgdHJhbnNmZXIsIHJldHJ5IGFuZFxcbiA4OTA6XFx0XFx0XFx0ICogYXBwZW5kIHRvIHRoaXMgb25lXFxuIDg5MTpcXHRcXHRcXHQgKi9cXG4gODkyOlxcdFxcdFxcdGlmICghKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWX05PX1JFVFJZKSBcXHUwMDI2XFx1MDAyNlxcbiA4OTM6XFx0XFx0XFx0ICAgIGttc2ctXFx1MDAzZW1zZy5tc2dfaW5xIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiB0aGlzX3JldCBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4gODk0OlxcdFxcdFxcdCAgICAhaW92X2l0ZXJfY291bnQoXFx1MDAyNmttc2ctXFx1MDAzZW1zZy5tc2dfaXRlcikpIHtcXG4gODk1OlxcdFxcdFxcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzID0gY2ZsYWdzIFxcdTAwMjYgfkNRRV9GX01BU0s7XFxuIDg5NjpcXHRcXHRcXHRcXHRzci1cXHUwMDNlbGVuID0ga21zZy1cXHUwMDNlbXNnLm1zZ19pbnE7XFxuIDg5NzpcXHRcXHRcXHRcXHRzci1cXHUwMDNlZG9uZV9pbyArPSB0aGlzX3JldDtcXG4gODk4OlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9SRVRSWTtcXG4gODk5OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gOTAwOlxcdFxcdFxcdH1cXG4gOTAxOlxcdFxcdH0gZWxzZSB7XFxuIDkwMjpcXHRcXHRcXHRjZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBjb25zdW1lZCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuIDkwMzpcXHRcXHR9XFxuIDkwNDpcXHRcXG4gOTA1OlxcdFxcdC8qXFxuIDkwNjpcXHRcXHQgKiBGaWxsIENRRSBmb3IgdGhpcyByZWNlaXZlIGFuZCBzZWUgaWYgd2Ugc2hvdWxkIGtlZXAgdHJ5aW5nIHRvXFxuIDkwNzpcXHRcXHQgKiByZWNlaXZlIGZyb20gdGhpcyBzb2NrZXQuXFxuIDkwODpcXHRcXHQgKi9cXG4gOTA5OlxcdFxcdGlmICgocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkgXFx1MDAyNlxcdTAwMjYgIW1zaG90X2ZpbmlzaGVkIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjIzLjc3OTE1MzM3MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTA5OTg5NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgTmV0d29yayBQYXRjaDogQSBGdXp6aW5nIFBlcnNwZWN0aXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgZnV6emluZyBzdGFuZHBvaW50LCB0aGlzIHBhdGNoIGxvb2tzIGludGVyZXN0aW5nLiBXZSdyZSBsb29raW5nIGF0IGNoYW5nZXMgaW4gYGlvX3VyaW5nL25ldC5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IGJ1ZmZlcnMgYXJlIGhhbmRsZWQgZHVyaW5nIGBpb19yZWN2YCBhbmQgYGlvX3JlY3Ztc2dgIG9wZXJhdGlvbnMsIHBhcnRpY3VsYXJseSB3aGVuIGBNU0dfVFJVTkNgIGlzIHVzZWQgb3IgcGFydGlhbCBmaWxscyBvY2N1ci4gVGhlIGtleSBpcyBwcmV2ZW50aW5nIG92ZXItY29uc3VtcHRpb24gb2YgYnVmZmVyIGxlbmd0aHMgaW4gYGlvX3B1dF9rYnVmYCBhbmQgYGlvX3B1dF9rYnVmc2AuIEdpdmVuIHRoZSByZWFjaGFiaWxpdHkgb2YgYElPUklOR19PUF9SRUNWYCBhbmQgYElPUklOR19PUF9SRUNWTVNHYCBhcyBzdGFuZGFyZCBpb191cmluZyBvcGVyYXRpb25zLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vay4gSXQgZGlyZWN0bHkgdG91Y2hlcyB0aGUgY29yZSBuZXR3b3JrIG9wY29kZSBleGVjdXRpb24gbG9naWMgYW5kIGJ1ZmZlciBtYW5hZ2VtZW50LCBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBoZXJlIGFyZSB0aGUgZW50cnkgcG9pbnRzOiBgaW9fcmVjdmAgYW5kIGBpb19yZWN2bXNnYC4gVGhvdWdoIGBpb19yZWN2X2J1Zl9zZWxlY3RgIGlzIGluIHRoZSBtaXgsIGxldCdzIHByaW9yaXRpemUgdGhlIG5vbi1zdGF0aWMgZW50cnlwb2ludHMgZmlyc3QuIEFuZCBvZiBjb3Vyc2UsIHRoZSBzdGF0aWMgaW5saW5lIGBpb19yZWN2X2ZpbmlzaGAgaXMgbm90IGFuIGV4cGxpY2l0IHN5bWJvbC4gTXkgdGhpbmtpbmcgaXMgdGhhdCB0aGUgcmVsZXZhbnQgY29kZSB3aWxsIGJlIGFjY2Vzc2VkIGJ5IGVudHJ5cG9pbnRzLCBzbyBsZXQncyBrZWVwIGl0IHNpbXBsZS5cblxuQ29uZmlndXJhdGlvbi13aXNlLCBpdCBoaW5nZXMgb24gYElPX1VSSU5HYCBhbmQgYE5FVGAsIHdoaWNoIGlzIGV4cGVjdGVkIGdpdmVuIHRoZSBzdWJzeXN0ZW0uIFRoZSBgaW9fdXJpbmcvTWFrZWZpbGVgIGNvbmZpcm1zIHRoZSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIG5vIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLlxuXG5TbywgdG8gc3VtbWFyaXplOlxuLSAgICoqV29ydGhGdXp6aW5nOioqIFRydWVcbi0gICAqKkZvY3VzU3ltYm9sczoqKiBgaW9fcmVjdmAsIGBpb19yZWN2bXNnYFxuLSAgICoqRW5hYmxlQ29uZmlnczoqKiBgSU9fVVJJTkdgLCBgTkVUYFxuXG5Ob3csIGxldCdzIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUwNywiT3V0cHV0VG9rZW5zIjoxMjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzoyNzoyOC44ODkxNDYyMzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTk3OTIxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpb191cmluZyByZWNlaXZlIGhhbmRsaW5nIChpb19yZWN2LCBpb19yZWN2bXNnLCBpb19yZWN2X2J1Zl9zZWxlY3QsIGlvX3JlY3ZfZmluaXNoKSB0byBwcm9wZXJseSB0cmFjayBhbmQgY2FwIGNvbnN1bWVkIGJ1ZmZlciBsZW5ndGggd2hlbiBNU0dfVFJVTkMgaXMgdXNlZCBvciBidWZmZXIgc2l6ZXMgZGlmZmVyIGZyb20gcmV0dXJuZWQgcGFja2V0IGxlbmd0aHMuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIHZpYSBzdGFuZGFyZCBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpb191cmluZyByZWNlaXZlIGhhbmRsaW5nIChpb19yZWN2LCBpb19yZWN2bXNnLCBpb19yZWN2X2J1Zl9zZWxlY3QsIGlvX3JlY3ZfZmluaXNoKSB0byBwcm9wZXJseSB0cmFjayBhbmQgY2FwIGNvbnN1bWVkIGJ1ZmZlciBsZW5ndGggd2hlbiBNU0dfVFJVTkMgaXMgdXNlZCBvciBidWZmZXIgc2l6ZXMgZGlmZmVyIGZyb20gcmV0dXJuZWQgcGFja2V0IGxlbmd0aHMuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIHZpYSBzdGFuZGFyZCBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjI4Ljk2NTEzMjY2MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2NzU3MDYzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzoyNzoyOC45NjU1ODIxMTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MTY3NTI1MjUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGJ1ZmZlciBsZW5ndGggYWNjb3VudGluZyBpbiBpb191cmluZydzIHJlY3YgYW5kIHJlY3Ztc2cgcGF0aHMgd2hlbiBNU0dfVFJVTkMgaXMgdXNlZC4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgJ2NvbnN1bWVkJyB2YXJpYWJsZSB0byBlbnN1cmUgdGhhdCBidWZmZXIgcmluZyBjb21taXR0aW5nIGFuZCBidW5kbGUgYnVmZmVyIGNvdW50aW5nIChpb19idW5kbGVfbmJ1ZnMpIG9ubHkgY29uc3VtZSB1cCB0byB0aGUgYWN0dWFsIGJ1ZmZlciBjYXBhY2l0eSAoJ2xlbicpIHJhdGhlciB0aGFuIHRoZSB0cnVuY2F0ZWQgdG90YWwgcGFja2V0IGxlbmd0aCAoJ3JldCcpLlxcblxcbkFsbCBuZXcgYW5kIG1vZGlmaWVkIHZhcmlhYmxlcyAoJ2xlbicsICdjb25zdW1lZCcpIGFyZSBzdHJpY3RseSBpbml0aWFsaXplZCBhbmQgYXNzaWduZWQgYmVmb3JlIHVzZS4gVGhlIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBsZWFrIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgdG8gdXNlcnNwYWNlLiBBbnkgcmlza3MgcmVsYXRlZCB0byBidWZmZXIgb3Zlci1jb25zdW1wdGlvbiBvciBvdXQtb2YtYm91bmRzIGl0ZXIgaW5kZXhpbmcgaW4gaW9fYnVuZGxlX25idWZzIGZhbGwgdW5kZXIgYm91bmRzLWNoZWNraW5nIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzY2Y2Y2ZiNjFjODg3YmNlMDMxMWJkZTBhYWZhN2EzY2Y2Yjg2ZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDIzOjI3OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbmV0LmMgYi9pb191cmluZy9uZXQuY1xuaW5kZXggZmJlNzE5ZDg2YzQ2My4uZjgxMTBkYzlmODYwNiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL25ldC5jXG4rKysgYi9pb191cmluZy9uZXQuY1xuQEAgLTg1Myw3ICs4NTMsNyBAQCBpbnQgaW9fcmVjdm1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG4gc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIGJvb2wgbXNob3RfZmluaXNoZWQsXG4tXHRcdFx0XHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuK1x0XHRcdFx0ICB1bnNpZ25lZCBpc3N1ZV9mbGFncywgc2l6ZV90IGNvbnN1bWVkKVxuIHtcbiBcdHN0cnVjdCBpb19zcl9tc2cgKnNyID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7XG4gXHR1bnNpZ25lZCBpbnQgY2ZsYWdzID0gMDtcbkBAIC04NzcsNyArODc3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFx0aWYgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XG4gXHRcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cdTAwM2V2YWwgLSBzci1cdTAwM2Vkb25lX2lvO1xuIFxuLVx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7XG4rXHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCBjb25zdW1lZCwgc2VsLVx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgY29uc3VtZWQpKTtcbiBcdFx0aWYgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVl9SRVRSWSlcbiBcdFx0XHRjZmxhZ3MgPSByZXEtXHUwMDNlY3FlLmZsYWdzIHwgKGNmbGFncyBcdTAwMjYgQ1FFX0ZfTUFTSyk7XG4gXHRcdGlmIChzci1cdTAwM2Vtc2hvdF9sZW4gXHUwMDI2XHUwMDI2IHNlbC1cdTAwM2V2YWwgXHUwMDNlPSBzci1cdTAwM2Vtc2hvdF9sZW4pXG5AQCAtODk5LDcgKzg5OSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIHNlbC1cdTAwM2V2YWwsIHNlbC1cdTAwM2VidWZfbGlzdCk7XG4rXHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIGNvbnN1bWVkLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuIFx0fVxuIFxuIFx0LypcbkBAIC0xMDI3LDYgKzEwMjcsNyBAQCBpbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0aW50IHJldCwgbWluX3JldCA9IDA7XG4gXHRib29sIGZvcmNlX25vbmJsb2NrID0gaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XG4gXHRib29sIG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcbitcdHNpemVfdCBsZW4sIGNvbnN1bWVkID0gMDtcbiBcbiBcdHNvY2sgPSBzb2NrX2Zyb21fZmlsZShyZXEtXHUwMDNlZmlsZSk7XG4gXHRpZiAodW5saWtlbHkoIXNvY2spKVxuQEAgLTEwNDIsOSArMTA0Myw4IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXG4gcmV0cnlfbXVsdGlzaG90OlxuIFx0c2VsLmJ1Zl9saXN0ID0gTlVMTDtcbitcdGxlbiA9IHNyLVx1MDAzZWxlbjtcbiBcdGlmIChpb19kb19idWZmZXJfc2VsZWN0KHJlcSkpIHtcbi1cdFx0c2l6ZV90IGxlbiA9IHNyLVx1MDAzZWxlbjtcbi1cbiBcdFx0c2VsID0gaW9fYnVmZmVyX3NlbGVjdChyZXEsIFx1MDAyNmxlbiwgc3ItXHUwMDNlYnVmX2dyb3VwLCBpc3N1ZV9mbGFncyk7XG4gXHRcdGlmICghc2VsLmFkZHIpXG4gXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuQEAgLTEwNjUsNiArMTA2NSw3IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpIHtcbiBcdFx0cmV0ID0gaW9fcmVjdm1zZ19tdWx0aXNob3Qoc29jaywgc3IsIGttc2csIGZsYWdzLFxuIFx0XHRcdFx0XHQgICBcdTAwMjZtc2hvdF9maW5pc2hlZCk7XG4rXHRcdGNvbnN1bWVkID0gcmV0O1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogZGlzYWJsZSBwYXJ0aWFsIHJldHJ5IGZvciByZWN2bXNnIHdpdGggY21zZyBhdHRhY2hlZCAqL1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19XQUlUQUxMIFx1MDAyNlx1MDAyNiAha21zZy1cdTAwM2Vtc2cubXNnX2NvbnRyb2xsZW4pXG5AQCAtMTA3Miw2ICsxMDczLDE1IEBAIGludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXG4gXHRcdHJldCA9IF9fc3lzX3JlY3Ztc2dfc29jayhzb2NrLCBcdTAwMjZrbXNnLVx1MDAzZW1zZywgc3ItXHUwMDNldW1zZyxcbiBcdFx0XHRcdFx0IGttc2ctXHUwMDNldWFkZHIsIGZsYWdzKTtcbitcdFx0LypcbitcdFx0ICogV2l0aCBNU0dfVFJVTkMsIHRoZSBuZXQgbGF5ZXIgd2lsbCByZXR1cm4gdGhlIGZ1bGwgc2l6ZSBvZlxuK1x0XHQgKiB0aGUgcGFja2V0LCBldmVuIGlmIHdlIG9ubHkgZmlsbGVkIHBhcnQgb2YgaXQgaW4gdGhlIGJ1ZmZlcnMuXG4rXHRcdCAqIEFkanVzdCB0aGUgcmV0dXJuZWQgc2l6ZSB0byBjb25zdW1lIG9ubHkgdGhlIHJlYWwgcGFydCBvZiB0aGVcbitcdFx0ICogYnVmZmVyLlxuK1x0XHQgKi9cbitcdFx0Y29uc3VtZWQgPSByZXQ7XG4rXHRcdGlmIChyZXQgXHUwMDNlIGxlbilcbitcdFx0XHRjb25zdW1lZCA9IGxlbjtcbiBcdH1cbiBcbiBcdGlmIChyZXQgXHUwMDNjIG1pbl9yZXQpIHtcbkBAIC0xMDk4LDcgKzExMDgsNyBAQCBpbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0XHRpb19rYnVmX3JlY3ljbGUocmVxLCBzZWwuYnVmX2xpc3QsIGlzc3VlX2ZsYWdzKTtcbiBcbiBcdHNlbC52YWwgPSByZXQ7XG4tXHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MpKVxuK1x0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzLCBjb25zdW1lZCkpXG4gXHRcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xuIFxuIFx0cmV0dXJuIHNlbC52YWw7XG5AQCAtMTEwOCw2ICsxMTE4LDcgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2dcbiBcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xuK1x0c2l6ZV90IGxlbjtcbiBcdGludCByZXQ7XG4gXG4gXHQvKlxuQEAgLTExNTMsMTMgKzExNjQsMTQgQEAgc3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2dcbiBcdFx0Lyogc3BlY2lhbCBjYXNlIDEgdmVjLCBjYW4gYmUgYSBmYXN0IHBhdGggKi9cbiBcdFx0aWYgKHJldCA9PSAxKSB7XG4gXHRcdFx0c3ItXHUwMDNlYnVmID0gYXJnLmlvdnNbMF0uaW92X2Jhc2U7XG4tXHRcdFx0c3ItXHUwMDNlbGVuID0gYXJnLmlvdnNbMF0uaW92X2xlbjtcbitcdFx0XHRsZW4gPSBzci1cdTAwM2VsZW4gPSBhcmcuaW92c1swXS5pb3ZfbGVuO1xuIFx0XHRcdGdvdG8gbWFwX3VidWY7XG4gXHRcdH1cbiBcdFx0aW92X2l0ZXJfaW5pdChcdTAwMjZrbXNnLVx1MDAzZW1zZy5tc2dfaXRlciwgSVRFUl9ERVNULCBhcmcuaW92cywgcmV0LFxuLVx0XHRcdFx0YXJnLm91dF9sZW4pO1xuK1x0XHRcdCAgICAgIGFyZy5vdXRfbGVuKTtcbitcdFx0bGVuID0gYXJnLm91dF9sZW47XG4gXHR9IGVsc2Uge1xuLVx0XHRzaXplX3QgbGVuID0gc2VsLVx1MDAzZXZhbDtcbitcdFx0bGVuID0gc2VsLVx1MDAzZXZhbDtcbiBcbiBcdFx0KnNlbCA9IGlvX2J1ZmZlcl9zZWxlY3QocmVxLCBcdTAwMjZsZW4sIHNyLVx1MDAzZWJ1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpO1xuIFx0XHRpZiAoIXNlbC1cdTAwM2VhZGRyKVxuQEAgLTExNzMsNyArMTE4NSw3IEBAIHN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIGxlbjtcbiB9XG4gXG4gaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbkBAIC0xMTg0LDYgKzExOTYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbiBcdHVuc2lnbmVkIGZsYWdzO1xuIFx0aW50IHJldCwgbWluX3JldCA9IDA7XG4rXHRzaXplX3QgY29uc3VtZWQgPSAwLCBsZW4gPSAwO1xuIFx0Ym9vbCBmb3JjZV9ub25ibG9jayA9IGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLO1xuIFx0Ym9vbCBtc2hvdF9maW5pc2hlZDtcbiBcbkBAIC0xMjEzLDYgKzEyMjYsNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFxuIHJldHJ5X211bHRpc2hvdDpcbiBcdHNlbC5idWZfbGlzdCA9IE5VTEw7XG4rXHRsZW4gPSBzci1cdTAwM2VsZW47XG4gXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XG4gXHRcdHNlbC52YWwgPSBzci1cdTAwM2VsZW47XG4gXHRcdHJldCA9IGlvX3JlY3ZfYnVmX3NlbGVjdChyZXEsIGttc2csIFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xuQEAgLTEyMjAsNiArMTIzNCw3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXHRcdFx0a21zZy1cdTAwM2Vtc2cubXNnX2lucSA9IC0xO1xuIFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHRcdH1cbitcdFx0bGVuID0gcmV0O1xuIFx0XHRzci1cdTAwM2VidWYgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTEyNTAsNiArMTI2NSwxNyBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0fVxuIFxuIFx0bXNob3RfZmluaXNoZWQgPSByZXQgXHUwMDNjPSAwO1xuK1xuK1x0LypcbitcdCAqIFdpdGggTVNHX1RSVU5DLCB0aGUgbmV0IGxheWVyIHdpbGwgcmV0dXJuIHRoZSBmdWxsIHNpemUgb2ZcbitcdCAqIHRoZSBwYWNrZXQsIGV2ZW4gaWYgd2Ugb25seSBmaWxsZWQgcGFydCBvZiBpdCBpbiB0aGUgYnVmZmVycy5cbitcdCAqIEFkanVzdCB0aGUgcmV0dXJuZWQgc2l6ZSB0byBjb25zdW1lIG9ubHkgdGhlIHJlYWwgcGFydCBvZiB0aGVcbitcdCAqIGJ1ZmZlci5cbitcdCAqL1xuK1x0Y29uc3VtZWQgPSByZXQ7XG4rXHRpZiAocmV0IFx1MDAzZSBsZW4pXG4rXHRcdGNvbnN1bWVkID0gbGVuO1xuK1xuIFx0aWYgKHJldCBcdTAwM2UgMClcbiBcdFx0cmV0ICs9IHNyLVx1MDAzZWRvbmVfaW87XG4gXHRlbHNlIGlmIChzci1cdTAwM2Vkb25lX2lvKVxuQEAgLTEyNTgsNyArMTI4NCw3IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXHRcdGlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpO1xuIFxuIFx0c2VsLnZhbCA9IHJldDtcbi1cdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpXG4rXHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MsIGNvbnN1bWVkKSlcbiBcdFx0Z290byByZXRyeV9tdWx0aXNob3Q7XG4gXG4gXHRyZXR1cm4gc2VsLnZhbDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjI4Ljk2NTU4NDM2MloiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDc4MjYxNjc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqS01TQU4gRnV6emluZyBEZWNpc2lvbjogSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiBLTVNBTiBmdXp6aW5nIGlzIHdhcnJhbnRlZCBmb3IgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBmaXJzdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyAqd2hhdCogdGhpcyBwYXRjaCBpcyB0cnlpbmcgdG8gZG8gYW5kICp3aHkqIGl0J3MgYmVlbiBwcm9wb3NlZC5cblxuVGhlIGZhY3QgdGhhdCBpdCdzIGxvY2F0ZWQgaW4gYGlvX3VyaW5nL25ldC5jYCBpcyB0aGUgZmlyc3Qga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGF0IG5hcnJvd3MgdGhlIGZvY3VzIGNvbnNpZGVyYWJseS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoYXQgc3BlY2lmaWMgZmlsZS4gSSdsbCBwcm9iYWJseSBmaXJlIHVwIGdyZXBwZXIgb3IganVzdCByZWFkIHRoZSBmaWxlIGRpcmVjdGx5LCBkZXBlbmRpbmcgb24gaG93IGZhbWlsaWFyIEkgYW0gd2l0aCB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuIFRoZSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucyB3aXRoaW4gYGlvX3VyaW5nL25ldC5jYCwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGVpciBsb2dpYywgaWRlbnRpZnkgcG90ZW50aWFsIGRhdGEgcmFjZXMsIG1lbW9yeSBjb3JydXB0aW9uLCBvciBvdGhlciB2dWxuZXJhYmlsaXRpZXMgdGhhdCBjb3VsZCBiZSBleHBvc2VkLiBXaXRoIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcGF0Y2ggYW5kIGl0cyBjb250ZXh0LCBJIGNhbiBtYWtlIGFuIGluZm9ybWVkIGRlY2lzaW9uIGFib3V0IHRoZSBuZWNlc3NpdHkgb2YgS01TQU4gZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMxNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjc6MzkuNzQ4MjA1NjU0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9uZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NTA6XFx0ICogUmV0dXJucyB0cnVlIGlmIGl0IGlzIGFjdHVhbGx5IGZpbmlzaGVkLCBvciBmYWxzZSBpZiBpdCBzaG91bGQgcnVuXFxuIDg1MTpcXHQgKiBhZ2FpbiAoZm9yIG11bHRpc2hvdCkuXFxuIDg1MjpcXHQgKi9cXG4gODUzOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4gODU0OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcXG4gODU1OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCBib29sIG1zaG90X2ZpbmlzaGVkLFxcbiA4NTY6XFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpc3N1ZV9mbGFncywgc2l6ZV90IGNvbnN1bWVkKVxcbiA4NTc6XFx0e1xcbiA4NTg6XFx0XFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcXG4gODU5OlxcdFxcdHVuc2lnbmVkIGludCBjZmxhZ3MgPSAwO1xcbiA4NjA6XFx0XFxuIDg2MTpcXHRcXHRpZiAoa21zZy1cXHUwMDNlbXNnLm1zZ19pbnEgXFx1MDAzZSAwKVxcbiA4NjI6XFx0XFx0XFx0Y2ZsYWdzIHw9IElPUklOR19DUUVfRl9TT0NLX05PTkVNUFRZO1xcbiA4NjM6XFx0XFxuIDg2NDpcXHRcXHRpZiAoc2VsLVxcdTAwM2V2YWwgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWX01TSE9UX0xJTSkge1xcbiA4NjU6XFx0XFx0XFx0LypcXG4gODY2OlxcdFxcdFxcdCAqIElmIHNyLVxcdTAwM2VsZW4gaGl0cyB6ZXJvLCB0aGUgbGltaXQgaGFzIGJlZW4gcmVhY2hlZC4gTWFya1xcbiA4Njc6XFx0XFx0XFx0ICogbXNob3QgYXMgZmluaXNoZWQsIGFuZCBmbGFnIE1TSE9UX0RPTkUgYXMgd2VsbCB0byBwcmV2ZW50XFxuIDg2ODpcXHRcXHRcXHQgKiBhIHBvdGVudGlhbCBidW5kbGUgZnJvbSBiZWluZyByZXRyaWVkLlxcbiA4Njk6XFx0XFx0XFx0ICovXFxuIDg3MDpcXHRcXHRcXHRzci1cXHUwMDNlbXNob3RfdG90YWxfbGVuIC09IG1pbl90KGludCwgc2VsLVxcdTAwM2V2YWwsIHNyLVxcdTAwM2Vtc2hvdF90b3RhbF9sZW4pO1xcbiA4NzE6XFx0XFx0XFx0aWYgKCFzci1cXHUwMDNlbXNob3RfdG90YWxfbGVuKSB7XFxuIDg3MjpcXHRcXHRcXHRcXHRzci1cXHUwMDNlZmxhZ3MgfD0gSU9SSU5HX1JFQ1ZfTVNIT1RfRE9ORTtcXG4gODczOlxcdFxcdFxcdFxcdG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcXG4gODc0OlxcdFxcdFxcdH1cXG4gODc1OlxcdFxcdH1cXG4gODc2OlxcdFxcbiA4Nzc6XFx0XFx0aWYgKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHtcXG4gODc4OlxcdFxcdFxcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cXHUwMDNldmFsIC0gc3ItXFx1MDAzZWRvbmVfaW87XFxuIDg3OTpcXHRcXG4gODgwOlxcdFxcdFxcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCBjb25zdW1lZCwgc2VsLVxcdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIGNvbnN1bWVkKSk7XFxuIDg4MTpcXHRcXHRcXHRpZiAoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXFxuIDg4MjpcXHRcXHRcXHRcXHRjZmxhZ3MgPSByZXEtXFx1MDAzZWNxZS5mbGFncyB8IChjZmxhZ3MgXFx1MDAyNiBDUUVfRl9NQVNLKTtcXG4gODgzOlxcdFxcdFxcdGlmIChzci1cXHUwMDNlbXNob3RfbGVuIFxcdTAwMjZcXHUwMDI2IHNlbC1cXHUwMDNldmFsIFxcdTAwM2U9IHNyLVxcdTAwM2Vtc2hvdF9sZW4pXFxuIDg4NDpcXHRcXHRcXHRcXHRzci1cXHUwMDNlZmxhZ3MgfD0gSU9SSU5HX1JFQ1ZfTVNIT1RfQ0FQO1xcbiA4ODU6XFx0XFx0XFx0LyogYnVuZGxlIHdpdGggbm8gbW9yZSBpbW1lZGlhdGUgYnVmZmVycywgd2UncmUgZG9uZSAqL1xcbiA4ODY6XFx0XFx0XFx0aWYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9CTF9FTVBUWSlcXG4gODg3OlxcdFxcdFxcdFxcdGdvdG8gZmluaXNoO1xcbiA4ODg6XFx0XFx0XFx0LypcXG4gODg5OlxcdFxcdFxcdCAqIElmIG1vcmUgaXMgYXZhaWxhYmxlIEFORCBpdCB3YXMgYSBmdWxsIHRyYW5zZmVyLCByZXRyeSBhbmRcXG4gODkwOlxcdFxcdFxcdCAqIGFwcGVuZCB0byB0aGlzIG9uZVxcbiA4OTE6XFx0XFx0XFx0ICovXFxuIDg5MjpcXHRcXHRcXHRpZiAoIShzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVl9OT19SRVRSWSkgXFx1MDAyNlxcdTAwMjZcXG4gODkzOlxcdFxcdFxcdCAgICBrbXNnLVxcdTAwM2Vtc2cubXNnX2lucSBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgdGhpc19yZXQgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuIDg5NDpcXHRcXHRcXHQgICAgIWlvdl9pdGVyX2NvdW50KFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIpKSB7XFxuIDg5NTpcXHRcXHRcXHRcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyA9IGNmbGFncyBcXHUwMDI2IH5DUUVfRl9NQVNLO1xcbiA4OTY6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWxlbiA9IGttc2ctXFx1MDAzZW1zZy5tc2dfaW5xO1xcbiA4OTc6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWRvbmVfaW8gKz0gdGhpc19yZXQ7XFxuIDg5ODpcXHRcXHRcXHRcXHRzci1cXHUwMDNlZmxhZ3MgfD0gSU9SSU5HX1JFQ1ZfUkVUUlk7XFxuIDg5OTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDkwMDpcXHRcXHRcXHR9XFxuIDkwMTpcXHRcXHR9IGVsc2Uge1xcbiA5MDI6XFx0XFx0XFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgY29uc3VtZWQsIHNlbC1cXHUwMDNlYnVmX2xpc3QpO1xcbiA5MDM6XFx0XFx0fVxcbiA5MDQ6XFx0XFxuIDkwNTpcXHRcXHQvKlxcbiA5MDY6XFx0XFx0ICogRmlsbCBDUUUgZm9yIHRoaXMgcmVjZWl2ZSBhbmQgc2VlIGlmIHdlIHNob3VsZCBrZWVwIHRyeWluZyB0b1xcbiA5MDc6XFx0XFx0ICogcmVjZWl2ZSBmcm9tIHRoaXMgc29ja2V0LlxcbiA5MDg6XFx0XFx0ICovXFxuIDkwOTpcXHRcXHRpZiAoKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpIFxcdTAwMjZcXHUwMDI2ICFtc2hvdF9maW5pc2hlZCBcXHUwMDI2XFx1MDAyNlxcbiA5MTA6XFx0XFx0ICAgIGlvX3JlcV9wb3N0X2NxZShyZXEsIHNlbC1cXHUwMDNldmFsLCBjZmxhZ3MgfCBJT1JJTkdfQ1FFX0ZfTU9SRSkpIHtcXG4gOTExOlxcdFxcdFxcdHNlbC1cXHUwMDNldmFsID0gSU9VX1JFVFJZO1xcbiA5MTI6XFx0XFx0XFx0aW9fbXNob3RfcHJlcF9yZXRyeShyZXEsIGttc2cpO1xcbiA5MTM6XFx0XFx0XFx0LyogS25vd24gbm90LWVtcHR5IG9yIHVua25vd24gc3RhdGUsIHJldHJ5ICovXFxuIDkxNDpcXHRcXHRcXHRpZiAoY2ZsYWdzIFxcdTAwMjYgSU9SSU5HX0NRRV9GX1NPQ0tfTk9ORU1QVFkgfHwga21zZy1cXHUwMDNlbXNnLm1zZ19pbnEgXFx1MDAzYyAwKSB7XFxuIDkxNTpcXHRcXHRcXHRcXHRpZiAoc3ItXFx1MDAzZW5yX211bHRpc2hvdF9sb29wcysrIFxcdTAwM2MgTVVMVElTSE9UX01BWF9SRVRSWSBcXHUwMDI2XFx1MDAyNlxcbiA5MTY6XFx0XFx0XFx0XFx0ICAgICEoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZfTVNIT1RfQ0FQKSkge1xcbiA5MTc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5MTg6XFx0XFx0XFx0XFx0fVxcbiA5MTk6XFx0XFx0XFx0XFx0LyogbXNob3QgcmV0cmllcyBleGNlZWRlZCwgZm9yY2UgYSByZXF1ZXVlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjM5Ljc0ODM5Nzc5NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDE2MTk3NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGZvY3VzaW5nIG9uIHRoZSBjb3JlIHByb2JsZW06XG5cbioqRGVsdmluZyBpbnRvIGBpb19wdXRfa2J1ZnNgIGFuZCBpdHMgVmFyaWF0aW9ucyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgaW9fcHV0X2tidWZzYCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIHNpbXBsZXIgYGlvX3B1dF9rYnVmYCB2YXJpYW50cyBoYW5kbGUgdGhhdCBzZWNvbmQgYXJndW1lbnQuIEl0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGJ1ZmZlciBtYW5hZ2VtZW50IGFuZCByZXNvdXJjZSBoYW5kbGluZyBpbiB0aGlzIGNvbnRleHQuIEknbSBzZWVpbmcgYGNvbnN1bWVkYCwgYHNlbC1cdTAwM2V2YWxgLCBhbmQgYHRoaXNfcmV0YCBmbG9hdGluZyBhcm91bmQgYXMgcG9zc2liaWxpdGllcyBmb3IgdGhhdCBzZWNvbmQgYXJndW1lbnQsIGFuZCB0aGF04oCZcyB3aGVyZSB0aGUgZGV0YWlsIGlzIGxpa2VseSBoaWRkZW4uIEkgaW1tZWRpYXRlbHkgd2FudCB0byBkaWZmZXJlbnRpYXRlIHdoYXQgZWFjaCBvZiB0aG9zZSB2YXJpYWJsZXMgbWVhbnMgdG8gdGhlIG92ZXJhbGwgYmVoYXZpb3Igb2YgdGhlIGZ1bmN0aW9uLCBhbmQgSSdtIGd1ZXNzaW5nIHRoYXQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGZ1bmN0aW9ucyBhcmUgcHJvYmFibHkganVzdCB0aGF0IHNlY29uZCBhcmd1bWVudCwgb3IgYXQgbGVhc3QgdGhleSdyZSBrZXkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IHJlcHJlc2VudHMgYnl0ZXMgKmNvbnN1bWVkKiwgc29tZSBraW5kIG9mICpzZWxlY3Rpb24gdmFsdWUqLCBvciBhICpyZXR1cm4gdmFsdWUqIHRoYXQncyBiZWVuIHBhcnRpYWxseSBoYW5kbGVkLiBUaGUgaW1wbGljYXRpb25zIGZvciB0aGUgYnVmZmVyIGxpZmVjeWNsZSBhbmQgcmVzb3VyY2UgZGVhbGxvY2F0aW9uIGFyZSBzdWJzdGFudGlhbCBkZXBlbmRpbmcgb24gd2hpY2ggaXQgaXMhIFRoaXMgYW5hbHlzaXMgaXMgY3J1Y2lhbCB0byBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHByZWNpc2UgbWVtb3J5IG1hbmFnZW1lbnQgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjQyLjc2NDU5OTE5NloiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0MDg2MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcHV0X2tidWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2lvX3VyaW5nLmM9OTQ4PXZvaWQgaW9fcmVxX2RlZmVyX2ZhaWxlZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgczMyIHJlcylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTU1LVxcdHJlcV9zZXRfZmFpbChyZXEpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6OTU2OlxcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmVzLCBpb19wdXRfa2J1ZihyZXEsIHJlcywgTlVMTCkpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtOTU3LVxcdGlmIChkZWYtXFx1MDAzZWZhaWwpXFxuLS1cXG5pb191cmluZy9rYnVmLmM9MzgxPWludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTQwNi1cXG5pb191cmluZy9rYnVmLmM6NDA3OnN0YXRpYyBpbmxpbmUgYm9vbCBfX2lvX3B1dF9rYnVmX3Jpbmcoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcva2J1Zi5jLTQwOC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbGVuLCBpbnQgbnIpXFxuLS1cXG5pb191cmluZy9rYnVmLmMtNDIwLVxcbmlvX3VyaW5nL2tidWYuYzo0MjE6dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbmlvX3VyaW5nL2tidWYuYy00MjItXFx0XFx0XFx0ICAgIGludCBsZW4sIGludCBuYnVmcylcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy00MzItXFxuaW9fdXJpbmcva2J1Zi5jOjQzMzpcXHRpZiAoIV9faW9fcHV0X2tidWZfcmluZyhyZXEsIGJsLCBsZW4sIG5idWZzKSlcXG5pb191cmluZy9rYnVmLmMtNDM0LVxcdFxcdHJldCB8PSBJT1JJTkdfQ1FFX0ZfQlVGX01PUkU7XFxuLS1cXG5pb191cmluZy9rYnVmLmg9ODc9dm9pZCBpb19rYnVmX2Ryb3BfbGVnYWN5KHN0cnVjdCBpb19raW9jYiAqcmVxKTtcXG5pb191cmluZy9rYnVmLmgtODgtXFxuaW9fdXJpbmcva2J1Zi5oOjg5OnVuc2lnbmVkIGludCBfX2lvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG5pb191cmluZy9rYnVmLmgtOTAtXFx0XFx0XFx0ICAgIGludCBsZW4sIGludCBuYnVmcyk7XFxuLS1cXG5pb191cmluZy9rYnVmLmg9MTE0PXN0YXRpYyBpbmxpbmUgYm9vbCBpb19rYnVmX3JlY3ljbGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXFxuLS1cXG5pb191cmluZy9rYnVmLmgtMTI1LVxcbmlvX3VyaW5nL2tidWYuaDoxMjY6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fcHV0X2tidWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBsZW4sXFxuaW9fdXJpbmcva2J1Zi5oLTEyNy1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibClcXG4tLVxcbmlvX3VyaW5nL2tidWYuaC0xMzAtXFx0XFx0cmV0dXJuIDA7XFxuaW9fdXJpbmcva2J1Zi5oOjEzMTpcXHRyZXR1cm4gX19pb19wdXRfa2J1ZnMocmVxLCBibCwgbGVuLCAxKTtcXG5pb191cmluZy9rYnVmLmgtMTMyLX1cXG5pb191cmluZy9rYnVmLmgtMTMzLVxcbmlvX3VyaW5nL2tidWYuaDoxMzQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbGVuLFxcbmlvX3VyaW5nL2tidWYuaC0xMzUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IG5idWZzKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5oLTEzOC1cXHRcXHRyZXR1cm4gMDtcXG5pb191cmluZy9rYnVmLmg6MTM5OlxcdHJldHVybiBfX2lvX3B1dF9rYnVmcyhyZXEsIGJsLCBsZW4sIG5idWZzKTtcXG5pb191cmluZy9rYnVmLmgtMTQwLX1cXG4tLVxcbmlvX3VyaW5nL25ldC5jPTQ5MT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9uZXQuYy00OTktXFx0aWYgKCEoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkpIHtcXG5pb191cmluZy9uZXQuYzo1MDA6XFx0XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBzZWwtXFx1MDAzZXZhbCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuaW9fdXJpbmcvbmV0LmMtNTAxLVxcdFxcdGdvdG8gZmluaXNoO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNTAzLVxcbmlvX3VyaW5nL25ldC5jOjUwNDpcXHRjZmxhZ3MgPSBpb19wdXRfa2J1ZnMocmVxLCBzZWwtXFx1MDAzZXZhbCwgc2VsLVxcdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHNlbC1cXHUwMDNldmFsKSk7XFxuaW9fdXJpbmcvbmV0LmMtNTA1LVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9ODUzPXN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTg3OS1cXG5pb191cmluZy9uZXQuYzo4ODA6XFx0XFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIGNvbnN1bWVkLCBzZWwtXFx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgY29uc3VtZWQpKTtcXG5pb191cmluZy9uZXQuYy04ODEtXFx0XFx0aWYgKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtOTAxLVxcdH0gZWxzZSB7XFxuaW9fdXJpbmcvbmV0LmM6OTAyOlxcdFxcdGNmbGFncyB8PSBpb19wdXRfa2J1ZihyZXEsIGNvbnN1bWVkLCBzZWwtXFx1MDAzZWJ1Zl9saXN0KTtcXG5pb191cmluZy9uZXQuYy05MDMtXFx0fVxcbi0tXFxuaW9fdXJpbmcvcncuYz01NjI9dm9pZCBpb19yZXFfcndfY29tcGxldGUoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuLS1cXG5pb191cmluZy9ydy5jLTU2OC1cXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IChSRVFfRl9CVUZGRVJfU0VMRUNURUR8UkVRX0ZfQlVGRkVSX1JJTkcpKVxcbmlvX3VyaW5nL3J3LmM6NTY5OlxcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzIHw9IGlvX3B1dF9rYnVmKHJlcSwgbWF4KHJlcS1cXHUwMDNlY3FlLnJlcywgMCksIE5VTEwpO1xcbmlvX3VyaW5nL3J3LmMtNTcwLVxcbi0tXFxuaW9fdXJpbmcvcncuYz02NDA9c3RhdGljIGludCBraW9jYl9kb25lKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzc2l6ZV90IHJldCxcXG4tLVxcbmlvX3VyaW5nL3J3LmMtNjU3LVxcdFxcdGlmIChzZWwpXFxuaW9fdXJpbmcvcncuYzo2NTg6XFx0XFx0XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCByZXQsIHNlbC1cXHUwMDNlYnVmX2xpc3QpO1xcbmlvX3VyaW5nL3J3LmMtNjU5LVxcdFxcdGlvX3JlcV9zZXRfcmVzKHJlcSwgZmluYWxfcmV0LCBjZmxhZ3MpO1xcbi0tXFxuaW9fdXJpbmcvcncuYz0xMDMyPWludCBpb19yZWFkX21zaG90KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9ydy5jLTEwNjctXFx0fSBlbHNlIGlmICghKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpKSB7XFxuaW9fdXJpbmcvcncuYzoxMDY4OlxcdFxcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgcmV0LCBzZWwuYnVmX2xpc3QpO1xcbmlvX3VyaW5nL3J3LmMtMTA2OS1cXHR9IGVsc2Uge1xcbi0tXFxuaW9fdXJpbmcvcncuYy0xMDc1LVxcdFxcdCAqL1xcbmlvX3VyaW5nL3J3LmM6MTA3NjpcXHRcXHRjZmxhZ3MgPSBpb19wdXRfa2J1ZihyZXEsIHJldCwgc2VsLmJ1Zl9saXN0KTtcXG5pb191cmluZy9ydy5jLTEwNzctXFx0XFx0cnctXFx1MDAzZWxlbiA9IDA7IC8qIHNpbWlsYXJseSB0byBhYm92ZSwgcmVzZXQgbGVuIHRvIDAgKi9cXG4tLVxcbmlvX3VyaW5nL3J3LmM9MTMxOT1pbnQgaW9fZG9faW9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGZvcmNlX25vbnNwaW4pXFxuLS1cXG5pb191cmluZy9ydy5jLTEzNzUtXFx0XFx0bnJfZXZlbnRzKys7XFxuaW9fdXJpbmcvcncuYzoxMzc2OlxcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBtYXgocmVxLVxcdTAwM2VjcWUucmVzLCAwKSwgTlVMTCk7XFxuaW9fdXJpbmcvcncuYy0xMzc3LVxcdFxcdGlmICghaW9faXNfdXJpbmdfY21kKHJlcSkpXFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYz0zODc9Ym9vbCBpb191cmluZ19tc2hvdF9jbWRfcG9zdF9jcWUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzk2LVxcdGlmIChzZWwtXFx1MDAzZXZhbCBcXHUwMDNlIDApIHtcXG5pb191cmluZy91cmluZ19jbWQuYzozOTc6XFx0XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBzZWwtXFx1MDAzZXZhbCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzk4LVxcdFxcdGlmIChpb19yZXFfcG9zdF9jcWUocmVxLCBzZWwtXFx1MDAzZXZhbCwgY2ZsYWdzIHwgSU9SSU5HX0NRRV9GX01PUkUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzoyNzo0Mi44MTcwMjg0NTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUwMTY0NzQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQgYW5hbHlzaXMsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGlvX3VyaW5nL2tidWYuYyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Uga2VybmVsIGJ1ZmZlcnMgYXJlIG1hbmFnZWQgd2l0aGluIGBpb191cmluZ2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHR3byBmdW5jdGlvbnM6IGBfX2lvX3B1dF9rYnVmX3JpbmdgIGFuZCBgX19pb19wdXRfa2J1ZnNgLiBJIHN1c3BlY3QgdGhlc2UgYXJlIGNyaXRpY2FsIGZvciBidWZmZXIgcmVsZWFzZSBhbmQgcmV1c2UsIHdoaWNoIGlzIGFsd2F5cyBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgaW4gSS9PIHN5c3RlbXMuIEkgd2FudCB0byBzZWUgaG93IHRoZSByaW5nIGJ1ZmZlciBpbnRlcmFjdGlvbiB3b3JrcyBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBsb2NraW5nIGNvbnRlbnRpb24gcG9pbnRzIG9yIGluZWZmaWNpZW5jaWVzIGluIGBfX2lvX3B1dF9rYnVmc2AuIEnigJltIGV4cGVjdGluZyB0aGVzZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBsaWZldGltZSBvZiB0aGUga2J1ZnMgYW5kIHRyYWNrIHRoZWlyIGF2YWlsYWJpbGl0eSBpbiB0aGUgc3lzdGVtLiBUaGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMgaGVyZSwgc28gbGV0J3Mgc3RhcnQgZGlnZ2luZyBhbmQgc2VlIHdoYXQgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgaXNzdWVzIG1pZ2h0IGJlIGhpZGluZyBpbiB0aGVyZS4gR290dGEgY2hlY2sgaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIHN1Ym1pc3Npb24gcXVldWUgcHJvY2Vzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMzNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjQ1LjMxODY3ODMzN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9rYnVmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDA1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDA1OlxcdH1cXG4gNDA2OlxcdFxcbiA0MDc6XFx0c3RhdGljIGlubGluZSBib29sIF9faW9fcHV0X2tidWZfcmluZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4gNDA4OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBsZW4sIGludCBucilcXG4gNDA5OlxcdHtcXG4gNDEwOlxcdFxcdGJvb2wgcmV0ID0gdHJ1ZTtcXG4gNDExOlxcdFxcbiA0MTI6XFx0XFx0aWYgKGJsKVxcbiA0MTM6XFx0XFx0XFx0cmV0ID0gaW9fa2J1Zl9jb21taXQocmVxLCBibCwgbGVuLCBucik7XFxuIDQxNDpcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQlVGX01PUkUpKVxcbiA0MTU6XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxuIDQxNjpcXHRcXG4gNDE3OlxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfihSRVFfRl9CVUZGRVJfUklORyB8IFJFUV9GX0JVRl9NT1JFKTtcXG4gNDE4OlxcdFxcdHJldHVybiByZXQ7XFxuIDQxOTpcXHR9XFxuIDQyMDpcXHRcXG4gNDIxOlxcdHVuc2lnbmVkIGludCBfX2lvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG4gNDIyOlxcdFxcdFxcdFxcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpXFxuIDQyMzpcXHR7XFxuIDQyNDpcXHRcXHR1bnNpZ25lZCBpbnQgcmV0O1xcbiA0MjU6XFx0XFxuIDQyNjpcXHRcXHRyZXQgPSBJT1JJTkdfQ1FFX0ZfQlVGRkVSIHwgKHJlcS1cXHUwMDNlYnVmX2luZGV4IFxcdTAwM2NcXHUwMDNjIElPUklOR19DUUVfQlVGRkVSX1NISUZUKTtcXG4gNDI3OlxcdFxcbiA0Mjg6XFx0XFx0aWYgKHVubGlrZWx5KCEocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0JVRkZFUl9SSU5HKSkpIHtcXG4gNDI5OlxcdFxcdFxcdGlvX2tidWZfZHJvcF9sZWdhY3kocmVxKTtcXG4gNDMwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDQzMTpcXHRcXHR9XFxuIDQzMjpcXHRcXG4gNDMzOlxcdFxcdGlmICghX19pb19wdXRfa2J1Zl9yaW5nKHJlcSwgYmwsIGxlbiwgbmJ1ZnMpKVxcbiA0MzQ6XFx0XFx0XFx0cmV0IHw9IElPUklOR19DUUVfRl9CVUZfTU9SRTtcXG4gNDM1OlxcdFxcdHJldHVybiByZXQ7XFxuIDQzNjpcXHR9XFxuIDQzNzpcXHRcXG4gNDM4OlxcdHN0YXRpYyBpbnQgaW9fcmVtb3ZlX2J1ZmZlcnNfbGVnYWN5KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbiA0Mzk6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXFxuIDQ0MDpcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBuYnVmcylcXG4gNDQxOlxcdHtcXG4gNDQyOlxcdFxcdHVuc2lnbmVkIGxvbmcgaSA9IDA7XFxuIDQ0MzpcXHRcXHRzdHJ1Y3QgaW9fYnVmZmVyICpueHQ7XFxuIDQ0NDpcXHRcXG4gNDQ1OlxcdFxcdC8qIHByb3RlY3RzIGlvX2J1ZmZlcnNfY2FjaGUgKi9cXG4gNDQ2OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmN0eC1cXHUwMDNldXJpbmdfbG9jayk7XFxuIDQ0NzpcXHRcXHRXQVJOX09OX09OQ0UoYmwtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9CTF9CVUZfUklORyk7XFxuIDQ0ODpcXHRcXG4gNDQ5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuYnVmcyBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShcXHUwMDI2YmwtXFx1MDAzZWJ1Zl9saXN0KTsgaSsrKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjQ1LjMxODc3NzIzN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODE0NDIxNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHBlcnNwZWN0aXZlIG9uIGBpb19rYnVmX2NvbW1pdGA6XG5cbioqTXkgSW50ZXJwcmV0YXRpb24gb2YgYGlvX2tidWZfY29tbWl0YCoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYGlvX2tidWZfY29tbWl0YCwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gZGF0YSBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUga2VybmVsIGZvciBJL08gb3BlcmF0aW9ucywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgaGFuZGxlIHBhY2tldCBidWZmZXJzLiBJJ20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZmluYWxpemluZyBvciBcImNvbW1pdHRpbmdcIiBkYXRhIGludG8gYW4gYGlvX2tidWZgLCBsaWtlbHkgbWVhbmluZyB3ZSdyZSB0YWtpbmcgZGF0YSB0aGF0J3MgYmVlbiBhc3NlbWJsZWQsIHBlcmhhcHMgZnJvbSBtdWx0aXBsZSBzb3VyY2VzLCBhbmQgbWFraW5nIGl0IG9mZmljaWFsbHkgYXZhaWxhYmxlIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcsIHRyYW5zbWlzc2lvbiwgb3Igc3RvcmFnZS5cblxuVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBrZXJuZWwtbGV2ZWwgYnVmZmVyIG1hbmFnZW1lbnQuIEkgZXhwZWN0IGEgZmV3IGNyaXRpY2FsIGFzcGVjdHMgd2lsbCBiZSBpbiBwbGF5IGhlcmUuIEZpcnN0LCBob3cgYXJlIHdlIGhhbmRsaW5nIHRoZSBkYXRhIHBvaW50ZXJzPyBBcmUgd2UgY29uc29saWRhdGluZyBmcmFnbWVudGVkIGJ1ZmZlcnMsIG9yIG1lcmVseSBtYXJraW5nIHRoZSBlbmQgb2YgdGhlIHZhbGlkIGRhdGE/IFNlY29uZCwgZXJyb3IgaGFuZGxpbmcgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50LiBEb2VzIHRoaXMgZnVuY3Rpb24gcmV0dXJuIHN0YXR1cyBjb2RlcyB0byBpbmRpY2F0ZSBzdWNjZXNzIG9yIGZhaWx1cmUsIGFuZCB3aGF0IGFyZSB0aGUgcG9zc2libGUgZmFpbHVyZSBzY2VuYXJpb3MgKGJ1ZmZlciBvdmVyZmxvd3MsIGludmFsaWQgcG9pbnRlcnMsIGV0Yy4pPyBUaGlyZCwgYW55IG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucyBhcmUgZ29pbmcgdG8gYmUga2V5LiBJcyB0aGlzIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHVwIGFueSBhbGxvY2F0ZWQgYnVmZmVycz8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIHJlZmVyZW5jZSBjb3VudGluZz9cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHRvby4gSXMgdGhpcyBhIGNyaXRpY2FsIHBhdGggZnVuY3Rpb24gdGhhdCBpcyBnb2luZyB0byBiZSBpbnZva2VkIGZyZXF1ZW50bHksIGVzcGVjaWFsbHkgaW4gaGlnaC10aHJvdWdocHV0IG5ldHdvcmsgc2NlbmFyaW9zPyBJZiBzbywgZXZlcnkgaW5zdHJ1Y3Rpb24gY291bnRzLiBJdCdsbCBiZSBpbXBvcnRhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3B0aW1pemF0aW9ucyBpbiBwbGFjZSB0byBtaW5pbWl6ZSBvdmVyaGVhZC4gSSdkIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGlubGluZSBhc3NlbWJseSwgY2FyZWZ1bCBwb2ludGVyIGFyaXRobWV0aWMsIG9yIHBlcmhhcHMgbG9jay1mcmVlIHRlY2huaXF1ZXMgaWYgdGhlcmUncyBhbnkgY29uY3VycmVudCBhY2Nlc3MgaW52b2x2ZWQuXG5cbkZpbmFsbHksIHdoYXQncyB0aGUgYnJvYWRlciBjb250ZXh0PyBXaGF0IGlzIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGFuZCB3aGF0IGFyZSB0aGUgc3Vic2VxdWVudCBmdW5jdGlvbiBjYWxscz8gVW5kZXJzdGFuZGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUgd2lsbCBoZWxwIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgaW9fa2J1ZmAgaXMgYWN0dWFsbHkgdXNlZCBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI3OjUwLjEzMzIwMTk5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4NzkyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fa2J1Zl9jb21taXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2tidWYuYz0zNj1zdGF0aWMgYm9vbCBpb19rYnVmX2luY19jb21taXQoc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IGxlbilcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy02Mi1cXG5pb191cmluZy9rYnVmLmM6NjM6Ym9vbCBpb19rYnVmX2NvbW1pdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG5pb191cmluZy9rYnVmLmMtNjQtXFx0XFx0ICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBsZW4sIGludCBucilcXG4tLVxcbmlvX3VyaW5nL2tidWYuYz0xOTM9c3RhdGljIHN0cnVjdCBpb19icl9zZWwgaW9fcmluZ19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy0yMjMtXFx0aWYgKGlvX3Nob3VsZF9jb21taXQocmVxLCBpc3N1ZV9mbGFncykpIHtcXG5pb191cmluZy9rYnVmLmM6MjI0OlxcdFxcdGlmICghaW9fa2J1Zl9jb21taXQocmVxLCBzZWwuYnVmX2xpc3QsICpsZW4sIDEpKVxcbmlvX3VyaW5nL2tidWYuYy0yMjUtXFx0XFx0XFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9CVUZfTU9SRTtcXG4tLVxcbmlvX3VyaW5nL2tidWYuYz0zNDU9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy0zNjYtXFx0XFx0XFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9CVUZGRVJTX0NPTU1JVCB8IFJFUV9GX0JMX05PX1JFQ1lDTEU7XFxuaW9fdXJpbmcva2J1Zi5jOjM2NzpcXHRcXHRcXHRpZiAoIWlvX2tidWZfY29tbWl0KHJlcSwgc2VsLVxcdTAwM2VidWZfbGlzdCwgYXJnLVxcdTAwM2VvdXRfbGVuLCByZXQpKVxcbmlvX3VyaW5nL2tidWYuYy0zNjgtXFx0XFx0XFx0XFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9CVUZfTU9SRTtcXG4tLVxcbmlvX3VyaW5nL2tidWYuYz00MDc9c3RhdGljIGlubGluZSBib29sIF9faW9fcHV0X2tidWZfcmluZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy00MTItXFx0aWYgKGJsKVxcbmlvX3VyaW5nL2tidWYuYzo0MTM6XFx0XFx0cmV0ID0gaW9fa2J1Zl9jb21taXQocmVxLCBibCwgbGVuLCBucik7XFxuaW9fdXJpbmcva2J1Zi5jLTQxNC1cXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQlVGX01PUkUpKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5oPTg5PXVuc2lnbmVkIGludCBfX2lvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG5pb191cmluZy9rYnVmLmgtOTAtXFx0XFx0XFx0ICAgIGludCBsZW4sIGludCBuYnVmcyk7XFxuaW9fdXJpbmcva2J1Zi5oOjkxOmJvb2wgaW9fa2J1Zl9jb21taXQoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcva2J1Zi5oLTkyLVxcdFxcdCAgICBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbGVuLCBpbnQgbnIpO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NDgyPXN0YXRpYyBpbnQgaW9fbmV0X2tidWZfcmVjeWxlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNDg2LVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpXFxuaW9fdXJpbmcvbmV0LmM6NDg3OlxcdFxcdGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpO1xcbmlvX3VyaW5nL25ldC5jLTQ4OC1cXHRyZXR1cm4gSU9VX1JFVFJZO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzoyNzo1MC4xODEwODc2MTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY2ODY4Njc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gaW9fa2J1Zl9jb21taXQqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGZvY3VzaW5nIGluIG9uIGBpb19rYnVmX2NvbW1pdGAgd2l0aGluIGBpb191cmluZy9rYnVmLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT9cIiBUaGlzIGlzbid0IGp1c3QgYSBnZW5lcmljIGNvbW1pdCBmdW5jdGlvbjsgaXQncyBzcGVjaWZpYyB0byB0aGUga2VybmVsIGJ1ZmZlciBtYW5hZ2VtZW50IHdpdGhpbiBpb191cmluZywgYW5kIHRoYXQgaGFzIGFsbCBzb3J0cyBvZiBpbXBsaWNhdGlvbnMgcmVnYXJkaW5nIHBlcmZvcm1hbmNlLCBjb25jdXJyZW5jeSwgYW5kIGVycm9yIGhhbmRsaW5nIHRoYXQgYXJlIGNydWNpYWwgdG8gdW5wYWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbW1pdHMgYXJlIGJlaW5nIG9yY2hlc3RyYXRlZCwgd2hvIGNhbGxzIGl0LCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCB3b3JrZmxvdyBsb29rcyBsaWtlIGFyb3VuZCB0aGlzIGZ1bmN0aW9uLiBBcmUgd2UgdGFsa2luZyBhYm91dCBwdXNoaW5nIGRhdGEgZnJvbSBhIHVzZXItc3BhY2UgYnVmZmVyIGludG8gYSBrZXJuZWwga2J1Zj8gT3IgbWF5YmUgaXQncyB0aGUgb3Bwb3NpdGU/IFVuZGVyc3RhbmRpbmcgdGhlIGRpcmVjdGlvbiBhbmQgcHVycG9zZSBvZiB0aGUgZGF0YSBtb3ZlbWVudCBpcyBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsIGZvciB0aGUgcmVzdCBvZiBteSBpbnZlc3RpZ2F0aW9uLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyB0aGlzIGZ1bmN0aW9uIHdvcmtzIHdpdGg/IEnigJltIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYW55IEkvTyBzdWJtaXNzaW9uIHF1ZXVlcywgY29tcGxldGlvbiBxdWV1ZXMsIG9yIGFueSBzb3J0IG9mIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIGxvY2tpbmcsIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24sIGFuZCB3aGF0IHRoZSBzdWNjZXNzL2ZhaWx1cmUgcGF0aHMgYXJlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRoZSBoaWdoLXBlcmZvcm1hbmNlIGRlbWFuZHMgb2YgaW9fdXJpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjc6NTMuODQ5Nzc3NjY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2tidWYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzNTpcXHRcXG4gIDM2OlxcdHN0YXRpYyBib29sIGlvX2tidWZfaW5jX2NvbW1pdChzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbGVuKVxcbiAgMzc6XFx0e1xcbiAgMzg6XFx0XFx0LyogTm8gZGF0YSBjb25zdW1lZCwgcmV0dXJuIGZhbHNlIGVhcmx5IHRvIGF2b2lkIGNvbnN1bWluZyB0aGUgYnVmZmVyICovXFxuICAzOTpcXHRcXHRpZiAoIWxlbilcXG4gIDQwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0d2hpbGUgKGxlbikge1xcbiAgNDM6XFx0XFx0XFx0c3RydWN0IGlvX3VyaW5nX2J1ZiAqYnVmO1xcbiAgNDQ6XFx0XFx0XFx0dTMyIGJ1Zl9sZW4sIHRoaXNfbGVuO1xcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHRcXHRidWYgPSBpb19yaW5nX2hlYWRfdG9fYnVmKGJsLVxcdTAwM2VidWZfcmluZywgYmwtXFx1MDAzZWhlYWQsIGJsLVxcdTAwM2VtYXNrKTtcXG4gIDQ3OlxcdFxcdFxcdGJ1Zl9sZW4gPSBSRUFEX09OQ0UoYnVmLVxcdTAwM2VsZW4pO1xcbiAgNDg6XFx0XFx0XFx0dGhpc19sZW4gPSBtaW5fdCh1MzIsIGxlbiwgYnVmX2xlbik7XFxuICA0OTpcXHRcXHRcXHRidWZfbGVuIC09IHRoaXNfbGVuO1xcbiAgNTA6XFx0XFx0XFx0LyogU3RvcCBsb29waW5nIGZvciBpbnZhbGlkIGJ1ZmZlciBsZW5ndGggb2YgMCAqL1xcbiAgNTE6XFx0XFx0XFx0aWYgKGJ1Zl9sZW4gXFx1MDAzZSBibC1cXHUwMDNlbWluX2xlZnRfc3ViX29uZSB8fCAhdGhpc19sZW4pIHtcXG4gIDUyOlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UoYnVmLVxcdTAwM2VhZGRyLCBSRUFEX09OQ0UoYnVmLVxcdTAwM2VhZGRyKSArIHRoaXNfbGVuKTtcXG4gIDUzOlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UoYnVmLVxcdTAwM2VsZW4sIGJ1Zl9sZW4pO1xcbiAgNTQ6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNTU6XFx0XFx0XFx0fVxcbiAgNTY6XFx0XFx0XFx0V1JJVEVfT05DRShidWYtXFx1MDAzZWxlbiwgMCk7XFxuICA1NzpcXHRcXHRcXHRibC1cXHUwMDNlaGVhZCsrO1xcbiAgNTg6XFx0XFx0XFx0bGVuIC09IHRoaXNfbGVuO1xcbiAgNTk6XFx0XFx0fVxcbiAgNjA6XFx0XFx0cmV0dXJuIHRydWU7XFxuICA2MTpcXHR9XFxuICA2MjpcXHRcXG4gIDYzOlxcdGJvb2wgaW9fa2J1Zl9jb21taXQoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuICA2NDpcXHRcXHRcXHQgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IGxlbiwgaW50IG5yKVxcbiAgNjU6XFx0e1xcbiAgNjY6XFx0XFx0aWYgKHVubGlrZWx5KCEocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0JVRkZFUlNfQ09NTUlUKSkpXFxuICA2NzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0cmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+UkVRX0ZfQlVGRkVSU19DT01NSVQ7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdGlmICh1bmxpa2VseShsZW4gXFx1MDAzYyAwKSlcXG4gIDcyOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAgNzM6XFx0XFx0aWYgKGJsLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPQkxfSU5DKVxcbiAgNzQ6XFx0XFx0XFx0cmV0dXJuIGlvX2tidWZfaW5jX2NvbW1pdChibCwgbGVuKTtcXG4gIDc1OlxcdFxcdGJsLVxcdTAwM2VoZWFkICs9IG5yO1xcbiAgNzY6XFx0XFx0cmV0dXJuIHRydWU7XFxuICA3NzpcXHR9XFxuICA3ODpcXHRcXG4gIDc5OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICppb19idWZmZXJfZ2V0X2xpc3Qoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuICA4MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYmdpZClcXG4gIDgxOlxcdHtcXG4gIDgyOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmN0eC1cXHUwMDNldXJpbmdfbG9jayk7XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdHJldHVybiB4YV9sb2FkKFxcdTAwMjZjdHgtXFx1MDAzZWlvX2JsX3hhLCBiZ2lkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjc6NTMuODQ5ODY3NTU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MTkwNjkxMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQnVmZmVyIE92ZXJmbG93IFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIGBpb19yZWN2YCBhbmQgYGlvX3JlY3Ztc2dgLCBpZiB3ZSdyZSB1c2luZyBidWZmZXIgcmluZyBzZWxlY3Rpb24sIHBhcnRpY3VsYXJseSB3aXRoIHRob3NlIGluY3JlbWVudGFsIGJ1ZmZlcnMgb3IgYnVuZGxlcywgdGhlIHZhcmlhYmxlIGBsZW5gIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlciBhdmFpbGFibGUuIEJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogd2hlbiBgTVNHX1RSVU5DYCBpcyB1c2VkLCBgcmVjdm1zZ2Agb3IgYHJlY3ZgIGdpdmVzIG1lIGJhY2sgdGhlICp0b3RhbCogcGFja2V0IHNpemUsIHdoaWNoIGNvdWxkIGJlIGJpZ2dlciB0aGFuIGBsZW5gLlxuXG5Ob3csIHRoZSBjb2RlIHdhcyBjYWxsaW5nIGBpb19yZWN2X2ZpbmlzaGAgd2l0aCBgc2VsLVx1MDAzZXZhbGAsIHdoaWNoIGlzIHRoZSByZXR1cm4gdmFsdWUsIGByZXRgLiBBbmQgYHJldGAgaXMgdGhhdCB0cnVuY2F0ZWQgcGFja2V0IHNpemUg4oCTIHRoZSBsYXJnZXIgdmFsdWUhIFNvLCBgaW9fcHV0X2tidWZgIG9yIGBpb19wdXRfa2J1ZnNgIHdhcyBnZXR0aW5nIGByZXRgIGFzIGl0cyBgbGVuYCBhcmd1bWVudC4gVGhhdCBtZWFucyBpdCB3YXMgcG90ZW50aWFsbHkgY29tbWl0dGluZyBvciBjYWxjdWxhdGluZyB0aGUgYnVmZmVyIGNvdW50IGJhc2VkIG9uIGEgbGVuZ3RoICpsYXJnZXIqIHRoYW4gd2hhdCB3YXMgYWN0dWFsbHkgaW4gdGhlIHJpbmcgYnVmZmVyISBUaGF0J3MgYSBjbGFzc2ljIG92ZXJmbG93IGluIHRoZSBtYWtpbmcuXG5cblNwZWNpZmljYWxseSwgaXQgd2FzIGRvaW5nOlxuLSBgY29uc3VtZWQgPSBtaW4ocmV0LCBsZW4pYC4gSWYgYHJldGAgd2FzIGJpZ2dlciB0aGFuIGBsZW5gLCBgY29uc3VtZWRgIGdldHMgc2V0IHRvIGBsZW5gLCB3aGljaCBpcyBnb29kLlxuLSBUaGVuLCBgY29uc3VtZWRgIGlzIHBhc3NlZCB0byBgaW9fcmVjdl9maW5pc2hgIC1cdTAwM2UgYGlvX3B1dF9rYnVmYCAvIGBpb19wdXRfa2J1ZnNgLlxuLSBBbmQgdGhlbiBgaW9fYnVuZGxlX25idWZzKGttc2csIGNvbnN1bWVkKWAgY2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgYmFzZWQgb24gYGNvbnN1bWVkYC5cblxuSG1tLCB0aGlzIGBjb25zdW1lZGAgbG9naWMgbG9va3MgbGlrZSBpdCB3YXMgYXR0ZW1wdGluZyB0byBjb3JyZWN0IHRoaXMsIGJ1dC4uLiBpdCdzIGEgYml0IG9mIGEgY29kZSBzbWVsbC4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIGBpb19idW5kbGVfbmJ1ZnNgIHRvIGNvbmZpcm0gdGhlIGZpeCwgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBvc3NpYmxlIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzoyNzo1OC4yNjg5Mzk3MThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDg2Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2J1bmRsZV9uYnVmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9NDM3PXN0YXRpYyB2b2lkIGlvX3JlcV9tc2dfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTQ1MC0gKi9cXG5pb191cmluZy9uZXQuYzo0NTE6c3RhdGljIGludCBpb19idW5kbGVfbmJ1ZnMoc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IHJldClcXG5pb191cmluZy9uZXQuYy00NTIte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NDgyPXN0YXRpYyBpbnQgaW9fbmV0X2tidWZfcmVjeWxlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNDg2LVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpXFxuaW9fdXJpbmcvbmV0LmM6NDg3OlxcdFxcdGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpO1xcbmlvX3VyaW5nL25ldC5jLTQ4OC1cXHRyZXR1cm4gSU9VX1JFVFJZO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NDkxPXN0YXRpYyBpbmxpbmUgYm9vbCBpb19zZW5kX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTUwMy1cXG5pb191cmluZy9uZXQuYzo1MDQ6XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXFx1MDAzZXZhbCkpO1xcbmlvX3VyaW5nL25ldC5jLTUwNS1cXG4tLVxcbmlvX3VyaW5nL25ldC5jPTg1Mz1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9uZXQuYy04NzktXFxuaW9fdXJpbmcvbmV0LmM6ODgwOlxcdFxcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCBjb25zdW1lZCwgc2VsLVxcdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIGNvbnN1bWVkKSk7XFxuaW9fdXJpbmcvbmV0LmMtODgxLVxcdFxcdGlmIChzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVl9SRVRSWSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjc6NTguMzIxMDMxNjY2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMzk4ODUxNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiB3aGF0IEknbSB0aGlua2luZywgYmFzZWQgb24gdGhlIHByb21wdDpcblxuKipBbmFseXppbmcgdGhlIGBpb19idW5kbGVfbmJ1ZnNgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGlvX2J1bmRsZV9uYnVmc2AgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGdlYXJlZCB0b3dhcmRzIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3Iga2V5IGFzcGVjdHM6XG5cbiogICAqKldoYXQgaXMgaXQgc3VwcG9zZWQgdG8gZG8/KiogV2hhdCBpcyB0aGUgb3ZlcmFyY2hpbmcgb2JqZWN0aXZlIG9mIHRoaXMgZnVuY3Rpb24gb3IgbW9kdWxlPyBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBidWZmZXIgbWFuYWdlbWVudCByZWxhdGVkIHRvIEkvTyBvcGVyYXRpb25zLCBwcm9iYWJseSBpbnZvbHZpbmcgbm9uLWJsb2NraW5nIChOQikgZnVuY3Rpb25hbGl0eS4gVGhlICdidW5kbGUnIGFzcGVjdCBzdWdnZXN0cyBpdCdzIGhhbmRsaW5nIG11bHRpcGxlIGJ1ZmZlcnMgb3IgYSBncm91cCBvZiByZWxhdGVkIGJ1ZmZlcnMuXG4qICAgKipXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcz8qKiBXaGF0IGFyZSB0aGUgbWFqb3IgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgaG93IGRvIHRoZXkgd29yayB0b2dldGhlcj8gSSdtIGFudGljaXBhdGluZyB0aGVyZSBjb3VsZCBiZSBzb21lIGtpbmQgb2YgZGVzY3JpcHRvciBvciBjb250cm9sIHN0cnVjdHVyZS4gSSB3aWxsIGJlIGxvb2tpbmcgdG8gdW5kZXJzdGFuZCB0aGUgdHlwZXMgYW5kIG1lYW5pbmdzIG9mIHRoZSBhcmd1bWVudHMgcGFzc2VkLCBhbmQgbG9jYWwgdmFyaWFibGVzIHVzZWQuXG4qICAgKipXaGF0J3MgdGhlIG92ZXJhbGwgd29ya2Zsb3c/KiogSSB3YW50IHRvIHRyYWNlIHRoZSBmbG93LCBpZGVudGlmeWluZyB0aGUgY29udHJvbCBmbG93OiBzdGFydCB0byBmaW5pc2guXG4qICAgKipBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBjb25jdXJyZW5jeSBjb25jZXJucz8qKiBTaW5jZSB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIEkvTywgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIGNyaXRpY2FsIHNlY3Rpb25zLCBvciBpbmVmZmljaWVudCBidWZmZXIgaGFuZGxpbmcgc3RyYXRlZ2llcy5cbiogICAqKldoYXQgZXJyb3IgaGFuZGxpbmcgaXMgcHJlc2VudD8qKiBIb3cgZG9lcyBpdCBkZWFsIHdpdGggZmFpbHVyZXM/IEknbSBsb29raW5nIGZvciByb2J1c3QgZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcuXG5cbkknbSByZWFkeSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHN0YXJ0IGRpc3NlY3RpbmcgZWFjaCBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBlYWNoIG9mIHRoZSBwb2ludHMgYWJvdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzk2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6Mjg6MDEuNjYwOTE5OTQzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9uZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDU6XFx0ICogQSBidW5kbGUgY291bGQgYmUgdXNpbmcgYSBzaW5nbGUgSVRFUl9VQlVGIGlmIHRoYXQncyBhbGwgd2UgbWFwcGVkLCBvciBpdFxcbiA0NDY6XFx0ICogY291bGQgYmUgdXNpbmcgYW4gSVRFUl9JT1ZFQy4gSWYgdGhlIGxhdHRlciwgdGhlbiBpZiB3ZSBjb25zdW1lZCBhbGwgb2ZcXG4gNDQ3OlxcdCAqIHRoZSBzZWdtZW50cywgdGhlbiBpdCdzIGEgdHJpdmlhbCBxdWVzdGlvbnQgbyBhbnN3ZXIuIElmIHdlIGhhdmUgcmVzaWR1YWxcXG4gNDQ4OlxcdCAqIGRhdGEgaW4gdGhlIGl0ZXIsIHRoZW4gbG9vcCB0aGUgc2VnbWVudHMgdG8gZmlndXJlIG91dCBob3cgbXVjaCB3ZVxcbiA0NDk6XFx0ICogdHJhbnNmZXJyZWQuXFxuIDQ1MDpcXHQgKi9cXG4gNDUxOlxcdHN0YXRpYyBpbnQgaW9fYnVuZGxlX25idWZzKHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCByZXQpXFxuIDQ1MjpcXHR7XFxuIDQ1MzpcXHRcXHRzdHJ1Y3QgaW92ZWMgKmlvdjtcXG4gNDU0OlxcdFxcdGludCBuYnVmcztcXG4gNDU1OlxcdFxcbiA0NTY6XFx0XFx0Lyogbm8gZGF0YSBpcyBhbHdheXMgemVybyBzZWdtZW50cywgYW5kIGEgdWJ1ZiBpcyBhbHdheXMgMSBzZWdtZW50ICovXFxuIDQ1NzpcXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuIDQ1ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDU5OlxcdFxcdGlmIChpdGVyX2lzX3VidWYoXFx1MDAyNmttc2ctXFx1MDAzZW1zZy5tc2dfaXRlcikpXFxuIDQ2MDpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gNDYxOlxcdFxcbiA0NjI6XFx0XFx0aW92ID0ga21zZy1cXHUwMDNldmVjLmlvdmVjO1xcbiA0NjM6XFx0XFx0aWYgKCFpb3YpXFxuIDQ2NDpcXHRcXHRcXHRpb3YgPSBcXHUwMDI2a21zZy1cXHUwMDNlZmFzdF9pb3Y7XFxuIDQ2NTpcXHRcXG4gNDY2OlxcdFxcdC8qIGlmIGFsbCBkYXRhIHdhcyB0cmFuc2ZlcnJlZCwgaXQncyBiYXNpYyBwb2ludGVyIG1hdGggKi9cXG4gNDY3OlxcdFxcdGlmICghaW92X2l0ZXJfY291bnQoXFx1MDAyNmttc2ctXFx1MDAzZW1zZy5tc2dfaXRlcikpXFxuIDQ2ODpcXHRcXHRcXHRyZXR1cm4gaXRlcl9pb3YoXFx1MDAyNmttc2ctXFx1MDAzZW1zZy5tc2dfaXRlcikgLSBpb3Y7XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdFxcdC8qIHNob3J0IHRyYW5zZmVyLCBjb3VudCBzZWdtZW50cyAqL1xcbiA0NzE6XFx0XFx0bmJ1ZnMgPSAwO1xcbiA0NzI6XFx0XFx0ZG8ge1xcbiA0NzM6XFx0XFx0XFx0aW50IHRoaXNfbGVuID0gbWluX3QoaW50LCBpb3ZbbmJ1ZnNdLmlvdl9sZW4sIHJldCk7XFxuIDQ3NDpcXHRcXG4gNDc1OlxcdFxcdFxcdG5idWZzKys7XFxuIDQ3NjpcXHRcXHRcXHRyZXQgLT0gdGhpc19sZW47XFxuIDQ3NzpcXHRcXHR9IHdoaWxlIChyZXQpO1xcbiA0Nzg6XFx0XFxuIDQ3OTpcXHRcXHRyZXR1cm4gbmJ1ZnM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjI4OjAxLjY2MTAyOTU2M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTc5NzgwMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIERldGVjdGVkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGlzc3VlcyBpbiBgaW9fYnVuZGxlX25idWZzYCBpZiB0aGUgYHJldGAgdmFsdWUsIHRoZSByZXN1bHQgb2YgYSByZWNlaXZlIG9wZXJhdGlvbiwgZXhjZWVkZWQgdGhlIGJ1ZmZlciBsZW5ndGguIFNwZWNpZmljYWxseSwgdGhlIGxvb3AgY291bGQgcG90ZW50aWFsbHkgYWNjZXNzIG1lbW9yeSBiZXlvbmQgdGhlIGBpb3ZgIGFycmF5IGJvdW5kcywgb3IgY2F1c2UgaXNzdWVzIHdpdGggYnVmZmVyIHJpbmcgYWR2YW5jZW1lbnQuIFRoZXNlIGFyZSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcHJvYmxlbXMgdGhhdCBzaG91bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHNpbXBsZSBhc3NlcnRpb25zLlxuXG5Ob3csIGxldCdzIHN5c3RlbWF0aWNhbGx5IGdvIHRocm91Z2ggdGhlIEtNU0FOIHF1ZXN0aW9ucy4gVGhlIHByaW1hcnkgY29uY2VybiBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UgbmVlZCB0byBiZSBjb25maWRlbnQgdGhhdCBub3RoaW5nIHVuaW5pdGlhbGl6ZWQgaXMgbGVha2VkIHRvIHVzZXIgc3BhY2UsIGVpdGhlciB0aHJvdWdoIGRpcmVjdCBjb3BpZXMgb3IgaW5kaXJlY3RseSB0aHJvdWdoIGNhbGN1bGF0aW9ucy5cblxuSSd2ZSBleGFtaW5lZCB0aGUgY29kZSBwYXRocyBpbnZvbHZlZCwgZm9jdXNpbmcgb24gYGlvX3JlY3ZfZmluaXNoYCwgYGlvX3JlY3Ztc2dgIGFuZCBgaW9fcmVjdmAuIEluIGBpb19yZWN2X2ZpbmlzaGAsIHRoZSB2YWx1ZXMgZ29pbmcgdG8gdGhlIGNvbXBsZXRpb24gcXVldWUgZW50cnkgYXJlIHRoZSByZXR1cm4gY29kZSAoYHNlbC1cdTAwM2V2YWxgKSBhbmQgZmxhZ3MgKGBjZmxhZ3NgKSwgd2l0aCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGBjb25zdW1lZGAsIHdoaWNoIGlzIGFsd2F5cyBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIGNhcHBlZCwgYmFzZWQgb24gYHJldGAgYW5kIGBsZW5gLlxuXG5JbiBgaW9fcmVjdm1zZ2AsIHRoZSByZWxldmFudCB2YXJpYWJsZXMsIGBsZW5gIGFuZCBgY29uc3VtZWRgLCBhcmUgYWx3YXlzIHByb3Blcmx5IGluaXRpYWxpemVkIGVpdGhlciBkaXJlY3RseSBmcm9tIGBzci1cdTAwM2VsZW5gIG9yIGZyb20gdGhlIHJlc3VsdHMgb2YgYGlvX2J1ZmZlcl9zZWxlY3RgIGFuZCBpdHMgc3Vic2lkaWFyeSwgYGlvX3JlY3ZfYnVmX3NlbGVjdGAuIGBpb19yZWN2X2J1Zl9zZWxlY3RgIGFsc28gaW5pdGlhbGl6ZXMgaXRzIGxvY2FsIGBsZW5gIHZhcmlhYmxlIGJhc2VkIG9uIHNldmVyYWwgZmFjdG9ycywgYWxsIG9mIHdoaWNoIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBhcyB3ZWxsLiBTaW1pbGFybHksIGluIGBpb19yZWN2YCwgZXZlcnl0aGluZyBzZWVtcyB3ZWxsIGluaXRpYWxpemVkLlxuXG5SZWdhcmRpbmcgcG90ZW50aWFsIGluZm8gbGVha3MgdmlhIG5ldHdvcmsgcmVjZWl2ZSwgdGhlIG5ldCBsYXllciBpcyBmaWxsaW5nIHRoZSB1c2VyIGJ1ZmZlciBkaXJlY3RseSwgYW5kIGBNU0dfVFJVTkNgIGlzIGhhbmRsZWQgY29ycmVjdGx5LiBgTVNHX1RSVU5DYCBtZWFucyB0aGF0IHRoZSB1c2VyIGlzIHJlcXVlc3RpbmcgdGhlIHRydW5jYXRlZCBwYWNrZXQgbGVuZ3RoIGluIHRoZSBDUUUgcmVzdWx0LCB3aGljaCBpcyB3aGF0IHRoZXkgZ2V0LiBUaGUgbmV0IGxheWVyIGhhcyBoYW5kbGVkIHRoZSBidWZmZXIgc2l6ZSBhbmQgdHJ1bmNhdGlvbiBjb3JyZWN0bHkuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCB0aGF0IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0LCBvciBwYWRkaW5nIGxlYWtzIGluIHRoZXNlIGZ1bmN0aW9ucy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuXG5cblRoZSBwYXRjaCBpdHNlbGYgYXBwZWFycyB0byBhZGRyZXNzIGFuIGlzc3VlIHdoZXJlIGJ1ZmZlciBhY2NvdW50aW5nIChzcGVjaWZpY2FsbHksIGhvdyBtYW55IGJ5dGVzIGhhdmUgYmVlbiByZWNlaXZlZCBpbiB0aGUgYnVmZmVyIHJpbmcpIGNvdWxkIG92ZXJzaG9vdCB0aGUgYWN0dWFsIGJ1ZmZlciBsZW5ndGggaWYgYE1TR19UUlVOQ2Agd2FzIHJldHVybmVkLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIHRoZSByYXcgYHJldGAgdmFsdWUgKHdoaWNoIGNvdWxkIGJlIGxhcmdlciB0aGFuIHRoZSBidWZmZXIgc2l6ZSBgbGVuYCkgaW5zdGVhZCBvZiBgbGVuYCBmb3IgYnVmZmVyIHJpbmcgbWFuYWdlbWVudCAoaW4gYGlvX3B1dF9rYnVmYCAvIGBpb19wdXRfa2J1ZnNgKS4gVGhpcyBsZWQgdG8gb3V0LW9mLWJvdW5kcyBjb25zdW1wdGlvbiBvZiByaW5nIGJ1ZmZlciBlbnRyaWVzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGluIGBpb19idW5kbGVfbmJ1ZnNgLiBUaGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoaXMgbGVuZ3RoIGlzIGNvcnJlY3RseSBib3VuZGVkIGJ5IHRoZSBidWZmZXIgc2l6ZSwgcHJldmVudGluZyBzdWNoIGVycm9ycy4gVGhpcyBpcyBhIGJ1ZmZlciBtYW5hZ2VtZW50IGFuZCBib3VuZHMgaXNzdWUsIHdoaWNoIGlzIHByZWNpc2VseSB3aGF0IEtBU0FOIGFuZCBhc3NlcnRpb25zIGFyZSBkZXNpZ25lZCB0byBjYXRjaCwgYW5kIG5vdCBhbiBpc3N1ZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuXG5cbkkndmUgZG91YmxlLWNoZWNrZWQ6IG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9uLCBubyBwYWRkaW5nIGxlYWtzLCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLlxuXG5JJ20gY29uZmlkZW50IHdlIGNhbiBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLiBJdCdzIGEgYnVmZmVyIG1hbmFnZW1lbnQgcHJvYmxlbSwgbm90IGEgS01TQU4gaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzQ3LCJPdXRwdXRUb2tlbnMiOjIwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzoyODoxMC42NDA4MTMwNTJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgbGVuZ3RoIGFjY291bnRpbmcgaW4gaW9fdXJpbmcncyByZWN2IGFuZCByZWN2bXNnIHBhdGhzIHdoZW4gTVNHX1RSVU5DIGlzIHVzZWQuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhICdjb25zdW1lZCcgdmFyaWFibGUgdG8gZW5zdXJlIHRoYXQgYnVmZmVyIHJpbmcgY29tbWl0dGluZyBhbmQgYnVuZGxlIGJ1ZmZlciBjb3VudGluZyAoaW9fYnVuZGxlX25idWZzKSBvbmx5IGNvbnN1bWUgdXAgdG8gdGhlIGFjdHVhbCBidWZmZXIgY2FwYWNpdHkgKCdsZW4nKSByYXRoZXIgdGhhbiB0aGUgdHJ1bmNhdGVkIHRvdGFsIHBhY2tldCBsZW5ndGggKCdyZXQnKS5cXG5cXG5BbGwgbmV3IGFuZCBtb2RpZmllZCB2YXJpYWJsZXMgKCdsZW4nLCAnY29uc3VtZWQnKSBhcmUgc3RyaWN0bHkgaW5pdGlhbGl6ZWQgYW5kIGFzc2lnbmVkIGJlZm9yZSB1c2UuIFRoZSBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgbGVhayB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXJzcGFjZS4gQW55IHJpc2tzIHJlbGF0ZWQgdG8gYnVmZmVyIG92ZXItY29uc3VtcHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpdGVyIGluZGV4aW5nIGluIGlvX2J1bmRsZV9uYnVmcyBmYWxsIHVuZGVyIGJvdW5kcy1jaGVja2luZyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYnVmZmVyIGxlbmd0aCBhY2NvdW50aW5nIGluIGlvX3VyaW5nJ3MgcmVjdiBhbmQgcmVjdm1zZyBwYXRocyB3aGVuIE1TR19UUlVOQyBpcyB1c2VkLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSAnY29uc3VtZWQnIHZhcmlhYmxlIHRvIGVuc3VyZSB0aGF0IGJ1ZmZlciByaW5nIGNvbW1pdHRpbmcgYW5kIGJ1bmRsZSBidWZmZXIgY291bnRpbmcgKGlvX2J1bmRsZV9uYnVmcykgb25seSBjb25zdW1lIHVwIHRvIHRoZSBhY3R1YWwgYnVmZmVyIGNhcGFjaXR5ICgnbGVuJykgcmF0aGVyIHRoYW4gdGhlIHRydW5jYXRlZCB0b3RhbCBwYWNrZXQgbGVuZ3RoICgncmV0JykuXFxuXFxuQWxsIG5ldyBhbmQgbW9kaWZpZWQgdmFyaWFibGVzICgnbGVuJywgJ2NvbnN1bWVkJykgYXJlIHN0cmljdGx5IGluaXRpYWxpemVkIGFuZCBhc3NpZ25lZCBiZWZvcmUgdXNlLiBUaGUgbG9naWMgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIGxlYWsgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2Vyc3BhY2UuIEFueSByaXNrcyByZWxhdGVkIHRvIGJ1ZmZlciBvdmVyLWNvbnN1bXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXRlciBpbmRleGluZyBpbiBpb19idW5kbGVfbmJ1ZnMgZmFsbCB1bmRlciBib3VuZHMtY2hlY2tpbmcgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow88q6x[1] Phase: Succeeded StartedAt: 2026-09-03 23:28:22 +0000 UTC FinishedAt: 2026-09-03 23:28:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 23:28:22 +0000 UTC FinishedAt: 2026-09-03 23:28:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2] Phase: Succeeded StartedAt: 2026-09-03 23:28:22 +0000 UTC FinishedAt: 2026-09-04 00:05:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-09-03 23:28:22 +0000 UTC FinishedAt: 2026-09-04 00:05:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","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-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 23:28:22 +0000 UTC FinishedAt: 2026-09-03 23:28:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 23:28:22 +0000 UTC FinishedAt: 2026-09-03 23:28:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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-workflow88q6x/series-workflow88q6x-convert-artifact-349930087/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 23:28:32 +0000 UTC FinishedAt: 2026-09-03 23:44:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 23:28:32 +0000 UTC FinishedAt: 2026-09-03 23:44:20 +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:*8dfe5565-e4ac-476a-a239-667af60056ed,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-workflow88q6x/series-workflow88q6x-convert-artifact-349930087/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": "1cf3b1a3-30d0-4c55-b4ea-ed7068bcc03f", "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-workflow88q6x/series-workflow88q6x-build-action-328628477/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 23:28:32 +0000 UTC FinishedAt: 2026-09-03 23:44:10 +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:*8dfe5565-e4ac-476a-a239-667af60056ed,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-workflow88q6x/series-workflow88q6x-convert-artifact-349930087/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": "1cf3b1a3-30d0-4c55-b4ea-ed7068bcc03f", "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-workflow88q6x/series-workflow88q6x-build-action-328628477/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 23:44:20 +0000 UTC FinishedAt: 2026-09-03 23:44:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 23:44:20 +0000 UTC FinishedAt: 2026-09-03 23:44:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 23:44:20 +0000 UTC FinishedAt: 2026-09-03 23:44:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 23:44:20 +0000 UTC FinishedAt: 2026-09-03 23:44:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","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-workflow88q6x/series-workflow88q6x-convert-artifact-2236318742/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 23:44:30 +0000 UTC FinishedAt: 2026-09-03 23:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 23:44:30 +0000 UTC FinishedAt: 2026-09-03 23:46:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1cf3b1a3-30d0-4c55-b4ea-ed7068bcc03f,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-workflow88q6x/series-workflow88q6x-build-action-328628477/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-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 23:46:24 +0000 UTC FinishedAt: 2026-09-03 23:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 23:46:24 +0000 UTC FinishedAt: 2026-09-03 23:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 23:46:24 +0000 UTC FinishedAt: 2026-09-04 00:02:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 23:46:24 +0000 UTC FinishedAt: 2026-09-04 00:02:58 +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:*8dfe5565-e4ac-476a-a239-667af60056ed,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-workflow88q6x/series-workflow88q6x-convert-artifact-2236318742/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": "970c0ae2-ab91-4e36-9dba-86cbcf637a75", "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-workflow88q6x/series-workflow88q6x-build-action-4015670554/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 23:46:24 +0000 UTC FinishedAt: 2026-09-04 00:02:47 +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:*8dfe5565-e4ac-476a-a239-667af60056ed,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-workflow88q6x/series-workflow88q6x-convert-artifact-2236318742/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": "970c0ae2-ab91-4e36-9dba-86cbcf637a75", "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-workflow88q6x/series-workflow88q6x-build-action-4015670554/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 00:02:58 +0000 UTC FinishedAt: 2026-09-04 00:02:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 00:02:58 +0000 UTC FinishedAt: 2026-09-04 00:02:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 00:02:58 +0000 UTC FinishedAt: 2026-09-04 00:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 00:02:58 +0000 UTC FinishedAt: 2026-09-04 00:04:40 +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:*970c0ae2-ab91-4e36-9dba-86cbcf637a75,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-workflow88q6x/series-workflow88q6x-build-action-4015670554/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-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-09-04 00:04:54 +0000 UTC FinishedAt: 2026-09-04 00:05:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","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: Failed StartedAt: 2026-09-04 00:04:54 +0000 UTC FinishedAt: 2026-09-04 00:05:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"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:*1cf3b1a3-30d0-4c55-b4ea-ed7068bcc03f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*970c0ae2-ab91-4e36-9dba-86cbcf637a75,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-workflow88q6x/series-workflow88q6x-build-action-328628477/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-workflow88q6x/series-workflow88q6x-build-action-4015670554/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 00:04:54 +0000 UTC FinishedAt: 2026-09-04 00:05:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 00:04:54 +0000 UTC FinishedAt: 2026-09-04 00:04:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 00:04:54 +0000 UTC FinishedAt: 2026-09-04 00:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 00:04:54 +0000 UTC FinishedAt: 2026-09-04 00:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 00:04:54 +0000 UTC FinishedAt: 2026-09-04 00:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow88q6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"5783d4c2-0547-49b9-b4fa-9434ee1276bc","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: Error StartedAt: 2026-09-04 00:05:17 +0000 UTC FinishedAt: 2026-09-04 00:05:18 +0000 UTC Input: nil Output: nil